ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMTRiZmEKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMzAgQEAKKyMKKyMgTk9URSEgRG9uJ3QgYWRkIGZpbGVzIHRoYXQgYXJlIGdlbmVyYXRlZCBpbiBzcGVjaWZpYworIyBzdWJkaXJlY3RvcmllcyBoZXJlLiBBZGQgdGhlbSBpbiB0aGUgIi5naXRpZ25vcmUiIGZpbGUKKyMgaW4gdGhhdCBzdWJkaXJlY3RvcnkgaW5zdGVhZC4KKyMKKyMgTm9ybWFsIHJ1bGVzCisjCisuKgorKi5vCisqLmEKKyoucworKi5rbworKi5tb2QuYworCisjCisjIFRvcC1sZXZlbCBnZW5lcmljIGZpbGVzCisjCit2bWxpbnV4KgorU3lzdGVtLm1hcAorTW9kdWxlLnN5bXZlcnMKKworIworIyBHZW5lcmF0ZWQgaW5jbHVkZSBmaWxlcworIworaW5jbHVkZS9hc20KK2luY2x1ZGUvY29uZmlnCitpbmNsdWRlL2xpbnV4L2F1dG9jb25mLmgKK2luY2x1ZGUvbGludXgvY29tcGlsZS5oCitpbmNsdWRlL2xpbnV4L3ZlcnNpb24uaAorCmRpZmYgLS1naXQgYS9DUkVESVRTIGIvQ1JFRElUUwppbmRleCBmNTUzZjhjLi5hMzQ3NTIwIDEwMDY0NAotLS0gYS9DUkVESVRTCisrKyBiL0NSRURJVFMKQEAgLTIyMTEsNiArMjIxMSwxNSBAQAogUzogKGFkZHJlc3MgYXZhaWxhYmxlIG9uIHJlcXVlc3QpCiBTOiBVU0EKIAorTjogSWFuIE1jRG9uYWxkCitFOiBpYW00QGNzLndhaWthdG8uYWMubnoKK0U6IGltY2RuemxAZ21haWwuY29tCitXOiBodHRwOi8vd2FuZC5uZXQubnovfmlhbTQKK1c6IGh0dHA6Ly9pbWNkbnpsLmJsb2dzcG90LmNvbQorRDogRENDUCwgQ0NJRDMKK1M6IEhhbWlsdG9uCitTOiBOZXcgWmVhbGFuZAorCiBOOiBQYXRyaWNrIE1jSGFyZHkKIEU6IGthYmVyQHRyYXNoLm5ldAogUDogMTAyNEQvMTIxNTVFODAgQjEyOCA3REU2IEZGMEEgQzJCMiA0OEJFICBBQjRDIEM5RDQgOTY0RSAxMjE1IDVFODAKQEAgLTIyNDYsMTkgKzIyNTUsMTIgQEAKIFM6IEdlcm1hbnkKIAogTjogQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvCi1FOiBhY21lQGNvbmVjdGl2YS5jb20uYnIKLUU6IGFjbWVAa2VybmVsLm9yZwotRTogYWNtZUBnbnUub3JnCi1XOiBodHRwOi8vYmF6YXIyLmNvbmVjdGl2YS5jb20uYnIvfmFjbWUKLVc6IGh0dHA6Ly9hZHZvZ2F0by5vcmcvcGVyc29uL2FjbWUKK0U6IGFjbWVAbWFuZHJpdmEuY29tCitFOiBhY21lQGdob3N0cHJvdG9jb2xzLm5ldAorVzogaHR0cDovL29vcHMuZ2hvc3Rwcm90b2NvbHMubmV0OjgxL2Jsb2cvCiBQOiAxMDI0RC85MjI0REYwMSBENURGIEUzQkIgRTNDOCBCQ0JCIEY4QUQgIDg0MUEgQjZBQiA0NjgxIDkyMjQgREYwMQotRDogd2Fucm91dGVyIGhhY2tpbmcKLUQ6IG1pc2MgTWFrZWZpbGUsIENvbmZpZy5pbiwgZHJpdmVycyBhbmQgbmV0d29yayBzdGFja3MgZml4ZXMKLUQ6IElQWCAmIExMQyBuZXR3b3JrIHN0YWNrcyBtYWludGFpbmVyCi1EOiBDeWNsb20gMlggc3luY2hyb25vdXMgY2FyZCBkcml2ZXIKLUQ6IHdsMzUwMSBQQ01DSUEgd2lyZWxlc3MgY2FyZCBkcml2ZXIKLUQ6IGkxOG4gZm9yIG1pbmljb20sIG5ldC10b29scywgdXRpbC1saW51eCwgZmV0Y2htYWlsLCBldGMKLVM6IENvbmVjdGl2YSBTLkEuCitEOiBJUFgsIExMQywgRENDUCwgY3ljMngsIHdsMzUwMV9jcywgbmV0LyBoYWNrcworUzogTWFuZHJpdmEKIFM6IFIuIFRvY2FudGlucywgODkgLSBDcmlzdG8gUmVpCiBTOiA4MDA1MC00MzAgLSBDdXJpdGliYSAtIFBhcmFu4QogUzogQnJhemlsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0NoYW5nZXMgYi9Eb2N1bWVudGF0aW9uL0NoYW5nZXMKaW5kZXggNWVhYWIwNC4uMjcyMzJiZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9DaGFuZ2VzCisrKyBiL0RvY3VtZW50YXRpb24vQ2hhbmdlcwpAQCAtMjM3LDYgKzIzNywxMiBAQAogdWRldiBpcyBhIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiBmb3IgcG9wdWxhdGluZyAvZGV2IGR5bmFtaWNhbGx5IHdpdGgKIG9ubHkgZW50cmllcyBmb3IgZGV2aWNlcyBhY3R1YWxseSBwcmVzZW50LiB1ZGV2IHJlcGxhY2VzIGRldmZzLgogCitGVVNFCistLS0tCisKK05lZWRzIGxpYmZ1c2UgMi40LjAgb3IgbGF0ZXIuICBBYnNvbHV0ZSBtaW5pbXVtIGlzIDIuMy4wIGJ1dCBtb3VudAorb3B0aW9ucyAnZGlyZWN0X2lvJyBhbmQgJ2tlcm5lbF9jYWNoZScgd29uJ3Qgd29yay4KKwogTmV0d29ya2luZwogPT09PT09PT09PQogCkBAIC0zOTAsNiArMzk2LDEwIEBACiAtLS0tCiBvIDxodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL2tlcm5lbC9ob3RwbHVnL3VkZXYuaHRtbD4KIAorRlVTRQorLS0tLQorbyA8aHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9mdXNlPgorCiBOZXR3b3JraW5nCiAqKioqKioqKioqCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUgYi9Eb2N1bWVudGF0aW9uL0NvZGluZ1N0eWxlCmluZGV4IDIyZTVmOTAuLmViN2RiM2MgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUKKysrIGIvRG9jdW1lbnRhdGlvbi9Db2RpbmdTdHlsZQpAQCAtNDEwLDcgKzQxMCwyNiBAQAogUHJpbnRpbmcgbnVtYmVycyBpbiBwYXJlbnRoZXNlcyAoJWQpIGFkZHMgbm8gdmFsdWUgYW5kIHNob3VsZCBiZSBhdm9pZGVkLgogCiAKLQkJQ2hhcHRlciAxMzogUmVmZXJlbmNlcworCQlDaGFwdGVyIDEzOiBBbGxvY2F0aW5nIG1lbW9yeQorCitUaGUga2VybmVsIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0b3JzOgora21hbGxvYygpLCBremFsbG9jKCksIGtjYWxsb2MoKSwgYW5kIHZtYWxsb2MoKS4gIFBsZWFzZSByZWZlciB0byB0aGUgQVBJCitkb2N1bWVudGF0aW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIGFib3V0IHRoZW0uCisKK1RoZSBwcmVmZXJyZWQgZm9ybSBmb3IgcGFzc2luZyBhIHNpemUgb2YgYSBzdHJ1Y3QgaXMgdGhlIGZvbGxvd2luZzoKKworCXAgPSBrbWFsbG9jKHNpemVvZigqcCksIC4uLik7CisKK1RoZSBhbHRlcm5hdGl2ZSBmb3JtIHdoZXJlIHN0cnVjdCBuYW1lIGlzIHNwZWxsZWQgb3V0IGh1cnRzIHJlYWRhYmlsaXR5IGFuZAoraW50cm9kdWNlcyBhbiBvcHBvcnR1bml0eSBmb3IgYSBidWcgd2hlbiB0aGUgcG9pbnRlciB2YXJpYWJsZSB0eXBlIGlzIGNoYW5nZWQKK2J1dCB0aGUgY29ycmVzcG9uZGluZyBzaXplb2YgdGhhdCBpcyBwYXNzZWQgdG8gYSBtZW1vcnkgYWxsb2NhdG9yIGlzIG5vdC4KKworQ2FzdGluZyB0aGUgcmV0dXJuIHZhbHVlIHdoaWNoIGlzIGEgdm9pZCBwb2ludGVyIGlzIHJlZHVuZGFudC4gVGhlIGNvbnZlcnNpb24KK2Zyb20gdm9pZCBwb2ludGVyIHRvIGFueSBvdGhlciBwb2ludGVyIHR5cGUgaXMgZ3VhcmFudGVlZCBieSB0aGUgQyBwcm9ncmFtbWluZworbGFuZ3VhZ2UuCisKKworCQlDaGFwdGVyIDE0OiBSZWZlcmVuY2VzCiAKIFRoZSBDIFByb2dyYW1taW5nIExhbmd1YWdlLCBTZWNvbmQgRWRpdGlvbgogYnkgQnJpYW4gVy4gS2VybmlnaGFuIGFuZCBEZW5uaXMgTS4gUml0Y2hpZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtaGFja2luZy50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1oYWNraW5nLnRtcGwKaW5kZXggNjM2N2JiYS4uNTgyMDMyZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1oYWNraW5nLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1oYWNraW5nLnRtcGwKQEAgLTExMDUsNyArMTEwNSw3IEBACiAgICAgPC9saXN0aXRlbT4KICAgICA8bGlzdGl0ZW0+CiAgICAgIDxwYXJhPgotICAgICAgRnVuY3Rpb24gbmFtZXMgYXMgc3RyaW5ncyAoX19mdW5jX18pLgorICAgICAgRnVuY3Rpb24gbmFtZXMgYXMgc3RyaW5ncyAoX19GVU5DVElPTl9fKS4KICAgICAgPC9wYXJhPgogICAgIDwvbGlzdGl0ZW0+CiAgICAgPGxpc3RpdGVtPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKaW5kZXggN2Y0M2IwNC4uMjM3ZDU0YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcworKysgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCkBAIC0zMDEsOCArMzAxLDg0IEBACiBwb2ludCBvdXQgc29tZSBzcGVjaWFsIGRldGFpbCBhYm91dCB0aGUgc2lnbi1vZmYuIAogCiAKKzEyKSBUaGUgY2Fub25pY2FsIHBhdGNoIGZvcm1hdAogCi0xMikgTW9yZSByZWZlcmVuY2VzIGZvciBzdWJtaXR0aW5nIHBhdGNoZXMKK1RoZSBjYW5vbmljYWwgcGF0Y2ggc3ViamVjdCBsaW5lIGlzOgorCisgICAgU3ViamVjdDogW1BBVENIIDAwMS8xMjNdIHN1YnN5c3RlbTogc3VtbWFyeSBwaHJhc2UKKworVGhlIGNhbm9uaWNhbCBwYXRjaCBtZXNzYWdlIGJvZHkgY29udGFpbnMgdGhlIGZvbGxvd2luZzoKKworICAtIEEgImZyb20iIGxpbmUgc3BlY2lmeWluZyB0aGUgcGF0Y2ggYXV0aG9yLgorCisgIC0gQW4gZW1wdHkgbGluZS4KKworICAtIFRoZSBib2R5IG9mIHRoZSBleHBsYW5hdGlvbiwgd2hpY2ggd2lsbCBiZSBjb3BpZWQgdG8gdGhlCisgICAgcGVybWFuZW50IGNoYW5nZWxvZyB0byBkZXNjcmliZSB0aGlzIHBhdGNoLgorCisgIC0gVGhlICJTaWduZWQtb2ZmLWJ5OiIgbGluZXMsIGRlc2NyaWJlZCBhYm92ZSwgd2hpY2ggd2lsbAorICAgIGFsc28gZ28gaW4gdGhlIGNoYW5nZWxvZy4KKworICAtIEEgbWFya2VyIGxpbmUgY29udGFpbmluZyBzaW1wbHkgIi0tLSIuCisKKyAgLSBBbnkgYWRkaXRpb25hbCBjb21tZW50cyBub3Qgc3VpdGFibGUgZm9yIHRoZSBjaGFuZ2Vsb2cuCisKKyAgLSBUaGUgYWN0dWFsIHBhdGNoIChkaWZmIG91dHB1dCkuCisKK1RoZSBTdWJqZWN0IGxpbmUgZm9ybWF0IG1ha2VzIGl0IHZlcnkgZWFzeSB0byBzb3J0IHRoZSBlbWFpbHMKK2FscGhhYmV0aWNhbGx5IGJ5IHN1YmplY3QgbGluZSAtIHByZXR0eSBtdWNoIGFueSBlbWFpbCByZWFkZXIgd2lsbAorc3VwcG9ydCB0aGF0IC0gc2luY2UgYmVjYXVzZSB0aGUgc2VxdWVuY2UgbnVtYmVyIGlzIHplcm8tcGFkZGVkLAordGhlIG51bWVyaWNhbCBhbmQgYWxwaGFiZXRpYyBzb3J0IGlzIHRoZSBzYW1lLgorCitUaGUgInN1YnN5c3RlbSIgaW4gdGhlIGVtYWlsJ3MgU3ViamVjdCBzaG91bGQgaWRlbnRpZnkgd2hpY2gKK2FyZWEgb3Igc3Vic3lzdGVtIG9mIHRoZSBrZXJuZWwgaXMgYmVpbmcgcGF0Y2hlZC4KKworVGhlICJzdW1tYXJ5IHBocmFzZSIgaW4gdGhlIGVtYWlsJ3MgU3ViamVjdCBzaG91bGQgY29uY2lzZWx5CitkZXNjcmliZSB0aGUgcGF0Y2ggd2hpY2ggdGhhdCBlbWFpbCBjb250YWlucy4gIFRoZSAic3VtbWFyeQorcGhyYXNlIiBzaG91bGQgbm90IGJlIGEgZmlsZW5hbWUuICBEbyBub3QgdXNlIHRoZSBzYW1lICJzdW1tYXJ5CitwaHJhc2UiIGZvciBldmVyeSBwYXRjaCBpbiBhIHdob2xlIHBhdGNoIHNlcmllcy4KKworQmVhciBpbiBtaW5kIHRoYXQgdGhlICJzdW1tYXJ5IHBocmFzZSIgb2YgeW91ciBlbWFpbCBiZWNvbWVzCithIGdsb2JhbGx5LXVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGF0IHBhdGNoLiAgSXQgcHJvcGFnYXRlcworYWxsIHRoZSB3YXkgaW50byB0aGUgZ2l0IGNoYW5nZWxvZy4gIFRoZSAic3VtbWFyeSBwaHJhc2UiIG1heQorbGF0ZXIgYmUgdXNlZCBpbiBkZXZlbG9wZXIgZGlzY3Vzc2lvbnMgd2hpY2ggcmVmZXIgdG8gdGhlIHBhdGNoLgorUGVvcGxlIHdpbGwgd2FudCB0byBnb29nbGUgZm9yIHRoZSAic3VtbWFyeSBwaHJhc2UiIHRvIHJlYWQKK2Rpc2N1c3Npb24gcmVnYXJkaW5nIHRoYXQgcGF0Y2guCisKK0EgY291cGxlIG9mIGV4YW1wbGUgU3ViamVjdHM6CisKKyAgICBTdWJqZWN0OiBbcGF0Y2ggMi81XSBleHQyOiBpbXByb3ZlIHNjYWxhYmlsaXR5IG9mIGJpdG1hcCBzZWFyY2hpbmcKKyAgICBTdWJqZWN0OiBbUEFUQ0h2MiAwMDEvMjA3XSB4ODY6IGZpeCBlZmxhZ3MgdHJhY2tpbmcKKworVGhlICJmcm9tIiBsaW5lIG11c3QgYmUgdGhlIHZlcnkgZmlyc3QgbGluZSBpbiB0aGUgbWVzc2FnZSBib2R5LAorYW5kIGhhcyB0aGUgZm9ybToKKworICAgICAgICBGcm9tOiBPcmlnaW5hbCBBdXRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKworVGhlICJmcm9tIiBsaW5lIHNwZWNpZmllcyB3aG8gd2lsbCBiZSBjcmVkaXRlZCBhcyB0aGUgYXV0aG9yIG9mIHRoZQorcGF0Y2ggaW4gdGhlIHBlcm1hbmVudCBjaGFuZ2Vsb2cuICBJZiB0aGUgImZyb20iIGxpbmUgaXMgbWlzc2luZywKK3RoZW4gdGhlICJGcm9tOiIgbGluZSBmcm9tIHRoZSBlbWFpbCBoZWFkZXIgd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZQordGhlIHBhdGNoIGF1dGhvciBpbiB0aGUgY2hhbmdlbG9nLgorCitUaGUgZXhwbGFuYXRpb24gYm9keSB3aWxsIGJlIGNvbW1pdHRlZCB0byB0aGUgcGVybWFuZW50IHNvdXJjZQorY2hhbmdlbG9nLCBzbyBzaG91bGQgbWFrZSBzZW5zZSB0byBhIGNvbXBldGVudCByZWFkZXIgd2hvIGhhcyBsb25nCitzaW5jZSBmb3Jnb3R0ZW4gdGhlIGltbWVkaWF0ZSBkZXRhaWxzIG9mIHRoZSBkaXNjdXNzaW9uIHRoYXQgbWlnaHQKK2hhdmUgbGVkIHRvIHRoaXMgcGF0Y2guCisKK1RoZSAiLS0tIiBtYXJrZXIgbGluZSBzZXJ2ZXMgdGhlIGVzc2VudGlhbCBwdXJwb3NlIG9mIG1hcmtpbmcgZm9yIHBhdGNoCitoYW5kbGluZyB0b29scyB3aGVyZSB0aGUgY2hhbmdlbG9nIG1lc3NhZ2UgZW5kcy4KKworT25lIGdvb2QgdXNlIGZvciB0aGUgYWRkaXRpb25hbCBjb21tZW50cyBhZnRlciB0aGUgIi0tLSIgbWFya2VyIGlzIGZvcgorYSBkaWZmc3RhdCwgdG8gc2hvdyB3aGF0IGZpbGVzIGhhdmUgY2hhbmdlZCwgYW5kIHRoZSBudW1iZXIgb2YgaW5zZXJ0ZWQKK2FuZCBkZWxldGVkIGxpbmVzIHBlciBmaWxlLiAgQSBkaWZmc3RhdCBpcyBlc3BlY2lhbGx5IHVzZWZ1bCBvbiBiaWdnZXIKK3BhdGNoZXMuICBPdGhlciBjb21tZW50cyByZWxldmFudCBvbmx5IHRvIHRoZSBtb21lbnQgb3IgdGhlIG1haW50YWluZXIsCitub3Qgc3VpdGFibGUgZm9yIHRoZSBwZXJtYW5lbnQgY2hhbmdlbG9nLCBzaG91bGQgYWxzbyBnbyBoZXJlLgorCitTZWUgbW9yZSBkZXRhaWxzIG9uIHRoZSBwcm9wZXIgcGF0Y2ggZm9ybWF0IGluIHRoZSBmb2xsb3dpbmcKK3JlZmVyZW5jZXMuCisKKworMTMpIE1vcmUgcmVmZXJlbmNlcyBmb3Igc3VibWl0dGluZyBwYXRjaGVzCiAKIEFuZHJldyBNb3J0b24sICJUaGUgcGVyZmVjdCBwYXRjaCIgKHRwcCkuCiAgIDxodHRwOi8vd3d3LnppcC5jb20uYXUvfmFrcG0vbGludXgvcGF0Y2hlcy9zdHVmZi90cHAudHh0PgpAQCAtMzEwLDYgKzM4NiwxNCBAQAogSmVmZiBHYXJ6aWssICJMaW51eCBrZXJuZWwgcGF0Y2ggc3VibWlzc2lvbiBmb3JtYXQuIgogICA8aHR0cDovL2xpbnV4Lnl5ei51cy9wYXRjaC1mb3JtYXQuaHRtbD4KIAorR3JlZyBLSCwgIkhvdyB0byBwaXNzIG9mZiBhIGtlcm5lbCBzdWJzeXN0ZW0gbWFpbnRhaW5lciIKKyAgPGh0dHA6Ly93d3cua3JvYWguY29tL2xvZy8yMDA1LzAzLzMxLz4KKworS2VybmVsIERvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUKKyAgPGh0dHA6Ly9zb3NkZy5vcmcvfmNveXdvbGYvbHhyL3NvdXJjZS9Eb2N1bWVudGF0aW9uL0NvZGluZ1N0eWxlPgorCitMaW51cyBUb3J2YWxkJ3MgbWFpbCBvbiB0aGUgY2Fub25pY2FsIHBhdGNoIGZvcm1hdDoKKyAgPGh0dHA6Ly9sa21sLm9yZy9sa21sLzIwMDUvNC83LzE4Mz4KIAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25uZWN0b3IvY29ubmVjdG9yLnR4dCBiL0RvY3VtZW50YXRpb24vY29ubmVjdG9yL2Nvbm5lY3Rvci50eHQKaW5kZXggNTRhMGExNGIuLjU3YTMxNGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29ubmVjdG9yL2Nvbm5lY3Rvci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25uZWN0b3IvY29ubmVjdG9yLnR4dApAQCAtMTMxLDMgKzEzMSw0NyBAQAogYmUgbG9zdCBkdWUgdG8gbWVtb3J5IHByZXNzdXJlIG9yIHByb2Nlc3MnIHJlY2VpdmluZyBxdWV1ZSBvdmVyZmxvd2VkLAogc28gY2FsbGVyIGlzIHdhcm5lZCBtdXN0IGJlIHByZXBhcmVkLiBUaGF0IGlzIHdoeSBzdHJ1Y3QgY25fbXNnIFttYWluCiBjb25uZWN0b3IncyBtZXNzYWdlIGhlYWRlcl0gY29udGFpbnMgdTMyIHNlcSBhbmQgdTMyIGFjayBmaWVsZHMuCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK1VzZXJzcGFjZSB1c2FnZS4KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKzIuNi4xNCBoYXMgYSBuZXcgbmV0bGluayBzb2NrZXQgaW1wbGVtZW50YXRpb24sIHdoaWNoIGJ5IGRlZmF1bHQgZG9lcyBub3QKK2FsbG93IHRvIHNlbmQgZGF0YSB0byBuZXRsaW5rIGdyb3VwcyBvdGhlciB0aGFuIDEuCitTbywgaWYgdG8gdXNlIG5ldGxpbmsgc29ja2V0IChmb3IgZXhhbXBsZSB1c2luZyBjb25uZWN0b3IpIAord2l0aCBkaWZmZXJlbnQgZ3JvdXAgbnVtYmVyIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiBtdXN0IHN1YnNjcmliZSB0byAKK3RoYXQgZ3JvdXAuIEl0IGNhbiBiZSBhY2hpZXZlZCBieSBmb2xsb3dpbmcgcHNldWRvY29kZToKKworcyA9IHNvY2tldChQRl9ORVRMSU5LLCBTT0NLX0RHUkFNLCBORVRMSU5LX0NPTk5FQ1RPUik7CisKK2xfbG9jYWwubmxfZmFtaWx5ID0gQUZfTkVUTElOSzsKK2xfbG9jYWwubmxfZ3JvdXBzID0gMTIzNDU7CitsX2xvY2FsLm5sX3BpZCA9IDA7CisKK2lmIChiaW5kKHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikmbF9sb2NhbCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9ubCkpID09IC0xKSB7CisJcGVycm9yKCJiaW5kIik7CisJY2xvc2Uocyk7CisJcmV0dXJuIC0xOworfQorCit7CisJaW50IG9uID0gbF9sb2NhbC5ubF9ncm91cHM7CisJc2V0c29ja29wdChzLCAyNzAsIDEsICZvbiwgc2l6ZW9mKG9uKSk7Cit9CisKK1doZXJlIDI3MCBhYm92ZSBpcyBTT0xfTkVUTElOSywgYW5kIDEgaXMgYSBORVRMSU5LX0FERF9NRU1CRVJTSElQIHNvY2tldAorb3B0aW9uLiBUbyBkcm9wIG11bHRpY2FzdCBzdWJzY3JpcHRpb24gb25lIHNob3VsZCBjYWxsIGFib3ZlIHNvY2tldCBvcHRpb24KK3dpdGggTkVUTElOS19EUk9QX01FTUJFUlNISVAgcGFyYW1ldGVyIHdoaWNoIGlzIGRlZmluZWQgYXMgMC4KKworMi42LjE0IG5ldGxpbmsgY29kZSBvbmx5IGFsbG93cyB0byBzZWxlY3QgYSBncm91cCB3aGljaCBpcyBsZXNzIG9yIGVxdWFsIHRvCit0aGUgbWF4aW11bSBncm91cCBudW1iZXIsIHdoaWNoIGlzIHVzZWQgYXQgbmV0bGlua19rZXJuZWxfY3JlYXRlKCkgdGltZS4KK0luIGNhc2Ugb2YgY29ubmVjdG9yIGl0IGlzIENOX05FVExJTktfVVNFUlMgKyAweGYsIHNvIGlmIHlvdSB3YW50IHRvIHVzZQorZ3JvdXAgbnVtYmVyIDEyMzQ1LCB5b3UgbXVzdCBpbmNyZW1lbnQgQ05fTkVUTElOS19VU0VSUyB0byB0aGF0IG51bWJlci4KK0FkZGl0aW9uYWwgMHhmIG51bWJlcnMgYXJlIGFsbG9jYXRlZCB0byBiZSB1c2VkIGJ5IG5vbi1pbi1rZXJuZWwgdXNlcnMuCisKK0R1ZSB0byB0aGlzIGxpbWl0YXRpb24sIGdyb3VwIDB4ZmZmZmZmZmYgZG9lcyBub3Qgd29yayBub3csIHNvIG9uZSBjYW4KK25vdCB1c2UgYWRkL3JlbW92ZSBjb25uZWN0b3IncyBncm91cCBub3RpZmljYXRpb25zLCBidXQgYXMgZmFyIGFzIEkga25vdywgCitvbmx5IGNuX3Rlc3QuYyB0ZXN0IG1vZHVsZSB1c2VkIGl0LgorCitTb21lIHdvcmsgaW4gbmV0bGluayBhcmVhIGlzIHN0aWxsIGJlaW5nIGRvbmUsIHNvIHRoaW5ncyBjYW4gYmUgY2hhbmdlZCBpbgorMi42LjE1IHRpbWVmcmFtZSwgaWYgaXQgd2lsbCBoYXBwZW4sIGRvY3VtZW50YXRpb24gd2lsbCBiZSB1cGRhdGVkIGZvciB0aGF0CitrZXJuZWwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RlbGxfcmJ1LnR4dCBiL0RvY3VtZW50YXRpb24vZGVsbF9yYnUudHh0CmluZGV4IGJjZmE1YzMuLjk0MTM0M2EgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGVsbF9yYnUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGVsbF9yYnUudHh0CkBAIC0xMyw2ICsxMyw4IEBACiBhbmQgbm90ZWJvb2tzIChzdGFydGluZyBmcm9tIHRob3NlIHNvbGQgaW4gMjAwNSkuCiBQbGVhc2UgZ28gdG8gIGh0dHA6Ly9zdXBwb3J0LmRlbGwuY29tIHJlZ2lzdGVyIGFuZCB5b3UgY2FuIGZpbmQgaW5mbyBvbgogT3Blbk1hbmFnZSBhbmQgRGVsbCBVcGRhdGUgcGFja2FnZXMgKERVUCkuCitMaWJzbWJpb3MgY2FuIGFsc28gYmUgdXNlZCB0byB1cGRhdGUgQklPUyBvbiBEZWxsIHN5c3RlbXMgZ28gdG8KK2h0dHA6Ly9saW51eC5kZWxsLmNvbS9saWJzbWJpb3MvIGZvciBkZXRhaWxzLgogCiBEZWxsX1JCVSBkcml2ZXIgc3VwcG9ydHMgQklPUyB1cGRhdGUgdXNpbmcgdGhlIG1vbmlsb3RoaWMgaW1hZ2UgYW5kIHBhY2tldGl6ZWQKIGltYWdlIG1ldGhvZHMuIEluIGNhc2Ugb2YgbW9uaW9saXRoaWMgdGhlIGRyaXZlciBhbGxvY2F0ZXMgYSBjb250aWd1b3VzIGNodW5rCkBAIC0yMiw4ICsyNCw4IEBACiBtYWludGFpbnMgYSBsaW5rIGxpc3Qgb2YgcGFja2V0cyBmb3IgcmVhZGluZyB0aGVtIGJhY2suCiBJZiB0aGUgZGVsbF9yYnUgZHJpdmVyIGlzIHVubG9hZGVkIGFsbCB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpcyBmcmVlZC4KIAotVGhlIHJidSBkcml2ZXIgbmVlZHMgdG8gaGF2ZSBhbiBhcHBsaWNhdGlvbiB3aGljaCB3aWxsIGluZm9ybSB0aGUgQklPUyB0bwotZW5hYmxlIHRoZSB1cGRhdGUgaW4gdGhlIG5leHQgc3lzdGVtIHJlYm9vdC4KK1RoZSByYnUgZHJpdmVyIG5lZWRzIHRvIGhhdmUgYW4gYXBwbGljYXRpb24gKGFzIG1lbnRpb25lZCBhYm92ZSl3aGljaCB3aWxsCitpbmZvcm0gdGhlIEJJT1MgdG8gZW5hYmxlIHRoZSB1cGRhdGUgaW4gdGhlIG5leHQgc3lzdGVtIHJlYm9vdC4KIAogVGhlIHVzZXIgc2hvdWxkIG5vdCB1bmxvYWQgdGhlIHJidSBkcml2ZXIgYWZ0ZXIgZG93bmxvYWRpbmcgdGhlIEJJT1MgaW1hZ2UKIG9yIHVwZGF0aW5nLgpAQCAtMzMsNiArMzUsNyBAQAogL3N5cy9jbGFzcy9maXJtd2FyZS9kZWxsX3JidS9kYXRhCiAvc3lzL2RldmljZXMvcGxhdGZvcm0vZGVsbF9yYnUvaW1hZ2VfdHlwZQogL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2RlbGxfcmJ1L2RhdGEKKy9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9kZWxsX3JidS9wYWNrZXRfc2l6ZQogCiBUaGUgZHJpdmVyIHN1cHBvcnRzIHR3byB0eXBlcyBvZiB1cGRhdGUgbWVjaGFuaXNtOyBtb25vbGl0aGljIGFuZCBwYWNrZXRpemVkLgogVGhlc2UgdXBkYXRlIG1lY2hhbmlzbSBkZXBlbmRzIHVwb24gdGhlIEJJT1MgY3VycmVudGx5IHJ1bm5pbmcgb24gdGhlIHN5c3RlbS4KQEAgLTQyLDEwICs0NSwzMCBAQAogb2YgY29udGlndW91cyBtZW1vcnkgYW5kIHRoZSBCSU9TIGltYWdlIGlzIHNjYXR0ZXJlZCBpbiB0aGVzZSBwYWNrZXRzLgogCiBCeSBkZWZhdWx0IHRoZSBkcml2ZXIgdXNlcyBtb25vbGl0aGljIG1lbW9yeSBmb3IgdGhlIHVwZGF0ZSB0eXBlLiBUaGlzIGNhbiBiZQotY2hhbmdlZCB0byBjb250aWd1b3VzIGR1cmluZyB0aGUgZHJpdmVyIGxvYWQgdGltZSBieSBzcGVjaWZ5aW5nIHRoZSBsb2FkCitjaGFuZ2VkIHRvIHBhY2tldHMgZHVyaW5nIHRoZSBkcml2ZXIgbG9hZCB0aW1lIGJ5IHNwZWNpZnlpbmcgdGhlIGxvYWQKIHBhcmFtZXRlciBpbWFnZV90eXBlPXBhY2tldC4gIFRoaXMgY2FuIGFsc28gYmUgY2hhbmdlZCBsYXRlciBhcyBiZWxvdwogZWNobyBwYWNrZXQgPiAvc3lzL2RldmljZXMvcGxhdGZvcm0vZGVsbF9yYnUvaW1hZ2VfdHlwZQogCitJbiBwYWNrZXQgdXBkYXRlIG1vZGUgdGhlIHBhY2tldCBzaXplIGhhcyB0byBiZSBnaXZlbiBiZWZvcmUgYW55IHBhY2tldHMgY2FuCitiZSBkb3dubG9hZGVkLiBJdCBpcyBkb25lIGFzIGJlbG93CitlY2hvIFhYWFggPiAvc3lzL2RldmljZXMvcGxhdGZvcm0vZGVsbF9yYnUvcGFja2V0X3NpemUKK0luIHRoZSBwYWNrZXQgdXBkYXRlIG1lY2hhbmlzbSwgdGhlIHVzZXIgbmVlc2QgdG8gY3JlYXRlIGEgbmV3IGZpbGUgaGF2aW5nCitwYWNrZXRzIG9mIGRhdGEgYXJyYW5nZWQgYmFjayB0byBiYWNrLiBJdCBjYW4gYmUgZG9uZSBhcyBmb2xsb3dzCitUaGUgdXNlciBjcmVhdGVzIHBhY2tldHMgaGVhZGVyLCBnZXRzIHRoZSBjaHVuayBvZiB0aGUgQklPUyBpbWFnZSBhbmQKK3BsYWNzIGl0IG5leHQgdG8gdGhlIHBhY2tldGhlYWRlcjsgbm93LCB0aGUgcGFja2V0aGVhZGVyICsgQklPUyBpbWFnZSBjaHVuaworYWRkZWQgdG8gZ2VhdGhlciBzaG91bGQgbWF0Y2ggdGhlIHNwZWNpZmllZCBwYWNrZXRfc2l6ZS4gVGhpcyBtYWtlcyBvbmUKK3BhY2tldCwgdGhlIHVzZXIgbmVlZHMgdG8gY3JlYXRlIG1vcmUgc3VjaCBwYWNrZXRzIG91dCBvZiB0aGUgZW50aXJlIEJJT1MKK2ltYWdlIGZpbGUgYW5kIHRoZW4gYXJyYW5nZSBhbGwgdGhlc2UgcGFja2V0cyBiYWNrIHRvIGJhY2sgaW4gdG8gb25lIHNpbmdsZQorZmlsZS4KK1RoaXMgZmlsZSBpcyB0aGVuIGNvcGllZCB0byAvc3lzL2NsYXNzL2Zpcm13YXJlL2RlbGxfcmJ1L2RhdGEuCitPbmNlIHRoaXMgZmlsZSBnZXRzIHRvIHRoZSBkcml2ZXIsIHRoZSBkcml2ZXIgZXh0cmFjdHMgcGFja2V0X3NpemUgZGF0YSBmcm9tCit0aGUgZmlsZSBhbmQgc3ByZWFkcyBpdCBhY2Nyb3NzIHRoZSBwaHlzaWNhbCBtZW1vcnkgaW4gY29udGlndW91cyBwYWNrZXRfc2l6ZWQKK3NwYWNlLgorVGhpcyBtZXRob2QgbWFrZXMgc3VyZSB0aGF0IGFsbCB0aGUgcGFja2V0cyBnZXQgdG8gdGhlIGRyaXZlciBpbiBhIHNpbmdsZSBvcGVyYXRpb24uCisKK0luIG1vbm9saXRoaWMgdXBkYXRlIHRoZSB1c2VyIHNpbXBseSBnZXQgdGhlIEJJT1MgaW1hZ2UgKC5oZHIgZmlsZSkgYW5kIGNvcGllcwordG8gdGhlIGRhdGEgZmlsZSBhcyBpcyB3aXRob3V0IGFueSBjaGFuZ2UgdG8gdGhlIEJJT1MgaW1hZ2UgaXRzZWxmLgorCiBEbyB0aGUgc3RlcHMgYmVsb3cgdG8gZG93bmxvYWQgdGhlIEJJT1MgaW1hZ2UuCiAxKSBlY2hvIDEgPiAvc3lzL2NsYXNzL2Zpcm13YXJlL2RlbGxfcmJ1L2xvYWRpbmcKIDIpIGNwIGJpb3NfaW1hZ2UuaGRyIC9zeXMvY2xhc3MvZmlybXdhcmUvZGVsbF9yYnUvZGF0YQpAQCAtNTMsMjAgKzc2LDIzIEBACiAKIFRoZSAvc3lzL2NsYXNzL2Zpcm13YXJlL2RlbGxfcmJ1LyBlbnRyaWVzIHdpbGwgcmVtYWluIHRpbGwgdGhlIGZvbGxvd2luZyBpcwogZG9uZS4KLWVjaG8gLTEgPiAvc3lzL2NsYXNzL2Zpcm13YXJlL2RlbGxfcmJ1L2xvYWRpbmcKK2VjaG8gLTEgPiAvc3lzL2NsYXNzL2Zpcm13YXJlL2RlbGxfcmJ1L2xvYWRpbmcuCitVbnRpbCB0aGlzIHN0ZXAgaXMgY29tcGxldGVkIHRoZSBkcml2ZXIgY2Fubm90IGJlIHVubG9hZGVkLgorQWxzbyBlY2hvaW5nIGVpdGhlciBtb25vICxwYWNrZXQgb3IgaW5pdCBpbiB0byBpbWFnZV90eXBlIHdpbGwgZnJlZSB1cCB0aGUKK21lbW9yeSBhbGxvY2F0ZWQgYnkgdGhlIGRyaXZlci4KIAotVW50aWwgdGhpcyBzdGVwIGlzIGNvbXBsZXRlZCB0aGUgZHJpdnIgY2Fubm90IGJlIHVubG9hZGVkLgorSWYgYW4gdXNlciBieSBhY2NpZGVudCBleGVjdXRlcyBzdGVwcyAxIGFuZCAzIGFib3ZlIHdpdGhvdXQgZXhlY3V0aW5nIHN0ZXAgMjsKK2l0IHdpbGwgbWFrZSB0aGUgL3N5cy9jbGFzcy9maXJtd2FyZS9kZWxsX3JidS8gZW50cmllcyB0byBkaXNhcHBlYXIuCitUaGUgZW50cmllcyBjYW4gYmUgcmVjcmVhdGVkIGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmcKK2VjaG8gaW5pdCA+IC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9kZWxsX3JidS9pbWFnZV90eXBlCitOT1RFOiBlY2hvaW5nIGluaXQgaW4gaW1hZ2VfdHlwZSBkb2VzIG5vdCBjaGFuZ2UgaXQgb3JpZ2luYWwgdmFsdWUuCiAKIEFsc28gdGhlIGRyaXZlciBwcm92aWRlcyAvc3lzL2RldmljZXMvcGxhdGZvcm0vZGVsbF9yYnUvZGF0YSByZWFkb25seSBmaWxlIHRvCi1yZWFkIGJhY2sgdGhlIGltYWdlIGRvd25sb2FkZWQuIFRoaXMgaXMgdXNlZnVsIGluIGNhc2Ugb2YgcGFja2V0IHVwZGF0ZQotbWVjaGFuaXNtIHdoZXJlIHRoZSBhYm92ZSBzdGVwcyAxLDIsMyB3aWxsIHJlcGVhdGVkIGZvciBldmVyeSBwYWNrZXQuCi1CeSByZWFkaW5nIHRoZSAvc3lzL2RldmljZXMvcGxhdGZvcm0vZGVsbF9yYnUvZGF0YSBmaWxlIGFsbCBwYWNrZXQgZGF0YQotZG93bmxvYWRlZCBjYW4gYmUgdmVyaWZpZWQgaW4gYSBzaW5nbGUgZmlsZS4KLVRoZSBwYWNrZXRzIGFyZSBhcnJhbmdlZCBpbiB0aGlzIGZpbGUgb25lIGFmdGVyIHRoZSBvdGhlciBpbiBhIEZJRk8gb3JkZXIuCityZWFkIGJhY2sgdGhlIGltYWdlIGRvd25sb2FkZWQuCiAKIE5PVEU6Ci1UaGlzIGRyaXZlciByZXF1aXJlcyBhIHBhdGNoIGZvciBmaXJtd2FyZV9jbGFzcy5jIHdoaWNoIGhhcyB0aGUgYWRkaXRpb24KLW9mIHJlcXVlc3RfZmlybXdhcmVfbm93YWl0X25vaG90cGx1ZyBmdW5jdGlvbiB0byB3b3J0aworVGhpcyBkcml2ZXIgcmVxdWlyZXMgYSBwYXRjaCBmb3IgZmlybXdhcmVfY2xhc3MuYyB3aGljaCBoYXMgdGhlIG1vZGlmaWVkCityZXF1ZXN0X2Zpcm13YXJlX25vd2FpdCBmdW5jdGlvbi4KIEFsc28gYWZ0ZXIgdXBkYXRpbmcgdGhlIEJJT1MgaW1hZ2UgYW4gdXNlciBtZG9lIGFwcGxpY2F0aW9uIG5lZWVkcyB0byBleGVjdXRlCiBjb2RlIHdoaWNoIG1lc3NhZ2UgdGhlIEJJT1MgdXBkYXRlIHJlcXVlc3QgdG8gdGhlIEJJT1MuIFNvIG9uIHRoZSBuZXh0IHJlYm9vdAogdGhlIEJJT1Mga25vd3MgYWJvdXQgdGhlIG5ldyBpbWFnZSBkb3dubG9hZGVkIGFuZCBpdCB1cGRhdGVzIGl0IHNlbGYuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvc25hcHNob3QudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL3NuYXBzaG90LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2EyNzRmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL3NuYXBzaG90LnR4dApAQCAtMCwwICsxLDczIEBACitEZXZpY2UtbWFwcGVyIHNuYXBzaG90IHN1cHBvcnQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitEZXZpY2UtbWFwcGVyIGFsbG93cyB5b3UsIHdpdGhvdXQgbWFzc2l2ZSBkYXRhIGNvcHlpbmc6CisKKyopIFRvIGNyZWF0ZSBzbmFwc2hvdHMgb2YgYW55IGJsb2NrIGRldmljZSBpLmUuIG1vdW50YWJsZSwgc2F2ZWQgc3RhdGVzIG9mCit0aGUgYmxvY2sgZGV2aWNlIHdoaWNoIGFyZSBhbHNvIHdyaXRhYmxlIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCB0aGUKK29yaWdpbmFsIGNvbnRlbnQ7CisqKSBUbyBjcmVhdGUgZGV2aWNlICJmb3JrcyIsIGkuZS4gbXVsdGlwbGUgZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZQorc2FtZSBkYXRhIHN0cmVhbS4KKworCitJbiBib3RoIGNhc2VzLCBkbSBjb3BpZXMgb25seSB0aGUgY2h1bmtzIG9mIGRhdGEgdGhhdCBnZXQgY2hhbmdlZCBhbmQKK3VzZXMgYSBzZXBhcmF0ZSBjb3B5LW9uLXdyaXRlIChDT1cpIGJsb2NrIGRldmljZSBmb3Igc3RvcmFnZS4KKworCitUaGVyZSBhcmUgdHdvIGRtIHRhcmdldHMgYXZhaWxhYmxlOiBzbmFwc2hvdCBhbmQgc25hcHNob3Qtb3JpZ2luLgorCisqKSBzbmFwc2hvdC1vcmlnaW4gPG9yaWdpbj4KKword2hpY2ggd2lsbCBub3JtYWxseSBoYXZlIG9uZSBvciBtb3JlIHNuYXBzaG90cyBiYXNlZCBvbiBpdC4KK1lvdSBtdXN0IGNyZWF0ZSB0aGUgc25hcHNob3Qtb3JpZ2luIGRldmljZSBiZWZvcmUgeW91IGNhbiBjcmVhdGUgc25hcHNob3RzLgorUmVhZHMgd2lsbCBiZSBtYXBwZWQgZGlyZWN0bHkgdG8gdGhlIGJhY2tpbmcgZGV2aWNlLiBGb3IgZWFjaCB3cml0ZSwgdGhlCitvcmlnaW5hbCBkYXRhIHdpbGwgYmUgc2F2ZWQgaW4gdGhlIDxDT1cgZGV2aWNlPiBvZiBlYWNoIHNuYXBzaG90IHRvIGtlZXAKK2l0cyB2aXNpYmxlIGNvbnRlbnQgdW5jaGFuZ2VkLCBhdCBsZWFzdCB1bnRpbCB0aGUgPENPVyBkZXZpY2U+IGZpbGxzIHVwLgorCisKKyopIHNuYXBzaG90IDxvcmlnaW4+IDxDT1cgZGV2aWNlPiA8cGVyc2lzdGVudD8+IDxjaHVua3NpemU+CisKK0Egc25hcHNob3QgaXMgY3JlYXRlZCBvZiB0aGUgPG9yaWdpbj4gYmxvY2sgZGV2aWNlLiBDaGFuZ2VkIGNodW5rcyBvZgorPGNodW5rc2l6ZT4gc2VjdG9ycyB3aWxsIGJlIHN0b3JlZCBvbiB0aGUgPENPVyBkZXZpY2U+LiAgV3JpdGVzIHdpbGwKK29ubHkgZ28gdG8gdGhlIDxDT1cgZGV2aWNlPi4gIFJlYWRzIHdpbGwgY29tZSBmcm9tIHRoZSA8Q09XIGRldmljZT4gb3IKK2Zyb20gPG9yaWdpbj4gZm9yIHVuY2hhbmdlZCBkYXRhLiAgPENPVyBkZXZpY2U+IHdpbGwgb2Z0ZW4gYmUKK3NtYWxsZXIgdGhhbiB0aGUgb3JpZ2luIGFuZCBpZiBpdCBmaWxscyB1cCB0aGUgc25hcHNob3Qgd2lsbCBiZWNvbWUKK3VzZWxlc3MgYW5kIGJlIGRpc2FibGVkLCByZXR1cm5pbmcgZXJyb3JzLiAgU28gaXQgaXMgaW1wb3J0YW50IHRvIG1vbml0b3IKK3RoZSBhbW91bnQgb2YgZnJlZSBzcGFjZSBhbmQgZXhwYW5kIHRoZSA8Q09XIGRldmljZT4gYmVmb3JlIGl0IGZpbGxzIHVwLgorCis8cGVyc2lzdGVudD8+IGlzIFAgKFBlcnNpc3RlbnQpIG9yIE4gKE5vdCBwZXJzaXN0ZW50IC0gd2lsbCBub3Qgc3Vydml2ZQorYWZ0ZXIgcmVib290KS4KKworCitIb3cgdGhpcyBpcyB1c2VkIGJ5IExWTTIKKz09PT09PT09PT09PT09PT09PT09PT09PQorV2hlbiB5b3UgY3JlYXRlIHRoZSBmaXJzdCBMVk0yIHNuYXBzaG90IG9mIGEgdm9sdW1lLCBmb3VyIGRtIGRldmljZXMgYXJlIHVzZWQ6CisKKzEpIGEgZGV2aWNlIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIG1hcHBpbmcgdGFibGUgb2YgdGhlIHNvdXJjZSB2b2x1bWU7CisyKSBhIGRldmljZSB1c2VkIGFzIHRoZSA8Q09XIGRldmljZT47CiszKSBhICJzbmFwc2hvdCIgZGV2aWNlLCBjb21iaW5pbmcgIzEgYW5kICMyLCB3aGljaCBpcyB0aGUgdmlzaWJsZSBzbmFwc2hvdAorICAgdm9sdW1lOworNCkgdGhlICJvcmlnaW5hbCIgdm9sdW1lICh3aGljaCB1c2VzIHRoZSBkZXZpY2UgbnVtYmVyIHVzZWQgYnkgdGhlIG9yaWdpbmFsCisgICBzb3VyY2Ugdm9sdW1lKSwgd2hvc2UgdGFibGUgaXMgcmVwbGFjZWQgYnkgYSAic25hcHNob3Qtb3JpZ2luIiBtYXBwaW5nCisgICBmcm9tIGRldmljZSAjMS4KKworQSBmaXhlZCBuYW1pbmcgc2NoZW1lIGlzIHVzZWQsIHNvIHdpdGggdGhlIGZvbGxvd2luZyBjb21tYW5kczoKKworbHZjcmVhdGUgLUwgMUcgLW4gYmFzZSB2b2x1bWVHcm91cAorbHZjcmVhdGUgLUwgMTAwTSAtLXNuYXBzaG90IC1uIHNuYXAgdm9sdW1lR3JvdXAvYmFzZQorCit3ZSdsbCBoYXZlIHRoaXMgc2l0dWF0aW9uICh3aXRoIHZvbHVtZXMgaW4gYWJvdmUgb3JkZXIpOgorCisjIGRtc2V0dXAgdGFibGV8Z3JlcCB2b2x1bWVHcm91cAorCit2b2x1bWVHcm91cC1iYXNlLXJlYWw6IDAgMjA5NzE1MiBsaW5lYXIgODoxOSAzODQKK3ZvbHVtZUdyb3VwLXNuYXAtY293OiAwIDIwNDgwMCBsaW5lYXIgODoxOSAyMDk3NTM2Cit2b2x1bWVHcm91cC1zbmFwOiAwIDIwOTcxNTIgc25hcHNob3QgMjU0OjExIDI1NDoxMiBQIDE2Cit2b2x1bWVHcm91cC1iYXNlOiAwIDIwOTcxNTIgc25hcHNob3Qtb3JpZ2luIDI1NDoxMQorCisjIGxzIC1sTCAvZGV2L21hcHBlci92b2x1bWVHcm91cC0qCiticnctLS0tLS0tICAxIHJvb3Qgcm9vdCAyNTQsIDExIDI5IGFnbyAxODoxNSAvZGV2L21hcHBlci92b2x1bWVHcm91cC1iYXNlLXJlYWwKK2Jydy0tLS0tLS0gIDEgcm9vdCByb290IDI1NCwgMTIgMjkgYWdvIDE4OjE1IC9kZXYvbWFwcGVyL3ZvbHVtZUdyb3VwLXNuYXAtY293CiticnctLS0tLS0tICAxIHJvb3Qgcm9vdCAyNTQsIDEzIDI5IGFnbyAxODoxNSAvZGV2L21hcHBlci92b2x1bWVHcm91cC1zbmFwCiticnctLS0tLS0tICAxIHJvb3Qgcm9vdCAyNTQsIDEwIDI5IGFnbyAxODoxNCAvZGV2L21hcHBlci92b2x1bWVHcm91cC1iYXNlCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcmVsYXlmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3JlbGF5ZnMudHh0CmluZGV4IGQyNGUxYjAuLmQ4MDNhYmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcmVsYXlmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9yZWxheWZzLnR4dApAQCAtMTUsNyArMTUsNyBAQAogCiBUaGUgZm9ybWF0IG9mIHRoZSBkYXRhIGxvZ2dlZCBpbnRvIHRoZSBjaGFubmVsIGJ1ZmZlcnMgaXMgY29tcGxldGVseQogdXAgdG8gdGhlIHJlbGF5ZnMgY2xpZW50OyByZWxheWZzIGRvZXMgaG93ZXZlciBwcm92aWRlIGhvb2tzIHdoaWNoCi1hbGxvdyBjbGllbnRzIHRvIGltcG9zZSBzb21lIHN0dWN0dXJlIG9uIHRoZSBidWZmZXIgZGF0YS4gIE5vciBkb2VzCithbGxvdyBjbGllbnRzIHRvIGltcG9zZSBzb21lIHN0cnVjdHVyZSBvbiB0aGUgYnVmZmVyIGRhdGEuICBOb3IgZG9lcwogcmVsYXlmcyBpbXBsZW1lbnQgYW55IGZvcm0gb2YgZGF0YSBmaWx0ZXJpbmcgLSB0aGlzIGFsc28gaXMgbGVmdCB0bwogdGhlIGNsaWVudC4gIFRoZSBwdXJwb3NlIGlzIHRvIGtlZXAgcmVsYXlmcyBhcyBzaW1wbGUgYXMgcG9zc2libGUuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaWE2NC9tY2EudHh0IGIvRG9jdW1lbnRhdGlvbi9pYTY0L21jYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcxY2M2YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaWE2NC9tY2EudHh0CkBAIC0wLDAgKzEsMTk0IEBACitBbiBhZC1ob2MgY29sbGVjdGlvbiBvZiBub3RlcyBvbiBJQTY0IE1DQSBhbmQgSU5JVCBwcm9jZXNzaW5nLiAgRmVlbAorZnJlZSB0byB1cGRhdGUgaXQgd2l0aCBub3RlcyBhYm91dCBhbnkgYXJlYSB0aGF0IGlzIG5vdCBjbGVhci4KKworLS0tCisKK01DQS9JTklUIGFyZSBjb21wbGV0ZWx5IGFzeW5jaHJvbm91cy4gIFRoZXkgY2FuIG9jY3VyIGF0IGFueSB0aW1lLCB3aGVuCit0aGUgT1MgaXMgaW4gYW55IHN0YXRlLiAgSW5jbHVkaW5nIHdoZW4gb25lIG9mIHRoZSBjcHVzIGlzIGFscmVhZHkKK2hvbGRpbmcgYSBzcGlubG9jay4gIFRyeWluZyB0byBnZXQgYW55IGxvY2sgZnJvbSBNQ0EvSU5JVCBzdGF0ZSBpcworYXNraW5nIGZvciBkZWFkbG9jay4gIEFsc28gdGhlIHN0YXRlIG9mIHN0cnVjdHVyZXMgdGhhdCBhcmUgcHJvdGVjdGVkCitieSBsb2NrcyBpcyBpbmRldGVybWluYXRlLCBpbmNsdWRpbmcgbGlua2VkIGxpc3RzLgorCistLS0KKworVGhlIGNvbXBsaWNhdGVkIGlhNjQgTUNBIHByb2Nlc3MuICBBbGwgb2YgdGhpcyBpcyBtYW5kYXRlZCBieSBJbnRlbCdzCitzcGVjaWZpY2F0aW9uIGZvciBpYTY0IFNBTCwgZXJyb3IgcmVjb3ZlcnkgYW5kIGFuZCB1bndpbmQsIGl0IGlzIG5vdCBhcworaWYgd2UgaGF2ZSBhIGNob2ljZSBoZXJlLgorCisqIE1DQSBvY2N1cnMgb24gb25lIGNwdSwgdXN1YWxseSBkdWUgdG8gYSBkb3VibGUgYml0IG1lbW9yeSBlcnJvci4KKyAgVGhpcyBpcyB0aGUgbW9uYXJjaCBjcHUuCisKKyogU0FMIHNlbmRzIGFuIE1DQSByZW5kZXp2b3VzIGludGVycnVwdCAod2hpY2ggaXMgYSBub3JtYWwgaW50ZXJydXB0KQorICB0byBhbGwgdGhlIG90aGVyIGNwdXMsIHRoZSBzbGF2ZXMuCisKKyogU2xhdmUgY3B1cyB0aGF0IHJlY2VpdmUgdGhlIE1DQSBpbnRlcnJ1cHQgY2FsbCBkb3duIGludG8gU0FMLCB0aGV5CisgIGVuZCB1cCBzcGlubmluZyBkaXNhYmxlZCB3aGlsZSB0aGUgTUNBIGlzIGJlaW5nIHNlcnZpY2VkLgorCisqIElmIGFueSBzbGF2ZSBjcHUgd2FzIGFscmVhZHkgc3Bpbm5pbmcgZGlzYWJsZWQgd2hlbiB0aGUgTUNBIG9jY3VycmVkCisgIHRoZW4gaXQgY2Fubm90IHNlcnZpY2UgdGhlIE1DQSBpbnRlcnJ1cHQuICBTQUwgd2FpdHMgfjIwIHNlY29uZHMgdGhlbgorICBzZW5kcyBhbiB1bm1hc2thYmxlIElOSVQgZXZlbnQgdG8gdGhlIHNsYXZlIGNwdXMgdGhhdCBoYXZlIG5vdAorICBhbHJlYWR5IHJlbmRlenZvdXNlZC4KKworKiBCZWNhdXNlIE1DQS9JTklUIGNhbiBiZSBkZWxpdmVyZWQgYXQgYW55IHRpbWUsIGluY2x1ZGluZyB3aGVuIHRoZSBjcHUKKyAgaXMgZG93biBpbiBQQUwgaW4gcGh5c2ljYWwgbW9kZSwgdGhlIHJlZ2lzdGVycyBhdCB0aGUgdGltZSBvZiB0aGUKKyAgZXZlbnQgYXJlIF9jb21wbGV0ZWx5XyB1bmRlZmluZWQuICBJbiBwYXJ0aWN1bGFyIHRoZSBNQ0EvSU5JVAorICBoYW5kbGVycyBjYW5ub3QgcmVseSBvbiB0aGUgdGhyZWFkIHBvaW50ZXIsIFBBTCBwaHlzaWNhbCBtb2RlIGNhbgorICAoYW5kIGRvZXMpIG1vZGlmeSBUUC4gIEl0IGlzIGFsbG93ZWQgdG8gZG8gdGhhdCBhcyBsb25nIGFzIGl0IHJlc2V0cworICBUUCBvbiByZXR1cm4uICBIb3dldmVyIE1DQS9JTklUIGV2ZW50cyBleHBvc2UgdXMgdG8gdGhlc2UgUEFMCisgIGludGVybmFsIFRQIGNoYW5nZXMuICBIZW5jZSBjdXJyX3Rhc2soKS4KKworKiBJZiBhbiBNQ0EvSU5JVCBldmVudCBvY2N1cnMgd2hpbGUgdGhlIGtlcm5lbCB3YXMgcnVubmluZyAobm90IHVzZXIKKyAgc3BhY2UpIGFuZCB0aGUga2VybmVsIGhhcyBjYWxsZWQgUEFMIHRoZW4gdGhlIE1DQS9JTklUIGhhbmRsZXIgY2Fubm90CisgIGFzc3VtZSB0aGF0IHRoZSBrZXJuZWwgc3RhY2sgaXMgaW4gYSBmaXQgc3RhdGUgdG8gYmUgdXNlZC4gIE1haW5seQorICBiZWNhdXNlIFBBTCBtYXkgb3IgbWF5IG5vdCBtYWludGFpbiB0aGUgc3RhY2sgcG9pbnRlciBpbnRlcm5hbGx5LgorICBCZWNhdXNlIHRoZSBNQ0EvSU5JVCBoYW5kbGVycyBjYW5ub3QgdHJ1c3QgdGhlIGtlcm5lbCBzdGFjaywgdGhleQorICBoYXZlIHRvIHVzZSB0aGVpciBvd24sIHBlci1jcHUgc3RhY2tzLiAgVGhlIE1DQS9JTklUIHN0YWNrcyBhcmUKKyAgcHJlZm9ybWF0dGVkIHdpdGgganVzdCBlbm91Z2ggdGFzayBzdGF0ZSB0byBsZXQgdGhlIHJlbGV2YW50IGhhbmRsZXJzCisgIGRvIHRoZWlyIGpvYi4KKworKiBVbmxpa2UgbW9zdCBvdGhlciBhcmNoaXRlY3R1cmVzLCB0aGUgaWE2NCBzdHJ1Y3QgdGFzayBpcyBlbWJlZGRlZCBpbgorICB0aGUga2VybmVsIHN0YWNrWzFdLiAgU28gc3dpdGNoaW5nIHRvIGEgbmV3IGtlcm5lbCBzdGFjayBtZWFucyB0aGF0CisgIHdlIHN3aXRjaCB0byBhIG5ldyB0YXNrIGFzIHdlbGwuICBCZWNhdXNlIHZhcmlvdXMgYml0cyBvZiB0aGUga2VybmVsCisgIGFzc3VtZSB0aGF0IGN1cnJlbnQgcG9pbnRzIGludG8gdGhlIHN0cnVjdCB0YXNrLCBzd2l0Y2hpbmcgdG8gYSBuZXcKKyAgc3RhY2sgYWxzbyBtZWFucyBhIG5ldyB2YWx1ZSBmb3IgY3VycmVudC4KKworKiBPbmNlIGFsbCBzbGF2ZXMgaGF2ZSByZW5kZXp2b3VzZWQgYW5kIGFyZSBzcGlubmluZyBkaXNhYmxlZCwgdGhlCisgIG1vbmFyY2ggaXMgZW50ZXJlZC4gIFRoZSBtb25hcmNoIG5vdyB0cmllcyB0byBkaWFnbm9zZSB0aGUgcHJvYmxlbQorICBhbmQgZGVjaWRlIGlmIGl0IGNhbiByZWNvdmVyIG9yIG5vdC4KKworKiBQYXJ0IG9mIHRoZSBtb25hcmNoJ3Mgam9iIGlzIHRvIGxvb2sgYXQgdGhlIHN0YXRlIG9mIGFsbCB0aGUgb3RoZXIKKyAgdGFza3MuICBUaGUgb25seSB3YXkgdG8gZG8gdGhhdCBvbiBpYTY0IGlzIHRvIGNhbGwgdGhlIHVud2luZGVyLAorICBhcyBtYW5kYXRlZCBieSBJbnRlbC4KKworKiBUaGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSB1bndpbmQgZGVwZW5kcyBvbiB3aGV0aGVyIGEgdGFzayBpcworICBydW5uaW5nIG9yIG5vdC4gIFRoYXQgaXMsIHdoZXRoZXIgaXQgaXMgb24gYSBjcHUgb3IgaXMgYmxvY2tlZC4gIFRoZQorICBtb25hcmNoIGhhcyB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgYSB0YXNrIGlzIG9uIGEgY3B1IGJlZm9yZSBpdAorICBrbm93cyBob3cgdG8gc3RhcnQgdW53aW5kaW5nIGl0LiAgVGhlIHRhc2tzIHRoYXQgcmVjZWl2ZWQgYW4gTUNBIG9yCisgIElOSVQgZXZlbnQgYXJlIG5vIGxvbmdlciBydW5uaW5nLCB0aGV5IGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gYmxvY2tlZAorICB0YXNrcy4gIEJ1dCAoYW5kIGl0cyBhIGJpZyBidXQpLCB0aGUgY3B1cyB0aGF0IHJlY2VpdmVkIHRoZSBNQ0EKKyAgcmVuZGV6dm91cyBpbnRlcnJ1cHQgYXJlIHN0aWxsIHJ1bm5pbmcgb24gdGhlaXIgbm9ybWFsIGtlcm5lbCBzdGFja3MhCisKKyogVG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGVzZSB0d28gY2FzZXMsIHRoZSBtb25hcmNoIG11c3Qga25vdyB3aGljaAorICB0YXNrcyBhcmUgb24gYSBjcHUgYW5kIHdoaWNoIGFyZSBub3QuICBIZW5jZSBlYWNoIHNsYXZlIGNwdSB0aGF0CisgIHN3aXRjaGVzIHRvIGFuIE1DQS9JTklUIHN0YWNrLCByZWdpc3RlcnMgaXRzIG5ldyBzdGFjayB1c2luZworICBzZXRfY3Vycl90YXNrKCksIHNvIHRoZSBtb25hcmNoIGNhbiB0ZWxsIHRoYXQgdGhlIF9vcmlnaW5hbF8gdGFzayBpcworICBubyBsb25nZXIgcnVubmluZyBvbiB0aGF0IGNwdS4gIFRoYXQgZ2l2ZXMgdXMgYSBkZWNlbnQgY2hhbmNlIG9mCisgIGdldHRpbmcgYSB2YWxpZCBiYWNrdHJhY2Ugb2YgdGhlIF9vcmlnaW5hbF8gdGFzay4KKworKiBNQ0EvSU5JVCBjYW4gYmUgbmVzdGVkLCB0byBhIGRlcHRoIG9mIDIgb24gYW55IGNwdS4gIEluIHRoZSBjYXNlIG9mIGEKKyAgbmVzdGVkIGVycm9yLCB3ZSB3YW50IGRpYWdub3N0aWNzIG9uIHRoZSBNQ0EvSU5JVCBoYW5kbGVyIHRoYXQKKyAgZmFpbGVkLCBub3Qgb24gdGhlIHRhc2sgdGhhdCB3YXMgb3JpZ2luYWxseSBydW5uaW5nLiAgQWdhaW4gdGhpcworICByZXF1aXJlcyBzZXRfY3Vycl90YXNrKCkgc28gdGhlIE1DQS9JTklUIGhhbmRsZXJzIGNhbiByZWdpc3RlciB0aGVpcgorICBvd24gc3RhY2sgYXMgcnVubmluZyBvbiB0aGF0IGNwdS4gIFRoZW4gYSByZWN1cnNpdmUgZXJyb3IgZ2V0cyBhCisgIHRyYWNlIG9mIHRoZSBmYWlsaW5nIGhhbmRsZXIncyAidGFzayIuCisKK1sxXSBNeSAoS2VpdGggT3dlbnMpIG9yaWdpbmFsIGRlc2lnbiBjYWxsZWQgZm9yIGlhNjQgdG8gc2VwYXJhdGUgaXRzCisgICAgc3RydWN0IHRhc2sgYW5kIHRoZSBrZXJuZWwgc3RhY2tzLiAgVGhlbiB0aGUgTUNBL0lOSVQgZGF0YSB3b3VsZCBiZQorICAgIGNoYWluZWQgc3RhY2tzIGxpa2UgaTM4NiBpbnRlcnJ1cHQgc3RhY2tzLiAgQnV0IHRoYXQgcmVxdWlyZWQKKyAgICByYWRpY2FsIHN1cmdlcnkgb24gdGhlIHJlc3Qgb2YgaWE2NCwgcGx1cyBleHRyYSBoYXJkIHdpcmVkIFRMQgorICAgIGVudHJpZXMgd2l0aCBpdHMgYXNzb2NpYXRlZCBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbi4gIERhdmlkCisgICAgTW9zYmVyZ2VyIHZldG9lZCB0aGF0IGFwcHJvYWNoLiAgV2hpY2ggbWVhbnQgdGhhdCBzZXBhcmF0ZSBrZXJuZWwKKyAgICBzdGFja3MgbWVhbnQgc2VwYXJhdGUgInRhc2tzIiBmb3IgdGhlIE1DQS9JTklUIGhhbmRsZXJzLgorCistLS0KKworSU5JVCBpcyBsZXNzIGNvbXBsaWNhdGVkIHRoYW4gTUNBLiAgUHJlc3NpbmcgdGhlIG5taSBidXR0b24gb3IgdXNpbmcKK3RoZSBlcXVpdmFsZW50IGNvbW1hbmQgb24gdGhlIG1hbmFnZW1lbnQgY29uc29sZSBzZW5kcyBJTklUIHRvIGFsbAorY3B1cy4gIFNBTCBwaWNrcyBvbmUgb25lIG9mIHRoZSBjcHVzIGFzIHRoZSBtb25hcmNoIGFuZCB0aGUgcmVzdCBhcmUKK3NsYXZlcy4gIEFsbCB0aGUgT1MgSU5JVCBoYW5kbGVycyBhcmUgZW50ZXJlZCBhdCBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lCit0aW1lLiAgVGhlIE9TIG1vbmFyY2ggcHJpbnRzIHRoZSBzdGF0ZSBvZiBhbGwgdGFza3MgYW5kIHJldHVybnMsIGFmdGVyCit3aGljaCB0aGUgc2xhdmVzIHJldHVybiBhbmQgdGhlIHN5c3RlbSByZXN1bWVzLgorCitBdCBsZWFzdCB0aGF0IGlzIHdoYXQgaXMgc3VwcG9zZWQgdG8gaGFwcGVuLiAgQWxhcyB0aGVyZSBhcmUgYnJva2VuCit2ZXJzaW9ucyBvZiBTQUwgb3V0IHRoZXJlLiAgU29tZSBkcml2ZSBhbGwgdGhlIGNwdXMgYXMgbW9uYXJjaHMuICBTb21lCitkcml2ZSB0aGVtIGFsbCBhcyBzbGF2ZXMuICBTb21lIGRyaXZlIG9uZSBjcHUgYXMgbW9uYXJjaCwgd2FpdCBmb3IgdGhhdAorY3B1IHRvIHJldHVybiBmcm9tIHRoZSBPUyB0aGVuIGRyaXZlIHRoZSByZXN0IGFzIHNsYXZlcy4gIFNvbWUgdmVyc2lvbnMKK29mIFNBTCBjYW5ub3QgZXZlbiBjb3BlIHdpdGggcmV0dXJuaW5nIGZyb20gdGhlIE9TLCB0aGV5IHNwaW4gaW5zaWRlCitTQUwgb24gcmVzdW1lLiAgVGhlIE9TIElOSVQgY29kZSBoYXMgd29ya2Fyb3VuZHMgZm9yIHNvbWUgb2YgdGhlc2UKK2Jyb2tlbiBTQUwgc3ltcHRvbXMsIGJ1dCBzb21lIHNpbXBseSBjYW5ub3QgYmUgZml4ZWQgZnJvbSB0aGUgT1Mgc2lkZS4KKworLS0tCisKK1RoZSBzY2hlZHVsZXIgaG9va3MgdXNlZCBieSBpYTY0IChjdXJyX3Rhc2ssIHNldF9jdXJyX3Rhc2spIGFyZSBsYXllcgordmlvbGF0aW9ucy4gIFVuZm9ydHVuYXRlbHkgTUNBL0lOSVQgc3RhcnQgb2ZmIGFzIG1hc3NpdmUgbGF5ZXIKK3Zpb2xhdGlvbnMgKGNhbiBvY2N1ciBhdCBfYW55XyB0aW1lKSBhbmQgdGhleSBidWlsZCBmcm9tIHRoZXJlLgorCitBdCBsZWFzdCBpYTY0IG1ha2VzIGFuIGF0dGVtcHQgYXQgcmVjb3ZlcmluZyBmcm9tIGhhcmR3YXJlIGVycm9ycywgYnV0CitpdCBpcyBhIGRpZmZpY3VsdCBwcm9ibGVtIGJlY2F1c2Ugb2YgdGhlIGFzeW5jaHJvbm91cyBuYXR1cmUgb2YgdGhlc2UKK2Vycm9ycy4gIFdoZW4gcHJvY2Vzc2luZyBhbiB1bm1hc2thYmxlIGludGVycnVwdCB3ZSBzb21ldGltZXMgbmVlZAorc3BlY2lhbCBjb2RlIHRvIGNvcGUgd2l0aCBvdXIgaW5hYmlsaXR5IHRvIHRha2UgYW55IGxvY2tzLgorCistLS0KKworSG93IGlzIGlhNjQgTUNBL0lOSVQgZGlmZmVyZW50IGZyb20geDg2IE5NST8KKworKiB4ODYgTk1JIHR5cGljYWxseSBnZXRzIGRlbGl2ZXJlZCB0byBvbmUgY3B1LiAgTUNBL0lOSVQgZ2V0cyBzZW50IHRvCisgIGFsbCBjcHVzLgorCisqIHg4NiBOTUkgY2Fubm90IGJlIG5lc3RlZC4gIE1DQS9JTklUIGNhbiBiZSBuZXN0ZWQsIHRvIGEgZGVwdGggb2YgMgorICBwZXIgY3B1LgorCisqIHg4NiBoYXMgYSBzZXBhcmF0ZSBzdHJ1Y3QgdGFzayB3aGljaCBwb2ludHMgdG8gb25lIG9mIG11bHRpcGxlIGtlcm5lbAorICBzdGFja3MuICBpYTY0IGhhcyB0aGUgc3RydWN0IHRhc2sgZW1iZWRkZWQgaW4gdGhlIHNpbmdsZSBrZXJuZWwKKyAgc3RhY2ssIHNvIHN3aXRjaGluZyBzdGFjayBtZWFucyBzd2l0Y2hpbmcgdGFzay4KKworKiB4ODYgZG9lcyBub3QgY2FsbCB0aGUgQklPUyBzbyB0aGUgTk1JIGhhbmRsZXIgZG9lcyBub3QgaGF2ZSB0byB3b3JyeQorICBhYm91dCBhbnkgcmVnaXN0ZXJzIGhhdmluZyBjaGFuZ2VkLiAgTUNBL0lOSVQgY2FuIG9jY3VyIHdoaWxlIHRoZSBjcHUKKyAgaXMgaW4gUEFMIGluIHBoeXNpY2FsIG1vZGUsIHdpdGggdW5kZWZpbmVkIHJlZ2lzdGVycyBhbmQgYW4gdW5kZWZpbmVkCisgIGtlcm5lbCBzdGFjay4KKworKiBpMzg2IGJhY2t0cmFjZSBpcyBub3QgdmVyeSBzZW5zaXRpdmUgdG8gd2hldGhlciBhIHByb2Nlc3MgaXMgcnVubmluZworICBvciBub3QuICBpYTY0IHVud2luZCBpcyB2ZXJ5LCB2ZXJ5IHNlbnNpdGl2ZSB0byB3aGV0aGVyIGEgcHJvY2VzcyBpcworICBydW5uaW5nIG9yIG5vdC4KKworLS0tCisKK1doYXQgaGFwcGVucyB3aGVuIE1DQS9JTklUIGlzIGRlbGl2ZXJlZCB3aGF0IGEgY3B1IGlzIHJ1bm5pbmcgdXNlcgorc3BhY2UgY29kZT8KKworVGhlIHVzZXIgbW9kZSByZWdpc3RlcnMgYXJlIHN0b3JlZCBpbiB0aGUgUlNFIGFyZWEgb2YgdGhlIE1DQS9JTklUIG9uCitlbnRyeSB0byB0aGUgT1MgYW5kIGFyZSByZXN0b3JlZCBmcm9tIHRoZXJlIG9uIHJldHVybiB0byBTQUwsIHNvIHVzZXIKK21vZGUgcmVnaXN0ZXJzIGFyZSBwcmVzZXJ2ZWQgYWNyb3NzIGEgcmVjb3ZlcmFibGUgTUNBL0lOSVQuICBTaW5jZSB0aGUKK09TIGhhcyBubyBpZGVhIHdoYXQgdW53aW5kIGRhdGEgaXMgYXZhaWxhYmxlIGZvciB0aGUgdXNlciBzcGFjZSBzdGFjaywKK01DQS9JTklUIG5ldmVyIHRyaWVzIHRvIGJhY2t0cmFjZSB1c2VyIHNwYWNlLiAgV2hpY2ggbWVhbnMgdGhhdCB0aGUgT1MKK2RvZXMgbm90IGJvdGhlciBtYWtpbmcgdGhlIHVzZXIgc3BhY2UgcHJvY2VzcyBsb29rIGxpa2UgYSBibG9ja2VkIHRhc2ssCitpLmUuIHRoZSBPUyBkb2VzIG5vdCBjb3B5IHB0X3JlZ3MgYW5kIHN3aXRjaF9zdGFjayB0byB0aGUgdXNlciBzcGFjZQorc3RhY2suICBBbHNvIHRoZSBPUyBoYXMgbm8gaWRlYSBob3cgYmlnIHRoZSB1c2VyIHNwYWNlIFJTRSBhbmQgbWVtb3J5CitzdGFja3MgYXJlLCB3aGljaCBtYWtlcyBpdCB0b28gcmlza3kgdG8gY29weSB0aGUgc2F2ZWQgc3RhdGUgdG8gYSB1c2VyCittb2RlIHN0YWNrLgorCistLS0KKworSG93IGRvIHdlIGdldCBhIGJhY2t0cmFjZSBvbiB0aGUgdGFza3MgdGhhdCB3ZXJlIHJ1bm5pbmcgd2hlbiBNQ0EvSU5JVAord2FzIGRlbGl2ZXJlZD8KKworbWNhLmM6OjppYTY0X21jYV9tb2RpZnlfb3JpZ2luYWxfc3RhY2soKS4gIFRoYXQgaWRlbnRpZmllcyBhbmQKK3ZlcmlmaWVzIHRoZSBvcmlnaW5hbCBrZXJuZWwgc3RhY2ssIGNvcGllcyB0aGUgZGlydHkgcmVnaXN0ZXJzIGZyb20KK3RoZSBNQ0EvSU5JVCBzdGFjaydzIFJTRSB0byB0aGUgb3JpZ2luYWwgc3RhY2sncyBSU0UsIGNvcGllcyB0aGUKK3NrZWxldG9uIHN0cnVjdCBwdF9yZWdzIGFuZCBzd2l0Y2hfc3RhY2sgdG8gdGhlIG9yaWdpbmFsIHN0YWNrLCBmaWxscworaW4gdGhlIHNrZWxldG9uIHN0cnVjdHVyZXMgZnJvbSB0aGUgUEFMIG1pbnN0YXRlIGFyZWEgYW5kIHVwZGF0ZXMgdGhlCitvcmlnaW5hbCBzdGFjaydzIHRocmVhZC5rc3AuICBUaGF0IG1ha2VzIHRoZSBvcmlnaW5hbCBzdGFjayBsb29rCitleGFjdGx5IGxpa2UgYW55IG90aGVyIGJsb2NrZWQgdGFzaywgaS5lLiBpdCBub3cgYXBwZWFycyB0byBiZQorc2xlZXBpbmcuICBUbyBnZXQgYSBiYWNrdHJhY2UsIGp1c3Qgc3RhcnQgd2l0aCB0aHJlYWQua3NwIGZvciB0aGUKK29yaWdpbmFsIHRhc2sgYW5kIHVud2luZCBsaWtlIGFueSBvdGhlciBzbGVlcGluZyB0YXNrLgorCistLS0KKworSG93IGRvIHdlIGlkZW50aWZ5IHRoZSB0YXNrcyB0aGF0IHdlcmUgcnVubmluZyB3aGVuIE1DQS9JTklUIHdhcworZGVsaXZlcmVkPworCitJZiB0aGUgcHJldmlvdXMgdGFzayBoYXMgYmVlbiB2ZXJpZmllZCBhbmQgY29udmVydGVkIHRvIGEgYmxvY2tlZAorc3RhdGUsIHRoZW4gc29zLT5wcmV2X3Rhc2sgb24gdGhlIE1DQS9JTklUIHN0YWNrIGlzIHVwZGF0ZWQgdG8gcG9pbnQgdG8KK3RoZSBwcmV2aW91cyB0YXNrLiAgWW91IGNhbiBsb29rIGF0IHRoYXQgZmllbGQgaW4gZHVtcHMgb3IgZGVidWdnZXJzLgorVG8gaGVscCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSBoYW5kbGVyIGFuZCB0aGUgb3JpZ2luYWwgdGFza3MsCitoYW5kbGVycyBoYXZlIF9USUZfTUNBX0lOSVQgc2V0IGluIHRocmVhZF9pbmZvLmZsYWdzLgorCitUaGUgc29zIGRhdGEgaXMgYWx3YXlzIGluIHRoZSBNQ0EvSU5JVCBoYW5kbGVyIHN0YWNrLCBhdCBvZmZzZXQKK01DQV9TT1NfT0ZGU0VULiAgWW91IGNhbiBnZXQgdGhhdCB2YWx1ZSBmcm9tIG1jYV9hc20uaCBvciBjYWxjdWxhdGUgaXQKK2FzIEtFUk5FTF9TVEFDS19TSVpFIC0gc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSAtIHNpemVvZihzdHJ1Y3QKK2lhNjRfc2FsX29zX3N0YXRlKSwgd2l0aCAxNiBieXRlIGFsaWdubWVudCBmb3IgYWxsIHN0cnVjdHVyZXMuCisKK0Fsc28gdGhlIGNvbW0gZmllbGQgb2YgdGhlIE1DQS9JTklUIHRhc2sgaXMgbW9kaWZpZWQgdG8gaW5jbHVkZSB0aGUgcGlkCitvZiB0aGUgb3JpZ2luYWwgdGFzaywgZm9yIGh1bWFucyB0byB1c2UuICBGb3IgZXhhbXBsZSwgYSBjb21tIGZpZWxkIG9mCisnTUNBIDEyMTU5JyBtZWFucyB0aGF0IHBpZCAxMjE1OSB3YXMgcnVubmluZyB3aGVuIHRoZSBNQ0Egd2FzCitkZWxpdmVyZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IDcwODZmMGEuLjk3MTU4OWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC0xNyw3ICsxNyw3IEBACiAKIAl1c2Jjb3JlLmJsaW5rZW5saWdodHM9MQogCi1UaGUgdGV4dCBpbiBzcXVhcmUgYnJhY2tldHMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZGVzY3JpcHRpb24gc3RhdGUgdGhlCitUaGUgdGV4dCBpbiBzcXVhcmUgYnJhY2tldHMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZGVzY3JpcHRpb24gc3RhdGVzIHRoZQogcmVzdHJpY3Rpb25zIG9uIHRoZSBrZXJuZWwgZm9yIHRoZSBzYWlkIGtlcm5lbCBwYXJhbWV0ZXIgdG8gYmUgdmFsaWQuIFRoZQogcmVzdHJpY3Rpb25zIHJlZmVycmVkIHRvIGFyZSB0aGF0IHRoZSByZWxldmFudCBvcHRpb24gaXMgdmFsaWQgaWY6CiAKQEAgLTI3LDggKzI3LDggQEAKIAlBUE0JQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCBzdXBwb3J0IGlzIGVuYWJsZWQuCiAJQVgyNQlBcHByb3ByaWF0ZSBBWC4yNSBzdXBwb3J0IGlzIGVuYWJsZWQuCiAJQ0QJQXBwcm9wcmlhdGUgQ0Qgc3VwcG9ydCBpcyBlbmFibGVkLgotCURFVkZTCWRldmZzIHN1cHBvcnQgaXMgZW5hYmxlZC4gCi0JRFJNCURpcmVjdCBSZW5kZXJpbmcgTWFuYWdlbWVudCBzdXBwb3J0IGlzIGVuYWJsZWQuIAorCURFVkZTCWRldmZzIHN1cHBvcnQgaXMgZW5hYmxlZC4KKwlEUk0JRGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VtZW50IHN1cHBvcnQgaXMgZW5hYmxlZC4KIAlFREQJQklPUyBFbmhhbmNlZCBEaXNrIERyaXZlIFNlcnZpY2VzIChFREQpIGlzIGVuYWJsZWQKIAlFRkkJRUZJIFBhcnRpdGlvbmluZyAoR1BUKSBpcyBlbmFibGVkCiAJRUlERQlFSURFL0FUQVBJIHN1cHBvcnQgaXMgZW5hYmxlZC4KQEAgLTcxLDcgKzcxLDcgQEAKIAlTRVJJQUwJU2VyaWFsIHN1cHBvcnQgaXMgZW5hYmxlZC4KIAlTTVAJVGhlIGtlcm5lbCBpcyBhbiBTTVAga2VybmVsLgogCVNQQVJDCVNwYXJjIGFyY2hpdGVjdHVyZSBpcyBlbmFibGVkLgotCVNXU1VTUAlTb2Z0d2FyZSBzdXNwZW5zaW9uIGlzIGVuYWJsZWQuCisJU1dTVVNQCVNvZnR3YXJlIHN1c3BlbmQgaXMgZW5hYmxlZC4KIAlUUwlBcHByb3ByaWF0ZSB0b3VjaHNjcmVlbiBzdXBwb3J0IGlzIGVuYWJsZWQuCiAJVVNCCVVTQiBzdXBwb3J0IGlzIGVuYWJsZWQuCiAJVVNCSElECVVTQiBIdW1hbiBJbnRlcmZhY2UgRGV2aWNlIHN1cHBvcnQgaXMgZW5hYmxlZC4KQEAgLTEwNSwxMyArMTA1LDEzIEBACiAJCQlTZWUgaGVhZGVyIG9mIGRyaXZlcnMvc2NzaS81M2M3eHguYy4KIAkJCVNlZSBhbHNvIERvY3VtZW50YXRpb24vc2NzaS9uY3I1M2M3eHgudHh0LgogCi0JYWNwaT0JCVtIVyxBQ1BJXSBBZHZhbmNlZCBDb25maWd1cmF0aW9uIGFuZCBQb3dlciBJbnRlcmZhY2UgCi0JCQlGb3JtYXQ6IHsgZm9yY2UgfCBvZmYgfCBodCB8IHN0cmljdCB9CisJYWNwaT0JCVtIVyxBQ1BJXSBBZHZhbmNlZCBDb25maWd1cmF0aW9uIGFuZCBQb3dlciBJbnRlcmZhY2UKKwkJCUZvcm1hdDogeyBmb3JjZSB8IG9mZiB8IGh0IHwgc3RyaWN0IHwgbm9pcnEgfQogCQkJZm9yY2UgLS0gZW5hYmxlIEFDUEkgaWYgZGVmYXVsdCB3YXMgb2ZmCiAJCQlvZmYgLS0gZGlzYWJsZSBBQ1BJIGlmIGRlZmF1bHQgd2FzIG9uCiAJCQlub2lycSAtLSBkbyBub3QgdXNlIEFDUEkgZm9yIElSUSByb3V0aW5nCiAJCQlodCAtLSBydW4gb25seSBlbm91Z2ggQUNQSSB0byBlbmFibGUgSHlwZXIgVGhyZWFkaW5nCi0JCQlzdHJpY3QgLS0gIEJlIGxlc3MgdG9sZXJhbnQgb2YgcGxhdGZvcm1zIHRoYXQgYXJlIG5vdAorCQkJc3RyaWN0IC0tIEJlIGxlc3MgdG9sZXJhbnQgb2YgcGxhdGZvcm1zIHRoYXQgYXJlIG5vdAogCQkJCXN0cmljdGx5IEFDUEkgc3BlY2lmaWNhdGlvbiBjb21wbGlhbnQuCiAKIAkJCVNlZSBhbHNvIERvY3VtZW50YXRpb24vcG0udHh0LCBwY2k9bm9hY3BpCkBAIC0xMTksMjAgKzExOSwyMyBAQAogCWFjcGlfc2xlZXA9CVtIVyxBQ1BJXSBTbGVlcCBvcHRpb25zCiAJCQlGb3JtYXQ6IHsgczNfYmlvcywgczNfbW9kZSB9CiAJCQlTZWUgRG9jdW1lbnRhdGlvbi9wb3dlci92aWRlby50eHQKLSAKKwogCWFjcGlfc2NpPQlbSFcsQUNQSV0gQUNQSSBTeXN0ZW0gQ29udHJvbCBJbnRlcnJ1cHQgdHJpZ2dlciBtb2RlCi0JCQlGb3JtYXQ6IHsgbGV2ZWwgfCBlZGdlIHwgIGhpZ2ggfCBsb3cgfQorCQkJRm9ybWF0OiB7IGxldmVsIHwgZWRnZSB8IGhpZ2ggfCBsb3cgfQogCi0JYWNwaV9pcnFfYmFsYW5jZQlbSFcsQUNQSV0gQUNQSSB3aWxsIGJhbGFuY2UgYWN0aXZlIElSUXMKLQkJCQlkZWZhdWx0IGluIEFQSUMgbW9kZQorCWFjcGlfaXJxX2JhbGFuY2UgW0hXLEFDUEldCisJCQlBQ1BJIHdpbGwgYmFsYW5jZSBhY3RpdmUgSVJRcworCQkJZGVmYXVsdCBpbiBBUElDIG1vZGUKIAotCWFjcGlfaXJxX25vYmFsYW5jZQlbSFcsQUNQSV0gQUNQSSB3aWxsIG5vdCBtb3ZlIGFjdGl2ZSBJUlFzIChkZWZhdWx0KQotCQkJCWRlZmF1bHQgaW4gUElDIG1vZGUKKwlhY3BpX2lycV9ub2JhbGFuY2UgW0hXLEFDUEldCisJCQlBQ1BJIHdpbGwgbm90IG1vdmUgYWN0aXZlIElSUXMgKGRlZmF1bHQpCisJCQlkZWZhdWx0IGluIFBJQyBtb2RlCiAKLQlhY3BpX2lycV9wY2k9CVtIVyxBQ1BJXSBJZiBpcnFfYmFsYW5jZSwgQ2xlYXIgbGlzdGVkIElSUXMgZm9yIHVzZSBieSBQQ0kKKwlhY3BpX2lycV9wY2k9CVtIVyxBQ1BJXSBJZiBpcnFfYmFsYW5jZSwgY2xlYXIgbGlzdGVkIElSUXMgZm9yCisJCQl1c2UgYnkgUENJCiAJCQlGb3JtYXQ6IDxpcnE+LDxpcnE+Li4uCiAKLQlhY3BpX2lycV9pc2E9CVtIVyxBQ1BJXSBJZiBpcnFfYmFsYW5jZSwgTWFyayBsaXN0ZWQgSVJRcyB1c2VkIGJ5IElTQQorCWFjcGlfaXJxX2lzYT0JW0hXLEFDUEldIElmIGlycV9iYWxhbmNlLCBtYXJrIGxpc3RlZCBJUlFzIHVzZWQgYnkgSVNBCiAJCQlGb3JtYXQ6IDxpcnE+LDxpcnE+Li4uCiAKIAlhY3BpX29zaT0JW0hXLEFDUEldIGVtcHR5IHBhcmFtIGRpc2FibGVzIF9PU0kKQEAgLTE0NSwxNCArMTQ4LDE0IEBACiAKIAlhY3BpX2RiZ19sYXllcj0JW0hXLEFDUEldCiAJCQlGb3JtYXQ6IDxpbnQ+Ci0JCQlFYWNoIGJpdCBvZiB0aGUgPGludD4gaW5kaWNhdGVzIGFuIGFjcGkgZGVidWcgbGF5ZXIsCisJCQlFYWNoIGJpdCBvZiB0aGUgPGludD4gaW5kaWNhdGVzIGFuIEFDUEkgZGVidWcgbGF5ZXIsCiAJCQkxOiBlbmFibGUsIDA6IGRpc2FibGUuIEl0IGlzIHVzZWZ1bCBmb3IgYm9vdCB0aW1lCiAJCQlkZWJ1Z2dpbmcuIEFmdGVyIHN5c3RlbSBoYXMgYm9vdGVkIHVwLCBpdCBjYW4gYmUgc2V0CiAJCQl2aWEgL3Byb2MvYWNwaS9kZWJ1Z19sYXllci4KIAogCWFjcGlfZGJnX2xldmVsPQlbSFcsQUNQSV0KIAkJCUZvcm1hdDogPGludD4KLQkJCUVhY2ggYml0IG9mIHRoZSA8aW50PiBpbmRpY2F0ZXMgYW4gYWNwaSBkZWJ1ZyBsZXZlbCwKKwkJCUVhY2ggYml0IG9mIHRoZSA8aW50PiBpbmRpY2F0ZXMgYW4gQUNQSSBkZWJ1ZyBsZXZlbCwKIAkJCTE6IGVuYWJsZSwgMDogZGlzYWJsZS4gSXQgaXMgdXNlZnVsIGZvciBib290IHRpbWUKIAkJCWRlYnVnZ2luZy4gQWZ0ZXIgc3lzdGVtIGhhcyBib290ZWQgdXAsIGl0IGNhbiBiZSBzZXQKIAkJCXZpYSAvcHJvYy9hY3BpL2RlYnVnX2xldmVsLgpAQCAtMTYxLDEyICsxNjQsMTMgQEAKIAogCWFjcGlfZ2VuZXJpY19ob3RrZXkgW0hXLEFDUEldCiAJCQlBbGxvdyBjb25zb2xpZGF0ZWQgZ2VuZXJpYyBob3RrZXkgZHJpdmVyIHRvCi0JCQlvdmVyLXJpZGUgcGxhdGZvcm0gc3BlY2lmaWMgZHJpdmVyLgorCQkJb3ZlcnJpZGUgcGxhdGZvcm0gc3BlY2lmaWMgZHJpdmVyLgogCQkJU2VlIGFsc28gRG9jdW1lbnRhdGlvbi9hY3BpLWhvdGtleS50eHQuCiAKIAllbmFibGVfdGltZXJfcGluXzEgW2kzODYseDg2LTY0XQogCQkJRW5hYmxlIFBJTiAxIG9mIEFQSUMgdGltZXIKLQkJCUNhbiBiZSB1c2VmdWwgdG8gd29yayBhcm91bmQgY2hpcHNldCBidWdzIChpbiBwYXJ0aWN1bGFyIG9uIHNvbWUgQVRJIGNoaXBzZXRzKQorCQkJQ2FuIGJlIHVzZWZ1bCB0byB3b3JrIGFyb3VuZCBjaGlwc2V0IGJ1Z3MKKwkJCShpbiBwYXJ0aWN1bGFyIG9uIHNvbWUgQVRJIGNoaXBzZXRzKS4KIAkJCVRoZSBrZXJuZWwgdHJpZXMgdG8gc2V0IGEgcmVhc29uYWJsZSBkZWZhdWx0LgogCiAJZGlzYWJsZV90aW1lcl9waW5fMSBbaTM4Nix4ODYtNjRdCkBAIC0xODIsNyArMTg2LDcgQEAKIAogCWFkbGliPQkJW0hXLE9TU10KIAkJCUZvcm1hdDogPGlvPgotIAorCiAJYWR2YW5zeXM9CVtIVyxTQ1NJXQogCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL3Njc2kvYWR2YW5zeXMuYy4KIApAQCAtMTkyLDcgKzE5Niw3IEBACiAJYWVkc3AxNj0JW0hXLE9TU10gQXVkaW8gRXhjZWwgRFNQIDE2CiAJCQlGb3JtYXQ6IDxpbz4sPGlycT4sPGRtYT4sPG1zc19pbz4sPG1wdV9pbz4sPG1wdV9pcnE+CiAJCQlTZWUgYWxzbyBoZWFkZXIgb2Ygc291bmQvb3NzL2FlZHNwMTYuYy4KLSAKKwogCWFoYTE1Mng9CVtIVyxTQ1NJXQogCQkJU2VlIERvY3VtZW50YXRpb24vc2NzaS9haGExNTJ4LnR4dC4KIApAQCAtMjA1LDEwICsyMDksNiBAQAogCWFpYzc5eHg9CVtIVyxTQ1NJXQogCQkJU2VlIERvY3VtZW50YXRpb24vc2NzaS9haWM3OXh4LnR4dC4KIAotCUFNNTNDOTc0PQlbSFcsU0NTSV0KLQkJCUZvcm1hdDogPGhvc3Qtc2NzaS1pZD4sPHRhcmdldC1zY3NpLWlkPiw8bWF4LXJhdGU+LDxtYXgtb2Zmc2V0PgotCQkJU2VlIGFsc28gaGVhZGVyIG9mIGRyaXZlcnMvc2NzaS9BTTUzQzk3NC5jLgotCiAJYW1pam95Lm1hcD0JW0hXLEpPWV0gQW1pZ2Egam95c3RpY2sgc3VwcG9ydAogCQkJTWFwIG9mIGRldmljZXMgYXR0YWNoZWQgdG8gSk9ZMERBVCBhbmQgSk9ZMURBVAogCQkJRm9ybWF0OiA8YT4sPGI+CkBAIC0yMTksMjMgKzIxOSwyNCBAQAogCQkJY29ubmVjdGVkIHRvIG9uZSBvZiAxNiBnYW1lcG9ydHMKIAkJCUZvcm1hdDogPHR5cGUxPiw8dHlwZTI+LC4uPHR5cGUxNj4KIAotCWFwYz0JCVtIVyxTUEFSQ10gUG93ZXIgbWFuYWdlbWVudCBmdW5jdGlvbnMgKFNQQVJDc3RhdGlvbi00LzUgKyBkZXJpdi4pCisJYXBjPQkJW0hXLFNQQVJDXQorCQkJUG93ZXIgbWFuYWdlbWVudCBmdW5jdGlvbnMgKFNQQVJDc3RhdGlvbi00LzUgKyBkZXJpdi4pCiAJCQlGb3JtYXQ6IG5vaWRsZQogCQkJRGlzYWJsZSBBUEMgQ1BVIHN0YW5kYnkgc3VwcG9ydC4gU1BBUkNzdGF0aW9uLUZveCBkb2VzCiAJCQlub3QgcGxheSB3ZWxsIHdpdGggQVBDIENQVSBpZGxlIC0gZGlzYWJsZSBpdCBpZiB5b3UgaGF2ZQogCQkJQVBDIGFuZCB5b3VyIHN5c3RlbSBjcmFzaGVzIHJhbmRvbWx5LgogCi0JYXBpYz0JCVtBUElDLGkzODZdIENoYW5nZSB0aGUgb3V0cHV0IHZlcmJvc2l0eSAgd2hpbHN0IGJvb3RpbmcKKwlhcGljPQkJW0FQSUMsaTM4Nl0gQ2hhbmdlIHRoZSBvdXRwdXQgdmVyYm9zaXR5IHdoaWxzdCBib290aW5nCiAJCQlGb3JtYXQ6IHsgcXVpZXQgKGRlZmF1bHQpIHwgdmVyYm9zZSB8IGRlYnVnIH0KIAkJCUNoYW5nZSB0aGUgYW1vdW50IG9mIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBvdXRwdXQKIAkJCXdoZW4gaW5pdGlhbGlzaW5nIHRoZSBBUElDIGFuZCBJTy1BUElDIGNvbXBvbmVudHMuCi0gCisKIAlhcG09CQlbQVBNXSBBZHZhbmNlZCBQb3dlciBNYW5hZ2VtZW50CiAJCQlTZWUgaGVhZGVyIG9mIGFyY2gvaTM4Ni9rZXJuZWwvYXBtLmMuCiAKIAlhcHBsaWNvbT0JW0hXXQogCQkJRm9ybWF0OiA8bWVtPiw8aXJxPgotIAorCiAJYXJjcmltaT0JW0hXLE5FVF0gQVJDbmV0IC0gIlJJTSBJIiAoZW50aXJlbHkgbWVtLW1hcHBlZCkgY2FyZHMKIAkJCUZvcm1hdDogPGlvPiw8aXJxPiw8bm9kZUlEPgogCkBAIC0yNTAsMzggKzI1MSw0MCBAQAogCiAJYXRrYmQucmVzZXQ9CVtIV10gUmVzZXQga2V5Ym9hcmQgZHVyaW5nIGluaXRpYWxpemF0aW9uCiAKLQlhdGtiZC5zZXQ9CVtIV10gU2VsZWN0IGtleWJvYXJkIGNvZGUgc2V0IAotCQkJRm9ybWF0OiA8aW50PiAoMiA9IEFUIChkZWZhdWx0KSAzID0gUFMvMikKKwlhdGtiZC5zZXQ9CVtIV10gU2VsZWN0IGtleWJvYXJkIGNvZGUgc2V0CisJCQlGb3JtYXQ6IDxpbnQ+ICgyID0gQVQgKGRlZmF1bHQpLCAzID0gUFMvMikKIAogCWF0a2JkLnNjcm9sbD0JW0hXXSBFbmFibGUgc2Nyb2xsIHdoZWVsIG9uIE1TIE9mZmljZSBhbmQgc2ltaWxhcgogCQkJa2V5Ym9hcmRzCiAKIAlhdGtiZC5zb2Z0cmF3PQlbSFddIENob29zZSBiZXR3ZWVuIHN5bnRoZXRpYyBhbmQgcmVhbCByYXcgbW9kZQogCQkJRm9ybWF0OiA8Ym9vbD4gKDAgPSByZWFsLCAxID0gc3ludGhldGljIChkZWZhdWx0KSkKLQkKLQlhdGtiZC5zb2Z0cmVwZWF0PQotCQkJW0hXXSBVc2Ugc29mdHdhcmUga2V5Ym9hcmQgcmVwZWF0CisKKwlhdGtiZC5zb2Z0cmVwZWF0PSBbSFddCisJCQlVc2Ugc29mdHdhcmUga2V5Ym9hcmQgcmVwZWF0CiAKIAlhdXRvdGVzdAlbSUE2NF0KIAogCWF3ZT0JCVtIVyxPU1NdIEFXRTMyL1NCMzIvQVdFNjQgd2F2ZSB0YWJsZSBzeW50aAogCQkJRm9ybWF0OiA8aW8+LDxtZW1zaXplPiw8aXNhcG5wPgotIAorCiAJYXp0Y2Q9CQlbSFcsQ0RdIEF6dGVjaCBDRDI2OCBDRFJPTSBkcml2ZXIKIAkJCUZvcm1hdDogPGlvPiwweDc5ICg/KQogCiAJYmF5Y29tX2VwcD0JW0hXLEFYMjVdCiAJCQlGb3JtYXQ6IDxpbz4sPG1vZGU+Ci0gCisKIAliYXljb21fcGFyPQlbSFcsQVgyNV0gQmF5Q29tIFBhcmFsbGVsIFBvcnQgQVguMjUgTW9kZW0KIAkJCUZvcm1hdDogPGlvPiw8bW9kZT4KIAkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Bhci5jLgogCi0JYmF5Y29tX3Nlcl9mZHg9CVtIVyxBWDI1XSBCYXlDb20gU2VyaWFsIFBvcnQgQVguMjUgTW9kZW0gKEZ1bGwgRHVwbGV4IE1vZGUpCisJYmF5Y29tX3Nlcl9mZHg9CVtIVyxBWDI1XQorCQkJQmF5Q29tIFNlcmlhbCBQb3J0IEFYLjI1IE1vZGVtIChGdWxsIER1cGxleCBNb2RlKQogCQkJRm9ybWF0OiA8aW8+LDxpcnE+LDxtb2RlPlssPGJhdWQ+XQogCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fc2VyX2ZkeC5jLgogCi0JYmF5Y29tX3Nlcl9oZHg9CVtIVyxBWDI1XSBCYXlDb20gU2VyaWFsIFBvcnQgQVguMjUgTW9kZW0gKEhhbGYgRHVwbGV4IE1vZGUpCisJYmF5Y29tX3Nlcl9oZHg9CVtIVyxBWDI1XQorCQkJQmF5Q29tIFNlcmlhbCBQb3J0IEFYLjI1IE1vZGVtIChIYWxmIER1cGxleCBNb2RlKQogCQkJRm9ybWF0OiA8aW8+LDxpcnE+LDxtb2RlPgogCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fc2VyX2hkeC5jLgogCkBAIC0yOTIsNyArMjk1LDggQEAKIAlibGttdGRfY291bnQ9CiAKIAlidHR2LmNhcmQ9CVtIVyxWNExdIGJ0dHYgKGJ0ODQ4ICsgYnQ4NzggYmFzZWQgZ3JhYmJlciBjYXJkcykKLQlidHR2LnJhZGlvPQlNb3N0IGltcG9ydGFudCBpbnNtb2Qgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGFzIGtlcm5lbCBhcmdzIHRvby4KKwlidHR2LnJhZGlvPQlNb3N0IGltcG9ydGFudCBpbnNtb2Qgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGFzCisJCQlrZXJuZWwgYXJncyB0b28uCiAJYnR0di5wbGw9CVNlZSBEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvSW5zbW9kLW9wdGlvbnMKIAlidHR2LnR1bmVyPQlhbmQgRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L0NBUkRMSVNUCiAKQEAgLTMxOCwxNSArMzIyLDE3IEBACiAJY2hlY2tyZXFwcm90CVtTRUxJTlVYXSBTZXQgaW5pdGlhbCBjaGVja3JlcXByb3QgZmxhZyB2YWx1ZS4KIAkJCUZvcm1hdDogeyAiMCIgfCAiMSIgfQogCQkJU2VlIHNlY3VyaXR5L3NlbGludXgvS2NvbmZpZyBoZWxwIHRleHQuCi0JCQkwIC0tIGNoZWNrIHByb3RlY3Rpb24gYXBwbGllZCBieSBrZXJuZWwgKGluY2x1ZGVzIGFueSBpbXBsaWVkIGV4ZWN1dGUgcHJvdGVjdGlvbikuCisJCQkwIC0tIGNoZWNrIHByb3RlY3Rpb24gYXBwbGllZCBieSBrZXJuZWwgKGluY2x1ZGVzCisJCQkJYW55IGltcGxpZWQgZXhlY3V0ZSBwcm90ZWN0aW9uKS4KIAkJCTEgLS0gY2hlY2sgcHJvdGVjdGlvbiByZXF1ZXN0ZWQgYnkgYXBwbGljYXRpb24uCiAJCQlEZWZhdWx0IHZhbHVlIGlzIHNldCB2aWEgYSBrZXJuZWwgY29uZmlnIG9wdGlvbi4KLQkJCVZhbHVlIGNhbiBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUgdmlhIC9zZWxpbnV4L2NoZWNrcmVxcHJvdC4KLSAKLSAJY2xvY2s9CQlbQlVHUz1JQS0zMiwgSFddIGdldHRpbWVvZmRheSB0aW1lc291cmNlIG92ZXJyaWRlLiAKKwkJCVZhbHVlIGNhbiBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUgdmlhCisJCQkJL3NlbGludXgvY2hlY2tyZXFwcm90LgorCisgCWNsb2NrPQkJW0JVR1M9SUEtMzIsSFddIGdldHRpbWVvZmRheSB0aW1lc291cmNlIG92ZXJyaWRlLgogCQkJRm9yY2VzIHNwZWNpZmllZCB0aW1lc291cmNlIChpZiBhdmFsaWFibGUpIHRvIGJlIHVzZWQKLQkJCXdoZW4gY2FsY3VsYXRpbmcgZ2V0dGltZW9mZGF5KCkuIElmIHNwZWNpY2lmaWVkIHRpbWVzb3VyY2UKLQkJCWlzIG5vdCBhdmFsaWJsZSwgaXQgZGVmYXVsdHMgdG8gUElULiAKKwkJCXdoZW4gY2FsY3VsYXRpbmcgZ2V0dGltZW9mZGF5KCkuIElmIHNwZWNpY2lmaWVkCisJCQl0aW1lc291cmNlIGlzIG5vdCBhdmFsaWJsZSwgaXQgZGVmYXVsdHMgdG8gUElULgogCQkJRm9ybWF0OiB7IHBpdCB8IHRzYyB8IGN5Y2xvbmUgfCBwbXRtciB9CiAKIAlocGV0PQkJW0lBLTMyLEhQRVRdIG9wdGlvbiB0byBkaXNhYmxlIEhQRVQgYW5kIHVzZSBQSVQuCkBAIC0zMzYsMTcgKzM0MiwxOSBAQAogCQkJRm9ybWF0OiB7IGF1dG8gfCBbPGlvPixdWzxpcnE+XSB9CiAKIAljb20yMDAyMD0JW0hXLE5FVF0gQVJDbmV0IC0gQ09NMjAwMjAgY2hpcHNldAotCQkJRm9ybWF0OiA8aW8+Wyw8aXJxPlssPG5vZGVJRD5bLDxiYWNrcGxhbmU+Wyw8Y2twPlssPHRpbWVvdXQ+XV1dXV0KKwkJCUZvcm1hdDoKKwkJCTxpbz5bLDxpcnE+Wyw8bm9kZUlEPlssPGJhY2twbGFuZT5bLDxja3A+Wyw8dGltZW91dD5dXV1dXQogCiAJY29tOTBpbz0JW0hXLE5FVF0gQVJDbmV0IC0gQ09NOTB4eCBjaGlwc2V0IChJTy1tYXBwZWQgYnVmZmVycykKIAkJCUZvcm1hdDogPGlvPlssPGlycT5dCiAKLQljb205MHh4PQlbSFcsTkVUXSBBUkNuZXQgLSBDT005MHh4IGNoaXBzZXQgKG1lbW9yeS1tYXBwZWQgYnVmZmVycykKKwljb205MHh4PQlbSFcsTkVUXQorCQkJQVJDbmV0IC0gQ09NOTB4eCBjaGlwc2V0IChtZW1vcnktbWFwcGVkIGJ1ZmZlcnMpCiAJCQlGb3JtYXQ6IDxpbz5bLDxpcnE+Wyw8bWVtc3RhcnQ+XV0KIAogCWNvbmRldj0JCVtIVyxTMzkwXSBjb25zb2xlIGRldmljZQogCWNvbm1vZGU9Ci0gCisKIAljb25zb2xlPQlbS05MXSBPdXRwdXQgY29uc29sZSBkZXZpY2UgYW5kIG9wdGlvbnMuCiAKIAkJdHR5PG4+CVVzZSB0aGUgdmlydHVhbCBjb25zb2xlIGRldmljZSA8bj4uCkBAIC0zNjcsNyArMzc1LDggQEAKIAkJCW9wdGlvbnMgYXJlIHRoZSBzYW1lIGFzIGZvciB0dHlTLCBhYm92ZS4KIAogCWNwY2locF9nZW5lcmljPQlbSFcsUENJXSBHZW5lcmljIHBvcnQgSS9PIENvbXBhY3RQQ0kgZHJpdmVyCi0JCQlGb3JtYXQ6IDxmaXJzdF9zbG90Piw8bGFzdF9zbG90Piw8cG9ydD4sPGVudW1fYml0PlssPGRlYnVnPl0KKwkJCUZvcm1hdDoKKwkJCTxmaXJzdF9zbG90Piw8bGFzdF9zbG90Piw8cG9ydD4sPGVudW1fYml0PlssPGRlYnVnPl0KIAogCWNwaWFfcHA9CVtIVyxQUFRdCiAJCQlGb3JtYXQ6IHsgcGFycG9ydDxucj4gfCBhdXRvIHwgbm9uZSB9CkBAIC0zODQsMTAgKzM5MywxMCBAQAogCiAJY3M4OXgwX21lZGlhPQlbSFcsTkVUXQogCQkJRm9ybWF0OiB7IHJqNDUgfCBhdWkgfCBibmMgfQotIAorCiAJY3ljbGFkZXM9CVtIVyxTRVJJQUxdIEN5Y2xhZGVzIG11bHRpLXNlcmlhbCBwb3J0IGFkYXB0ZXIuCi0gCi0JZGFzZD0JCVtIVyxORVRdICAgIAorCisJZGFzZD0JCVtIVyxORVRdCiAJCQlTZWUgaGVhZGVyIG9mIGRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jLgogCiAJZGI5LmRldlsyfDNdPQlbSFcsSk9ZXSBNdWx0aXN5c3RlbSBqb3lzdGljayBzdXBwb3J0IHZpYSBwYXJhbGxlbCBwb3J0CkBAIC00MDYsNyArNDE1LDcgQEAKIAogCWRoYXNoX2VudHJpZXM9CVtLTkxdCiAJCQlTZXQgbnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgZGVudHJ5IGNhY2hlLgotIAorCiAJZGlnaT0JCVtIVyxTRVJJQUxdCiAJCQlJTyBwYXJhbWV0ZXJzICsgZW5hYmxlL2Rpc2FibGUgY29tbWFuZC4KIApAQCAtNDI0LDExICs0MzMsMTEgQEAKIAogCWR0YzMxODFlPQlbSFcsU0NTSV0KIAotCWVhcmx5cHJpbnRrPQlbSUEtMzIsIFg4Ni02NF0KKwllYXJseXByaW50az0JW0lBLTMyLFg4Ni02NF0KIAkJCWVhcmx5cHJpbnRrPXZnYQogCQkJZWFybHlwcmludGs9c2VyaWFsWyx0dHlTblssYmF1ZHJhdGVdXQogCi0JCQlBcHBlbmQgLGtlZXAgdG8gbm90IGRpc2FibGUgaXQgd2hlbiB0aGUgcmVhbCBjb25zb2xlCisJCQlBcHBlbmQgIixrZWVwIiB0byBub3QgZGlzYWJsZSBpdCB3aGVuIHRoZSByZWFsIGNvbnNvbGUKIAkJCXRha2VzIG92ZXIuCiAKIAkJCU9ubHkgdmdhIG9yIHNlcmlhbCBhdCBhIHRpbWUsIG5vdCBib3RoLgpAQCAtNDUxLDcgKzQ2MCw3IEBACiAJCQlGb3JtYXQ6IHsib2ZbZl0iIHwgInNrW2lwbWJyXSJ9CiAJCQlTZWUgY29tbWVudCBpbiBhcmNoL2kzODYvYm9vdC9lZGQuUwogCi0JZWljb249CQlbSFcsSVNETl0gCisJZWljb249CQlbSFcsSVNETl0KIAkJCUZvcm1hdDogPGlkPiw8bWVtYmFzZT4sPGlycT4KIAogCWVpc2FfaXJxX2VkZ2U9CVtQQVJJU0MsSFddCkBAIC00NjIsMTIgKzQ3MSwxMyBAQAogCQkJYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lbGFuZnJlcS5jLgogCiAJZWxldmF0b3I9CVtJT1NDSEVEXQotCQkJRm9ybWF0OiB7ImFzInwiY2ZxInwiZGVhZGxpbmUifCJub29wIn0KLQkJCVNlZSBEb2N1bWVudGF0aW9uL2Jsb2NrL2FzLWlvc2NoZWQudHh0Ci0JCQlhbmQgRG9jdW1lbnRhdGlvbi9ibG9jay9kZWFkbGluZS1pb3NjaGVkLnR4dCBmb3IgZGV0YWlscy4KKwkJCUZvcm1hdDogeyJhcyIgfCAiY2ZxIiB8ICJkZWFkbGluZSIgfCAibm9vcCJ9CisJCQlTZWUgRG9jdW1lbnRhdGlvbi9ibG9jay9hcy1pb3NjaGVkLnR4dCBhbmQKKwkJCURvY3VtZW50YXRpb24vYmxvY2svZGVhZGxpbmUtaW9zY2hlZC50eHQgZm9yIGRldGFpbHMuCisKIAllbGZjb3JlaGRyPQlbSUEtMzJdCi0JCQlTcGVjaWZpZXMgcGh5c2ljYWwgYWRkcmVzcyBvZiBzdGFydCBvZiBrZXJuZWwgY29yZSBpbWFnZQotCQkJZWxmIGhlYWRlci4KKwkJCVNwZWNpZmllcyBwaHlzaWNhbCBhZGRyZXNzIG9mIHN0YXJ0IG9mIGtlcm5lbCBjb3JlCisJCQlpbWFnZSBlbGYgaGVhZGVyLgogCQkJU2VlIERvY3VtZW50YXRpb24va2R1bXAudHh0IGZvciBkZXRhaWxzLgogCiAJZW5mb3JjaW5nCVtTRUxJTlVYXSBTZXQgaW5pdGlhbCBlbmZvcmNpbmcgc3RhdHVzLgpAQCAtNDg1LDcgKzQ5NSw3IEBACiAJZXMxMzcxPQkJW0hXLE9TU10KIAkJCUZvcm1hdDogPHNwZGlmPixbPG5vbWl4PixbPGFtcGxpZmllcj5dXQogCQkJU2VlIGFsc28gaGVhZGVyIG9mIHNvdW5kL29zcy9lczEzNzEuYy4KLSAKKwogCWV0aGVyPQkJW0hXLE5FVF0gRXRoZXJuZXQgY2FyZHMgcGFyYW1ldGVycwogCQkJVGhpcyBvcHRpb24gaXMgb2Jzb2xldGVkIGJ5IHRoZSAibmV0ZGV2PSIgb3B0aW9uLCB3aGljaAogCQkJaGFzIGVxdWl2YWxlbnQgdXNhZ2UuIFNlZSBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KQEAgLTUyNiwxMiArNTM2LDEzIEBACiAKIAlndXM9CQlbSFcsT1NTXQogCQkJRm9ybWF0OiA8aW8+LDxpcnE+LDxkbWE+LDxkbWExNj4KLSAKKwogCWd2cDExPQkJW0hXLFNDU0ldCiAKIAloYXNoZGlzdD0JW0tOTCxOVU1BXSBMYXJnZSBoYXNoZXMgYWxsb2NhdGVkIGR1cmluZyBib290CiAJCQlhcmUgZGlzdHJpYnV0ZWQgYWNyb3NzIE5VTUEgbm9kZXMuICBEZWZhdWx0cyBvbgogCQkJZm9yIElBLTY0LCBvZmYgb3RoZXJ3aXNlLgorCQkJRm9ybWF0OiAwIHwgMSAoZm9yIG9mZiB8IG9uKQogCiAJaGNsPQkJW0lBLTY0XSBTR0kncyBIYXJkd2FyZSBHcmFwaCBjb21wYXRpYmlsaXR5IGxheWVyCiAKQEAgLTU5NSwxMyArNjA2LDEzIEBACiAJaWRlPz0JCVtIV10gKEUpSURFIHN1YnN5c3RlbQogCQkJRm9ybWF0OiBpZGU/PW5vcHJvYmUgb3IgY2hpcHNldCBzcGVjaWZpYyBwYXJhbWV0ZXJzLgogCQkJU2VlIERvY3VtZW50YXRpb24vaWRlLnR4dC4KLQkKKwogCWlkZWJ1cz0JCVtIV10gKEUpSURFIHN1YnN5c3RlbSAtIFZMQi9QQ0kgYnVzIHNwZWVkCiAJCQlTZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0LgogCiAJaWRsZT0JCVtIV10KIAkJCUZvcm1hdDogaWRsZT1wb2xsIG9yIGlkbGU9aGFsdAotIAorCiAJaWhhc2hfZW50cmllcz0JW0tOTF0KIAkJCVNldCBudW1iZXIgb2YgaGFzaCBidWNrZXRzIGZvciBpbm9kZSBjYWNoZS4KIApAQCAtNjQ5LDcgKzY2MCw3IEBACiAJCQlmaXJtd2FyZSBydW5uaW5nLgogCiAJaXNhcG5wPQkJW0lTQVBOUF0KLQkJCUZvcm1hdDogPFJEUD4sIDxyZXNldD4sIDxwY2lfc2Nhbj4sIDx2ZXJib3NpdHk+CisJCQlGb3JtYXQ6IDxSRFA+LDxyZXNldD4sPHBjaV9zY2FuPiw8dmVyYm9zaXR5PgogCiAJaXNvbGNwdXM9CVtLTkwsU01QXSBJc29sYXRlIENQVXMgZnJvbSB0aGUgZ2VuZXJhbCBzY2hlZHVsZXIuCiAJCQlGb3JtYXQ6IDxjcHUgbnVtYmVyPiwuLi4sPGNwdSBudW1iZXI+CkBAIC02NjEsMzIgKzY3MiwzMyBAQAogCQkJIm51bWJlciBvZiBDUFVzIGluIHN5c3RlbSAtIDEiLgogCiAJCQlUaGlzIG9wdGlvbiBpcyB0aGUgcHJlZmVycmVkIHdheSB0byBpc29sYXRlIENQVXMuIFRoZQotCQkJYWx0ZXJuYXRpdmUgLSBtYW51YWxseSBzZXR0aW5nIHRoZSBDUFUgbWFzayBvZiBhbGwgdGFza3MKLQkJCWluIHRoZSBzeXN0ZW0gY2FuIGNhdXNlIHByb2JsZW1zIGFuZCBzdWJvcHRpbWFsIGxvYWQKLQkJCWJhbGFuY2VyIHBlcmZvcm1hbmNlLgorCQkJYWx0ZXJuYXRpdmUgLS0gbWFudWFsbHkgc2V0dGluZyB0aGUgQ1BVIG1hc2sgb2YgYWxsCisJCQl0YXNrcyBpbiB0aGUgc3lzdGVtIC0tIGNhbiBjYXVzZSBwcm9ibGVtcyBhbmQKKwkJCXN1Ym9wdGltYWwgbG9hZCBiYWxhbmNlciBwZXJmb3JtYW5jZS4KIAogCWlzcDE2PQkJW0hXLENEXQogCQkJRm9ybWF0OiA8aW8+LDxpcnE+LDxkbWE+LDxzZXR1cD4KIAotCWl1Y3Y9CQlbSFcsTkVUXSAKKwlpdWN2PQkJW0hXLE5FVF0KIAogCWpzPQkJW0hXLEpPWV0gQW5hbG9nIGpveXN0aWNrCiAJCQlTZWUgRG9jdW1lbnRhdGlvbi9pbnB1dC9qb3lzdGljay50eHQuCiAKIAlrZWVwaW5pdHJkCVtIVyxBUk1dCiAKLQlrc3RhY2s9TglbSUEtMzIsIFg4Ni02NF0gUHJpbnQgTiB3b3JkcyBmcm9tIHRoZSBrZXJuZWwgc3RhY2sKKwlrc3RhY2s9TglbSUEtMzIsWDg2LTY0XSBQcmludCBOIHdvcmRzIGZyb20gdGhlIGtlcm5lbCBzdGFjawogCQkJaW4gb29wcyBkdW1wcy4KIAogCWwyY3I9CQlbUFBDXQogCi0JbGFwaWMJCVtJQS0zMixBUElDXSBFbmFibGUgdGhlIGxvY2FsIEFQSUMgZXZlbiBpZiBCSU9TIGRpc2FibGVkIGl0LgorCWxhcGljCQlbSUEtMzIsQVBJQ10gRW5hYmxlIHRoZSBsb2NhbCBBUElDIGV2ZW4gaWYgQklPUworCQkJZGlzYWJsZWQgaXQuCiAKIAlsYXNpPQkJW0hXLFNDU0ldIFBBUklTQyBMQVNJIGRyaXZlciBmb3IgdGhlIDUzYzcwMCBjaGlwCiAJCQlGb3JtYXQ6IGFkZHI6PGlvPixpcnE6PGlycT4KIAotCWxsc2MqPQkJW0lBNjRdCi0JCQlTZWUgZnVuY3Rpb24gcHJpbnRfcGFyYW1zKCkgaW4gYXJjaC9pYTY0L3NuL2tlcm5lbC9sbHNjNC5jLgorCWxsc2MqPQkJW0lBNjRdIFNlZSBmdW5jdGlvbiBwcmludF9wYXJhbXMoKSBpbgorCQkJYXJjaC9pYTY0L3NuL2tlcm5lbC9sbHNjNC5jLgogCiAJbG9hZF9yYW1kaXNrPQlbUkFNXSBMaXN0IG9mIHJhbWRpc2tzIHRvIGxvYWQgZnJvbSBmbG9wcHkKIAkJCVNlZSBEb2N1bWVudGF0aW9uL3JhbWRpc2sudHh0LgpAQCAtNzEzLDggKzcyNSw5IEBACiAJCQk3IChLRVJOX0RFQlVHKQkJZGVidWctbGV2ZWwgbWVzc2FnZXMKIAogCWxvZ19idWZfbGVuPW4JU2V0cyB0aGUgc2l6ZSBvZiB0aGUgcHJpbnRrIHJpbmcgYnVmZmVyLCBpbiBieXRlcy4KLQkJCUZvcm1hdCBpcyBuLCBuaywgbk0uICBuIG11c3QgYmUgYSBwb3dlciBvZiB0d28uICBUaGUKLQkJCWRlZmF1bHQgaXMgc2V0IGluIGtlcm5lbCBjb25maWcuCisJCQlGb3JtYXQ6IHsgbiB8IG5rIHwgbk0gfQorCQkJbiBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiAgVGhlIGRlZmF1bHQgc2l6ZQorCQkJaXMgc2V0IGluIHRoZSBrZXJuZWwgY29uZmlnIGZpbGUuCiAKIAlscD0wCQlbTFBdCVNwZWNpZnkgcGFyYWxsZWwgcG9ydHMgdG8gdXNlLCBlLmcsCiAJbHA9cG9ydFsscG9ydC4uLl0JbHA9bm9uZSxwYXJwb3J0MCAobHAwIG5vdCBjb25maWd1cmVkLCBscDEgdXNlcwpAQCAtNzUwLDIzICs3NjMsMjMgQEAKIAlsdHBjPQkJW05FVF0KIAkJCUZvcm1hdDogPGlvPiw8aXJxPiw8ZG1hPgogCi0JbWFjNTM4MD0JW0hXLFNDU0ldCi0JCQlGb3JtYXQ6IDxjYW5fcXVldWU+LDxjbWRfcGVyX2x1bj4sPHNnX3RhYmxlc2l6ZT4sPGhvc3RpZD4sPHVzZV90YWdzPgorCW1hYzUzODA9CVtIVyxTQ1NJXSBGb3JtYXQ6CisJCQk8Y2FuX3F1ZXVlPiw8Y21kX3Blcl9sdW4+LDxzZ190YWJsZXNpemU+LDxob3N0aWQ+LDx1c2VfdGFncz4KIAotCW1hYzUzYzl4PQlbSFcsU0NTSV0KLQkJCUZvcm1hdDogPG51bV9lc3BzPiw8ZGlzY29ubmVjdD4sPG5vc3luYz4sPGNhbl9xdWV1ZT4sPGNtZF9wZXJfbHVuPiw8c2dfdGFibGVzaXplPiw8aG9zdGlkPiw8dXNlX3RhZ3M+CisJbWFjNTNjOXg9CVtIVyxTQ1NJXSBGb3JtYXQ6CisJCQk8bnVtX2VzcHM+LDxkaXNjb25uZWN0Piw8bm9zeW5jPiw8Y2FuX3F1ZXVlPiw8Y21kX3Blcl9sdW4+LDxzZ190YWJsZXNpemU+LDxob3N0aWQ+LDx1c2VfdGFncz4KIAotCW1hY2h2ZWM9CVtJQTY0XQotCQkJRm9yY2UgdGhlIHVzZSBvZiBhIHBhcnRpY3VsYXIgbWFjaGluZS12ZWN0b3IgKG1hY2h2ZWMpIGluIGEgZ2VuZXJpYwotCQkJa2VybmVsLiAgRXhhbXBsZTogbWFjaHZlYz1ocHp4MV9zd2lvdGxiCisJbWFjaHZlYz0JW0lBNjRdIEZvcmNlIHRoZSB1c2Ugb2YgYSBwYXJ0aWN1bGFyIG1hY2hpbmUtdmVjdG9yCisJCQkobWFjaHZlYykgaW4gYSBnZW5lcmljIGtlcm5lbC4KKwkJCUV4YW1wbGU6IG1hY2h2ZWM9aHB6eDFfc3dpb3RsYgogCi0JbWFkMTY9CQlbSFcsT1NTXQotCQkJRm9ybWF0OiA8aW8+LDxpcnE+LDxkbWE+LDxkbWExNj4sPG1wdV9pbz4sPG1wdV9pcnE+LDxqb3lzdGljaz4KKwltYWQxNj0JCVtIVyxPU1NdIEZvcm1hdDoKKwkJCTxpbz4sPGlycT4sPGRtYT4sPGRtYTE2Piw8bXB1X2lvPiw8bXB1X2lycT4sPGpveXN0aWNrPgogCiAJbWF1aT0JCVtIVyxPU1NdCiAJCQlGb3JtYXQ6IDxpbz4sPGlycT4KLSAKLQltYXhfbG9vcD0gICAgICAgW0xPT1BdIE1heGltdW0gbnVtYmVyIG9mIGxvb3BiYWNrIGRldmljZXMgdGhhdCBjYW4KKworCW1heF9sb29wPQlbTE9PUF0gTWF4aW11bSBudW1iZXIgb2YgbG9vcGJhY2sgZGV2aWNlcyB0aGF0IGNhbgogCQkJYmUgbW91bnRlZAogCQkJRm9ybWF0OiA8MS0yNTY+CiAKQEAgLTc3NiwxMSArNzg5LDExIEBACiAJbWF4X2FkZHI9W0tNR10JW0tOTCxCT09ULGlhNjRdIEFsbCBwaHlzaWNhbCBtZW1vcnkgZ3JlYXRlciB0aGFuIG9yCiAJCQllcXVhbCB0byB0aGlzIHBoeXNpY2FsIGFkZHJlc3MgaXMgaWdub3JlZC4KIAotCW1heF9sdW5zPQlbU0NTSV0gTWF4aW11bSBudW1iZXIgb2YgTFVOcyB0byBwcm9iZQorCW1heF9sdW5zPQlbU0NTSV0gTWF4aW11bSBudW1iZXIgb2YgTFVOcyB0byBwcm9iZS4KIAkJCVNob3VsZCBiZSBiZXR3ZWVuIDEgYW5kIDJeMzItMS4KIAogCW1heF9yZXBvcnRfbHVucz0KLQkJCVtTQ1NJXSBNYXhpbXVtIG51bWJlciBvZiBMVU5zIHJlY2VpdmVkCisJCQlbU0NTSV0gTWF4aW11bSBudW1iZXIgb2YgTFVOcyByZWNlaXZlZC4KIAkJCVNob3VsZCBiZSBiZXR3ZWVuIDEgYW5kIDE2Mzg0LgogCiAJbWNhLXBlbnRpdW0JW0JVR1M9SUEtMzJdCkBAIC03OTYsMTEgKzgwOSwxMSBAQAogCiAJbWQ9CQlbSFddIFJBSUQgc3Vic3lzdGVtcyBkZXZpY2VzIGFuZCBsZXZlbAogCQkJU2VlIERvY3VtZW50YXRpb24vbWQudHh0LgotIAorCiAJbWRhY29uPQkJW01EQV0KIAkJCUZvcm1hdDogPGZpcnN0Piw8bGFzdD4KIAkJCVNwZWNpZmllcyByYW5nZSBvZiBjb25zb2xlcyB0byBiZSBjYXB0dXJlZCBieSB0aGUgTURBLgotIAorCiAJbWVtPW5uW0tNR10JW0tOTCxCT09UXSBGb3JjZSB1c2FnZSBvZiBhIHNwZWNpZmljIGFtb3VudCBvZiBtZW1vcnkKIAkJCUFtb3VudCBvZiBtZW1vcnkgdG8gYmUgdXNlZCB3aGVuIHRoZSBrZXJuZWwgaXMgbm90IGFibGUKIAkJCXRvIHNlZSB0aGUgd2hvbGUgc3lzdGVtIG1lbW9yeSBvciBmb3IgdGVzdC4KQEAgLTg1MSwxNSArODY0LDE1IEBACiAJTVREX1BhcnRpdGlvbj0JW01URF0KIAkJCUZvcm1hdDogPG5hbWU+LDxyZWdpb24tbnVtYmVyPiw8c2l6ZT4sPG9mZnNldD4KIAotCU1URF9SZWdpb249CVtNVERdCi0JCQlGb3JtYXQ6IDxuYW1lPiw8cmVnaW9uLW51bWJlcj5bLDxiYXNlPiw8c2l6ZT4sPGJ1c3dpZHRoPiw8YWx0YnVzd2lkdGg+XQorCU1URF9SZWdpb249CVtNVERdIEZvcm1hdDoKKwkJCTxuYW1lPiw8cmVnaW9uLW51bWJlcj5bLDxiYXNlPiw8c2l6ZT4sPGJ1c3dpZHRoPiw8YWx0YnVzd2lkdGg+XQogCiAJbXRkcGFydHM9CVtNVERdCiAJCQlTZWUgZHJpdmVycy9tdGQvY21kbGluZS5jLgogCiAJbXRvdWNodXNiLnJhd19jb29yZGluYXRlcz0KLQkJCVtIV10gTWFrZSB0aGUgTWljcm9Ub3VjaCBVU0IgZHJpdmVyIHVzZSByYXcgY29vcmRpbmF0ZXMgKCd5JywgZGVmYXVsdCkKLQkJCW9yIGNvb2tlZCBjb29yZGluYXRlcyAoJ24nKQorCQkJW0hXXSBNYWtlIHRoZSBNaWNyb1RvdWNoIFVTQiBkcml2ZXIgdXNlIHJhdyBjb29yZGluYXRlcworCQkJKCd5JywgZGVmYXVsdCkgb3IgY29va2VkIGNvb3JkaW5hdGVzICgnbicpCiAKIAluMj0JCVtORVRdIFNETCBJbmMuIFJJU0NvbS9OMiBzeW5jaHJvbm91cyBzZXJpYWwgY2FyZAogCkBAIC04ODAsNyArODkzLDkgQEAKIAkJCUZvcm1hdDogPGlycT4sPGlvPiw8bWVtX3N0YXJ0Piw8bWVtX2VuZD4sPG5hbWU+CiAJCQlOb3RlIHRoYXQgbWVtX3N0YXJ0IGlzIG9mdGVuIG92ZXJsb2FkZWQgdG8gbWVhbgogCQkJc29tZXRoaW5nIGRpZmZlcmVudCBhbmQgZHJpdmVyLXNwZWNpZmljLgotIAorCQkJVGhpcyB1c2FnZSBpcyBvbmx5IGRvY3VtZW50ZWQgaW4gZWFjaCBkcml2ZXIgc291cmNlCisJCQlmaWxlIGlmIGF0IGFsbC4KKwogCW5mc2FkZHJzPQlbTkZTXQogCQkJU2VlIERvY3VtZW50YXRpb24vbmZzcm9vdC50eHQuCiAKQEAgLTg5Myw4ICs5MDgsOCBAQAogCQkJZW11bGF0aW9uIGxpYnJhcnkgZXZlbiBpZiBhIDM4NyBtYXRocyBjb3Byb2Nlc3NvcgogCQkJaXMgcHJlc2VudC4KIAotCW5vYWxpZ24JCVtLTkwsQVJNXSAKLSAKKwlub2FsaWduCQlbS05MLEFSTV0KKwogCW5vYXBpYwkJW1NNUCxBUElDXSBUZWxscyB0aGUga2VybmVsIHRvIG5vdCBtYWtlIHVzZSBvZiBhbnkKIAkJCUlPQVBJQ3MgdGhhdCBtYXkgYmUgcHJlc2VudCBpbiB0aGUgc3lzdGVtLgogCkBAIC05MDUsMTkgKzkyMCwxOSBAQAogCQkJb24gIkNsYXNzaWMiIFBQQyBjb3Jlcy4KIAogCW5vY2FjaGUJCVtBUk1dCi0gCisKIAlub2Rpc2Nvbm5lY3QJW0hXLFNDU0ksTTY4S10gRGlzYWJsZXMgU0NTSSBkaXNjb25uZWN0cy4KIAogCW5vZXhlYwkJW0lBLTY0XQogCi0Jbm9leGVjCQlbSUEtMzIsIFg4Ni02NF0KKwlub2V4ZWMJCVtJQS0zMixYODYtNjRdCiAJCQlub2V4ZWM9b246IGVuYWJsZSBub24tZXhlY3V0YWJsZSBtYXBwaW5ncyAoZGVmYXVsdCkKIAkJCW5vZXhlYz1vZmY6IGRpc2FibGUgbm4tZXhlY3V0YWJsZSBtYXBwaW5ncwogCiAJbm9meHNyCQlbQlVHUz1JQS0zMl0KIAogCW5vaGx0CQlbQlVHUz1BUk1dCi0gCisKIAluby1obHQJCVtCVUdTPUlBLTMyXSBUZWxscyB0aGUga2VybmVsIHRoYXQgdGhlIGhsdAogCQkJaW5zdHJ1Y3Rpb24gZG9lc24ndCB3b3JrIGNvcnJlY3RseSBhbmQgbm90IHRvCiAJCQl1c2UgaXQuCkBAIC05NDgsOCArOTYzLDkgQEAKIAogCW5vcmVzaWR1YWwJW1BQQ10gRG9uJ3QgdXNlIHJlc2lkdWFsIGRhdGEgb24gUFJlUCBtYWNoaW5lcy4KIAotCW5vcmVzdW1lCVtTV1NVU1BdIERpc2FibGVzIHJlc3VtZSBhbmQgcmVzdG9yZSBvcmlnaW5hbCBzd2FwIHNwYWNlLgotIAorCW5vcmVzdW1lCVtTV1NVU1BdIERpc2FibGVzIHJlc3VtZSBhbmQgcmVzdG9yZXMgb3JpZ2luYWwgc3dhcAorCQkJc3BhY2UuCisKIAluby1zY3JvbGwJW1ZHQV0gRGlzYWJsZXMgc2Nyb2xsYmFjay4KIAkJCVRoaXMgaXMgcmVxdWlyZWQgZm9yIHRoZSBCcmFpbGxleCBpYjgwLXBpZXpvIEJyYWlsbGUKIAkJCXJlYWRlciBtYWRlIGJ5IEYuSC4gUGFwZW5tZWllciAoR2VybWFueSkuCkBAIC05NjUsMTYgKzk4MSwxNiBAQAogCW5vdXNiCQlbVVNCXSBEaXNhYmxlIHRoZSBVU0Igc3Vic3lzdGVtCiAKIAlub3diCQlbQVJNXQotIAorCiAJb3BsMz0JCVtIVyxPU1NdCiAJCQlGb3JtYXQ6IDxpbz4KIAogCW9wbDNzYT0JCVtIVyxPU1NdCiAJCQlGb3JtYXQ6IDxpbz4sPGlycT4sPGRtYT4sPGRtYTI+LDxtcHVfaW8+LDxtcHVfaXJxPgogCi0Jb3BsM3NhMj0JW0hXLE9TU10KLQkJCUZvcm1hdDogPGlvPiw8aXJxPiw8ZG1hPiw8ZG1hMj4sPG1zc19pbz4sPG1wdV9pbz4sPHltb2RlPiw8bG9vcGJhY2s+Wyw8aXNhcG5wPiw8bXVsdGlwbGVdCi0gCisJb3BsM3NhMj0JW0hXLE9TU10gRm9ybWF0OgorCQkJPGlvPiw8aXJxPiw8ZG1hPiw8ZG1hMj4sPG1zc19pbz4sPG1wdV9pbz4sPHltb2RlPiw8bG9vcGJhY2s+Wyw8aXNhcG5wPiw8bXVsdGlwbGVdCisKIAlvcHJvZmlsZS50aW1lcj0JW0hXXQogCQkJVXNlIHRpbWVyIGludGVycnVwdCBpbnN0ZWFkIG9mIHBlcmZvcm1hbmNlIGNvdW50ZXJzCiAKQEAgLTk5MywzNiArMTAwOSwzMyBAQAogCQkJRm9ybWF0OiA8cGFycG9ydCM+CiAJcGFya2JkLm1vZGU9CVtIV10gUGFyYWxsZWwgcG9ydCBrZXlib2FyZCBhZGFwdGVyIG1vZGUgb2Ygb3BlcmF0aW9uLAogCQkJMCBmb3IgWFQsIDEgZm9yIEFUIChkZWZhdWx0IGlzIEFUKS4KLQkJCUZvcm1hdDogPG1vZGU+IAorCQkJRm9ybWF0OiA8bW9kZT4KIAotCXBhcnBvcnQ9MAlbSFcsUFBUXQlTcGVjaWZ5IHBhcmFsbGVsIHBvcnRzLiAwIGRpc2FibGVzLgotCXBhcnBvcnQ9YXV0bwkJCVVzZSAnYXV0bycgdG8gZm9yY2UgdGhlIGRyaXZlciB0byB1c2UKLQlwYXJwb3J0PTB4QkJCWyxJUlFbLERNQV1dCWFueSBJUlEvRE1BIHNldHRpbmdzIGRldGVjdGVkICh0aGUKLQkJCQkJZGVmYXVsdCBpcyB0byBpZ25vcmUgZGV0ZWN0ZWQgSVJRL0RNQQotCQkJCQlzZXR0aW5ncyBiZWNhdXNlIG9mIHBvc3NpYmxlCi0JCQkJCWNvbmZsaWN0cykuIFlvdSBjYW4gc3BlY2lmeSB0aGUgYmFzZQotCQkJCQlhZGRyZXNzLCBJUlEsIGFuZCBETUEgc2V0dGluZ3M7IElSUSBhbmQKLQkJCQkJRE1BIHNob3VsZCBiZSBudW1iZXJzLCBvciAnYXV0bycgKGZvcgotCQkJCQl1c2luZyBkZXRlY3RlZCBzZXR0aW5ncyBvbiB0aGF0Ci0JCQkJCXBhcnRpY3VsYXIgcG9ydCksIG9yICdub2ZpZm8nICh0byBhdm9pZAotCQkJCQl1c2luZyBhIEZJRk8gZXZlbiBpZiBpdCBpcyBkZXRlY3RlZCkuCi0JCQkJCVBhcmFsbGVsIHBvcnRzIGFyZSBhc3NpZ25lZCBpbiB0aGUKLQkJCQkJb3JkZXIgdGhleSBhcmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kCi0JCQkJCWxpbmUsIHN0YXJ0aW5nIHdpdGggcGFycG9ydDAuCisJcGFycG9ydD0JW0hXLFBQVF0gU3BlY2lmeSBwYXJhbGxlbCBwb3J0cy4gMCBkaXNhYmxlcy4KKwkJCUZvcm1hdDogeyAwIHwgYXV0byB8IDB4QkJCWyxJUlFbLERNQV1dIH0KKwkJCVVzZSAnYXV0bycgdG8gZm9yY2UgdGhlIGRyaXZlciB0byB1c2UgYW55CisJCQlJUlEvRE1BIHNldHRpbmdzIGRldGVjdGVkICh0aGUgZGVmYXVsdCBpcyB0bworCQkJaWdub3JlIGRldGVjdGVkIElSUS9ETUEgc2V0dGluZ3MgYmVjYXVzZSBvZgorCQkJcG9zc2libGUgY29uZmxpY3RzKS4gWW91IGNhbiBzcGVjaWZ5IHRoZSBiYXNlCisJCQlhZGRyZXNzLCBJUlEsIGFuZCBETUEgc2V0dGluZ3M7IElSUSBhbmQgRE1BCisJCQlzaG91bGQgYmUgbnVtYmVycywgb3IgJ2F1dG8nIChmb3IgdXNpbmcgZGV0ZWN0ZWQKKwkJCXNldHRpbmdzIG9uIHRoYXQgcGFydGljdWxhciBwb3J0KSwgb3IgJ25vZmlmbycKKwkJCSh0byBhdm9pZCB1c2luZyBhIEZJRk8gZXZlbiBpZiBpdCBpcyBkZXRlY3RlZCkuCisJCQlQYXJhbGxlbCBwb3J0cyBhcmUgYXNzaWduZWQgaW4gdGhlIG9yZGVyIHRoZXkKKwkJCWFyZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgc3RhcnRpbmcKKwkJCXdpdGggcGFycG9ydDAuCiAKLQlwYXJwb3J0X2luaXRfbW9kZT0KLQkJCVtIVyxQUFRdCUNvbmZpZ3VyZSBWSUEgcGFyYWxsZWwgcG9ydCB0bwotCQkJCQlvcGVyYXRlIGluIHNwZWNpZmljIG1vZGUuIFRoaXMgaXMKLQkJCQkJbmVjZXNzYXJ5IG9uIFBlZ2Fzb3MgY29tcHV0ZXIgd2hlcmUKLQkJCQkJZmlybXdhcmUgaGFzIG5vIG9wdGlvbnMgZm9yIHNldHRpbmcgdXAKLQkJCQkJcGFyYWxsZWwgcG9ydCBtb2RlIGFuZCBzZXRzIGl0IHRvCi0JCQkJCXNwcC4gQ3VycmVudGx5IHRoaXMgZnVuY3Rpb24ga25vd3MKLQkJCQkJNjg2YSBhbmQgODIzMSBjaGlwcy4KKwlwYXJwb3J0X2luaXRfbW9kZT0JW0hXLFBQVF0KKwkJCUNvbmZpZ3VyZSBWSUEgcGFyYWxsZWwgcG9ydCB0byBvcGVyYXRlIGluCisJCQlhIHNwZWNpZmljIG1vZGUuIFRoaXMgaXMgbmVjZXNzYXJ5IG9uIFBlZ2Fzb3MKKwkJCWNvbXB1dGVyIHdoZXJlIGZpcm13YXJlIGhhcyBubyBvcHRpb25zIGZvciBzZXR0aW5nCisJCQl1cCBwYXJhbGxlbCBwb3J0IG1vZGUgYW5kIHNldHMgaXQgdG8gc3BwLgorCQkJQ3VycmVudGx5IHRoaXMgZnVuY3Rpb24ga25vd3MgNjg2YSBhbmQgODIzMSBjaGlwcy4KIAkJCUZvcm1hdDogW3NwcHxwczJ8ZXBwfGVjcHxlY3BlcHBdCiAKLQlwYXMyPQkJW0hXLE9TU10KLQkJCUZvcm1hdDogPGlvPiw8aXJxPiw8ZG1hPiw8ZG1hMTY+LDxzYl9pbz4sPHNiX2lycT4sPHNiX2RtYT4sPHNiX2RtYTE2PgotIAorCXBhczI9CQlbSFcsT1NTXSBGb3JtYXQ6CisJCQk8aW8+LDxpcnE+LDxkbWE+LDxkbWExNj4sPHNiX2lvPiw8c2JfaXJxPiw8c2JfZG1hPiw8c2JfZG1hMTY+CisKIAlwYXMxNj0JCVtIVyxTQ1NJXQogCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL3Njc2kvcGFzMTYuYy4KIApAQCAtMTAzMiw2NCArMTA0NSw2NyBAQAogCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL2Jsb2NrL3BhcmlkZS9wY2QuYy4KIAkJCVNlZSBhbHNvIERvY3VtZW50YXRpb24vcGFyaWRlLnR4dC4KIAotCXBjaT1vcHRpb25bLG9wdGlvbi4uLl0JCVtQQ0ldIHZhcmlvdXMgUENJIHN1YnN5c3RlbSBvcHRpb25zOgotCQlvZmYJCQlbSUEtMzJdIGRvbid0IHByb2JlIGZvciB0aGUgUENJIGJ1cwotCQliaW9zCQkJW0lBLTMyXSBmb3JjZSB1c2Ugb2YgUENJIEJJT1MsIGRvbid0IGFjY2VzcwotCQkJCQl0aGUgaGFyZHdhcmUgZGlyZWN0bHkuIFVzZSB0aGlzIGlmIHlvdXIgbWFjaGluZQotCQkJCQloYXMgYSBub24tc3RhbmRhcmQgUENJIGhvc3QgYnJpZGdlLgotCQlub2Jpb3MJCQlbSUEtMzJdIGRpc2FsbG93IHVzZSBvZiBQQ0kgQklPUywgb25seSBkaXJlY3QKLQkJCQkJaGFyZHdhcmUgYWNjZXNzIG1ldGhvZHMgYXJlIGFsbG93ZWQuIFVzZSB0aGlzCi0JCQkJCWlmIHlvdSBleHBlcmllbmNlIGNyYXNoZXMgdXBvbiBib290dXAgYW5kIHlvdQotCQkJCQlzdXNwZWN0IHRoZXkgYXJlIGNhdXNlZCBieSB0aGUgQklPUy4KLQkJY29uZjEJCQlbSUEtMzJdIEZvcmNlIHVzZSBvZiBQQ0kgQ29uZmlndXJhdGlvbiBNZWNoYW5pc20gMS4KLQkJY29uZjIJCQlbSUEtMzJdIEZvcmNlIHVzZSBvZiBQQ0kgQ29uZmlndXJhdGlvbiBNZWNoYW5pc20gMi4KLQkJbm9zb3J0CQkJW0lBLTMyXSBEb24ndCBzb3J0IFBDSSBkZXZpY2VzIGFjY29yZGluZyB0bwotCQkJCQlvcmRlciBnaXZlbiBieSB0aGUgUENJIEJJT1MuIFRoaXMgc29ydGluZyBpcyBkb25lCi0JCQkJCXRvIGdldCBhIGRldmljZSBvcmRlciBjb21wYXRpYmxlIHdpdGggb2xkZXIga2VybmVscy4KLQkJYmlvc2lycQkJCVtJQS0zMl0gVXNlIFBDSSBCSU9TIGNhbGxzIHRvIGdldCB0aGUgaW50ZXJydXB0Ci0JCQkJCXJvdXRpbmcgdGFibGUuIFRoZXNlIGNhbGxzIGFyZSBrbm93biB0byBiZSBidWdneQotCQkJCQlvbiBzZXZlcmFsIG1hY2hpbmVzIGFuZCB0aGV5IGhhbmcgdGhlIG1hY2hpbmUgd2hlbiB1c2VkLAotCQkJCQlidXQgb24gb3RoZXIgY29tcHV0ZXJzIGl0J3MgdGhlIG9ubHkgd2F5IHRvIGdldCB0aGUKLQkJCQkJaW50ZXJydXB0IHJvdXRpbmcgdGFibGUuIFRyeSB0aGlzIG9wdGlvbiBpZiB0aGUga2VybmVsCi0JCQkJCWlzIHVuYWJsZSB0byBhbGxvY2F0ZSBJUlFzIG9yIGRpc2NvdmVyIHNlY29uZGFyeSBQQ0kKLQkJCQkJYnVzZXMgb24geW91ciBtb3RoZXJib2FyZC4KLQkJcm9tCQkJW0lBLTMyXSBBc3NpZ24gYWRkcmVzcyBzcGFjZSB0byBleHBhbnNpb24gUk9Ncy4KLQkJCQkJVXNlIHdpdGggY2F1dGlvbiBhcyBjZXJ0YWluIGRldmljZXMgc2hhcmUgYWRkcmVzcwotCQkJCQlkZWNvZGVycyBiZXR3ZWVuIFJPTXMgYW5kIG90aGVyIHJlc291cmNlcy4KLQkJaXJxbWFzaz0weE1NTU0JCVtJQS0zMl0gU2V0IGEgYml0IG1hc2sgb2YgSVJRcyBhbGxvd2VkIHRvIGJlIGFzc2lnbmVkCi0JCQkJCWF1dG9tYXRpY2FsbHkgdG8gUENJIGRldmljZXMuIFlvdSBjYW4gbWFrZSB0aGUga2VybmVsCi0JCQkJCWV4Y2x1ZGUgSVJRcyBvZiB5b3VyIElTQSBjYXJkcyB0aGlzIHdheS4KKwlwY2k9b3B0aW9uWyxvcHRpb24uLi5dCVtQQ0ldIHZhcmlvdXMgUENJIHN1YnN5c3RlbSBvcHRpb25zOgorCQlvZmYJCVtJQS0zMl0gZG9uJ3QgcHJvYmUgZm9yIHRoZSBQQ0kgYnVzCisJCWJpb3MJCVtJQS0zMl0gZm9yY2UgdXNlIG9mIFBDSSBCSU9TLCBkb24ndCBhY2Nlc3MKKwkJCQl0aGUgaGFyZHdhcmUgZGlyZWN0bHkuIFVzZSB0aGlzIGlmIHlvdXIgbWFjaGluZQorCQkJCWhhcyBhIG5vbi1zdGFuZGFyZCBQQ0kgaG9zdCBicmlkZ2UuCisJCW5vYmlvcwkJW0lBLTMyXSBkaXNhbGxvdyB1c2Ugb2YgUENJIEJJT1MsIG9ubHkgZGlyZWN0CisJCQkJaGFyZHdhcmUgYWNjZXNzIG1ldGhvZHMgYXJlIGFsbG93ZWQuIFVzZSB0aGlzCisJCQkJaWYgeW91IGV4cGVyaWVuY2UgY3Jhc2hlcyB1cG9uIGJvb3R1cCBhbmQgeW91CisJCQkJc3VzcGVjdCB0aGV5IGFyZSBjYXVzZWQgYnkgdGhlIEJJT1MuCisJCWNvbmYxCQlbSUEtMzJdIEZvcmNlIHVzZSBvZiBQQ0kgQ29uZmlndXJhdGlvbgorCQkJCU1lY2hhbmlzbSAxLgorCQljb25mMgkJW0lBLTMyXSBGb3JjZSB1c2Ugb2YgUENJIENvbmZpZ3VyYXRpb24KKwkJCQlNZWNoYW5pc20gMi4KKwkJbm9zb3J0CQlbSUEtMzJdIERvbid0IHNvcnQgUENJIGRldmljZXMgYWNjb3JkaW5nIHRvCisJCQkJb3JkZXIgZ2l2ZW4gYnkgdGhlIFBDSSBCSU9TLiBUaGlzIHNvcnRpbmcgaXMKKwkJCQlkb25lIHRvIGdldCBhIGRldmljZSBvcmRlciBjb21wYXRpYmxlIHdpdGgKKwkJCQlvbGRlciBrZXJuZWxzLgorCQliaW9zaXJxCQlbSUEtMzJdIFVzZSBQQ0kgQklPUyBjYWxscyB0byBnZXQgdGhlIGludGVycnVwdAorCQkJCXJvdXRpbmcgdGFibGUuIFRoZXNlIGNhbGxzIGFyZSBrbm93biB0byBiZSBidWdneQorCQkJCW9uIHNldmVyYWwgbWFjaGluZXMgYW5kIHRoZXkgaGFuZyB0aGUgbWFjaGluZQorCQkJCXdoZW4gdXNlZCwgYnV0IG9uIG90aGVyIGNvbXB1dGVycyBpdCdzIHRoZSBvbmx5CisJCQkJd2F5IHRvIGdldCB0aGUgaW50ZXJydXB0IHJvdXRpbmcgdGFibGUuIFRyeQorCQkJCXRoaXMgb3B0aW9uIGlmIHRoZSBrZXJuZWwgaXMgdW5hYmxlIHRvIGFsbG9jYXRlCisJCQkJSVJRcyBvciBkaXNjb3ZlciBzZWNvbmRhcnkgUENJIGJ1c2VzIG9uIHlvdXIKKwkJCQltb3RoZXJib2FyZC4KKwkJcm9tCQlbSUEtMzJdIEFzc2lnbiBhZGRyZXNzIHNwYWNlIHRvIGV4cGFuc2lvbiBST01zLgorCQkJCVVzZSB3aXRoIGNhdXRpb24gYXMgY2VydGFpbiBkZXZpY2VzIHNoYXJlCisJCQkJYWRkcmVzcyBkZWNvZGVycyBiZXR3ZWVuIFJPTXMgYW5kIG90aGVyCisJCQkJcmVzb3VyY2VzLgorCQlpcnFtYXNrPTB4TU1NTQlbSUEtMzJdIFNldCBhIGJpdCBtYXNrIG9mIElSUXMgYWxsb3dlZCB0byBiZQorCQkJCWFzc2lnbmVkIGF1dG9tYXRpY2FsbHkgdG8gUENJIGRldmljZXMuIFlvdSBjYW4KKwkJCQltYWtlIHRoZSBrZXJuZWwgZXhjbHVkZSBJUlFzIG9mIHlvdXIgSVNBIGNhcmRzCisJCQkJdGhpcyB3YXkuCiAJCXBpcnFhZGRyPTB4QUFBQUEJW0lBLTMyXSBTcGVjaWZ5IHRoZSBwaHlzaWNhbCBhZGRyZXNzCi0JCQkJCW9mIHRoZSBQSVJRIHRhYmxlIChub3JtYWxseSBnZW5lcmF0ZWQKLQkJCQkJYnkgdGhlIEJJT1MpIGlmIGl0IGlzIG91dHNpZGUgdGhlCi0JCQkJCUYwMDAwaC0xMDAwMDBoIHJhbmdlLgotCQlsYXN0YnVzPU4JCVtJQS0zMl0gU2NhbiBhbGwgYnVzZXMgdGlsbCBidXMgI04uIENhbiBiZSB1c2VmdWwKLQkJCQkJaWYgdGhlIGtlcm5lbCBpcyB1bmFibGUgdG8gZmluZCB5b3VyIHNlY29uZGFyeSBidXNlcwotCQkJCQlhbmQgeW91IHdhbnQgdG8gdGVsbCBpdCBleHBsaWNpdGx5IHdoaWNoIG9uZXMgdGhleSBhcmUuCi0JCWFzc2lnbi1idXNzZXMJCVtJQS0zMl0gQWx3YXlzIGFzc2lnbiBhbGwgUENJIGJ1cwotCQkJCQludW1iZXJzIG91cnNlbHZlcywgb3ZlcnJpZGluZwotCQkJCQl3aGF0ZXZlciB0aGUgZmlybXdhcmUgbWF5IGhhdmUKLQkJCQkJZG9uZS4KLQkJdXNlcGlycW1hc2sJCVtJQS0zMl0gSG9ub3IgdGhlIHBvc3NpYmxlIElSUSBtYXNrCi0JCQkJCXN0b3JlZCBpbiB0aGUgQklPUyAkUElSIHRhYmxlLiBUaGlzIGlzCi0JCQkJCW5lZWRlZCBvbiBzb21lIHN5c3RlbXMgd2l0aCBicm9rZW4KLQkJCQkJQklPU2VzLCBub3RhYmx5IHNvbWUgSFAgUGF2aWxpb24gTjU0MDAKLQkJCQkJYW5kIE9tbmlib29rIFhFMyBub3RlYm9va3MuIFRoaXMgd2lsbAotCQkJCQloYXZlIG5vIGVmZmVjdCBpZiBBQ1BJIElSUSByb3V0aW5nIGlzCi0JCQkJCWVuYWJsZWQuCi0JCW5vYWNwaQkJCVtJQS0zMl0gRG8gbm90IHVzZSBBQ1BJIGZvciBJUlEgcm91dGluZwotCQkJCQlvciBmb3IgUENJIHNjYW5uaW5nLgotCQlyb3V0ZWlycQkJRG8gSVJRIHJvdXRpbmcgZm9yIGFsbCBQQ0kgZGV2aWNlcy4KLQkJCQkJVGhpcyBpcyBub3JtYWxseSBkb25lIGluIHBjaV9lbmFibGVfZGV2aWNlKCksCi0JCQkJCXNvIHRoaXMgb3B0aW9uIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQKLQkJCQkJZm9yIGJyb2tlbiBkcml2ZXJzIHRoYXQgZG9uJ3QgY2FsbCBpdC4KLQotCQlmaXJtd2FyZQkJW0FSTV0gRG8gbm90IHJlLWVudW1lcmF0ZSB0aGUgYnVzIGJ1dAotCQkJCQlpbnN0ZWFkIGp1c3QgdXNlIHRoZSBjb25maWd1cmF0aW9uCi0JCQkJCWZyb20gdGhlIGJvb3Rsb2FkZXIuIFRoaXMgaXMgY3VycmVudGx5Ci0JCQkJCXVzZWQgb24gSVhQMjAwMCBzeXN0ZW1zIHdoZXJlIHRoZQotCQkJCQlidXMgaGFzIHRvIGJlIGNvbmZpZ3VyZWQgYSBjZXJ0YWluIHdheQotCQkJCQlmb3IgYWRqdW5jdCBDUFVzLgorCQkJCW9mIHRoZSBQSVJRIHRhYmxlIChub3JtYWxseSBnZW5lcmF0ZWQKKwkJCQlieSB0aGUgQklPUykgaWYgaXQgaXMgb3V0c2lkZSB0aGUKKwkJCQlGMDAwMGgtMTAwMDAwaCByYW5nZS4KKwkJbGFzdGJ1cz1OCVtJQS0zMl0gU2NhbiBhbGwgYnVzZXMgdGhydSBidXMgI04uIENhbiBiZQorCQkJCXVzZWZ1bCBpZiB0aGUga2VybmVsIGlzIHVuYWJsZSB0byBmaW5kIHlvdXIKKwkJCQlzZWNvbmRhcnkgYnVzZXMgYW5kIHlvdSB3YW50IHRvIHRlbGwgaXQKKwkJCQlleHBsaWNpdGx5IHdoaWNoIG9uZXMgdGhleSBhcmUuCisJCWFzc2lnbi1idXNzZXMJW0lBLTMyXSBBbHdheXMgYXNzaWduIGFsbCBQQ0kgYnVzCisJCQkJbnVtYmVycyBvdXJzZWx2ZXMsIG92ZXJyaWRpbmcKKwkJCQl3aGF0ZXZlciB0aGUgZmlybXdhcmUgbWF5IGhhdmUgZG9uZS4KKwkJdXNlcGlycW1hc2sJW0lBLTMyXSBIb25vciB0aGUgcG9zc2libGUgSVJRIG1hc2sgc3RvcmVkCisJCQkJaW4gdGhlIEJJT1MgJFBJUiB0YWJsZS4gVGhpcyBpcyBuZWVkZWQgb24KKwkJCQlzb21lIHN5c3RlbXMgd2l0aCBicm9rZW4gQklPU2VzLCBub3RhYmx5CisJCQkJc29tZSBIUCBQYXZpbGlvbiBONTQwMCBhbmQgT21uaWJvb2sgWEUzCisJCQkJbm90ZWJvb2tzLiBUaGlzIHdpbGwgaGF2ZSBubyBlZmZlY3QgaWYgQUNQSQorCQkJCUlSUSByb3V0aW5nIGlzIGVuYWJsZWQuCisJCW5vYWNwaQkJW0lBLTMyXSBEbyBub3QgdXNlIEFDUEkgZm9yIElSUSByb3V0aW5nCisJCQkJb3IgZm9yIFBDSSBzY2FubmluZy4KKwkJcm91dGVpcnEJRG8gSVJRIHJvdXRpbmcgZm9yIGFsbCBQQ0kgZGV2aWNlcy4KKwkJCQlUaGlzIGlzIG5vcm1hbGx5IGRvbmUgaW4gcGNpX2VuYWJsZV9kZXZpY2UoKSwKKwkJCQlzbyB0aGlzIG9wdGlvbiBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kCisJCQkJZm9yIGJyb2tlbiBkcml2ZXJzIHRoYXQgZG9uJ3QgY2FsbCBpdC4KKwkJZmlybXdhcmUJW0FSTV0gRG8gbm90IHJlLWVudW1lcmF0ZSB0aGUgYnVzIGJ1dCBpbnN0ZWFkCisJCQkJanVzdCB1c2UgdGhlIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUKKwkJCQlib290bG9hZGVyLiBUaGlzIGlzIGN1cnJlbnRseSB1c2VkIG9uCisJCQkJSVhQMjAwMCBzeXN0ZW1zIHdoZXJlIHRoZSBidXMgaGFzIHRvIGJlCisJCQkJY29uZmlndXJlZCBhIGNlcnRhaW4gd2F5IGZvciBhZGp1bmN0IENQVXMuCiAKIAlwY212PQkJW0hXLFBDTUNJQV0gQmFkZ2VQQUQgNAogCkBAIC0xMTI3LDE5ICsxMTQzLDIwIEBACiAJCQlbSVNBUE5QXSBFeGNsdWRlIERNQXMgZm9yIHRoZSBhdXRvY29uZmlndXJhdGlvbgogCiAJcG5wX3Jlc2VydmVfaW89CVtJU0FQTlBdIEV4Y2x1ZGUgSS9PIHBvcnRzIGZvciB0aGUgYXV0b2NvbmZpZ3VyYXRpb24KLQkJICAgICAJUmFuZ2VzIGFyZSBpbiBwYWlycyAoSS9PIHBvcnQgYmFzZSBhbmQgc2l6ZSkuCisJCQlSYW5nZXMgYXJlIGluIHBhaXJzIChJL08gcG9ydCBiYXNlIGFuZCBzaXplKS4KIAogCXBucF9yZXNlcnZlX21lbT0KLQkJCVtJU0FQTlBdIEV4Y2x1ZGUgbWVtb3J5IHJlZ2lvbnMgZm9yIHRoZSBhdXRvY29uZmlndXJhdGlvbgorCQkJW0lTQVBOUF0gRXhjbHVkZSBtZW1vcnkgcmVnaW9ucyBmb3IgdGhlCisJCQlhdXRvY29uZmlndXJhdGlvbi4KIAkJCVJhbmdlcyBhcmUgaW4gcGFpcnMgKG1lbW9yeSBiYXNlIGFuZCBzaXplKS4KIAogCXByb2ZpbGU9CVtLTkxdIEVuYWJsZSBrZXJuZWwgcHJvZmlsaW5nIHZpYSAvcHJvYy9wcm9maWxlCi0JCQl7IHNjaGVkdWxlIHwgPG51bWJlcj4gfQotCQkJKHBhcmFtOiBzY2hlZHVsZSAtIHByb2ZpbGUgc2NoZWR1bGUgcG9pbnRzfQotCQkJKHBhcmFtOiBwcm9maWxlIHN0ZXAvYnVja2V0IHNpemUgYXMgYSBwb3dlciBvZiAyIGZvcgotCQkJCXN0YXRpc3RpY2FsIHRpbWUgYmFzZWQgcHJvZmlsaW5nKQorCQkJRm9ybWF0OiBbc2NoZWR1bGUsXTxudW1iZXI+CisJCQlQYXJhbTogInNjaGVkdWxlIiAtIHByb2ZpbGUgc2NoZWR1bGUgcG9pbnRzLgorCQkJUGFyYW06IDxudW1iZXI+IC0gc3RlcC9idWNrZXQgc2l6ZSBhcyBhIHBvd2VyIG9mIDIgZm9yCisJCQkJc3RhdGlzdGljYWwgdGltZSBiYXNlZCBwcm9maWxpbmcuCiAKLQlwcm9jZXNzb3IubWF4X2NzdGF0ZT0gICBbSFcsIEFDUEldCisJcHJvY2Vzc29yLm1heF9jc3RhdGU9CVtIVyxBQ1BJXQogCQkJTGltaXQgcHJvY2Vzc29yIHRvIG1heGltdW0gQy1zdGF0ZQogCQkJbWF4X2NzdGF0ZT05IG92ZXJyaWRlcyBhbnkgRE1JIGJsYWNrbGlzdCBsaW1pdC4KIApAQCAtMTE0NywyNyArMTE2NCwyOCBAQAogCQkJYmVmb3JlIGxvYWRpbmcuCiAJCQlTZWUgRG9jdW1lbnRhdGlvbi9yYW1kaXNrLnR4dC4KIAotCXBzbW91c2UucHJvdG89ICBbSFcsTU9VU0VdIEhpZ2hlc3QgUFMyIG1vdXNlIHByb3RvY29sIGV4dGVuc2lvbiB0bwotCQkJcHJvYmUgZm9yIChiYXJlfGltcHN8ZXhwc3xsaWZlYm9va3xhbnkpLgorCXBzbW91c2UucHJvdG89CVtIVyxNT1VTRV0gSGlnaGVzdCBQUzIgbW91c2UgcHJvdG9jb2wgZXh0ZW5zaW9uIHRvCisJCQlwcm9iZSBmb3I7IG9uZSBvZiAoYmFyZXxpbXBzfGV4cHN8bGlmZWJvb2t8YW55KS4KIAlwc21vdXNlLnJhdGU9CVtIVyxNT1VTRV0gU2V0IGRlc2lyZWQgbW91c2UgcmVwb3J0IHJhdGUsIGluIHJlcG9ydHMKIAkJCXBlciBzZWNvbmQuCi0JcHNtb3VzZS5yZXNldGFmdGVyPQotCQkJW0hXLE1PVVNFXSBUcnkgdG8gcmVzZXQgdGhlIGRldmljZSBhZnRlciBzbyBtYW55IGJhZCBwYWNrZXRzCisJcHNtb3VzZS5yZXNldGFmdGVyPQlbSFcsTU9VU0VdCisJCQlUcnkgdG8gcmVzZXQgdGhlIGRldmljZSBhZnRlciBzbyBtYW55IGJhZCBwYWNrZXRzCiAJCQkoMCA9IG5ldmVyKS4KIAlwc21vdXNlLnJlc29sdXRpb249CiAJCQlbSFcsTU9VU0VdIFNldCBkZXNpcmVkIG1vdXNlIHJlc29sdXRpb24sIGluIGRwaS4KIAlwc21vdXNlLnNtYXJ0c2Nyb2xsPQotCQkJW0hXLE1PVVNFXSBDb250cm9scyBMb2dpdGVjaCBzbWFydHNjcm9sbCBhdXRvcmVwZWF0LAorCQkJW0hXLE1PVVNFXSBDb250cm9scyBMb2dpdGVjaCBzbWFydHNjcm9sbCBhdXRvcmVwZWF0LgogCQkJMCA9IGRpc2FibGVkLCAxID0gZW5hYmxlZCAoZGVmYXVsdCkuCiAKIAlwc3M9CQlbSFcsT1NTXSBQZXJzb25hbCBTb3VuZCBTeXN0ZW0gKEVDSE8gRVNDNjE0KQotCQkJRm9ybWF0OiA8aW8+LDxtc3NfaW8+LDxtc3NfaXJxPiw8bXNzX2RtYT4sPG1wdV9pbz4sPG1wdV9pcnE+CisJCQlGb3JtYXQ6CisJCQk8aW8+LDxtc3NfaW8+LDxtc3NfaXJxPiw8bXNzX2RtYT4sPG1wdV9pbz4sPG1wdV9pcnE+CiAKIAlwdC4JCVtQQVJJREVdCiAJCQlTZWUgRG9jdW1lbnRhdGlvbi9wYXJpZGUudHh0LgogCiAJcXVpZXQ9CQlbS05MXSBEaXNhYmxlIGxvZyBtZXNzYWdlcwotIAorCiAJcjEyOD0JCVtIVyxEUk1dCiAKIAlyYWlkPQkJW0hXLFJBSURdCkBAIC0xMTc2LDEwICsxMTk0LDkgQEAKIAlyYW1kaXNrPQlbUkFNXSBTaXplcyBvZiBSQU0gZGlza3MgaW4ga2lsb2J5dGVzIFtkZXByZWNhdGVkXQogCQkJU2VlIERvY3VtZW50YXRpb24vcmFtZGlzay50eHQuCiAKLQlyYW1kaXNrX2Jsb2Nrc2l6ZT0KLQkJCVtSQU1dCisJcmFtZGlza19ibG9ja3NpemU9CVtSQU1dCiAJCQlTZWUgRG9jdW1lbnRhdGlvbi9yYW1kaXNrLnR4dC4KLSAKKwogCXJhbWRpc2tfc2l6ZT0JW1JBTV0gU2l6ZXMgb2YgUkFNIGRpc2tzIGluIGtpbG9ieXRlcwogCQkJTmV3IG5hbWUgZm9yIHRoZSByYW1kaXNrIHBhcmFtZXRlci4KIAkJCVNlZSBEb2N1bWVudGF0aW9uL3JhbWRpc2sudHh0LgpAQCAtMTE5NSw3ICsxMjEyLDggQEAKIAogCXJlc2VydmU9CVtLTkwsQlVHU10gRm9yY2UgdGhlIGtlcm5lbCB0byBpZ25vcmUgc29tZSBpb21lbSBhcmVhCiAKLQlyZXN1bWU9CQlbU1dTVVNQXSBTcGVjaWZ5IHRoZSBwYXJ0aXRpb24gZGV2aWNlIGZvciBzb2Z0d2FyZSBzdXNwZW5zaW9uCisJcmVzdW1lPQkJW1NXU1VTUF0KKwkJCVNwZWNpZnkgdGhlIHBhcnRpdGlvbiBkZXZpY2UgZm9yIHNvZnR3YXJlIHN1c3BlbmQKIAogCXJoYXNoX2VudHJpZXM9CVtLTkwsTkVUXQogCQkJU2V0IG51bWJlciBvZiBoYXNoIGJ1Y2tldHMgZm9yIHJvdXRlIGNhY2hlCkBAIC0xMjI1LDcgKzEyNDMsNyBAQAogCQkJRm9ybWF0OiA8aW8+LDxpcnE+LDxkbWE+LDxkbWEyPgogCiAJc2JuaT0JCVtORVRdIEdyYW5jaCBTQk5JMTIgbGVhc2VkIGxpbmUgYWRhcHRlcgotIAorCiAJc2JwY2Q9CQlbSFcsQ0RdIFNvdW5kYmxhc3RlciBDRCBhZGFwdGVyCiAJCQlGb3JtYXQ6IDxpbz4sPHR5cGU+CiAJCQlTZWUgYSBjb21tZW50IGJlZm9yZSBmdW5jdGlvbiBzYnBjZF9zZXR1cCgpIGluCkBAIC0xMjU4LDIxICsxMjc2LDIwIEBACiAKIAlzZXJpYWxudW1iZXIJW0JVR1M9SUEtMzJdCiAKLQlzZ19kZWZfcmVzZXJ2ZWRfc2l6ZT0KLQkJCVtTQ1NJXQotIAorCXNnX2RlZl9yZXNlcnZlZF9zaXplPQlbU0NTSV0KKwogCXNnYWxheHk9CVtIVyxPU1NdCiAJCQlGb3JtYXQ6IDxpbz4sPGlycT4sPGRtYT4sPGRtYTI+LDxzZ2Jhc2U+CiAKIAlzaGFwZXJzPQlbTkVUXQogCQkJTWF4aW1hbCBudW1iZXIgb2Ygc2hhcGVycy4KLSAKKwogCXNpbTcxMD0JCVtTQ1NJLEhXXQogCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL3Njc2kvc2ltNzEwLmMuCiAKIAlzaW1ldGg9CQlbSUEtNjRdCiAJc2ltc2NzaT0KLSAKKwogCXNqY2Q9CQlbSFcsQ0RdCiAJCQlGb3JtYXQ6IDxpbz4sPGlycT4sPGRtYT4KIAkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9jZHJvbS9zamNkLmMuCkBAIC0xNDAzLDEwICsxNDIwLDEwIEBACiAJc25kLXdhdmVmcm9udD0JW0hXLEFMU0FdCiAKIAlzbmQteW1mcGNpPQlbSFcsQUxTQV0KLSAKKwogCXNvbmljdmliZXM9CVtIVyxPU1NdCiAJCQlGb3JtYXQ6IDxyZXZlcmI+Ci0gCisKIAlzb255Y2Q1MzU9CVtIVyxDRF0KIAkJCUZvcm1hdDogPGlvPlssPGlycT5dCiAKQEAgLTE0MjMsNyArMTQ0MCw3IEBACiAKIAlzc2NhcGU9CQlbSFcsT1NTXQogCQkJRm9ybWF0OiA8aW8+LDxpcnE+LDxkbWE+LDxtcHVfaW8+LDxtcHVfaXJxPgotIAorCiAJc3Q9CQlbSFcsU0NTSV0gU0NTSSB0YXBlIHBhcmFtZXRlcnMgKGJ1ZmZlcnMsIGV0Yy4pCiAJCQlTZWUgRG9jdW1lbnRhdGlvbi9zY3NpL3N0LnR4dC4KIApAQCAtMTQ0Niw3ICsxNDYzLDcgQEAKIAlzdHJhbV9zd2FwPQlbSFcsTTY4a10KIAogCXN3aW90bGI9CVtJQS02NF0gTnVtYmVyIG9mIEkvTyBUTEIgc2xhYnMKLSAKKwogCXN3aXRjaGVzPQlbSFcsTTY4a10KIAogCXN5bTUzYzQxNj0JW0hXLFNDU0ldCkBAIC0xNDc5LDE0ICsxNDk2LDE2IEBACiAJdHA3MjA9CQlbSFcsUFMyXQogCiAJdHJpeD0JCVtIVyxPU1NdIE1lZGlhVHJpeCBBdWRpb1RyaXggUHJvCi0JCQlGb3JtYXQ6IDxpbz4sPGlycT4sPGRtYT4sPGRtYTI+LDxzYl9pbz4sPHNiX2lycT4sPHNiX2RtYT4sPG1wdV9pbz4sPG1wdV9pcnE+Ci0gCisJCQlGb3JtYXQ6CisJCQk8aW8+LDxpcnE+LDxkbWE+LDxkbWEyPiw8c2JfaW8+LDxzYl9pcnE+LDxzYl9kbWE+LDxtcHVfaW8+LDxtcHVfaXJxPgorCiAJdHNkZXYueHJlcz0JW1RTXSBIb3Jpem9udGFsIHNjcmVlbiByZXNvbHV0aW9uLgogCXRzZGV2LnlyZXM9CVtUU10gVmVydGljYWwgc2NyZWVuIHJlc29sdXRpb24uCiAKLQl0dXJib2dyYWZ4Lm1hcFsyfDNdPQotCQkJW0hXLEpPWV0gVHVyYm9HcmFGWCBwYXJhbGxlbCBwb3J0IGludGVyZmFjZQotCQkJRm9ybWF0OiA8cG9ydCM+LDxqczE+LDxqczI+LDxqczM+LDxqczQ+LDxqczU+LDxqczY+LDxqczc+CisJdHVyYm9ncmFmeC5tYXBbMnwzXT0JW0hXLEpPWV0KKwkJCVR1cmJvR3JhRlggcGFyYWxsZWwgcG9ydCBpbnRlcmZhY2UKKwkJCUZvcm1hdDoKKwkJCTxwb3J0Iz4sPGpzMT4sPGpzMj4sPGpzMz4sPGpzND4sPGpzNT4sPGpzNj4sPGpzNz4KIAkJCVNlZSBhbHNvIERvY3VtZW50YXRpb24vaW5wdXQvam95c3RpY2stcGFycG9ydC50eHQKIAogCXUxNC0zNGY9CVtIVyxTQ1NJXSBVbHRyYVN0b3IgMTRGLzM0RiBTQ1NJIGhvc3QgYWRhcHRlcgpAQCAtMTUwMiwxNyArMTUyMSwxOCBAQAogCiAJdXNiaGlkLm1vdXNlcG9sbD0KIAkJCVtVU0JISURdIFRoZSBpbnRlcnZhbCB3aGljaCBtaWNlIGFyZSB0byBiZSBwb2xsZWQgYXQuCi0gCisKIAl2aWRlbz0JCVtGQl0gRnJhbWUgYnVmZmVyIGNvbmZpZ3VyYXRpb24KIAkJCVNlZSBEb2N1bWVudGF0aW9uL2ZiL21vZGVkYi50eHQuCiAKIAl2Z2E9CQlbQk9PVCxJQS0zMl0gU2VsZWN0IGEgcGFydGljdWxhciB2aWRlbyBtb2RlCi0JCQlTZWUgRG9jdW1lbnRhdGlvbi9pMzg2L2Jvb3QudHh0IGFuZCBEb2N1bWVudGF0aW9uL3N2Z2EudHh0LgorCQkJU2VlIERvY3VtZW50YXRpb24vaTM4Ni9ib290LnR4dCBhbmQKKwkJCURvY3VtZW50YXRpb24vc3ZnYS50eHQuCiAJCQlVc2UgdmdhPWFzayBmb3IgbWVudS4KIAkJCVRoaXMgaXMgYWN0dWFsbHkgYSBib290IGxvYWRlciBwYXJhbWV0ZXI7IHRoZSB2YWx1ZSBpcwogCQkJcGFzc2VkIHRvIHRoZSBrZXJuZWwgdXNpbmcgYSBzcGVjaWFsIHByb3RvY29sLgogCi0Jdm1hbGxvYz1ubltLTUddCVtLTkwsQk9PVF0gZm9yY2VzIHRoZSB2bWFsbG9jIGFyZWEgdG8gaGF2ZSBhbiBleGFjdAorCXZtYWxsb2M9bm5bS01HXQlbS05MLEJPT1RdIEZvcmNlcyB0aGUgdm1hbGxvYyBhcmVhIHRvIGhhdmUgYW4gZXhhY3QKIAkJCXNpemUgb2YgPG5uPi4gVGhpcyBjYW4gYmUgdXNlZCB0byBpbmNyZWFzZSB0aGUKIAkJCW1pbmltdW0gc2l6ZSAoMTI4TUIgb24geDg2KS4gSXQgY2FuIGFsc28gYmUgdXNlZCB0bwogCQkJZGVjcmVhc2UgdGhlIHNpemUgYW5kIGxlYXZlIG1vcmUgcm9vbSBmb3IgZGlyZWN0bHkKQEAgLTE1MjAsMTEgKzE1NDAsMTEgQEAKIAogCXZtaGFsdD0JCVtLTkwsUzM5MF0KIAotCXZtcG9mZj0JCVtLTkwsUzM5MF0gCi0gCisJdm1wb2ZmPQkJW0tOTCxTMzkwXQorCiAJd2F2ZWFydGlzdD0JW0hXLE9TU10KIAkJCUZvcm1hdDogPGlvPiw8aXJxPiw8ZG1hPiw8ZG1hMj4KLSAKKwogCXdkMzNjOTM9CVtIVyxTQ1NJXQogCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL3Njc2kvd2QzM2M5My5jLgogCkBAIC0xNTM4LDIxICsxNTU4LDI1IEBACiAJeGRfZ2VvPQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL2Jsb2NrL3hkLmMuCiAKIAl4aXJjMnBzX2NzPQlbTkVULFBDTUNJQV0KLQkJCUZvcm1hdDogPGlycT4sPGlycV9tYXNrPiw8aW8+LDxmdWxsX2R1cGxleD4sPGRvX3NvdW5kPiw8bG9ja3VwX2hhY2s+Wyw8aXJxMj5bLDxpcnEzPlssPGlycTQ+XV1dCisJCQlGb3JtYXQ6CisJCQk8aXJxPiw8aXJxX21hc2s+LDxpbz4sPGZ1bGxfZHVwbGV4Piw8ZG9fc291bmQ+LDxsb2NrdXBfaGFjaz5bLDxpcnEyPlssPGlycTM+Wyw8aXJxND5dXV0KIAogCi0KK19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KIENoYW5nZWxvZzoKIAorMjAwMC0wNi0/PwlNci4gVW5rbm93bgogCVRoZSBsYXN0IGtub3duIHVwZGF0ZSAoZm9yIDIuNC4wKSAtIHRoZSBjaGFuZ2Vsb2cgd2FzIG5vdCBrZXB0IGJlZm9yZS4KLQkyMDAwLTA2LT8/CU1yLiBVbmtub3duCiAKKzIwMDItMTEtMjQJUGV0ciBCYXVkaXMgPHBhc2t5QHVjdy5jej4KKwkJUmFuZHkgRHVubGFwIDxyYW5keS5kdW5sYXBAdmVyaXpvbi5uZXQ+CiAJVXBkYXRlIGZvciAyLjUuNDksIGRlc2NyaXB0aW9uIGZvciBtb3N0IG9mIHRoZSBvcHRpb25zIGludHJvZHVjZWQsCiAJcmVmZXJlbmNlcyB0byBvdGhlciBkb2N1bWVudGF0aW9uIChDIGZpbGVzLCBSRUFETUVzLCAuLiksIGFkZGVkIFMzOTAsCiAJUFBDLCBTUEFSQywgTVRELCBBTFNBIGFuZCBPU1MgY2F0ZWdvcnkuIE1pbm9yIGNvcnJlY3Rpb25zIGFuZAogCXJlZm9ybWF0dGluZy4KLQkyMDAyLTExLTI0CVBldHIgQmF1ZGlzIDxwYXNreUB1Y3cuY3o+Ci0JCQlSYW5keSBEdW5sYXAgPHJhbmR5LmR1bmxhcEB2ZXJpem9uLm5ldD4KKworMjAwNS0xMC0xOQlSYW5keSBEdW5sYXAgPHJkdW5sYXBAeGVub3RpbWUubmV0PgorCUxvdHMgb2YgdHlwb3MsIHdoaXRlc3BhY2UsIHNvbWUgcmVmb3JtYXR0aW5nLgogCiBUT0RPOgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tleXMtcmVxdWVzdC1rZXkudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXlzLXJlcXVlc3Qta2V5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjJiOWM1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXlzLXJlcXVlc3Qta2V5LnR4dApAQCAtMCwwICsxLDE2MSBAQAorCQkJICAgICAgPT09PT09PT09PT09PT09PT09PQorCQkJICAgICAgS0VZIFJFUVVFU1QgU0VSVklDRQorCQkJICAgICAgPT09PT09PT09PT09PT09PT09PQorCitUaGUga2V5IHJlcXVlc3Qgc2VydmljZSBpcyBwYXJ0IG9mIHRoZSBrZXkgcmV0ZW50aW9uIHNlcnZpY2UgKHJlZmVyIHRvCitEb2N1bWVudGF0aW9uL2tleXMudHh0KS4gVGhpcyBkb2N1bWVudCBleHBsYWlucyBtb3JlIGZ1bGx5IGhvdyB0aGF0IHRoZQorcmVxdWVzdGluZyBhbGdvcml0aG0gd29ya3MuCisKK1RoZSBwcm9jZXNzIHN0YXJ0cyBieSBlaXRoZXIgdGhlIGtlcm5lbCByZXF1ZXN0aW5nIGEgc2VydmljZSBieSBjYWxsaW5nCityZXF1ZXN0X2tleSgpOgorCisJc3RydWN0IGtleSAqcmVxdWVzdF9rZXkoY29uc3Qgc3RydWN0IGtleV90eXBlICp0eXBlLAorCQkJCWNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLAorCQkJCWNvbnN0IGNoYXIgKmNhbGxvdXRfc3RyaW5nKTsKKworT3IgYnkgdXNlcnNwYWNlIGludm9raW5nIHRoZSByZXF1ZXN0X2tleSBzeXN0ZW0gY2FsbDoKKworCWtleV9zZXJpYWxfdCByZXF1ZXN0X2tleShjb25zdCBjaGFyICp0eXBlLAorCQkJCSBjb25zdCBjaGFyICpkZXNjcmlwdGlvbiwKKwkJCQkgY29uc3QgY2hhciAqY2FsbG91dF9pbmZvLAorCQkJCSBrZXlfc2VyaWFsX3QgZGVzdF9rZXlyaW5nKTsKKworVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gYWNjZXNzIHBvaW50cyBpcyB0aGF0IHRoZSBpbi1rZXJuZWwKK2ludGVyZmFjZSBkb2VzIG5vdCBuZWVkIHRvIGxpbmsgdGhlIGtleSB0byBhIGtleXJpbmcgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nCitpbW1lZGlhdGVseSBkZXN0cm95ZWQuIFRoZSBrZXJuZWwgaW50ZXJmYWNlIHJldHVybnMgYSBwb2ludGVyIGRpcmVjdGx5IHRvIHRoZQora2V5LCBhbmQgaXQncyB1cCB0byB0aGUgY2FsbGVyIHRvIGRlc3Ryb3kgdGhlIGtleS4KKworVGhlIHVzZXJzcGFjZSBpbnRlcmZhY2UgbGlua3MgdGhlIGtleSB0byBhIGtleXJpbmcgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm9jZXNzCit0byBwcmV2ZW50IHRoZSBrZXkgZnJvbSBnb2luZyBhd2F5LCBhbmQgcmV0dXJucyB0aGUgc2VyaWFsIG51bWJlciBvZiB0aGUga2V5IHRvCit0aGUgY2FsbGVyLgorCisKKz09PT09PT09PT09CitUSEUgUFJPQ0VTUworPT09PT09PT09PT0KKworQSByZXF1ZXN0IHByb2NlZWRzIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyOgorCisgKDEpIFByb2Nlc3MgQSBjYWxscyByZXF1ZXN0X2tleSgpIFt0aGUgdXNlcnNwYWNlIHN5c2NhbGwgY2FsbHMgdGhlIGtlcm5lbAorICAgICBpbnRlcmZhY2VdLgorCisgKDIpIHJlcXVlc3Rfa2V5KCkgc2VhcmNoZXMgdGhlIHByb2Nlc3MncyBzdWJzY3JpYmVkIGtleXJpbmdzIHRvIHNlZSBpZiB0aGVyZSdzCisgICAgIGEgc3VpdGFibGUga2V5IHRoZXJlLiBJZiB0aGVyZSBpcywgaXQgcmV0dXJucyB0aGUga2V5LiBJZiB0aGVyZSBpc24ndCwgYW5kCisgICAgIGNhbGxvdXRfaW5mbyBpcyBub3Qgc2V0LCBhbiBlcnJvciBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlIHRoZSBwcm9jZXNzCisgICAgIHByb2NlZWRzIHRvIHRoZSBuZXh0IHN0ZXAuCisKKyAoMykgcmVxdWVzdF9rZXkoKSBzZWVzIHRoYXQgQSBkb2Vzbid0IGhhdmUgdGhlIGRlc2lyZWQga2V5IHlldCwgc28gaXQgY3JlYXRlcworICAgICB0d28gdGhpbmdzOgorCisgICAgIChhKSBBbiB1bmluc3RhbnRpYXRlZCBrZXkgVSBvZiByZXF1ZXN0ZWQgdHlwZSBhbmQgZGVzY3JpcHRpb24uCisKKyAgICAgKGIpIEFuIGF1dGhvcmlzYXRpb24ga2V5IFYgdGhhdCByZWZlcnMgdG8ga2V5IFUgYW5kIG5vdGVzIHRoYXQgcHJvY2VzcyBBCisgICAgIAkgaXMgdGhlIGNvbnRleHQgaW4gd2hpY2gga2V5IFUgc2hvdWxkIGJlIGluc3RhbnRpYXRlZCBhbmQgc2VjdXJlZCwgYW5kCisgICAgIAkgZnJvbSB3aGljaCBhc3NvY2lhdGVkIGtleSByZXF1ZXN0cyBtYXkgYmUgc2F0aXNmaWVkLgorCisgKDQpIHJlcXVlc3Rfa2V5KCkgdGhlbiBmb3JrcyBhbmQgZXhlY3V0ZXMgL3NiaW4vcmVxdWVzdC1rZXkgd2l0aCBhIG5ldyBzZXNzaW9uCisgICAgIGtleXJpbmcgdGhhdCBjb250YWlucyBhIGxpbmsgdG8gYXV0aCBrZXkgVi4KKworICg1KSAvc2Jpbi9yZXF1ZXN0LWtleSBleGVjcyBhbiBhcHByb3ByaWF0ZSBwcm9ncmFtIHRvIHBlcmZvcm0gdGhlIGFjdHVhbAorICAgICBpbnN0YW50aWF0aW9uLgorCisgKDYpIFRoZSBwcm9ncmFtIG1heSB3YW50IHRvIGFjY2VzcyBhbm90aGVyIGtleSBmcm9tIEEncyBjb250ZXh0IChzYXkgYQorICAgICBLZXJiZXJvcyBUR1Qga2V5KS4gSXQganVzdCByZXF1ZXN0cyB0aGUgYXBwcm9wcmlhdGUga2V5LCBhbmQgdGhlIGtleXJpbmcKKyAgICAgc2VhcmNoIG5vdGVzIHRoYXQgdGhlIHNlc3Npb24ga2V5cmluZyBoYXMgYXV0aCBrZXkgViBpbiBpdHMgYm90dG9tIGxldmVsLgorCisgICAgIFRoaXMgd2lsbCBwZXJtaXQgaXQgdG8gdGhlbiBzZWFyY2ggdGhlIGtleXJpbmdzIG9mIHByb2Nlc3MgQSB3aXRoIHRoZQorICAgICBVSUQsIEdJRCwgZ3JvdXBzIGFuZCBzZWN1cml0eSBpbmZvIG9mIHByb2Nlc3MgQSBhcyBpZiBpdCB3YXMgcHJvY2VzcyBBLAorICAgICBhbmQgY29tZSB1cCB3aXRoIGtleSBXLgorCisgKDcpIFRoZSBwcm9ncmFtIHRoZW4gZG9lcyB3aGF0IGl0IG11c3QgdG8gZ2V0IHRoZSBkYXRhIHdpdGggd2hpY2ggdG8KKyAgICAgaW5zdGFudGlhdGUga2V5IFUsIHVzaW5nIGtleSBXIGFzIGEgcmVmZXJlbmNlIChwZXJoYXBzIGl0IGNvbnRhY3RzIGEKKyAgICAgS2VyYmVyb3Mgc2VydmVyIHVzaW5nIHRoZSBUR1QpIGFuZCB0aGVuIGluc3RhbnRpYXRlcyBrZXkgVS4KKworICg4KSBVcG9uIGluc3RhbnRpYXRpbmcga2V5IFUsIGF1dGgga2V5IFYgaXMgYXV0b21hdGljYWxseSByZXZva2VkIHNvIHRoYXQgaXQKKyAgICAgbWF5IG5vdCBiZSB1c2VkIGFnYWluLgorCisgKDkpIFRoZSBwcm9ncmFtIHRoZW4gZXhpdHMgMCBhbmQgcmVxdWVzdF9rZXkoKSBkZWxldGVzIGtleSBWIGFuZCByZXR1cm5zIGtleQorICAgICBVIHRvIHRoZSBjYWxsZXIuCisKK1RoaXMgYWxzbyBleHRlbmRzIGZ1cnRoZXIuIElmIGtleSBXIChzdGVwIDUgYWJvdmUpIGRpZG4ndCBleGlzdCwga2V5IFcgd291bGQgYmUKK2NyZWF0ZWQgdW5pbnN0YW50aWF0ZWQsIGFub3RoZXIgYXV0aCBrZXkgKFgpIHdvdWxkIGJlIGNyZWF0ZWQgW2FzIHBlciBzdGVwIDNdCithbmQgYW5vdGhlciBjb3B5IG9mIC9zYmluL3JlcXVlc3Qta2V5IHNwYXduZWQgW2FzIHBlciBzdGVwIDRdOyBidXQgdGhlIGNvbnRleHQKK3NwZWNpZmllZCBieSBhdXRoIGtleSBYIHdpbGwgc3RpbGwgYmUgcHJvY2VzcyBBLCBhcyBpdCB3YXMgaW4gYXV0aCBrZXkgVi4KKworVGhpcyBpcyBiZWNhdXNlIHByb2Nlc3MgQSdzIGtleXJpbmdzIGNhbid0IHNpbXBseSBiZSBhdHRhY2hlZCB0bworL3NiaW4vcmVxdWVzdC1rZXkgYXQgdGhlIGFwcHJvcHJpYXRlIHBsYWNlcyBiZWNhdXNlIChhKSBleGVjdmUgd2lsbCBkaXNjYXJkIHR3bworb2YgdGhlbSwgYW5kIChiKSBpdCByZXF1aXJlcyB0aGUgc2FtZSBVSUQvR0lEL0dyb3VwcyBhbGwgdGhlIHdheSB0aHJvdWdoLgorCisKKz09PT09PT09PT09PT09PT09PT09PT0KK05FR0FUSVZFIElOU1RBTlRJQVRJT04KKz09PT09PT09PT09PT09PT09PT09PT0KKworUmF0aGVyIHRoYW4gaW5zdGFudGlhdGluZyBhIGtleSwgaXQgaXMgcG9zc2libGUgZm9yIHRoZSBwb3NzZXNzb3Igb2YgYW4KK2F1dGhvcmlzYXRpb24ga2V5IHRvIG5lZ2F0aXZlbHkgaW5zdGFudGlhdGUgYSBrZXkgdGhhdCdzIHVuZGVyIGNvbnN0cnVjdGlvbi4KK1RoaXMgaXMgYSBzaG9ydCBkdXJhdGlvbiBwbGFjZWhvbGRlciB0aGF0IGNhdXNlcyBhbnkgYXR0ZW1wdCBhdCByZS1yZXF1ZXN0aW5nCit0aGUga2V5IHdoaWxzdCBpdCBleGlzdHMgdG8gZmFpbCB3aXRoIGVycm9yIEVOT0tFWS4KKworVGhpcyBpcyBwcm92aWRlZCB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSByZXBlYXRlZCBzcGF3bmluZyBvZiAvc2Jpbi9yZXF1ZXN0LWtleQorcHJvY2Vzc2VzIGZvciBhIGtleSB0aGF0IHdpbGwgbmV2ZXIgYmUgb2J0YWluYWJsZS4KKworU2hvdWxkIHRoZSAvc2Jpbi9yZXF1ZXN0LWtleSBwcm9jZXNzIGV4aXQgYW55dGhpbmcgb3RoZXIgdGhhbiAwIG9yIGRpZSBvbiBhCitzaWduYWwsIHRoZSBrZXkgdW5kZXIgY29uc3RydWN0aW9uIHdpbGwgYmUgYXV0b21hdGljYWxseSBuZWdhdGl2ZWx5CitpbnN0YW50aWF0ZWQgZm9yIGEgc2hvcnQgYW1vdW50IG9mIHRpbWUuCisKKworPT09PT09PT09PT09PT09PT09PT0KK1RIRSBTRUFSQ0ggQUxHT1JJVEhNCis9PT09PT09PT09PT09PT09PT09PQorCitBIHNlYXJjaCBvZiBhbnkgcGFydGljdWxhciBrZXlyaW5nIHByb2NlZWRzIGluIHRoZSBmb2xsb3dpbmcgZmFzaGlvbjoKKworICgxKSBXaGVuIHRoZSBrZXkgbWFuYWdlbWVudCBjb2RlIHNlYXJjaGVzIGZvciBhIGtleSAoa2V5cmluZ19zZWFyY2hfYXV4KSBpdAorICAgICBmaXJzdGx5IGNhbGxzIGtleV9wZXJtaXNzaW9uKFNFQVJDSCkgb24gdGhlIGtleXJpbmcgaXQncyBzdGFydGluZyB3aXRoLAorICAgICBpZiB0aGlzIGRlbmllcyBwZXJtaXNzaW9uLCBpdCBkb2Vzbid0IHNlYXJjaCBmdXJ0aGVyLgorCisgKDIpIEl0IGNvbnNpZGVycyBhbGwgdGhlIG5vbi1rZXlyaW5nIGtleXMgd2l0aGluIHRoYXQga2V5cmluZyBhbmQsIGlmIGFueSBrZXkKKyAgICAgbWF0Y2hlcyB0aGUgY3JpdGVyaWEgc3BlY2lmaWVkLCBjYWxscyBrZXlfcGVybWlzc2lvbihTRUFSQ0gpIG9uIGl0IHRvIHNlZQorICAgICBpZiB0aGUga2V5IGlzIGFsbG93ZWQgdG8gYmUgZm91bmQuIElmIGl0IGlzLCB0aGF0IGtleSBpcyByZXR1cm5lZDsgaWYKKyAgICAgbm90LCB0aGUgc2VhcmNoIGNvbnRpbnVlcywgYW5kIHRoZSBlcnJvciBjb2RlIGlzIHJldGFpbmVkIGlmIG9mIGhpZ2hlcgorICAgICBwcmlvcml0eSB0aGFuIHRoZSBvbmUgY3VycmVudGx5IHNldC4KKworICgzKSBJdCB0aGVuIGNvbnNpZGVycyBhbGwgdGhlIGtleXJpbmctdHlwZSBrZXlzIGluIHRoZSBrZXlyaW5nIGl0J3MgY3VycmVudGx5CisgICAgIHNlYXJjaGluZy4gSXQgY2FsbHMga2V5X3Blcm1pc3Npb24oU0VBUkNIKSBvbiBlYWNoIGtleXJpbmcsIGFuZCBpZiB0aGlzCisgICAgIGdyYW50cyBwZXJtaXNzaW9uLCBpdCByZWN1cnNlcywgZXhlY3V0aW5nIHN0ZXBzICgyKSBhbmQgKDMpIG9uIHRoYXQKKyAgICAga2V5cmluZy4KKworVGhlIHByb2Nlc3Mgc3RvcHMgaW1tZWRpYXRlbHkgYSB2YWxpZCBrZXkgaXMgZm91bmQgd2l0aCBwZXJtaXNzaW9uIGdyYW50ZWQgdG8KK3VzZSBpdC4gQW55IGVycm9yIGZyb20gYSBwcmV2aW91cyBtYXRjaCBhdHRlbXB0IGlzIGRpc2NhcmRlZCBhbmQgdGhlIGtleSBpcworcmV0dXJuZWQuCisKK1doZW4gc2VhcmNoX3Byb2Nlc3Nfa2V5cmluZ3MoKSBpcyBpbnZva2VkLCBpdCBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIHNlYXJjaGVzCit1bnRpbCBvbmUgc3VjY2VlZHM6CisKKyAoMSkgSWYgZXh0YW50LCB0aGUgcHJvY2VzcydzIHRocmVhZCBrZXlyaW5nIGlzIHNlYXJjaGVkLgorCisgKDIpIElmIGV4dGFudCwgdGhlIHByb2Nlc3MncyBwcm9jZXNzIGtleXJpbmcgaXMgc2VhcmNoZWQuCisKKyAoMykgVGhlIHByb2Nlc3MncyBzZXNzaW9uIGtleXJpbmcgaXMgc2VhcmNoZWQuCisKKyAoNCkgSWYgdGhlIHByb2Nlc3MgaGFzIGEgcmVxdWVzdF9rZXkoKSBhdXRob3Jpc2F0aW9uIGtleSBpbiBpdHMgc2Vzc2lvbgorICAgICBrZXlyaW5nIHRoZW46CisKKyAgICAgKGEpIElmIGV4dGFudCwgdGhlIGNhbGxpbmcgcHJvY2VzcydzIHRocmVhZCBrZXlyaW5nIGlzIHNlYXJjaGVkLgorCisgICAgIChiKSBJZiBleHRhbnQsIHRoZSBjYWxsaW5nIHByb2Nlc3MncyBwcm9jZXNzIGtleXJpbmcgaXMgc2VhcmNoZWQuCisKKyAgICAgKGMpIFRoZSBjYWxsaW5nIHByb2Nlc3MncyBzZXNzaW9uIGtleXJpbmcgaXMgc2VhcmNoZWQuCisKK1RoZSBtb21lbnQgb25lIHN1Y2NlZWRzLCBhbGwgcGVuZGluZyBlcnJvcnMgYXJlIGRpc2NhcmRlZCBhbmQgdGhlIGZvdW5kIGtleSBpcworcmV0dXJuZWQuCisKK09ubHkgaWYgYWxsIHRoZXNlIGZhaWwgZG9lcyB0aGUgd2hvbGUgdGhpbmcgZmFpbCB3aXRoIHRoZSBoaWdoZXN0IHByaW9yaXR5CitlcnJvci4gTm90ZSB0aGF0IHNldmVyYWwgZXJyb3JzIG1heSBoYXZlIGNvbWUgZnJvbSBMU00uCisKK1RoZSBlcnJvciBwcmlvcml0eSBpczoKKworCUVLRVlSRVZPS0VEID4gRUtFWUVYUElSRUQgPiBFTk9LRVkKKworRUFDQ0VTL0VQRVJNIGFyZSBvbmx5IHJldHVybmVkIG9uIGEgZGlyZWN0IHNlYXJjaCBvZiBhIHNwZWNpZmljIGtleXJpbmcgd2hlcmUKK3RoZSBiYXNhbCBrZXlyaW5nIGRvZXMgbm90IGdyYW50IFNlYXJjaCBwZXJtaXNzaW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXlzLnR4dCBiL0RvY3VtZW50YXRpb24va2V5cy50eHQKaW5kZXggMDMyMWRlZC4uNGFmZTAzYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXlzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tleXMudHh0CkBAIC0xOTUsOCArMTk1LDggQEAKID09PT09PT09PT09PT09PT09PT09PT0KIAogS2V5cyBoYXZlIGFuIG93bmVyIHVzZXIgSUQsIGEgZ3JvdXAgYWNjZXNzIElELCBhbmQgYSBwZXJtaXNzaW9ucyBtYXNrLiBUaGUgbWFzawotaGFzIHVwIHRvIGVpZ2h0IGJpdHMgZWFjaCBmb3IgdXNlciwgZ3JvdXAgYW5kIG90aGVyIGFjY2Vzcy4gT25seSBmaXZlIG9mIGVhY2gKLXNldCBvZiBlaWdodCBiaXRzIGFyZSBkZWZpbmVkLiBUaGVzZSBwZXJtaXNzaW9ucyBncmFudGVkIGFyZToKK2hhcyB1cCB0byBlaWdodCBiaXRzIGVhY2ggZm9yIHBvc3Nlc3NvciwgdXNlciwgZ3JvdXAgYW5kIG90aGVyIGFjY2Vzcy4gT25seQorZml2ZSBvZiBlYWNoIHNldCBvZiBlaWdodCBiaXRzIGFyZSBkZWZpbmVkLiBUaGVzZSBwZXJtaXNzaW9ucyBncmFudGVkIGFyZToKIAogICgqKSBWaWV3CiAKQEAgLTI0MSwxNiArMjQxLDE2IEBACiAgICAgIHR5cGUsIGRlc2NyaXB0aW9uIGFuZCBwZXJtaXNzaW9ucy4gVGhlIHBheWxvYWQgb2YgdGhlIGtleSBpcyBub3QgYXZhaWxhYmxlCiAgICAgIHRoaXMgd2F5OgogCi0JU0VSSUFMICAgRkxBR1MgIFVTQUdFIEVYUFkgUEVSTSAgIFVJRCAgIEdJRCAgIFRZUEUgICAgICBERVNDUklQVElPTjogU1VNTUFSWQotCTAwMDAwMDAxIEktLS0tLSAgICAzOSBwZXJtIDFmMDAwMCAgICAgMCAgICAgMCBrZXlyaW5nICAgX3VpZF9zZXMuMDogMS80Ci0JMDAwMDAwMDIgSS0tLS0tICAgICAyIHBlcm0gMWYwMDAwICAgICAwICAgICAwIGtleXJpbmcgICBfdWlkLjA6IGVtcHR5Ci0JMDAwMDAwMDcgSS0tLS0tICAgICAxIHBlcm0gMWYwMDAwICAgICAwICAgICAwIGtleXJpbmcgICBfcGlkLjE6IGVtcHR5Ci0JMDAwMDAxOGQgSS0tLS0tICAgICAxIHBlcm0gMWYwMDAwICAgICAwICAgICAwIGtleXJpbmcgICBfcGlkLjQxMjogZW1wdHkKLQkwMDAwMDRkMiBJLS1RLS0gICAgIDEgcGVybSAxZjAwMDAgICAgMzIgICAgLTEga2V5cmluZyAgIF91aWQuMzI6IDEvNAotCTAwMDAwNGQzIEktLVEtLSAgICAgMyBwZXJtIDFmMDAwMCAgICAzMiAgICAtMSBrZXlyaW5nICAgX3VpZF9zZXMuMzI6IGVtcHR5Ci0JMDAwMDA4OTIgSS0tUVUtICAgICAxIHBlcm0gMWYwMDAwICAgICAwICAgICAwIHVzZXIgICAgICBtZXRhbDpjb3BwZXI6IDAKLQkwMDAwMDg5MyBJLS1RLU4gICAgIDEgIDM1cyAxZjAwMDAgICAgIDAgICAgIDAgdXNlciAgICAgIG1ldGFsOnNpbHZlcjogMAotCTAwMDAwODk0IEktLVEtLSAgICAgMSAgMTBoIDFmMDAwMCAgICAgMCAgICAgMCB1c2VyICAgICAgbWV0YWw6Z29sZDogMAorCVNFUklBTCAgIEZMQUdTICBVU0FHRSBFWFBZIFBFUk0gICAgIFVJRCAgIEdJRCAgIFRZUEUgICAgICBERVNDUklQVElPTjogU1VNTUFSWQorCTAwMDAwMDAxIEktLS0tLSAgICAzOSBwZXJtIDFmMWYwMDAwICAgICAwICAgICAwIGtleXJpbmcgICBfdWlkX3Nlcy4wOiAxLzQKKwkwMDAwMDAwMiBJLS0tLS0gICAgIDIgcGVybSAxZjFmMDAwMCAgICAgMCAgICAgMCBrZXlyaW5nICAgX3VpZC4wOiBlbXB0eQorCTAwMDAwMDA3IEktLS0tLSAgICAgMSBwZXJtIDFmMWYwMDAwICAgICAwICAgICAwIGtleXJpbmcgICBfcGlkLjE6IGVtcHR5CisJMDAwMDAxOGQgSS0tLS0tICAgICAxIHBlcm0gMWYxZjAwMDAgICAgIDAgICAgIDAga2V5cmluZyAgIF9waWQuNDEyOiBlbXB0eQorCTAwMDAwNGQyIEktLVEtLSAgICAgMSBwZXJtIDFmMWYwMDAwICAgIDMyICAgIC0xIGtleXJpbmcgICBfdWlkLjMyOiAxLzQKKwkwMDAwMDRkMyBJLS1RLS0gICAgIDMgcGVybSAxZjFmMDAwMCAgICAzMiAgICAtMSBrZXlyaW5nICAgX3VpZF9zZXMuMzI6IGVtcHR5CisJMDAwMDA4OTIgSS0tUVUtICAgICAxIHBlcm0gMWYwMDAwMDAgICAgIDAgICAgIDAgdXNlciAgICAgIG1ldGFsOmNvcHBlcjogMAorCTAwMDAwODkzIEktLVEtTiAgICAgMSAgMzVzIDFmMWYwMDAwICAgICAwICAgICAwIHVzZXIgICAgICBtZXRhbDpzaWx2ZXI6IDAKKwkwMDAwMDg5NCBJLS1RLS0gICAgIDEgIDEwaCAwMDFmMDAwMCAgICAgMCAgICAgMCB1c2VyICAgICAgbWV0YWw6Z29sZDogMAogCiAgICAgIFRoZSBmbGFncyBhcmU6CiAKQEAgLTM2MSw2ICszNjEsOCBAQAogICAgICAvc2Jpbi9yZXF1ZXN0LWtleSB3aWxsIGJlIGludm9rZWQgaW4gYW4gYXR0ZW1wdCB0byBvYnRhaW4gYSBrZXkuIFRoZQogICAgICBjYWxsb3V0X2luZm8gc3RyaW5nIHdpbGwgYmUgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBwcm9ncmFtLgogCisgICAgIFNlZSBhbHNvIERvY3VtZW50YXRpb24va2V5cy1yZXF1ZXN0LWtleS50eHQuCisKIAogVGhlIGtleWN0bCBzeXNjYWxsIGZ1bmN0aW9ucyBhcmU6CiAKQEAgLTUzMyw4ICs1MzUsOCBAQAogCiAgKCopIFJlYWQgdGhlIHBheWxvYWQgZGF0YSBmcm9tIGEga2V5OgogCi0Ja2V5X3NlcmlhbF90IGtleWN0bChLRVlDVExfUkVBRCwga2V5X3NlcmlhbF90IGtleXJpbmcsIGNoYXIgKmJ1ZmZlciwKLQkJCSAgICBzaXplX3QgYnVmbGVuKTsKKwlsb25nIGtleWN0bChLRVlDVExfUkVBRCwga2V5X3NlcmlhbF90IGtleXJpbmcsIGNoYXIgKmJ1ZmZlciwKKwkJICAgIHNpemVfdCBidWZsZW4pOwogCiAgICAgIFRoaXMgZnVuY3Rpb24gYXR0ZW1wdHMgdG8gcmVhZCB0aGUgcGF5bG9hZCBkYXRhIGZyb20gdGhlIHNwZWNpZmllZCBrZXkKICAgICAgaW50byB0aGUgYnVmZmVyLiBUaGUgcHJvY2VzcyBtdXN0IGhhdmUgcmVhZCBwZXJtaXNzaW9uIG9uIHRoZSBrZXkgdG8KQEAgLTU1NSw5ICs1NTcsOSBAQAogCiAgKCopIEluc3RhbnRpYXRlIGEgcGFydGlhbGx5IGNvbnN0cnVjdGVkIGtleS4KIAotCWtleV9zZXJpYWxfdCBrZXljdGwoS0VZQ1RMX0lOU1RBTlRJQVRFLCBrZXlfc2VyaWFsX3Qga2V5LAotCQkJICAgIGNvbnN0IHZvaWQgKnBheWxvYWQsIHNpemVfdCBwbGVuLAotCQkJICAgIGtleV9zZXJpYWxfdCBrZXlyaW5nKTsKKwlsb25nIGtleWN0bChLRVlDVExfSU5TVEFOVElBVEUsIGtleV9zZXJpYWxfdCBrZXksCisJCSAgICBjb25zdCB2b2lkICpwYXlsb2FkLCBzaXplX3QgcGxlbiwKKwkJICAgIGtleV9zZXJpYWxfdCBrZXlyaW5nKTsKIAogICAgICBJZiB0aGUga2VybmVsIGNhbGxzIGJhY2sgdG8gdXNlcnNwYWNlIHRvIGNvbXBsZXRlIHRoZSBpbnN0YW50aWF0aW9uIG9mIGEKICAgICAga2V5LCB1c2Vyc3BhY2Ugc2hvdWxkIHVzZSB0aGlzIGNhbGwgdG8gc3VwcGx5IGRhdGEgZm9yIHRoZSBrZXkgYmVmb3JlIHRoZQpAQCAtNTc2LDggKzU3OCw4IEBACiAKICAoKikgTmVnYXRpdmVseSBpbnN0YW50aWF0ZSBhIHBhcnRpYWxseSBjb25zdHJ1Y3RlZCBrZXkuCiAKLQlrZXlfc2VyaWFsX3Qga2V5Y3RsKEtFWUNUTF9ORUdBVEUsIGtleV9zZXJpYWxfdCBrZXksCi0JCQkgICAgdW5zaWduZWQgdGltZW91dCwga2V5X3NlcmlhbF90IGtleXJpbmcpOworCWxvbmcga2V5Y3RsKEtFWUNUTF9ORUdBVEUsIGtleV9zZXJpYWxfdCBrZXksCisJCSAgICB1bnNpZ25lZCB0aW1lb3V0LCBrZXlfc2VyaWFsX3Qga2V5cmluZyk7CiAKICAgICAgSWYgdGhlIGtlcm5lbCBjYWxscyBiYWNrIHRvIHVzZXJzcGFjZSB0byBjb21wbGV0ZSB0aGUgaW5zdGFudGlhdGlvbiBvZiBhCiAgICAgIGtleSwgdXNlcnNwYWNlIHNob3VsZCB1c2UgdGhpcyBjYWxsIG1hcmsgdGhlIGtleSBhcyBuZWdhdGl2ZSBiZWZvcmUgdGhlCkBAIC02MzcsNiArNjM5LDM0IEBACiB0d28gZGlmZmVyZW50IHVzZXJzIG9wZW5pbmcgdGhlIHNhbWUgZmlsZSBpcyBsZWZ0IHRvIHRoZSBmaWxlc3lzdGVtIGF1dGhvciB0bwogc29sdmUuCiAKK05vdGUgdGhhdCB0aGVyZSBhcmUgdHdvIGRpZmZlcmVudCB0eXBlcyBvZiBwb2ludGVycyB0byBrZXlzIHRoYXQgbWF5IGJlCitlbmNvdW50ZXJlZDoKKworICgqKSBzdHJ1Y3Qga2V5ICoKKworICAgICBUaGlzIHNpbXBseSBwb2ludHMgdG8gdGhlIGtleSBzdHJ1Y3R1cmUgaXRzZWxmLiBLZXkgc3RydWN0dXJlcyB3aWxsIGJlIGF0CisgICAgIGxlYXN0IGZvdXItYnl0ZSBhbGlnbmVkLgorCisgKCopIGtleV9yZWZfdAorCisgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBhIHN0cnVjdCBrZXkgKiwgYnV0IHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgaXMgc2V0CisgICAgIGlmIHRoZSBjYWxsZXIgInBvc3Nlc3NlcyIgdGhlIGtleS4gQnkgInBvc3Nlc3Npb24iIGl0IGlzIG1lYW50IHRoYXQgdGhlCisgICAgIGNhbGxpbmcgcHJvY2Vzc2VzIGhhcyBhIHNlYXJjaGFibGUgbGluayB0byB0aGUga2V5IGZyb20gb25lIG9mIGl0cworICAgICBrZXlyaW5ncy4gVGhlcmUgYXJlIHRocmVlIGZ1bmN0aW9ucyBmb3IgZGVhbGluZyB3aXRoIHRoZXNlOgorCisJa2V5X3JlZl90IG1ha2Vfa2V5X3JlZihjb25zdCBzdHJ1Y3Qga2V5ICprZXksCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBwb3NzZXNzaW9uKTsKKworCXN0cnVjdCBrZXkgKmtleV9yZWZfdG9fcHRyKGNvbnN0IGtleV9yZWZfdCBrZXlfcmVmKTsKKworCXVuc2lnbmVkIGxvbmcgaXNfa2V5X3Bvc3Nlc3NlZChjb25zdCBrZXlfcmVmX3Qga2V5X3JlZik7CisKKyAgICAgVGhlIGZpcnN0IGZ1bmN0aW9uIGNvbnN0cnVjdHMgYSBrZXkgcmVmZXJlbmNlIGZyb20gYSBrZXkgcG9pbnRlciBhbmQKKyAgICAgcG9zc2Vzc2lvbiBpbmZvcm1hdGlvbiAod2hpY2ggbXVzdCBiZSAwIG9yIDEgYW5kIG5vdCBhbnkgb3RoZXIgdmFsdWUpLgorCisgICAgIFRoZSBzZWNvbmQgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBrZXkgcG9pbnRlciBmcm9tIGEgcmVmZXJlbmNlIGFuZCB0aGUKKyAgICAgdGhpcmQgcmV0cmlldmVzIHRoZSBwb3NzZXNzaW9uIGZsYWcuCisKIFdoZW4gYWNjZXNzaW5nIGEga2V5J3MgcGF5bG9hZCBjb250ZW50cywgY2VydGFpbiBwcmVjYXV0aW9ucyBtdXN0IGJlIHRha2VuIHRvCiBwcmV2ZW50IGFjY2VzcyB2cyBtb2RpZmljYXRpb24gcmFjZXMuIFNlZSB0aGUgc2VjdGlvbiAiTm90ZXMgb24gYWNjZXNzaW5nCiBwYXlsb2FkIGNvbnRlbnRzIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KQEAgLTY2MCwxMiArNjkwLDE4IEBACiAgICAgSWYgc3VjY2Vzc2Z1bCwgdGhlIGtleSB3aWxsIGhhdmUgYmVlbiBhdHRhY2hlZCB0byB0aGUgZGVmYXVsdCBrZXlyaW5nIGZvcgogICAgIGltcGxpY2l0bHkgb2J0YWluZWQgcmVxdWVzdC1rZXkga2V5cywgYXMgc2V0IGJ5IEtFWUNUTF9TRVRfUkVRS0VZX0tFWVJJTkcuCiAKKyAgICBTZWUgYWxzbyBEb2N1bWVudGF0aW9uL2tleXMtcmVxdWVzdC1rZXkudHh0LgorCiAKICgqKSBXaGVuIGl0IGlzIG5vIGxvbmdlciByZXF1aXJlZCwgdGhlIGtleSBzaG91bGQgYmUgcmVsZWFzZWQgdXNpbmc6CiAKIAl2b2lkIGtleV9wdXQoc3RydWN0IGtleSAqa2V5KTsKIAotICAgIFRoaXMgY2FuIGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0LiBJZiBDT05GSUdfS0VZUyBpcyBub3Qgc2V0IHRoZW4KKyAgICBPcjoKKworCXZvaWQga2V5X3JlZl9wdXQoa2V5X3JlZl90IGtleV9yZWYpOworCisgICAgVGhlc2UgY2FuIGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0LiBJZiBDT05GSUdfS0VZUyBpcyBub3Qgc2V0IHRoZW4KICAgICB0aGUgYXJndW1lbnQgd2lsbCBub3QgYmUgcGFyc2VkLgogCiAKQEAgLTY4OSwxMyArNzI1LDE3IEBACiAKICgqKSBJZiBhIGtleXJpbmcgd2FzIGZvdW5kIGluIHRoZSBzZWFyY2gsIHRoaXMgY2FuIGJlIGZ1cnRoZXIgc2VhcmNoZWQgYnk6CiAKLQlzdHJ1Y3Qga2V5ICprZXlyaW5nX3NlYXJjaChzdHJ1Y3Qga2V5ICprZXlyaW5nLAotCQkJCSAgIGNvbnN0IHN0cnVjdCBrZXlfdHlwZSAqdHlwZSwKLQkJCQkgICBjb25zdCBjaGFyICpkZXNjcmlwdGlvbikKKwlrZXlfcmVmX3Qga2V5cmluZ19zZWFyY2goa2V5X3JlZl90IGtleXJpbmdfcmVmLAorCQkJCSBjb25zdCBzdHJ1Y3Qga2V5X3R5cGUgKnR5cGUsCisJCQkJIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKQogCiAgICAgVGhpcyBzZWFyY2hlcyB0aGUga2V5cmluZyB0cmVlIHNwZWNpZmllZCBmb3IgYSBtYXRjaGluZyBrZXkuIEVycm9yIEVOT0tFWQotICAgIGlzIHJldHVybmVkIHVwb24gZmFpbHVyZS4gSWYgc3VjY2Vzc2Z1bCwgdGhlIHJldHVybmVkIGtleSB3aWxsIG5lZWQgdG8gYmUKLSAgICByZWxlYXNlZC4KKyAgICBpcyByZXR1cm5lZCB1cG9uIGZhaWx1cmUgKHVzZSBJU19FUlIvUFRSX0VSUiB0byBkZXRlcm1pbmUpLiBJZiBzdWNjZXNzZnVsLAorICAgIHRoZSByZXR1cm5lZCBrZXkgd2lsbCBuZWVkIHRvIGJlIHJlbGVhc2VkLgorCisgICAgVGhlIHBvc3Nlc3Npb24gYXR0cmlidXRlIGZyb20gdGhlIGtleXJpbmcgcmVmZXJlbmNlIGlzIHVzZWQgdG8gY29udHJvbAorICAgIGFjY2VzcyB0aHJvdWdoIHRoZSBwZXJtaXNzaW9ucyBtYXNrIGFuZCBpcyBwcm9wYWdhdGVkIHRvIHRoZSByZXR1cm5lZCBrZXkKKyAgICByZWZlcmVuY2UgcG9pbnRlciBpZiBzdWNjZXNzZnVsLgogCiAKICgqKSBUbyBjaGVjayB0aGUgdmFsaWRpdHkgb2YgYSBrZXksIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZDoKQEAgLTczMiw3ICs3NzIsNyBAQAoga2V5LT5wYXlsb2FkLmRhdGEuIE9uZSBvZiB0aGUgZm9sbG93aW5nIHdheXMgbXVzdCBiZSBzZWxlY3RlZCB0byBhY2Nlc3MgdGhlCiBkYXRhOgogCi0gKDEpIFVubW9kaWZ5YWJsZSBrZXkgdHlwZS4KKyAoMSkgVW5tb2RpZmlhYmxlIGtleSB0eXBlLgogCiAgICAgIElmIHRoZSBrZXkgdHlwZSBkb2VzIG5vdCBoYXZlIGEgbW9kaWZ5IG1ldGhvZCwgdGhlbiB0aGUga2V5J3MgcGF5bG9hZCBjYW4KICAgICAgYmUgYWNjZXNzZWQgd2l0aG91dCBhbnkgZm9ybSBvZiBsb2NraW5nLCBwcm92aWRlZCB0aGF0IGl0J3Mga25vd24gdG8gYmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKaW5kZXggYWI2NTcxNC4uYjQzM2M4YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKQEAgLTM1NSwxMCArMzU1LDE0IEBACiAJRGVmYXVsdDogMAogCiBpY21wX2VjaG9faWdub3JlX2FsbCAtIEJPT0xFQU4KKwlJZiBzZXQgbm9uLXplcm8sIHRoZW4gdGhlIGtlcm5lbCB3aWxsIGlnbm9yZSBhbGwgSUNNUCBFQ0hPCisJcmVxdWVzdHMgc2VudCB0byBpdC4KKwlEZWZhdWx0OiAwCisKIGljbXBfZWNob19pZ25vcmVfYnJvYWRjYXN0cyAtIEJPT0xFQU4KLQlJZiBlaXRoZXIgaXMgc2V0IHRvIHRydWUsIHRoZW4gdGhlIGtlcm5lbCB3aWxsIGlnbm9yZSBlaXRoZXIgYWxsCi0JSUNNUCBFQ0hPIHJlcXVlc3RzIHNlbnQgdG8gaXQgb3IganVzdCB0aG9zZSB0byBicm9hZGNhc3QvbXVsdGljYXN0Ci0JYWRkcmVzc2VzLCByZXNwZWN0aXZlbHkuCisJSWYgc2V0IG5vbi16ZXJvLCB0aGVuIHRoZSBrZXJuZWwgd2lsbCBpZ25vcmUgYWxsIElDTVAgRUNITyBhbmQKKwlUSU1FU1RBTVAgcmVxdWVzdHMgc2VudCB0byBpdCB2aWEgYnJvYWRjYXN0L211bHRpY2FzdC4KKwlEZWZhdWx0OiAxCiAKIGljbXBfcmF0ZWxpbWl0IC0gSU5URUdFUgogCUxpbWl0IHRoZSBtYXhpbWFsIHJhdGVzIGZvciBzZW5kaW5nIElDTVAgcGFja2V0cyB3aG9zZSB0eXBlIG1hdGNoZXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3BhcnNlLnR4dCBiL0RvY3VtZW50YXRpb24vc3BhcnNlLnR4dAppbmRleCA1ZGY0NGRjLi4xODI5MDA5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NwYXJzZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zcGFyc2UudHh0CkBAIC01MSw5ICs1MSw5IEBACiBXaGVyZSB0byBnZXQgc3BhcnNlCiB+fn5+fn5+fn5+fn5+fn5+fn5+CiAKLVdpdGggQkssIHlvdSBjYW4ganVzdCBnZXQgaXQgZnJvbQorV2l0aCBnaXQsIHlvdSBjYW4ganVzdCBnZXQgaXQgZnJvbQogCi0gICAgICAgIGJrOi8vc3BhcnNlLmJrYml0cy5uZXQvc3BhcnNlCisgICAgICAgIHJzeW5jOi8vcnN5bmMua2VybmVsLm9yZy9wdWIvc2NtL2RldmVsL3NwYXJzZS9zcGFyc2UuZ2l0CiAKIGFuZCBEYXZlSiBoYXMgdGFyLWJhbGxzIGF0CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL1VSQi50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi9VUkIudHh0CmluZGV4IGQ1OWI5NWMuLmE0OWU1ZjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNiL1VSQi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvVVJCLnR4dApAQCAtMSw1ICsxLDYgQEAKIFJldmlzZWQ6IDIwMDAtRGVjLTA1LgogQWdhaW46ICAgMjAwMi1KdWwtMDYKK0FnYWluOiAgIDIwMDUtU2VwLTE5CiAKICAgICBOT1RFOgogCkBAIC0xOCw4ICsxOSw4IEBACiAgIGFuZCBkZWxpdmVyIHRoZSBkYXRhIGFuZCBzdGF0dXMgYmFjay4gCiAKIC0gRXhlY3V0aW9uIG9mIGFuIFVSQiBpcyBpbmhlcmVudGx5IGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24sIGkuZS4gdGhlIAotICB1c2Jfc3VibWl0X3VyYih1cmIpIGNhbGwgcmV0dXJucyBpbW1lZGlhdGVseSBhZnRlciBpdCBoYXMgc3VjY2Vzc2Z1bGx5IHF1ZXVlZCAKLSAgdGhlIHJlcXVlc3RlZCBhY3Rpb24uIAorICB1c2Jfc3VibWl0X3VyYih1cmIpIGNhbGwgcmV0dXJucyBpbW1lZGlhdGVseSBhZnRlciBpdCBoYXMgc3VjY2Vzc2Z1bGx5CisgIHF1ZXVlZCB0aGUgcmVxdWVzdGVkIGFjdGlvbi4KIAogLSBUcmFuc2ZlcnMgZm9yIG9uZSBVUkIgY2FuIGJlIGNhbmNlbGVkIHdpdGggdXNiX3VubGlua191cmIodXJiKSBhdCBhbnkgdGltZS4gCiAKQEAgLTk0LDggKzk1LDkgQEAKIAogCXZvaWQgdXNiX2ZyZWVfdXJiKHN0cnVjdCB1cmIgKnVyYikKIAotWW91IG1heSBub3QgZnJlZSBhbiB1cmIgdGhhdCB5b3UndmUgc3VibWl0dGVkLCBidXQgd2hpY2ggaGFzbid0IHlldCBiZWVuCi1yZXR1cm5lZCB0byB5b3UgaW4gYSBjb21wbGV0aW9uIGNhbGxiYWNrLgorWW91IG1heSBmcmVlIGFuIHVyYiB0aGF0IHlvdSd2ZSBzdWJtaXR0ZWQsIGJ1dCB3aGljaCBoYXNuJ3QgeWV0IGJlZW4KK3JldHVybmVkIHRvIHlvdSBpbiBhIGNvbXBsZXRpb24gY2FsbGJhY2suICBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUKK2RlYWxsb2NhdGVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIGluIHVzZS4KIAogCiAxLjQuIFdoYXQgaGFzIHRvIGJlIGZpbGxlZCBpbj8KQEAgLTE0NSwzMCArMTQ3LDM2IEBACiAKIDEuNi4gSG93IHRvIGNhbmNlbCBhbiBhbHJlYWR5IHJ1bm5pbmcgVVJCPwogCi1Gb3IgYW4gVVJCIHdoaWNoIHlvdSd2ZSBzdWJtaXR0ZWQsIGJ1dCB3aGljaCBoYXNuJ3QgYmVlbiByZXR1cm5lZCB0bwoteW91ciBkcml2ZXIgYnkgdGhlIGhvc3QgY29udHJvbGxlciwgY2FsbAorVGhlcmUgYXJlIHR3byB3YXlzIHRvIGNhbmNlbCBhbiBVUkIgeW91J3ZlIHN1Ym1pdHRlZCBidXQgd2hpY2ggaGFzbid0CitiZWVuIHJldHVybmVkIHRvIHlvdXIgZHJpdmVyIHlldC4gIEZvciBhbiBhc3luY2hyb25vdXMgY2FuY2VsLCBjYWxsCiAKIAlpbnQgdXNiX3VubGlua191cmIoc3RydWN0IHVyYiAqdXJiKQogCiBJdCByZW1vdmVzIHRoZSB1cmIgZnJvbSB0aGUgaW50ZXJuYWwgbGlzdCBhbmQgZnJlZXMgYWxsIGFsbG9jYXRlZAotSFcgZGVzY3JpcHRvcnMuIFRoZSBzdGF0dXMgaXMgY2hhbmdlZCB0byByZWZsZWN0IHVubGlua2luZy4gQWZ0ZXIgCi11c2JfdW5saW5rX3VyYigpIHJldHVybnMgd2l0aCB0aGF0IHN0YXR1cyBjb2RlLCB5b3UgY2FuIGZyZWUgdGhlIFVSQgotd2l0aCB1c2JfZnJlZV91cmIoKS4KK0hXIGRlc2NyaXB0b3JzLiBUaGUgc3RhdHVzIGlzIGNoYW5nZWQgdG8gcmVmbGVjdCB1bmxpbmtpbmcuICBOb3RlCit0aGF0IHRoZSBVUkIgd2lsbCBub3Qgbm9ybWFsbHkgaGF2ZSBmaW5pc2hlZCB3aGVuIHVzYl91bmxpbmtfdXJiKCkKK3JldHVybnM7IHlvdSBtdXN0IHN0aWxsIHdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgdG8gYmUgY2FsbGVkLgogCi1UaGVyZSBpcyBhbHNvIGFuIGFzeW5jaHJvbm91cyB1bmxpbmsgbW9kZS4gIFRvIHVzZSB0aGlzLCBzZXQgdGhlCi10aGUgVVJCX0FTWU5DX1VOTElOSyBmbGFnIGluIHVyYi0+dHJhbnNmZXIgZmxhZ3MgYmVmb3JlIGNhbGxpbmcKLXVzYl91bmxpbmtfdXJiKCkuICBXaGVuIHVzaW5nIGFzeW5jIHVubGlua2luZywgdGhlIFVSQiB3aWxsIG5vdAotbm9ybWFsbHkgYmUgdW5saW5rZWQgd2hlbiB1c2JfdW5saW5rX3VyYigpIHJldHVybnMuICBJbnN0ZWFkLCB3YWl0Ci1mb3IgdGhlIGNvbXBsZXRpb24gaGFuZGxlciB0byBiZSBjYWxsZWQuCitUbyBjYW5jZWwgYW4gVVJCIHN5bmNocm9ub3VzbHksIGNhbGwKKworCXZvaWQgdXNiX2tpbGxfdXJiKHN0cnVjdCB1cmIgKnVyYikKKworSXQgZG9lcyBldmVyeXRoaW5nIHVzYl91bmxpbmtfdXJiIGRvZXMsIGFuZCBpbiBhZGRpdGlvbiBpdCB3YWl0cwordW50aWwgYWZ0ZXIgdGhlIFVSQiBoYXMgYmVlbiByZXR1cm5lZCBhbmQgdGhlIGNvbXBsZXRpb24gaGFuZGxlcgoraGFzIGZpbmlzaGVkLiAgSXQgYWxzbyBtYXJrcyB0aGUgVVJCIGFzIHRlbXBvcmFyaWx5IHVudXNhYmxlLCBzbwordGhhdCBpZiB0aGUgY29tcGxldGlvbiBoYW5kbGVyIG9yIGFueW9uZSBlbHNlIHRyaWVzIHRvIHJlc3VibWl0IGl0Cit0aGV5IHdpbGwgZ2V0IGEgLUVQRVJNIGVycm9yLiAgVGh1cyB5b3UgY2FuIGJlIHN1cmUgdGhhdCB3aGVuCit1c2Jfa2lsbF91cmIoKSByZXR1cm5zLCB0aGUgVVJCIGlzIHRvdGFsbHkgaWRsZS4KIAogCiAxLjcuIFdoYXQgYWJvdXQgdGhlIGNvbXBsZXRpb24gaGFuZGxlcj8KIAogVGhlIGhhbmRsZXIgaXMgb2YgdGhlIGZvbGxvd2luZyB0eXBlOgogCi0JdHlwZWRlZiB2b2lkICgqdXNiX2NvbXBsZXRlX3QpKHN0cnVjdCB1cmIgKik7CisJdHlwZWRlZiB2b2lkICgqdXNiX2NvbXBsZXRlX3QpKHN0cnVjdCB1cmIgKiwgc3RydWN0IHB0X3JlZ3MgKikKIAotaS5lLiBpdCBnZXRzIGp1c3QgdGhlIFVSQiB0aGF0IGNhdXNlZCB0aGUgY29tcGxldGlvbiBjYWxsLgorSS5lLiwgaXQgZ2V0cyB0aGUgVVJCIHRoYXQgY2F1c2VkIHRoZSBjb21wbGV0aW9uIGNhbGwsIHBsdXMgdGhlCityZWdpc3RlciB2YWx1ZXMgYXQgdGhlIHRpbWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0IChpZiBhbnkpLgogSW4gdGhlIGNvbXBsZXRpb24gaGFuZGxlciwgeW91IHNob3VsZCBoYXZlIGEgbG9vayBhdCB1cmItPnN0YXR1cyB0bwogZGV0ZWN0IGFueSBVU0IgZXJyb3JzLiBTaW5jZSB0aGUgY29udGV4dCBwYXJhbWV0ZXIgaXMgaW5jbHVkZWQgaW4gdGhlIFVSQiwKIHlvdSBjYW4gcGFzcyBpbmZvcm1hdGlvbiB0byB0aGUgY29tcGxldGlvbiBoYW5kbGVyLiAKQEAgLTE3NiwxNyArMTg0LDExIEBACiBOb3RlIHRoYXQgZXZlbiB3aGVuIGFuIGVycm9yIChvciB1bmxpbmspIGlzIHJlcG9ydGVkLCBkYXRhIG1heSBoYXZlIGJlZW4KIHRyYW5zZmVycmVkLiAgVGhhdCdzIGJlY2F1c2UgVVNCIHRyYW5zZmVycyBhcmUgcGFja2V0aXplZDsgaXQgbWlnaHQgdGFrZQogc2l4dGVlbiBwYWNrZXRzIHRvIHRyYW5zZmVyIHlvdXIgMUtCeXRlIGJ1ZmZlciwgYW5kIHRlbiBvZiB0aGVtIG1pZ2h0Ci1oYXZlIHRyYW5zZmVycmVkIHN1Y2Nlc2Z1bGx5IGJlZm9yZSB0aGUgY29tcGxldGlvbiBpcyBjYWxsZWQuCitoYXZlIHRyYW5zZmVycmVkIHN1Y2Nlc2Z1bGx5IGJlZm9yZSB0aGUgY29tcGxldGlvbiB3YXMgY2FsbGVkLgogCiAKIE5PVEU6ICAqKioqKiBXQVJOSU5HICoqKioqCi1Eb24ndCB1c2UgdXJiLT5kZXYgZmllbGQgaW4geW91ciBjb21wbGV0aW9uIGhhbmRsZXI7IGl0J3MgY2xlYXJlZAotYXMgcGFydCBvZiBnaXZpbmcgdXJicyBiYWNrIHRvIGRyaXZlcnMuICAoQWRkcmVzc2luZyBhbiBpc3N1ZSB3aXRoCi1vd25lcnNoaXAgb2YgcGVyaW9kaWMgVVJCcywgd2hpY2ggd2FzIG90aGVyd2lzZSBhbWJpZ3VvdXMuKSBJbnN0ZWFkLAotdXNlIHVyYi0+Y29udGV4dCB0byBob2xkIGFsbCB0aGUgZGF0YSB5b3VyIGRyaXZlciBuZWVkcy4KLQotTk9URTogICoqKioqIFdBUk5JTkcgKioqKioKLUFsc28sIE5FVkVSIFNMRUVQIElOIEEgQ09NUExFVElPTiBIQU5ETEVSLiAgVGhlc2UgYXJlIG5vcm1hbGx5IGNhbGxlZAorTkVWRVIgU0xFRVAgSU4gQSBDT01QTEVUSU9OIEhBTkRMRVIuICBUaGVzZSBhcmUgbm9ybWFsbHkgY2FsbGVkCiBkdXJpbmcgaGFyZHdhcmUgaW50ZXJydXB0IHByb2Nlc3NpbmcuICBJZiB5b3UgY2FuLCBkZWZlciBzdWJzdGFudGlhbAogd29yayB0byBhIHRhc2tsZXQgKGJvdHRvbSBoYWxmKSB0byBrZWVwIHN5c3RlbSBsYXRlbmNpZXMgbG93LiAgWW91J2xsCiBwcm9iYWJseSBuZWVkIHRvIHVzZSBzcGlubG9ja3MgdG8gcHJvdGVjdCBkYXRhIHN0cnVjdHVyZXMgeW91IG1hbmlwdWxhdGUKQEAgLTIyOSwyNCArMjMxLDEwIEBACiBJbnRlcnJ1cHQgdHJhbnNmZXJzLCBsaWtlIGlzb2Nocm9ub3VzIHRyYW5zZmVycywgYXJlIHBlcmlvZGljLCBhbmQgaGFwcGVuCiBpbiBpbnRlcnZhbHMgdGhhdCBhcmUgcG93ZXJzIG9mIHR3byAoMSwgMiwgNCBldGMpIHVuaXRzLiAgVW5pdHMgYXJlIGZyYW1lcwogZm9yIGZ1bGwgYW5kIGxvdyBzcGVlZCBkZXZpY2VzLCBhbmQgbWljcm9mcmFtZXMgZm9yIGhpZ2ggc3BlZWQgb25lcy4KLQotQ3VycmVudGx5LCBhZnRlciB5b3Ugc3VibWl0IG9uZSBpbnRlcnJ1cHQgVVJCLCB0aGF0IHVyYiBpcyBvd25lZCBieSB0aGUKLWhvc3QgY29udHJvbGxlciBkcml2ZXIgdW50aWwgeW91IGNhbmNlbCBpdCB3aXRoIHVzYl91bmxpbmtfdXJiKCkuICBZb3UKLW1heSB1bmxpbmsgaW50ZXJydXB0IHVyYnMgaW4gdGhlaXIgY29tcGxldGlvbiBoYW5kbGVycywgaWYgeW91IG5lZWQgdG8uCi0KLUFmdGVyIGEgdHJhbnNmZXIgY29tcGxldGlvbiBpcyBjYWxsZWQsIHRoZSBVUkIgaXMgYXV0b21hZ2ljYWxseSByZXN1Ym1pdHRlZC4KLVRISVMgQkVIQVZJT1IgSVMgRVhQRUNURUQgVE8gQkUgUkVNT1ZFRCEhCi0KLUludGVycnVwdCB0cmFuc2ZlcnMgbWF5IG9ubHkgc2VuZCAob3IgcmVjZWl2ZSkgdGhlICJtYXhwYWNrZXQiIHZhbHVlIGZvcgotdGhlIGdpdmVuIGludGVycnVwdCBlbmRwb2ludDsgaWYgeW91IG5lZWQgbW9yZSBkYXRhLCB5b3Ugd2lsbCBuZWVkIHRvCi1jb3B5IHRoYXQgZGF0YSBvdXQgb2YgKG9yIGludG8pIGFub3RoZXIgYnVmZmVyLiAgU2ltaWxhcmx5LCB5b3UgY2FuJ3QKLXF1ZXVlIGludGVycnVwdCB0cmFuc2ZlcnMuCi1USEVTRSBSRVNUUklDVElPTlMgQVJFIEVYUEVDVEVEIFRPIEJFIFJFTU9WRUQhIQotCi1Ob3RlIHRoYXQgdGhpcyBhdXRvbWFnaWMgcmVzdWJtaXNzaW9uIG1vZGVsIGRvZXMgbWFrZSBpdCBhd2t3YXJkIHRvIHVzZQotaW50ZXJydXB0IE9VVCB0cmFuc2ZlcnMuICBUaGUgcG9ydGFibGUgc29sdXRpb24gaW52b2x2ZXMgdW5saW5raW5nIHRob3NlCi1PVVQgdXJicyBhZnRlciB0aGUgZGF0YSBpcyB0cmFuc2ZlcnJlZCwgYW5kIHBlcmhhcHMgc3VibWl0dGluZyBhIGZpbmFsCi1VUkIgZm9yIGEgc2hvcnQgcGFja2V0LgotCiBUaGUgdXNiX3N1Ym1pdF91cmIoKSBjYWxsIG1vZGlmaWVzIHVyYi0+aW50ZXJ2YWwgdG8gdGhlIGltcGxlbWVudGVkIGludGVydmFsCiB2YWx1ZSB0aGF0IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgcmVxdWVzdGVkIGludGVydmFsIHZhbHVlLgorCitJbiBMaW51eCAyLjYsIHVubGlrZSBlYXJsaWVyIHZlcnNpb25zLCBpbnRlcnJ1cHQgVVJCcyBhcmUgbm90IGF1dG9tYWdpY2FsbHkKK3Jlc3RhcnRlZCB3aGVuIHRoZXkgY29tcGxldGUuICBUaGV5IGVuZCB3aGVuIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgaXMKK2NhbGxlZCwganVzdCBsaWtlIG90aGVyIFVSQnMuICBJZiB5b3Ugd2FudCBhbiBpbnRlcnJ1cHQgVVJCIHRvIGJlIHJlc3RhcnRlZCwKK3lvdXIgY29tcGxldGlvbiBoYW5kbGVyIG11c3QgcmVzdWJtaXQgaXQuCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGQxZTBlYjQuLjc2N2ZiNjEgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC02MDQsNiArNjA0LDE1IEBACiBNOglocGFAenl0b3IuY29tCiBTOglNYWludGFpbmVkCiAKK0NQVVNFVFMKK1A6CVBhdWwgSmFja3NvbgorUDoJU2ltb24gRGVycgorTToJcGpAc2dpLmNvbQorTToJc2ltb24uZGVyckBidWxsLm5ldAorTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZworVzoJaHR0cDovL3d3dy5idWxsb3BlbnNvdXJjZS5vcmcvY3B1c2V0LworUzoJU3VwcG9ydGVkCisKIENSQU1GUyBGSUxFU1lTVEVNCiBXOiAgICAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9jcmFtZnMvCiBTOiAgICAgT3JwaGFuCkBAIC02ODYsNiArNjk1LDEzIEBACiBNOglnLmxpYWtob3ZldHNraUBnbXguZGUKIFM6CU1haW50YWluZWQKIAorRENDUCBQUk9UT0NPTAorUDoJQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvCitNOglhY21lQG1hbmRyaXZhLmNvbQorTDoJZGNjcEB2Z2VyLmtlcm5lbC5vcmcKK1c6CWh0dHA6Ly93d3cud2x1Zy5vcmcubnovRENDUAorUzoJTWFpbnRhaW5lZAorCiBERUNuZXQgTkVUV09SSyBMQVlFUgogUDoJUGF0cmljayBDYXVsZmllbGQKIE06CXBhdHJpY2tAdHlrZXBlbmd1aW4uY29tCkBAIC0xMDU2LDggKzEwNzIsNiBAQAogUzoJTWFpbnRhaW5lZAogCiBJMkMgU1VCU1lTVEVNCi1QOglHcmVnIEtyb2FoLUhhcnRtYW4KLU06CWdyZWdAa3JvYWguY29tCiBQOglKZWFuIERlbHZhcmUKIE06CWtoYWxpQGxpbnV4LWZyLm9yZwogTDoJbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZwpAQCAtMTE1NCwxMSArMTE2OCw2IEBACiBXOglodHRwOi8vd3d3LmxpbnV4MTM5NC5vcmcvCiBTOglPcnBoYW4KIAotSUVFRSAxMzk0IFNCUDIKLUw6CWxpbnV4MTM5NC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKLVc6CWh0dHA6Ly93d3cubGludXgxMzk0Lm9yZy8KLVM6CU9ycGhhbgotCiBJRUVFIDEzOTQgU1VCU1lTVEVNCiBQOglCZW4gQ29sbGlucwogTToJYmNvbGxpbnNAZGViaWFuLm9yZwpAQCAtMTE5Myw2ICsxMjAyLDE1IEBACiBXOglodHRwOi8vd3d3LmxpbnV4MTM5NC5vcmcvCiBTOglNYWludGFpbmVkCiAKK0lFRUUgMTM5NCBTQlAyCitQOglCZW4gQ29sbGlucworTToJYmNvbGxpbnNAZGViaWFuLm9yZworUDoJU3RlZmFuIFJpY2h0ZXIKK006CXN0ZWZhbnJAczVyNi5pbi1iZXJsaW4uZGUKK0w6CWxpbnV4MTM5NC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKK1c6CWh0dHA6Ly93d3cubGludXgxMzk0Lm9yZy8KK1M6CU1haW50YWluZWQKKwogSU1TIFRXSU5UVVJCTyBGUkFNRUJVRkZFUiBEUklWRVIKIFA6CVBhdWwgTXVuZHQKIE06CWxldGhhbEBjaGFvdGljZHJlYW1zLm9yZwpAQCAtMTM5Nyw2ICsxNDE1LDE4IEBACiBMOglmYXN0Ym9vdEBvc2RsLm9yZwogUzoJTWFpbnRhaW5lZAogCitLUFJPQkVTCitQOglQcmFzYW5uYSBTIFBhbmNoYW11a2hpCitNOglwcmFzYW5uYUBpbi5pYm0uY29tCitQOglBbmFudGggTiBNYXZpbmFrYXlhbmFoYWxsaQorTToJYW5hbnRoQGluLmlibS5jb20KK1A6CUFuaWwgUyBLZXNoYXZhbXVydGh5CitNOglhbmlsLnMua2VzaGF2YW11cnRoeUBpbnRlbC5jb20KK1A6CURhdmlkIFMuIE1pbGxlcgorTToJZGF2ZW1AZGF2ZW1sb2Z0Lm5ldAorTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorCiBMQU5NRURJQSBXQU4gQ0FSRCBEUklWRVIKIFA6CUFuZHJldyBTdGFubGV5LUpvbmVzCiBNOglhc2pAbGFubWVkaWEuY29tCkBAIC0xNTg4LDYgKzE2MTgsMTMgQEAKIEw6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAogUzoJTWFpbnRhaW5lZAogCitNRUdBUkFJRCBTQ1NJIERSSVZFUlMKK1A6ICAgICBOZWVsYSBTeWFtIEtvbGxpCitNOiAgICAgTmVlbGEuS29sbGlAZW5nZW5pby5jb20KK1M6ICAgICBsaW51eC1zY3NpQHZnZXIua2VybmVsLm9yZworVzogICAgIGh0dHA6Ly9tZWdhcmFpZC5sc2lsb2dpYy5jb20KK1M6ICAgICBNYWludGFpbmVkCisKIE1FTU9SWSBURUNITk9MT0dZIERFVklDRVMKIFA6CURhdmlkIFdvb2Rob3VzZQogTToJZHdtdzJAaW5mcmFkZWFkLm9yZwpAQCAtMTcxNyw4ICsxNzU0LDExIEBACiBJUFZTCiBQOglXZW5zb25nIFpoYW5nCiBNOgl3ZW5zb25nQGxpbnV4LXZzLm9yZworUDoJU2ltb24gSG9ybWFuCitNOglob3Jtc0B2ZXJnZS5uZXQuYXUKIFA6CUp1bGlhbiBBbmFzdGFzb3YKIE06CWphQHNzaS5iZworTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogCiBORlMgQ0xJRU5UCkBAIC0xODg5LDYgKzE5MjksMTMgQEAKIEw6CWxpbnV4LW10ZEBsaXN0cy5pbmZyYWRlYWQub3JnCiBTOglNYWludGFpbmVkCiAKK1BLVENEVkQgRFJJVkVSCitQOglQZXRlciBPc3Rlcmx1bmQKK006CXBldGVybzJAdGVsaWEuY29tCitMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCitMOglwYWNrZXQtd3JpdGluZ0BzdXNlLmNvbQorUzoJTWFpbnRhaW5lZAorCiBQT1NJWCBDTE9DS1MgYW5kIFRJTUVSUwogUDoJR2VvcmdlIEFuemluZ2VyCiBNOglnZW9yZ2VAbXZpc3RhLmNvbQpAQCAtMjI1OSw2ICsyMzA2LDEyIEBACiBMOglwY2locGQtZGlzY3Vzc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKIFM6CU1haW50YWluZWQKIAorU0tHRSwgU0tZMiAxMC8xMDAvMTAwMCBHSUdBQklUIEVUSEVSTkVUIERSSVZFUlMKK1A6CVN0ZXBoZW4gSGVtbWluZ2VyCitNOglzaGVtbWluZ2VyQG9zZGwub3JnCitMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCitTOglNYWludGFpbmVkCisKIFNQQVJDIChzcGFyYzMyKToKIFA6CVdpbGxpYW0gTC4gSXJ3aW4KIE06CXdsaUBob2xvbW9ycGh5LmNvbQpAQCAtMjI3MSwxMiArMjMyNCw2IEBACiBMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnID8KIFM6CVN1cHBvcnRlZAogCi1TUFggTkVUV09SSyBMQVlFUgotUDoJSmF5IFNjaHVsaXN0Ci1NOglqc2NobHN0QHNhbWJhLm9yZwotTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwotUzoJU3VwcG9ydGVkCi0KIFNSTSAoQWxwaGEpIGVudmlyb25tZW50IGFjY2VzcwogUDoJSmFuLUJlbmVkaWN0IEdsYXcKIE06CWpiZ2xhd0BsdWctb3dsLmRlCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDRlMGQ3YzYuLjRhNzAwMGUgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogVkVSU0lPTiA9IDIKIFBBVENITEVWRUwgPSA2CiBTVUJMRVZFTCA9IDE0Ci1FWFRSQVZFUlNJT04gPS1yYzEKK0VYVFJBVkVSU0lPTiA9LXJjNQogTkFNRT1BZmZsdWVudCBBbGJhdHJvc3MKIAogIyAqRE9DVU1FTlRBVElPTioKQEAgLTM3Miw3ICszNzIsNyBAQAogIyBGaWxlcyB0byBpZ25vcmUgaW4gZmluZCAuLi4gc3RhdGVtZW50cwogCiBSQ1NfRklORF9JR05PUkUgOj0gXCggLW5hbWUgU0NDUyAtbyAtbmFtZSBCaXRLZWVwZXIgLW8gLW5hbWUgLnN2biAtbyAtbmFtZSBDVlMgLW8gLW5hbWUgLnBjIC1vIC1uYW1lIC5oZyBcKSAtcHJ1bmUgLW8KLVJDU19UQVJfSUdOT1JFIDo9IC0tZXhjbHVkZSBTQ0NTIC0tZXhjbHVkZSBCaXRLZWVwZXIgLS1leGNsdWRlIC5zdm4gLS1leGNsdWRlIENWUyAtLWV4Y2x1ZGUgLnBjIC0tZXhjbHVkZSAuaGcKK2V4cG9ydCBSQ1NfVEFSX0lHTk9SRSA6PSAtLWV4Y2x1ZGUgU0NDUyAtLWV4Y2x1ZGUgQml0S2VlcGVyIC0tZXhjbHVkZSAuc3ZuIC0tZXhjbHVkZSBDVlMgLS1leGNsdWRlIC5wYyAtLWV4Y2x1ZGUgLmhnCiAKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjIFJ1bGVzIHNoYXJlZCBiZXR3ZWVuICpjb25maWcgdGFyZ2V0cyBhbmQgYnVpbGQgdGFyZ2V0cwpAQCAtNjYwLDggKzY2MCwxMCBAQAogIyBMaW5rIG9mIHZtbGludXgKICMgSWYgQ09ORklHX0tBTExTWU1TIGlzIHNldCAudmVyc2lvbiBpcyBhbHJlYWR5IHVwZGF0ZWQKICMgR2VuZXJhdGUgU3lzdGVtLm1hcCBhbmQgdmVyaWZ5IHRoYXQgdGhlIGNvbnRlbnQgaXMgY29uc2lzdGVudAotCisjIFVzZSArIGluIGZyb250IG9mIHRoZSB2bWxpbnV4X3ZlcnNpb24gcnVsZSB0byBzaWxlbnQgd2FybmluZyB3aXRoIG1ha2UgLWoyCisjIEZpcnN0IGNvbW1hbmQgaXMgJzonIHRvIGFsbG93IHVzIHRvIHVzZSArIGluIGZyb250IG9mIHRoZSBydWxlCiBkZWZpbmUgcnVsZV92bWxpbnV4X18KKwk6CiAJJChpZiAkKENPTkZJR19LQUxMU1lNUyksLCskKGNhbGwgY21kLHZtbGludXhfdmVyc2lvbikpCiAKIAkkKGNhbGwgY21kLHZtbGludXhfXykKZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQppbmRleCA3NmRkNzgwLi5kMWVkY2M3IDEwMDY0NAotLS0gYS9SRUFETUUKKysrIGIvUkVBRE1FCkBAIC0xNDksNiArMTQ5LDkgQEAKIAkibWFrZSBnY29uZmlnIiAgICAgWCB3aW5kb3dzIChHdGspIGJhc2VkIGNvbmZpZ3VyYXRpb24gdG9vbC4KIAkibWFrZSBvbGRjb25maWciICAgRGVmYXVsdCBhbGwgcXVlc3Rpb25zIGJhc2VkIG9uIHRoZSBjb250ZW50cyBvZgogCQkJICAgeW91ciBleGlzdGluZyAuLy5jb25maWcgZmlsZS4KKwkibWFrZSBzaWxlbnRvbGRjb25maWciCisJCQkgICBMaWtlIGFib3ZlLCBidXQgYXZvaWRzIGNsdXR0ZXJpbmcgdGhlIHNjcmVlbgorCQkJICAgd2l0aCBxdWVzdGlvbnMgYWxyZWFkeSBhbnN3ZXJlZC4KICAgIAogCU5PVEVTIG9uICJtYWtlIGNvbmZpZyI6CiAJLSBoYXZpbmcgdW5uZWNlc3NhcnkgZHJpdmVycyB3aWxsIG1ha2UgdGhlIGtlcm5lbCBiaWdnZXIsIGFuZCBjYW4KQEAgLTE2OSw5ICsxNzIsNiBAQAogCSAgc2hvdWxkIHByb2JhYmx5IGFuc3dlciAnbicgdG8gdGhlIHF1ZXN0aW9ucyBmb3IKICAgICAgICAgICAiZGV2ZWxvcG1lbnQiLCAiZXhwZXJpbWVudGFsIiwgb3IgImRlYnVnZ2luZyIgZmVhdHVyZXMuCiAKLSAtIENoZWNrIHRoZSB0b3AgTWFrZWZpbGUgZm9yIGZ1cnRoZXIgc2l0ZS1kZXBlbmRlbnQgY29uZmlndXJhdGlvbgotICAgKGRlZmF1bHQgU1ZHQSBtb2RlIGV0YykuIAotCiBDT01QSUxJTkcgdGhlIGtlcm5lbDoKIAogIC0gTWFrZSBzdXJlIHlvdSBoYXZlIGdjYyAyLjk1LjMgYXZhaWxhYmxlLgpAQCAtMTk5LDYgKzE5OSw5IEBACiAgICBhcmUgaW5zdGFsbGluZyBhIG5ldyBrZXJuZWwgd2l0aCB0aGUgc2FtZSB2ZXJzaW9uIG51bWJlciBhcyB5b3VyCiAgICB3b3JraW5nIGtlcm5lbCwgbWFrZSBhIGJhY2t1cCBvZiB5b3VyIG1vZHVsZXMgZGlyZWN0b3J5IGJlZm9yZSB5b3UKICAgIGRvIGEgIm1ha2UgbW9kdWxlc19pbnN0YWxsIi4KKyAgIEFsdGVybmF0aXZlbHksIGJlZm9yZSBjb21waWxpbmcsIHVzZSB0aGUga2VybmVsIGNvbmZpZyBvcHRpb24KKyAgICJMT0NBTFZFUlNJT04iIHRvIGFwcGVuZCBhIHVuaXF1ZSBzdWZmaXggdG8gdGhlIHJlZ3VsYXIga2VybmVsIHZlcnNpb24uCisgICBMT0NBTFZFUlNJT04gY2FuIGJlIHNldCBpbiB0aGUgIkdlbmVyYWwgU2V0dXAiIG1lbnUuCiAKICAtIEluIG9yZGVyIHRvIGJvb3QgeW91ciBuZXcga2VybmVsLCB5b3UnbGwgbmVlZCB0byBjb3B5IHRoZSBrZXJuZWwKICAgIGltYWdlIChlLmcuIC4uLi9saW51eC9hcmNoL2kzODYvYm9vdC9iekltYWdlIGFmdGVyIGNvbXBpbGF0aW9uKQpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvZW50cnkuUyBiL2FyY2gvYWxwaGEva2VybmVsL2VudHJ5LlMKaW5kZXggNzZjYzBjYi4uZTM4NjcxYyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9lbnRyeS5TCkBAIC0xOTYsNiArMTk2LDcgQEAKIAlzdHEJJDI2LCAyMDgoJHNwKQogCXN0cQkkMjcsIDIxNigkc3ApCiAJc3RxCSQyOCwgMjI0KCRzcCkKKwltb3YJJHNwLCAkMTkKIAlzdHEJJGdwLCAyMzIoJHNwKQogCWxkYQkkOCwgMHgzZmZmCiAJc3RxCSQzMSwgMjQ4KCRzcCkKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYyBiL2FyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYwppbmRleCAwNjM2MTE2Li4wMWZlOTkwZCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSA8bGludXgvdWlvLmg+CiAjaW5jbHVkZSA8bGludXgvdmZzLmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KIAogI2luY2x1ZGUgPGFzbS9mcHUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTk3NSw2ICs5NzYsNyBAQAogCWxvbmcgdGltZW91dDsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAlzdHJ1Y3QgZmR0YWJsZSAqZmR0OworCWludCBtYXhfZmRzZXQ7CiAKIAl0aW1lb3V0ID0gTUFYX1NDSEVEVUxFX1RJTUVPVVQ7CiAJaWYgKHR2cCkgewpAQCAtOTk2LDggKzk5OCwxMSBAQAogCQl9CiAJfQogCisJcmN1X3JlYWRfbG9jaygpOwogCWZkdCA9IGZpbGVzX2ZkdGFibGUoY3VycmVudC0+ZmlsZXMpOwotCWlmIChuIDwgMCB8fCBuID4gZmR0LT5tYXhfZmRzZXQpCisJbWF4X2Zkc2V0ID0gZmR0LT5tYXhfZmRzZXQ7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJaWYgKG4gPCAwIHx8IG4gPiBtYXhfZmRzZXQpCiAJCWdvdG8gb3V0X25vZmRzOwogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvYWxwaGEva2VybmVsL3Byb2Nlc3MuYwppbmRleCBmYTk4ZGFlLi5lYjIwYzNhIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xMjcsNiArMTI3LDEwIEBACiAJLyogSWYgYm9vdGVkIGZyb20gU1JNLCByZXNldCBzb21lIG9mIHRoZSBvcmlnaW5hbCBlbnZpcm9ubWVudC4gKi8KIAlpZiAoYWxwaGFfdXNpbmdfc3JtKSB7CiAjaWZkZWYgQ09ORklHX0RVTU1ZX0NPTlNPTEUKKwkJLyogSWYgd2UndmUgZ290dGVuIGhlcmUgYWZ0ZXIgU3lzUnEtYiwgbGVhdmUgaW50ZXJydXB0CisJCSAgIGNvbnRleHQgYmVmb3JlIHRha2luZyBvdmVyIHRoZSBjb25zb2xlLiAqLworCQlpZiAoaW5faW50ZXJydXB0KCkpCisJCQlpcnFfZXhpdCgpOwogCQkvKiBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mIHJlc2V0dGluZyB0aGUgVkdBIHZpZGVvIG9yaWdpbi4gICovCiAJCXRha2Vfb3Zlcl9jb25zb2xlKCZkdW1teV9jb24sIDAsIE1BWF9OUl9DT05TT0xFUy0xLCAxKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2RwMjY0LmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZHAyNjQuYwppbmRleCA5ZTM2YjA3Li5kNWRhNmIxIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZHAyNjQuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZHAyNjQuYwpAQCAtMzk1LDYgKzM5NSwyMiBAQAogICovCiAKIHN0YXRpYyBpbnQgX19pbml0Citpc2FfaXJxX2ZpeHVwKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpcnEpCit7CisJdTggaXJxODsKKworCWlmIChpcnEgPiAwKQorCQlyZXR1cm4gaXJxOworCisJLyogVGhpcyBpbnRlcnJ1cHQgaXMgcm91dGVkIHZpYSBJU0EgYnJpZGdlLCBzbyB3ZSdsbAorCSAgIGp1c3QgaGF2ZSB0byB0cnVzdCB3aGF0ZXZlciB2YWx1ZSB0aGUgY29uc29sZSBtaWdodAorCSAgIGhhdmUgYXNzaWduZWQuICAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0lOVEVSUlVQVF9MSU5FLCAmaXJxOCk7CisKKwlyZXR1cm4gaXJxOCAmIDB4ZjsKK30KKworc3RhdGljIGludCBfX2luaXQKIGRwMjY0X21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCXN0YXRpYyBjaGFyIGlycV90YWJbNl1bNV0gX19pbml0ZGF0YSA9IHsKQEAgLTQwNywyNSArNDIzLDEzIEBACiAJCXsgMTYrIDMsIDE2KyAzLCAxNisgMiwgMTYrIDEsIDE2KyAwfSAgLyogSWRTZWwgMTAgc2xvdCAzICovCiAJfTsKIAljb25zdCBsb25nIG1pbl9pZHNlbCA9IDUsIG1heF9pZHNlbCA9IDEwLCBpcnFzX3Blcl9zbG90ID0gNTsKLQogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IGRldi0+c3lzZGF0YTsKIAlpbnQgaXJxID0gQ09NTU9OX1RBQkxFX0xPT0tVUDsKIAotCWlmIChpcnEgPiAwKSB7CisJaWYgKGlycSA+IDApCiAJCWlycSArPSAxNiAqIGhvc2UtPmluZGV4OwotCX0gZWxzZSB7Ci0JCS8qID8/PyBUaGUgQ29udGFxIElERSBjb250cm9sbGVyIG9uIHRoZSBJU0EgYnJpZGdlIHVzZXMKLQkJICAgImxlZ2FjeSIgaW50ZXJydXB0cyAxNCBhbmQgMTUuICBJIGRvbid0IGtub3cgaWYgYW55dGhpbmcKLQkJICAgY2FuIHdpbmQgdXAgYXQgdGhlIHNhbWUgc2xvdCtwaW4gb24gaG9zZTEsIHNvIHdlJ2xsCi0JCSAgIGp1c3QgaGF2ZSB0byB0cnVzdCB3aGF0ZXZlciB2YWx1ZSB0aGUgY29uc29sZSBtaWdodAotCQkgICBoYXZlIGFzc2lnbmVkLiAgKi8KIAotCQl1OCBpcnE4OwotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9JTlRFUlJVUFRfTElORSwgJmlycTgpOwotCQlpcnEgPSBpcnE4OwotCX0KLQotCXJldHVybiBpcnE7CisJcmV0dXJuIGlzYV9pcnFfZml4dXAoZGV2LCBpcnEpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdApAQCAtNDUzLDcgKzQ1Nyw4IEBACiAJCXsgICAgMjQsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3fSAgLyogSWRTZWwgMTUgc2xvdCA1IFBDSTIqLwogCX07CiAJY29uc3QgbG9uZyBtaW5faWRzZWwgPSAzLCBtYXhfaWRzZWwgPSAxNSwgaXJxc19wZXJfc2xvdCA9IDU7Ci0JcmV0dXJuIENPTU1PTl9UQUJMRV9MT09LVVA7CisKKwlyZXR1cm4gaXNhX2lycV9maXh1cChkZXYsIENPTU1PTl9UQUJMRV9MT09LVVApOwogfQogCiBzdGF0aWMgdTggX19pbml0CkBAIC01MDcsNyArNTEyLDggQEAKIAkJeyAgICA0NywgICAgNDcsICAgIDQ2LCAgICA0NSwgICAgNDR9LCAvKiBJZFNlbCAxNyBzbG90IDMgKi8KIAl9OwogCWNvbnN0IGxvbmcgbWluX2lkc2VsID0gNywgbWF4X2lkc2VsID0gMTcsIGlycXNfcGVyX3Nsb3QgPSA1OwotCXJldHVybiBDT01NT05fVEFCTEVfTE9PS1VQOworCisJcmV0dXJuIGlzYV9pcnFfZml4dXAoZGV2LCBDT01NT05fVEFCTEVfTE9PS1VQKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQKQEAgLTUyNCwxNCArNTMwLDEzIEBACiAJCXsgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xfSAgLyogSWRTZWwgNyBJU0EgQnJpZGdlICovCiAJfTsKIAljb25zdCBsb25nIG1pbl9pZHNlbCA9IDEsIG1heF9pZHNlbCA9IDcsIGlycXNfcGVyX3Nsb3QgPSA1OwotCiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gZGV2LT5zeXNkYXRhOwogCWludCBpcnEgPSBDT01NT05fVEFCTEVfTE9PS1VQOwogCiAJaWYgKGlycSA+IDApCiAJCWlycSArPSAxNiAqIGhvc2UtPmluZGV4OwogCi0JcmV0dXJuIGlycTsKKwlyZXR1cm4gaXNhX2lycV9maXh1cChkZXYsIGlycSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvYWxwaGEva2VybmVsL3RyYXBzLmMKaW5kZXggNmY1MDlhNi4uZjlkMTIzMSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC90cmFwcy5jCkBAIC00NDYsMTYgKzQ0NiwxNSBAQAogCiAKIC8qIE1hY3JvIGZvciBleGNlcHRpb24gZml4dXAgY29kZSB0byBhY2Nlc3MgaW50ZWdlciByZWdpc3RlcnMuICAqLwotI2RlZmluZSB1bmFfcmVnKHIpICAocmVncy5yZWdzWyhyKSA+PSAxNiAmJiAocikgPD0gMTggPyAocikrMTkgOiAocildKQorI2RlZmluZSB1bmFfcmVnKHIpICAocmVncy0+cmVnc1socikgPj0gMTYgJiYgKHIpIDw9IDE4ID8gKHIpKzE5IDogKHIpXSkKIAogCiBhc21saW5rYWdlIHZvaWQKIGRvX2VudFVuYSh2b2lkICogdmEsIHVuc2lnbmVkIGxvbmcgb3Bjb2RlLCB1bnNpZ25lZCBsb25nIHJlZywKLQkgIHVuc2lnbmVkIGxvbmcgYTMsIHVuc2lnbmVkIGxvbmcgYTQsIHVuc2lnbmVkIGxvbmcgYTUsCi0JICBzdHJ1Y3QgYWxscmVncyByZWdzKQorCSAgc3RydWN0IGFsbHJlZ3MgKnJlZ3MpCiB7CiAJbG9uZyBlcnJvciwgdG1wMSwgdG1wMiwgdG1wMywgdG1wNDsKLQl1bnNpZ25lZCBsb25nIHBjID0gcmVncy5wYyAtIDQ7CisJdW5zaWduZWQgbG9uZyBwYyA9IHJlZ3MtPnBjIC0gNDsKIAljb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpmaXh1cDsKIAogCXVuYWxpZ25lZFswXS5jb3VudCsrOwpAQCAtNjM2LDcgKzYzNSw3IEBACiAJCXByaW50aygiRm9yd2FyZGluZyB1bmFsaWduZWQgZXhjZXB0aW9uIGF0ICVseCAoJWx4KVxuIiwKIAkJICAgICAgIHBjLCBuZXdwYyk7CiAKLQkJKCZyZWdzKS0+cGMgPSBuZXdwYzsKKwkJcmVncy0+cGMgPSBuZXdwYzsKIAkJcmV0dXJuOwogCX0KIApAQCAtNjUwLDcgKzY0OSw3IEBACiAJICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCk7CiAKIAlwcmludGsoInBjID0gWzwlMDE2bHg+XSAgcmEgPSBbPCUwMTZseD5dICBwcyA9ICUwNGx4XG4iLAotCSAgICAgICBwYywgdW5hX3JlZygyNiksIHJlZ3MucHMpOworCSAgICAgICBwYywgdW5hX3JlZygyNiksIHJlZ3MtPnBzKTsKIAlwcmludGsoInIwID0gJTAxNmx4ICByMSA9ICUwMTZseCAgcjIgPSAlMDE2bHhcbiIsCiAJICAgICAgIHVuYV9yZWcoMCksIHVuYV9yZWcoMSksIHVuYV9yZWcoMikpOwogCXByaW50aygicjMgPSAlMDE2bHggIHI0ID0gJTAxNmx4ICByNSA9ICUwMTZseFxuIiwKQEAgLTY3MCwxMCArNjY5LDEwIEBACiAJICAgICAgIHVuYV9yZWcoMjIpLCB1bmFfcmVnKDIzKSwgdW5hX3JlZygyNCkpOwogCXByaW50aygicjI1PSAlMDE2bHggIHIyNz0gJTAxNmx4ICByMjg9ICUwMTZseFxuIiwKIAkgICAgICAgdW5hX3JlZygyNSksIHVuYV9yZWcoMjcpLCB1bmFfcmVnKDI4KSk7Ci0JcHJpbnRrKCJncCA9ICUwMTZseCAgc3AgPSAlcFxuIiwgcmVncy5ncCwgJnJlZ3MrMSk7CisJcHJpbnRrKCJncCA9ICUwMTZseCAgc3AgPSAlcFxuIiwgcmVncy0+Z3AsIHJlZ3MrMSk7CiAKIAlkaWtfc2hvd19jb2RlKCh1bnNpZ25lZCBpbnQgKilwYyk7Ci0JZGlrX3Nob3dfdHJhY2UoKHVuc2lnbmVkIGxvbmcgKikoJnJlZ3MrMSkpOworCWRpa19zaG93X3RyYWNlKCh1bnNpZ25lZCBsb25nICopKHJlZ3MrMSkpOwogCiAJaWYgKHRlc3RfYW5kX3NldF90aHJlYWRfZmxhZyAoVElGX0RJRV9JRl9LRVJORUwpKSB7CiAJCXByaW50aygiZGllX2lmX2tlcm5lbCByZWN1cnNpb24gZGV0ZWN0ZWQuXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL01ha2VmaWxlIGIvYXJjaC9hcm0vTWFrZWZpbGUKaW5kZXggMTMwZTYyMi4uMjk5YmMwNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vTWFrZWZpbGUKQEAgLTUzLDcgKzUzLDcgQEAKIHR1bmUtJChDT05GSUdfQ1BVX1NBMTEwKQk6PS1tdHVuZT1zdHJvbmdhcm0xMTAKIHR1bmUtJChDT05GSUdfQ1BVX1NBMTEwMCkJOj0tbXR1bmU9c3Ryb25nYXJtMTEwMAogdHVuZS0kKENPTkZJR19DUFVfWFNDQUxFKQk6PSQoY2FsbCBjYy1vcHRpb24sLW10dW5lPXhzY2FsZSwtbXR1bmU9c3Ryb25nYXJtMTEwKSAtV2EsLW1jcHU9eHNjYWxlCi10dW5lLSQoQ09ORklHX0NQVV9WNikJCTo9LW10dW5lPXN0cm9uZ2FybQordHVuZS0kKENPTkZJR19DUFVfVjYpCQk6PSQoY2FsbCBjYy1vcHRpb24sLW10dW5lPWFybTExMzZqLXMsLW10dW5lPXN0cm9uZ2FybSkKIAogIyBOZWVkIC1VYXJtIGZvciBnY2MgPCAzLngKIENGTEFHU19BQkkJOj0kKGNhbGwgY2Mtb3B0aW9uLC1tYXBjcy0zMiwtbWFiaT1hcGNzLWdudSkgJChjYWxsIGNjLW9wdGlvbiwtbW5vLXRodW1iLWludGVyd29yaywpCkBAIC0xNzUsMTAgKzE3NSwxMCBAQAogZW5kaWYKIAlAdG91Y2ggJEAKIAotYXJjaHByZXBhcmU6IG1ha2V0b29scyBpbmNsdWRlL2FzbS1hcm0vLmFyY2gKK2FyY2hwcmVwYXJlOiBtYWtldG9vbHMKIAogLlBIT05ZOiBtYWtldG9vbHMgRk9SQ0UKLW1ha2V0b29sczogaW5jbHVkZS9saW51eC92ZXJzaW9uLmggRk9SQ0UKK21ha2V0b29sczogaW5jbHVkZS9saW51eC92ZXJzaW9uLmggaW5jbHVkZS9hc20tYXJtLy5hcmNoIEZPUkNFCiAJJChRKSQoTUFLRSkgJChidWlsZCk9YXJjaC9hcm0vdG9vbHMgaW5jbHVkZS9hc20tYXJtL21hY2gtdHlwZXMuaAogCiAjIENvbnZlcnQgYnpJbWFnZSB0byB6SW1hZ2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9vZnctc2hhcmsuYyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9vZnctc2hhcmsuYwppbmRleCA3ZjZmNWRiLi40NjVjNTRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvb2Z3LXNoYXJrLmMKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL29mdy1zaGFyay5jCkBAIC0yNTYsNSArMjU2LDUgQEAKIAl0ZW1wWzExXT0nXDAnOwogCW1lbV9sZW4gPSBPRl9nZXRwcm9wbGVuKG8scGhhbmRsZSwgdGVtcCk7CiAJT0ZfZ2V0cHJvcChvLHBoYW5kbGUsIHRlbXAsIGJ1ZmZlciwgbWVtX2xlbik7Ci0JKHVuc2lnbmVkIGNoYXIpIHBvaW50ZXJbMzJdID0gKCh1bnNpZ25lZCBjaGFyICopIGJ1ZmZlcilbbWVtX2xlbi0yXTsKKwkqICgodW5zaWduZWQgY2hhciAqKSAmcG9pbnRlclszMl0pID0gKCh1bnNpZ25lZCBjaGFyICopIGJ1ZmZlcilbbWVtX2xlbi0yXTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9naWMuYyBiL2FyY2gvYXJtL2NvbW1vbi9naWMuYwppbmRleCBkNzQ5OTA3Li5jMDJkYzgxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vZ2ljLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL2dpYy5jCkBAIC02OCw2ICs2OCw3IEBACiAJd3JpdGVsKG1hc2ssIGdpY19kaXN0X2Jhc2UgKyBHSUNfRElTVF9FTkFCTEVfU0VUICsgKGlycSAvIDMyKSAqIDQpOwogfQogCisjaWZkZWYgQ09ORklHX1NNUAogc3RhdGljIHZvaWQgZ2ljX3NldF9jcHUoc3RydWN0IGlycWRlc2MgKmRlc2MsIHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBjcHUpCiB7CiAJdm9pZCBfX2lvbWVtICpyZWcgPSBnaWNfZGlzdF9iYXNlICsgR0lDX0RJU1RfVEFSR0VUICsgKGlycSAmIH4zKTsKQEAgLTc4LDYgKzc5LDcgQEAKIAl2YWwgfD0gMSA8PCAoY3B1ICsgc2hpZnQpOwogCXdyaXRlbCh2YWwsIHJlZyk7CiB9CisjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBpcnFjaGlwIGdpY19jaGlwID0gewogCS5hY2sJCT0gZ2ljX2Fja19pcnEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vbG9jb21vLmMgYi9hcmNoL2FybS9jb21tb24vbG9jb21vLmMKaW5kZXggMjc4NmY3Yy4uZTgwNTNkMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL2xvY29tby5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KQEAgLTU1MSw3ICs1NTAsNyBAQAogCXUxNglMQ01fU1BJTUQ7CiB9OwogCi1zdGF0aWMgaW50IGxvY29tb19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHBtX21lc3NhZ2VfdCwgdTMyIGxldmVsKQorc3RhdGljIGludCBsb2NvbW9fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSwgdTMyIGxldmVsKQogewogCXN0cnVjdCBsb2NvbW8gKmxjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGxvY29tb19zYXZlX2RhdGEgKnNhdmU7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vc2Nvb3AuYyBiL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jCmluZGV4IGQzYTA0YzIuLjllNTI0NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jCkBAIC0yNiw2ICsyNiw4IEBACiBzdHJ1Y3QgIHNjb29wX2RldiB7CiAJdm9pZCAgKmJhc2U7CiAJc3BpbmxvY2tfdCBzY29vcF9sb2NrOworCXVuc2lnbmVkIHNob3J0IHN1c3BlbmRfY2xyOworCXVuc2lnbmVkIHNob3J0IHN1c3BlbmRfc2V0OwogCXUzMiBzY29vcF9ncHdyOwogfTsKIApAQCAtOTAsMTQgKzkyLDI0IEBACiBFWFBPUlRfU1lNQk9MKHJlYWRfc2Nvb3BfcmVnKTsKIEVYUE9SVF9TWU1CT0wod3JpdGVfc2Nvb3BfcmVnKTsKIAorc3RhdGljIHZvaWQgY2hlY2tfc2Nvb3BfcmVnKHN0cnVjdCBzY29vcF9kZXYgKnNkZXYpCit7CisJdW5zaWduZWQgc2hvcnQgbWNyOworCisJbWNyID0gU0NPT1BfUkVHKHNkZXYtPmJhc2UsIFNDT09QX01DUik7CisJaWYgKChtY3IgJiAweDEwMCkgPT0gMCkKKwkJU0NPT1BfUkVHKHNkZXYtPmJhc2UsIFNDT09QX01DUikgPSAweDAxMDE7Cit9CisKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgc2Nvb3Bfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSwgdWludDMyX3QgbGV2ZWwpCiB7CiAJaWYgKGxldmVsID09IFNVU1BFTkRfUE9XRVJfRE9XTikgewogCQlzdHJ1Y3Qgc2Nvb3BfZGV2ICpzZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQkJc2Rldi0+c2Nvb3BfZ3B3ciA9IFNDT09QX1JFRyhzZGV2LT5iYXNlLFNDT09QX0dQV1IpOwotCQlTQ09PUF9SRUcoc2Rldi0+YmFzZSxTQ09PUF9HUFdSKSA9IDA7CisJCWNoZWNrX3Njb29wX3JlZyhzZGV2KTsKKyAgCQlzZGV2LT5zY29vcF9ncHdyID0gU0NPT1BfUkVHKHNkZXYtPmJhc2UsIFNDT09QX0dQV1IpOworCQlTQ09PUF9SRUcoc2Rldi0+YmFzZSwgU0NPT1BfR1BXUikgPSAoc2Rldi0+c2Nvb3BfZ3B3ciAmIH5zZGV2LT5zdXNwZW5kX2NscikgfCBzZGV2LT5zdXNwZW5kX3NldDsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xMDcsNiArMTE5LDcgQEAKIAlpZiAobGV2ZWwgPT0gUkVTVU1FX1BPV0VSX09OKSB7CiAJCXN0cnVjdCBzY29vcF9kZXYgKnNkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAorCQljaGVja19zY29vcF9yZWcoc2Rldik7CiAJCVNDT09QX1JFRyhzZGV2LT5iYXNlLFNDT09QX0dQV1IpID0gc2Rldi0+c2Nvb3BfZ3B3cjsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xNTEsNiArMTY0LDkgQEAKIAlTQ09PUF9SRUcoZGV2cHRyLT5iYXNlLCBTQ09PUF9HUENSKSA9IGluZi0+aW9fZGlyICYgMHhmZmZmOwogCVNDT09QX1JFRyhkZXZwdHItPmJhc2UsIFNDT09QX0dQV1IpID0gaW5mLT5pb19vdXQgJiAweGZmZmY7CiAKKwlkZXZwdHItPnN1c3BlbmRfY2xyID0gaW5mLT5zdXNwZW5kX2NscjsKKwlkZXZwdHItPnN1c3BlbmRfc2V0ID0gaW5mLT5zdXNwZW5kX3NldDsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NvbGxpZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NvbGxpZV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBkZmUwNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29sbGllX2RlZmNvbmZpZwpAQCAtMCwwICsxLDg4OCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE0LXJjMworIyBTdW4gT2N0ICA5IDE2OjU1OjE0IDIwMDUKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorIyBDT05GSUdfQ0xFQU5fQ09NUElMRSBpcyBub3Qgc2V0CitDT05GSUdfQlJPS0VOPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CitDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CitDT05GSUdfTU9EVkVSU0lPTlM9eQorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NBMTEwMD15CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisKKyMKKyMgU0ExMXgwIEltcGxlbWVudGF0aW9ucworIworIyBDT05GSUdfU0ExMTAwX0FTU0FCRVQgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0NFUkYgaXMgbm90IHNldAorQ09ORklHX1NBMTEwMF9DT0xMSUU9eQorIyBDT05GSUdfU0ExMTAwX0gzMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9IMzYwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfSDM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX0JBREdFNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfSk9STkFEQTcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfSEFDS0tJVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfTEFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfUExFQiBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfU0hBTk5PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfU0lNUEFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBMTEwMF9TU1AgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfU0ExMTAwPXkKK0NPTkZJR19DUFVfMzJ2ND15CitDT05GSUdfQ1BVX0FCUlRfRVY0PXkKK0NPTkZJR19DUFVfQ0FDSEVfVjRXQj15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9UTEJfVjRXQj15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfU0hBUlBfTE9DT01PPXkKK0NPTkZJR19TSEFSUF9QQVJBTT15CitDT05GSUdfU0hBUlBfU0NPT1A9eQorCisjCisjIEJ1cyBzdXBwb3J0CisjCitDT05GSUdfSVNBPXkKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVD15CisjIENPTkZJR19OT19JRExFX0haIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEU9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUw9eQorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRElTQ09OVElHTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUz15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFMgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAsMTE1MjAwbjggY29uc29sZT10dHkxIG5vaW5pdHJkIHJvb3Q9L2Rldi9tdGRibG9jazIgcm9vdGZzdHlwZT1qZmZzMiAgIGRlYnVnIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX0FPVVQ9bQorQ09ORklHX0JJTkZNVF9NSVNDPW0KKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorQ09ORklHX0FQTT15CisKKyMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19CSUM9eQorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorCisjCisjIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9bQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCisjIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFM9eQorIyBDT05GSUdfTVREX0FNRFNURCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1NIQVJQPXkKKyMgQ09ORklHX01URF9KRURFQyBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorCisjCisjIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworIyBDT05GSUdfUE5QIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX1hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMDI0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0FUQV9PVkVSX0VUSD1tCisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfTkVUREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX1RTREVWPXkKK0NPTkZJR19JTlBVVF9UU0RFVl9TQ1JFRU5fWD0yNDAKK0NPTkZJR19JTlBVVF9UU0RFVl9TQ1JFRU5fWT0zMjAKK0NPTkZJR19JTlBVVF9FVkRFVj15CitDT05GSUdfSU5QVVRfRVZCVUc9eQorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9MT0NPTU89eQorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKKyMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TQTExMDA9eQorQ09ORklHX1NFUklBTF9TQTExMDBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworCisjCisjIEkyQyBzdXBwb3J0CisjCitDT05GSUdfSTJDPW0KKyMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKKworIworIyBJMkMgQWxnb3JpdGhtcworIworQ09ORklHX0kyQ19BTEdPQklUPW0KKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19FTEVLVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjCitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BU0IxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19NQ1BfU0ExMVgwIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKK0NPTkZJR19WSURFT19ERVY9bQorCisjCisjIFZpZGVvIEZvciBMaW51eAorIworCisjCisjIFZpZGVvIEFkYXB0ZXJzCisjCisjIENPTkZJR19WSURFT19QTVMgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQ1BJQSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE1MjQ2QSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE1MjQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTkVSXzMwMzYgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1ZDQU1DSElQIGlzIG5vdCBzZXQKKworIworIyBSYWRpbyBBZGFwdGVycworIworIyBDT05GSUdfUkFESU9fQ0FERVQgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fUlRSQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX1JUUkFDSzIgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fQVpURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX0dFTVRFSyBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19NQUVTVFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX1NGMTZGTUkgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fU0YxNkZNUjIgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fVEVSUkFURUMgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fVFJVU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fVFlQSE9PTiBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19aT0xUUklYIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19GQj15CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorQ09ORklHX0ZCX1NPRlRfQ1VSU09SPXkKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TQTExMDA9eQorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19NREFfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CitDT05GSUdfRk9OVFM9eQorQ09ORklHX0ZPTlRfOHg4PXkKKyMgQ09ORklHX0ZPTlRfOHgxNiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfTUlOSV80eDYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0CisKKyMKKyMgTG9nbyBjb25maWd1cmF0aW9uCisjCisjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKK0NPTkZJR19VU0JfR0FER0VUPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkJEIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CitDT05GSUdfUk9NRlNfRlM9eQorQ09ORklHX0lOT1RJRlk9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKyMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCisjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iY3A0MzciCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPW0KKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD1tCisKKyMKKyMgUHJvZmlsaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19QUkVFTVBUPXkKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV0FJVFEgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0VSUk9SUz15CisjIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCisjCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY29yZ2lfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jb3JnaV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ5ODdjOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29yZ2lfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTUyMyBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE0LXJjMworIyBTdW4gT2N0ICA5IDE1OjQ2OjQyIDIwMDUKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0NMRUFOX0NPTVBJTEU9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU0hNRU09eQorQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCitDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKK0NPTkZJR19DQ19BTElHTl9MT09QUz0wCitDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9QWEE9eQorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorCisjCisjIEludGVsIFBYQTJ4eCBJbXBsZW1lbnRhdGlvbnMKKyMKKyMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01BSU5TVE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9JRFAgaXMgbm90IHNldAorQ09ORklHX1BYQV9TSEFSUFNMPXkKK0NPTkZJR19QWEFfU0hBUlBTTF8yNXg9eQorIyBDT05GSUdfUFhBX1NIQVJQU0xfMjd4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfUE9PRExFIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX0NPUkdJPXkKK0NPTkZJR19NQUNIX1NIRVBIRVJEPXkKK0NPTkZJR19NQUNIX0hVU0tZPXkKK0NPTkZJR19QWEEyNXg9eQorQ09ORklHX1BYQV9TSEFSUF9DN3h4PXkKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX1hTQ0FMRT15CitDT05GSUdfQ1BVXzMydjU9eQorQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorQ09ORklHX1hTQ0FMRV9QTVU9eQorQ09ORklHX1NIQVJQX1BBUkFNPXkKK0NPTkZJR19TSEFSUF9TQ09PUD15CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworQ09ORklHX1BDQ0FSRD15CisjIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQT15CitDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKK0NPTkZJR19QQ01DSUFfSU9DVEw9eQorCisjCisjIFBDLWNhcmQgYnJpZGdlcworIworQ09ORklHX1BDTUNJQV9QWEEyWFg9eQorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1BSRUVNUFQ9eQorIyBDT05GSUdfTk9fSURMRV9IWiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwxMTUyMDBuOCBjb25zb2xlPXR0eTEgbm9pbml0cmQgcm9vdD0vZGV2L210ZGJsb2NrMiByb290ZnN0eXBlPWpmZnMyICAgZGVidWciCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19CSU5GTVRfQU9VVD1tCitDT05GSUdfQklORk1UX01JU0M9bQorIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CitDT05GSUdfQVBNPXkKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9bQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQklDPXkKKworIworIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorQ09ORklHX0lQVjY9bQorIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9BSD1tCitDT05GSUdfSU5FVDZfRVNQPW0KK0NPTkZJR19JTkVUNl9JUENPTVA9bQorQ09ORklHX0lORVQ2X1RVTk5FTD1tCitDT05GSUdfSVBWNl9UVU5ORUw9bQorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0lQX05GX0NPTk5UUkFDSz1tCisjIENPTkZJR19JUF9ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19FVkVOVFMgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFA9bQorQ09ORklHX0lQX05GX0ZUUD1tCitDT05GSUdfSVBfTkZfSVJDPW0KKyMgQ09ORklHX0lQX05GX05FVEJJT1NfTlMgaXMgbm90IHNldAorQ09ORklHX0lQX05GX1RGVFA9bQorQ09ORklHX0lQX05GX0FNQU5EQT1tCisjIENPTkZJR19JUF9ORl9QUFRQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9RVUVVRT1tCitDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQX05GX01BVENIX0xJTUlUPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NQUM9bQorQ09ORklHX0lQX05GX01BVENIX1BLVFRZUEU9bQorQ09ORklHX0lQX05GX01BVENIX01BUks9bQorQ09ORklHX0lQX05GX01BVENIX01VTFRJUE9SVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQorQ09ORklHX0lQX05GX01BVENIX0VDTj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRFNDUD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUhfRVNQPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9MRU5HVEg9bQorQ09ORklHX0lQX05GX01BVENIX1RUTD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVENQTVNTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9IRUxQRVI9bQorQ09ORklHX0lQX05GX01BVENIX1NUQVRFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9DT05OVFJBQ0s9bQorQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUkVBTE09bQorQ09ORklHX0lQX05GX01BVENIX1NDVFA9bQorIyBDT05GSUdfSVBfTkZfTUFUQ0hfRENDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfTUFUQ0hfQ09NTUVOVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KKyMgQ09ORklHX0lQX05GX01BVENIX1NUUklORyBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfRklMVEVSPW0KKyMgQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1QgaXMgbm90IHNldAorQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVENQTVNTPW0KKyMgQ09ORklHX0lQX05GX1RBUkdFVF9ORlFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9OQVQ9bQorQ09ORklHX0lQX05GX05BVF9ORUVERUQ9eQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfVEFSR0VUX1NBTUUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTkFUX1NOTVBfQkFTSUMgaXMgbm90IHNldAorQ09ORklHX0lQX05GX05BVF9JUkM9bQorQ09ORklHX0lQX05GX05BVF9GVFA9bQorQ09ORklHX0lQX05GX05BVF9URlRQPW0KK0NPTkZJR19JUF9ORl9OQVRfQU1BTkRBPW0KK0NPTkZJR19JUF9ORl9NQU5HTEU9bQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX1RPUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1RBUkdFVF9EU0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1RBUkdFVF9NQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1RBUkdFVF9DTEFTU0lGWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9UQVJHRVRfVFRMIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9SQVc9bQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX05PVFJBQ0sgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KK0NPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KKworIworIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworQ09ORklHX0lQNl9ORl9RVUVVRT1tCitDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTElNSVQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NQUM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9SVD1tCitDT05GSUdfSVA2X05GX01BVENIX09QVFM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSEw9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9PV05FUj1tCitDT05GSUdfSVA2X05GX01BVENIX01BUks9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfQUhFU1A9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9MRU5HVEg9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCitDT05GSUdfSVA2X05GX0ZJTFRFUj1tCisjIENPTkZJR19JUDZfTkZfVEFSR0VUX0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDZfTkZfVEFSR0VUX05GUVVFVUUgaXMgbm90IHNldAorQ09ORklHX0lQNl9ORl9NQU5HTEU9bQorIyBDT05GSUdfSVA2X05GX1RBUkdFVF9NQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQNl9ORl9UQVJHRVRfSEwgaXMgbm90IHNldAorQ09ORklHX0lQNl9ORl9SQVc9bQorCisjCisjIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfUk9VVEU9eQorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CitDT05GSUdfSVJEQT1tCisKKyMKKyMgSXJEQSBwcm90b2NvbHMKKyMKK0NPTkZJR19JUkxBTj1tCitDT05GSUdfSVJORVQ9bQorQ09ORklHX0lSQ09NTT1tCisjIENPTkZJR19JUkRBX1VMVFJBIGlzIG5vdCBzZXQKKworIworIyBJckRBIG9wdGlvbnMKKyMKKyMgQ09ORklHX0lSREFfQ0FDSEVfTEFTVF9MU0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREFfRkFTVF9SUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBJbmZyYXJlZC1wb3J0IGRldmljZSBkcml2ZXJzCisjCisKKyMKKyMgU0lSIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19JUlRUWV9TSVIgaXMgbm90IHNldAorCisjCisjIERvbmdsZSBzdXBwb3J0CisjCisKKyMKKyMgT2xkIFNJUiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfSVJQT1JUX1NJUiBpcyBub3Qgc2V0CisKKyMKKyMgT2xkIFNlcmlhbCBkb25nbGUgc3VwcG9ydAorIworCisjCisjIEZJUiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfVVNCX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfU0lHTUFURUxfRklSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TQ19GSVIgaXMgbm90IHNldAorIyBDT05GSUdfV0lOQk9ORF9GSVIgaXMgbm90IHNldAorIyBDT05GSUdfU01DX0lSQ0NfRklSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FMSV9GSVIgaXMgbm90IHNldAorIyBDT05GSUdfVklBX0ZJUiBpcyBub3Qgc2V0CitDT05GSUdfQlQ9bQorQ09ORklHX0JUX0wyQ0FQPW0KK0NPTkZJR19CVF9TQ089bQorQ09ORklHX0JUX1JGQ09NTT1tCitDT05GSUdfQlRfUkZDT01NX1RUWT15CitDT05GSUdfQlRfQk5FUD1tCitDT05GSUdfQlRfQk5FUF9NQ19GSUxURVI9eQorQ09ORklHX0JUX0JORVBfUFJPVE9fRklMVEVSPXkKK0NPTkZJR19CVF9ISURQPW0KKworIworIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19CVF9IQ0lVU0I9bQorIyBDT05GSUdfQlRfSENJVVNCX1NDTyBpcyBub3Qgc2V0CitDT05GSUdfQlRfSENJVUFSVD1tCitDT05GSUdfQlRfSENJVUFSVF9IND15CitDT05GSUdfQlRfSENJVUFSVF9CQ1NQPXkKK0NPTkZJR19CVF9IQ0lVQVJUX0JDU1BfVFhDUkM9eQorQ09ORklHX0JUX0hDSUJDTTIwM1g9bQorQ09ORklHX0JUX0hDSUJQQTEwWD1tCitDT05GSUdfQlRfSENJQkZVU0I9bQorQ09ORklHX0JUX0hDSURUTDE9bQorQ09ORklHX0JUX0hDSUJUM0M9bQorQ09ORklHX0JUX0hDSUJMVUVDQVJEPW0KK0NPTkZJR19CVF9IQ0lCVFVBUlQ9bQorQ09ORklHX0JUX0hDSVZIQ0k9bQorQ09ORklHX0lFRUU4MDIxMT1tCisjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQorIyBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVAgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCisjIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorQ09ORklHX01URF9ST009eQorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKK0NPTkZJR19NVERfU0hBUlBfU0w9eQorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorCisjCisjIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19NVERfTkFORD15CitDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFPXkKKyMgQ09ORklHX01URF9OQU5EX0gxOTAwIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfU0hBUlBTTD15CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCitDT05GSUdfSURFPXkKK0NPTkZJR19CTEtfREVWX0lERT15CisKKyMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURJU0s9eQorIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERUNTPXkKKyMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CisKKyMKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcworIworQ09ORklHX0lERV9HRU5FUklDPXkKKyMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAorIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST1tCitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9bQorQ09ORklHX0NIUl9ERVZfU1Q9bQorQ09ORklHX0NIUl9ERVZfT1NTVD1tCitDT05GSUdfQkxLX0RFVl9TUj1tCisjIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0CitDT05GSUdfQ0hSX0RFVl9TRz1tCisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCitDT05GSUdfU0NTSV9NVUxUSV9MVU49eQorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAorCisjCisjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBQQ01DSUEgU0NTSSBhZGFwdGVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDTUNJQV9BSEExNTJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9GRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9OSU5KQV9TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9RTE9HSUMgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1NZTTUzQzUwMCBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorCisjCisjIFBIWSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST1tCisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworQ09ORklHX05FVF9SQURJTz15CisKKyMKKyMgT2Jzb2xldGUgV2lyZWxlc3MgY2FyZHMgc3VwcG9ydCAocHJlLTgwMi4xMSkKKyMKKyMgQ09ORklHX1NUUklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9XQVZFTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9ORVRXQVZFIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyA4MDIuMTEgRnJlcXVlbmN5IEhvcHBpbmcgY2FyZHMgc3VwcG9ydAorIworIyBDT05GSUdfUENNQ0lBX1JBWUNTIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyA4MDIuMTFiIElTQS9QQ0kgY2FyZHMgc3VwcG9ydAorIworQ09ORklHX0hFUk1FUz1tCisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgODAyLjExYiBQY21jaWEvQ2FyZGJ1cyBjYXJkcyBzdXBwb3J0CisjCitDT05GSUdfUENNQ0lBX0hFUk1FUz1tCitDT05GSUdfUENNQ0lBX1NQRUNUUlVNPW0KKyMgQ09ORklHX0FJUk9fQ1MgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1dMMzUwMSBpcyBub3Qgc2V0CitDT05GSUdfSE9TVEFQPW0KK0NPTkZJR19IT1NUQVBfRklSTVdBUkU9eQorQ09ORklHX0hPU1RBUF9DUz1tCitDT05GSUdfTkVUX1dJUkVMRVNTPXkKKworIworIyBQQ01DSUEgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX05FVF9QQ01DSUE9eQorIyBDT05GSUdfUENNQ0lBXzNDNTg5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV8zQzU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfRk1WSjE4WCBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBX1BDTkVUPW0KKyMgQ09ORklHX1BDTUNJQV9OTUNMQU4gaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1NNQzkxQzkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9YSVJDMlBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9BWE5FVCBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CitDT05GSUdfUFBQPW0KKyMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0FTWU5DPW0KKyMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfREVGTEFURSBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0JTRENPTVA9bQorIyBDT05GSUdfUFBQT0UgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorQ09ORklHX0tFWUJPQVJEX0NPUkdJPXkKK0NPTkZJR19LRVlCT0FSRF9TUElUWj15CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQorQ09ORklHX1RPVUNIU0NSRUVOX0NPUkdJPXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01JU0M9eQorQ09ORklHX0lOUFVUX1VJTlBVVD1tCisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9bQorQ09ORklHX1NFUklBTF84MjUwX0NTPW0KK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9QWEE9eQorQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisKKyMKKyMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworCisjCisjIEkyQyBzdXBwb3J0CisjCitDT05GSUdfSTJDPXkKKyMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKKworIworIyBJMkMgQWxnb3JpdGhtcworIworQ09ORklHX0kyQ19BTEdPQklUPXkKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKK0NPTkZJR19JMkNfUFhBPXkKKyMgQ09ORklHX0kyQ19QWEFfU0xBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKKyMKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKK0NPTkZJR19WSURFT19ERVY9bQorCisjCisjIFZpZGVvIEZvciBMaW51eAorIworCisjCisjIFZpZGVvIEFkYXB0ZXJzCisjCisjIENPTkZJR19WSURFT19DUElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDkgaXMgbm90IHNldAorIyBDT05GSUdfVFVORVJfMzAzNiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVkNBTUNISVAgaXMgbm90IHNldAorCisjCisjIFJhZGlvIEFkYXB0ZXJzCisjCisjIENPTkZJR19SQURJT19NQUVTVFJPIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19GQj15CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorQ09ORklHX0ZCX1NPRlRfQ1VSU09SPXkKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUFhBIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9XMTAwPXkKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorQ09ORklHX0ZPTlRTPXkKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKKyMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9NSU5JXzR4NiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKKworIworIyBMb2dvIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CitDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15CitDT05GSUdfQkFDS0xJR0hUX0RFVklDRT15CisjIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfQ09SR0k9eQorCisjCisjIFNvdW5kCisjCitDT05GSUdfU09VTkQ9eQorCisjCisjIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQorIworIyBDT05GSUdfU05EIGlzIG5vdCBzZXQKKworIworIyBPcGVuIFNvdW5kIFN5c3RlbQorIworQ09ORklHX1NPVU5EX1BSSU1FPXkKKyMgQ09ORklHX1NPVU5EX01TTkRDTEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX01TTkRQSU4gaXMgbm90IHNldAorQ09ORklHX1NPVU5EX09TUz15CisjIENPTkZJR19TT1VORF9UUkFDRUlOSVQgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfRE1BUCBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9BRDE4MTYgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfU0dBTEFYWSBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9BRExJQiBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9BQ0lfTUlYRVIgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfQ1M0MjMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1NTQ0FQRSBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9HVVMgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfVk1JREkgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9NU1MgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfTVBVNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX05NMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX01BRDE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1BBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9QU1MgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfU0IgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfQVdFMzJfU1lOVEggaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfV0FWRUZST05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX01BVUkgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfWU0zODEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX09QTDNTQTEgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfT1BMM1NBMiBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9VQVJUNjg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9BRURTUDE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1RWTUlYRVIgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfQUQxOTgwIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorQ09ORklHX1VTQj1tCisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9TTDgxMV9IQ0Q9bQorQ09ORklHX1VTQl9TTDgxMV9DUz1tCisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19PQlNPTEVURV9PU1NfVVNCX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEJsdWV0b290aCBUVFkgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGRpc2FibGVkIEJsdWV0b290aCBzdWJzeXN0ZW0KKyMKK0NPTkZJR19VU0JfQUNNPW0KK0NPTkZJR19VU0JfUFJJTlRFUj1tCisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD1tCitDT05GSUdfVVNCX0hJRElOUFVUPXkKKyMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycworIworQ09ORklHX1VTQl9LQkQ9bQorQ09ORklHX1VTQl9NT1VTRT1tCitDT05GSUdfVVNCX0FJUFRFSz1tCitDT05GSUdfVVNCX1dBQ09NPW0KKyMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9LQlRBQj1tCitDT05GSUdfVVNCX1BPV0VSTUFURT1tCitDT05GSUdfVVNCX01UT1VDSD1tCisjIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAorQ09ORklHX1VTQl9FR0FMQVg9bQorIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAorQ09ORklHX1VTQl9YUEFEPW0KK0NPTkZJR19VU0JfQVRJX1JFTU9URT1tCisjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKK0NPTkZJR19VU0JfTURDODAwPW0KK0NPTkZJR19VU0JfTUlDUk9URUs9bQorCisjCisjIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKKyMKK0NPTkZJR19VU0JfREFCVVNCPW0KK0NPTkZJR19VU0JfVklDQU09bQorQ09ORklHX1VTQl9EU0JSPW0KK0NPTkZJR19VU0JfSUJNQ0FNPW0KK0NPTkZJR19VU0JfS09OSUNBV0M9bQorQ09ORklHX1VTQl9PVjUxMT1tCitDT05GSUdfVVNCX1NFNDAxPW0KK0NPTkZJR19VU0JfU045QzEwMj1tCitDT05GSUdfVVNCX1NUVjY4MD1tCisjIENPTkZJR19VU0JfUFdDIGlzIG5vdCBzZXQKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworQ09ORklHX1VTQl9DQVRDPW0KK0NPTkZJR19VU0JfS0FXRVRIPW0KK0NPTkZJR19VU0JfUEVHQVNVUz1tCitDT05GSUdfVVNCX1JUTDgxNTA9bQorQ09ORklHX1VTQl9VU0JORVQ9bQorQ09ORklHX1VTQl9ORVRfQVg4ODE3WD1tCitDT05GSUdfVVNCX05FVF9DRENFVEhFUj1tCisjIENPTkZJR19VU0JfTkVUX0dMNjIwQSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX05FVF9ORVQxMDgwPW0KKyMgQ09ORklHX1VTQl9ORVRfUExVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9STkRJU19IT1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX05FVF9aQVVSVVM9bQorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworCisjCisjIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfU0VSSUFMPW0KK0NPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUM9eQorIyBDT05GSUdfVVNCX1NFUklBTF9BSVJQUklNRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NFUklBTF9CRUxLSU49bQorIyBDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQgaXMgbm90IHNldAorQ09ORklHX1VTQl9TRVJJQUxfRElHSV9BQ0NFTEVQT1JUPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTAxIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTg9bQorQ09ORklHX1VTQl9TRVJJQUxfRU1QRUc9bQorQ09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU89bQorQ09ORklHX1VTQl9TRVJJQUxfVklTT1I9bQorQ09ORklHX1VTQl9TRVJJQUxfSVBBUT1tCitDT05GSUdfVVNCX1NFUklBTF9JUj1tCitDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVD1tCitDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9UST1tCitDT05GSUdfVVNCX1NFUklBTF9HQVJNSU49bQorQ09ORklHX1VTQl9TRVJJQUxfSVBXPW0KK0NPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBPW0KK0NPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU49bQorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX01QUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjhYQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjhYQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE4WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTlXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOVFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOVFJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0E0OVcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTQ5V0xDIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU0VSSUFMX0tMU0k9bQorQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUPW0KK0NPTkZJR19VU0JfU0VSSUFMX01DVF9VMjMyPW0KK0NPTkZJR19VU0JfU0VSSUFMX1BMMjMwMz1tCisjIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAorQ09ORklHX1VTQl9TRVJJQUxfU0FGRT1tCisjIENPTkZJR19VU0JfU0VSSUFMX1NBRkVfUEFEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU0VSSUFMX1RJPW0KK0NPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSz1tCitDT05GSUdfVVNCX1NFUklBTF9YSVJDT009bQorQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVD1tCitDT05GSUdfVVNCX0VaVVNCPXkKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCitDT05GSUdfVVNCX0VNSTYyPW0KK0NPTkZJR19VU0JfRU1JMjY9bQorQ09ORklHX1VTQl9BVUVSU1dBTEQ9bQorQ09ORklHX1VTQl9SSU81MDA9bQorQ09ORklHX1VTQl9MRUdPVE9XRVI9bQorQ09ORklHX1VTQl9MQ0Q9bQorQ09ORklHX1VTQl9MRUQ9bQorQ09ORklHX1VTQl9DWVRIRVJNPW0KK0NPTkZJR19VU0JfUEhJREdFVEtJVD1tCitDT05GSUdfVVNCX1BISURHRVRTRVJWTz1tCitDT05GSUdfVVNCX0lETU9VU0U9bQorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKworIworIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKKyMKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKK0NPTkZJR19VU0JfR0FER0VUPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1BYQTJYWD15CitDT05GSUdfVVNCX1BYQTJYWD15CisjIENPTkZJR19VU0JfUFhBMlhYX1NNQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfWkVSTz1tCitDT05GSUdfVVNCX0VUSD1tCitDT05GSUdfVVNCX0VUSF9STkRJUz15CitDT05GSUdfVVNCX0dBREdFVEZTPW0KK0NPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dfU0VSSUFMPW0KKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCitDT05GSUdfTU1DPXkKKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTU1DX0JMT0NLPXkKK0NPTkZJR19NTUNfUFhBPXkKKyMgQ09ORklHX01NQ19XQlNEIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KQkQgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRlk9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKyMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorQ09ORklHX0pGRlMyX1JVQklOPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz1tCisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz1tCitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9bQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9bQorQ09ORklHX1NVTlJQQ19HU1M9bQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT1tCisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKK0NPTkZJR19TTUJfRlM9bQorQ09ORklHX1NNQl9OTFNfREVGQVVMVD15CitDT05GSUdfU01CX05MU19SRU1PVEU9ImNwNDM3IgorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJjcDQzNyIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PXkKKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworQ09ORklHX1BST0ZJTElORz15CitDT05GSUdfT1BST0ZJTEU9bQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dBSVRRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19FUlJPUlM9eQorQ09ORklHX0RFQlVHX0xMPXkKKyMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCitDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX05VTEw9bQorQ09ORklHX0NSWVBUT19NRDQ9bQorQ09ORklHX0NSWVBUT19NRDU9bQorQ09ORklHX0NSWVBUT19TSEExPW0KK0NPTkZJR19DUllQVE9fU0hBMjU2PW0KK0NPTkZJR19DUllQVE9fU0hBNTEyPW0KK0NPTkZJR19DUllQVE9fV1A1MTI9bQorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz1tCitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19BRVM9bQorQ09ORklHX0NSWVBUT19DQVNUNT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fQVJDND1tCitDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX1RFU1Q9bQorCisjCisjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCisjCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0NSQ19DQ0lUVD15CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9lbnAyNjExX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZW5wMjYxMV9kZWZjb25maWcKaW5kZXggZjY3Y2EwMS4uMzBlNjQ0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9lbnAyNjExX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2VucDI2MTFfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEzLXJjMgotIyBUaHUgSnVsICA3IDE2OjQxOjIxIDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMworIyBXZWQgU2VwIDE0IDEwOjUxOjUyIDIwMDUKICMKIENPTkZJR19BUk09eQogQ09ORklHX01NVT15CkBAIC0xMzUsNyArMTM1LDYgQEAKICMKICMgS2VybmVsIEZlYXR1cmVzCiAjCi0jIENPTkZJR19TTVAgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiAjIENPTkZJR19OT19JRExFX0haIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CkBAIC0xNzksNiArMTc4LDY4IEBACiAjIENPTkZJR19QTSBpcyBub3Qgc2V0CiAKICMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVENQRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0JJQz15CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorCisjCiAjIERldmljZSBEcml2ZXJzCiAjCiAKQEAgLTI0OCw2ICszMDksNyBAQAogQ09ORklHX01URF9JWFAyMDAwPXkKICMgQ09ORklHX01URF9FREI3MzEyIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCiAjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwpAQCAtMzM0LDcyICszOTYsOCBAQAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIAogIwotIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAogIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15Ci1DT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVENQRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19EVU1NWT15CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKQEAgLTUwOSw2ICs1MDcsOCBAQAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAogCiAjCiAjIElTRE4gc3Vic3lzdGVtCkBAIC02MzUsNyArNjM1LDcgQEAKICMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfSVNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JWFAyMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfSVhQMjAwMD15CiAjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKQEAgLTY0OSwxMSArNjQ5LDI4IEBACiAjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfU0VOU09SPXkKIAogIwotIyBIYXJkd2FyZSBTZW5zb3JzIENoaXAgc3VwcG9ydAorIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLUNPTkZJR19JMkNfU0VOU09SPXkKKyMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0VFUFJPTT15CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIworQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKQEAgLTY3OSwzMCArNjk2LDE1IEBACiAjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAotQ09ORklHX1NFTlNPUlNfRUVQUk9NPXkKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjIGRldmljZXMKQEAgLTc3MCw2ICs3NzIsNyBAQAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CkBAIC04MTIsOCArODE1LDcgQEAKICMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKIENPTkZJR19KRkZTMl9GU19ERUJVRz0wCi0jIENPTkZJR19KRkZTMl9GU19OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX05PUl9FQ0MgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKICMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX1pMSUI9eQogQ09ORklHX0pGRlMyX1JUSU1FPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI0MDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9peGRwMjQwMF9kZWZjb25maWcKaW5kZXggNWM2YzkyOC4uNjc4NzIwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9peGRwMjQwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9peGRwMjQwMF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTMtcmMyCi0jIFRodSBKdWwgIDcgMTY6NDk6MDEgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEzCisjIFdlZCBTZXAgMTQgMTA6NTI6MDEgMjAwNQogIwogQ09ORklHX0FSTT15CiBDT05GSUdfTU1VPXkKQEAgLTEzNiw3ICsxMzYsNiBAQAogIwogIyBLZXJuZWwgRmVhdHVyZXMKICMKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX05PX0lETEVfSFogaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKQEAgLTE4MCw2ICsxNzksNjggQEAKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKIAogIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9UQ1BESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQklDPXkKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisKKyMKICMgRGV2aWNlIERyaXZlcnMKICMKIApAQCAtMjQ5LDYgKzMxMCw3IEBACiBDT05GSUdfTVREX0lYUDIwMDA9eQogIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKICMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCkBAIC0zMzUsNzIgKzM5Nyw4IEBACiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogCiAjCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAorIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKLUNPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9UQ1BESUFHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX0RVTU1ZPXkKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldApAQCAtNTEwLDYgKzUwOCw4IEBACiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CiAKICMKICMgSVNETiBzdWJzeXN0ZW0KQEAgLTYzNiw3ICs2MzYsNyBAQAogIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19JU0EgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lYUDIwMDAgaXMgbm90IHNldAorQ09ORklHX0kyQ19JWFAyMDAwPXkKICMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldApAQCAtNjUwLDExICs2NTAsMjggQEAKICMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAorQ09ORklHX0kyQ19TRU5TT1I9eQogCiAjCi0jIEhhcmR3YXJlIFNlbnNvcnMgQ2hpcCBzdXBwb3J0CisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotQ09ORklHX0kyQ19TRU5TT1I9eQorIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfRUVQUk9NPXkKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjCitDT05GSUdfSFdNT049eQogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldApAQCAtNjgwLDMwICs2OTcsMTUgQEAKICMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19FRVBST009eQotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCiAjIE1pc2MgZGV2aWNlcwpAQCAtNzcxLDYgKzc3Myw3IEBACiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRlk9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKQEAgLTgxMyw4ICs4MTYsNyBAQAogIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQogQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLSMgQ09ORklHX0pGRlMyX0ZTX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfTk9SX0VDQyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQogIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfWkxJQj15CiBDT05GSUdfSkZGUzJfUlRJTUU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9peGRwMjQwMV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2l4ZHAyNDAxX2RlZmNvbmZpZwppbmRleCA2ZGM0MGY2Li4zOGM5YTcyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2l4ZHAyNDAxX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2l4ZHAyNDAxX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMy1yYzIKLSMgVGh1IEp1bCAgNyAxNjo0OTowOCAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTMKKyMgV2VkIFNlcCAxNCAxMDo1MjoxMCAyMDA1CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19NTVU9eQpAQCAtMTM2LDcgKzEzNiw2IEBACiAjCiAjIEtlcm5lbCBGZWF0dXJlcwogIwotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogIyBDT05GSUdfTk9fSURMRV9IWiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldApAQCAtMTgwLDYgKzE3OSw2OCBAQAogIyBDT05GSUdfUE0gaXMgbm90IHNldAogCiAjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9UQ1BESUFHPXkKKyMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQklDPXkKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisKKyMKICMgRGV2aWNlIERyaXZlcnMKICMKIApAQCAtMjQ5LDYgKzMxMCw3IEBACiBDT05GSUdfTVREX0lYUDIwMDA9eQogIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKICMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCkBAIC0zMzUsNzIgKzM5Nyw4IEBACiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogCiAjCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAorIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKLUNPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfVENQRElBRz15Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19EVU1NWT15CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKQEAgLTUxMSw2ICs1MDksOCBAQAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAogCiAjCiAjIElTRE4gc3Vic3lzdGVtCkBAIC02MzcsNyArNjM3LDcgQEAKICMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfSVNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JWFAyMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfSVhQMjAwMD15CiAjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKQEAgLTY1MSwxMSArNjUxLDI4IEBACiAjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfU0VOU09SPXkKIAogIwotIyBIYXJkd2FyZSBTZW5zb3JzIENoaXAgc3VwcG9ydAorIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLUNPTkZJR19JMkNfU0VOU09SPXkKKyMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0VFUFJPTT15CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIworQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKQEAgLTY4MSwzMCArNjk4LDE1IEBACiAjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAotQ09ORklHX1NFTlNPUlNfRUVQUk9NPXkKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjIGRldmljZXMKQEAgLTc3Miw2ICs3NzQsNyBAQAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CkBAIC04MTQsOCArODE3LDcgQEAKICMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKIENPTkZJR19KRkZTMl9GU19ERUJVRz0wCi0jIENPTkZJR19KRkZTMl9GU19OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX05PUl9FQ0MgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKICMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX1pMSUI9eQogQ09ORklHX0pGRlMyX1JUSU1FPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI4MDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9peGRwMjgwMF9kZWZjb25maWcKaW5kZXggZDJiYjBiNy4uMjYxZTIzNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9peGRwMjgwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9peGRwMjgwMF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTMtcmMyCi0jIFRodSBKdWwgIDcgMTY6NDk6MjAgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEzCisjIFdlZCBTZXAgMTQgMTA6NTI6MjMgMjAwNQogIwogQ09ORklHX0FSTT15CiBDT05GSUdfTU1VPXkKQEAgLTEzNiw3ICsxMzYsNiBAQAogIwogIyBLZXJuZWwgRmVhdHVyZXMKICMKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX05PX0lETEVfSFogaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKQEAgLTE4MCw2ICsxNzksNjggQEAKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKIAogIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9UQ1BESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQklDPXkKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisKKyMKICMgRGV2aWNlIERyaXZlcnMKICMKIApAQCAtMjQ5LDYgKzMxMCw3IEBACiBDT05GSUdfTVREX0lYUDIwMDA9eQogIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKICMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCkBAIC0zMzUsNzIgKzM5Nyw4IEBACiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogCiAjCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAorIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKLUNPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9UQ1BESUFHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX0RVTU1ZPXkKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldApAQCAtNTEwLDYgKzUwOCw4IEBACiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CiAKICMKICMgSVNETiBzdWJzeXN0ZW0KQEAgLTYzNiw3ICs2MzYsNyBAQAogIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19JU0EgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lYUDIwMDAgaXMgbm90IHNldAorQ09ORklHX0kyQ19JWFAyMDAwPXkKICMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldApAQCAtNjUwLDExICs2NTAsMjggQEAKICMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAorQ09ORklHX0kyQ19TRU5TT1I9eQogCiAjCi0jIEhhcmR3YXJlIFNlbnNvcnMgQ2hpcCBzdXBwb3J0CisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotQ09ORklHX0kyQ19TRU5TT1I9eQorIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfRUVQUk9NPXkKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjCitDT05GSUdfSFdNT049eQogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldApAQCAtNjgwLDMwICs2OTcsMTUgQEAKICMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19FRVBST009eQotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCiAjIE1pc2MgZGV2aWNlcwpAQCAtNzcxLDYgKzc3Myw3IEBACiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRlk9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKQEAgLTgxMyw4ICs4MTYsNyBAQAogIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQogQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLSMgQ09ORklHX0pGRlMyX0ZTX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfTk9SX0VDQyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQogIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfWkxJQj15CiBDT05GSUdfSkZGUzJfUlRJTUU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9peGRwMjgwMV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2l4ZHAyODAxX2RlZmNvbmZpZwppbmRleCAyZDZmOTYwLi4xMmVmMjNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2l4ZHAyODAxX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2l4ZHAyODAxX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMy1yYzIKLSMgVGh1IEp1bCAgNyAxNjo0OToxMyAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTMKKyMgV2VkIFNlcCAxNCAxMDo1MjoxNiAyMDA1CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19NTVU9eQpAQCAtMTM2LDcgKzEzNiw2IEBACiAjCiAjIEtlcm5lbCBGZWF0dXJlcwogIwotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogIyBDT05GSUdfTk9fSURMRV9IWiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldApAQCAtMTgwLDYgKzE3OSw2OCBAQAogIyBDT05GSUdfUE0gaXMgbm90IHNldAogCiAjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1RDUERJQUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19CSUM9eQorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKworIwogIyBEZXZpY2UgRHJpdmVycwogIwogCkBAIC0yNDksNiArMzEwLDcgQEAKIENPTkZJR19NVERfSVhQMjAwMD15CiAjIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwogIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKQEAgLTMzNSw3MiArMzk3LDggQEAKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiAKICMKLSMgTmV0d29ya2luZyBzdXBwb3J0CisjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfUEFDS0VUX01NQVA9eQotQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLUNPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1RDUERJQUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CiBDT05GSUdfRFVNTVk9eQogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CkBAIC01MTEsNiArNTA5LDggQEAKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAogIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKIAogIwogIyBJU0ROIHN1YnN5c3RlbQpAQCAtNjM3LDcgKzYzNyw3IEBACiAjIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0lTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVhQMjAwMCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0lYUDIwMDA9eQogIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CkBAIC02NTEsMTEgKzY1MSwyOCBAQAogIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0CitDT05GSUdfSTJDX1NFTlNPUj15CiAKICMKLSMgSGFyZHdhcmUgU2Vuc29ycyBDaGlwIHN1cHBvcnQKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi1DT05GSUdfSTJDX1NFTlNPUj15CisjIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19FRVBST009eQorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKKyMKK0NPTkZJR19IV01PTj15CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CkBAIC02ODEsMzAgKzY5OCwxNSBAQAogIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKLUNPTkZJR19TRU5TT1JTX0VFUFJPTT15Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAKICMKICMgTWlzYyBkZXZpY2VzCkBAIC03NzIsNiArNzc0LDcgQEAKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldApAQCAtODE0LDggKzgxNyw3IEBACiAjIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15CiBDT05GSUdfSkZGUzJfRlNfREVCVUc9MAotIyBDT05GSUdfSkZGUzJfRlNfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19OT1JfRUNDIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CiAjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9aTElCPXkKIENPTkZJR19KRkZTMl9SVElNRT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2l4cDR4eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2l4cDR4eF9kZWZjb25maWcKaW5kZXggOTRhYWZlYy4uYzI3OWU0MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9peHA0eHhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhwNHh4X2RlZmNvbmZpZwpAQCAtMSwxNCArMSwxMyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMS1iazIKLSMgU3VuIE1hciAyNyAyMjo1Mzo0MCAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTQtcmMxLWdpdDUKKyMgVHVlIFNlcCAyMCAxNzoyNjoyOCAyMDA1CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19NTVU9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19JT01BUD15CiAKICMKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCkBAIC0xNiwxMSArMTUsMTMgQEAKIENPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKIENPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldApAQCAtMzEsMTAgKzMyLDEzIEBACiAjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKIENPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKQEAgLTgxLDYgKzg1LDcgQEAKICMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVBQT1JUU19CSUdfRU5ESUFOPXkKIAogIwpAQCAtOTAsMTUgKzk1LDE2IEBACiAjCiAjIElYUDR4eCBQbGF0Zm9ybXMKICMKLSMgQ09ORklHX0FSQ0hfQVZJTEEgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQVZJTEE9eQogQ09ORklHX0FSQ0hfQURJX0NPWU9URT15CiBDT05GSUdfQVJDSF9JWERQNDI1PXkKLSMgQ09ORklHX01BQ0hfSVhEUEc0MjUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9JWERQNDY1IGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX0lYRFBHNDI1PXkKK0NPTkZJR19NQUNIX0lYRFA0NjU9eQogQ09ORklHX0FSQ0hfSVhDRFAxMTAwPXkKIENPTkZJR19BUkNIX1BSUE1DMTEwMD15CiBDT05GSUdfQVJDSF9JWERQNFhYPXkKLSMgQ09ORklHX01BQ0hfR1RXWDU3MTUgaXMgbm90IHNldAorQ09ORklHX0NQVV9JWFA0Nlg9eQorQ09ORklHX01BQ0hfR1RXWDU3MTU9eQogCiAjCiAjIElYUDR4eCBPcHRpb25zCkBAIC0xMTQsNyArMTIwLDYgQEAKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKIENPTkZJR19DUFVfQ0FDSEVfVklWVD15CiBDT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX01JTklDQUNIRT15CiAKICMKICMgUHJvY2Vzc29yIEZlYXR1cmVzCkBAIC0xMjcsOSArMTMyLDEwIEBACiAjCiAjIEJ1cyBzdXBwb3J0CiAjCitDT05GSUdfSVNBX0RNQV9BUEk9eQogQ09ORklHX1BDST15CiBDT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKLUNPTkZJR19QQ0lfTkFNRVM9eQorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CkBAIC0xNDAsNiArMTQ2LDE1IEBACiAjIEtlcm5lbCBGZWF0dXJlcwogIwogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19OT19JRExFX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CiAKICMKQEAgLTE3NSw2ICsxOTAsMjQxIEBACiBDT05GSUdfQVBNPXkKIAogIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9bQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15CitDT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKK0NPTkZJR19JUF9ST1VURV9GV01BUks9eQorQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15CisjIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhfQ0FDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorQ09ORklHX05FVF9JUEdSRT1tCitDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVD15CitDT05GSUdfSVBfTVJPVVRFPXkKK0NPTkZJR19JUF9QSU1TTV9WMT15CitDT05GSUdfSVBfUElNU01fVjI9eQorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9UVU5ORUw9bQorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQklDPXkKKworIworIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0lQX1ZTPW0KK0NPTkZJR19JUF9WU19ERUJVRz15CitDT05GSUdfSVBfVlNfVEFCX0JJVFM9MTIKKworIworIyBJUFZTIHRyYW5zcG9ydCBwcm90b2NvbCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0CisjCisjIENPTkZJR19JUF9WU19QUk9UT19UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVlNfUFJPVE9fVURQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1ZTX1BST1RPX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9WU19QUk9UT19BSCBpcyBub3Qgc2V0CisKKyMKKyMgSVBWUyBzY2hlZHVsZXIKKyMKK0NPTkZJR19JUF9WU19SUj1tCitDT05GSUdfSVBfVlNfV1JSPW0KK0NPTkZJR19JUF9WU19MQz1tCitDT05GSUdfSVBfVlNfV0xDPW0KK0NPTkZJR19JUF9WU19MQkxDPW0KK0NPTkZJR19JUF9WU19MQkxDUj1tCitDT05GSUdfSVBfVlNfREg9bQorQ09ORklHX0lQX1ZTX1NIPW0KKyMgQ09ORklHX0lQX1ZTX1NFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9WU19OUSBpcyBub3Qgc2V0CisKKyMKKyMgSVBWUyBhcHBsaWNhdGlvbiBoZWxwZXIKKyMKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0JSSURHRV9ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0lQX05GX0NPTk5UUkFDSz1tCisjIENPTkZJR19JUF9ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfRlRQPW0KK0NPTkZJR19JUF9ORl9JUkM9bQorIyBDT05GSUdfSVBfTkZfTkVUQklPU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9URlRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0FNQU5EQSBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfUVVFVUU9bQorQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9MSU1JVD1tCisjIENPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9NQVRDSF9NQUM9bQorIyBDT05GSUdfSVBfTkZfTUFUQ0hfUEtUVFlQRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfTUFUQ0hfTUFSSz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTVVMVElQT1JUPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UT1M9bQorIyBDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX0VDTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9EU0NQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9NQVRDSF9BSF9FU1A9bQorQ09ORklHX0lQX05GX01BVENIX0xFTkdUSD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UQ1BNU1M9bQorIyBDT05GSUdfSVBfTkZfTUFUQ0hfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9NQVRDSF9TVEFURT1tCisjIENPTkZJR19JUF9ORl9NQVRDSF9DT05OVFJBQ0sgaXMgbm90IHNldAorQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KKyMgQ09ORklHX0lQX05GX01BVENIX1BIWVNERVYgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfUkVBTE0gaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX1NUUklORyBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCitDT05GSUdfSVBfTkZfTkFUPW0KK0NPTkZJR19JUF9ORl9OQVRfTkVFREVEPXkKK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KKyMgQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfVEFSR0VUX1NBTUUgaXMgbm90IHNldAorQ09ORklHX0lQX05GX05BVF9TTk1QX0JBU0lDPW0KK0NPTkZJR19JUF9ORl9OQVRfSVJDPW0KK0NPTkZJR19JUF9ORl9OQVRfRlRQPW0KK0NPTkZJR19JUF9ORl9NQU5HTEU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9UQVJHRVRfRFNDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfVEFSR0VUX01BUks9bQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX0NMQVNTSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1RBUkdFVF9UVEwgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfUkFXIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQorQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCisjIENPTkZJR19JUF9ORl9BUlBfTUFOR0xFIGlzIG5vdCBzZXQKKworIworIyBCcmlkZ2U6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19CUklER0VfTkZfRUJUQUJMRVMgaXMgbm90IHNldAorCisjCisjIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKK0NPTkZJR19BVE09eQorQ09ORklHX0FUTV9DTElQPXkKKyMgQ09ORklHX0FUTV9DTElQX05PX0lDTVAgaXMgbm90IHNldAorQ09ORklHX0FUTV9MQU5FPW0KK0NPTkZJR19BVE1fTVBPQT1tCitDT05GSUdfQVRNX0JSMjY4ND1tCisjIENPTkZJR19BVE1fQlIyNjg0X0lQRklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19CUklER0U9bQorQ09ORklHX1ZMQU5fODAyMVE9bQorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19MTEM9bQorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CitDT05GSUdfSVBYPW0KKyMgQ09ORklHX0lQWF9JTlRFUk4gaXMgbm90IHNldAorQ09ORklHX0FUQUxLPW0KK0NPTkZJR19ERVZfQVBQTEVUQUxLPXkKK0NPTkZJR19JUEREUD1tCitDT05GSUdfSVBERFBfRU5DQVA9eQorQ09ORklHX0lQRERQX0RFQ0FQPXkKK0NPTkZJR19YMjU9bQorQ09ORklHX0xBUEI9bQorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CitDT05GSUdfRUNPTkVUPW0KK0NPTkZJR19FQ09ORVRfQVVOVURQPXkKK0NPTkZJR19FQ09ORVRfTkFUSVZFPXkKK0NPTkZJR19XQU5fUk9VVEVSPW0KK0NPTkZJR19ORVRfU0NIRUQ9eQorQ09ORklHX05FVF9TQ0hfQ0xLX0pJRkZJRVM9eQorIyBDT05GSUdfTkVUX1NDSF9DTEtfR0VUVElNRU9GREFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfQ0xLX0NQVSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1NDSF9DQlE9bQorQ09ORklHX05FVF9TQ0hfSFRCPW0KKyMgQ09ORklHX05FVF9TQ0hfSEZTQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX0FUTSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1NDSF9QUklPPW0KK0NPTkZJR19ORVRfU0NIX1JFRD1tCitDT05GSUdfTkVUX1NDSF9TRlE9bQorQ09ORklHX05FVF9TQ0hfVEVRTD1tCitDT05GSUdfTkVUX1NDSF9UQkY9bQorQ09ORklHX05FVF9TQ0hfR1JFRD1tCitDT05GSUdfTkVUX1NDSF9EU01BUks9bQorIyBDT05GSUdfTkVUX1NDSF9ORVRFTSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1NDSF9JTkdSRVNTPW0KK0NPTkZJR19ORVRfUU9TPXkKK0NPTkZJR19ORVRfRVNUSU1BVE9SPXkKK0NPTkZJR19ORVRfQ0xTPXkKKyMgQ09ORklHX05FVF9DTFNfQkFTSUMgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfVENJTkRFWD1tCitDT05GSUdfTkVUX0NMU19ST1VURTQ9bQorQ09ORklHX05FVF9DTFNfUk9VVEU9eQorQ09ORklHX05FVF9DTFNfRlc9bQorQ09ORklHX05FVF9DTFNfVTMyPW0KKyMgQ09ORklHX0NMU19VMzJfUEVSRiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX0lORCBpcyBub3Qgc2V0CisjIENPTkZJR19DTFNfVTMyX01BUksgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfUlNWUD1tCitDT05GSUdfTkVUX0NMU19SU1ZQNj1tCisjIENPTkZJR19ORVRfRU1BVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfQUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1BPTElDRT15CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCitDT05GSUdfTkVUX1BLVEdFTj1tCisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisKKyMKICMgRGV2aWNlIERyaXZlcnMKICMKIApAQCAtMjQ0LDYgKzQ5NCw3IEBACiBDT05GSUdfTVREX0lYUDRYWD15CiAjIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwogIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKQEAgLTI4Myw3ICs1MzQsNiBAQAogIwogIyBCbG9jayBkZXZpY2VzCiAjCi0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKQEAgLTI5Nyw3ICs1NDcsNiBAQAogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogCiAjCkBAIC0zNTEsNiArNjAwLDcgQEAKIENPTkZJR19CTEtfREVWX0hQVDM2Nj15CiAjIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVz15CkBAIC0zNjksNiArNjE5LDcgQEAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKIAogIwpAQCAtMzc5LDYgKzYzMCw3IEBACiAjCiAjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKICMKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CiAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydApAQCAtMzkxLDIzNSArNjQzLDEzIEBACiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogCiAjCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAorIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9bQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKLUNPTkZJR19ORVRMSU5LX0RFVj1tCi1DT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9NVUxUSUNBU1Q9eQotQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15Ci1DT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKLUNPTkZJR19JUF9ST1VURV9GV01BUks9eQotQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15Ci0jIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhfQ0FDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotQ09ORklHX05FVF9JUEdSRT1tCi1DT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVD15Ci1DT05GSUdfSVBfTVJPVVRFPXkKLUNPTkZJR19JUF9QSU1TTV9WMT15Ci1DT05GSUdfSVBfUElNU01fVjI9eQotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9bQotIyBDT05GSUdfSVBfVENQRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAotCi0jCi0jIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfSVBfVlM9bQotQ09ORklHX0lQX1ZTX0RFQlVHPXkKLUNPTkZJR19JUF9WU19UQUJfQklUUz0xMgotCi0jCi0jIElQVlMgdHJhbnNwb3J0IHByb3RvY29sIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lQX1ZTX1BST1RPX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9WU19QUk9UT19VRFAgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVlNfUFJPVE9fRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTX1BST1RPX0FIIGlzIG5vdCBzZXQKLQotIwotIyBJUFZTIHNjaGVkdWxlcgotIwotQ09ORklHX0lQX1ZTX1JSPW0KLUNPTkZJR19JUF9WU19XUlI9bQotQ09ORklHX0lQX1ZTX0xDPW0KLUNPTkZJR19JUF9WU19XTEM9bQotQ09ORklHX0lQX1ZTX0xCTEM9bQotQ09ORklHX0lQX1ZTX0xCTENSPW0KLUNPTkZJR19JUF9WU19ESD1tCi1DT05GSUdfSVBfVlNfU0g9bQotIyBDT05GSUdfSVBfVlNfU0VEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTX05RIGlzIG5vdCBzZXQKLQotIwotIyBJUFZTIGFwcGxpY2F0aW9uIGhlbHBlcgotIwotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQlJJREdFX05FVEZJTFRFUj15Ci0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfSVBfTkZfQ09OTlRSQUNLPW0KLSMgQ09ORklHX0lQX05GX0NUX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUksgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfRlRQPW0KLUNPTkZJR19JUF9ORl9JUkM9bQotIyBDT05GSUdfSVBfTkZfVEZUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BTUFOREEgaXMgbm90IHNldAotQ09ORklHX0lQX05GX1FVRVVFPW0KLUNPTkZJR19JUF9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTElNSVQ9bQotIyBDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRSBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfTUFUQ0hfTUFDPW0KLSMgQ09ORklHX0lQX05GX01BVENIX1BLVFRZUEUgaXMgbm90IHNldAotQ09ORklHX0lQX05GX01BVENIX01BUks9bQotQ09ORklHX0lQX05GX01BVENIX01VTFRJUE9SVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KLSMgQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9FQ04gaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfTUFUQ0hfRFNDUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfTUFUQ0hfQUhfRVNQPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9MRU5HVEg9bQotQ09ORklHX0lQX05GX01BVENIX1RUTD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfVENQTVNTPW0KLSMgQ09ORklHX0lQX05GX01BVENIX0hFTFBFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfTUFUQ0hfU1RBVEU9bQotIyBDT05GSUdfSVBfTkZfTUFUQ0hfQ09OTlRSQUNLIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCi0jIENPTkZJR19JUF9ORl9NQVRDSF9QSFlTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX1JFQUxNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfTUFUQ0hfQ09NTUVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQgaXMgbm90IHNldAotQ09ORklHX0lQX05GX0ZJTFRFUj1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQotQ09ORklHX0lQX05GX1RBUkdFVF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX05BVD1tCi1DT05GSUdfSVBfTkZfTkFUX05FRURFRD15Ci1DT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQotQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCi0jIENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX1RBUkdFVF9TQU1FIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9OQVRfU05NUF9CQVNJQz1tCi1DT05GSUdfSVBfTkZfTkFUX0lSQz1tCi1DT05GSUdfSVBfTkZfTkFUX0ZUUD1tCi1DT05GSUdfSVBfTkZfTUFOR0xFPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KLSMgQ09ORklHX0lQX05GX1RBUkdFVF9FQ04gaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfVEFSR0VUX0RTQ1AgaXMgbm90IHNldAotQ09ORklHX0lQX05GX1RBUkdFVF9NQVJLPW0KLSMgQ09ORklHX0lQX05GX1RBUkdFVF9DTEFTU0lGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9SQVcgaXMgbm90IHNldAotQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCi1DT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KLSMgQ09ORklHX0lQX05GX0FSUF9NQU5HTEUgaXMgbm90IHNldAotCi0jCi0jIEJyaWRnZTogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRNPXkKLUNPTkZJR19BVE1fQ0xJUD15Ci0jIENPTkZJR19BVE1fQ0xJUF9OT19JQ01QIGlzIG5vdCBzZXQKLUNPTkZJR19BVE1fTEFORT1tCi1DT05GSUdfQVRNX01QT0E9bQotQ09ORklHX0FUTV9CUjI2ODQ9bQotIyBDT05GSUdfQVRNX0JSMjY4NF9JUEZJTFRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJJREdFPW0KLUNPTkZJR19WTEFOXzgwMjFRPW0KLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfTExDPW0KLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotQ09ORklHX0lQWD1tCi0jIENPTkZJR19JUFhfSU5URVJOIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFMSz1tCi1DT05GSUdfREVWX0FQUExFVEFMSz15Ci1DT05GSUdfSVBERFA9bQotQ09ORklHX0lQRERQX0VOQ0FQPXkKLUNPTkZJR19JUEREUF9ERUNBUD15Ci1DT05GSUdfWDI1PW0KLUNPTkZJR19MQVBCPW0KLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotQ09ORklHX0VDT05FVD1tCi1DT05GSUdfRUNPTkVUX0FVTlVEUD15Ci1DT05GSUdfRUNPTkVUX05BVElWRT15Ci1DT05GSUdfV0FOX1JPVVRFUj1tCi0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi1DT05GSUdfTkVUX1NDSEVEPXkKLUNPTkZJR19ORVRfU0NIX0NMS19KSUZGSUVTPXkKLSMgQ09ORklHX05FVF9TQ0hfQ0xLX0dFVFRJTUVPRkRBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIX0NMS19DUFUgaXMgbm90IHNldAotQ09ORklHX05FVF9TQ0hfQ0JRPW0KLUNPTkZJR19ORVRfU0NIX0hUQj1tCi0jIENPTkZJR19ORVRfU0NIX0hGU0MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSF9BVE0gaXMgbm90IHNldAotQ09ORklHX05FVF9TQ0hfUFJJTz1tCi1DT05GSUdfTkVUX1NDSF9SRUQ9bQotQ09ORklHX05FVF9TQ0hfU0ZRPW0KLUNPTkZJR19ORVRfU0NIX1RFUUw9bQotQ09ORklHX05FVF9TQ0hfVEJGPW0KLUNPTkZJR19ORVRfU0NIX0dSRUQ9bQotQ09ORklHX05FVF9TQ0hfRFNNQVJLPW0KLSMgQ09ORklHX05FVF9TQ0hfTkVURU0gaXMgbm90IHNldAotQ09ORklHX05FVF9TQ0hfSU5HUkVTUz1tCi1DT05GSUdfTkVUX1FPUz15Ci1DT05GSUdfTkVUX0VTVElNQVRPUj15Ci1DT05GSUdfTkVUX0NMUz15Ci0jIENPTkZJR19ORVRfQ0xTX0JBU0lDIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1RDSU5ERVg9bQotQ09ORklHX05FVF9DTFNfUk9VVEU0PW0KLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKLUNPTkZJR19ORVRfQ0xTX0ZXPW0KLUNPTkZJR19ORVRfQ0xTX1UzMj1tCi0jIENPTkZJR19DTFNfVTMyX1BFUkYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19JTkQgaXMgbm90IHNldAotIyBDT05GSUdfQ0xTX1UzMl9NQVJLIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JTVlA9bQotQ09ORklHX05FVF9DTFNfUlNWUDY9bQotIyBDT05GSUdfTkVUX0VNQVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX0FDVCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0NMU19QT0xJQ0U9eQotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotQ09ORklHX05FVF9QS1RHRU49bQotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX0RVTU1ZPXkKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhFUlRBUCBpcyBub3Qgc2V0CiAKICMKICMgQVJDbmV0IGRldmljZXMKQEAgLTYyNyw2ICs2NTcsMTEgQEAKICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CiAKICMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorCisjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQogIwogQ09ORklHX05FVF9FVEhFUk5FVD15CkBAIC02MzUsNiArNjcwLDcgQEAKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CiAKICMKICMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKQEAgLTY3MSwxMyArNzA3LDE3IEBACiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCiAjCisjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAKQEAgLTcwMiw2ICs3NDIsNyBAQAogQ09ORklHX0hFUk1FUz15CiAjIENPTkZJR19QTFhfSEVSTUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RNRF9IRVJNRVMgaXMgbm90IHNldAorIyBDT05GSUdfTk9SVEVMX0hFUk1FUyBpcyBub3Qgc2V0CiBDT05GSUdfUENJX0hFUk1FUz15CiAjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CiAKQEAgLTcwOSw2ICs3NTAsNyBAQAogIyBQcmlzbSBHVC9EdWV0dGUgODAyLjExKGEvYi9nKSBQQ0kvQ2FyZGJ1cyBzdXBwb3J0CiAjCiAjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1dJUkVMRVNTPXkKIAogIwpAQCAtNzU4LDYgKzgwMCw4IEBACiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CiAKICMKICMgSVNETiBzdWJzeXN0ZW0KQEAgLTc5NSw3ICs4MzksNiBAQAogIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKIAogIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwpAQCAtODE2LDYgKzg1OSw3IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtODgyLDEyICs5MjYsMTEgQEAKICMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfSU9QM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JU0EgaXMgbm90IHNldAogQ09ORklHX0kyQ19JWFA0WFg9eQogIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAogIyBDT05GSUdfU0N4MjAwX0FDQiBpcyBub3Qgc2V0CkBAIC05MDEsMTQgKzk0NCwzMyBAQAogIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAogCiAjCi0jIEhhcmR3YXJlIFNlbnNvcnMgQ2hpcCBzdXBwb3J0CisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotQ09ORklHX0kyQ19TRU5TT1I9eQorIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfRUVQUk9NPXkKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjCitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BU0IxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0CkBAIC05MjQsMzMgKzk4NiwyOSBAQAogIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VOU09SU19FRVBST009eQotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjIGRldmljZXMKICMKIAogIworIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKKyMKKworIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC05OTQsNiArMTA1Miw3IEBACiBDT05GSUdfRVhUMl9GU19YQVRUUj15CiBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiBDT05GSUdfRVhUM19GU19YQVRUUj15CiBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQpAQCAtMTAwNCwxNyArMTA2MywxNSBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQotCi0jCi0jIFhGUyBzdXBwb3J0Ci0jCiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRlk9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtMTAzNCwxMiArMTA5MSwxMCBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CisjIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC0xMDU0LDggKzExMDksNyBAQAogIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQogQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLSMgQ09ORklHX0pGRlMyX0ZTX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfTk9SX0VDQyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQogIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfWkxJQj15CiBDT05GSUdfSkZGUzJfUlRJTUU9eQpAQCAtMTA3MiwxMiArMTEyNiwxNCBAQAogIwogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldApAQCAtMTA4Niw2ICsxMTQyLDcgQEAKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC0xMTI0LDYgKzExODEsNyBAQAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTE1OCw2ICsxMjE2LDcgQEAKICMgTGlicmFyeSByb3V0aW5lcwogIwogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3Bvb2RsZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3Bvb2RsZV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI4MjI5MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcG9vZGxlX2RlZmNvbmZpZwpAQCAtMCwwICsxLDEwMTUgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNC1yYzMKKyMgU3VuIE9jdCAgOSAxNzowNDoyOSAyMDA1CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DTEVBTl9DT01QSUxFPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CitDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CitDT05GSUdfTU9EVkVSU0lPTlM9eQorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0FNRUxPVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1BYQT15CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisKKyMKKyMgSW50ZWwgUFhBMnh4IEltcGxlbWVudGF0aW9ucworIworIyBDT05GSUdfQVJDSF9MVUJCT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0CitDT05GSUdfUFhBX1NIQVJQU0w9eQorQ09ORklHX1BYQV9TSEFSUFNMXzI1eD15CisjIENPTkZJR19QWEFfU0hBUlBTTF8yN3ggaXMgbm90IHNldAorQ09ORklHX01BQ0hfUE9PRExFPXkKKyMgQ09ORklHX01BQ0hfQ09SR0kgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9TSEVQSEVSRCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0hVU0tZIGlzIG5vdCBzZXQKK0NPTkZJR19QWEEyNXg9eQorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfWFNDQUxFPXkKK0NPTkZJR19DUFVfMzJ2NT15CitDT05GSUdfQ1BVX0FCUlRfRVY1VD15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CitDT05GSUdfWFNDQUxFX1BNVT15CitDT05GSUdfU0hBUlBfTE9DT01PPXkKK0NPTkZJR19TSEFSUF9QQVJBTT15CitDT05GSUdfU0hBUlBfU0NPT1A9eQorCisjCisjIEJ1cyBzdXBwb3J0CisjCitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKK0NPTkZJR19QQ0NBUkQ9eQorIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUE9eQorQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15CitDT05GSUdfUENNQ0lBX0lPQ1RMPXkKKworIworIyBQQy1jYXJkIGJyaWRnZXMKKyMKK0NPTkZJR19QQ01DSUFfUFhBMlhYPXkKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19QUkVFTVBUPXkKKyMgQ09ORklHX05PX0lETEVfSFogaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAsMTE1MjAwbjggY29uc29sZT10dHkxIG5vaW5pdHJkIHJvb3Q9L2Rldi9tdGRibG9jazIgcm9vdGZzdHlwZT1qZmZzMiAgIGRlYnVnIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX0FPVVQ9bQorQ09ORklHX0JJTkZNVF9NSVNDPW0KKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorQ09ORklHX0FQTT15CisKKyMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19CSUM9eQorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorCisjCisjIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCisjIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCitDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQorQ09ORklHX01URF9TSEFSUF9TTD15CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisKKyMKKyMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX01URF9OQU5EPXkKK0NPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEU9eQorIyBDT05GSUdfTVREX05BTkRfSDE5MDAgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9TSEFSUFNMPXkKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCitDT05GSUdfSURFPXkKK0NPTkZJR19CTEtfREVWX0lERT15CisKKyMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURJU0s9eQorIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERUNTPXkKKyMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKKworIworIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCisjCitDT05GSUdfSURFX0dFTkVSSUM9eQorIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKworIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworQ09ORklHX05FVF9SQURJTz15CisKKyMKKyMgT2Jzb2xldGUgV2lyZWxlc3MgY2FyZHMgc3VwcG9ydCAocHJlLTgwMi4xMSkKKyMKKyMgQ09ORklHX1NUUklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9XQVZFTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9ORVRXQVZFIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyA4MDIuMTEgRnJlcXVlbmN5IEhvcHBpbmcgY2FyZHMgc3VwcG9ydAorIworIyBDT05GSUdfUENNQ0lBX1JBWUNTIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyA4MDIuMTFiIElTQS9QQ0kgY2FyZHMgc3VwcG9ydAorIworIyBDT05GSUdfSEVSTUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyA4MDIuMTFiIFBjbWNpYS9DYXJkYnVzIGNhcmRzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0FJUk9fQ1MgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1dMMzUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAorQ09ORklHX05FVF9XSVJFTEVTUz15CisKKyMKKyMgUENNQ0lBIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19ORVRfUENNQ0lBPXkKKyMgQ09ORklHX1BDTUNJQV8zQzU4OSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfM0M1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX0ZNVkoxOFggaXMgbm90IHNldAorQ09ORklHX1BDTUNJQV9QQ05FVD15CisjIENPTkZJR19QQ01DSUFfTk1DTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9TTUM5MUM5MiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfWElSQzJQUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfQVhORVQgaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX1BQUD1tCisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAorQ09ORklHX1BQUF9BU1lOQz1tCisjIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQX0RFRkxBVEUgaXMgbm90IHNldAorQ09ORklHX1BQUF9CU0RDT01QPW0KKyMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9UU0RFVj15CitDT05GSUdfSU5QVVRfVFNERVZfU0NSRUVOX1g9MjQwCitDT05GSUdfSU5QVVRfVFNERVZfU0NSRUVOX1k9MzIwCitDT05GSUdfSU5QVVRfRVZERVY9eQorQ09ORklHX0lOUFVUX0VWQlVHPXkKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfTE9DT01PPXkKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9DT1JHSSBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfU1BJVFo9eQorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9QWEE9eQorQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisKKyMKKyMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworCisjCisjIEkyQyBzdXBwb3J0CisjCitDT05GSUdfSTJDPXkKKyMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKKworIworIyBJMkMgQWxnb3JpdGhtcworIworQ09ORklHX0kyQ19BTEdPQklUPXkKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19QWEEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0RFQlVHX0NPUkU9eQorQ09ORklHX0kyQ19ERUJVR19BTEdPPXkKK0NPTkZJR19JMkNfREVCVUdfQlVTPXkKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKKyMKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKK0NPTkZJR19WSURFT19ERVY9bQorCisjCisjIFZpZGVvIEZvciBMaW51eAorIworCisjCisjIFZpZGVvIEFkYXB0ZXJzCisjCisjIENPTkZJR19WSURFT19DUElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDkgaXMgbm90IHNldAorIyBDT05GSUdfVFVORVJfMzAzNiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVkNBTUNISVAgaXMgbm90IHNldAorCisjCisjIFJhZGlvIEFkYXB0ZXJzCisjCisjIENPTkZJR19SQURJT19NQUVTVFJPIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19GQj15CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorQ09ORklHX0ZCX1NPRlRfQ1VSU09SPXkKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9QWEE9eQorIyBDT05GSUdfRkJfVzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QWEFfUEFSQU1FVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKK0NPTkZJR19GT05UUz15CitDT05GSUdfRk9OVF84eDg9eQorIyBDT05GSUdfRk9OVF84eDE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9NSU5JXzR4NiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKKworIworIyBMb2dvIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworQ09ORklHX1VTQl9HQURHRVQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYPXkKK0NPTkZJR19VU0JfUFhBMlhYPXkKKyMgQ09ORklHX1VTQl9QWEEyWFhfU01BTEwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAorQ09ORklHX1VTQl9FVEg9eQorQ09ORklHX1VTQl9FVEhfUk5ESVM9eQorIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCitDT05GSUdfTU1DPXkKK0NPTkZJR19NTUNfREVCVUc9eQorQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX1BYQT15CisjIENPTkZJR19NTUNfV0JTRCBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CitDT05GSUdfRVhUMl9GU19YQVRUUj15CitDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KQkQgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisjIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKK0NPTkZJR19KRkZTMl9SVUJJTj15CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9bQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKKyMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9ImNwNDM3IgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQVNDSUk9eQorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PXkKKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XQUlUUSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRVJST1JTPXkKKyMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQ1JDX0NDSVRUPXkKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvc3BpdHpfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zcGl0el9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAwZTA0ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc3BpdHpfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTQwMSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE0LXJjMworIyBTdW4gT2N0ICA5IDE3OjExOjE5IDIwMDUKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0NMRUFOX0NPTVBJTEU9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU0hNRU09eQorQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCitDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKK0NPTkZJR19DQ19BTElHTl9MT09QUz0wCitDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NBTUVMT1QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9QWEE9eQorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorCisjCisjIEludGVsIFBYQTJ4eCBJbXBsZW1lbnRhdGlvbnMKKyMKKyMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01BSU5TVE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9JRFAgaXMgbm90IHNldAorQ09ORklHX1BYQV9TSEFSUFNMPXkKKyMgQ09ORklHX1BYQV9TSEFSUFNMXzI1eCBpcyBub3Qgc2V0CitDT05GSUdfUFhBX1NIQVJQU0xfMjd4PXkKK0NPTkZJR19NQUNIX1NQSVRaPXkKK0NPTkZJR19NQUNIX0JPUlpPST15CitDT05GSUdfUFhBMjd4PXkKK0NPTkZJR19QWEFfU0hBUlBfQ3h4MDA9eQorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfWFNDQUxFPXkKK0NPTkZJR19DUFVfMzJ2NT15CitDT05GSUdfQ1BVX0FCUlRfRVY1VD15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CitDT05GSUdfWFNDQUxFX1BNVT15CitDT05GSUdfU0hBUlBfUEFSQU09eQorQ09ORklHX1NIQVJQX1NDT09QPXkKKworIworIyBCdXMgc3VwcG9ydAorIworQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCitDT05GSUdfUENDQVJEPXkKKyMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBPXkKK0NPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQorQ09ORklHX1BDTUNJQV9JT0NUTD15CisKKyMKKyMgUEMtY2FyZCBicmlkZ2VzCisjCitDT05GSUdfUENNQ0lBX1BYQTJYWD15CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCitDT05GSUdfUFJFRU1QVD15CisjIENPTkZJR19OT19JRExFX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMG44IGNvbnNvbGU9dHR5MSBub2luaXRyZCByb290PS9kZXYvbXRkYmxvY2syIHJvb3Rmc3R5cGU9amZmczIgICBkZWJ1ZyIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9BT1VUPW0KK0NPTkZJR19CSU5GTVRfTUlTQz1tCisjIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNPXkKK0NPTkZJR19BUE09eQorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0JJQz15CisKKyMKKyMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PW0KKyMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfQUg9bQorQ09ORklHX0lORVQ2X0VTUD1tCitDT05GSUdfSU5FVDZfSVBDT01QPW0KK0NPTkZJR19JTkVUNl9UVU5ORUw9bQorQ09ORklHX0lQVjZfVFVOTkVMPW0KK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUF9ORl9DT05OVFJBQ0s9bQorIyBDT05GSUdfSVBfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfRVZFTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9DVF9QUk9UT19TQ1RQPW0KK0NPTkZJR19JUF9ORl9GVFA9bQorQ09ORklHX0lQX05GX0lSQz1tCisjIENPTkZJR19JUF9ORl9ORVRCSU9TX05TIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9URlRQPW0KK0NPTkZJR19JUF9ORl9BTUFOREE9bQorIyBDT05GSUdfSVBfTkZfUFBUUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfUVVFVUU9bQorQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9MSU1JVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTUFDPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9QS1RUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NQVJLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX0lQX05GX01BVENIX1RPUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9FQ049bQorQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQorQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQorQ09ORklHX0lQX05GX01BVENIX1RDUE1TUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSEVMUEVSPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9TVEFURT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQorQ09ORklHX0lQX05GX01BVENIX1JFQUxNPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9TQ1RQPW0KKyMgQ09ORklHX0lQX05GX01BVENIX0RDQ1AgaXMgbm90IHNldAorQ09ORklHX0lQX05GX01BVENIX0NPTU1FTlQ9bQorQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVD1tCisjIENPTkZJR19JUF9ORl9NQVRDSF9TVFJJTkcgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0ZJTFRFUj1tCisjIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCisjIENPTkZJR19JUF9ORl9UQVJHRVRfTkZRVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfTkFUPW0KK0NPTkZJR19JUF9ORl9OQVRfTkVFREVEPXkKKyMgQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1RBUkdFVF9TQU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX05BVF9TTk1QX0JBU0lDIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9OQVRfSVJDPW0KK0NPTkZJR19JUF9ORl9OQVRfRlRQPW0KK0NPTkZJR19JUF9ORl9OQVRfVEZUUD1tCitDT05GSUdfSVBfTkZfTkFUX0FNQU5EQT1tCitDT05GSUdfSVBfTkZfTUFOR0xFPW0KKyMgQ09ORklHX0lQX05GX1RBUkdFVF9UT1MgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9UQVJHRVRfRFNDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9UQVJHRVRfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xBU1NJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfUkFXPW0KKyMgQ09ORklHX0lQX05GX1RBUkdFVF9OT1RSQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQorQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCitDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCisKKyMKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKK0NPTkZJR19JUDZfTkZfUVVFVUU9bQorQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVA2X05GX01BVENIX0xJTUlUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTUFDPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCitDT05GSUdfSVA2X05GX01BVENIX0hMPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTVVMVElQT1JUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfT1dORVI9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NQVJLPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCitDT05GSUdfSVA2X05GX01BVENIX0FIRVNQPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQorQ09ORklHX0lQNl9ORl9GSUxURVI9bQorIyBDT05GSUdfSVA2X05GX1RBUkdFVF9MT0cgaXMgbm90IHNldAorIyBDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfSVA2X05GX1RBUkdFVF9ORlFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19JUDZfTkZfTUFOR0xFPW0KKyMgQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19JUDZfTkZfVEFSR0VUX0hMIGlzIG5vdCBzZXQKK0NPTkZJR19JUDZfTkZfUkFXPW0KKworIworIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorQ09ORklHX0lSREE9bQorCisjCisjIElyREEgcHJvdG9jb2xzCisjCitDT05GSUdfSVJMQU49bQorQ09ORklHX0lSTkVUPW0KK0NPTkZJR19JUkNPTU09bQorIyBDT05GSUdfSVJEQV9VTFRSQSBpcyBub3Qgc2V0CisKKyMKKyMgSXJEQSBvcHRpb25zCisjCisjIENPTkZJR19JUkRBX0NBQ0hFX0xBU1RfTFNBUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBX0ZBU1RfUlIgaXMgbm90IHNldAorIyBDT05GSUdfSVJEQV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5mcmFyZWQtcG9ydCBkZXZpY2UgZHJpdmVycworIworCisjCisjIFNJUiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfSVJUVFlfU0lSIGlzIG5vdCBzZXQKKworIworIyBEb25nbGUgc3VwcG9ydAorIworCisjCisjIE9sZCBTSVIgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0lSUE9SVF9TSVIgaXMgbm90IHNldAorCisjCisjIE9sZCBTZXJpYWwgZG9uZ2xlIHN1cHBvcnQKKyMKKworIworIyBGSVIgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJR01BVEVMX0ZJUiBpcyBub3Qgc2V0CisjIENPTkZJR19OU0NfRklSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTkJPTkRfRklSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQ19JUkNDX0ZJUiBpcyBub3Qgc2V0CisjIENPTkZJR19BTElfRklSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9GSVIgaXMgbm90IHNldAorQ09ORklHX0JUPW0KK0NPTkZJR19CVF9MMkNBUD1tCitDT05GSUdfQlRfU0NPPW0KK0NPTkZJR19CVF9SRkNPTU09bQorQ09ORklHX0JUX1JGQ09NTV9UVFk9eQorQ09ORklHX0JUX0JORVA9bQorQ09ORklHX0JUX0JORVBfTUNfRklMVEVSPXkKK0NPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUj15CitDT05GSUdfQlRfSElEUD1tCisKKyMKKyMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfQlRfSENJVVNCPW0KKyMgQ09ORklHX0JUX0hDSVVTQl9TQ08gaXMgbm90IHNldAorQ09ORklHX0JUX0hDSVVBUlQ9bQorQ09ORklHX0JUX0hDSVVBUlRfSDQ9eQorQ09ORklHX0JUX0hDSVVBUlRfQkNTUD15CitDT05GSUdfQlRfSENJVUFSVF9CQ1NQX1RYQ1JDPXkKK0NPTkZJR19CVF9IQ0lCQ00yMDNYPW0KK0NPTkZJR19CVF9IQ0lCUEExMFg9bQorQ09ORklHX0JUX0hDSUJGVVNCPW0KK0NPTkZJR19CVF9IQ0lEVEwxPW0KK0NPTkZJR19CVF9IQ0lCVDNDPW0KK0NPTkZJR19CVF9IQ0lCTFVFQ0FSRD1tCitDT05GSUdfQlRfSENJQlRVQVJUPW0KK0NPTkZJR19CVF9IQ0lWSENJPW0KK0NPTkZJR19JRUVFODAyMTE9bQorIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUk9NPXkKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKK0NPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CitDT05GSUdfTVREX1NIQVJQX1NMPXkKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKworIworIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCitDT05GSUdfTVREX05BTkQ9eQorQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURT15CisjIENPTkZJR19NVERfTkFORF9IMTkwMCBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX1NIQVJQU0w9eQorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworQ09ORklHX0lERT15CitDT05GSUdfQkxLX0RFVl9JREU9eQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIworIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKKyMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDUz15CisjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKK0NPTkZJR19JREVfR0VORVJJQz15CisjIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9bQorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPW0KK0NPTkZJR19DSFJfREVWX1NUPW0KK0NPTkZJR19DSFJfREVWX09TU1Q9bQorQ09ORklHX0JMS19ERVZfU1I9bQorIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9bQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCisjCisjIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUENNQ0lBIFNDU0kgYWRhcHRlciBzdXBwb3J0CisjCisjIENPTkZJR19QQ01DSUFfQUhBMTUyWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfRkRPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfTklOSkFfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfUUxPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9TWU01M0M1MDAgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKworIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9bQorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKK0NPTkZJR19ORVRfUkFESU89eQorCisjCisjIE9ic29sZXRlIFdpcmVsZXNzIGNhcmRzIHN1cHBvcnQgKHByZS04MDIuMTEpCisjCisjIENPTkZJR19TVFJJUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfV0FWRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfTkVUV0FWRSBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgODAyLjExIEZyZXF1ZW5jeSBIb3BwaW5nIGNhcmRzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDTUNJQV9SQVlDUyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgODAyLjExYiBJU0EvUENJIGNhcmRzIHN1cHBvcnQKKyMKK0NPTkZJR19IRVJNRVM9bQorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIDgwMi4xMWIgUGNtY2lhL0NhcmRidXMgY2FyZHMgc3VwcG9ydAorIworQ09ORklHX1BDTUNJQV9IRVJNRVM9bQorQ09ORklHX1BDTUNJQV9TUEVDVFJVTT1tCisjIENPTkZJR19BSVJPX0NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9XTDM1MDEgaXMgbm90IHNldAorQ09ORklHX0hPU1RBUD1tCitDT05GSUdfSE9TVEFQX0ZJUk1XQVJFPXkKK0NPTkZJR19IT1NUQVBfQ1M9bQorQ09ORklHX05FVF9XSVJFTEVTUz15CisKKyMKKyMgUENNQ0lBIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19ORVRfUENNQ0lBPXkKKyMgQ09ORklHX1BDTUNJQV8zQzU4OSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfM0M1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX0ZNVkoxOFggaXMgbm90IHNldAorQ09ORklHX1BDTUNJQV9QQ05FVD1tCisjIENPTkZJR19QQ01DSUFfTk1DTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9TTUM5MUM5MiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfWElSQzJQUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfQVhORVQgaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX1BQUD1tCisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAorQ09ORklHX1BQUF9BU1lOQz1tCisjIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQX0RFRkxBVEUgaXMgbm90IHNldAorQ09ORklHX1BQUF9CU0RDT01QPW0KKyMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0NPUkdJIGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9TUElUWj15CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQorQ09ORklHX1RPVUNIU0NSRUVOX0NPUkdJPXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01JU0M9eQorQ09ORklHX0lOUFVUX1VJTlBVVD1tCisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9bQorQ09ORklHX1NFUklBTF84MjUwX0NTPW0KK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9QWEE9eQorQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisKKyMKKyMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIworQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCitDT05GSUdfRkI9eQorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKK0NPTkZJR19GQl9TT0ZUX0NVUlNPUj15CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9QWEE9eQorIyBDT05GSUdfRkJfVzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QWEFfUEFSQU1FVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKK0NPTkZJR19GT05UUz15CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CisjIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfTUlOSV80eDYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0CisKKyMKKyMgTG9nbyBjb25maWd1cmF0aW9uCisjCisjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQorQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQorQ09ORklHX0JBQ0tMSUdIVF9ERVZJQ0U9eQorQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQorQ09ORklHX0xDRF9ERVZJQ0U9eQorQ09ORklHX0JBQ0tMSUdIVF9DT1JHST15CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0I9bQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKKyMgQ09ORklHX1VTQl9CQU5EV0lEVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9bQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CitDT05GSUdfVVNCX1NMODExX0hDRD1tCitDT05GSUdfVVNCX1NMODExX0NTPW0KKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKworIworIyBVU0IgQmx1ZXRvb3RoIFRUWSBjYW4gb25seSBiZSB1c2VkIHdpdGggZGlzYWJsZWQgQmx1ZXRvb3RoIHN1YnN5c3RlbQorIworQ09ORklHX1VTQl9BQ009bQorQ09ORklHX1VTQl9QUklOVEVSPW0KKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT1tCisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPW0KK0NPTkZJR19VU0JfSElESU5QVVQ9eQorIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCisjCitDT05GSUdfVVNCX0tCRD1tCitDT05GSUdfVVNCX01PVVNFPW0KK0NPTkZJR19VU0JfQUlQVEVLPW0KK0NPTkZJR19VU0JfV0FDT009bQorIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0tCVEFCPW0KK0NPTkZJR19VU0JfUE9XRVJNQVRFPW0KK0NPTkZJR19VU0JfTVRPVUNIPW0KKyMgQ09ORklHX1VTQl9JVE1UT1VDSCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VHQUxBWD1tCisjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1hQQUQ9bQorQ09ORklHX1VTQl9BVElfUkVNT1RFPW0KKyMgQ09ORklHX1VTQl9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworQ09ORklHX1VTQl9NREM4MDA9bQorQ09ORklHX1VTQl9NSUNST1RFSz1tCisKKyMKKyMgVVNCIE11bHRpbWVkaWEgZGV2aWNlcworIworQ09ORklHX1VTQl9EQUJVU0I9bQorCisjCisjIFZpZGVvNExpbnV4IHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTXVsdGltZWRpYSBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCitDT05GSUdfVVNCX0NBVEM9bQorQ09ORklHX1VTQl9LQVdFVEg9bQorQ09ORklHX1VTQl9QRUdBU1VTPW0KK0NPTkZJR19VU0JfUlRMODE1MD1tCitDT05GSUdfVVNCX1VTQk5FVD1tCitDT05GSUdfVVNCX05FVF9BWDg4MTdYPW0KK0NPTkZJR19VU0JfTkVUX0NEQ0VUSEVSPW0KKyMgQ09ORklHX1VTQl9ORVRfR0w2MjBBIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTkVUX05FVDEwODA9bQorIyBDT05GSUdfVVNCX05FVF9QTFVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX1JORElTX0hPU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9DRENfU1VCU0VUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTkVUX1pBVVJVUz1tCisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAorIworQ09ORklHX1VTQl9TRVJJQUw9bQorQ09ORklHX1VTQl9TRVJJQUxfR0VORVJJQz15CisjIENPTkZJR19VU0JfU0VSSUFMX0FJUlBSSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU0VSSUFMX0JFTEtJTj1tCisjIENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQ9bQorIyBDT05GSUdfVVNCX1NFUklBTF9DUDIxMDEgaXMgbm90IHNldAorQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOD1tCitDT05GSUdfVVNCX1NFUklBTF9FTVBFRz1tCitDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTz1tCitDT05GSUdfVVNCX1NFUklBTF9WSVNPUj1tCitDT05GSUdfVVNCX1NFUklBTF9JUEFRPW0KK0NPTkZJR19VU0JfU0VSSUFMX0lSPW0KK0NPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUPW0KK0NPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUX1RJPW0KK0NPTkZJR19VU0JfU0VSSUFMX0dBUk1JTj1tCitDT05GSUdfVVNCX1NFUklBTF9JUFc9bQorQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9QREE9bQorQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTj1tCisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fTVBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0EyOCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0EyOFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0EyOFhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMThYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOVcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE5UVcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE5UUkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTQ5VyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBNDlXTEMgaXMgbm90IHNldAorQ09ORklHX1VTQl9TRVJJQUxfS0xTST1tCitDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1Q9bQorQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzI9bQorQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfSFA0WCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NFUklBTF9TQUZFPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfU0FGRV9QQURERUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9TRVJJQUxfVEk9bQorQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLPW0KK0NPTkZJR19VU0JfU0VSSUFMX1hJUkNPTT1tCisjIENPTkZJR19VU0JfU0VSSUFMX09QVElPTiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NFUklBTF9PTU5JTkVUPW0KK0NPTkZJR19VU0JfRVpVU0I9eQorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKK0NPTkZJR19VU0JfRU1JNjI9bQorQ09ORklHX1VTQl9FTUkyNj1tCitDT05GSUdfVVNCX0FVRVJTV0FMRD1tCitDT05GSUdfVVNCX1JJTzUwMD1tCitDT05GSUdfVVNCX0xFR09UT1dFUj1tCitDT05GSUdfVVNCX0xDRD1tCitDT05GSUdfVVNCX0xFRD1tCitDT05GSUdfVVNCX0NZVEhFUk09bQorQ09ORklHX1VTQl9QSElER0VUS0lUPW0KK0NPTkZJR19VU0JfUEhJREdFVFNFUlZPPW0KK0NPTkZJR19VU0JfSURNT1VTRT1tCisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorCisjCisjIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAorIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworQ09ORklHX1VTQl9HQURHRVQ9bQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEPXkKK0NPTkZJR19VU0JfRFVNTVlfSENEPW0KK0NPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15CitDT05GSUdfVVNCX1pFUk89bQorQ09ORklHX1VTQl9FVEg9bQorQ09ORklHX1VTQl9FVEhfUk5ESVM9eQorQ09ORklHX1VTQl9HQURHRVRGUz1tCitDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRT1tCisjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HX1NFUklBTD1tCisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX1BYQT15CisjIENPTkZJR19NTUNfV0JTRCBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CitDT05GSUdfRVhUMl9GU19YQVRUUj15CitDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRlk9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKyMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorQ09ORklHX0pGRlMyX1JVQklOPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz1tCisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz1tCitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9bQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9bQorQ09ORklHX1NVTlJQQ19HU1M9bQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT1tCisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKK0NPTkZJR19TTUJfRlM9bQorQ09ORklHX1NNQl9OTFNfREVGQVVMVD15CitDT05GSUdfU01CX05MU19SRU1PVEU9ImNwNDM3IgorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJjcDQzNyIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PXkKKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworQ09ORklHX1BST0ZJTElORz15CitDT05GSUdfT1BST0ZJTEU9bQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dBSVRRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19FUlJPUlM9eQorQ09ORklHX0RFQlVHX0xMPXkKKyMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCitDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX05VTEw9bQorQ09ORklHX0NSWVBUT19NRDQ9bQorQ09ORklHX0NSWVBUT19NRDU9bQorQ09ORklHX0NSWVBUT19TSEExPW0KK0NPTkZJR19DUllQVE9fU0hBMjU2PW0KK0NPTkZJR19DUllQVE9fU0hBNTEyPW0KK0NPTkZJR19DUllQVE9fV1A1MTI9bQorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz1tCitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19BRVM9bQorQ09ORklHX0NSWVBUT19DQVNUNT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fQVJDND1tCitDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX1RFU1Q9bQorCisjCisjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCisjCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0NSQ19DQ0lUVD15CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2FybWtzeW1zLmMgYi9hcmNoL2FybS9rZXJuZWwvYXJta3N5bXMuYwppbmRleCA4MzVkNDUwLi43YjE3YTg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvYXJta3N5bXMuYworKysgYi9hcmNoL2FybS9rZXJuZWwvYXJta3N5bXMuYwpAQCAtNDUsOCArNDUsOCBAQAogCiAjZGVmaW5lIEVYUE9SVF9TWU1CT0xfQUxJQVMoc3ltLG9yaWcpCQlcCiAgRVhQT1JUX0NSQ19BTElBUyhzeW0pCQkJCVwKLSBjb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCBfX2tzeW10YWJfIyNzeW0JXAotICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX2tzeW10YWIiKSkpID0JXAorIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCBfX2tzeW10YWJfIyNzeW0JXAorICBfX2F0dHJpYnV0ZV91c2VkX18gX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX19rc3ltdGFiIikpKSA9CVwKICAgICB7ICh1bnNpZ25lZCBsb25nKSZvcmlnLCAjc3ltIH07CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUwppbmRleCA3MTUyYmZiLi45M2I1ZThlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKQEAgLTUzNyw3ICs1MzcsNyBAQAogI2lmZGVmIENPTkZJR19DUFVfTVBDT1JFCiAJY2xyZXgKICNlbHNlCi0Jc3RyZXgJcjMsIHI0LCBbaXBdCQkJQCBDbGVhciBleGNsdXNpdmUgbW9uaXRvcgorCXN0cmV4CXI1LCByNCwgW2lwXQkJCUAgQ2xlYXIgZXhjbHVzaXZlIG1vbml0b3IKICNlbmRpZgogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1hTQ0FMRSkgJiYgIWRlZmluZWQoQ09ORklHX0lXTU1YVCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUwppbmRleCA4MWQ0NTBhLi4wNjY1OTdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TCkBAIC0xMDYsMTUgKzEwNiwxMCBAQAogCS5lbmRtCiAKIC5MYXJtNzAwYnVnOgotCWxkcglyMCwgW3NwLCAjU19QU1JdCQlAIEdldCBjYWxsaW5nIGNwc3IKLQlzdWIJbHIsIGxyLCAjNAotCXN0cglsciwgW3I4XQotCW1zcglzcHNyX2N4c2YsIHIwCiAJbGRtaWEJc3AsIHtyMCAtIGxyfV4JCQlAIEdldCBjYWxsaW5nIHIwIC0gbHIKIAltb3YJcjAsIHIwCi0JbGRyCWxyLCBbc3AsICNTX1BDXQkJCUAgR2V0IFBDCiAJYWRkCXNwLCBzcCwgI1NfRlJBTUVfU0laRQotCW1vdnMJcGMsIGxyCisJc3VicwlwYywgbHIsICM0CiAjZWxzZQogCS5tYWNybwlhcm03MTBfYnVnX2NoZWNrLCBpbnN0ciwgdGVtcAogCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaW8uYyBiL2FyY2gvYXJtL2tlcm5lbC9pby5jCmluZGV4IDZjMjBjMTEuLjFmNjgyMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9pby5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9pby5jCkBAIC03LDcgKzcsNyBAQAogICogQ29weSBkYXRhIGZyb20gSU8gbWVtb3J5IHNwYWNlIHRvICJyZWFsIiBtZW1vcnkgc3BhY2UuCiAgKiBUaGlzIG5lZWRzIHRvIGJlIG9wdGltaXplZC4KICAqLwotdm9pZCBfbWVtY3B5X2Zyb21pbyh2b2lkICp0bywgdm9pZCBfX2lvbWVtICpmcm9tLCBzaXplX3QgY291bnQpCit2b2lkIF9tZW1jcHlfZnJvbWlvKHZvaWQgKnRvLCBjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmZyb20sIHNpemVfdCBjb3VudCkKIHsKIAl1bnNpZ25lZCBjaGFyICp0ID0gdG87CiAJd2hpbGUgKGNvdW50KSB7CkBAIC0yMiw3ICsyMiw3IEBACiAgKiBDb3B5IGRhdGEgZnJvbSAicmVhbCIgbWVtb3J5IHNwYWNlIHRvIElPIG1lbW9yeSBzcGFjZS4KICAqIFRoaXMgbmVlZHMgdG8gYmUgb3B0aW1pemVkLgogICovCi12b2lkIF9tZW1jcHlfdG9pbyh2b2lkIF9faW9tZW0gKnRvLCBjb25zdCB2b2lkICpmcm9tLCBzaXplX3QgY291bnQpCit2b2lkIF9tZW1jcHlfdG9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnRvLCBjb25zdCB2b2lkICpmcm9tLCBzaXplX3QgY291bnQpCiB7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqZiA9IGZyb207CiAJd2hpbGUgKGNvdW50KSB7CkBAIC0zNyw3ICszNyw3IEBACiAgKiAibWVtc2V0IiBvbiBJTyBtZW1vcnkgc3BhY2UuCiAgKiBUaGlzIG5lZWRzIHRvIGJlIG9wdGltaXplZC4KICAqLwotdm9pZCBfbWVtc2V0X2lvKHZvaWQgX19pb21lbSAqZHN0LCBpbnQgYywgc2l6ZV90IGNvdW50KQordm9pZCBfbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZHN0LCBpbnQgYywgc2l6ZV90IGNvdW50KQogewogCXdoaWxlIChjb3VudCkgewogCQljb3VudC0tOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NlbWFwaG9yZS5jIGIvYXJjaC9hcm0va2VybmVsL3NlbWFwaG9yZS5jCmluZGV4IGFjNDIzZTMuLjRjMzFmMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zZW1hcGhvcmUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc2VtYXBob3JlLmMKQEAgLTE3OCw3ICsxNzgsNyBAQAogICogcmVnaXN0ZXJzIChyMCB0byByMyBhbmQgbHIpLCBidXQgbm90IGlwLCBhcyB3ZSB1c2UgaXQgYXMgYSByZXR1cm4KICAqIHZhbHVlIGluIHNvbWUgY2FzZXMuLgogICovCi1hc20oIgkuc2VjdGlvbiAuc2NoZWQudGV4dCxcImF4XCIJCVxuXAorYXNtKCIJLnNlY3Rpb24gLnNjaGVkLnRleHQsXCJheFwiLCVwcm9nYml0cwlcblwKIAkuYWxpZ24JNQkJCQlcblwKIAkuZ2xvYmwJX19kb3duX2ZhaWxlZAkJCVxuXAogX19kb3duX2ZhaWxlZDoJCQkJCVxuXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3N5c19hcm0uYyBiL2FyY2gvYXJtL2tlcm5lbC9zeXNfYXJtLmMKaW5kZXggNDI2MjlmZi4uZWE1NjliYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3N5c19hcm0uYworKysgYi9hcmNoL2FybS9rZXJuZWwvc3lzX2FybS5jCkBAIC0zMDUsNyArMzA1LDcgQEAKIAkJICAiSXIiIChUSFJFQURfU1RBUlRfU1AgLSBzaXplb2YocmVncykpLAogCQkgICJyIiAoJnJlZ3MpLAogCQkgICJJciIgKHNpemVvZihyZWdzKSkKLQkJOiAicjAiLCAicjEiLCAicjIiLCAicjMiLCAiaXAiLCAibWVtb3J5Iik7CisJCTogInIwIiwgInIxIiwgInIyIiwgInIzIiwgImlwIiwgImxyIiwgIm1lbW9yeSIpOwogCiAgb3V0OgogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jCmluZGV4IDQ1NTRjOTYuLmY2ZGU3NmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jCkBAIC01MDQsNyArNTA0LDcgQEAKIAogCQliYWRfYWNjZXNzOgogCQlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7Ci0JCS8qIHNpbXVsYXRlIGEgcmVhZCBhY2Nlc3MgZmF1bHQgKi8KKwkJLyogc2ltdWxhdGUgYSB3cml0ZSBhY2Nlc3MgZmF1bHQgKi8KIAkJZG9fRGF0YUFib3J0KGFkZHIsIDE1ICsgKDEgPDwgMTEpLCByZWdzKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTYyNCw2ICs2MjQsOSBAQAogCQlwcmludGsoIiAtIGV4dHJhIGRhdGEgPSAlcCIsIGRhdGEpOwogCXByaW50aygiXG4iKTsKIAkqKGludCAqKTAgPSAwOworCisJLyogQXZvaWQgIm5vcmV0dXJuIGZ1bmN0aW9uIGRvZXMgcmV0dXJuIiAqLworCWZvciAoOzspOwogfQogRVhQT1JUX1NZTUJPTChfX2J1Zyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggYWQyZDY2Yy4uMGQ1ZGI1MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTIzLDIwICsyMywyMCBAQAogCQkJKiguaW5pdC50ZXh0KQogCQkJX2Vpbml0dGV4dCA9IC47CiAJCV9fcHJvY19pbmZvX2JlZ2luID0gLjsKLQkJCSooLnByb2MuaW5mbykKKwkJCSooLnByb2MuaW5mby5pbml0KQogCQlfX3Byb2NfaW5mb19lbmQgPSAuOwogCQlfX2FyY2hfaW5mb19iZWdpbiA9IC47Ci0JCQkqKC5hcmNoLmluZm8pCisJCQkqKC5hcmNoLmluZm8uaW5pdCkKIAkJX19hcmNoX2luZm9fZW5kID0gLjsKIAkJX190YWd0YWJsZV9iZWdpbiA9IC47Ci0JCQkqKC50YWdsaXN0KQorCQkJKigudGFnbGlzdC5pbml0KQogCQlfX3RhZ3RhYmxlX2VuZCA9IC47CiAJCS4gPSBBTElHTigxNik7CiAJCV9fc2V0dXBfc3RhcnQgPSAuOwogCQkJKiguaW5pdC5zZXR1cCkKIAkJX19zZXR1cF9lbmQgPSAuOwogCQlfX2Vhcmx5X2JlZ2luID0gLjsKLQkJCSooX19lYXJseV9wYXJhbSkKKwkJCSooLmVhcmx5X3BhcmFtLmluaXQpCiAJCV9fZWFybHlfZW5kID0gLjsKIAkJX19pbml0Y2FsbF9zdGFydCA9IC47CiAJCQkqKC5pbml0Y2FsbDEuaW5pdCkKQEAgLTg5LDEzICs4OSw2IEBACiAJCSooLmdvdCkJCQkvKiBHbG9iYWwgb2Zmc2V0IHRhYmxlCQkqLwogCX0KIAotCS4gPSBBTElHTigxNik7Ci0JX19leF90YWJsZSA6IHsJCQkvKiBFeGNlcHRpb24gdGFibGUJCSovCi0JCV9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0JCQkqKF9fZXhfdGFibGUpCi0JCV9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQl9Ci0KIAlST0RBVEEKIAogCV9ldGV4dCA9IC47CQkJLyogRW5kIG9mIHRleHQgYW5kIHJvZGF0YSBzZWN0aW9uICovCkBAIC0xMzgsNiArMTMxLDE0IEBACiAJCSooLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpCiAKIAkJLyoKKwkJICogVGhlIGV4Y2VwdGlvbiBmaXh1cCB0YWJsZSAobWlnaHQgbmVlZCByZXNvcnRpbmcgYXQgcnVudGltZSkKKwkJICovCisJCS4gPSBBTElHTigzMik7CisJCV9fc3RhcnRfX19leF90YWJsZSA9IC47CisJCSooX19leF90YWJsZSkKKwkJX19zdG9wX19fZXhfdGFibGUgPSAuOworCisJCS8qCiAJCSAqIGFuZCB0aGUgdXN1YWwgZGF0YSBzZWN0aW9uCiAJCSAqLwogCQkqKC5kYXRhKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9mb3J0dW5ldC5jIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9mb3J0dW5ldC5jCmluZGV4IGY4M2E1OTcuLjNkODhkYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvZm9ydHVuZXQuYworKysgYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2ZvcnR1bmV0LmMKQEAgLTMxLDYgKzMxLDggQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KIAorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KKwogI2luY2x1ZGUgImNvbW1vbi5oIgogCiBzdHJ1Y3QgbWVtaW5mbyBtZW1tYXAgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9nZW5lcmljLmMgYi9hcmNoL2FybS9tYWNoLWlteC9nZW5lcmljLmMKaW5kZXggNDFlNTg0OS4uZjhhNzQyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvZ2VuZXJpYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2dlbmVyaWMuYwpAQCAtMjgsMTQgKzI4LDE1IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaW14ZmIuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pbXgtcmVncy5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAKIHZvaWQgaW14X2dwaW9fbW9kZShpbnQgZ3Bpb19tb2RlKQogewogCXVuc2lnbmVkIGludCBwaW4gPSBncGlvX21vZGUgJiBHUElPX1BJTl9NQVNLOwotCXVuc2lnbmVkIGludCBwb3J0ID0gKGdwaW9fbW9kZSAmIEdQSU9fUE9SVF9NQVNLKSA+PiA1OwotCXVuc2lnbmVkIGludCBvY3IgPSAoZ3Bpb19tb2RlICYgR1BJT19PQ1JfTUFTSykgPj4gMTA7CisJdW5zaWduZWQgaW50IHBvcnQgPSAoZ3Bpb19tb2RlICYgR1BJT19QT1JUX01BU0spID4+IEdQSU9fUE9SVF9TSElGVDsKKwl1bnNpZ25lZCBpbnQgb2NyID0gKGdwaW9fbW9kZSAmIEdQSU9fT0NSX01BU0spID4+IEdQSU9fT0NSX1NISUZUOwogCXVuc2lnbmVkIGludCB0bXA7CiAKIAkvKiBQdWxsdXAgZW5hYmxlICovCkBAIC01Nyw3ICs1OCw3IEBACiAJCUdQUihwb3J0KSAmPSB+KDE8PHBpbik7CiAKIAkvKiB1c2UgYXMgZ3Bpbz8gKi8KLQlpZiggb2NyID09IDMgKQorCWlmKGdwaW9fbW9kZSAmICBHUElPX0dJVVMpCiAJCUdJVVMocG9ydCkgfD0gKDE8PHBpbik7CiAJZWxzZQogCQlHSVVTKHBvcnQpICY9IH4oMTw8cGluKTsKQEAgLTcyLDIwICs3MywyMCBAQAogCQl0bXAgfD0gKG9jciA8PCAocGluKjIpKTsKIAkJT0NSMShwb3J0KSA9IHRtcDsKIAotCQlpZiggZ3Bpb19tb2RlICYJR1BJT19BT1VUICkKLQkJCUlDT05GQTEocG9ydCkgJj0gfiggMzw8KHBpbioyKSk7Ci0JCWlmKCBncGlvX21vZGUgJglHUElPX0JPVVQgKQotCQkJSUNPTkZCMShwb3J0KSAmPSB+KCAzPDwocGluKjIpKTsKKwkJSUNPTkZBMShwb3J0KSAmPSB+KCAzPDwocGluKjIpKTsKKwkJSUNPTkZBMShwb3J0KSB8PSAoKGdwaW9fbW9kZSA+PiBHUElPX0FPVVRfU0hJRlQpICYgMykgPDwgKHBpbiAqIDIpOworCQlJQ09ORkIxKHBvcnQpICY9IH4oIDM8PChwaW4qMikpOworCQlJQ09ORkIxKHBvcnQpIHw9ICgoZ3Bpb19tb2RlID4+IEdQSU9fQk9VVF9TSElGVCkgJiAzKSA8PCAocGluICogMik7CiAJfSBlbHNlIHsKIAkJdG1wID0gT0NSMihwb3J0KTsKIAkJdG1wICY9IH4oIDM8PCgocGluLTE2KSoyKSk7CiAJCXRtcCB8PSAob2NyIDw8ICgocGluLTE2KSoyKSk7CiAJCU9DUjIocG9ydCkgPSB0bXA7CiAKLQkJaWYoIGdwaW9fbW9kZSAmCUdQSU9fQU9VVCApCi0JCQlJQ09ORkEyKHBvcnQpICY9IH4oIDM8PCgocGluLTE2KSoyKSk7Ci0JCWlmKCBncGlvX21vZGUgJglHUElPX0JPVVQgKQotCQkJSUNPTkZCMihwb3J0KSAmPSB+KCAzPDwoKHBpbi0xNikqMikpOworCQlJQ09ORkEyKHBvcnQpICY9IH4oIDM8PCgocGluLTE2KSoyKSk7CisJCUlDT05GQTIocG9ydCkgfD0gKChncGlvX21vZGUgPj4gR1BJT19BT1VUX1NISUZUKSAmIDMpIDw8ICgocGluLTE2KSAqIDIpOworCQlJQ09ORkIyKHBvcnQpICY9IH4oIDM8PCgocGluLTE2KSoyKSk7CisJCUlDT05GQjIocG9ydCkgfD0gKChncGlvX21vZGUgPj4gR1BJT19CT1VUX1NISUZUKSAmIDMpIDw8ICgocGluLTE2KSAqIDIpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbGVkcy1teDFhZHMuYyBiL2FyY2gvYXJtL21hY2gtaW14L2xlZHMtbXgxYWRzLmMKaW5kZXggZTYzOTliMC4uNzkyMzY0MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbGVkcy1teDFhZHMuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9sZWRzLW14MWFkcy5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9sZWRzLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlICJsZWRzLmgiCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9teDFhZHMuYyBiL2FyY2gvYXJtL21hY2gtaW14L214MWFkcy5jCmluZGV4IDVkMjU0MzQuLmE3NTExZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L214MWFkcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L214MWFkcy5jCkBAIC01NSw3ICs1NSw3IEBACiBteDFhZHNfaW5pdCh2b2lkKQogewogI2lmZGVmIENPTkZJR19MRURTCi0JaW14X2dwaW9fbW9kZShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX0dQSU8gfCAyKTsKKwlpbXhfZ3Bpb19tb2RlKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IDIpOwogI2VuZGlmCiAJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW1wZDEuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbXBkMS5jCmluZGV4IGMzYzJmMTcuLmExYjE1M2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbXBkMS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbXBkMS5jCkBAIC02Nyw3ICs2Nyw3IEBACiAJfQogCXdyaXRlbCgwLCBpbXBkMS0+YmFzZSArIElNUEQxX0xPQ0spOwogCi0jaWYgREVCVUcKKyNpZmRlZiBERUJVRwogCXZjby52ID0gdmFsICYgMHgxZmY7CiAJdmNvLnIgPSAodmFsID4+IDkpICYgMHg3ZjsKIAl2Y28ucyA9ICh2YWwgPj4gMTYpICYgNzsKQEAgLTQyNywxNyArNDI3LDE4IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBpbXBkMV9yZW1vdmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlkZXZpY2VfdW5yZWdpc3RlcihkZXYpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBpbXBkMV9yZW1vdmUoc3RydWN0IGxtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpbXBkMV9tb2R1bGUgKmltcGQxID0gbG1fZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsLCAqbjsKIAlpbnQgaTsKIAotCWxpc3RfZm9yX2VhY2hfc2FmZShsLCBuLCAmZGV2LT5kZXYuY2hpbGRyZW4pIHsKLQkJc3RydWN0IGRldmljZSAqZCA9IGxpc3RfdG9fZGV2KGwpOwotCi0JCWRldmljZV91bnJlZ2lzdGVyKGQpOwotCX0KKwlkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJmRldi0+ZGV2LCBOVUxMLCBpbXBkMV9yZW1vdmVfb25lKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGltcGQxLT52Y29zKTsgaSsrKQogCQljbGtfdW5yZWdpc3RlcigmaW1wZDEtPnZjb3NbaV0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9jb21tb24uYwppbmRleCBiZGE3Mzk0Li5mZGVlZWY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9jb21tb24uYwpAQCAtMjcsNyArMjcsNiBAQAogLyoKICAqIERlZmF1bHQgcG93ZXItb2ZmIGZvciBFUDgwMjE5CiAgKi8KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCiBzdGF0aWMgaW5saW5lIHZvaWQgZXA4MDIxOV9zZW5kX3RvX3BpYyhfX3U4IGMpIHsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMyMS10aW1lLmMgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMjEtdGltZS5jCmluZGV4IDAwMzk3OTMuLmQ2N2FjMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMyMS10aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzIxLXRpbWUuYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMzEtdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzMxLXRpbWUuYwppbmRleCA4ZWRkZmFjLi4zYzFmMGViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMzEtdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMzMS10aW1lLmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXEzMTI0NC1tbS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXEzMTI0NC1tbS5jCmluZGV4IGIwMTA0MmYuLjU1OTkyYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lxMzEyNDQtbW0uYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9pcTMxMjQ0LW1tLmMKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXE4MDMyMS1tbS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXE4MDMyMS1tbS5jCmluZGV4IDE1ODBjN2UuLmJiM2U5ZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lxODAzMjEtbW0uYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9pcTgwMzIxLW1tLmMKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXE4MDMzMS1tbS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXE4MDMzMS1tbS5jCmluZGV4IGVlOGMzMzMuLjEyOWViNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lxODAzMzEtbW0uYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9pcTgwMzMxLW1tLmMKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXE4MDMzMi1tbS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXE4MDMzMi1tbS5jCmluZGV4IDA4NGFmY2QuLjJmZWFmNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lxODAzMzItbW0uYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9pcTgwMzMyLW1tLmMKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9jb3JlLmMKaW5kZXggNzRiZDJmZC4uZjRkN2YxZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvY29yZS5jCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KQEAgLTE2OCw3ICsxNjcsNyBAQAogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGl4cDIwMDBfdWFydF9yZXNvdXJjZSA9IHsKIAkuc3RhcnQJCT0gSVhQMjAwMF9VQVJUX1BIWVNfQkFTRSwKLQkuZW5kCQk9IElYUDIwMDBfVUFSVF9QSFlTX0JBU0UgKyAweGZmZmYsCisJLmVuZAkJPSBJWFAyMDAwX1VBUlRfUEhZU19CQVNFICsgMHgxZiwKIAkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvcGNpLmMgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvcGNpLmMKaW5kZXggMDc4OGZiMi4uNTIyMjA1YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL3BjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9wY2kuYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYwppbmRleCA1MmFkMTEzLi4zNmI2MDQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYwpAQCAtMTI1LDcgKzEyNSw4IEBACiAJfSBlbHNlIGlmICh0eXBlICYgSVJRVF9MT1cpIHsKIAkJaW50X3N0eWxlID0gSVhQNFhYX0dQSU9fU1RZTEVfQUNUSVZFX0xPVzsKIAkJaXJxX3R5cGUgPSBJWFA0WFhfSVJRX0xFVkVMOwotCX0KKwl9IGVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpeHA0eHhfY29uZmlnX2lycShpcnEsIGlycV90eXBlKTsKIApAQCAtMTQyLDYgKzE0Myw4IEBACiAKIAkvKiBTZXQgdGhlIG5ldyBzdHlsZSAqLwogCSppbnRfcmVnIHw9IChpbnRfc3R5bGUgPDwgKGxpbmUgKiBJWFA0WFhfR1BJT19TVFlMRV9TSVpFKSk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgaXhwNHh4X2lycV9tYXNrKHVuc2lnbmVkIGludCBpcnEpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9peGRwNDI1LXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9peGRwNDI1LXNldHVwLmMKaW5kZXggYWUxZmEwOS4uMGE0MTA4MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhkcDQyNS1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4ZHA0MjUtc2V0dXAuYwpAQCAtMTIzLDYgKzEyMyw3IEBACiAJcGxhdGZvcm1fYWRkX2RldmljZXMoaXhkcDQyNV9kZXZpY2VzLCBBUlJBWV9TSVpFKGl4ZHA0MjVfZGV2aWNlcykpOwogfQogCisjaWZkZWYgQ09ORklHX0FSQ0hfSVhEUDQyNQogTUFDSElORV9TVEFSVChJWERQNDI1LCAiSW50ZWwgSVhEUDQyNSBEZXZlbG9wbWVudCBQbGF0Zm9ybSIpCiAJLyogTWFpbnRhaW5lcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiAqLwogCS5waHlzX3JhbQk9IFBIWVNfT0ZGU0VULApAQCAtMTM0LDcgKzEzNSw5IEBACiAJLmJvb3RfcGFyYW1zCT0gMHgwMTAwLAogCS5pbml0X21hY2hpbmUJPSBpeGRwNDI1X2luaXQsCiBNQUNISU5FX0VORAorI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfTUFDSF9JWERQNDY1CiBNQUNISU5FX1NUQVJUKElYRFA0NjUsICJJbnRlbCBJWERQNDY1IERldmVsb3BtZW50IFBsYXRmb3JtIikKIAkvKiBNYWludGFpbmVyOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuICovCiAJLnBoeXNfcmFtCT0gUEhZU19PRkZTRVQsCkBAIC0xNDYsNyArMTQ5LDkgQEAKIAkuYm9vdF9wYXJhbXMJPSAweDAxMDAsCiAJLmluaXRfbWFjaGluZQk9IGl4ZHA0MjVfaW5pdCwKIE1BQ0hJTkVfRU5ECisjZW5kaWYKIAorI2lmZGVmIENPTkZJR19BUkNIX1BSUE1DMTEwMAogTUFDSElORV9TVEFSVChJWENEUDExMDAsICJJbnRlbCBJWENEUDExMDAgRGV2ZWxvcG1lbnQgUGxhdGZvcm0iKQogCS8qIE1haW50YWluZXI6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gKi8KIAkucGh5c19yYW0JPSBQSFlTX09GRlNFVCwKQEAgLTE1OCw2ICsxNjMsNyBAQAogCS5ib290X3BhcmFtcwk9IDB4MDEwMCwKIAkuaW5pdF9tYWNoaW5lCT0gaXhkcDQyNV9pbml0LAogTUFDSElORV9FTkQKKyNlbmRpZgogCiAvKgogICogQXZpbGEgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gSVhEUDQyNSBleGNlcHQgdGhhdCBpdCBhZGRzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWw3MjAwL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtbDcyMDAvY29yZS5jCmluZGV4IDJhN2ZlZTIuLjAzZWQ3NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbDcyMDAvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbDcyMDAvY29yZS5jCkBAIC03LDEyICs3LDE3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKIC8qCiAgKiBJUlEgYmFzZSByZWdpc3RlcgpAQCAtNDgsNiArNTMsMTIgQEAKIHsKIAlJUlFfRU5BQkxFID0gMSA8PCBpcnE7CiB9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBsNzIwMF9pcnFfY2hpcCA9IHsKKwkuYWNrCQk9IGw3MjAwX21hc2tfaXJxLAorCS5tYXNrCQk9IGw3MjAwX21hc2tfaXJxLAorCS51bm1hc2sJCT0gbDcyMDBfdW5tYXNrX2lycQorfTsKICAKIHN0YXRpYyB2b2lkIF9faW5pdCBsNzIwMF9pbml0X2lycSh2b2lkKQogewpAQCAtNTcsMTEgKzY4LDkgQEAKIAlGSVFfRU5BQkxFQ0xFQVIgPSAweGZmZmZmZmZmOwkvKiBjbGVhciBhbGwgZmFzdCBpbnRlcnJ1cHQgZW5hYmxlcyAqLwogCiAJZm9yIChpcnEgPSAwOyBpcnEgPCBOUl9JUlFTOyBpcnErKykgewotCQlpcnFfZGVzY1tpcnFdLnZhbGlkCT0gMTsKLQkJaXJxX2Rlc2NbaXJxXS5wcm9iZV9vawk9IDE7Ci0JCWlycV9kZXNjW2lycV0ubWFza19hY2sJPSBsNzIwMF9tYXNrX2lycTsKLQkJaXJxX2Rlc2NbaXJxXS5tYXNrCT0gbDcyMDBfbWFza19pcnE7Ci0JCWlycV9kZXNjW2lycV0udW5tYXNrCT0gbDcyMDBfdW5tYXNrX2lycTsKKwkJc2V0X2lycV9jaGlwKGlycSwgJmw3MjAwX2lycV9jaGlwKTsKKwkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQpOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBkb19sZXZlbF9JUlEpOwogCX0KIAogCWluaXRfRklRKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYwppbmRleCA0MjZjMmJjLi42MGM4YjlkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9tbWMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC91ZGMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9jb3JnaS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3NoYXJwc2wuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL3NoYXJwc2xfcGFyYW0uaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvc2Nvb3AuaD4KQEAgLTE5OCwxMyArMTk5LDEwIEBACiB7CiAJc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhKiBwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CiAKLQlpZiAoKCAxIDw8IHZkZCkgJiBwX2QtPm9jcl9tYXNrKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogb25cbiIsIF9fRlVOQ1RJT05fXyk7CisJaWYgKCggMSA8PCB2ZGQpICYgcF9kLT5vY3JfbWFzaykKIAkJR1BTUjEgPSBHUElPX2JpdChDT1JHSV9HUElPX1NEX1BXUik7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBvZmZcbiIsIF9fRlVOQ1RJT05fXyk7CisJZWxzZQogCQlHUENSMSA9IEdQSU9fYml0KENPUkdJX0dQSU9fU0RfUFdSKTsKLQl9CiB9CiAKIHN0YXRpYyBpbnQgY29yZ2lfbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC0yNTksNiArMjU3LDE2IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBjb3JnaV9pbml0KHZvaWQpCiB7CisJLyogc2V0dXAgc2xlZXAgbW9kZSB2YWx1ZXMgKi8KKwlQV0VSICA9IDB4MDAwMDAwMDI7CisJUEZFUiAgPSAweDAwMDAwMDAwOworCVBSRVIgID0gMHgwMDAwMDAwMjsKKwlQR1NSMCA9IDB4MDE1OEMwMDA7CisJUEdTUjEgPSAweDAwRkYwMDgwOworCVBHU1IyID0gMHgwMDAxQzAwNDsKKwkvKiBTdG9wIDMuNk1IeiBhbmQgZHJpdmUgSElHSCB0byBQQ01DSUEgYW5kIENTICovCisJUENGUiB8PSBQQ0ZSX09QREU7CisKIAljb3JnaV9zc3Bfc2V0X21hY2hpbmZvKCZjb3JnaV9zc3BfbWFjaGluZm8pOwogCiAJcHhhX2dwaW9fbW9kZShDT1JHSV9HUElPX1VTQl9QVUxMVVAgfCBHUElPX09VVCk7CkBAIC0yODUsNDIgKzI5MywxNCBAQAogCQltaS0+YmFua1swXS5zaXplID0gKDY0KjEwMjQqMTAyNCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBjb3JnaV9pbml0X2lycSh2b2lkKQotewotCXB4YV9pbml0X2lycSgpOwotfQotCi1zdGF0aWMgc3RydWN0IG1hcF9kZXNjIGNvcmdpX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewotLyogICAgdmlydHVhbCAgICAgcGh5c2ljYWwgICAgbGVuZ3RoICAgICAgKi8KLS8qCXsgMHhmMTAwMDAwMCwgMHgwODAwMDAwMCwgMHgwMTAwMDAwMCwgTVRfREVWSUNFIH0sKi8gLyogTENEQyAocmVhZGFibGUgZm9yIFF0IGRyaXZlcikgKi8KLS8qCXsgMHhlZjcwMDAwMCwgMHgxMDgwMDAwMCwgMHgwMDAwMTAwMCwgTVRfREVWSUNFIH0sKi8gIC8qIFNDT09QICovCi0JeyAweGVmODAwMDAwLCAweDAwMDAwMDAwLCAweDAwODAwMDAwLCBNVF9ERVZJQ0UgfSwgLyogQm9vdCBGbGFzaCAqLwotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGNvcmdpX21hcF9pbyh2b2lkKQotewotCXB4YV9tYXBfaW8oKTsKLQlpb3RhYmxlX2luaXQoY29yZ2lfaW9fZGVzYyxBUlJBWV9TSVpFKGNvcmdpX2lvX2Rlc2MpKTsKLQotCS8qIHNldHVwIHNsZWVwIG1vZGUgdmFsdWVzICovCi0JUFdFUiAgPSAweDAwMDAwMDAyOwotCVBGRVIgID0gMHgwMDAwMDAwMDsKLQlQUkVSICA9IDB4MDAwMDAwMDI7Ci0JUEdTUjAgPSAweDAxNThDMDAwOwotCVBHU1IxID0gMHgwMEZGMDA4MDsKLQlQR1NSMiA9IDB4MDAwMUMwMDQ7Ci0JLyogU3RvcCAzLjZNSHogYW5kIGRyaXZlIEhJR0ggdG8gUENNQ0lBIGFuZCBDUyAqLwotCVBDRlIgfD0gUENGUl9PUERFOwotfQotCiAjaWZkZWYgQ09ORklHX01BQ0hfQ09SR0kKIE1BQ0hJTkVfU1RBUlQoQ09SR0ksICJTSEFSUCBDb3JnaSIpCiAJLnBoeXNfcmFtCT0gMHhhMDAwMDAwMCwKIAkucGh5c19pbwk9IDB4NDAwMDAwMDAsCiAJLmlvX3BnX29mZnN0CT0gKGlvX3AydigweDQwMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCiAJLmZpeHVwCQk9IGZpeHVwX2NvcmdpLAotCS5tYXBfaW8JCT0gY29yZ2lfbWFwX2lvLAotCS5pbml0X2lycQk9IGNvcmdpX2luaXRfaXJxLAorCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkuaW5pdF9pcnEJPSBweGFfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IGNvcmdpX2luaXQsCiAJLnRpbWVyCQk9ICZweGFfdGltZXIsCiBNQUNISU5FX0VORApAQCAtMzMyLDggKzMxMiw4IEBACiAJLnBoeXNfaW8JPSAweDQwMDAwMDAwLAogCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5maXh1cAkJPSBmaXh1cF9jb3JnaSwKLQkubWFwX2lvCQk9IGNvcmdpX21hcF9pbywKLQkuaW5pdF9pcnEJPSBjb3JnaV9pbml0X2lycSwKKwkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxCT0gcHhhX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBjb3JnaV9pbml0LAogCS50aW1lcgkJPSAmcHhhX3RpbWVyLAogTUFDSElORV9FTkQKQEAgLTM0NSw4ICszMjUsOCBAQAogCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKIAkuaW9fcGdfb2Zmc3QJPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKIAkuZml4dXAJCT0gZml4dXBfY29yZ2ksCi0JLm1hcF9pbwkJPSBjb3JnaV9tYXBfaW8sCi0JLmluaXRfaXJxCT0gY29yZ2lfaW5pdF9pcnEsCisJLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5pbml0X2lycQk9IHB4YV9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gY29yZ2lfaW5pdCwKIAkudGltZXIJCT0gJnB4YV90aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9sY2QuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX2xjZC5jCmluZGV4IGM1ZWZjZDAuLjM3MGRmMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX2xjZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX2xjZC5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ha2l0YS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2NvcmdpLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KQEAgLTQ2OCw2ICs0NjcsNyBAQAogewogCWlmIChnZXRfaHN5bmNfdGltZSkKIAkJc3ltYm9sX3B1dCh3MTAwZmJfZ2V0X2hzeW5jbGVuKTsKKwlnZXRfaHN5bmNfdGltZSA9IE5VTEw7CiB9CiAKIHZvaWQgY29yZ2lfd2FpdF9oc3luYyh2b2lkKQpAQCAtNDc3LDIwICs0NzcsMzkgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BYQV9TSEFSUF9DeHgwMAorc3RhdGljIHN0cnVjdCBkZXZpY2UgKnNwaXR6X3B4YWZiX2RldjsKKworc3RhdGljIGludCBpc19weGFmYl9kZXZpY2Uoc3RydWN0IGRldmljZSAqIGRldiwgdm9pZCAqIGRhdGEpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldik7CisKKwlyZXR1cm4gKHN0cm5jbXAocGRldi0+bmFtZSwgInB4YTJ4eC1mYiIsIDkpID09IDApOworfQorCiB1bnNpZ25lZCBsb25nIHNwaXR6X2dldF9oc3luY19sZW4odm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfRkJfUFhBCisJaWYgKCFzcGl0el9weGFmYl9kZXYpIHsKKwkJc3BpdHpfcHhhZmJfZGV2ID0gYnVzX2ZpbmRfZGV2aWNlKCZwbGF0Zm9ybV9idXNfdHlwZSwgTlVMTCwgTlVMTCwgaXNfcHhhZmJfZGV2aWNlKTsKKwkJaWYgKCFzcGl0el9weGFmYl9kZXYpCisJCQlyZXR1cm4gMDsKKwl9CiAJaWYgKCFnZXRfaHN5bmNfdGltZSkKIAkJZ2V0X2hzeW5jX3RpbWUgPSBzeW1ib2xfZ2V0KHB4YWZiX2dldF9oc3luY190aW1lKTsKIAlpZiAoIWdldF9oc3luY190aW1lKQorI2VuZGlmCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIHB4YWZiX2dldF9oc3luY190aW1lKCZweGFmYl9kZXZpY2UuZGV2KTsKKwlyZXR1cm4gcHhhZmJfZ2V0X2hzeW5jX3RpbWUoc3BpdHpfcHhhZmJfZGV2KTsKIH0KIAogdm9pZCBzcGl0el9wdXRfaHN5bmModm9pZCkKIHsKKwlwdXRfZGV2aWNlKHNwaXR6X3B4YWZiX2Rldik7CiAJaWYgKGdldF9oc3luY190aW1lKQogCQlzeW1ib2xfcHV0KHB4YWZiX2dldF9oc3luY190aW1lKTsKKwlzcGl0el9weGFmYl9kZXYgPSBOVUxMOworCWdldF9oc3luY190aW1lID0gTlVMTDsKIH0KIAogdm9pZCBzcGl0el93YWl0X2hzeW5jKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmMKaW5kZXggYTQ1YWFhMS4uMWQ3Njc3NjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxhc20vYXJjaC91ZGMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9weGFmYi5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL21tYy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2kyYy5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCkBAIC0yMDcsNiArMjA4LDExIEBACiAJLnJlc291cmNlCT0gcHhhZmJfcmVzb3VyY2VzLAogfTsKIAordm9pZCBfX2luaXQgc2V0X3B4YV9mYl9wYXJlbnQoc3RydWN0IGRldmljZSAqcGFyZW50X2RldikKK3sKKwlweGFmYl9kZXZpY2UuZGV2LnBhcmVudCA9IHBhcmVudF9kZXY7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGZmdWFydF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gInB4YTJ4eC11YXJ0IiwKIAkuaWQJCT0gMCwKQEAgLTI0NCw2ICsyNTAsMjUgQEAKIAlpMmNfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gaW5mbzsKIH0KIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpMnNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSAweDQwNDAwMDAwLAorCQkuZW5kCT0gMHg0MDQwMDA4MywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQJPSBJUlFfSTJTLAorCQkuZW5kCT0gSVJRX0kyUywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGkyc19kZXZpY2UgPSB7CisJLm5hbWUJCT0gInB4YTJ4eC1pMnMiLAorCS5pZAkJPSAtMSwKKwkucmVzb3VyY2UJPSBpMmNfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpMnNfcmVzb3VyY2VzKSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmcHhhbWNpX2RldmljZSwKIAkmdWRjX2RldmljZSwKQEAgLTI1Miw2ICsyNzcsNyBAQAogCSZidHVhcnRfZGV2aWNlLAogCSZzdHVhcnRfZGV2aWNlLAogCSZpMmNfZGV2aWNlLAorCSZpMnNfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgcHhhX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMKaW5kZXggNDdjZmI4Yi4uZjI1NjM4OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMKQEAgLTMwLDYgKzMwLDggQEAKIAogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbW1jLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvdWRjLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcG9vZGxlLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhZmIuaD4KIApAQCAtOTMsNiArOTUsODMgQEAKIAkucmVzb3VyY2UJPSBsb2NvbW9fcmVzb3VyY2VzLAogfTsKIAorCisvKgorICogTU1DL1NEIERldmljZQorICoKKyAqIFRoZSBjYXJkIGRldGVjdCBpbnRlcnJ1cHQgaXNuJ3QgZGVib3VuY2VkIHNvIHdlIGRlbGF5IGl0IGJ5IDI1MG1zCisgKiB0byBnaXZlIHRoZSBjYXJkIGEgY2hhbmNlIHRvIGZ1bGx5IGluc2VydC9lamVjdC4KKyAqLworc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBwb29kbGVfbWNpX3BsYXRmb3JtX2RhdGE7CisKK3N0YXRpYyBpbnQgcG9vZGxlX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxcmV0dXJuX3QgKCpwb29kbGVfZGV0ZWN0X2ludCkoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLCB2b2lkICpkYXRhKQoreworCWludCBlcnI7CisKKwkvKiBzZXR1cCBHUElPIGZvciBQWEEyNXggTU1DIGNvbnRyb2xsZXIJKi8KKwlweGFfZ3Bpb19tb2RlKEdQSU82X01NQ0NMS19NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPOF9NTUNDUzBfTUQpOworCXB4YV9ncGlvX21vZGUoUE9PRExFX0dQSU9fblNEX0RFVEVDVCB8IEdQSU9fSU4pOworCXB4YV9ncGlvX21vZGUoUE9PRExFX0dQSU9fU0RfUFdSIHwgR1BJT19PVVQpOworCisJcG9vZGxlX21jaV9wbGF0Zm9ybV9kYXRhLmRldGVjdF9kZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwKTsKKworCWVyciA9IHJlcXVlc3RfaXJxKFBPT0RMRV9JUlFfR1BJT19uU0RfREVURUNULCBwb29kbGVfZGV0ZWN0X2ludCwgU0FfSU5URVJSVVBULAorCQkJICAgICAiTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgInBvb2RsZV9tY2lfaW5pdDogTU1DL1NEOiBjYW4ndCByZXF1ZXN0IE1NQyBjYXJkIGRldGVjdCBJUlFcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJc2V0X2lycV90eXBlKFBPT0RMRV9JUlFfR1BJT19uU0RfREVURUNULCBJUlFUX0JPVEhFREdFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwb29kbGVfbWNpX3NldHBvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKK3sKKwlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEqIHBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKworCWlmICgoIDEgPDwgdmRkKSAmIHBfZC0+b2NyX21hc2spCisJCUdQU1IxID0gR1BJT19iaXQoUE9PRExFX0dQSU9fU0RfUFdSKTsKKwllbHNlCisJCUdQQ1IxID0gR1BJT19iaXQoUE9PRExFX0dQSU9fU0RfUFdSKTsKK30KKworc3RhdGljIHZvaWQgcG9vZGxlX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlmcmVlX2lycShQT09ETEVfSVJRX0dQSU9fblNEX0RFVEVDVCwgZGF0YSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgcG9vZGxlX21jaV9wbGF0Zm9ybV9kYXRhID0geworCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKKwkuaW5pdCAJCT0gcG9vZGxlX21jaV9pbml0LAorCS5zZXRwb3dlciAJPSBwb29kbGVfbWNpX3NldHBvd2VyLAorCS5leGl0CQk9IHBvb2RsZV9tY2lfZXhpdCwKK307CisKKworLyoKKyAqIFVTQiBEZXZpY2UgQ29udHJvbGxlcgorICovCitzdGF0aWMgdm9pZCBwb29kbGVfdWRjX2NvbW1hbmQoaW50IGNtZCkKK3sKKwlzd2l0Y2goY21kKQl7CisJY2FzZSBQWEEyWFhfVURDX0NNRF9DT05ORUNUOgorCQlHUFNSKFBPT0RMRV9HUElPX1VTQl9QVUxMVVApID0gR1BJT19iaXQoUE9PRExFX0dQSU9fVVNCX1BVTExVUCk7CisJCWJyZWFrOworCWNhc2UgUFhBMlhYX1VEQ19DTURfRElTQ09OTkVDVDoKKwkJR1BDUihQT09ETEVfR1BJT19VU0JfUFVMTFVQKSA9IEdQSU9fYml0KFBPT0RMRV9HUElPX1VTQl9QVUxMVVApOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHhhMnh4X3VkY19tYWNoX2luZm8gdWRjX2luZm8gX19pbml0ZGF0YSA9IHsKKwkvKiBubyBjb25uZWN0IEdQSU87IHBvb2RsZSBjYW4ndCB0ZWxsIGNvbm5lY3Rpb24gc3RhdHVzICovCisJLnVkY19jb21tYW5kCQk9IHBvb2RsZV91ZGNfY29tbWFuZCwKK307CisKKwogLyogUFhBRkIgZGV2aWNlICovCiBzdGF0aWMgc3RydWN0IHB4YWZiX21hY2hfaW5mbyBwb29kbGVfZmJfaW5mbyBfX2luaXRkYXRhID0gewogCS5waXhjbG9jawk9IDE0NDcwMCwKQEAgLTEyNiw2ICsyMDUsMTUgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAorCS8qIHNldHVwIHNsZWVwIG1vZGUgdmFsdWVzICovCisJUFdFUiAgPSAweDAwMDAwMDAyOworCVBGRVIgID0gMHgwMDAwMDAwMDsKKwlQUkVSICA9IDB4MDAwMDAwMDI7CisJUEdTUjAgPSAweDAwMDA4MDAwOworCVBHU1IxID0gMHgwMDNGMDIwMjsKKwlQR1NSMiA9IDB4MDAwMUMwMDA7CisJUENGUiB8PSBQQ0ZSX09QREU7CisKIAkvKiBjcHUgaW5pdGlhbGl6ZSAqLwogCS8qIFBnc3IgUmVnaXN0ZXIgKi8KICAgCVBHU1IwID0gMHgwMTQ2ZGQ4MDsKQEAgLTE1NSw2ICsyNDMsOSBAQAogICAgICAgICBHUFNSMiA9IDB4MDAwMDAwMDA7CiAKIAlzZXRfcHhhX2ZiX2luZm8oJnBvb2RsZV9mYl9pbmZvKTsKKwlweGFfZ3Bpb19tb2RlKFBPT0RMRV9HUElPX1VTQl9QVUxMVVAgfCBHUElPX09VVCk7CisJcHhhX3NldF91ZGNfaW5mbygmdWRjX2luZm8pOworCXB4YV9zZXRfbWNpX2luZm8oJnBvb2RsZV9tY2lfcGxhdGZvcm1fZGF0YSk7CiAKIAlzY29vcF9udW0gPSAxOwogCXNjb29wX2RldnMgPSAmcG9vZGxlX3BjbWNpYV9zY29vcFswXTsKQEAgLTE3MSwzMiArMjYyLDEyIEBACiAJc2hhcnBzbF9zYXZlX3BhcmFtKCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgcG9vZGxlX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewotIC8qIHZpcnR1YWwgICAgIHBoeXNpY2FsICAgIGxlbmd0aCAgICAgICAgICAgICAgICAgICAqLwotICB7IDB4ZWY4MDAwMDAsIDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIE1UX0RFVklDRSB9LCAvKiBCb290IEZsYXNoICovCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgcG9vZGxlX21hcF9pbyh2b2lkKQotewotCXB4YV9tYXBfaW8oKTsKLQlpb3RhYmxlX2luaXQocG9vZGxlX2lvX2Rlc2MsIEFSUkFZX1NJWkUocG9vZGxlX2lvX2Rlc2MpKTsKLQotCS8qIHNldHVwIHNsZWVwIG1vZGUgdmFsdWVzICovCi0JUFdFUiAgPSAweDAwMDAwMDAyOwotCVBGRVIgID0gMHgwMDAwMDAwMDsKLQlQUkVSICA9IDB4MDAwMDAwMDI7Ci0JUEdTUjAgPSAweDAwMDA4MDAwOwotCVBHU1IxID0gMHgwMDNGMDIwMjsKLQlQR1NSMiA9IDB4MDAwMUMwMDA7Ci0JUENGUiB8PSBQQ0ZSX09QREU7Ci19Ci0KIE1BQ0hJTkVfU1RBUlQoUE9PRExFLCAiU0hBUlAgUG9vZGxlIikKIAkucGh5c19yYW0JPSAweGEwMDAwMDAwLAogCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKIAkuaW9fcGdfb2Zmc3QJPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKIAkuZml4dXAJCT0gZml4dXBfcG9vZGxlLAotCS5tYXBfaW8JCT0gcG9vZGxlX21hcF9pbywKKwkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCiAJLmluaXRfaXJxCT0gcHhhX2luaXRfaXJxLAogCS50aW1lcgkJPSAmcHhhX3RpbWVyLAogCS5pbml0X21hY2hpbmUJPSBwb29kbGVfaW5pdCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCmluZGV4IDU2OGFmZTNkLi5kMGFiNDI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tbWMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC91ZGMuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9vaGNpLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhZmIuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ha2l0YS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3NwaXR6Lmg+CkBAIC0zMDQsNyArMzAzLDYgQEAKIAkmc3BpdHprYmRfZGV2aWNlLAogCSZzcGl0enRzX2RldmljZSwKIAkmc3BpdHpibF9kZXZpY2UsCi0JJnNwaXR6YmF0dGVyeV9kZXZpY2UsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgY29tbW9uX2luaXQodm9pZCkKQEAgLTMyOCw3ICszMjYsNyBAQAogCiAJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CiAJcHhhX3NldF9tY2lfaW5mbygmc3BpdHpfbWNpX3BsYXRmb3JtX2RhdGEpOwotCXB4YWZiX2RldmljZS5kZXYucGFyZW50ID0gJnNwaXR6c3NwX2RldmljZS5kZXY7CisJc2V0X3B4YV9mYl9wYXJlbnQoJnNwaXR6c3NwX2RldmljZS5kZXYpOwogCXNldF9weGFfZmJfaW5mbygmc3BpdHpfcHhhZmJfaW5mbyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWcKaW5kZXggMDY4MDdjNi4uYzc5NmJjZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWcKQEAgLTEyLDYgKzEyLDcgQEAKIGNvbmZpZyBBUkNIX0JBU1QKIAlib29sICJTaW10ZWMgRWxlY3Ryb25pY3MgQkFTVCAoRUIyNDEwSVRYKSIKIAlzZWxlY3QgQ1BVX1MzQzI0MTAKKwlzZWxlY3QgSVNBCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBTaW10ZWMgRWxlY3Ryb25pY3MgRUIyNDEwSVRYCiAJICBkZXZlbG9wbWVudCBib2FyZCAoYWxzbyBrbm93biBhcyBCQVNUKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suYwppbmRleCBmNTk2MDgyLi44YjNkNWRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suYwpAQCAtOTgsNyArOTgsMTAgQEAKIAlzdHJ1Y3QgY2xrICpjbGsgPSBFUlJfUFRSKC1FTk9FTlQpOwogCWludCBpZG5vOwogCi0JaWRubyA9IChkZXYgPT0gTlVMTCkgPyAtMSA6IHRvX3BsYXRmb3JtX2RldmljZShkZXYpLT5pZDsKKwlpZiAoZGV2ID09IE5VTEwgfHwgZGV2LT5idXMgIT0gJnBsYXRmb3JtX2J1c190eXBlKQorCQlpZG5vID0gLTE7CisJZWxzZQorCQlpZG5vID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldiktPmlkOwogCiAJZG93bigmY2xvY2tzX3NlbSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFudWJpcy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW51YmlzLmMKaW5kZXggZjg3YWEwYi4uNWFlODBmNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW51YmlzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW51YmlzLmMKQEAgLTEyLDYgKzEyLDcgQEAKICAqCiAgKiBNb2RpZmljYXRpb25zOgogICoJMDItTWF5LTIwMDUgQkpEICBDb3BpZWQgZnJvbSBtYWNoLWJhc3QuYworICoJMjAtU2VwLTIwMDUgQkpEICBBZGRlZCBzdGF0aWMgdG8gbm9uLWV4cG9ydGVkIGl0ZW1zCiAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xMjQsNyArMTI1LDcgQEAKIHN0YXRpYyBpbnQgY2hpcDBfbWFwW10gICAgICA9IHsgMCB9Owogc3RhdGljIGludCBjaGlwMV9tYXBbXSAgICAgID0geyAxIH07CiAKLXN0cnVjdCBtdGRfcGFydGl0aW9uIGFudWJpc19kZWZhdWx0X25hbmRfcGFydFtdID0geworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGFudWJpc19kZWZhdWx0X25hbmRfcGFydFtdID0gewogCVswXSA9IHsKIAkJLm5hbWUJPSAiQm9vdCBBZ2VudCIsCiAJCS5zaXplCT0gU1pfMTZLLApAQCAtMjMyLDcgKzIzMyw3IEBACiAJLmNsb2Nrc19jb3VudCAgPSBBUlJBWV9TSVpFKGFudWJpc19jbG9ja3MpCiB9OwogCi12b2lkIF9faW5pdCBhbnViaXNfbWFwX2lvKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgYW51YmlzX21hcF9pbyh2b2lkKQogewogCS8qIGluaXRpYWxpc2UgdGhlIGNsb2NrcyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMKaW5kZXggMWEzMzY3ZC4uN2I1MWJmZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYwpAQCAtMzEsNiArMzEsNyBAQAogICogICAgIDE3LUp1bC0yMDA1IEJKRCAgQ2hhbmdlZCB0byBwbGF0Zm9ybSBkZXZpY2UgZm9yIFN1cGVySU8gMTY1NTBzCiAgKiAgICAgMjUtSnVsLTIwMDUgQkpEICBSZW1vdmVkIEFTSVggc3RhdGljIG1hcHBpbmdzCiAgKiAgICAgMjctSnVsLTIwMDUgQkpEICBFbnN1cmUgbWF4aW11bSBmcmVxdWVuY3kgb2YgaTJjIGJ1cworICogICAgIDIwLVNlcC0yMDA1IEJKRCAgQWRkZWQgc3RhdGljIHRvIG5vbi1leHBvcnRlZCBpdGVtcwogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMjI5LDcgKzIzMCw3IEBACiBzdGF0aWMgaW50IGNoaXAxX21hcFtdID0geyAyIH07CiBzdGF0aWMgaW50IGNoaXAyX21hcFtdID0geyAzIH07CiAKLXN0cnVjdCBtdGRfcGFydGl0aW9uIGJhc3RfZGVmYXVsdF9uYW5kX3BhcnRbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBiYXN0X2RlZmF1bHRfbmFuZF9wYXJ0W10gPSB7CiAJWzBdID0gewogCQkubmFtZQk9ICJCb290IEFnZW50IiwKIAkJLnNpemUJPSBTWl8xNkssCkBAIC0zMDYsOSArMzA3LDkgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzM2MyNDEwX3BsYXRmb3JtX25hbmQgYmFzdF9uYW5kX2luZm8gPSB7Ci0JLnRhY2xzCQk9IDQwLAotCS50d3JwaDAJCT0gODAsCi0JLnR3cnBoMQkJPSA4MCwKKwkudGFjbHMJCT0gMzAsCisJLnR3cnBoMAkJPSA2MCwKKwkudHdycGgxCQk9IDYwLAogCS5ucl9zZXRzCT0gQVJSQVlfU0laRShiYXN0X25hbmRfc2V0cyksCiAJLnNldHMJCT0gYmFzdF9uYW5kX3NldHMsCiAJLnNlbGVjdF9jaGlwCT0gYmFzdF9uYW5kX3NlbGVjdCwKQEAgLTMzOSw3ICszNDAsNyBAQAogICogYmV0dGVyIElPIHJvdXRpbmVzIGNhbiBiZSB3cml0dGVuIGFuZCB0ZXN0ZWQKICovCiAKLXN0cnVjdCBkbTkwMDBfcGxhdF9kYXRhIGJhc3RfZG05a19wbGF0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZG05MDAwX3BsYXRfZGF0YSBiYXN0X2RtOWtfcGxhdGRhdGEgPSB7CiAJLmZsYWdzCQk9IERNOTAwMF9QTEFURl8xNkJJVE9OTFkKIH07CiAKQEAgLTQyOCw3ICs0MjksNyBAQAogCS5jbG9ja3NfY291bnQgID0gQVJSQVlfU0laRShiYXN0X2Nsb2NrcykKIH07CiAKLXZvaWQgX19pbml0IGJhc3RfbWFwX2lvKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgYmFzdF9tYXBfaW8odm9pZCkKIHsKIAkvKiBpbml0aWFsaXNlIHRoZSBjbG9ja3MgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtaDE5NDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMKaW5kZXggNmZmMTg4OS4uZmIzY2IwMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtaDE5NDAuYwpAQCAtMjQsNiArMjQsNyBAQAogICogICAgIDEwLUphbi0yMDA1IEJKRCAgUmVtb3ZlZCBpbmNsdWRlIG9mIHMzYzI0MTAuaAogICogICAgIDE0LUphbi0yMDA1IEJKRCAgQWRkZWQgY2xvY2sgaW5pdAogICogICAgIDEwLU1hci0yMDA1IExDVlIgQ2hhbmdlZCBTM0MyNDEwX1ZBIHRvIFMzQzI0WFhfVkEKKyAqICAgICAyMC1TZXAtMjAwNSBCSkQgIEFkZGVkIHN0YXRpYyB0byBub24tZXhwb3J0ZWQgaXRlbXMKICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTE0Nyw3ICsxNDgsNyBAQAogCS5kZXZpY2VzX2NvdW50ID0gQVJSQVlfU0laRShoMTk0MF9kZXZpY2VzKQogfTsKIAotdm9pZCBfX2luaXQgaDE5NDBfbWFwX2lvKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgaDE5NDBfbWFwX2lvKHZvaWQpCiB7CiAJczNjMjR4eF9pbml0X2lvKGgxOTQwX2lvZGVzYywgQVJSQVlfU0laRShoMTk0MF9pb2Rlc2MpKTsKIAlzM2MyNHh4X2luaXRfY2xvY2tzKDApOwpAQCAtMTU1LDEzICsxNTYsMTMgQEAKIAlzM2MyNHh4X3NldF9ib2FyZCgmaDE5NDBfYm9hcmQpOwogfQogCi12b2lkIF9faW5pdCBoMTk0MF9pbml0X2lycSh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGgxOTQwX2luaXRfaXJxKHZvaWQpCiB7CiAJczNjMjR4eF9pbml0X2lycSgpOwogCiB9CiAKLXZvaWQgX19pbml0IGgxOTQwX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBoMTk0MF9pbml0KHZvaWQpCiB7CiAJc2V0X3MzYzI0MTBmYl9pbmZvKCZoMTk0MF9sY2RjZmcpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtbjMwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYwppbmRleCA2NmJmNWJiLi41YzBmMmIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYwpAQCAtOTcsNyArOTcsNyBAQAogCS5kZXZpY2VzX2NvdW50ID0gQVJSQVlfU0laRShuMzBfZGV2aWNlcykKIH07CiAKLXZvaWQgX19pbml0IG4zMF9tYXBfaW8odm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBuMzBfbWFwX2lvKHZvaWQpCiB7CiAJczNjMjR4eF9pbml0X2lvKG4zMF9pb2Rlc2MsIEFSUkFZX1NJWkUobjMwX2lvZGVzYykpOwogCXMzYzI0eHhfaW5pdF9jbG9ja3MoMCk7CkBAIC0xMDUsMTQgKzEwNSwxNCBAQAogCXMzYzI0eHhfc2V0X2JvYXJkKCZuMzBfYm9hcmQpOwogfQogCi12b2lkIF9faW5pdCBuMzBfaW5pdF9pcnEodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBuMzBfaW5pdF9pcnEodm9pZCkKIHsKIAlzM2MyNHh4X2luaXRfaXJxKCk7CiB9CiAKIC8qIEdQQjMgaXMgdGhlIGxpbmUgdGhhdCBjb250cm9scyB0aGUgcHVsbC11cCBmb3IgdGhlIFVTQiBEKyBsaW5lICovCiAKLXZvaWQgX19pbml0IG4zMF9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgbjMwX2luaXQodm9pZCkKIHsKIAlzM2NfZGV2aWNlX2kyYy5kZXYucGxhdGZvcm1fZGF0YSA9ICZuMzBfaTJjY2ZnOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uZXhjb2Rlci5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtbmV4Y29kZXIuYwppbmRleCBkMjRjMjQyLi5jMjJmODIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uZXhjb2Rlci5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW5leGNvZGVyLmMKQEAgLTEzNiw3ICsxMzYsNyBAQAogCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEYyLCBTM0MyNDEwX0dQRjJfT1VUUCk7IC8vIENBTV9HUElPNiA9PiBDQU1fUFdSRE4KIH0KIAotdm9pZCBfX2luaXQgbmV4Y29kZXJfbWFwX2lvKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgbmV4Y29kZXJfbWFwX2lvKHZvaWQpCiB7CiAJczNjMjR4eF9pbml0X2lvKG5leGNvZGVyX2lvZGVzYywgQVJSQVlfU0laRShuZXhjb2Rlcl9pb2Rlc2MpKTsKIAlzM2MyNHh4X2luaXRfY2xvY2tzKDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtb3RvbS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtb3RvbS5jCmluZGV4IGQ5MDFlZDQuLmFkMTQ1OWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW90b20uYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vdG9tLmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogfTsKIAogCi12b2lkIF9faW5pdCBvdG9tMTFfbWFwX2lvKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgb3RvbTExX21hcF9pbyh2b2lkKQogewogCXMzYzI0eHhfaW5pdF9pbyhvdG9tMTFfaW9kZXNjLCBBUlJBWV9TSVpFKG90b20xMV9pb2Rlc2MpKTsKIAlzM2MyNHh4X2luaXRfY2xvY2tzKDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtcngzNzE1LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1yeDM3MTUuYwppbmRleCBhNzNkNjFjLi4yMmQ5ZTA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1yeDM3MTUuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1yeDM3MTUuYwpAQCAtMTYsNiArMTYsNyBAQAogICoJMTQtSmFuLTIwMDUgQkpEICBBZGRlZCBuZXcgY2xvY2sgaW5pdAogICoJMTAtTWFyLTIwMDUgTENWUiBDaGFuZ2VkIFMzQzI0MTBfVkEgdG8gUzNDMjRYWF9WQQogICoJMTQtTWFyLTIwMDUgQkpEICBGaXhlZCBfX2lvbWVtIHdhcm5pbmdzCisgKgkyMC1TZXAtMjAwNSBCSkQgIEFkZGVkIHN0YXRpYyB0byBub24tZXhwb3J0ZWQgaXRlbXMKICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTEwOCw3ICsxMDksNyBAQAogCS5kZXZpY2VzX2NvdW50ID0gQVJSQVlfU0laRShyeDM3MTVfZGV2aWNlcykKIH07CiAKLXZvaWQgX19pbml0IHJ4MzcxNV9tYXBfaW8odm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCByeDM3MTVfbWFwX2lvKHZvaWQpCiB7CiAJczNjMjR4eF9pbml0X2lvKHJ4MzcxNV9pb2Rlc2MsIEFSUkFZX1NJWkUocngzNzE1X2lvZGVzYykpOwogCXMzYzI0eHhfaW5pdF9jbG9ja3MoMTY5MzQwMDApOwpAQCAtMTE2LDcgKzExNyw3IEBACiAJczNjMjR4eF9zZXRfYm9hcmQoJnJ4MzcxNV9ib2FyZCk7CiB9CiAKLXZvaWQgX19pbml0IHJ4MzcxNV9pbml0X2lycSh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHJ4MzcxNV9pbml0X2lycSh2b2lkKQogewogCXMzYzI0eHhfaW5pdF9pcnEoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQxMC5jCmluZGV4IDY3ZTkwM2EuLjJlZGE1NWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTAuYwpAQCAtMjgsNiArMjgsNyBAQAogICogQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKICAqIDEwLU1hci0yMDA1IExDVlIgIENoYW5nZWQgUzNDMjQxMF9WQSB0byBTM0MyNFhYX1ZBCisgKiAyMC1TZXAtMjAwNSBCSkQgIEFkZGVkIHN0YXRpYyB0byBub24tZXhwb3J0ZWQgaXRlbXMKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTk3LDcgKzk4LDcgQEAKIAkuZGV2aWNlc19jb3VudCA9IEFSUkFZX1NJWkUoc21kazI0MTBfZGV2aWNlcykKIH07CiAKLXZvaWQgX19pbml0IHNtZGsyNDEwX21hcF9pbyh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHNtZGsyNDEwX21hcF9pbyh2b2lkKQogewogCXMzYzI0eHhfaW5pdF9pbyhzbWRrMjQxMF9pb2Rlc2MsIEFSUkFZX1NJWkUoc21kazI0MTBfaW9kZXNjKSk7CiAJczNjMjR4eF9pbml0X2Nsb2NrcygwKTsKQEAgLTEwNSw3ICsxMDYsNyBAQAogCXMzYzI0eHhfc2V0X2JvYXJkKCZzbWRrMjQxMF9ib2FyZCk7CiB9CiAKLXZvaWQgX19pbml0IHNtZGsyNDEwX2luaXRfaXJxKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgc21kazI0MTBfaW5pdF9pcnEodm9pZCkKIHsKIAlzM2MyNHh4X2luaXRfaXJxKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQ0MC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0NDAuYwppbmRleCAzNTc1MjIxLi43MjJlZjQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQ0MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDQwLmMKQEAgLTE4LDYgKzE4LDcgQEAKICAqCTIyLUZlYi0yMDA1IEJKRCAgIFVwZGF0ZWQgZm9yIDIuNi4xMS1yYzUgcmVsZXNhCiAgKgkxMC1NYXItMjAwNSBMQ1ZSICBSZXBsYWNlZCBTM0MyNDEwX1ZBIGJ5IFMzQzI0WFhfVkEKICAqCTE0LU1hci0yMDA1IEJKRAkgIHZvaWQgX19pb21lbSBmaXhlcworICoJMjAtU2VwLTIwMDUgQkpEICAgQWRkZWQgc3RhdGljIHRvIG5vbi1leHBvcnRlZCBpdGVtcwogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtOTgsNyArOTksNyBAQAogCS5kZXZpY2VzX2NvdW50ID0gQVJSQVlfU0laRShzbWRrMjQ0MF9kZXZpY2VzKQogfTsKIAotdm9pZCBfX2luaXQgc21kazI0NDBfbWFwX2lvKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgc21kazI0NDBfbWFwX2lvKHZvaWQpCiB7CiAJczNjMjR4eF9pbml0X2lvKHNtZGsyNDQwX2lvZGVzYywgQVJSQVlfU0laRShzbWRrMjQ0MF9pb2Rlc2MpKTsKIAlzM2MyNHh4X2luaXRfY2xvY2tzKDE2OTM0NDAwKTsKQEAgLTEwNiw3ICsxMDcsNyBAQAogCXMzYzI0eHhfc2V0X2JvYXJkKCZzbWRrMjQ0MF9ib2FyZCk7CiB9CiAKLXZvaWQgX19pbml0IHNtZGsyNDQwX21hY2hpbmVfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHNtZGsyNDQwX21hY2hpbmVfaW5pdCh2b2lkKQogewogCS8qIENvbmZpZ3VyZSB0aGUgTEVEcyAoZXZlbiBpZiB3ZSBoYXZlIG5vIExFRCBzdXBwb3J0KSovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXZyMTAwMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnIxMDAwLmMKaW5kZXggOGY5YWIyOC4uNDZiMjU5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnIxMDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnIxMDAwLmMKQEAgLTI4LDYgKzI4LDcgQEAKICAqICAgICAxMC1NYXItMjAwNSBMQ1ZSIENoYW5nZWQgUzNDMjQxMF9WQSB0byBTM0MyNFhYX1ZBCiAgKiAgICAgMTQtTWFyLTIwMDYgQkpEICB2b2lkIF9faW9tZW0gZml4ZXMKICAqICAgICAyMi1KdW4tMjAwNiBCSkQgIEFkZGVkIERNOTAwMCBwbGF0Zm9ybSBpbmZvcm1hdGlvbgorICogICAgIDIwLVNlcC0yMDA1IEJKRCAgQWRkZWQgc3RhdGljIHRvIG5vbi1leHBvcnRlZCBpdGVtcwogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMjg3LDcgKzI4OCw3IEBACiAgKiBiZXR0ZXIgSU8gcm91dGluZXMgY2FuIGJlIHdyaXR0ZW4gYW5kIHRlc3RlZAogKi8KIAotc3RydWN0IGRtOTAwMF9wbGF0X2RhdGEgdnIxMDAwX2RtOWtfcGxhdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IGRtOTAwMF9wbGF0X2RhdGEgdnIxMDAwX2RtOWtfcGxhdGRhdGEgPSB7CiAJLmZsYWdzCQk9IERNOTAwMF9QTEFURl8xNkJJVE9OTFksCiB9OwogCkBAIC0zNDcsNyArMzQ4LDcgQEAKIAlzM2MyNDEwX2dwaW9fc2V0cGluKFMzQzI0MTBfR1BCOSwgMSk7CiB9CiAKLXZvaWQgX19pbml0IHZyMTAwMF9tYXBfaW8odm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCB2cjEwMDBfbWFwX2lvKHZvaWQpCiB7CiAJLyogaW5pdGlhbGlzZSBjbG9jayBzb3VyY2VzICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC5jCmluZGV4IDBiODg5OTMuLmE4YmY1ZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAuYwpAQCAtMTI1LDkgKzEyNSw2IEBACiAJJnMzY191YXJ0MgogfTsKIAotLyogc3RvcmUgb3VyIHVhcnQgZGV2aWNlcyBmb3IgdGhlIHNlcmlhbCBkcml2ZXIgY29uc29sZSAqLwotc3RydWN0IHBsYXRmb3JtX2RldmljZSAqczNjMjQxMF91YXJ0X2RldmljZXNbM107Ci0KIHN0YXRpYyBpbnQgczNjMjQxMF91YXJ0X2NvdW50ID0gMDsKIAogLyogdWFydCByZWdpc3RyYXRpb24gcHJvY2VzcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLmMKaW5kZXggZDRjODI4MS4uODMzZmEzNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC5jCkBAIC0xNTEsNyArMTUxLDcgQEAKIAogI2lmZGVmIENPTkZJR19QTQogCi1zdHJ1Y3Qgc2xlZXBfc2F2ZSBzM2MyNDQwX3NsZWVwW10gPSB7CitzdGF0aWMgc3RydWN0IHNsZWVwX3NhdmUgczNjMjQ0MF9zbGVlcFtdID0gewogCVNBVkVfSVRFTShTM0MyNDQwX0RTQzApLAogCVNBVkVfSVRFTShTM0MyNDQwX0RTQzEpLAogCVNBVkVfSVRFTShTM0MyNDQwX0dQSkRBVCksCkBAIC0yNjAsNyArMjYwLDcgQEAKICAqIGFzIGEgZHJpdmVyIHdoaWNoIG1heSBzdXBwb3J0IGJvdGggMjQxMCBhbmQgMjQ0MCBtYXkgdHJ5IGFuZCB1c2UgaXQuCiAqLwogCi1pbnQgX19pbml0IHMzYzI0NDBfY29yZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBzM2MyNDQwX2NvcmVfaW5pdCh2b2lkKQogewogCXJldHVybiBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnMzYzI0NDBfc3lzY2xhc3MpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC90aW1lLmMKaW5kZXggYzBhY2ZiMi4uOGEwMGUzYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdGltZS5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2Nsb2NrLmg+CiAKICNpbmNsdWRlICJjbG9jay5oIgorI2luY2x1ZGUgImNwdS5oIgogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1lcl9zdGFydHZhbDsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyX3VzZWNfdGlja3M7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdXNiLXNpbXRlYy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3VzYi1zaW10ZWMuYwppbmRleCBmMDIxZmQ4Li41MDk4YjUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdXNiLXNpbXRlYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC91c2Itc2ltdGVjLmMKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAogI2luY2x1ZGUgImRldnMuaCIKICNpbmNsdWRlICJ1c2Itc2ltdGVjLmgiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCmluZGV4IDhjYjY5MTEuLjZlY2FiN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCkBAIC0xMTEsMTIgKzExMSwxMSBAQAogCiBzdGF0aWMgdm9pZCBjb2xsaWVfc2V0X3ZwcChpbnQgdnBwKQogewotCXdyaXRlX3Njb29wX3JlZyhTQ09PUF9HUENSLCByZWFkX3Njb29wX3JlZyhTQ09PUF9HUENSKSB8IENPTExJRV9TQ1BfVlBFTik7Ci0JaWYgKHZwcCkgewotCQl3cml0ZV9zY29vcF9yZWcoU0NPT1BfR1BXUiwgcmVhZF9zY29vcF9yZWcoU0NPT1BfR1BXUikgfCBDT0xMSUVfU0NQX1ZQRU4pOwotCX0gZWxzZSB7Ci0JCXdyaXRlX3Njb29wX3JlZyhTQ09PUF9HUFdSLCByZWFkX3Njb29wX3JlZyhTQ09PUF9HUFdSKSAmIH5DT0xMSUVfU0NQX1ZQRU4pOwotCX0KKwl3cml0ZV9zY29vcF9yZWcoJmNvbGxpZXNjb29wX2RldmljZS5kZXYsIFNDT09QX0dQQ1IsIHJlYWRfc2Nvb3BfcmVnKCZjb2xsaWVzY29vcF9kZXZpY2UuZGV2LCBTQ09PUF9HUENSKSB8IENPTExJRV9TQ1BfVlBFTik7CisJaWYgKHZwcCkKKwkJd3JpdGVfc2Nvb3BfcmVnKCZjb2xsaWVzY29vcF9kZXZpY2UuZGV2LCBTQ09PUF9HUFdSLCByZWFkX3Njb29wX3JlZygmY29sbGllc2Nvb3BfZGV2aWNlLmRldiwgU0NPT1BfR1BXUikgfCBDT0xMSUVfU0NQX1ZQRU4pOworCWVsc2UKKwkJd3JpdGVfc2Nvb3BfcmVnKCZjb2xsaWVzY29vcF9kZXZpY2UuZGV2LCBTQ09PUF9HUFdSLCByZWFkX3Njb29wX3JlZygmY29sbGllc2Nvb3BfZGV2aWNlLmRldiwgU0NPT1BfR1BXUikgJiB+Q09MTElFX1NDUF9WUEVOKTsKIH0KIAogc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIGNvbGxpZV9mbGFzaF9kYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5oIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5oCmluZGV4IDI3OWUzYWYuLmYwODVkNjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuaAorKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmgKQEAgLTM5LDMgKzM5LDYgQEAKIAogc3RydWN0IGlyZGFfcGxhdGZvcm1fZGF0YTsKIHZvaWQgc2ExMXgwX3NldF9pcmRhX2RhdGEoc3RydWN0IGlyZGFfcGxhdGZvcm1fZGF0YSAqaXJkYSk7CisKK3N0cnVjdCBtY3BfcGxhdF9kYXRhOwordm9pZCBzYTExeDBfc2V0X21jcF9kYXRhKHN0cnVjdCBtY3BfcGxhdF9kYXRhICpkYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYwppbmRleCAzYzg4NjJmLi5hMzBlMDQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9sZWRzLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvYW1iYS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9hbWJhX2NsY2QuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvYXJtX3RpbWVyLmg+CkBAIC01Miw4ICs1MSw5IEBACiAgKgogICogU2V0dXAgYSBWQSBmb3IgdGhlIFZlcnNhdGlsZSBWZWN0b3JlZCBJbnRlcnJ1cHQgQ29udHJvbGxlci4KICAqLwotI2RlZmluZSBWQV9WSUNfQkFTRQkJIElPX0FERFJFU1MoVkVSU0FUSUxFX1ZJQ19CQVNFKQotI2RlZmluZSBWQV9TSUNfQkFTRQkJIElPX0FERFJFU1MoVkVSU0FUSUxFX1NJQ19CQVNFKQorI2RlZmluZSBfX2lvX2FkZHJlc3MobikJCV9faW8oSU9fQUREUkVTUyhuKSkKKyNkZWZpbmUgVkFfVklDX0JBU0UJCV9faW9fYWRkcmVzcyhWRVJTQVRJTEVfVklDX0JBU0UpCisjZGVmaW5lIFZBX1NJQ19CQVNFCQlfX2lvX2FkZHJlc3MoVkVSU0FUSUxFX1NJQ19CQVNFKQogCiBzdGF0aWMgdm9pZCB2aWNfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKQEAgLTIxNCw3ICsyMTQsNyBAQAogCWlvdGFibGVfaW5pdCh2ZXJzYXRpbGVfaW9fZGVzYywgQVJSQVlfU0laRSh2ZXJzYXRpbGVfaW9fZGVzYykpOwogfQogCi0jZGVmaW5lIFZFUlNBVElMRV9SRUZDT1VOVEVSCShJT19BRERSRVNTKFZFUlNBVElMRV9TWVNfQkFTRSkgKyBWRVJTQVRJTEVfU1lTXzI0TUh6X09GRlNFVCkKKyNkZWZpbmUgVkVSU0FUSUxFX1JFRkNPVU5URVIJKF9faW9fYWRkcmVzcyhWRVJTQVRJTEVfU1lTX0JBU0UpICsgVkVSU0FUSUxFX1NZU18yNE1Iel9PRkZTRVQpCiAKIC8qCiAgKiBUaGlzIGlzIHRoZSBWZXJzYXRpbGUgc2NoZWRfY2xvY2sgaW1wbGVtZW50YXRpb24uICBUaGlzIGhhcwpAQCAtMjMxLDcgKzIzMSw3IEBACiB9CiAKIAotI2RlZmluZSBWRVJTQVRJTEVfRkxBU0hDVFJMICAgIChJT19BRERSRVNTKFZFUlNBVElMRV9TWVNfQkFTRSkgKyBWRVJTQVRJTEVfU1lTX0ZMQVNIX09GRlNFVCkKKyNkZWZpbmUgVkVSU0FUSUxFX0ZMQVNIQ1RSTCAgICAoX19pb19hZGRyZXNzKFZFUlNBVElMRV9TWVNfQkFTRSkgKyBWRVJTQVRJTEVfU1lTX0ZMQVNIX09GRlNFVCkKIAogc3RhdGljIGludCB2ZXJzYXRpbGVfZmxhc2hfaW5pdCh2b2lkKQogewpAQCAtMzA5LDcgKzMwOSw3IEBACiAJLnJlc291cmNlCT0gc21jOTF4X3Jlc291cmNlcywKIH07CiAKLSNkZWZpbmUgVkVSU0FUSUxFX1NZU01DSQkoSU9fQUREUkVTUyhWRVJTQVRJTEVfU1lTX0JBU0UpICsgVkVSU0FUSUxFX1NZU19NQ0lfT0ZGU0VUKQorI2RlZmluZSBWRVJTQVRJTEVfU1lTTUNJCShfX2lvX2FkZHJlc3MoVkVSU0FUSUxFX1NZU19CQVNFKSArIFZFUlNBVElMRV9TWVNfTUNJX09GRlNFVCkKIAogdW5zaWduZWQgaW50IG1tY19zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtMzQzLDExICszNDMsMTEgQEAKIAogc3RhdGljIHZvaWQgdmVyc2F0aWxlX29zY3Zjb19zZXQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgaWNzdDMwN192Y28gdmNvKQogewotCXVuc2lnbmVkIGxvbmcgc3lzX2xvY2sgPSBJT19BRERSRVNTKFZFUlNBVElMRV9TWVNfQkFTRSkgKyBWRVJTQVRJTEVfU1lTX0xPQ0tfT0ZGU0VUOworCXZvaWQgX19pb21lbSAqc3lzX2xvY2sgPSBfX2lvX2FkZHJlc3MoVkVSU0FUSUxFX1NZU19CQVNFKSArIFZFUlNBVElMRV9TWVNfTE9DS19PRkZTRVQ7CiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9WRVJTQVRJTEVfUEIpCi0JdW5zaWduZWQgbG9uZyBzeXNfb3NjID0gSU9fQUREUkVTUyhWRVJTQVRJTEVfU1lTX0JBU0UpICsgVkVSU0FUSUxFX1NZU19PU0M0X09GRlNFVDsKKwl2b2lkIF9faW9tZW0gKnN5c19vc2MgPSBfX2lvX2FkZHJlc3MoVkVSU0FUSUxFX1NZU19CQVNFKSArIFZFUlNBVElMRV9TWVNfT1NDNF9PRkZTRVQ7CiAjZWxpZiBkZWZpbmVkKENPTkZJR19NQUNIX1ZFUlNBVElMRV9BQikKLQl1bnNpZ25lZCBsb25nIHN5c19vc2MgPSBJT19BRERSRVNTKFZFUlNBVElMRV9TWVNfQkFTRSkgKyBWRVJTQVRJTEVfU1lTX09TQzFfT0ZGU0VUOworCXZvaWQgX19pb21lbSAqc3lzX29zYyA9IF9faW9fYWRkcmVzcyhWRVJTQVRJTEVfU1lTX0JBU0UpICsgVkVSU0FUSUxFX1NZU19PU0MxX09GRlNFVDsKICNlbmRpZgogCXUzMiB2YWw7CiAKQEAgLTQ4Myw3ICs0ODMsNyBAQAogICovCiBzdGF0aWMgc3RydWN0IGNsY2RfcGFuZWwgKnZlcnNhdGlsZV9jbGNkX3BhbmVsKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBzeXNfY2xjZCA9IElPX0FERFJFU1MoVkVSU0FUSUxFX1NZU19CQVNFKSArIFZFUlNBVElMRV9TWVNfQ0xDRF9PRkZTRVQ7CisJdm9pZCBfX2lvbWVtICpzeXNfY2xjZCA9IF9faW9fYWRkcmVzcyhWRVJTQVRJTEVfU1lTX0JBU0UpICsgVkVSU0FUSUxFX1NZU19DTENEX09GRlNFVDsKIAlzdHJ1Y3QgY2xjZF9wYW5lbCAqcGFuZWwgPSAmdmdhOwogCXUzMiB2YWw7CiAKQEAgLTUxMCw3ICs1MTAsNyBAQAogICovCiBzdGF0aWMgdm9pZCB2ZXJzYXRpbGVfY2xjZF9kaXNhYmxlKHN0cnVjdCBjbGNkX2ZiICpmYikKIHsKLQl1bnNpZ25lZCBsb25nIHN5c19jbGNkID0gSU9fQUREUkVTUyhWRVJTQVRJTEVfU1lTX0JBU0UpICsgVkVSU0FUSUxFX1NZU19DTENEX09GRlNFVDsKKwl2b2lkIF9faW9tZW0gKnN5c19jbGNkID0gX19pb19hZGRyZXNzKFZFUlNBVElMRV9TWVNfQkFTRSkgKyBWRVJTQVRJTEVfU1lTX0NMQ0RfT0ZGU0VUOwogCXUzMiB2YWw7CiAKIAl2YWwgPSByZWFkbChzeXNfY2xjZCk7CkBAIC01MjIsNyArNTIyLDcgQEAKIAkgKiBJZiB0aGUgTENEIGlzIFNhbnlvIDJ4NSBpbiBvbiB0aGUgSUIyIGJvYXJkLCB0dXJuIHRoZSBiYWNrLWxpZ2h0IG9mZgogCSAqLwogCWlmIChmYi0+cGFuZWwgPT0gJnNhbnlvXzJfNV9pbikgewotCQl1bnNpZ25lZCBsb25nIHZlcnNhdGlsZV9pYjJfY3RybCA9IElPX0FERFJFU1MoVkVSU0FUSUxFX0lCMl9DVFJMKTsKKwkJdm9pZCBfX2lvbWVtICp2ZXJzYXRpbGVfaWIyX2N0cmwgPSBfX2lvX2FkZHJlc3MoVkVSU0FUSUxFX0lCMl9DVFJMKTsKIAkJdW5zaWduZWQgbG9uZyBjdHJsOwogCiAJCWN0cmwgPSByZWFkbCh2ZXJzYXRpbGVfaWIyX2N0cmwpOwpAQCAtNTM3LDcgKzUzNyw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHZlcnNhdGlsZV9jbGNkX2VuYWJsZShzdHJ1Y3QgY2xjZF9mYiAqZmIpCiB7Ci0JdW5zaWduZWQgbG9uZyBzeXNfY2xjZCA9IElPX0FERFJFU1MoVkVSU0FUSUxFX1NZU19CQVNFKSArIFZFUlNBVElMRV9TWVNfQ0xDRF9PRkZTRVQ7CisJdm9pZCBfX2lvbWVtICpzeXNfY2xjZCA9IF9faW9fYWRkcmVzcyhWRVJTQVRJTEVfU1lTX0JBU0UpICsgVkVSU0FUSUxFX1NZU19DTENEX09GRlNFVDsKIAl1MzIgdmFsOwogCiAJdmFsID0gcmVhZGwoc3lzX2NsY2QpOwpAQCAtNTcxLDcgKzU3MSw3IEBACiAJICogSWYgdGhlIExDRCBpcyBTYW55byAyeDUgaW4gb24gdGhlIElCMiBib2FyZCwgdHVybiB0aGUgYmFjay1saWdodCBvbgogCSAqLwogCWlmIChmYi0+cGFuZWwgPT0gJnNhbnlvXzJfNV9pbikgewotCQl1bnNpZ25lZCBsb25nIHZlcnNhdGlsZV9pYjJfY3RybCA9IElPX0FERFJFU1MoVkVSU0FUSUxFX0lCMl9DVFJMKTsKKwkJdm9pZCBfX2lvbWVtICp2ZXJzYXRpbGVfaWIyX2N0cmwgPSBfX2lvX2FkZHJlc3MoVkVSU0FUSUxFX0lCMl9DVFJMKTsKIAkJdW5zaWduZWQgbG9uZyBjdHJsOwogCiAJCWN0cmwgPSByZWFkbCh2ZXJzYXRpbGVfaWIyX2N0cmwpOwpAQCAtNzIwLDcgKzcyMCw3IEBACiB9OwogCiAjaWZkZWYgQ09ORklHX0xFRFMKLSNkZWZpbmUgVkFfTEVEU19CQVNFIChJT19BRERSRVNTKFZFUlNBVElMRV9TWVNfQkFTRSkgKyBWRVJTQVRJTEVfU1lTX0xFRF9PRkZTRVQpCisjZGVmaW5lIFZBX0xFRFNfQkFTRSAoX19pb19hZGRyZXNzKFZFUlNBVElMRV9TWVNfQkFTRSkgKyBWRVJTQVRJTEVfU1lTX0xFRF9PRkZTRVQpCiAKIHN0YXRpYyB2b2lkIHZlcnNhdGlsZV9sZWRzX2V2ZW50KGxlZF9ldmVudF90IGxlZGV2dCkKIHsKQEAgLTc3OCwxMSArNzc4LDExIEBACiAvKgogICogV2hlcmUgaXMgdGhlIHRpbWVyIChWQSk/CiAgKi8KLSNkZWZpbmUgVElNRVIwX1ZBX0JBU0UJCSBJT19BRERSRVNTKFZFUlNBVElMRV9USU1FUjBfMV9CQVNFKQotI2RlZmluZSBUSU1FUjFfVkFfQkFTRQkJKElPX0FERFJFU1MoVkVSU0FUSUxFX1RJTUVSMF8xX0JBU0UpICsgMHgyMCkKLSNkZWZpbmUgVElNRVIyX1ZBX0JBU0UJCSBJT19BRERSRVNTKFZFUlNBVElMRV9USU1FUjJfM19CQVNFKQotI2RlZmluZSBUSU1FUjNfVkFfQkFTRQkJKElPX0FERFJFU1MoVkVSU0FUSUxFX1RJTUVSMl8zX0JBU0UpICsgMHgyMCkKLSNkZWZpbmUgVkFfSUNfQkFTRQkJIElPX0FERFJFU1MoVkVSU0FUSUxFX1ZJQ19CQVNFKSAKKyNkZWZpbmUgVElNRVIwX1ZBX0JBU0UJCSBfX2lvX2FkZHJlc3MoVkVSU0FUSUxFX1RJTUVSMF8xX0JBU0UpCisjZGVmaW5lIFRJTUVSMV9WQV9CQVNFCQkoX19pb19hZGRyZXNzKFZFUlNBVElMRV9USU1FUjBfMV9CQVNFKSArIDB4MjApCisjZGVmaW5lIFRJTUVSMl9WQV9CQVNFCQkgX19pb19hZGRyZXNzKFZFUlNBVElMRV9USU1FUjJfM19CQVNFKQorI2RlZmluZSBUSU1FUjNfVkFfQkFTRQkJKF9faW9fYWRkcmVzcyhWRVJTQVRJTEVfVElNRVIyXzNfQkFTRSkgKyAweDIwKQorI2RlZmluZSBWQV9JQ19CQVNFCQkgX19pb19hZGRyZXNzKFZFUlNBVElMRV9WSUNfQkFTRSkgCiAKIC8qCiAgKiBIb3cgbG9uZyBpcyB0aGUgdGltZXIgaW50ZXJ2YWw/CkBAIC04NzcsMTIgKzg3NywxMiBAQAogCSAqCVZFUlNBVElMRV9SRUZDTEsgaXMgMzJLSHoKIAkgKglWRVJTQVRJTEVfVElNQ0xLIGlzIDFNSHoKIAkgKi8KLQl2YWwgPSByZWFkbChJT19BRERSRVNTKFZFUlNBVElMRV9TQ1RMX0JBU0UpKTsKKwl2YWwgPSByZWFkbChfX2lvX2FkZHJlc3MoVkVSU0FUSUxFX1NDVExfQkFTRSkpOwogCXdyaXRlbCgoVkVSU0FUSUxFX1RJTUNMSyA8PCBWRVJTQVRJTEVfVElNRVIxX0VuU2VsKSB8CiAJICAgICAgIChWRVJTQVRJTEVfVElNQ0xLIDw8IFZFUlNBVElMRV9USU1FUjJfRW5TZWwpIHwgCiAJICAgICAgIChWRVJTQVRJTEVfVElNQ0xLIDw8IFZFUlNBVElMRV9USU1FUjNfRW5TZWwpIHwKIAkgICAgICAgKFZFUlNBVElMRV9USU1DTEsgPDwgVkVSU0FUSUxFX1RJTUVSNF9FblNlbCkgfCB2YWwsCi0JICAgICAgIElPX0FERFJFU1MoVkVSU0FUSUxFX1NDVExfQkFTRSkpOworCSAgICAgICBfX2lvX2FkZHJlc3MoVkVSU0FUSUxFX1NDVExfQkFTRSkpOwogCiAJLyoKIAkgKiBJbml0aWFsaXNlIHRvIGEga25vd24gc3RhdGUgKGFsbCB0aW1lcnMgb2ZmKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvcGNpLmMgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9wY2kuYwppbmRleCBkMTU2NWU4Li5iODBkNTdkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9wY2kuYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAogLyoKICAqIHRoZXNlIHNwYWNlcyBhcmUgbWFwcGVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgYmFzZSByZWdpc3RlcnM6CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9LY29uZmlnIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwppbmRleCBkYjVlNDdkLi5jNTRlMDRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21tL0tjb25maWcKQEAgLTM3MCwyMSArMzcwLDIxIEBACiAKIGNvbmZpZyBDUFVfSUNBQ0hFX0RJU0FCTEUKIAlib29sICJEaXNhYmxlIEktQ2FjaGUiCi0JZGVwZW5kcyBvbiBDUFVfQVJNOTIwVCB8fCBDUFVfQVJNOTIyVCB8fCBDUFVfQVJNOTI1VCB8fCBDUFVfQVJNOTI2VCB8fCBDUFVfQVJNMTAyMAorCWRlcGVuZHMgb24gQ1BVX0FSTTkyMFQgfHwgQ1BVX0FSTTkyMlQgfHwgQ1BVX0FSTTkyNVQgfHwgQ1BVX0FSTTkyNlQgfHwgQ1BVX0FSTTEwMjAgfHwgQ1BVX1Y2CiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBkaXNhYmxlIHRoZSBwcm9jZXNzb3IgaW5zdHJ1Y3Rpb24gY2FjaGUuIFVubGVzcwogCSAgeW91IGhhdmUgYSByZWFzb24gbm90IHRvIG9yIGFyZSB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgQ1BVX0RDQUNIRV9ESVNBQkxFCiAJYm9vbCAiRGlzYWJsZSBELUNhY2hlIgotCWRlcGVuZHMgb24gQ1BVX0FSTTkyMFQgfHwgQ1BVX0FSTTkyMlQgfHwgQ1BVX0FSTTkyNVQgfHwgQ1BVX0FSTTkyNlQgfHwgQ1BVX0FSTTEwMjAKKwlkZXBlbmRzIG9uIENQVV9BUk05MjBUIHx8IENQVV9BUk05MjJUIHx8IENQVV9BUk05MjVUIHx8IENQVV9BUk05MjZUIHx8IENQVV9BUk0xMDIwIHx8IENQVV9WNgogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gZGlzYWJsZSB0aGUgcHJvY2Vzc29yIGRhdGEgY2FjaGUuIFVubGVzcwogCSAgeW91IGhhdmUgYSByZWFzb24gbm90IHRvIG9yIGFyZSB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKIAlib29sICJGb3JjZSB3cml0ZSB0aHJvdWdoIEQtY2FjaGUiCi0JZGVwZW5kcyBvbiAoQ1BVX0FSTTkyMFQgfHwgQ1BVX0FSTTkyMlQgfHwgQ1BVX0FSTTkyNVQgfHwgQ1BVX0FSTTkyNlQgfHwgQ1BVX0FSTTEwMjApICYmICFDUFVfRENBQ0hFX0RJU0FCTEUKKwlkZXBlbmRzIG9uIChDUFVfQVJNOTIwVCB8fCBDUFVfQVJNOTIyVCB8fCBDUFVfQVJNOTI1VCB8fCBDUFVfQVJNOTI2VCB8fCBDUFVfQVJNMTAyMCB8fCBDUFVfVjYpICYmICFDUFVfRENBQ0hFX0RJU0FCTEUKIAlkZWZhdWx0IHkgaWYgQ1BVX0FSTTkyNVQKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHVzZSB0aGUgZGF0YSBjYWNoZSBpbiB3cml0ZXRocm91Z2ggbW9kZS4gVW5sZXNzIHlvdQpAQCAtMzk5LDcgKzM5OSw3IEBACiAKIGNvbmZpZyBDUFVfQlBSRURJQ1RfRElTQUJMRQogCWJvb2wgIkRpc2FibGUgYnJhbmNoIHByZWRpY3Rpb24iCi0JZGVwZW5kcyBvbiBDUFVfQVJNMTAyMAorCWRlcGVuZHMgb24gQ1BVX0FSTTEwMjAgfHwgQ1BVX1Y2CiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBkaXNhYmxlIGJyYW5jaCBwcmVkaWN0aW9uLiAgSWYgdW5zdXJlLCBzYXkgTi4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vYWJvcnQtZXY2LlMgYi9hcmNoL2FybS9tbS9hYm9ydC1ldjYuUwppbmRleCA4Zjc2ZjNkLi5kYmQzNDYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9hYm9ydC1ldjYuUworKysgYi9hcmNoL2FybS9tbS9hYm9ydC1ldjYuUwpAQCAtMjAsNiArMjAsMTEgQEAKICAqLwogCS5hbGlnbgk1CiBFTlRSWSh2Nl9lYXJseV9hYm9ydCkKKyNpZmRlZiBDT05GSUdfQ1BVX01QQ09SRQorCWNscmV4CisjZWxzZQorCXN0cmV4CXIwLCByMSwgW3NwXQkJCUAgQ2xlYXIgdGhlIGV4Y2x1c2l2ZSBtb25pdG9yCisjZW5kaWYKIAltcmMJcDE1LCAwLCByMSwgYzUsIGMwLCAwCQlAIGdldCBGU1IKIAltcmMJcDE1LCAwLCByMCwgYzYsIGMwLCAwCQlAIGdldCBGQVIKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9hbGlnbm1lbnQuYyBiL2FyY2gvYXJtL21tL2FsaWdubWVudC5jCmluZGV4IDRiMzlkODYuLjcwNWM5ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2FsaWdubWVudC5jCisrKyBiL2FyY2gvYXJtL21tL2FsaWdubWVudC5jCkBAIC0xMTEsNyArMTExLDcgQEAKIH0KIAogc3RhdGljIGludCBwcm9jX2FsaWdubWVudF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQorCQkJCXVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCiB7CiAJY2hhciBtb2RlOwogCkBAIC0xMTksNyArMTE5LDcgQEAKIAkJaWYgKGdldF91c2VyKG1vZGUsIGJ1ZmZlcikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJaWYgKG1vZGUgPj0gJzAnICYmIG1vZGUgPD0gJzUnKQotCQkJICAgYWlfdXNlcm1vZGUgPSBtb2RlIC0gJzAnOworCQkJYWlfdXNlcm1vZGUgPSBtb2RlIC0gJzAnOwogCX0KIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0yNjIsNyArMjYyLDcgQEAKIAkJCWdvdG8gZmF1bHQ7CQkJCVwKIAl9IHdoaWxlICgwKQogCi0jZGVmaW5lIHB1dDMyX3VuYWxpZ25lZF9jaGVjayh2YWwsYWRkcikJIFwKKyNkZWZpbmUgcHV0MzJfdW5hbGlnbmVkX2NoZWNrKHZhbCxhZGRyKSBcCiAJX19wdXQzMl91bmFsaWduZWRfY2hlY2soInN0cmIiLCB2YWwsIGFkZHIpCiAKICNkZWZpbmUgcHV0MzJ0X3VuYWxpZ25lZF9jaGVjayh2YWwsYWRkcikgXApAQCAtMzA2LDE5ICszMDYsMTkgQEAKIAlyZXR1cm4gVFlQRV9MRFNUOwogCiAgdXNlcjoKLSAJaWYgKExEU1RfTF9CSVQoaW5zdHIpKSB7Ci0gCQl1bnNpZ25lZCBsb25nIHZhbDsKLSAJCWdldDE2dF91bmFsaWduZWRfY2hlY2sodmFsLCBhZGRyKTsKKwlpZiAoTERTVF9MX0JJVChpbnN0cikpIHsKKwkJdW5zaWduZWQgbG9uZyB2YWw7CisJCWdldDE2dF91bmFsaWduZWRfY2hlY2sodmFsLCBhZGRyKTsKIAotIAkJLyogc2lnbmVkIGhhbGYtd29yZD8gKi8KLSAJCWlmIChpbnN0ciAmIDB4NDApCi0gCQkJdmFsID0gKHNpZ25lZCBsb25nKSgoc2lnbmVkIHNob3J0KSB2YWwpOworCQkvKiBzaWduZWQgaGFsZi13b3JkPyAqLworCQlpZiAoaW5zdHIgJiAweDQwKQorCQkJdmFsID0gKHNpZ25lZCBsb25nKSgoc2lnbmVkIHNob3J0KSB2YWwpOwogCi0gCQlyZWdzLT51cmVnc1tyZF0gPSB2YWw7Ci0gCX0gZWxzZQotIAkJcHV0MTZ0X3VuYWxpZ25lZF9jaGVjayhyZWdzLT51cmVnc1tyZF0sIGFkZHIpOworCQlyZWdzLT51cmVnc1tyZF0gPSB2YWw7CisJfSBlbHNlCisJCXB1dDE2dF91bmFsaWduZWRfY2hlY2socmVncy0+dXJlZ3NbcmRdLCBhZGRyKTsKIAotIAlyZXR1cm4gVFlQRV9MRFNUOworCXJldHVybiBUWVBFX0xEU1Q7CiAKICBmYXVsdDoKIAlyZXR1cm4gVFlQRV9GQVVMVDsKQEAgLTMzMCw2ICszMzAsOSBAQAogewogCXVuc2lnbmVkIGludCByZCA9IFJEX0JJVFMoaW5zdHIpOwogCisJaWYgKCgocmQgJiAxKSA9PSAxKSB8fCAocmQgPT0gMTQpKQorCQlnb3RvIGJhZDsKKwogCWFpX2R3b3JkICs9IDE7CiAKIAlpZiAodXNlcl9tb2RlKHJlZ3MpKQpAQCAtMzM5LDExICszNDIsMTEgQEAKIAkJdW5zaWduZWQgbG9uZyB2YWw7CiAJCWdldDMyX3VuYWxpZ25lZF9jaGVjayh2YWwsIGFkZHIpOwogCQlyZWdzLT51cmVnc1tyZF0gPSB2YWw7Ci0JCWdldDMyX3VuYWxpZ25lZF9jaGVjayh2YWwsIGFkZHIrNCk7Ci0JCXJlZ3MtPnVyZWdzW3JkKzFdID0gdmFsOworCQlnZXQzMl91bmFsaWduZWRfY2hlY2sodmFsLCBhZGRyICsgNCk7CisJCXJlZ3MtPnVyZWdzW3JkICsgMV0gPSB2YWw7CiAJfSBlbHNlIHsKIAkJcHV0MzJfdW5hbGlnbmVkX2NoZWNrKHJlZ3MtPnVyZWdzW3JkXSwgYWRkcik7Ci0JCXB1dDMyX3VuYWxpZ25lZF9jaGVjayhyZWdzLT51cmVnc1tyZCsxXSwgYWRkcis0KTsKKwkJcHV0MzJfdW5hbGlnbmVkX2NoZWNrKHJlZ3MtPnVyZWdzW3JkICsgMV0sIGFkZHIgKyA0KTsKIAl9CiAKIAlyZXR1cm4gVFlQRV9MRFNUOwpAQCAtMzUzLDE1ICszNTYsMTYgQEAKIAkJdW5zaWduZWQgbG9uZyB2YWw7CiAJCWdldDMydF91bmFsaWduZWRfY2hlY2sodmFsLCBhZGRyKTsKIAkJcmVncy0+dXJlZ3NbcmRdID0gdmFsOwotCQlnZXQzMnRfdW5hbGlnbmVkX2NoZWNrKHZhbCwgYWRkcis0KTsKLQkJcmVncy0+dXJlZ3NbcmQrMV0gPSB2YWw7CisJCWdldDMydF91bmFsaWduZWRfY2hlY2sodmFsLCBhZGRyICsgNCk7CisJCXJlZ3MtPnVyZWdzW3JkICsgMV0gPSB2YWw7CiAJfSBlbHNlIHsKIAkJcHV0MzJ0X3VuYWxpZ25lZF9jaGVjayhyZWdzLT51cmVnc1tyZF0sIGFkZHIpOwotCQlwdXQzMnRfdW5hbGlnbmVkX2NoZWNrKHJlZ3MtPnVyZWdzW3JkKzFdLCBhZGRyKzQpOworCQlwdXQzMnRfdW5hbGlnbmVkX2NoZWNrKHJlZ3MtPnVyZWdzW3JkICsgMV0sIGFkZHIgKyA0KTsKIAl9CiAKIAlyZXR1cm4gVFlQRV9MRFNUOwotCisgYmFkOgorCXJldHVybiBUWVBFX0VSUk9SOwogIGZhdWx0OgogCXJldHVybiBUWVBFX0ZBVUxUOwogfQpAQCAtNDM5LDcgKzQ0Myw3IEBACiAJaWYgKExEU1RfUF9FUV9VKGluc3RyKSkJLyogVSA9IFAgKi8KIAkJZWFkZHIgKz0gNDsKIAotCS8qIAorCS8qCiAJICogRm9yIGFsaWdubWVudCBmYXVsdHMgb24gdGhlIEFSTTkyMlQvQVJNOTIwVCB0aGUgTU1VICBtYWtlcwogCSAqIHRoZSBGU1IgKGFuZCBoZW5jZSBhZGRyKSBlcXVhbCB0byB0aGUgdXBkYXRlZCBiYXNlIGFkZHJlc3MKIAkgKiBvZiB0aGUgbXVsdGlwbGUgYWNjZXNzIHJhdGhlciB0aGFuIHRoZSByZXN0b3JlZCB2YWx1ZS4KQEAgLTU2Niw3ICs1NzAsNyBAQAogCS8qIDYuNS4xIEZvcm1hdCAzOiAqLwogCWNhc2UgMHg0ODAwID4+IDExOgkJCQkvKiA3LjEuMjggTERSKDMpICovCiAJCS8qIE5PVEU6IFRoaXMgY2FzZSBpcyBub3QgdGVjaG5pY2FsbHkgcG9zc2libGUuIFdlJ3JlCi0JCSAqIAkgbG9hZGluZyAzMi1iaXQgbWVtb3J5IGRhdGEgdmlhIFBDIHJlbGF0aXZlCisJCSAqCSBsb2FkaW5nIDMyLWJpdCBtZW1vcnkgZGF0YSB2aWEgUEMgcmVsYXRpdmUKIAkJICoJIGFkZHJlc3NpbmcgbW9kZS4gU28gd2UgY2FuIGFuZCBzaG91bGQgZWxpbWluYXRlCiAJCSAqCSB0aGlzIGNhc2UuIEJ1dCBJJ2xsIGxlYXZlIGl0IGhlcmUgZm9yIG5vdy4KIAkJICovCkBAIC02MzgsNyArNjQyLDcgQEAKIAogCWlmIChmYXVsdCkgewogCQl0eXBlID0gVFlQRV9GQVVMVDsKLSAJCWdvdG8gYmFkX29yX2ZhdWx0OworCQlnb3RvIGJhZF9vcl9mYXVsdDsKIAl9CiAKIAlpZiAodXNlcl9tb2RlKHJlZ3MpKQpAQCAtNjYzLDYgKzY2Nyw4IEBACiAJCWVsc2UgaWYgKChpbnN0ciAmIDB4MDAxMDAwZjApID09IDB4MDAwMDAwZDAgfHwgLyogTERSRCAqLwogCQkJIChpbnN0ciAmIDB4MDAxMDAwZjApID09IDB4MDAwMDAwZjApICAgLyogU1RSRCAqLwogCQkJaGFuZGxlciA9IGRvX2FsaWdubWVudF9sZHJkc3RyZDsKKwkJZWxzZSBpZiAoKGluc3RyICYgMHgwMWYwMGZmMCkgPT0gMHgwMTAwMDA5MCkgLyogU1dQICovCisJCQlnb3RvIHN3cDsKIAkJZWxzZQogCQkJZ290byBiYWQ7CiAJCWJyZWFrOwpAQCAtNzMzLDYgKzczOSw5IEBACiAJZG9fYmFkX2FyZWEoY3VycmVudCwgY3VycmVudC0+bW0sIGFkZHIsIGZzciwgcmVncyk7CiAJcmV0dXJuIDA7CiAKKyBzd3A6CisJcHJpbnRrKEtFUk5fRVJSICJBbGlnbm1lbnQgdHJhcDogbm90IGhhbmRsaW5nIHN3cCBpbnN0cnVjdGlvblxuIik7CisKICBiYWQ6CiAJLyoKIAkgKiBPb3BzLCB3ZSBkaWRuJ3QgaGFuZGxlIHRoZSBpbnN0cnVjdGlvbi4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLXY2LlMgYi9hcmNoL2FybS9tbS9jYWNoZS12Ni5TCmluZGV4IDg1YzEwYTcuLjcyOTY2ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXY2LlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjYuUwpAQCAtMTgsNiArMTgsNyBAQAogI2RlZmluZSBIQVJWQVJEX0NBQ0hFCiAjZGVmaW5lIENBQ0hFX0xJTkVfU0laRQkJMzIKICNkZWZpbmUgRF9DQUNIRV9MSU5FX1NJWkUJMzIKKyNkZWZpbmUgQlRCX0ZMVVNIX1NJWkUJCTgKIAogLyoKICAqCXY2X2ZsdXNoX2NhY2hlX2FsbCgpCkBAIC05OCw3ICs5OSwxMyBAQAogCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDEJCUAgaW52YWxpZGF0ZSBJIGxpbmUKICNlbmRpZgogCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDcJCUAgaW52YWxpZGF0ZSBCVEIgZW50cnkKLQlhZGQJcjAsIHIwLCAjQ0FDSEVfTElORV9TSVpFCisJYWRkCXIwLCByMCwgI0JUQl9GTFVTSF9TSVpFCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgNwkJQCBpbnZhbGlkYXRlIEJUQiBlbnRyeQorCWFkZAlyMCwgcjAsICNCVEJfRkxVU0hfU0laRQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDcJCUAgaW52YWxpZGF0ZSBCVEIgZW50cnkKKwlhZGQJcjAsIHIwLCAjQlRCX0ZMVVNIX1NJWkUKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCA3CQlAIGludmFsaWRhdGUgQlRCIGVudHJ5CisJYWRkCXIwLCByMCwgI0JUQl9GTFVTSF9TSVpFCiAJY21wCXIwLCByMQogCWJsbwkxYgogI2lmZGVmIEhBUlZBUkRfQ0FDSEUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2ZhdWx0LmMgYi9hcmNoL2FybS9tbS9mYXVsdC5jCmluZGV4IDBiNmM0ZGIuLjRhODg0YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9hcm0vbW0vZmF1bHQuYwpAQCAtMjMzLDcgKzIzMywxNyBAQAogCWlmIChpbl9pbnRlcnJ1cHQoKSB8fCAhbW0pCiAJCWdvdG8gbm9fY29udGV4dDsKIAotCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwkvKgorCSAqIEFzIHBlciB4ODYsIHdlIG1heSBkZWFkbG9jayBoZXJlLiAgSG93ZXZlciwgc2luY2UgdGhlIGtlcm5lbCBvbmx5CisJICogdmFsaWRseSByZWZlcmVuY2VzIHVzZXIgc3BhY2UgZnJvbSB3ZWxsIGRlZmluZWQgYXJlYXMgb2YgdGhlIGNvZGUsCisJICogd2UgY2FuIGJ1ZyBvdXQgZWFybHkgaWYgdGhpcyBpcyBmcm9tIGNvZGUgd2hpY2ggc2hvdWxkbid0LgorCSAqLworCWlmICghZG93bl9yZWFkX3RyeWxvY2soJm1tLT5tbWFwX3NlbSkpIHsKKwkJaWYgKCF1c2VyX21vZGUocmVncykgJiYgIXNlYXJjaF9leGNlcHRpb25fdGFibGVzKHJlZ3MtPkFSTV9wYykpCisJCQlnb3RvIG5vX2NvbnRleHQ7CisJCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwl9CisKIAlmYXVsdCA9IF9fZG9fcGFnZV9mYXVsdChtbSwgYWRkciwgZnNyLCB0c2spOwogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2ZsdXNoLmMgYi9hcmNoL2FybS9tbS9mbHVzaC5jCmluZGV4IGIwMjA4YzkuLmM5YTAzOTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2ZsdXNoLmMKKysrIGIvYXJjaC9hcm0vbW0vZmx1c2guYwpAQCAtMTcsNiArMTcsMjQgQEAKIAogI2lmZGVmIENPTkZJR19DUFVfQ0FDSEVfVklQVAogCisjZGVmaW5lIEFMSUFTX0ZMVVNIX1NUQVJUCTB4ZmZmZjQwMDAKKworI2RlZmluZSBUT1BfUFRFKHgpCXB0ZV9vZmZzZXRfa2VybmVsKHRvcF9wbWQsIHgpCisKK3N0YXRpYyB2b2lkIGZsdXNoX3Bmbl9hbGlhcyh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB2YWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIHRvID0gQUxJQVNfRkxVU0hfU1RBUlQgKyAoQ0FDSEVfQ09MT1VSKHZhZGRyKSA8PCBQQUdFX1NISUZUKTsKKworCXNldF9wdGUoVE9QX1BURSh0byksIHBmbl9wdGUocGZuLCBQQUdFX0tFUk5FTCkpOworCWZsdXNoX3RsYl9rZXJuZWxfcGFnZSh0byk7CisKKwlhc20oCSJtY3JyCXAxNSwgMCwgJTEsICUwLCBjMTRcbiIKKwkiCW1jcnIJcDE1LCAwLCAlMSwgJTAsIGM1XG4iCisJICAgIDoKKwkgICAgOiAiciIgKHRvKSwgInIiICh0byArIFBBR0VfU0laRSAtIEwxX0NBQ0hFX0JZVEVTKQorCSAgICA6ICJjYyIpOworfQorCiB2b2lkIGZsdXNoX2NhY2hlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewogCWlmIChjYWNoZV9pc192aXZ0KCkpIHsKQEAgLTY3LDI0ICs4NSw2IEBACiAJaWYgKGNhY2hlX2lzX3ZpcHRfYWxpYXNpbmcoKSkKIAkJZmx1c2hfcGZuX2FsaWFzKHBmbiwgdXNlcl9hZGRyKTsKIH0KLQotI2RlZmluZSBBTElBU19GTFVTSF9TVEFSVAkweGZmZmY0MDAwCi0KLSNkZWZpbmUgVE9QX1BURSh4KQlwdGVfb2Zmc2V0X2tlcm5lbCh0b3BfcG1kLCB4KQotCi1zdGF0aWMgdm9pZCBmbHVzaF9wZm5fYWxpYXModW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgdmFkZHIpCi17Ci0JdW5zaWduZWQgbG9uZyB0byA9IEFMSUFTX0ZMVVNIX1NUQVJUICsgKENBQ0hFX0NPTE9VUih2YWRkcikgPDwgUEFHRV9TSElGVCk7Ci0KLQlzZXRfcHRlKFRPUF9QVEUodG8pLCBwZm5fcHRlKHBmbiwgUEFHRV9LRVJORUwpKTsKLQlmbHVzaF90bGJfa2VybmVsX3BhZ2UodG8pOwotCi0JYXNtKAkibWNycglwMTUsIDAsICUxLCAlMCwgYzE0XG4iCi0JIgltY3JyCXAxNSwgMCwgJTEsICUwLCBjNVxuIgotCSAgICA6Ci0JICAgIDogInIiICh0byksICJyIiAodG8gKyBQQUdFX1NJWkUgLSBMMV9DQUNIRV9CWVRFUykKLQkgICAgOiAiY2MiKTsKLX0KICNlbHNlCiAjZGVmaW5lIGZsdXNoX3Bmbl9hbGlhcyhwZm4sdmFkZHIpCWRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUwppbmRleCAxZDczOWQyLi44MmVjOTU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUwpAQCAtNTA5LDcgKzUwOSw3IEBACiAKIAkuYWxpZ24KIAotCS5zZWN0aW9uICIucHJvYy5pbmZvIiwgI2FsbG9jLCAjZXhlY2luc3RyCisJLnNlY3Rpb24gIi5wcm9jLmluZm8uaW5pdCIsICNhbGxvYywgI2V4ZWNpbnN0cgogCiAJLnR5cGUJX19hcm0xMDIwX3Byb2NfaW5mbywjb2JqZWN0CiBfX2FybTEwMjBfcHJvY19pbmZvOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TCmluZGV4IDliNzI1NjYuLjczNzVmZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMKQEAgLTQ5MSw3ICs0OTEsNyBAQAogCiAJLmFsaWduCiAKLQkuc2VjdGlvbiAiLnByb2MuaW5mbyIsICNhbGxvYywgI2V4ZWNpbnN0cgorCS5zZWN0aW9uICIucHJvYy5pbmZvLmluaXQiLCAjYWxsb2MsICNleGVjaW5zdHIKIAogCS50eXBlCV9fYXJtMTAyMGVfcHJvY19pbmZvLCNvYmplY3QKIF9fYXJtMTAyMGVfcHJvY19pbmZvOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUwppbmRleCAzN2I3MGZhLi42Y2E2MzkwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUwpAQCAtNDczLDcgKzQ3Myw3IEBACiAKIAkuYWxpZ24KIAotCS5zZWN0aW9uICIucHJvYy5pbmZvIiwgI2FsbG9jLCAjZXhlY2luc3RyCisJLnNlY3Rpb24gIi5wcm9jLmluZm8uaW5pdCIsICNhbGxvYywgI2V4ZWNpbnN0cgogCiAJLnR5cGUJX19hcm0xMDIyX3Byb2NfaW5mbywjb2JqZWN0CiBfX2FybTEwMjJfcHJvY19pbmZvOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUwppbmRleCA5MzFiNjkwLi4xMDMxN2U0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUwpAQCAtNDY5LDcgKzQ2OSw3IEBACiAKIAkuYWxpZ24KIAotCS5zZWN0aW9uICIucHJvYy5pbmZvIiwgI2FsbG9jLCAjZXhlY2luc3RyCisJLnNlY3Rpb24gIi5wcm9jLmluZm8uaW5pdCIsICNhbGxvYywgI2V4ZWNpbnN0cgogCiAJLnR5cGUJX19hcm0xMDI2X3Byb2NfaW5mbywjb2JqZWN0CiBfX2FybTEwMjZfcHJvY19pbmZvOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm02XzcuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtNl83LlMKaW5kZXggZDBmMWJiYi4uOGU3ZTFlNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm02XzcuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTZfNy5TCkBAIC0zMzIsNyArMzMyLDcgQEAKIAogCQkuYWxpZ24KIAotCQkuc2VjdGlvbiAiLnByb2MuaW5mbyIsICNhbGxvYywgI2V4ZWNpbnN0cgorCQkuc2VjdGlvbiAiLnByb2MuaW5mby5pbml0IiwgI2FsbG9jLCAjZXhlY2luc3RyCiAKIAkJLnR5cGUJX19hcm02X3Byb2NfaW5mbywgI29iamVjdAogX19hcm02X3Byb2NfaW5mbzoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNzIwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTcyMC5TCmluZGV4IGM2OWM5ZGUuLmExM2UwMTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNzIwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03MjAuUwpAQCAtMjIyLDcgKzIyMiw3IEBACiAgKiBTZWUgbGludXgvaW5jbHVkZS9hc20tYXJtL3Byb2NpbmZvLmggZm9yIGEgZGVmaW5pdGlvbiBvZiB0aGlzIHN0cnVjdHVyZS4KICAqLwogCQotCQkuc2VjdGlvbiAiLnByb2MuaW5mbyIsICNhbGxvYywgI2V4ZWNpbnN0cgorCQkuc2VjdGlvbiAiLnByb2MuaW5mby5pbml0IiwgI2FsbG9jLCAjZXhlY2luc3RyCiAKIAkJLnR5cGUJX19hcm03MTBfcHJvY19pbmZvLCAjb2JqZWN0CiBfX2FybTcxMF9wcm9jX2luZm86CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUwppbmRleCAwZjQ5MGEwLi5kMTY1MTM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMKQEAgLTQ1Miw3ICs0NTIsNyBAQAogCiAJLmFsaWduCiAKLQkuc2VjdGlvbiAiLnByb2MuaW5mbyIsICNhbGxvYywgI2V4ZWNpbnN0cgorCS5zZWN0aW9uICIucHJvYy5pbmZvLmluaXQiLCAjYWxsb2MsICNleGVjaW5zdHIKIAogCS50eXBlCV9fYXJtOTIwX3Byb2NfaW5mbywjb2JqZWN0CiBfX2FybTkyMF9wcm9jX2luZm86CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUwppbmRleCA2MmJjMzRhLi4yM2I4ZWQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMKQEAgLTQ1Niw3ICs0NTYsNyBAQAogCiAJLmFsaWduCiAKLQkuc2VjdGlvbiAiLnByb2MuaW5mbyIsICNhbGxvYywgI2V4ZWNpbnN0cgorCS5zZWN0aW9uICIucHJvYy5pbmZvLmluaXQiLCAjYWxsb2MsICNleGVjaW5zdHIKIAogCS50eXBlCV9fYXJtOTIyX3Byb2NfaW5mbywjb2JqZWN0CiBfX2FybTkyMl9wcm9jX2luZm86CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUwppbmRleCBlZTQ5YWEyLi5lZTk1YzUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI1LlMKQEAgLTUyMSw3ICs1MjEsNyBAQAogCiAJLmFsaWduCiAKLQkuc2VjdGlvbiAiLnByb2MuaW5mbyIsICNhbGxvYywgI2V4ZWNpbnN0cgorCS5zZWN0aW9uICIucHJvYy5pbmZvLmluaXQiLCAjYWxsb2MsICNleGVjaW5zdHIKIAogCS50eXBlCV9fYXJtOTI1X3Byb2NfaW5mbywjb2JqZWN0CiBfX2FybTkyNV9wcm9jX2luZm86CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUwppbmRleCBiYjk1Y2M5Li43ZDA0MmRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMKQEAgLTQ3MSw3ICs0NzEsNyBAQAogCiAJLmFsaWduCiAKLQkuc2VjdGlvbiAiLnByb2MuaW5mbyIsICNhbGxvYywgI2V4ZWNpbnN0cgorCS5zZWN0aW9uICIucHJvYy5pbmZvLmluaXQiLCAjYWxsb2MsICNleGVjaW5zdHIKIAogCS50eXBlCV9fYXJtOTI2X3Byb2NfaW5mbywjb2JqZWN0CiBfX2FybTkyNl9wcm9jX2luZm86CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXNhMTEwLlMgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwLlMKaW5kZXggMzRmN2U3ZC4uYmQzMzBjNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAuUwpAQCAtMjQ5LDcgKzI0OSw3IEBACiAKIAkuYWxpZ24KIAotCS5zZWN0aW9uICIucHJvYy5pbmZvIiwgI2FsbG9jLCAjZXhlY2luc3RyCisJLnNlY3Rpb24gIi5wcm9jLmluZm8uaW5pdCIsICNhbGxvYywgI2V4ZWNpbnN0cgogCiAJLnR5cGUJX19zYTExMF9wcm9jX2luZm8sI29iamVjdAogX19zYTExMF9wcm9jX2luZm86CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUwppbmRleCBjYTE0ZjgwLi45MWI4OTEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMKQEAgLTI4MCw3ICsyODAsNyBAQAogCiAJLmFsaWduCiAKLQkuc2VjdGlvbiAiLnByb2MuaW5mbyIsICNhbGxvYywgI2V4ZWNpbnN0cgorCS5zZWN0aW9uICIucHJvYy5pbmZvLmluaXQiLCAjYWxsb2MsICNleGVjaW5zdHIKIAogCS50eXBlCV9fc2ExMTAwX3Byb2NfaW5mbywjb2JqZWN0CiBfX3NhMTEwMF9wcm9jX2luZm86CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXY2LlMgYi9hcmNoL2FybS9tbS9wcm9jLXY2LlMKaW5kZXggZWIzNDgyMy4uOWJiNWZmZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy12Ni5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtdjYuUwpAQCAtNTUsNyArNTUsMTQgQEAKIAltb3YJcGMsIGxyCiAKIEVOVFJZKGNwdV92Nl9wcm9jX2ZpbikKLQltb3YJcGMsIGxyCisJc3RtZmQJc3AhLCB7bHJ9CisJY3BzaWQJaWYJCQkJQCBkaXNhYmxlIGludGVycnVwdHMKKwlibAl2Nl9mbHVzaF9rZXJuX2NhY2hlX2FsbAorCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgorCWJpYwlyMCwgcjAsICMweDEwMDAJCQlAIC4uLmkuLi4uLi4uLi4uLi4KKwliaWMJcjAsIHIwLCAjMHgwMDA2CQkJQCAuLi4uLi4uLi4uLi4uY2EuCisJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBkaXNhYmxlIGNhY2hlcworCWxkbWZkCXNwISwge3BjfQogCiAvKgogICoJY3B1X3Y2X3Jlc2V0KGxvYykKQEAgLTI0MCw3ICsyNDcsNyBAQAogCS5zaXplCWNwdV9lbGZfbmFtZSwgLiAtIGNwdV9lbGZfbmFtZQogCS5hbGlnbgogCi0JLnNlY3Rpb24gIi5wcm9jLmluZm8iLCAjYWxsb2MsICNleGVjaW5zdHIKKwkuc2VjdGlvbiAiLnByb2MuaW5mby5pbml0IiwgI2FsbG9jLCAjZXhlY2luc3RyCiAKIAkvKgogCSAqIE1hdGNoIGFueSBBUk12NiBwcm9jZXNzb3IgY29yZS4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMgYi9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCmluZGV4IGI4OGRlMjcwLi44NjFiMzU5NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCkBAIC01NzgsNyArNTc4LDcgQEAKIAogCS5hbGlnbgogCi0JLnNlY3Rpb24gIi5wcm9jLmluZm8iLCAjYWxsb2MsICNleGVjaW5zdHIKKwkuc2VjdGlvbiAiLnByb2MuaW5mby5pbml0IiwgI2FsbG9jLCAjZXhlY2luc3RyCiAKIAkudHlwZQlfXzgwMjAwX3Byb2NfaW5mbywjb2JqZWN0CiBfXzgwMjAwX3Byb2NfaW5mbzoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL253ZnBlL2ZwYTExLmMgYi9hcmNoL2FybS9ud2ZwZS9mcGExMS5jCmluZGV4IDc2OTBmNzMuLjdiM2Q3NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL253ZnBlL2ZwYTExLmMKKysrIGIvYXJjaC9hcm0vbndmcGUvZnBhMTEuYwpAQCAtMzEsMTEgKzMxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKLS8qIGZvcndhcmQgZGVjbGFyYXRpb25zICovCi11bnNpZ25lZCBpbnQgRW11bGF0ZUNQRE8oY29uc3QgdW5zaWduZWQgaW50KTsKLXVuc2lnbmVkIGludCBFbXVsYXRlQ1BEVChjb25zdCB1bnNpZ25lZCBpbnQpOwotdW5zaWduZWQgaW50IEVtdWxhdGVDUFJUKGNvbnN0IHVuc2lnbmVkIGludCk7Ci0KIC8qIFJlc2V0IHRoZSBGUEExMSBjaGlwLiAgQ2FsbGVkIHRvIGluaXRpYWxpemUgYW5kIHJlc2V0IHRoZSBlbXVsYXRvci4gKi8KIHN0YXRpYyB2b2lkIHJlc2V0RlBBMTEodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL253ZnBlL2ZwYTExLmggYi9hcmNoL2FybS9ud2ZwZS9mcGExMS5oCmluZGV4IDkzNTIzYWUuLjk2NzdhZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL253ZnBlL2ZwYTExLmgKKysrIGIvYXJjaC9hcm0vbndmcGUvZnBhMTEuaApAQCAtOTUsNCArOTUsMjQgQEAKIGV4dGVybiBpbnQ4IFNldFJvdW5kaW5nUHJlY2lzaW9uKGNvbnN0IHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCBud2ZwZV9pbml0X2ZwYSh1bmlvbiBmcF9zdGF0ZSAqZnApOwogCitleHRlcm4gdW5zaWduZWQgaW50IEVtdWxhdGVBbGwodW5zaWduZWQgaW50IG9wY29kZSk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgRW11bGF0ZUNQRFQoY29uc3QgdW5zaWduZWQgaW50IG9wY29kZSk7CitleHRlcm4gdW5zaWduZWQgaW50IEVtdWxhdGVDUERPKGNvbnN0IHVuc2lnbmVkIGludCBvcGNvZGUpOworZXh0ZXJuIHVuc2lnbmVkIGludCBFbXVsYXRlQ1BSVChjb25zdCB1bnNpZ25lZCBpbnQgb3Bjb2RlKTsKKworLyogZnBhMTFfY3BkdC5jICovCitleHRlcm4gdW5zaWduZWQgaW50IFBlcmZvcm1MREYoY29uc3QgdW5zaWduZWQgaW50IG9wY29kZSk7CitleHRlcm4gdW5zaWduZWQgaW50IFBlcmZvcm1TVEYoY29uc3QgdW5zaWduZWQgaW50IG9wY29kZSk7CitleHRlcm4gdW5zaWduZWQgaW50IFBlcmZvcm1MRk0oY29uc3QgdW5zaWduZWQgaW50IG9wY29kZSk7CitleHRlcm4gdW5zaWduZWQgaW50IFBlcmZvcm1TRk0oY29uc3QgdW5zaWduZWQgaW50IG9wY29kZSk7CisKKy8qIHNpbmdsZV9jcGRvLmMgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGludCBTaW5nbGVDUERPKHN0cnVjdCByb3VuZGluZ0RhdGEgKnJvdW5kRGF0YSwKKwkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgb3Bjb2RlLCBGUFJFRyAqIHJGZCk7CisvKiBkb3VibGVfY3Bkby5jICovCitleHRlcm4gdW5zaWduZWQgaW50IERvdWJsZUNQRE8oc3RydWN0IHJvdW5kaW5nRGF0YSAqcm91bmREYXRhLAorCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBvcGNvZGUsIEZQUkVHICogckZkKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ud2ZwZS9mcGExMV9jcHJ0LmMgYi9hcmNoL2FybS9ud2ZwZS9mcGExMV9jcHJ0LmMKaW5kZXggYWRmOGQzMC4uN2M2NzAyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbndmcGUvZnBhMTFfY3BydC5jCisrKyBiL2FyY2gvYXJtL253ZnBlL2ZwYTExX2NwcnQuYwpAQCAtMjYsMTIgKzI2LDExIEBACiAjaW5jbHVkZSAiZnBhMTEuaW5sIgogI2luY2x1ZGUgImZwbW9kdWxlLmgiCiAjaW5jbHVkZSAiZnBtb2R1bGUuaW5sIgorI2luY2x1ZGUgInNvZnRmbG9hdC5oIgogCiAjaWZkZWYgQ09ORklHX0ZQRV9OV0ZQRV9YUAogZXh0ZXJuIGZsYWcgZmxvYXR4ODBfaXNfbmFuKGZsb2F0eDgwKTsKICNlbmRpZgotZXh0ZXJuIGZsYWcgZmxvYXQ2NF9pc19uYW4oZmxvYXQ2NCk7Ci1leHRlcm4gZmxhZyBmbG9hdDMyX2lzX25hbihmbG9hdDMyKTsKIAogdW5zaWduZWQgaW50IFBlcmZvcm1GTFQoY29uc3QgdW5zaWduZWQgaW50IG9wY29kZSk7CiB1bnNpZ25lZCBpbnQgUGVyZm9ybUZJWChjb25zdCB1bnNpZ25lZCBpbnQgb3Bjb2RlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL253ZnBlL2Zwb3Bjb2RlLmggYi9hcmNoL2FybS9ud2ZwZS9mcG9wY29kZS5oCmluZGV4IDE3NzdlOTIuLjY1MjhlMDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL253ZnBlL2Zwb3Bjb2RlLmgKKysrIGIvYXJjaC9hcm0vbndmcGUvZnBvcGNvZGUuaApAQCAtNDc2LDQgKzQ3NiwxMCBAQAogCXJldHVybiAoblJjKTsKIH0KIAorZXh0ZXJuIHVuc2lnbmVkIGludCBjaGVja0NvbmRpdGlvbihjb25zdCB1bnNpZ25lZCBpbnQgb3Bjb2RlLAorCQkJCSAgIGNvbnN0IHVuc2lnbmVkIGludCBjY29kZXMpOworCitleHRlcm4gY29uc3QgZmxvYXQ2NCBmbG9hdDY0Q29uc3RhbnRbXTsKK2V4dGVybiBjb25zdCBmbG9hdDMyIGZsb2F0MzJDb25zdGFudFtdOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL253ZnBlL3NvZnRmbG9hdC5oIGIvYXJjaC9hcm0vbndmcGUvc29mdGZsb2F0LmgKaW5kZXggMWM4Nzk5Yi4uMTQxNTE3MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbndmcGUvc29mdGZsb2F0LmgKKysrIGIvYXJjaC9hcm0vbndmcGUvc29mdGZsb2F0LmgKQEAgLTI2NSw0ICsyNjUsNyBAQAogCXJldHVybiAoYSAhPSBiKSAmJiAoYVNpZ24gXiAoYSA8IGIpKTsKIH0KIAorZXh0ZXJuIGZsYWcgZmxvYXQzMl9pc19uYW4oIGZsb2F0MzIgYSApOworZXh0ZXJuIGZsYWcgZmxvYXQ2NF9pc19uYW4oIGZsb2F0NjQgYSApOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYwppbmRleCA2Y2IyMGFlLi4wMmJjYzZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KIAogI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY3B1LW9tYXAuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jcHUtb21hcC5jCmluZGV4IDQwOWFhYzIuLmZkODk0YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9jcHUtb21hcC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jcHUtb21hcC5jCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL3VzYi5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3VzYi5jCmluZGV4IDk4ZjFjNzYuLjE0YTgzNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC91c2IuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvdXNiLmMKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKICNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KICNpbmNsdWRlIDxhc20vYXJjaC91c2IuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMgYi9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCmluZGV4IDZkM2E3OWUuLmFlN2M2NGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKKysrIGIvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcwpAQCAtMiwxMSArMiwxNyBAQAogIwogIyBUaGlzIGZpbGUgaXMgbGludXgvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcwogIworIyBVcCB0byBkYXRlIHZlcnNpb25zIG9mIHRoaXMgZmlsZSBjYW4gYmUgb2J0YWluZWQgZnJvbToKKyMKKyMgICBodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvZGV2ZWxvcGVyL21hY2hpbmVzLz9hY3Rpb249ZG93bmxvYWQKKyMKICMgUGxlYXNlIGRvIG5vdCBzZW5kIHBhdGNoZXMgdG8gdGhpcyBmaWxlOyBpdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCEKICMgVG8gYWRkIGFuIGVudHJ5IGludG8gdGhpcyBkYXRhYmFzZSwgcGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2FybS9SRUFETUUsCi0jIG9yIGNvbnRhY3Qgcm1rQGFybS5saW51eC5vcmcudWsKKyMgb3IgdmlzaXQ6CiAjCi0jIExhc3QgdXBkYXRlOiBUaHUgSnVuIDIzIDIwOjE5OjMzIDIwMDUKKyMgICBodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvZGV2ZWxvcGVyL21hY2hpbmVzLz9hY3Rpb249bmV3CisjCisjIExhc3QgdXBkYXRlOiBNb24gT2N0IDEwIDA5OjQ2OjI1IDIwMDUKICMKICMgbWFjaGluZV9pc194eHgJQ09ORklHX3h4eHgJCU1BQ0hfVFlQRV94eHgJCW51bWJlcgogIwpAQCAtNDIxLDcgKzQyNyw3IEBACiBtcG9ydDNzCQkJTUFDSF9NUE9SVDNTCQlNUE9SVDNTCQkJNDExCiByYV9hbHBoYQkJTUFDSF9SQV9BTFBIQQkJUkFfQUxQSEEJCTQxMgogeGNlcAkJCU1BQ0hfWENFUAkJWENFUAkJCTQxMwotYXJjb21fbWVyY3VyeQkJTUFDSF9BUkNPTV9NRVJDVVJZCUFSQ09NX01FUkNVUlkJCTQxNAorYXJjb21fdnVsY2FuCQlNQUNIX0FSQ09NX1ZVTENBTglBUkNPTV9WVUxDQU4JCTQxNAogc3RhcmdhdGUJCU1BQ0hfU1RBUkdBVEUJCVNUQVJHQVRFCQk0MTUKIGFybWFkaWxsb2oJCU1BQ0hfQVJNQURJTExPSgkJQVJNQURJTExPSgkJNDE2CiBlbHJveV9qYWNrCQlNQUNIX0VMUk9ZX0pBQ0sJCUVMUk9ZX0pBQ0sJCTQxNwpAQCAtNDU0LDcgKzQ2MCw3IEBACiB4bTI1MAkJCU1BQ0hfWE0yNTAJCVhNMjUwCQkJNDQ0CiB0NnRjMXhiCQkJTUFDSF9UNlRDMVhCCQlUNlRDMVhCCQkJNDQ1CiBlc3M3MTAJCQlNQUNIX0VTUzcxMAkJRVNTNzEwCQkJNDQ2Ci1teDNhZHMJCQlNQUNIX01YM0FEUwkJTVgzQURTCQkJNDQ3CitteDMxYWRzCQkJTUFDSF9NWDNBRFMJCU1YM0FEUwkJCTQ0NwogaGltYWxheWEJCU1BQ0hfSElNQUxBWUEJCUhJTUFMQVlBCQk0NDgKIGJvbGZlbmsJCQlNQUNIX0JPTEZFTksJCUJPTEZFTksJCQk0NDkKIGF0OTFybTkyMDBrcgkJTUFDSF9BVDkxUk05MjAwS1IJQVQ5MVJNOTIwMEtSCQk0NTAKQEAgLTc4NywzICs3OTMsNzkgQEAKIHRhcHdhdmVfem9kaWFjCQlNQUNIX1RBUFdBVkVfWk9ESUFDCVRBUFdBVkVfWk9ESUFDCQk3NzkKIHVuaXZlcnNhbG1ldGVyCQlNQUNIX1VOSVZFUlNBTE1FVEVSCVVOSVZFUlNBTE1FVEVSCQk3ODAKIGhpY29hcm05CQlNQUNIX0hJQ09BUk05CQlISUNPQVJNOQkJNzgxCitwbng0MDA4CQkJTUFDSF9QTlg0MDA4CQlQTlg0MDA4CQkJNzgyCitrd3M2MDAwCQkJTUFDSF9LV1M2MDAwCQlLV1M2MDAwCQkJNzgzCitwb3J0dXg5MjB0CQlNQUNIX1BPUlRVWDkyMFQJCVBPUlRVWDkyMFQJCTc4NAorZXpfeDUJCQlNQUNIX0VaX1g1CQlFWl9YNQkJCTc4NQorb21hcF9ydWRvbHBoCQlNQUNIX09NQVBfUlVET0xQSAlPTUFQX1JVRE9MUEgJCTc4NgorY3B1YXQ5MQkJCU1BQ0hfQ1BVQVQ5MQkJQ1BVQVQ5MQkJCTc4NworcmVhOTIwMAkJCU1BQ0hfUkVBOTIwMAkJUkVBOTIwMAkJCTc4OAorYWN0c19wdW5lX3NhMTExMAlNQUNIX0FDVFNfUFVORV9TQTExMTAJQUNUU19QVU5FX1NBMTExMAk3ODkKK2l4cDQyNQkJCU1BQ0hfSVhQNDI1CQlJWFA0MjUJCQk3OTAKK2FyZ29ucGx1c29keXNzZXkJTUFDSF9PRFlTU0VZCQlPRFlTU0VZCQkJNzkxCitwZXJjaAkJCU1BQ0hfUEVSQ0gJCVBFUkNICQkJNzkyCitlaXMwNXIxCQkJTUFDSF9FSVMwNVIxCQlFSVMwNVIxCQkJNzkzCitwZXBwZXJwYWQJCU1BQ0hfUEVQUEVSUEFECQlQRVBQRVJQQUQJCTc5NAorc2IzMDEwCQkJTUFDSF9TQjMwMTAJCVNCMzAxMAkJCTc5NQorcm05MjAwCQkJTUFDSF9STTkyMDAJCVJNOTIwMAkJCTc5NgorZG1hMDMJCQlNQUNIX0RNQTAzCQlETUEwMwkJCTc5Nworcm9hZF9zMTAxCQlNQUNIX1JPQURfUzEwMQkJUk9BRF9TMTAxCQk3OTgKK2lxX25leHRnZW5fYQkJTUFDSF9JUV9ORVhUR0VOX0EJSVFfTkVYVEdFTl9BCQk3OTkKK2lxX25leHRnZW5fYgkJTUFDSF9JUV9ORVhUR0VOX0IJSVFfTkVYVEdFTl9CCQk4MDAKK2lxX25leHRnZW5fYwkJTUFDSF9JUV9ORVhUR0VOX0MJSVFfTkVYVEdFTl9DCQk4MDEKK2lxX25leHRnZW5fZAkJTUFDSF9JUV9ORVhUR0VOX0QJSVFfTkVYVEdFTl9ECQk4MDIKK2lxX25leHRnZW5fZQkJTUFDSF9JUV9ORVhUR0VOX0UJSVFfTkVYVEdFTl9FCQk4MDMKK21hbGxvd19hdDkxCQlNQUNIX01BTExPV19BVDkxCU1BTExPV19BVDkxCQk4MDQKK2N5YmVydHJhY2tlcgkJTUFDSF9DWUJFUlRSQUNLRVIJQ1lCRVJUUkFDS0VSCQk4MDUKK2dlc2JjOTMxeAkJTUFDSF9HRVNCQzkzMVgJCUdFU0JDOTMxWAkJODA2CitjZW50aXBhZAkJTUFDSF9DRU5USVBBRAkJQ0VOVElQQUQJCTgwNworYXJtc29jCQkJTUFDSF9BUk1TT0MJCUFSTVNPQwkJCTgwOAorc2U0MjAwCQkJTUFDSF9TRTQyMDAJCVNFNDIwMAkJCTgwOQorZW1zMTk3YQkJCU1BQ0hfRU1TMTk3QQkJRU1TMTk3QQkJCTgxMAorbWljcm85CQkJTUFDSF9NSUNSTzkJCU1JQ1JPOQkJCTgxMQorbWljcm85bAkJCU1BQ0hfTUlDUk85TAkJTUlDUk85TAkJCTgxMgordWM1NDcxZHNwCQlNQUNIX1VDNTQ3MURTUAkJVUM1NDcxRFNQCQk4MTMKK3NqNTQ3MWVuZwkJTUFDSF9TSjU0NzFFTkcJCVNKNTQ3MUVORwkJODE0Citub25lCQkJTUFDSF9DTVBYQTI2WAkJQ01QWEEyNlgJCTgxNQorbmMJCQlNQUNIX05DCQkJTkMJCQk4MTYKK29tYXBfcGFsbXRlCQlNQUNIX09NQVBfUEFMTVRFCU9NQVBfUEFMTVRFCQk4MTcKK2FqYXg1MngJCQlNQUNIX0FKQVg1MlgJCUFKQVg1MlgJCQk4MTgKK3Npcml1c3RhcgkJTUFDSF9TSVJJVVNUQVIJCVNJUklVU1RBUgkJODE5Citpb2RhdGFfaGRsZwkJTUFDSF9JT0RBVEFfSERMRwlJT0RBVEFfSERMRwkJODIwCithdDkxcm05MjAwdXRsCQlNQUNIX0FUOTFSTTkyMDBVVEwJQVQ5MVJNOTIwMFVUTAkJODIxCitiaW9zYWZlCQkJTUFDSF9CSU9TQUZFCQlCSU9TQUZFCQkJODIyCittcDEwMDAJCQlNQUNIX01QMTAwMAkJTVAxMDAwCQkJODIzCitwYXJzeQkJCU1BQ0hfUEFSU1kJCVBBUlNZCQkJODI0CitjY3hwMjcwCQkJTUFDSF9DQ1hQCQlDQ1hQCQkJODI1CitvbWFwX2dzYW1wbGUJCU1BQ0hfT01BUF9HU0FNUExFCU9NQVBfR1NBTVBMRQkJODI2CityZWFsdmlld19lYgkJTUFDSF9SRUFMVklFV19FQglSRUFMVklFV19FQgkJODI3CitzYW1vYQkJCU1BQ0hfU0FNT0EJCVNBTU9BCQkJODI4Cit0M3hzY2FsZQkJTUFDSF9UM1hTQ0FMRQkJVDNYU0NBTEUJCTgyOQoraTg3OAkJCU1BQ0hfSTg3OAkJSTg3OAkJCTgzMAorYm9yem9pCQkJTUFDSF9CT1JaT0kJCUJPUlpPSQkJCTgzMQorZ2Vja28JCQlNQUNIX0dFQ0tPCQlHRUNLTwkJCTgzMgorZHMxMDEJCQlNQUNIX0RTMTAxCQlEUzEwMQkJCTgzMworb21hcF9wYWxtdHQyCQlNQUNIX09NQVBfUEFMTVRUMglPTUFQX1BBTE1UVDIJCTgzNAoreHNjYWxlX3BhbG1sZAkJTUFDSF9YU0NBTEVfUEFMTUxECVhTQ0FMRV9QQUxNTEQJCTgzNQorY2M5YwkJCU1BQ0hfQ0M5QwkJQ0M5QwkJCTgzNgorc2JjMTY3MAkJCU1BQ0hfU0JDMTY3MAkJU0JDMTY3MAkJCTgzNworaXhkcDI4eDUJCU1BQ0hfSVhEUDI4WDUJCUlYRFAyOFg1CQk4MzgKK29tYXBfcGFsbXR0CQlNQUNIX09NQVBfUEFMTVRUCU9NQVBfUEFMTVRUCQk4MzkKK21sNjk2awkJCU1BQ0hfTUw2OTZLCQlNTDY5NksJCQk4NDAKK2FyY29tX3pldXMJCU1BQ0hfQVJDT01fWkVVUwkJQVJDT01fWkVVUwkJODQxCitvc2lyaXMJCQlNQUNIX09TSVJJUwkJT1NJUklTCQkJODQyCittYWVzdHJvCQkJTUFDSF9NQUVTVFJPCQlNQUVTVFJPCQkJODQzCit0dW5nZTIJCQlNQUNIX1RVTkdFMgkJVFVOR0UyCQkJODQ0CitpeGJibQkJCU1BQ0hfSVhCQk0JCUlYQkJNCQkJODQ1CitteDI3CQkJTUFDSF9NWDI3CQlNWDI3CQkJODQ2CitheDgwMDQJCQlNQUNIX0FYODAwNAkJQVg4MDA0CQkJODQ3CithdDkxc2FtOTI2MWVrCQlNQUNIX0FUOTFTQU05MjYxRUsJQVQ5MVNBTTkyNjFFSwkJODQ4Citsb2Z0CQkJTUFDSF9MT0ZUCQlMT0ZUCQkJODQ5CittYWdwaWUJCQlNQUNIX01BR1BJRQkJTUFHUElFCQkJODUwCitteDIxCQkJTUFDSF9NWDIxCQlNWDIxCQkJODUxCittYjg3bTM0MDAJCU1BQ0hfTUI4N00zNDAwCQlNQjg3TTM0MDAJCTg1MgorbWd1YXJkX2RlbHRhCQlNQUNIX01HVUFSRF9ERUxUQQlNR1VBUkRfREVMVEEJCTg1MworZGF2aW5jaV9kdmRwCQlNQUNIX0RBVklOQ0lfRFZEUAlEQVZJTkNJX0RWRFAJCTg1NAoraHRjdW5pdmVyc2FsCQlNQUNIX0hUQ1VOSVZFUlNBTAlIVENVTklWRVJTQUwJCTg1NQordHBhZAkJCU1BQ0hfVFBBRAkJVFBBRAkJCTg1Ngorcm92ZXJwMwkJCU1BQ0hfUk9WRVJQMwkJUk9WRVJQMwkJCTg1NwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0yNi9ib290L2NvbXByZXNzZWQvaHctYnNlLmMgYi9hcmNoL2FybTI2L2Jvb3QvY29tcHJlc3NlZC9ody1ic2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U4ZjA3Zi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybTI2L2Jvb3QvY29tcHJlc3NlZC9ody1ic2UuYworKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBCcmlnaHQgU3RhciBFbmdpbmVlcmluZyBJbmMuCi0gKgotICogY29kZSBmb3IgcmVhZG5nIHBhcmFtZXRlcnMgZnJvbSB0aGUKLSAqIHBhcmFtZXRlciBibG9ja3Mgb2YgdGhlIGJvb3QgYmxvY2sKLSAqIGZsYXNoIG1lbW9yeQotICoKLSAqLwotCi1zdGF0aWMgaW50IHN0cmNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpCi17Ci0gIHdoaWxlICgqczEgIT0gJ1wwJyAmJiAqczEgPT0gKnMyKQotICAgIHsKLSAgICAgIHMxKys7Ci0gICAgICBzMisrOwotICAgIH0KLQotICByZXR1cm4gKCoodW5zaWduZWQgY2hhciAqKSBzMSkgLSAoKih1bnNpZ25lZCBjaGFyICopIHMyKTsKLX0KLQotc3RydWN0IHBibGtfdCB7Ci0gIGNoYXIgdHlwZTsKLSAgdW5zaWduZWQgc2hvcnQgc2l6ZTsKLX07Ci0KLXN0YXRpYyBjaGFyICpic2VfZ2V0Zmxhc2hwYXJhbShjaGFyICpuYW1lKSB7Ci0gIHVuc2lnbmVkIGludCBlc2l6ZTsKLSAgY2hhciAqcSwqcjsKLSAgdW5zaWduZWQgY2hhciAqcCwqZTsKLSAgc3RydWN0IHBibGtfdCAqdGhlcGIgPSAoc3RydWN0IHBibGtfdCAqKSAweDAwMDA0MDAwOwotICBzdHJ1Y3QgcGJsa190ICphbHRwYiA9IChzdHJ1Y3QgcGJsa190ICopIDB4MDAwMDYwMDA7ICAKLSAgaWYgKHRoZXBiLT50eXBlJjEpIHsKLSAgICBpZiAoYWx0cGItPnR5cGUmMSkgewotICAgICAgLyogbm8gdmFsaWQgcGFyYW0gYmxvY2sgKi8gCi0gICAgICByZXR1cm4gKGNoYXIqKTA7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIGFsdHBiIGlzIHZhbGlkICovCi0gICAgICBzdHJ1Y3QgcGJsa190ICp0bXA7Ci0gICAgICB0bXAgPSB0aGVwYjsKLSAgICAgIHRoZXBiID0gYWx0cGI7Ci0gICAgICBhbHRwYiA9IHRtcDsKLSAgICB9Ci0gIH0KLSAgcCA9IChjaGFyKil0aGVwYiArIHNpemVvZihzdHJ1Y3QgcGJsa190KTsKLSAgZSA9IHAgKyB0aGVwYi0+c2l6ZTsgCi0gIHdoaWxlIChwIDwgZSkgewotICAgIHEgPSBwOwotICAgIGVzaXplID0gKnA7Ci0gICAgaWYgKGVzaXplID09IDB4RkYpIGJyZWFrOwotICAgIGlmIChlc2l6ZSA9PSAwKSBicmVhazsKLSAgICBpZiAoZXNpemUgPiAxMjcpIHsKLSAgICAgIGVzaXplID0gKGVzaXplJjB4N0YpPDw4IHwgcFsxXTsKLSAgICAgIHErKzsKLSAgICB9Ci0gICAgcSsrOwotICAgIHI9cTsKLSAgICBpZiAoKnIgJiYgKChuYW1lID09IDApIHx8ICghc3RyY21wKG5hbWUscikpKSkgewotICAgICAgd2hpbGUgKCpxKyspIDsKLSAgICAgIHJldHVybiBxOwotICAgIH0KLSAgICBwKz1lc2l6ZTsKLSAgfQotICByZXR1cm4gKGNoYXIqKTA7Ci19Ci0KLXZvaWQgYnNlX3NldHVwKHZvaWQpIHsKLSAgLyogZXh0cmFjdCB0aGUgbGludXggY21kbGluZSBmcm9tIGZsYXNoICovCi0gIGNoYXIgKm5hbWU9YnNlX2dldGZsYXNocGFyYW0oImxpbnV4Ym9vdCIpOwotICBjaGFyICp4ID0gKGNoYXIgKikweGMwMDAwMTAwOwotICBpZiAobmFtZSkgeyAKLSAgICB3aGlsZSAoKm5hbWUpICp4Kys9Km5hbWUrKzsKLSAgfQotICAqeD0wOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvcGNpL2RtYS5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvcGNpL2RtYS5jCmluZGV4IDEwMzI5MzAuLjQyNmIwOTggMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3BjaS9kbWEuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2kvZG1hLmMKQEAgLTI0LDcgKzI0LDcgQEAKIH07CiAKIHZvaWQgKmRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCkKKwkJCSAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCkKIHsKIAl2b2lkICpyZXQ7CiAJc3RydWN0IGRtYV9jb2hlcmVudF9tZW0gKm1lbSA9IGRldiA/IGRldi0+ZG1hX21lbSA6IE5VTEw7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NtcC5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zbXAuYwppbmRleCAyYzVjYWUwLi45NTdmNTUxIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc21wLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNkZWZpbmUgSVBJX1NDSEVEVUxFIDEKICNkZWZpbmUgSVBJX0NBTEwgMgpAQCAtMjgsNiArMjksNyBAQAogLyogQ1BVIG1hc2tzICovCiBjcHVtYXNrX3QgY3B1X29ubGluZV9tYXAgPSBDUFVfTUFTS19OT05FOwogY3B1bWFza190IHBoeXNfY3B1X3ByZXNlbnRfbWFwID0gQ1BVX01BU0tfTk9ORTsKK0VYUE9SVF9TWU1CT0wocGh5c19jcHVfcHJlc2VudF9tYXApOwogCiAvKiBWYXJpYWJsZXMgdXNlZCBkdXJpbmcgU01QIGJvb3QgKi8KIHZvbGF0aWxlIGludCBjcHVfbm93X2Jvb3RpbmcgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L0tjb25maWcgYi9hcmNoL2kzODYvS2NvbmZpZwppbmRleCBiMjJmMDAzLi5kMjcwM2NkIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvS2NvbmZpZworKysgYi9hcmNoL2kzODYvS2NvbmZpZwpAQCAtOTA4LDExICs5MDgsNiBAQAogIAkgIFRoZSBkZWZhdWx0IHllcyB3aWxsIGFsbG93IHRoZSBrZXJuZWwgdG8gZG8gaXJxIGxvYWQgYmFsYW5jaW5nLgogCSAgU2F5aW5nIG5vIHdpbGwga2VlcCB0aGUga2VybmVsIGZyb20gZG9pbmcgaXJxIGxvYWQgYmFsYW5jaW5nLgogCi1jb25maWcgSEFWRV9ERUNfTE9DSwotCWJvb2wKLQlkZXBlbmRzIG9uIChTTVAgfHwgUFJFRU1QVCkgJiYgWDg2X0NNUFhDSEcKLQlkZWZhdWx0IHkKLQogIyB0dXJuaW5nIHRoaXMgb24gd2FzdGVzIGEgYnVuY2ggb2Ygc3BhY2UuCiAjIFN1bW1pdCBuZWVkcyBpdCBvbmx5IHdoZW4gTlVNQSBpcyBvbgogY29uZmlnIEJPT1RfSU9SRU1BUApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL2Jvb3QuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9ib290LmMKaW5kZXggYTYzMzUxYy4uYjY2YzEzYyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL2Jvb3QuYworKysgYi9hcmNoL2kzODYva2VybmVsL2FjcGkvYm9vdC5jCkBAIC0yNywxNSArMjcsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvZWZpLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9pb19hcGljLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21wc3BlYy5oPgogCiAjaWZkZWYJQ09ORklHX1g4Nl82NApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9hcGljLmMgYi9hcmNoL2kzODYva2VybmVsL2FwaWMuYwppbmRleCBhMjJhODY2Li41NTQ2ZGRlIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2FwaWMuYworKysgYi9hcmNoL2kzODYva2VybmVsL2FwaWMuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2FtZC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvYW1kLmMKaW5kZXggNzNhZWFmNS4uNTNhMTY4MSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvYW1kLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvYW1kLmMKQEAgLTI4LDYgKzI4LDIyIEBACiAJaW50IG1ieXRlcyA9IG51bV9waHlzcGFnZXMgPj4gKDIwLVBBR0VfU0hJRlQpOwogCWludCByOwogCisjaWZkZWYgQ09ORklHX1NNUAorCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZTsKKworCS8qIERpc2FibGUgVExCIGZsdXNoIGZpbHRlciBieSBzZXR0aW5nIEhXQ1IuRkZESVMgb24gSzgKKwkgKiBiaXQgNiBvZiBtc3IgQzAwMV8wMDE1CisJICoKKwkgKiBFcnJhdGEgNjMgZm9yIFNILUIzIHN0ZXBwaW5ncworCSAqIEVycmF0YSAxMjIgZm9yIGFsbCBzdGVwcGluZ3MgKEYrIGhhdmUgaXQgZGlzYWJsZWQgYnkgZGVmYXVsdCkKKwkgKi8KKwlpZiAoYy0+eDg2ID09IDE1KSB7CisJCXJkbXNybChNU1JfSzdfSFdDUiwgdmFsdWUpOworCQl2YWx1ZSB8PSAxIDw8IDY7CisJCXdybXNybChNU1JfSzdfSFdDUiwgdmFsdWUpOworCX0KKyNlbmRpZgorCiAJLyoKIAkgKglGSVhNRTogV2Ugc2hvdWxkIGhhbmRsZSB0aGUgSzUgaGVyZS4gU2V0IHVwIHRoZSB3cml0ZQogCSAqCXJhbmdlIGFuZCBhbHNvIHR1cm4gb24gTVNSIDgzIGJpdHMgNCBhbmQgMzEgKHdyaXRlIGFsbG9jLApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCmluZGV4IGFiNmUwNjEuLjU4Y2E5OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogI2RlZmluZSBQRlggInBvd2Vybm93LWs4OiAiCiAjZGVmaW5lIEJGWCBQRlggIkJJT1MgZXJyb3I6ICIKLSNkZWZpbmUgVkVSU0lPTiAidmVyc2lvbiAxLjUwLjMiCisjZGVmaW5lIFZFUlNJT04gInZlcnNpb24gMS41MC40IgogI2luY2x1ZGUgInBvd2Vybm93LWs4LmgiCiAKIC8qIHNlcmlhbGl6ZSBmcmVxIGNoYW5nZXMgICovCkBAIC0xMTEsOCArMTExLDggQEAKIAl1MzIgaSA9IDA7CiAKIAlkbyB7Ci0JCWlmIChpKysgPiAweDEwMDAwMDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggImRldGVjdGVkIGNoYW5nZSBwZW5kaW5nIHN0dWNrXG4iKTsKKwkJaWYgKGkrKyA+IDEwMDAwKSB7CisJCQlkcHJpbnRrKCJkZXRlY3RlZCBjaGFuZ2UgcGVuZGluZyBzdHVja1xuIik7CiAJCQlyZXR1cm4gMTsKIAkJfQogCQlyZG1zcihNU1JfRklEVklEX1NUQVRVUywgbG8sIGhpKTsKQEAgLTE1OSw2ICsxNTksNyBAQAogewogCXUzMiBsbzsKIAl1MzIgc2F2ZXZpZCA9IGRhdGEtPmN1cnJ2aWQ7CisJdTMyIGkgPSAwOwogCiAJaWYgKChmaWQgJiBJTlZBTElEX0ZJRF9NQVNLKSB8fCAoZGF0YS0+Y3VycnZpZCAmIElOVkFMSURfVklEX01BU0spKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImludGVybmFsIGVycm9yIC0gb3ZlcmZsb3cgb24gZmlkIHdyaXRlXG4iKTsKQEAgLTE3MCwxMCArMTcxLDEzIEBACiAJZHByaW50aygid3JpdGluZyBmaWQgMHgleCwgbG8gMHgleCwgaGkgMHgleFxuIiwKIAkJZmlkLCBsbywgZGF0YS0+cGxsbG9jayAqIFBMTF9MT0NLX0NPTlZFUlNJT04pOwogCi0Jd3Jtc3IoTVNSX0ZJRFZJRF9DVEwsIGxvLCBkYXRhLT5wbGxsb2NrICogUExMX0xPQ0tfQ09OVkVSU0lPTik7Ci0KLQlpZiAocXVlcnlfY3VycmVudF92YWx1ZXNfd2l0aF9wZW5kaW5nX3dhaXQoZGF0YSkpCi0JCXJldHVybiAxOworCWRvIHsKKwkJd3Jtc3IoTVNSX0ZJRFZJRF9DVEwsIGxvLCBkYXRhLT5wbGxsb2NrICogUExMX0xPQ0tfQ09OVkVSU0lPTik7CisJCWlmIChpKysgPiAxMDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggImludGVybmFsIGVycm9yIC0gcGVuZGluZyBiaXQgdmVyeSBzdHVjayAtIG5vIGZ1cnRoZXIgcHN0YXRlIGNoYW5nZXMgcG9zc2libGVcbiIpOworCQkJcmV0dXJuIDE7CisJCX0JCQkKKwl9IHdoaWxlIChxdWVyeV9jdXJyZW50X3ZhbHVlc193aXRoX3BlbmRpbmdfd2FpdChkYXRhKSk7CiAKIAljb3VudF9vZmZfaXJ0KGRhdGEpOwogCkBAIC0xOTcsNiArMjAxLDcgQEAKIHsKIAl1MzIgbG87CiAJdTMyIHNhdmVmaWQgPSBkYXRhLT5jdXJyZmlkOworCWludCBpID0gMDsKIAogCWlmICgoZGF0YS0+Y3VycmZpZCAmIElOVkFMSURfRklEX01BU0spIHx8ICh2aWQgJiBJTlZBTElEX1ZJRF9NQVNLKSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJpbnRlcm5hbCBlcnJvciAtIG92ZXJmbG93IG9uIHZpZCB3cml0ZVxuIik7CkBAIC0yMDgsMTAgKzIxMywxMyBAQAogCWRwcmludGsoIndyaXRpbmcgdmlkIDB4JXgsIGxvIDB4JXgsIGhpIDB4JXhcbiIsCiAJCXZpZCwgbG8sIFNUT1BfR1JBTlRfNU5TKTsKIAotCXdybXNyKE1TUl9GSURWSURfQ1RMLCBsbywgU1RPUF9HUkFOVF81TlMpOwotCi0JaWYgKHF1ZXJ5X2N1cnJlbnRfdmFsdWVzX3dpdGhfcGVuZGluZ193YWl0KGRhdGEpKQotCQlyZXR1cm4gMTsKKwlkbyB7CisJCXdybXNyKE1TUl9GSURWSURfQ1RMLCBsbywgU1RPUF9HUkFOVF81TlMpOworICAgICAgICAgICAgICAgIGlmIChpKysgPiAxMDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiBQRlggImludGVybmFsIGVycm9yIC0gcGVuZGluZyBiaXQgdmVyeSBzdHVjayAtIG5vIGZ1cnRoZXIgcHN0YXRlIGNoYW5nZXMgcG9zc2libGVcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgfQorCX0gd2hpbGUgKHF1ZXJ5X2N1cnJlbnRfdmFsdWVzX3dpdGhfcGVuZGluZ193YWl0KGRhdGEpKTsKIAogCWlmIChzYXZlZmlkICE9IGRhdGEtPmN1cnJmaWQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmlkIGNoYW5nZWQgb24gdmlkIHRyYW5zLCBvbGQgMHgleCBuZXcgMHgleFxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L21jaGVjay9rNy5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL2s3LmMKaW5kZXggYzRhYmU3Ni4uN2M2YjljNyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL2s3LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL2s3LmMKQEAgLTcsNyArNyw2IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL25vbi1mYXRhbC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL25vbi1mYXRhbC5jCmluZGV4IDc4NjRkZGYuLjgyZGZmZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L21jaGVjay9ub24tZmF0YWwuYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9tY2hlY2svbm9uLWZhdGFsLmMKQEAgLTEyLDcgKzEyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9tY2hlY2svcDQuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L21jaGVjay9wNC5jCmluZGV4IDBhYmNjYjYuLjFkMWU4ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L21jaGVjay9wNC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L21jaGVjay9wNC5jCkBAIC02LDcgKzYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L21jaGVjay9wNS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL3A1LmMKaW5kZXggZWMwNjE0Yy4uM2EyZTI0YiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL3A1LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL3A1LmMKQEAgLTYsNyArNiw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L21jaGVjay9wNi5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL3A2LmMKaW5kZXggZjAxYjczZi4uM2MwMzViOCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL3A2LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL3A2LmMKQEAgLTYsNyArNiw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L21jaGVjay93aW5jaGlwLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9tY2hlY2svd2luY2hpcC5jCmluZGV4IDdiYWU2OGYuLjViOWQyZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L21jaGVjay93aW5jaGlwLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL3dpbmNoaXAuYwpAQCAtNiw3ICs2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4gCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NyYXNoLmMgYi9hcmNoL2kzODYva2VybmVsL2NyYXNoLmMKaW5kZXggOTEzYmU3Ny4uMDI0OGUwOCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcmFzaC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3Jhc2guYwpAQCAtMTEsMTAgKzExLDggQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9lbGYuaD4KICNpbmNsdWRlIDxsaW51eC9lbGZjb3JlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2k4MjU5LmMgYi9hcmNoL2kzODYva2VybmVsL2k4MjU5LmMKaW5kZXggMTc4ZjRlOS4uMzIzZWY4YSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9pODI1OS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvaTgyNTkuYwpAQCAtMTYsNyArMTYsNiBAQAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS90aW1lci5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CkBAIC0yNSw4ICsyNCw2IEBACiAjaW5jbHVkZSA8YXNtL2FyY2hfaG9va3MuaD4KICNpbmNsdWRlIDxhc20vaTgyNTkuaD4KIAotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotCiAjaW5jbHVkZSA8aW9fcG9ydHMuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvaW9fYXBpYy5jIGIvYXJjaC9pMzg2L2tlcm5lbC9pb19hcGljLmMKaW5kZXggMzc4MzEzYi4uZmIzOTkxZSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9pb19hcGljLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9pb19hcGljLmMKQEAgLTIxLDcgKzIxLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvbXBwYXJzZS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9tcHBhcnNlLmMKaW5kZXggMTU5NDlmZC4uMjdhYWJmYyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9tcHBhcnNlLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9tcHBhcnNlLmMKQEAgLTE0LDcgKzE0LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL25taS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9ubWkuYwppbmRleCAwMTc4NDU3Li43MjUxNWI4IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL25taS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvbm1pLmMKQEAgLTE1LDcgKzE1LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvcGNpLWRtYS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9wY2ktZG1hLmMKaW5kZXggMWU1MTQyNy4uMjVmZTY2OCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9wY2ktZG1hLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9wY2ktZG1hLmMKQEAgLTIzLDcgKzIzLDcgQEAKIH07CiAKIHZvaWQgKmRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCkKKwkJCSAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCkKIHsKIAl2b2lkICpyZXQ7CiAJc3RydWN0IGRtYV9jb2hlcmVudF9tZW0gKm1lbSA9IGRldiA/IGRldi0+ZG1hX21lbSA6IE5VTEw7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGI0NWNiZjkuLjdhMTRmZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jCkBAIC00NywxMyArNDcsMTEgQEAKICNpbmNsdWRlIDxhc20vbGR0Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9pMzg3Lmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+CiAjaWZkZWYgQ09ORklHX01BVEhfRU1VTEFUSU9OCiAjaW5jbHVkZSA8YXNtL21hdGhfZW11Lmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9zaWduYWwuYwppbmRleCA2MWViMGM4Li5hZGNkMDY5IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvc2lnbmFsLmMKQEAgLTMzOCw3ICszMzgsMTEgQEAKIAkJZXNwID0gKHVuc2lnbmVkIGxvbmcpIGthLT5zYS5zYV9yZXN0b3JlcjsKIAl9CiAKLQlyZXR1cm4gKHZvaWQgX191c2VyICopKChlc3AgLSBmcmFtZV9zaXplKSAmIC04dWwpOworCWVzcCAtPSBmcmFtZV9zaXplOworCS8qIEFsaWduIHRoZSBzdGFjayBwb2ludGVyIGFjY29yZGluZyB0byB0aGUgaTM4NiBBQkksCisJICogaS5lLiBzbyB0aGF0IG9uIGZ1bmN0aW9uIGVudHJ5ICgoc3AgKyA0KSAmIDE1KSA9PSAwLiAqLworCWVzcCA9ICgoZXNwICsgNCkgJiAtMTZ1bCkgLSA0OworCXJldHVybiAodm9pZCBfX3VzZXIgKikgZXNwOwogfQogCiAvKiBUaGVzZSBzeW1ib2xzIGFyZSBkZWZpbmVkIHdpdGggdGhlIGFkZHJlc3NlcyBpbiB0aGUgdnN5c2NhbGwgcGFnZS4KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvc21wLmMgYi9hcmNoL2kzODYva2VybmVsL3NtcC5jCmluZGV4IDQ4YjU1ZGIuLjIxOGQ3MjUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9zbXAuYwpAQCAtMTEsNyArMTEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IDVmMGE5NWQuLjFmYjI2ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3RpbWVycy90aW1lcl9waXQuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvdGltZXJzL3RpbWVyX3BpdC5jCmluZGV4IGVkZGI2NDAuLmU0MmU0NmQzIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3RpbWVycy90aW1lcl9waXQuYworKysgYi9hcmNoL2kzODYva2VybmVsL3RpbWVycy90aW1lcl9waXQuYwpAQCAtNiw3ICs2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMgYi9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMKaW5kZXggNDMxYTU1MS4uMTllOTBiZCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvdHJhcHMuYwpAQCAtNTIsNyArNTIsNiBAQAogI2luY2x1ZGUgPGFzbS9hcmNoX2hvb2tzLmg+CiAjaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgogCi0jaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlICJtYWNoX3RyYXBzLmgiCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbGliL01ha2VmaWxlIGIvYXJjaC9pMzg2L2xpYi9NYWtlZmlsZQppbmRleCA3YjE5MzJkLi45MTQ5MzNlIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbGliL01ha2VmaWxlCisrKyBiL2FyY2gvaTM4Ni9saWIvTWFrZWZpbGUKQEAgLTcsNCArNywzIEBACiAJYml0b3BzLm8KIAogbGliLSQoQ09ORklHX1g4Nl9VU0VfM0ROT1cpICs9IG1teC5vCi1saWItJChDT05GSUdfSEFWRV9ERUNfTE9DSykgKz0gZGVjX2FuZF9sb2NrLm8KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9saWIvZGVjX2FuZF9sb2NrLmMgYi9hcmNoL2kzODYvbGliL2RlY19hbmRfbG9jay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjgxYjI1Li4wMDAwMDAwCi0tLSBhL2FyY2gvaTM4Ni9saWIvZGVjX2FuZF9sb2NrLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgotICogeDg2IHZlcnNpb24gb2YgImF0b21pY19kZWNfYW5kX2xvY2soKSIgdXNpbmcKLSAqIHRoZSBhdG9taWMgImNtcHhjaGciIGluc3RydWN0aW9uLgotICoKLSAqIChGb3IgQ1BVJ3MgbGFja2luZyBjbXB4Y2hnLCB3ZSB1c2UgdGhlIHNsb3cKLSAqIGdlbmVyaWMgdmVyc2lvbiwgYW5kIHRoaXMgb25lIG5ldmVyIGV2ZW4gZ2V0cwotICogY29tcGlsZWQpLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLQotaW50IF9hdG9taWNfZGVjX2FuZF9sb2NrKGF0b21pY190ICphdG9taWMsIHNwaW5sb2NrX3QgKmxvY2spCi17Ci0JaW50IGNvdW50ZXI7Ci0JaW50IG5ld2NvdW50OwotCi1yZXBlYXQ6Ci0JY291bnRlciA9IGF0b21pY19yZWFkKGF0b21pYyk7Ci0JbmV3Y291bnQgPSBjb3VudGVyLTE7Ci0KLQlpZiAoIW5ld2NvdW50KQotCQlnb3RvIHNsb3dfcGF0aDsKLQotCWFzbSB2b2xhdGlsZSgibG9jazsgY21weGNoZ2wgJTEsJTIiCi0JCToiPWEiIChuZXdjb3VudCkKLQkJOiJyIiAobmV3Y291bnQpLCAibSIgKGF0b21pYy0+Y291bnRlciksICIwIiAoY291bnRlcikpOwotCi0JLyogSWYgdGhlIGFib3ZlIGZhaWxlZCwgImVheCIgd2lsbCBoYXZlIGNoYW5nZWQgKi8KLQlpZiAobmV3Y291bnQgIT0gY291bnRlcikKLQkJZ290byByZXBlYXQ7Ci0JcmV0dXJuIDA7Ci0KLXNsb3dfcGF0aDoKLQlzcGluX2xvY2sobG9jayk7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoYXRvbWljKSkKLQkJcmV0dXJuIDE7Ci0Jc3Bpbl91bmxvY2sobG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKF9hdG9taWNfZGVjX2FuZF9sb2NrKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tYWNoLWRlZmF1bHQvc2V0dXAuYyBiL2FyY2gvaTM4Ni9tYWNoLWRlZmF1bHQvc2V0dXAuYwppbmRleCBlNWExYTgzLi5iNGE3NDU1IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbWFjaC1kZWZhdWx0L3NldHVwLmMKKysrIGIvYXJjaC9pMzg2L21hY2gtZGVmYXVsdC9zZXR1cC5jCkBAIC01LDcgKzUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxhc20vYWNwaS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoX2hvb2tzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbWFjaC12aXN3cy9zZXR1cC5jIGIvYXJjaC9pMzg2L21hY2gtdmlzd3Mvc2V0dXAuYwppbmRleCAyNmFkYTZmLi4wN2ZhYzdlIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbWFjaC12aXN3cy9zZXR1cC5jCisrKyBiL2FyY2gvaTM4Ni9tYWNoLXZpc3dzL3NldHVwLmMKQEAgLTUsNyArNSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKICNpbmNsdWRlIDxhc20vZml4bWFwLmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbWFjaC12aXN3cy92aXN3c19hcGljLmMgYi9hcmNoL2kzODYvbWFjaC12aXN3cy92aXN3c19hcGljLmMKaW5kZXggMDRlNjU4NS4uM2U2NGZiNyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L21hY2gtdmlzd3Mvdmlzd3NfYXBpYy5jCisrKyBiL2FyY2gvaTM4Ni9tYWNoLXZpc3dzL3Zpc3dzX2FwaWMuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvc2V0dXAuYyBiL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvc2V0dXAuYwppbmRleCBkZjEyM2ZjLi43ZDhhM2FjIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbWFjaC12b3lhZ2VyL3NldHVwLmMKKysrIGIvYXJjaC9pMzg2L21hY2gtdm95YWdlci9zZXR1cC5jCkBAIC00LDcgKzQsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGFzbS9hY3BpLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2hfaG9va3MuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9iYXNpYy5jIGIvYXJjaC9pMzg2L21hY2gtdm95YWdlci92b3lhZ2VyX2Jhc2ljLmMKaW5kZXggY2M2OTg3NS4uYWE0OWEzMyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L21hY2gtdm95YWdlci92b3lhZ2VyX2Jhc2ljLmMKKysrIGIvYXJjaC9pMzg2L21hY2gtdm95YWdlci92b3lhZ2VyX2Jhc2ljLmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlIDxhc20vdm95YWdlci5oPgogI2luY2x1ZGUgPGFzbS92aWMuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoX2hvb2tzLmg+CiAjaW5jbHVkZSA8YXNtL2k4MjUzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfc21wLmMgYi9hcmNoL2kzODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfc21wLmMKaW5kZXggNDZiMGNmNC4uNzJhMWI5YyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L21hY2gtdm95YWdlci92b3lhZ2VyX3NtcC5jCisrKyBiL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYwpAQCAtMzAsOCArMzAsNiBAQAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoX2hvb2tzLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLQogLyogVExCIHN0YXRlIC0tIHZpc2libGUgZXh0ZXJuYWxseSwgaW5kZXhlZCBwaHlzaWNhbGx5ICovCiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdGxiX3N0YXRlLCBjcHVfdGxic3RhdGUpIF9fX19jYWNoZWxpbmVfYWxpZ25lZCA9IHsgJmluaXRfbW0sIDAgfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L21hY2gtdm95YWdlci92b3lhZ2VyX3RocmVhZC5jIGIvYXJjaC9pMzg2L21hY2gtdm95YWdlci92b3lhZ2VyX3RocmVhZC5jCmluZGV4IGE5MzQxYjAuLjJiMDM4ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl90aHJlYWQuYworKysgYi9hcmNoL2kzODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfdGhyZWFkLmMKQEAgLTMxLDggKzMxLDYgQEAKICNpbmNsdWRlIDxhc20vbXRyci5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KIAotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotCiAjZGVmaW5lIFRIUkVBRF9OQU1FICJrdm95YWdlcmQiCiAKIC8qIGV4dGVybmFsIHZhcmlhYmxlcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L29wcm9maWxlL25taV90aW1lcl9pbnQuYyBiL2FyY2gvaTM4Ni9vcHJvZmlsZS9ubWlfdGltZXJfaW50LmMKaW5kZXggYWQ5M2NkZC4uOTMwYTExMiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L29wcm9maWxlL25taV90aW1lcl9pbnQuYworKysgYi9hcmNoL2kzODYvb3Byb2ZpbGUvbm1pX3RpbWVyX2ludC5jCkBAIC05LDcgKzksNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvb3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvcGNpL2FjcGkuYyBiL2FyY2gvaTM4Ni9wY2kvYWNwaS5jCmluZGV4IDI5NDE2NzQuLjRjNDUyMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9wY2kvYWNwaS5jCisrKyBiL2FyY2gvaTM4Ni9wY2kvYWNwaS5jCkBAIC0yLDcgKzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL2h3X2lycS5oPgogI2luY2x1ZGUgPGFzbS9udW1hLmg+CiAjaW5jbHVkZSAicGNpLmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9wY2kvaXJxLmMgYi9hcmNoL2kzODYvcGNpL2lycS5jCmluZGV4IDMyNmEyZWQuLmNkZGFmZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9wY2kvaXJxLmMKKysrIGIvYXJjaC9pMzg2L3BjaS9pcnEuYwpAQCAtMTEsMTIgKzExLDExIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CiAjaW5jbHVkZSA8YXNtL2lvX2FwaWMuaD4KLSNpbmNsdWRlIDxhc20vaHdfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogCiAjaW5jbHVkZSAicGNpLmgiCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvcG93ZXIvY3B1LmMgYi9hcmNoL2kzODYvcG93ZXIvY3B1LmMKaW5kZXggN2IwYjlhZC4uYjI3YzVhYyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L3Bvd2VyL2NwdS5jCisrKyBiL2FyY2gvaTM4Ni9wb3dlci9jcHUuYwpAQCAtOCwyNSArOCw4IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvcG9sbC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvcG0uaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+Ci0jaW5jbHVkZSA8bGludXgvYWNwaS5oPgotCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vYWNwaS5oPgotI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAogc3RhdGljIHN0cnVjdCBzYXZlZF9jb250ZXh0IHNhdmVkX2NvbnRleHQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9LY29uZmlnIGIvYXJjaC9pYTY0L0tjb25maWcKaW5kZXggZWQyNWQ2Ni4uY2I3ZmMxOSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L0tjb25maWcKKysrIGIvYXJjaC9pYTY0L0tjb25maWcKQEAgLTI1NCw4ICsyNTQsOCBAQAogCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi4KIAogY29uZmlnIE5SX0NQVVMKLQlpbnQgIk1heGltdW0gbnVtYmVyIG9mIENQVXMgKDItNTEyKSIKLQlyYW5nZSAyIDUxMgorCWludCAiTWF4aW11bSBudW1iZXIgb2YgQ1BVcyAoMi0xMDI0KSIKKwlyYW5nZSAyIDEwMjQKIAlkZXBlbmRzIG9uIFNNUAogCWRlZmF1bHQgIjY0IgogCWhlbHAKQEAgLTI5OCwxMSArMjk4LDYgQEAKIAogc291cmNlICJtbS9LY29uZmlnIgogCi1jb25maWcgSEFWRV9ERUNfTE9DSwotCWJvb2wKLQlkZXBlbmRzIG9uIChTTVAgfHwgUFJFRU1QVCkKLQlkZWZhdWx0IHkKLQogY29uZmlnIElBMzJfU1VQUE9SVAogCWJvb2wgIlN1cHBvcnQgZm9yIExpbnV4L3g4NiBiaW5hcmllcyIKIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaHAvY29tbW9uL2h3c3dfaW9tbXUuYyBiL2FyY2gvaWE2NC9ocC9jb21tb24vaHdzd19pb21tdS5jCmluZGV4IDgwZjhlZjAuLjMxN2MzMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9ocC9jb21tb24vaHdzd19pb21tdS5jCisrKyBiL2FyY2gvaWE2NC9ocC9jb21tb24vaHdzd19pb21tdS5jCkBAIC0xNyw3ICsxNyw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KIAogLyogc3dpb3RsYiBkZWNsYXJhdGlvbnMgJiBkZWZpbml0aW9uczogKi8KLWV4dGVybiB2b2lkIHN3aW90bGJfaW5pdF93aXRoX2RlZmF1bHRfc2l6ZSAoc2l6ZV90IHNpemUpOworZXh0ZXJuIGludCBzd2lvdGxiX2xhdGVfaW5pdF93aXRoX2RlZmF1bHRfc2l6ZSAoc2l6ZV90IHNpemUpOwogZXh0ZXJuIGlhNjRfbXZfZG1hX2FsbG9jX2NvaGVyZW50CXN3aW90bGJfYWxsb2NfY29oZXJlbnQ7CiBleHRlcm4gaWE2NF9tdl9kbWFfZnJlZV9jb2hlcmVudAlzd2lvdGxiX2ZyZWVfY29oZXJlbnQ7CiBleHRlcm4gaWE2NF9tdl9kbWFfbWFwX3NpbmdsZQkJc3dpb3RsYl9tYXBfc2luZ2xlOwpAQCAtNjcsNyArNjcsMTYgQEAKIGh3c3dfaW5pdCAodm9pZCkKIHsKIAkvKiBkZWZhdWx0IHRvIGEgc21hbGxpc2ggMk1CIHN3IEkvTyBUTEIgKi8KLQlzd2lvdGxiX2luaXRfd2l0aF9kZWZhdWx0X3NpemUgKDIgKiAoMTw8MjApKTsKKwlpZiAoc3dpb3RsYl9sYXRlX2luaXRfd2l0aF9kZWZhdWx0X3NpemUgKDIgKiAoMTw8MjApKSAhPSAwKSB7CisjaWZkZWYgQ09ORklHX0lBNjRfR0VORVJJQworCQkvKiBCZXR0ZXIgdG8gaGF2ZSBub3JtYWwgRE1BIHRoYW4gcGFuaWMgKi8KKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEZhaWxlZCB0byBpbml0aWFsaXplIHNvZnR3YXJlIEkvTyBUTEIsIgorCQkgICAgICAgIiByZXZlcnRpbmcgdG8gaHB6eDEgcGxhdGZvcm0gdmVjdG9yXG4iLCBfX0ZVTkNUSU9OX18pOworCQltYWNodmVjX2luaXQoImhwengxIik7CisjZWxzZQorCQlwYW5pYygiVW5hYmxlIHRvIGluaXRpYWxpemUgc29mdHdhcmUgSS9PIFRMQiBzZXJ2aWNlcyIpOworI2VuZGlmCisJfQogfQogCiB2b2lkICoKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMgYi9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jCmluZGV4IDExOTU3NTkuLmU2NGNhMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMKKysrIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9zYmFfaW9tbXUuYwpAQCAtMjAyOCwxMCArMjAyOCw0MSBAQAogc3RhdGljIGludCBfX2luaXQKIHNiYV9pbml0KHZvaWQpCiB7Ci0JYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX3NiYV9pb2NfZHJpdmVyKTsKLQlpZiAoIWlvY19saXN0KQorCWlmICghaWE2NF9wbGF0Zm9ybV9pcygiaHB6eDEiKSAmJiAhaWE2NF9wbGF0Zm9ybV9pcygiaHB6eDFfc3dpb3RsYiIpKQogCQlyZXR1cm4gMDsKIAorCWFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9zYmFfaW9jX2RyaXZlcik7CisJaWYgKCFpb2NfbGlzdCkgeworI2lmZGVmIENPTkZJR19JQTY0X0dFTkVSSUMKKwkJZXh0ZXJuIGludCBzd2lvdGxiX2xhdGVfaW5pdF93aXRoX2RlZmF1bHRfc2l6ZSAoc2l6ZV90IHNpemUpOworCisJCS8qCisJCSAqIElmIHdlIGRpZG4ndCBmaW5kIHNvbWV0aGluZyBzYmFfaW9tbXUgY2FuIGNsYWltLCB3ZQorCQkgKiBuZWVkIHRvIHNldHVwIHRoZSBzd2lvdGxiIGFuZCBzd2l0Y2ggdG8gdGhlIGRpZyBtYWNodmVjLgorCQkgKi8KKwkJaWYgKHN3aW90bGJfbGF0ZV9pbml0X3dpdGhfZGVmYXVsdF9zaXplKDY0ICogKDE8PDIwKSkgIT0gMCkKKwkJCXBhbmljKCJVbmFibGUgdG8gZmluZCBTQkEgSU9NTVUgb3IgaW5pdGlhbGl6ZSAiCisJCQkgICAgICAic29mdHdhcmUgSS9PIFRMQjogVHJ5IG1hY2h2ZWM9ZGlnIGJvb3Qgb3B0aW9uIik7CisJCW1hY2h2ZWNfaW5pdCgiZGlnIik7CisjZWxzZQorCQlwYW5pYygiVW5hYmxlIHRvIGZpbmQgU0JBIElPTU1VOiBUcnkgYSBnZW5lcmljIG9yIERJRyBrZXJuZWwiKTsKKyNlbmRpZgorCQlyZXR1cm4gMDsKKwl9CisKKyNpZiBkZWZpbmVkKENPTkZJR19JQTY0X0dFTkVSSUMpIHx8IGRlZmluZWQoQ09ORklHX0lBNjRfSFBfWlgxX1NXSU9UTEIpCisJLyoKKwkgKiBocHp4MV9zd2lvdGxiIG5lZWRzIHRvIGhhdmUgYSBmYWlybHkgc21hbGwgc3dpb3RsYiBib3VuY2UKKwkgKiBidWZmZXIgc2V0dXAgdG8gc3VwcG9ydCBkZXZpY2VzIHdpdGggc21hbGxlciBETUEgbWFza3MgdGhhbgorCSAqIHNiYV9pb21tdSBjYW4gaGFuZGxlLgorCSAqLworCWlmIChpYTY0X3BsYXRmb3JtX2lzKCJocHp4MV9zd2lvdGxiIikpIHsKKwkJZXh0ZXJuIHZvaWQgaHdzd19pbml0KHZvaWQpOworCisJCWh3c3dfaW5pdCgpOworCX0KKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX1BDSQogCXsKIAkJc3RydWN0IHBjaV9idXMgKmIgPSBOVUxMOwpAQCAtMjA0OCwxOCArMjA3OSw2IEBACiAKIHN1YnN5c19pbml0Y2FsbChzYmFfaW5pdCk7IC8qIG11c3QgYmUgaW5pdGlhbGl6ZWQgYWZ0ZXIgQUNQSSBldGMuLCBidXQgYmVmb3JlIGFueSBkcml2ZXJzLi4uICovCiAKLWV4dGVybiB2b2lkIGRpZ19zZXR1cChjaGFyKiopOwotLyoKLSAqIE1BWF9ETUFfQUREUkVTUyBuZWVkcyB0byBiZSBzZXR1cCBwcmlvciB0byBwYWdpbmdfaW5pdCB0byBkbyBhbnkgZ29vZCwKLSAqIHNvIHdlIHVzZSB0aGUgcGxhdGZvcm1fc2V0dXAgaG9vayB0byBmaXggaXQgdXAuCi0gKi8KLXZvaWQgX19pbml0Ci1zYmFfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKLXsKLQlNQVhfRE1BX0FERFJFU1MgPSB+MFVMOwotCWRpZ19zZXR1cChjbWRsaW5lX3ApOwotfQotCiBzdGF0aWMgaW50IF9faW5pdAogbm9zYmFnYXJ0KGNoYXIgKnN0cikKIHsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9zaW0vc2ltc2NzaS5jIGIvYXJjaC9pYTY0L2hwL3NpbS9zaW1zY3NpLmMKaW5kZXggNTY0MDVkYi4uYTE4OTgzYSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2hwL3NpbS9zaW1zY3NpLmMKKysrIGIvYXJjaC9pYTY0L2hwL3NpbS9zaW1zY3NpLmMKQEAgLTIzMyw2ICsyMzMsMjMgQEAKIAkJc2ltc2NzaV9yZWFkd3JpdGUoc2MsIG1vZGUsIG9mZnNldCwgKChzYy0+Y21uZFs3XSA8PCA4KSB8IHNjLT5jbW5kWzhdKSo1MTIpOwogfQogCitzdGF0aWMgdm9pZCBzaW1zY3NpX2ZpbGxyZXN1bHQoc3RydWN0IHNjc2lfY21uZCAqc2MsIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuKQoreworCisJaW50IHNjYXR0ZXJsZW4gPSBzYy0+dXNlX3NnOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2xwOworCisJaWYgKHNjYXR0ZXJsZW4gPT0gMCkKKwkJbWVtY3B5KHNjLT5yZXF1ZXN0X2J1ZmZlciwgYnVmLCBsZW4pOworCWVsc2UgZm9yIChzbHAgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopc2MtPmJ1ZmZlcjsgc2NhdHRlcmxlbi0tID4gMCAmJiBsZW4gPiAwOyBzbHArKykgeworCQl1bnNpZ25lZCB0aGlzbGVuID0gbWluKGxlbiwgc2xwLT5sZW5ndGgpOworCisJCW1lbWNweShwYWdlX2FkZHJlc3Moc2xwLT5wYWdlKSArIHNscC0+b2Zmc2V0LCBidWYsIHRoaXNsZW4pOworCQlzbHArKzsKKwkJbGVuIC09IHRoaXNsZW47CisJfQorfQorCiBzdGF0aWMgaW50CiBzaW1zY3NpX3F1ZXVlY29tbWFuZCAoc3RydWN0IHNjc2lfY21uZCAqc2MsIHZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKQogewpAQCAtMjQwLDYgKzI1Nyw3IEBACiAJY2hhciBmbmFtZVtNQVhfUk9PVF9MRU4rMTZdOwogCXNpemVfdCBkaXNrX3NpemU7CiAJY2hhciAqYnVmOworCWNoYXIgbG9jYWxidWZbMzZdOwogI2lmIERFQlVHX1NJTVNDU0kKIAlyZWdpc3RlciBsb25nIHNwIGFzbSAoInNwIik7CiAKQEAgLTI2Myw3ICsyODEsNyBAQAogCQkJCS8qIGRpc2sgZG9lc24ndCBleGlzdC4uLiAqLwogCQkJCWJyZWFrOwogCQkJfQotCQkJYnVmID0gc2MtPnJlcXVlc3RfYnVmZmVyOworCQkJYnVmID0gbG9jYWxidWY7CiAJCQlidWZbMF0gPSAwOwkvKiBtYWduZXRpYyBkaXNrICovCiAJCQlidWZbMV0gPSAwOwkvKiBub3QgYSByZW1vdmFibGUgbWVkaXVtICovCiAJCQlidWZbMl0gPSAyOwkvKiBTQ1NJLTIgY29tcGxpYW50IGRldmljZSAqLwpAQCAtMjczLDYgKzI5MSw3IEBACiAJCQlidWZbNl0gPSAwOwkvKiByZXNlcnZlZCAqLwogCQkJYnVmWzddID0gMDsJLyogdmFyaW91cyBmbGFncyAqLwogCQkJbWVtY3B5KGJ1ZiArIDgsICJIUCAgICAgIFNJTVVMQVRFRCBESVNLICAwLjAwIiwgIDI4KTsKKwkJCXNpbXNjc2lfZmlsbHJlc3VsdChzYywgYnVmLCAzNik7CiAJCQlzYy0+cmVzdWx0ID0gR09PRDsKIAkJCWJyZWFrOwogCkBAIC0zMDQsMTYgKzMyMywxMyBAQAogCQkJc2ltc2NzaV9yZWFkd3JpdGUxMChzYywgU1NDX1dSSVRFKTsKIAkJCWJyZWFrOwogCi0KIAkJICAgICAgY2FzZSBSRUFEX0NBUEFDSVRZOgogCQkJaWYgKGRlc2NbdGFyZ2V0X2lkXSA8IDAgfHwgc2MtPnJlcXVlc3RfYnVmZmxlbiA8IDgpIHsKIAkJCQlicmVhazsKIAkJCX0KLQkJCWJ1ZiA9IHNjLT5yZXF1ZXN0X2J1ZmZlcjsKLQorCQkJYnVmID0gbG9jYWxidWY7CiAJCQlkaXNrX3NpemUgPSBzaW1zY3NpX2dldF9kaXNrX3NpemUoZGVzY1t0YXJnZXRfaWRdKTsKIAotCQkJLyogcHJldGVuZCB0byBiZSBhIDFHQiBkaXNrIChwYXJ0aXRpb24gdGFibGUgY29udGFpbnMgcmVhbCBzdHVmZik6ICovCiAJCQlidWZbMF0gPSAoZGlza19zaXplID4+IDI0KSAmIDB4ZmY7CiAJCQlidWZbMV0gPSAoZGlza19zaXplID4+IDE2KSAmIDB4ZmY7CiAJCQlidWZbMl0gPSAoZGlza19zaXplID4+ICA4KSAmIDB4ZmY7CkBAIC0zMjMsMTMgKzMzOSwxNCBAQAogCQkJYnVmWzVdID0gMDsKIAkJCWJ1Zls2XSA9IDI7CiAJCQlidWZbN10gPSAwOworCQkJc2ltc2NzaV9maWxscmVzdWx0KHNjLCBidWYsIDgpOwogCQkJc2MtPnJlc3VsdCA9IEdPT0Q7CiAJCQlicmVhazsKIAogCQkgICAgICBjYXNlIE1PREVfU0VOU0U6CiAJCSAgICAgIGNhc2UgTU9ERV9TRU5TRV8xMDoKIAkJCS8qIHNkLmMgdXNlcyB0aGlzIHRvIGRldGVybWluZSB3aGV0aGVyIGRpc2sgZG9lcyB3cml0ZS1jYWNoaW5nLiAqLwotCQkJbWVtc2V0KHNjLT5yZXF1ZXN0X2J1ZmZlciwgMCwgMTI4KTsKKwkJCXNpbXNjc2lfZmlsbHJlc3VsdChzYywgKGNoYXIgKillbXB0eV96ZXJvX3BhZ2UsIHNjLT5yZXF1ZXN0X2J1ZmZsZW4pOwogCQkJc2MtPnJlc3VsdCA9IEdPT0Q7CiAJCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMgYi9hcmNoL2lhNjQva2VybmVsL2FjcGkuYwppbmRleCAyOGE0NTI5Li45YWQ5NGRkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2FjcGkuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2FjcGkuYwpAQCAtODM4LDcgKzgzOCw3IEBACiAjZW5kaWYJCQkJLyogQ09ORklHX0FDUElfSE9UUExVR19DUFUgKi8KIAogI2lmZGVmIENPTkZJR19BQ1BJX05VTUEKLWFjcGlfc3RhdHVzIF9fZGV2aW5pdAorc3RhdGljIGFjcGlfc3RhdHVzIF9fZGV2aW5pdAogYWNwaV9tYXBfaW9zYXBpYyhhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBkZXB0aCwgdm9pZCAqY29udGV4dCwgdm9pZCAqKnJldCkKIHsKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OwpAQCAtODkwLDcgKzg5MCwxNiBAQAogCW1hcF9pb3NhcGljX3RvX25vZGUoZ3NpX2Jhc2UsIG5vZGUpOwogCXJldHVybiBBRV9PSzsKIH0KLSNlbmRpZgkJCQkvKiBDT05GSUdfTlVNQSAqLworCitzdGF0aWMgaW50IF9faW5pdAorYWNwaV9tYXBfaW9zYXBpY3MgKHZvaWQpCit7CisJYWNwaV9nZXRfZGV2aWNlcyhOVUxMLCBhY3BpX21hcF9pb3NhcGljLCBOVUxMLCBOVUxMKTsKKwlyZXR1cm4gMDsKK30KKworZnNfaW5pdGNhbGwoYWNwaV9tYXBfaW9zYXBpY3MpOworI2VuZGlmCQkJCS8qIENPTkZJR19BQ1BJX05VTUEgKi8KIAogaW50IGFjcGlfcmVnaXN0ZXJfaW9hcGljKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTY0IHBoeXNfYWRkciwgdTMyIGdzaV9iYXNlKQogewpAQCAtODk5LDcgKzkwOCw3IEBACiAJaWYgKChlcnIgPSBpb3NhcGljX2luaXQocGh5c19hZGRyLCBnc2lfYmFzZSkpKQogCQlyZXR1cm4gZXJyOwogCi0jaWYgQ09ORklHX0FDUElfTlVNQQorI2lmZGVmIENPTkZJR19BQ1BJX05VTUEKIAlhY3BpX21hcF9pb3NhcGljKGhhbmRsZSwgMCwgTlVMTCwgTlVMTCk7CiAjZW5kaWYJCQkJLyogQ09ORklHX0FDUElfTlVNQSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMgYi9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKaW5kZXggYmEwYjZhMS4uMDc0MWIwNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKQEAgLTQ5MSw3ICs0OTEsNyBAQAogCTs7CiAJbGZldGNoLmZhdWx0IFtyMTZdLCAxMjgKIAlici5yZXQuc3B0ay5tYW55IHJwCi1FTkQocHJlZmV0Y2hfc3dpdGNoX3N0YWNrKQorRU5EKHByZWZldGNoX3N0YWNrKQogCiBHTE9CQUxfRU5UUlkoZXhlY3ZlKQogCW1vdiByMTU9X19OUl9leGVjdmUJCQkvLyBwdXQgc3lzY2FsbCBudW1iZXIgaW4gcGxhY2UKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMgYi9hcmNoL2lhNjQva2VybmVsL21jYS5jCmluZGV4IDZkYzcyNmEuLmQwYTUxMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYwpAQCAtMTAxNiw2ICsxMDE2LDExIEBACiAKIAkJCWNtY19wb2xsaW5nX2VuYWJsZWQgPSAxOwogCQkJc3Bpbl91bmxvY2soJmNtY19oaXN0b3J5X2xvY2spOworCQkJLyogSWYgd2UncmUgYmVpbmcgaGl0IHdpdGggQ01DIGludGVycnVwdHMsIHdlIHdvbid0CisJCQkgKiBldmVyIGV4ZWN1dGUgdGhlIHNjaGVkdWxlX3dvcmsoKSBiZWxvdy4gIE5lZWQgdG8KKwkJCSAqIGRpc2FibGUgQ01DIGludGVycnVwdHMgb24gdGhpcyBwcm9jZXNzb3Igbm93LgorCQkJICovCisJCQlpYTY0X21jYV9jbWNfdmVjdG9yX2Rpc2FibGUoTlVMTCk7CiAJCQlzY2hlZHVsZV93b3JrKCZjbWNfZGlzYWJsZV93b3JrKTsKIAogCQkJLyoKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2FzbS5TIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfYXNtLlMKaW5kZXggNDk5YTA2NS4uZGIzMmZjMSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tY2FfYXNtLlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfYXNtLlMKQEAgLTQ4OSwyNCArNDg5LDI3IEBACiAJOzsKIAlzdDggW3RlbXAxXT1yMTcsMTYJLy8gcGFsX21pbl9zdGF0ZQogCXN0OCBbdGVtcDJdPXI2LDE2CS8vIHByZXZfSUE2NF9LUl9DVVJSRU5UCisJbW92IHI2PUlBNjRfS1IoQ1VSUkVOVF9TVEFDSykKKwk7OworCXN0OCBbdGVtcDFdPXI2LDE2CS8vIHByZXZfSUE2NF9LUl9DVVJSRU5UX1NUQUNLCisJc3Q4IFt0ZW1wMl09cjAsMTYJLy8gcHJldl90YXNrLCBzdGFydHMgb2ZmIGFzIE5VTEwKIAltb3YgcjY9Y3IuaWZhCiAJOzsKLQlzdDggW3RlbXAxXT1yMCwxNgkvLyBwcmV2X3Rhc2ssIHN0YXJ0cyBvZmYgYXMgTlVMTAotCXN0OCBbdGVtcDJdPXIxMiwxNgkvLyBjci5pc3IKKwlzdDggW3RlbXAxXT1yMTIsMTYJLy8gY3IuaXNyCisJc3Q4IFt0ZW1wMl09cjYsMTYJLy8gY3IuaWZhCiAJbW92IHIxMj1jci5pdGlyCiAJOzsKLQlzdDggW3RlbXAxXT1yNiwxNgkvLyBjci5pZmEKLQlzdDggW3RlbXAyXT1yMTIsMTYJLy8gY3IuaXRpcgorCXN0OCBbdGVtcDFdPXIxMiwxNgkvLyBjci5pdGlyCisJc3Q4IFt0ZW1wMl09cjExLDE2CS8vIGNyLmlpcGEKIAltb3YgcjEyPWNyLmlpbQogCTs7Ci0Jc3Q4IFt0ZW1wMV09cjExLDE2CS8vIGNyLmlpcGEKLQlzdDggW3RlbXAyXT1yMTIsMTYJLy8gY3IuaWltCi0JbW92IHI2PWNyLmloYQorCXN0OCBbdGVtcDFdPXIxMiwxNgkvLyBjci5paW0KIChwMSkJbW92IHIxMj1JQTY0X01DQV9DT0xEX0JPT1QKIChwMikJbW92IHIxMj1JQTY0X0lOSVRfV0FSTV9CT09UCisJbW92IHI2PWNyLmloYQogCTs7Ci0Jc3Q4IFt0ZW1wMV09cjYsMTYJLy8gY3IuaWhhCi0Jc3Q4IFt0ZW1wMl09cjEyCQkvLyBvc19zdGF0dXMsIGRlZmF1bHQgaXMgY29sZCBib290CisJc3Q4IFt0ZW1wMl09cjYsMTYJLy8gY3IuaWhhCisJc3Q4IFt0ZW1wMV09cjEyCQkvLyBvc19zdGF0dXMsIGRlZmF1bHQgaXMgY29sZCBib290CiAJbW92IHI2PUlBNjRfTUNBX1NBTUVfQ09OVEVYVAogCTs7CiAJc3Q4IFt0ZW1wMV09cjYJCS8vIGNvbnRleHQsIGRlZmF1bHQgaXMgc2FtZSBjb250ZXh0CkBAIC04MjMsOSArODI2LDEyIEBACiAJbGQ4IHIxMj1bdGVtcDFdLDE2CS8vIHNhbF9yYQogCWxkOCByOT1bdGVtcDJdLDE2CS8vIHNhbF9ncAogCTs7Ci0JbGQ4IHIyMj1bdGVtcDFdLDI0CS8vIHBhbF9taW5fc3RhdGUsIHZpcnR1YWwuICBza2lwIHByZXZfdGFzaworCWxkOCByMjI9W3RlbXAxXSwxNgkvLyBwYWxfbWluX3N0YXRlLCB2aXJ0dWFsCiAJbGQ4IHIyMT1bdGVtcDJdLDE2CS8vIHByZXZfSUE2NF9LUl9DVVJSRU5UCiAJOzsKKwlsZDggcjE2PVt0ZW1wMV0sMTYJLy8gcHJldl9JQTY0X0tSX0NVUlJFTlRfU1RBQ0sKKwlsZDggcjIwPVt0ZW1wMl0sMTYJLy8gcHJldl90YXNrCisJOzsKIAlsZDggdGVtcDM9W3RlbXAxXSwxNgkvLyBjci5pc3IKIAlsZDggdGVtcDQ9W3RlbXAyXSwxNgkvLyBjci5pZmEKIAk7OwpAQCAtODQ2LDYgKzg1Miw0NSBAQAogCWxkOCByOD1bdGVtcDFdCQkvLyBvc19zdGF0dXMKIAlsZDggcjEwPVt0ZW1wMl0JCS8vIGNvbnRleHQKIAorCS8qIFdpcmUgSUE2NF9UUl9DVVJSRU5UX1NUQUNLIHRvIHRoZSBzdGFjayB0aGF0IHdlIGFyZSByZXN1bWluZyB0by4gIFRvCisJICogYXZvaWQgYW55IGRlcGVuZGVuY2llcyBvbiB0aGUgYWxnb3JpdGhtIGluIGlhNjRfc3dpdGNoX3RvKCksIGp1c3QKKwkgKiBwdXJnZSBhbnkgZXhpc3RpbmcgQ1VSUkVOVF9TVEFDSyBtYXBwaW5nIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmUuCisJICoKKwkgKiByMTYgY29udGFpbnMgcHJldl9JQTY0X0tSX0NVUlJFTlRfU1RBQ0ssIHIyMSBjb250YWlucworCSAqIHByZXZfSUE2NF9LUl9DVVJSRU5ULCB0aGVzZSB2YWx1ZXMgbWF5IGhhdmUgYmVlbiBjaGFuZ2VkIGJ5IHRoZSBDCisJICogY29kZS4gIERvIG5vdCB1c2UgcjgsIHI5LCByMTAsIHIyMiwgdGhleSBjb250YWluIHZhbHVlcyByZWFkeSBmb3IKKwkgKiB0aGUgcmV0dXJuIHRvIFNBTC4KKwkgKi8KKworCW1vdiByMTU9SUE2NF9LUihDVVJSRU5UX1NUQUNLKQkJLy8gcGh5c2ljYWwgZ3JhbnVsZSBtYXBwZWQgYnkgSUE2NF9UUl9DVVJSRU5UX1NUQUNLCisJOzsKKwlzaGwgcjE1PXIxNSxJQTY0X0dSQU5VTEVfU0hJRlQKKwk7OworCWRlcCByMTU9LTEscjE1LDYxLDMJCQkvLyB2aXJ0dWFsIGdyYW51bGUKKwltb3YgcjE4PUlBNjRfR1JBTlVMRV9TSElGVDw8MgkJLy8gZm9yIGNyLml0aXIucHMKKwk7OworCXB0ci5kIHIxNSxyMTgKKwk7OworCXNybHouZAorCisJZXh0ci51IHIxOT1yMjEsNjEsMwkJCS8vIHIyMSA9IHByZXZfSUE2NF9LUl9DVVJSRU5UCisJc2hsIHIyMD1yMTYsSUE2NF9HUkFOVUxFX1NISUZUCQkvLyByMTYgPSBwcmV2X0lBNjRfS1JfQ1VSUkVOVF9TVEFDSworCW1vdmwgcjIxPVBBR0VfS0VSTkVMCQkJLy8gcGFnZSBwcm9wZXJ0aWVzCisJOzsKKwltb3YgSUE2NF9LUihDVVJSRU5UX1NUQUNLKT1yMTYKKwljbXAubmUgcDYscDA9UkdOX0tFUk5FTCxyMTkJCS8vIG5ldyBzdGFjayBpcyBpbiB0aGUga2VybmVsIHJlZ2lvbj8KKwlvciByMjE9cjIwLHIyMQkJCQkvLyBjb25zdHJ1Y3QgUEEgfCBwYWdlIHByb3BlcnRpZXMKKyhwNikJYnIuc3BudCAxZgkJCQkvLyB0aGUgZHJlYWRlZCBjcHUgMCBpZGxlIHRhc2sgaW4gcmVnaW9uIDU6KAorCTs7CisJbW92IGNyLml0aXI9cjE4CisJbW92IGNyLmlmYT1yMjEKKwltb3YgcjIwPUlBNjRfVFJfQ1VSUkVOVF9TVEFDSworCTs7CisJaXRyLmQgZHRyW3IyMF09cjIxCisJOzsKKwlzcmx6LmQKKzE6CisKIAlici5zcHRrIGIwCiAKIC8vRW5kU3R1Yi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTk4Miw2ICsxMDI3LDcgQEAKIAlhZGQgdGVtcDQ9dGVtcDQsIHRlbXAxCS8vICZzdHJ1Y3QgaWE2NF9zYWxfb3Nfc3RhdGUub3NfZ3AKIAlhZGQgcjEyPXRlbXAxLCB0ZW1wMwkvLyBrZXJuZWwgc3RhY2sgcG9pbnRlciBvbiBNQ0EvSU5JVCBzdGFjawogCWFkZCByMTM9dGVtcDEsIHIzCS8vIHNldCBjdXJyZW50IHRvIHN0YXJ0IG9mIE1DQS9JTklUIHN0YWNrCisJYWRkIHIyMD10ZW1wMSwgcjMJLy8gcGh5c2ljYWwgc3RhcnQgb2YgTUNBL0lOSVQgc3RhY2sKIAk7OwogCWxkOCByMT1bdGVtcDRdCQkvLyBPUyBHUCBmcm9tIFNBTCBPUyBzdGF0ZQogCTs7CkBAIC05OTEsNyArMTAzNywzNSBAQAogCTs7CiAJbW92IElBNjRfS1IoQ1VSUkVOVCk9cjEzCiAKLQkvLyBGSVhNRTogZG8gSSBuZWVkIHRvIHdpcmUgSUE2NF9LUl9DVVJSRU5UX1NUQUNLIGFuZCBJQTY0X1RSX0NVUlJFTlRfU1RBQ0s/CisJLyogV2lyZSBJQTY0X1RSX0NVUlJFTlRfU1RBQ0sgdG8gdGhlIE1DQS9JTklUIGhhbmRsZXIgc3RhY2suICBUbyBhdm9pZAorCSAqIGFueSBkZXBlbmRlbmNpZXMgb24gdGhlIGFsZ29yaXRobSBpbiBpYTY0X3N3aXRjaF90bygpLCBqdXN0IHB1cmdlCisJICogYW55IGV4aXN0aW5nIENVUlJFTlRfU1RBQ0sgbWFwcGluZyBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lLgorCSAqLworCisJbW92IHIxNj1JQTY0X0tSKENVUlJFTlRfU1RBQ0spCQkvLyBwaHlzaWNhbCBncmFudWxlIG1hcHBlZCBieSBJQTY0X1RSX0NVUlJFTlRfU1RBQ0sKKwk7OworCXNobCByMTY9cjE2LElBNjRfR1JBTlVMRV9TSElGVAorCTs7CisJZGVwIHIxNj0tMSxyMTYsNjEsMwkJCS8vIHZpcnR1YWwgZ3JhbnVsZQorCW1vdiByMTg9SUE2NF9HUkFOVUxFX1NISUZUPDwyCQkvLyBmb3IgY3IuaXRpci5wcworCTs7CisJcHRyLmQgcjE2LHIxOAorCTs7CisJc3Jsei5kCisKKwlzaHIudSByMTY9cjIwLElBNjRfR1JBTlVMRV9TSElGVAkvLyByMjAgPSBwaHlzaWNhbCBzdGFydCBvZiBNQ0EvSU5JVCBzdGFjaworCW1vdmwgcjIxPVBBR0VfS0VSTkVMCQkJLy8gcGFnZSBwcm9wZXJ0aWVzCisJOzsKKwltb3YgSUE2NF9LUihDVVJSRU5UX1NUQUNLKT1yMTYKKwlvciByMjE9cjIwLHIyMQkJCQkvLyBjb25zdHJ1Y3QgUEEgfCBwYWdlIHByb3BlcnRpZXMKKwk7OworCW1vdiBjci5pdGlyPXIxOAorCW1vdiBjci5pZmE9cjEzCisJbW92IHIyMD1JQTY0X1RSX0NVUlJFTlRfU1RBQ0sKKwk7OworCWl0ci5kIGR0cltyMjBdPXIyMQorCTs7CisJc3Jsei5kCiAKIAlici5zcHRrIGIwCiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydi5jIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmMKaW5kZXggNmU2ODM3NC4uZjA4MWM2MCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmMKQEAgLTU2LDggKzU2LDkgQEAKIHN0YXRpYyBpbnQgbnVtX3BhZ2VfaXNvbGF0ZSA9IDA7CiAKIHR5cGVkZWYgZW51bSB7Ci0JSVNPTEFURV9ORyA9IDAsCi0JSVNPTEFURV9PSyA9IDEKKwlJU09MQVRFX05HLAorCUlTT0xBVEVfT0ssCisJSVNPTEFURV9OT05FCiB9IGlzb2xhdGVfc3RhdHVzX3Q7CiAKIC8qCkBAIC03NCw3ICs3NSw3IEBACiAgKiBAcGFkZHI6CXBvaXNvbmVkIG1lbW9yeSBsb2NhdGlvbgogICoKICAqIFJldHVybiB2YWx1ZToKLSAqCUlTT0xBVEVfT0sgLyBJU09MQVRFX05HCisgKglvbmUgb2YgaXNvbGF0ZV9zdGF0dXNfdCwgSVNPTEFURV9PSy9ORy9OT05FLgogICovCiAKIHN0YXRpYyBpc29sYXRlX3N0YXR1c190CkBAIC04NCwyMyArODUsMjYgQEAKIAlzdHJ1Y3QgcGFnZSAqcDsKIAogCS8qIHdoZXRoZXIgcGh5c2ljYWwgYWRkcmVzcyBpcyB2YWxpZCBvciBub3QgKi8KLQlpZiAoICFpYTY0X3BoeXNfYWRkcl92YWxpZChwYWRkcikgKSAKLQkJcmV0dXJuIElTT0xBVEVfTkc7CisJaWYgKCFpYTY0X3BoeXNfYWRkcl92YWxpZChwYWRkcikpCisJCXJldHVybiBJU09MQVRFX05PTkU7CisKKwlpZiAoIXBmbl92YWxpZChwYWRkcikpCisJCXJldHVybiBJU09MQVRFX05PTkU7CiAKIAkvKiBjb252ZXJ0IHBoeXNpY2FsIGFkZHJlc3MgdG8gcGh5c2ljYWwgcGFnZSBudW1iZXIgKi8KIAlwID0gcGZuX3RvX3BhZ2UocGFkZHI+PlBBR0VfU0hJRlQpOwogCiAJLyogY2hlY2sgd2hldGhlciBhIHBhZ2UgbnVtYmVyIGhhdmUgYmVlbiBhbHJlYWR5IHJlZ2lzdGVyZWQgb3Igbm90ICovCi0JZm9yKCBpID0gMDsgaSA8IG51bV9wYWdlX2lzb2xhdGU7IGkrKyApCi0JCWlmKCBwYWdlX2lzb2xhdGVbaV0gPT0gcCApCisJZm9yIChpID0gMDsgaSA8IG51bV9wYWdlX2lzb2xhdGU7IGkrKykKKwkJaWYgKHBhZ2VfaXNvbGF0ZVtpXSA9PSBwKQogCQkJcmV0dXJuIElTT0xBVEVfT0s7IC8qIGFscmVhZHkgbGlzdGVkICovCiAKIAkvKiBsaW1pdGF0aW9uIGNoZWNrICovCi0JaWYoIG51bV9wYWdlX2lzb2xhdGUgPT0gTUFYX1BBR0VfSVNPTEFURSApIAorCWlmIChudW1fcGFnZV9pc29sYXRlID09IE1BWF9QQUdFX0lTT0xBVEUpCiAJCXJldHVybiBJU09MQVRFX05HOwogCiAJLyoga2ljayBwYWdlcyBoYXZpbmcgYXR0cmlidXRlICdTTEFCJyBvciAnUmVzZXJ2ZWQnICovCi0JaWYoIFBhZ2VTbGFiKHApIHx8IFBhZ2VSZXNlcnZlZChwKSApIAorCWlmIChQYWdlU2xhYihwKSB8fCBQYWdlUmVzZXJ2ZWQocCkpCiAJCXJldHVybiBJU09MQVRFX05HOwogCiAJLyogYWRkIGF0dHJpYnV0ZSAnUmVzZXJ2ZWQnIGFuZCByZWdpc3RlciB0aGUgcGFnZSAqLwpAQCAtMTIyLDEwICsxMjYsMTUgQEAKIAkJY3VycmVudC0+cGlkLCBjdXJyZW50LT5jb21tKTsKIAogCXNwaW5fbG9jaygmbWNhX2JoX2xvY2spOwotCWlmIChtY2FfcGFnZV9pc29sYXRlKHBhZGRyKSA9PSBJU09MQVRFX09LKSB7CisJc3dpdGNoIChtY2FfcGFnZV9pc29sYXRlKHBhZGRyKSkgeworCWNhc2UgSVNPTEFURV9PSzoKIAkJcHJpbnRrKEtFUk5fREVCVUcgIlBhZ2UgaXNvbGF0aW9uOiAoICVseCApIHN1Y2Nlc3MuXG4iLCBwYWRkcik7Ci0JfSBlbHNlIHsKKwkJYnJlYWs7CisJY2FzZSBJU09MQVRFX05HOgogCQlwcmludGsoS0VSTl9ERUJVRyAiUGFnZSBpc29sYXRpb246ICggJWx4ICkgZmFpbHVyZS5cbiIsIHBhZGRyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCXNwaW5fdW5sb2NrKCZtY2FfYmhfbG9jayk7CiAKQEAgLTEzOSwxMCArMTQ4LDEwIEBACiAgKiBAcGVpZHg6CXBvaW50ZXIgdG8gaW5kZXggb2YgcHJvY2Vzc29yIGVycm9yIHNlY3Rpb24KICAqLwogCi1zdGF0aWMgdm9pZCAKK3N0YXRpYyB2b2lkCiBtY2FfbWFrZV9wZWlkeChzYWxfbG9nX3Byb2Nlc3Nvcl9pbmZvX3QgKnNscGksIHBlaWR4X3RhYmxlX3QgKnBlaWR4KQogewotCS8qIAorCS8qCiAJICogY2FsY3VsYXRlIHRoZSBzdGFydCBhZGRyZXNzIG9mCiAJICogICAic3RydWN0IGNwdWlkX2luZm8iIGFuZCAic2FsX3Byb2Nlc3Nvcl9zdGF0aWNfaW5mb190Ii4KIAkgKi8KQEAgLTE2NCw3ICsxNzMsNyBAQAogfQogCiAvKioKLSAqIG1jYV9tYWtlX3NsaWR4IC0gIE1ha2UgaW5kZXggb2YgU0FMIGVycm9yIHJlY29yZCAKKyAqIG1jYV9tYWtlX3NsaWR4IC0gIE1ha2UgaW5kZXggb2YgU0FMIGVycm9yIHJlY29yZAogICogQGJ1ZmZlcjoJcG9pbnRlciB0byBTQUwgZXJyb3IgcmVjb3JkCiAgKiBAc2xpZHg6CXBvaW50ZXIgdG8gaW5kZXggb2YgU0FMIGVycm9yIHJlY29yZAogICoKQEAgLTE3MiwxMiArMTgxLDEyIEBACiAgKgkxIGlmIHJlY29yZCBoYXMgcGxhdGZvcm0gZXJyb3IgLyAwIGlmIG5vdAogICovCiAjZGVmaW5lIExPR19JTkRFWF9BRERfU0VDVF9QVFIoc2VjdCwgcHRyKSBcCi0gICAgICAgIHsgc2xpZHhfbGlzdF90ICpobCA9ICZzbGlkeF9wb29sLmJ1ZmZlcltzbGlkeF9wb29sLmN1cl9pZHhdOyBcCi0gICAgICAgICAgaGwtPmhkciA9IHB0cjsgXAotICAgICAgICAgIGxpc3RfYWRkKCZobC0+bGlzdCwgJihzZWN0KSk7IFwKLSAgICAgICAgICBzbGlkeF9wb29sLmN1cl9pZHggPSAoc2xpZHhfcG9vbC5jdXJfaWR4ICsgMSklc2xpZHhfcG9vbC5tYXhfaWR4OyB9CisJe3NsaWR4X2xpc3RfdCAqaGwgPSAmc2xpZHhfcG9vbC5idWZmZXJbc2xpZHhfcG9vbC5jdXJfaWR4XTsgXAorCWhsLT5oZHIgPSBwdHI7IFwKKwlsaXN0X2FkZCgmaGwtPmxpc3QsICYoc2VjdCkpOyBcCisJc2xpZHhfcG9vbC5jdXJfaWR4ID0gKHNsaWR4X3Bvb2wuY3VyX2lkeCArIDEpJXNsaWR4X3Bvb2wubWF4X2lkeDsgfQogCi1zdGF0aWMgaW50IAorc3RhdGljIGludAogbWNhX21ha2Vfc2xpZHgodm9pZCAqYnVmZmVyLCBzbGlkeF90YWJsZV90ICpzbGlkeCkKIHsKIAlpbnQgcGxhdGZvcm1fZXJyID0gMDsKQEAgLTIxNCwyOCArMjIzLDM2IEBACiAJCXNwID0gKHNhbF9sb2dfc2VjdGlvbl9oZHJfdCAqKSgoY2hhciopYnVmZmVyICsgZXJjZF9wb3MpOwogCQlpZiAoIWVmaV9ndWlkY21wKHNwLT5ndWlkLCBTQUxfUFJPQ19ERVZfRVJSX1NFQ1RfR1VJRCkpIHsKIAkJCUxPR19JTkRFWF9BRERfU0VDVF9QVFIoc2xpZHgtPnByb2NfZXJyLCBzcCk7Ci0JCX0gZWxzZSBpZiAoIWVmaV9ndWlkY21wKHNwLT5ndWlkLCBTQUxfUExBVF9NRU1fREVWX0VSUl9TRUNUX0dVSUQpKSB7CisJCX0gZWxzZSBpZiAoIWVmaV9ndWlkY21wKHNwLT5ndWlkLAorCQkJCVNBTF9QTEFUX01FTV9ERVZfRVJSX1NFQ1RfR1VJRCkpIHsKIAkJCXBsYXRmb3JtX2VyciA9IDE7CiAJCQlMT0dfSU5ERVhfQUREX1NFQ1RfUFRSKHNsaWR4LT5tZW1fZGV2X2Vyciwgc3ApOwotCQl9IGVsc2UgaWYgKCFlZmlfZ3VpZGNtcChzcC0+Z3VpZCwgU0FMX1BMQVRfU0VMX0RFVl9FUlJfU0VDVF9HVUlEKSkgeworCQl9IGVsc2UgaWYgKCFlZmlfZ3VpZGNtcChzcC0+Z3VpZCwKKwkJCQlTQUxfUExBVF9TRUxfREVWX0VSUl9TRUNUX0dVSUQpKSB7CiAJCQlwbGF0Zm9ybV9lcnIgPSAxOwogCQkJTE9HX0lOREVYX0FERF9TRUNUX1BUUihzbGlkeC0+c2VsX2Rldl9lcnIsIHNwKTsKLQkJfSBlbHNlIGlmICghZWZpX2d1aWRjbXAoc3AtPmd1aWQsIFNBTF9QTEFUX1BDSV9CVVNfRVJSX1NFQ1RfR1VJRCkpIHsKKwkJfSBlbHNlIGlmICghZWZpX2d1aWRjbXAoc3AtPmd1aWQsCisJCQkJU0FMX1BMQVRfUENJX0JVU19FUlJfU0VDVF9HVUlEKSkgewogCQkJcGxhdGZvcm1fZXJyID0gMTsKIAkJCUxPR19JTkRFWF9BRERfU0VDVF9QVFIoc2xpZHgtPnBjaV9idXNfZXJyLCBzcCk7Ci0JCX0gZWxzZSBpZiAoIWVmaV9ndWlkY21wKHNwLT5ndWlkLCBTQUxfUExBVF9TTUJJT1NfREVWX0VSUl9TRUNUX0dVSUQpKSB7CisJCX0gZWxzZSBpZiAoIWVmaV9ndWlkY21wKHNwLT5ndWlkLAorCQkJCVNBTF9QTEFUX1NNQklPU19ERVZfRVJSX1NFQ1RfR1VJRCkpIHsKIAkJCXBsYXRmb3JtX2VyciA9IDE7CiAJCQlMT0dfSU5ERVhfQUREX1NFQ1RfUFRSKHNsaWR4LT5zbWJpb3NfZGV2X2Vyciwgc3ApOwotCQl9IGVsc2UgaWYgKCFlZmlfZ3VpZGNtcChzcC0+Z3VpZCwgU0FMX1BMQVRfUENJX0NPTVBfRVJSX1NFQ1RfR1VJRCkpIHsKKwkJfSBlbHNlIGlmICghZWZpX2d1aWRjbXAoc3AtPmd1aWQsCisJCQkJU0FMX1BMQVRfUENJX0NPTVBfRVJSX1NFQ1RfR1VJRCkpIHsKIAkJCXBsYXRmb3JtX2VyciA9IDE7CiAJCQlMT0dfSU5ERVhfQUREX1NFQ1RfUFRSKHNsaWR4LT5wY2lfY29tcF9lcnIsIHNwKTsKLQkJfSBlbHNlIGlmICghZWZpX2d1aWRjbXAoc3AtPmd1aWQsIFNBTF9QTEFUX1NQRUNJRklDX0VSUl9TRUNUX0dVSUQpKSB7CisJCX0gZWxzZSBpZiAoIWVmaV9ndWlkY21wKHNwLT5ndWlkLAorCQkJCVNBTF9QTEFUX1NQRUNJRklDX0VSUl9TRUNUX0dVSUQpKSB7CiAJCQlwbGF0Zm9ybV9lcnIgPSAxOwogCQkJTE9HX0lOREVYX0FERF9TRUNUX1BUUihzbGlkeC0+cGxhdF9zcGVjaWZpY19lcnIsIHNwKTsKLQkJfSBlbHNlIGlmICghZWZpX2d1aWRjbXAoc3AtPmd1aWQsIFNBTF9QTEFUX0hPU1RfQ1RMUl9FUlJfU0VDVF9HVUlEKSkgeworCQl9IGVsc2UgaWYgKCFlZmlfZ3VpZGNtcChzcC0+Z3VpZCwKKwkJCQlTQUxfUExBVF9IT1NUX0NUTFJfRVJSX1NFQ1RfR1VJRCkpIHsKIAkJCXBsYXRmb3JtX2VyciA9IDE7CiAJCQlMT0dfSU5ERVhfQUREX1NFQ1RfUFRSKHNsaWR4LT5ob3N0X2N0bHJfZXJyLCBzcCk7Ci0JCX0gZWxzZSBpZiAoIWVmaV9ndWlkY21wKHNwLT5ndWlkLCBTQUxfUExBVF9CVVNfRVJSX1NFQ1RfR1VJRCkpIHsKKwkJfSBlbHNlIGlmICghZWZpX2d1aWRjbXAoc3AtPmd1aWQsCisJCQkJU0FMX1BMQVRfQlVTX0VSUl9TRUNUX0dVSUQpKSB7CiAJCQlwbGF0Zm9ybV9lcnIgPSAxOwogCQkJTE9HX0lOREVYX0FERF9TRUNUX1BUUihzbGlkeC0+cGxhdF9idXNfZXJyLCBzcCk7CiAJCX0gZWxzZSB7CkBAIC0yNTMsMTUgKzI3MCwxNiBAQAogICogUmV0dXJuIHZhbHVlOgogICoJMCBvbiBTdWNjZXNzIC8gLUVOT01FTSBvbiBGYWlsdXJlCiAgKi8KLXN0YXRpYyBpbnQgCitzdGF0aWMgaW50CiBpbml0X3JlY29yZF9pbmRleF9wb29scyh2b2lkKQogewogCWludCBpOwogCWludCByZWNfbWF4X3NpemU7ICAvKiBNYXhpbXVtIHNpemUgb2YgU0FMIGVycm9yIHJlY29yZHMgKi8KIAlpbnQgc2VjdF9taW5fc2l6ZTsgLyogTWluaW11bSBzaXplIG9mIFNBTCBlcnJvciBzZWN0aW9ucyAqLwogCS8qIG1pbmltdW0gc2l6ZSB0YWJsZSBvZiBlYWNoIHNlY3Rpb24gKi8KLQlzdGF0aWMgaW50IHNhbF9sb2dfc2VjdF9taW5fc2l6ZXNbXSA9IHsgCi0JCXNpemVvZihzYWxfbG9nX3Byb2Nlc3Nvcl9pbmZvX3QpICsgc2l6ZW9mKHNhbF9wcm9jZXNzb3Jfc3RhdGljX2luZm9fdCksCisJc3RhdGljIGludCBzYWxfbG9nX3NlY3RfbWluX3NpemVzW10gPSB7CisJCXNpemVvZihzYWxfbG9nX3Byb2Nlc3Nvcl9pbmZvX3QpCisJCSsgc2l6ZW9mKHNhbF9wcm9jZXNzb3Jfc3RhdGljX2luZm9fdCksCiAJCXNpemVvZihzYWxfbG9nX21lbV9kZXZfZXJyX2luZm9fdCksCiAJCXNpemVvZihzYWxfbG9nX3NlbF9kZXZfZXJyX2luZm9fdCksCiAJCXNpemVvZihzYWxfbG9nX3BjaV9idXNfZXJyX2luZm9fdCksCkBAIC0yOTQsNyArMzEyLDggQEAKIAogCS8qIC0gMyAtICovCiAJc2xpZHhfcG9vbC5tYXhfaWR4ID0gKHJlY19tYXhfc2l6ZS9zZWN0X21pbl9zaXplKSAqIDIgKyAxOwotCXNsaWR4X3Bvb2wuYnVmZmVyID0gKHNsaWR4X2xpc3RfdCAqKSBrbWFsbG9jKHNsaWR4X3Bvb2wubWF4X2lkeCAqIHNpemVvZihzbGlkeF9saXN0X3QpLCBHRlBfS0VSTkVMKTsKKwlzbGlkeF9wb29sLmJ1ZmZlciA9IChzbGlkeF9saXN0X3QgKikKKwkJa21hbGxvYyhzbGlkeF9wb29sLm1heF9pZHggKiBzaXplb2Yoc2xpZHhfbGlzdF90KSwgR0ZQX0tFUk5FTCk7CiAKIAlyZXR1cm4gc2xpZHhfcG9vbC5idWZmZXIgPyAwIDogLUVOT01FTTsKIH0KQEAgLTMwOCw2ICszMjcsNyBAQAogICogaXNfbWNhX2dsb2JhbCAtIENoZWNrIHdoZXRoZXIgdGhpcyBNQ0EgaXMgZ2xvYmFsIG9yIG5vdAogICogQHBlaWR4Oglwb2ludGVyIG9mIGluZGV4IG9mIHByb2Nlc3NvciBlcnJvciBzZWN0aW9uCiAgKiBAcGJjaToJcG9pbnRlciB0byBwYWxfYnVzX2NoZWNrX2luZm9fdAorICogQHNvczoJcG9pbnRlciB0byBoYW5kIG9mZiBzdHJ1Y3QgYmV0d2VlbiBTQUwgYW5kIE9TCiAgKgogICogUmV0dXJuIHZhbHVlOgogICoJTUNBX0lTX0xPQ0FMIC8gTUNBX0lTX0dMT0JBTApAQCAtMzE3LDExICszMzcsMTIgQEAKIGlzX21jYV9nbG9iYWwocGVpZHhfdGFibGVfdCAqcGVpZHgsIHBhbF9idXNfY2hlY2tfaW5mb190ICpwYmNpLAogCSAgICAgIHN0cnVjdCBpYTY0X3NhbF9vc19zdGF0ZSAqc29zKQogewotCXBhbF9wcm9jZXNzb3Jfc3RhdGVfaW5mb190ICpwc3AgPSAocGFsX3Byb2Nlc3Nvcl9zdGF0ZV9pbmZvX3QqKXBlaWR4X3BzcChwZWlkeCk7CisJcGFsX3Byb2Nlc3Nvcl9zdGF0ZV9pbmZvX3QgKnBzcCA9CisJCShwYWxfcHJvY2Vzc29yX3N0YXRlX2luZm9fdCopcGVpZHhfcHNwKHBlaWR4KTsKIAotCS8qIAorCS8qCiAJICogUEFMIGNhbiByZXF1ZXN0IGEgcmVuZGV6dm91cywgaWYgdGhlIE1DQSBoYXMgYSBnbG9iYWwgc2NvcGUuCi0JICogSWYgInJ6X2Fsd2F5cyIgZmxhZyBpcyBzZXQsIFNBTCByZXF1ZXN0cyBNQ0EgcmVuZGV6dm91cyAKKwkgKiBJZiAicnpfYWx3YXlzIiBmbGFnIGlzIHNldCwgU0FMIHJlcXVlc3RzIE1DQSByZW5kZXp2b3VzCiAJICogaW4gc3BpdGUgb2YgZ2xvYmFsIE1DQS4KIAkgKiBUaGVyZWZvcmUgaXQgaXMgbG9jYWwgTUNBIHdoZW4gcmVuZGV6dm91cyBoYXMgbm90IGJlZW4gcmVxdWVzdGVkLgogCSAqIEZhaWxlZCB0byByZW5kZXp2b3VzLCB0aGUgc3lzdGVtIG11c3QgYmUgZG93bi4KQEAgLTM4MSwxMyArNDAyLDE1IEBACiAgKiBAc2xpZHg6CXBvaW50ZXIgb2YgaW5kZXggb2YgU0FMIGVycm9yIHJlY29yZAogICogQHBlaWR4Oglwb2ludGVyIG9mIGluZGV4IG9mIHByb2Nlc3NvciBlcnJvciBzZWN0aW9uCiAgKiBAcGJjaToJcG9pbnRlciBvZiBwYWxfYnVzX2NoZWNrX2luZm8KKyAqIEBzb3M6CXBvaW50ZXIgdG8gaGFuZCBvZmYgc3RydWN0IGJldHdlZW4gU0FMIGFuZCBPUwogICoKICAqIFJldHVybiB2YWx1ZToKICAqCTEgb24gU3VjY2VzcyAvIDAgb24gRmFpbHVyZQogICovCiAKIHN0YXRpYyBpbnQKLXJlY292ZXJfZnJvbV9yZWFkX2Vycm9yKHNsaWR4X3RhYmxlX3QgKnNsaWR4LCBwZWlkeF90YWJsZV90ICpwZWlkeCwgcGFsX2J1c19jaGVja19pbmZvX3QgKnBiY2ksCityZWNvdmVyX2Zyb21fcmVhZF9lcnJvcihzbGlkeF90YWJsZV90ICpzbGlkeCwKKwkJCXBlaWR4X3RhYmxlX3QgKnBlaWR4LCBwYWxfYnVzX2NoZWNrX2luZm9fdCAqcGJjaSwKIAkJCXN0cnVjdCBpYTY0X3NhbF9vc19zdGF0ZSAqc29zKQogewogCXNhbF9sb2dfbW9kX2Vycm9yX2luZm9fdCAqc21laTsKQEAgLTQ1MywyNCArNDc2LDI4IEBACiAgKiBAc2xpZHg6CXBvaW50ZXIgb2YgaW5kZXggb2YgU0FMIGVycm9yIHJlY29yZAogICogQHBlaWR4Oglwb2ludGVyIG9mIGluZGV4IG9mIHByb2Nlc3NvciBlcnJvciBzZWN0aW9uCiAgKiBAcGJjaToJcG9pbnRlciBvZiBwYWxfYnVzX2NoZWNrX2luZm8KKyAqIEBzb3M6CXBvaW50ZXIgdG8gaGFuZCBvZmYgc3RydWN0IGJldHdlZW4gU0FMIGFuZCBPUwogICoKICAqIFJldHVybiB2YWx1ZToKICAqCTEgb24gU3VjY2VzcyAvIDAgb24gRmFpbHVyZQogICovCiAKIHN0YXRpYyBpbnQKLXJlY292ZXJfZnJvbV9wbGF0Zm9ybV9lcnJvcihzbGlkeF90YWJsZV90ICpzbGlkeCwgcGVpZHhfdGFibGVfdCAqcGVpZHgsIHBhbF9idXNfY2hlY2tfaW5mb190ICpwYmNpLAorcmVjb3Zlcl9mcm9tX3BsYXRmb3JtX2Vycm9yKHNsaWR4X3RhYmxlX3QgKnNsaWR4LCBwZWlkeF90YWJsZV90ICpwZWlkeCwKKwkJCSAgICBwYWxfYnVzX2NoZWNrX2luZm9fdCAqcGJjaSwKIAkJCSAgICBzdHJ1Y3QgaWE2NF9zYWxfb3Nfc3RhdGUgKnNvcykKIHsKIAlpbnQgc3RhdHVzID0gMDsKLQlwYWxfcHJvY2Vzc29yX3N0YXRlX2luZm9fdCAqcHNwID0gKHBhbF9wcm9jZXNzb3Jfc3RhdGVfaW5mb190KilwZWlkeF9wc3AocGVpZHgpOworCXBhbF9wcm9jZXNzb3Jfc3RhdGVfaW5mb190ICpwc3AgPQorCQkocGFsX3Byb2Nlc3Nvcl9zdGF0ZV9pbmZvX3QqKXBlaWR4X3BzcChwZWlkeCk7CiAKIAlpZiAocHNwLT5iYyAmJiBwYmNpLT5lYiAmJiBwYmNpLT5ic2kgPT0gMCkgewogCQlzd2l0Y2gocGJjaS0+dHlwZSkgewogCQljYXNlIDE6IC8qIHBhcnRpYWwgcmVhZCAqLwogCQljYXNlIDM6IC8qIGZ1bGwgbGluZShjcHUpIHJlYWQgKi8KIAkJY2FzZSA5OiAvKiBJL08gc3BhY2UgcmVhZCAqLwotCQkJc3RhdHVzID0gcmVjb3Zlcl9mcm9tX3JlYWRfZXJyb3Ioc2xpZHgsIHBlaWR4LCBwYmNpLCBzb3MpOworCQkJc3RhdHVzID0gcmVjb3Zlcl9mcm9tX3JlYWRfZXJyb3Ioc2xpZHgsIHBlaWR4LCBwYmNpLAorCQkJCQkJCSBzb3MpOwogCQkJYnJlYWs7CiAJCWNhc2UgMDogLyogdW5rbm93biAqLwogCQljYXNlIDI6IC8qIHBhcnRpYWwgd3JpdGUgKi8KQEAgLTQ4MSw3ICs1MDgsOCBAQAogCQljYXNlIDg6IC8qIHdyaXRlIGNvYWxlc2NpbmcgdHJhbnNhY3Rpb25zICovCiAJCWNhc2UgMTA6IC8qIEkvTyBzcGFjZSB3cml0ZSAqLwogCQljYXNlIDExOiAvKiBpbnRlci1wcm9jZXNzb3IgaW50ZXJydXB0IG1lc3NhZ2UoSVBJKSAqLwotCQljYXNlIDEyOiAvKiBpbnRlcnJ1cHQgYWNrbm93bGVkZ2Ugb3IgZXh0ZXJuYWwgdGFzayBwcmlvcml0eSBjeWNsZSAqLworCQljYXNlIDEyOiAvKiBpbnRlcnJ1cHQgYWNrbm93bGVkZ2Ugb3IKKwkJCQlleHRlcm5hbCB0YXNrIHByaW9yaXR5IGN5Y2xlICovCiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQpAQCAtNDk2LDYgKzUyNCw3IEBACiAgKiBAc2xpZHg6CXBvaW50ZXIgb2YgaW5kZXggb2YgU0FMIGVycm9yIHJlY29yZAogICogQHBlaWR4Oglwb2ludGVyIG9mIGluZGV4IG9mIHByb2Nlc3NvciBlcnJvciBzZWN0aW9uCiAgKiBAcGJjaToJcG9pbnRlciBvZiBwYWxfYnVzX2NoZWNrX2luZm8KKyAqIEBzb3M6CXBvaW50ZXIgdG8gaGFuZCBvZmYgc3RydWN0IGJldHdlZW4gU0FMIGFuZCBPUwogICoKICAqIFJldHVybiB2YWx1ZToKICAqCTEgb24gU3VjY2VzcyAvIDAgb24gRmFpbHVyZQpAQCAtNTA5LDE1ICs1MzgsMTcgQEAKICAqLwogCiBzdGF0aWMgaW50Ci1yZWNvdmVyX2Zyb21fcHJvY2Vzc29yX2Vycm9yKGludCBwbGF0Zm9ybSwgc2xpZHhfdGFibGVfdCAqc2xpZHgsIHBlaWR4X3RhYmxlX3QgKnBlaWR4LCBwYWxfYnVzX2NoZWNrX2luZm9fdCAqcGJjaSwKK3JlY292ZXJfZnJvbV9wcm9jZXNzb3JfZXJyb3IoaW50IHBsYXRmb3JtLCBzbGlkeF90YWJsZV90ICpzbGlkeCwKKwkJCSAgICAgcGVpZHhfdGFibGVfdCAqcGVpZHgsIHBhbF9idXNfY2hlY2tfaW5mb190ICpwYmNpLAogCQkJICAgICBzdHJ1Y3QgaWE2NF9zYWxfb3Nfc3RhdGUgKnNvcykKIHsKLQlwYWxfcHJvY2Vzc29yX3N0YXRlX2luZm9fdCAqcHNwID0gKHBhbF9wcm9jZXNzb3Jfc3RhdGVfaW5mb190KilwZWlkeF9wc3AocGVpZHgpOworCXBhbF9wcm9jZXNzb3Jfc3RhdGVfaW5mb190ICpwc3AgPQorCQkocGFsX3Byb2Nlc3Nvcl9zdGF0ZV9pbmZvX3QqKXBlaWR4X3BzcChwZWlkeCk7CiAKLQkvKiAKKwkvKgogCSAqIFdlIGNhbm5vdCByZWNvdmVyIGVycm9ycyB3aXRoIG90aGVyIHRoYW4gYnVzX2NoZWNrLgogCSAqLwotCWlmIChwc3AtPmNjIHx8IHBzcC0+cmMgfHwgcHNwLT51YykgCisJaWYgKHBzcC0+Y2MgfHwgcHNwLT5yYyB8fCBwc3AtPnVjKQogCQlyZXR1cm4gMDsKIAogCS8qCkBAIC01NDYsMTAgKzU3NywxMCBAQAogCSAqIChlLmcuIGEgbG9hZCBmcm9tIHBvaXNvbmVkIG1lbW9yeSkKIAkgKiBUaGlzIG1lYW5zICJ0aGVyZSBhcmUgc29tZSBwbGF0Zm9ybSBlcnJvcnMiLgogCSAqLwotCWlmIChwbGF0Zm9ybSkgCisJaWYgKHBsYXRmb3JtKQogCQlyZXR1cm4gcmVjb3Zlcl9mcm9tX3BsYXRmb3JtX2Vycm9yKHNsaWR4LCBwZWlkeCwgcGJjaSwgc29zKTsKLQkvKiAKLQkgKiBPbiBhY2NvdW50IG9mIHN0cmFuZ2UgU0FMIGVycm9yIHJlY29yZCwgd2UgY2Fubm90IHJlY292ZXIuIAorCS8qCisJICogT24gYWNjb3VudCBvZiBzdHJhbmdlIFNBTCBlcnJvciByZWNvcmQsIHdlIGNhbm5vdCByZWNvdmVyLgogCSAqLwogCXJldHVybiAwOwogfQpAQCAtNTU3LDE0ICs1ODgsMTQgQEAKIC8qKgogICogbWNhX3RyeV90b19yZWNvdmVyIC0gVHJ5IHRvIHJlY292ZXIgZnJvbSBNQ0EKICAqIEByZWM6CXBvaW50ZXIgdG8gYSBTQUwgZXJyb3IgcmVjb3JkCisgKiBAc29zOglwb2ludGVyIHRvIGhhbmQgb2ZmIHN0cnVjdCBiZXR3ZWVuIFNBTCBhbmQgT1MKICAqCiAgKiBSZXR1cm4gdmFsdWU6CiAgKgkxIG9uIFN1Y2Nlc3MgLyAwIG9uIEZhaWx1cmUKICAqLwogCiBzdGF0aWMgaW50Ci1tY2FfdHJ5X3RvX3JlY292ZXIodm9pZCAqcmVjLCAKLQlzdHJ1Y3QgaWE2NF9zYWxfb3Nfc3RhdGUgKnNvcykKK21jYV90cnlfdG9fcmVjb3Zlcih2b2lkICpyZWMsIHN0cnVjdCBpYTY0X3NhbF9vc19zdGF0ZSAqc29zKQogewogCWludCBwbGF0Zm9ybV9lcnI7CiAJaW50IG5fcHJvY19lcnI7CkBAIC01ODgsNyArNjE5LDggQEAKIAl9CiAKIAkvKiBNYWtlIGluZGV4IG9mIHByb2Nlc3NvciBlcnJvciBzZWN0aW9uICovCi0JbWNhX21ha2VfcGVpZHgoKHNhbF9sb2dfcHJvY2Vzc29yX2luZm9fdCopc2xpZHhfZmlyc3RfZW50cnkoJnNsaWR4LnByb2NfZXJyKS0+aGRyLCAmcGVpZHgpOworCW1jYV9tYWtlX3BlaWR4KChzYWxfbG9nX3Byb2Nlc3Nvcl9pbmZvX3QqKQorCQlzbGlkeF9maXJzdF9lbnRyeSgmc2xpZHgucHJvY19lcnIpLT5oZHIsICZwZWlkeCk7CiAKIAkvKiBFeHRyYWN0IFByb2Nlc3NvciBCVVNfQ0hFQ0tbMF0gKi8KIAkqKCh1NjQqKSZwYmNpKSA9IHBlaWR4X2NoZWNrX2luZm8oJnBlaWR4LCBidXNfY2hlY2ssIDApOwpAQCAtNTk4LDcgKzYzMCw4IEBACiAJCXJldHVybiAwOwogCQogCS8qIFRyeSB0byByZWNvdmVyIGEgcHJvY2Vzc29yIGVycm9yICovCi0JcmV0dXJuIHJlY292ZXJfZnJvbV9wcm9jZXNzb3JfZXJyb3IocGxhdGZvcm1fZXJyLCAmc2xpZHgsICZwZWlkeCwgJnBiY2ksIHNvcyk7CisJcmV0dXJuIHJlY292ZXJfZnJvbV9wcm9jZXNzb3JfZXJyb3IocGxhdGZvcm1fZXJyLCAmc2xpZHgsICZwZWlkeCwKKwkJCQkJICAgICZwYmNpLCBzb3MpOwogfQogCiAvKgpAQCAtNjExLDcgKzY0NCw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJLyogcmVnaXN0ZXIgZXh0ZXJuYWwgbWNhIGhhbmRsZXJzICovCi0JaWYgKGlhNjRfcmVnX01DQV9leHRlbnNpb24obWNhX3RyeV90b19yZWNvdmVyKSl7CQorCWlmIChpYTY0X3JlZ19NQ0FfZXh0ZW5zaW9uKG1jYV90cnlfdG9fcmVjb3ZlcikpIHsJCiAJCXByaW50ayhLRVJOX0VSUiAiaWE2NF9yZWdfTUNBX2V4dGVuc2lvbiBmYWlsZWQuXG4iKTsKIAkJa2ZyZWUoc2xpZHhfcG9vbC5idWZmZXIpOwogCQlyZXR1cm4gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydi5oIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmgKaW5kZXggMDIyN2I3Ni4uZTJmNmZhMSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmgKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmgKQEAgLTYsNyArNiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIEhpZGV0b3NoaSBTZXRvIChzZXRvLmhpZGV0b3NoaUBqcC5mdWppdHN1LmNvbSkKICAqLwogLyoKLSAqIFByb2Nlc3NvciBlcnJvciBzZWN0aW9uOiAKKyAqIFByb2Nlc3NvciBlcnJvciBzZWN0aW9uOgogICoKICAqICArLXNhbF9sb2dfcHJvY2Vzc29yX2luZm9fdCAqaW5mby0tLS0tLS0tLS0tLS0rCiAgKiAgfCBzYWxfbG9nX3NlY3Rpb25faGRyX3QgaGVhZGVyOyAgICAgICAgICAgICAgfApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2X2FzbS5TIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2X2FzbS5TCmluZGV4IDJkN2UwMjEuLjNmMjk4ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydl9hc20uUworKysgYi9hcmNoL2lhNjQva2VybmVsL21jYV9kcnZfYXNtLlMKQEAgLTEzLDQ1ICsxMyw0NSBAQAogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAogR0xPQkFMX0VOVFJZKG1jYV9oYW5kbGVyX2JoaG9vaykKLQlpbnZhbGEJCQkJCQkvLyBjbGVhciBSU0UgPwotCTs7CQkJCQkJLy8KLQljb3ZlcgkJCQkJCS8vIAotCTs7CQkJCQkJLy8KLQljbHJycmIJCQkJCQkvLworCWludmFsYQkJCQkvLyBjbGVhciBSU0UgPworCTs7CisJY292ZXIKKwk7OworCWNscnJyYgogCTs7CQkJCQkJCi0JYWxsb2MJCXIxNj1hci5wZnMsMCwyLDEsMAkJLy8gbWFrZSBhIG5ldyBmcmFtZQorCWFsbG9jCXIxNj1hci5wZnMsMCwyLDEsMAkvLyBtYWtlIGEgbmV3IGZyYW1lCiAJOzsKLQltb3YJCWFyLnJzYz0wCisJbW92CWFyLnJzYz0wCiAJOzsKLQltb3YJCXIxMz1JQTY0X0tSKENVUlJFTlQpCQkvLyBjdXJyZW50IHRhc2sgcG9pbnRlcgorCW1vdglyMTM9SUE2NF9LUihDVVJSRU5UKQkvLyBjdXJyZW50IHRhc2sgcG9pbnRlcgogCTs7Ci0JbW92CQlyMj1yMTMKKwltb3YJcjI9cjEzCiAJOzsKLQlhZGRsCQlyMjI9SUE2NF9SQlNfT0ZGU0VULHIyCisJYWRkbAlyMjI9SUE2NF9SQlNfT0ZGU0VULHIyCiAJOzsKLQltb3YJCWFyLmJzcHN0b3JlPXIyMgorCW1vdglhci5ic3BzdG9yZT1yMjIKIAk7OwotCWFkZGwJCXNwPUlBNjRfU1RLX09GRlNFVC1JQTY0X1BUX1JFR1NfU0laRSxyMgorCWFkZGwJc3A9SUE2NF9TVEtfT0ZGU0VULUlBNjRfUFRfUkVHU19TSVpFLHIyCiAJOzsKLQlhZGRzCQlyMj1JQTY0X1RBU0tfVEhSRUFEX09OX1VTVEFDS19PRkZTRVQscjEzCisJYWRkcwlyMj1JQTY0X1RBU0tfVEhSRUFEX09OX1VTVEFDS19PRkZTRVQscjEzCiAJOzsKLQlzdDEJCVtyMl09cjAJCQkJLy8gY2xlYXIgY3VycmVudC0+dGhyZWFkLm9uX3VzdGFjayBmbGFnCi0JbW92CQlsb2MwPXIxNgotCW1vdmwJCWxvYzE9bWNhX2hhbmRsZXJfYmgJCS8vIHJlY292ZXJ5IEMgZnVuY3Rpb24KKwlzdDEJW3IyXT1yMAkJLy8gY2xlYXIgY3VycmVudC0+dGhyZWFkLm9uX3VzdGFjayBmbGFnCisJbW92CWxvYzA9cjE2CisJbW92bAlsb2MxPW1jYV9oYW5kbGVyX2JoCS8vIHJlY292ZXJ5IEMgZnVuY3Rpb24KIAk7OwotCW1vdgkJb3V0MD1yOAkJCQkvLyBwb2lzb25lZCBhZGRyZXNzCi0JbW92CQliNj1sb2MxCisJbW92CW91dDA9cjgJCQkvLyBwb2lzb25lZCBhZGRyZXNzCisJbW92CWI2PWxvYzEKIAk7OwotCW1vdgkJbG9jMT1ycAorCW1vdglsb2MxPXJwCiAJOzsKLQlzc20JCXBzci5pCisJc3NtCXBzci5pCiAJOzsKLQlici5jYWxsLnNwdGsubWFueSAgICBycD1iNgkJCS8vIGRvZXMgbm90IHJldHVybiAuLi4KKwlici5jYWxsLnNwdGsubWFueSBycD1iNgkJLy8gZG9lcyBub3QgcmV0dXJuIC4uLgogCTs7Ci0JbW92CQlhci5wZnM9bG9jMAotCW1vdiAJCXJwPWxvYzEKKwltb3YJYXIucGZzPWxvYzAKKwltb3YgCXJwPWxvYzEKIAk7OwotCW1vdgkJcjg9cjAKKwltb3YJcjg9cjAKIAlici5yZXQuc3B0ay5tYW55IHJwCiAJOzsKIEVORChtY2FfaGFuZGxlcl9iaGhvb2spCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCmluZGV4IDE2NTAzNTMuLmQ3MTczMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCkBAIC01NzQsNyArNTc0LDcgQEAKIAlyZXR1cm4gMFVMOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK3N0YXRpYyBpbmxpbmUgdm9pZAogcGZtX3VucHJvdGVjdF9jdHhfY3R4c3cocGZtX2NvbnRleHRfdCAqeCwgdW5zaWduZWQgbG9uZyBmKQogewogCXNwaW5fdW5sb2NrKCYoeCktPmN0eF9sb2NrKTsKQEAgLTIyMTgsMTIgKzIyMTgsMTMgQEAKIHBmbV9mcmVlX2ZkKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMgPSBjdXJyZW50LT5maWxlczsKLQlzdHJ1Y3QgZmR0YWJsZSAqZmR0ID0gZmlsZXNfZmR0YWJsZShmaWxlcyk7CisJc3RydWN0IGZkdGFibGUgKmZkdDsKIAogCS8qIAogCSAqIHRoZXJlIGllIG5vIGZkX3VuaW5zdGFsbCgpLCBzbyB3ZSBkbyBpdCBoZXJlCiAJICovCiAJc3Bpbl9sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKKwlmZHQgPSBmaWxlc19mZHRhYmxlKGZpbGVzKTsKIAlyY3VfYXNzaWduX3BvaW50ZXIoZmR0LT5mZFtmZF0sIE5VTEwpOwogCXNwaW5fdW5sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCmluZGV4IDFmNWMyNmQuLmUyNTZiMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKQEAgLTI0NCwyOCArMjQ0LDMxIEBACiBzdGF0aWMgdm9pZCBfX2luaXQKIGlvX3BvcnRfaW5pdCAodm9pZCkKIHsKLQlleHRlcm4gdW5zaWduZWQgbG9uZyBpYTY0X2lvYmFzZTsKIAl1bnNpZ25lZCBsb25nIHBoeXNfaW9iYXNlOwogCiAJLyoKLQkgKiAgU2V0IGBpb2Jhc2UnIHRvIHRoZSBhcHByb3ByaWF0ZSBhZGRyZXNzIGluIHJlZ2lvbiA2ICh1bmNhY2hlZCBhY2Nlc3MgcmFuZ2UpLgorCSAqIFNldCBgaW9iYXNlJyBiYXNlZCBvbiB0aGUgRUZJIG1lbW9yeSBtYXAgb3IsIGZhaWxpbmcgdGhhdCwgdGhlCisJICogdmFsdWUgZmlybXdhcmUgbGVmdCBpbiBhci5rMC4KIAkgKgotCSAqICBUaGUgRUZJIG1lbW9yeSBtYXAgaXMgdGhlICJwcmVmZXJyZWQiIGxvY2F0aW9uIHRvIGdldCB0aGUgSS9PIHBvcnQgc3BhY2UgYmFzZSwKLQkgKiAgcmF0aGVyIHRoZSByZWx5aW5nIG9uIEFSLktSMC4gVGhpcyBzaG91bGQgYmVjb21lIG1vcmUgY2xlYXIgaW4gZnV0dXJlIFNBTAotCSAqICBzcGVjcy4gV2UnbGwgZmFsbCBiYWNrIHRvIGdldHRpbmcgaXQgb3V0IG9mIEFSLktSMCBpZiBubyBhcHByb3ByaWF0ZSBlbnRyeSBpcwotCSAqICBmb3VuZCBpbiB0aGUgbWVtb3J5IG1hcC4KKwkgKiBOb3RlIHRoYXQgaW4gaWEzMiBtb2RlLCBJTi9PVVQgaW5zdHJ1Y3Rpb25zIHVzZSBhci5rMCB0byBjb21wdXRlCisJICogdGhlIHBvcnQncyB2aXJ0dWFsIGFkZHJlc3MsIHNvIGlhMzJfbG9hZF9zdGF0ZSgpIGxvYWRzIGl0IHdpdGggYQorCSAqIHVzZXIgdmlydHVhbCBhZGRyZXNzLiAgQnV0IGluIGlhNjQgbW9kZSwgZ2xpYmMgdXNlcyB0aGUKKwkgKiAqcGh5c2ljYWwqIGFkZHJlc3MgaW4gYXIuazAgdG8gbW1hcCB0aGUgYXBwcm9wcmlhdGUgYXJlYSBmcm9tCisJICogL2Rldi9tZW0sIGFuZCB0aGUgaW5YKCkvb3V0WCgpIGludGVyZmFjZXMgdXNlIE1NSU8uICBJbiBib3RoCisJICogY2FzZXMsIHVzZXItbW9kZSBjYW4gb25seSB1c2UgdGhlIGxlZ2FjeSAwLTY0SyBJL08gcG9ydCBzcGFjZS4KKwkgKgorCSAqIGFyLmswIGlzIG5vdCBpbnZvbHZlZCBpbiBrZXJuZWwgSS9PIHBvcnQgYWNjZXNzZXMsIHdoaWNoIGNhbiB1c2UKKwkgKiBhbnkgb2YgdGhlIEkvTyBwb3J0IHNwYWNlcyBhbmQgYXJlIGRvbmUgdmlhIE1NSU8gdXNpbmcgdGhlCisJICogdmlydHVhbCBtbWlvX2Jhc2UgZnJvbSB0aGUgYXBwcm9wcmlhdGUgaW9fc3BhY2VbXS4KIAkgKi8KIAlwaHlzX2lvYmFzZSA9IGVmaV9nZXRfaW9iYXNlKCk7Ci0JaWYgKHBoeXNfaW9iYXNlKQotCQkvKiBzZXQgQVIuS1IwIHNpbmNlIHRoaXMgaXMgYWxsIHdlIHVzZSBpdCBmb3IgYW55d2F5ICovCi0JCWlhNjRfc2V0X2tyKElBNjRfS1JfSU9fQkFTRSwgcGh5c19pb2Jhc2UpOwotCWVsc2UgeworCWlmICghcGh5c19pb2Jhc2UpIHsKIAkJcGh5c19pb2Jhc2UgPSBpYTY0X2dldF9rcihJQTY0X0tSX0lPX0JBU0UpOwotCQlwcmludGsoS0VSTl9JTkZPICJObyBJL08gcG9ydCByYW5nZSBmb3VuZCBpbiBFRkkgbWVtb3J5IG1hcCwgZmFsbGluZyBiYWNrICIKLQkJICAgICAgICJ0byBBUi5LUjBcbiIpOwotCQlwcmludGsoS0VSTl9JTkZPICJJL08gcG9ydCBiYXNlID0gMHglbHhcbiIsIHBoeXNfaW9iYXNlKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTm8gSS9PIHBvcnQgcmFuZ2UgZm91bmQgaW4gRUZJIG1lbW9yeSBtYXAsICIKKwkJCSJmYWxsaW5nIGJhY2sgdG8gQVIuS1IwICgweCVseClcbiIsIHBoeXNfaW9iYXNlKTsKIAl9CiAJaWE2NF9pb2Jhc2UgPSAodW5zaWduZWQgbG9uZykgaW9yZW1hcChwaHlzX2lvYmFzZSwgMCk7CisJaWE2NF9zZXRfa3IoSUE2NF9LUl9JT19CQVNFLCBfX3BhKGlhNjRfaW9iYXNlKSk7CiAKIAkvKiBzZXR1cCBsZWdhY3kgSU8gcG9ydCBzcGFjZSAqLwogCWlvX3NwYWNlWzBdLm1taW9fYmFzZSA9IGlhNjRfaW9iYXNlOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2xpYi9NYWtlZmlsZSBiL2FyY2gvaWE2NC9saWIvTWFrZWZpbGUKaW5kZXggNzk5NDA3ZS4uY2IxYWY1OSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL2lhNjQvbGliL01ha2VmaWxlCkBAIC0xNSw3ICsxNSw2IEBACiBsaWItJChDT05GSUdfTUNLSU5MRVkpCSs9IGNvcHlfcGFnZV9tY2subyBtZW1jcHlfbWNrLm8KIGxpYi0kKENPTkZJR19QRVJGTU9OKQkrPSBjYXJ0YV9yYW5kb20ubwogbGliLSQoQ09ORklHX01EX1JBSUQ1KQkrPSB4b3IubwotbGliLSQoQ09ORklHX0hBVkVfREVDX0xPQ0spICs9IGRlY19hbmRfbG9jay5vCiAKIEFGTEFHU19fX2RpdmRpMy5vCT0KIEFGTEFHU19fX3VkaXZkaTMubwk9IC1EVU5TSUdORUQKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9saWIvZGVjX2FuZF9sb2NrLmMgYi9hcmNoL2lhNjQvbGliL2RlY19hbmRfbG9jay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2NlOTJmLi4wMDAwMDAwCi0tLSBhL2FyY2gvaWE2NC9saWIvZGVjX2FuZF9sb2NrLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzIEplcm9tZSBNYXJjaGFuZCwgQnVsbCBTLkEuCi0gKglDbGVhbmVkIHVwIGJ5IERhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTHYyLCBvciBhdCB5b3VyIG9wdGlvbiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBpYTY0IHZlcnNpb24gb2YgImF0b21pY19kZWNfYW5kX2xvY2soKSIgdXNpbmcgdGhlIGF0b21pYyAiY21weGNoZyIgaW5zdHJ1Y3Rpb24uICBUaGlzCi0gKiBjb2RlIGlzIGFuIGFkYXB0YXRpb24gb2YgdGhlIHg4NiB2ZXJzaW9uIG9mICJhdG9taWNfZGVjX2FuZF9sb2NrKCkiLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotCi0vKgotICogRGVjcmVtZW50IFJFRkNPVU5UIGFuZCBpZiB0aGUgY291bnQgcmVhY2hlcyB6ZXJvLCBhY3F1aXJlIHRoZSBzcGlubG9jay4gIEJvdGggb2YgdGhlc2UKLSAqIG9wZXJhdGlvbnMgaGF2ZSB0byBiZSBkb25lIGF0b21pY2FsbHksIHNvIHRoYXQgdGhlIGNvdW50IGRvZXNuJ3QgZHJvcCB0byB6ZXJvIHdpdGhvdXQKLSAqIGFjcXVpcmluZyB0aGUgc3BpbmxvY2sgZmlyc3QuCi0gKi8KLWludAotX2F0b21pY19kZWNfYW5kX2xvY2sgKGF0b21pY190ICpyZWZjb3VudCwgc3BpbmxvY2tfdCAqbG9jaykKLXsKLQlpbnQgb2xkLCBuZXc7Ci0KLQlkbyB7Ci0JCW9sZCA9IGF0b21pY19yZWFkKHJlZmNvdW50KTsKLQkJbmV3ID0gb2xkIC0gMTsKLQotCQlpZiAodW5saWtlbHkgKG9sZCA9PSAxKSkgewotCQkJLyogb29wcywgd2UgbWF5IGJlIGRlY3JlbWVudGluZyB0byB6ZXJvLCBkbyBpdCB0aGUgc2xvdyB3YXkuLi4gKi8KLQkJCXNwaW5fbG9jayhsb2NrKTsKLQkJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KHJlZmNvdW50KSkKLQkJCQlyZXR1cm4gMTsKLQkJCXNwaW5fdW5sb2NrKGxvY2spOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9IHdoaWxlIChjbXB4Y2hnKCZyZWZjb3VudC0+Y291bnRlciwgb2xkLCBuZXcpICE9IG9sZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLUVYUE9SVF9TWU1CT0woX2F0b21pY19kZWNfYW5kX2xvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2xpYi9zd2lvdGxiLmMgYi9hcmNoL2lhNjQvbGliL3N3aW90bGIuYwppbmRleCBkYmMwYjNlLi40OGU1ZmYyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbGliL3N3aW90bGIuYworKysgYi9hcmNoL2lhNjQvbGliL3N3aW90bGIuYwpAQCAtNDksNiArNDksMTUgQEAKICAqLwogI2RlZmluZSBJT19UTEJfU0hJRlQgMTEKIAorI2RlZmluZSBTTEFCU19QRVJfUEFHRSAoMSA8PCAoUEFHRV9TSElGVCAtIElPX1RMQl9TSElGVCkpCisKKy8qCisgKiBNaW5pbXVtIElPIFRMQiBzaXplIHRvIGJvdGhlciBib290aW5nIHdpdGguICBTeXN0ZW1zIHdpdGggbWFpbmx5CisgKiA2NGJpdCBjYXBhYmxlIGNhcmRzIHdpbGwgb25seSBsaWdodGx5IHVzZSB0aGUgc3dpb3RsYi4gIElmIHdlIGNhbid0CisgKiBhbGxvY2F0ZSBhIGNvbnRpZ3VvdXMgMU1CLCB3ZSdyZSBwcm9iYWJseSBpbiB0cm91YmxlIGFueXdheS4KKyAqLworI2RlZmluZSBJT19UTEJfTUlOX1NMQUJTICgoMTw8MjApID4+IElPX1RMQl9TSElGVCkKKwogaW50IHN3aW90bGJfZm9yY2U7CiAKIC8qCkBAIC0xMjMsOCArMTMyLDggQEAKIAkvKgogCSAqIEdldCBJTyBUTEIgbWVtb3J5IGZyb20gdGhlIGxvdyBwYWdlcwogCSAqLwotCWlvX3RsYl9zdGFydCA9IGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKGlvX3RsYl9uc2xhYnMgKgotCQkJCQkgICAgICAgKDEgPDwgSU9fVExCX1NISUZUKSk7CisJaW9fdGxiX3N0YXJ0ID0gYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXNfbGltaXQoaW9fdGxiX25zbGFicyAqCisJCQkJCSAgICAgKDEgPDwgSU9fVExCX1NISUZUKSwgMHgxMDAwMDAwMDApOwogCWlmICghaW9fdGxiX3N0YXJ0KQogCQlwYW5pYygiQ2Fubm90IGFsbG9jYXRlIFNXSU9UTEIgYnVmZmVyIik7CiAJaW9fdGxiX2VuZCA9IGlvX3RsYl9zdGFydCArIGlvX3RsYl9uc2xhYnMgKiAoMSA8PCBJT19UTEJfU0hJRlQpOwpAQCAtMTU0LDYgKzE2Myw5OSBAQAogCXN3aW90bGJfaW5pdF93aXRoX2RlZmF1bHRfc2l6ZSg2NCAqICgxPDwyMCkpOwkvKiBkZWZhdWx0IHRvIDY0TUIgKi8KIH0KIAorLyoKKyAqIFN5c3RlbXMgd2l0aCBsYXJnZXIgRE1BIHpvbmVzICh0aG9zZSB0aGF0IGRvbid0IHN1cHBvcnQgSVNBKSBjYW4KKyAqIGluaXRpYWxpemUgdGhlIHN3aW90bGIgbGF0ZXIgdXNpbmcgdGhlIHNsYWIgYWxsb2NhdG9yIGlmIG5lZWRlZC4KKyAqIFRoaXMgc2hvdWxkIGJlIGp1c3QgbGlrZSBhYm92ZSwgYnV0IHdpdGggc29tZSBlcnJvciBjYXRjaGluZy4KKyAqLworaW50Citzd2lvdGxiX2xhdGVfaW5pdF93aXRoX2RlZmF1bHRfc2l6ZSAoc2l6ZV90IGRlZmF1bHRfc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGksIHJlcV9uc2xhYnMgPSBpb190bGJfbnNsYWJzOworCXVuc2lnbmVkIGludCBvcmRlcjsKKworCWlmICghaW9fdGxiX25zbGFicykgeworCQlpb190bGJfbnNsYWJzID0gKGRlZmF1bHRfc2l6ZSA+PiBJT19UTEJfU0hJRlQpOworCQlpb190bGJfbnNsYWJzID0gQUxJR04oaW9fdGxiX25zbGFicywgSU9fVExCX1NFR1NJWkUpOworCX0KKworCS8qCisJICogR2V0IElPIFRMQiBtZW1vcnkgZnJvbSB0aGUgbG93IHBhZ2VzCisJICovCisJb3JkZXIgPSBnZXRfb3JkZXIoaW9fdGxiX25zbGFicyAqICgxIDw8IElPX1RMQl9TSElGVCkpOworCWlvX3RsYl9uc2xhYnMgPSBTTEFCU19QRVJfUEFHRSA8PCBvcmRlcjsKKworCXdoaWxlICgoU0xBQlNfUEVSX1BBR0UgPDwgb3JkZXIpID4gSU9fVExCX01JTl9TTEFCUykgeworCQlpb190bGJfc3RhcnQgPSAoY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0RNQSB8IF9fR0ZQX05PV0FSTiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyKTsKKwkJaWYgKGlvX3RsYl9zdGFydCkKKwkJCWJyZWFrOworCQlvcmRlci0tOworCX0KKworCWlmICghaW9fdGxiX3N0YXJ0KQorCQlnb3RvIGNsZWFudXAxOworCisJaWYgKG9yZGVyICE9IGdldF9vcmRlcihpb190bGJfbnNsYWJzICogKDEgPDwgSU9fVExCX1NISUZUKSkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogb25seSBhYmxlIHRvIGFsbG9jYXRlICVsZCBNQiAiCisJCSAgICAgICAiZm9yIHNvZnR3YXJlIElPIFRMQlxuIiwgKFBBR0VfU0laRSA8PCBvcmRlcikgPj4gMjApOworCQlpb190bGJfbnNsYWJzID0gU0xBQlNfUEVSX1BBR0UgPDwgb3JkZXI7CisJfQorCWlvX3RsYl9lbmQgPSBpb190bGJfc3RhcnQgKyBpb190bGJfbnNsYWJzICogKDEgPDwgSU9fVExCX1NISUZUKTsKKwltZW1zZXQoaW9fdGxiX3N0YXJ0LCAwLCBpb190bGJfbnNsYWJzICogKDEgPDwgSU9fVExCX1NISUZUKSk7CisKKwkvKgorCSAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBmcmVlIGxpc3QgYXJyYXkuICBUaGlzIGFycmF5IGlzIHVzZWQKKwkgKiB0byBmaW5kIGNvbnRpZ3VvdXMgZnJlZSBtZW1vcnkgcmVnaW9ucyBvZiBzaXplIHVwIHRvIElPX1RMQl9TRUdTSVpFCisJICogYmV0d2VlbiBpb190bGJfc3RhcnQgYW5kIGlvX3RsYl9lbmQuCisJICovCisJaW9fdGxiX2xpc3QgPSAodW5zaWduZWQgaW50ICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9vcmRlcihpb190bGJfbnNsYWJzICogc2l6ZW9mKGludCkpKTsKKwlpZiAoIWlvX3RsYl9saXN0KQorCQlnb3RvIGNsZWFudXAyOworCisJZm9yIChpID0gMDsgaSA8IGlvX3RsYl9uc2xhYnM7IGkrKykKKyAJCWlvX3RsYl9saXN0W2ldID0gSU9fVExCX1NFR1NJWkUgLSBPRkZTRVQoaSwgSU9fVExCX1NFR1NJWkUpOworCWlvX3RsYl9pbmRleCA9IDA7CisKKwlpb190bGJfb3JpZ19hZGRyID0gKHVuc2lnbmVkIGNoYXIgKiopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9vcmRlcihpb190bGJfbnNsYWJzICogc2l6ZW9mKGNoYXIgKikpKTsKKwlpZiAoIWlvX3RsYl9vcmlnX2FkZHIpCisJCWdvdG8gY2xlYW51cDM7CisKKwltZW1zZXQoaW9fdGxiX29yaWdfYWRkciwgMCwgaW9fdGxiX25zbGFicyAqIHNpemVvZihjaGFyICopKTsKKworCS8qCisJICogR2V0IHRoZSBvdmVyZmxvdyBlbWVyZ2VuY3kgYnVmZmVyCisJICovCisJaW9fdGxiX292ZXJmbG93X2J1ZmZlciA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfRE1BLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9vcmRlcihpb190bGJfb3ZlcmZsb3cpKTsKKwlpZiAoIWlvX3RsYl9vdmVyZmxvd19idWZmZXIpCisJCWdvdG8gY2xlYW51cDQ7CisKKwlwcmludGsoS0VSTl9JTkZPICJQbGFjaW5nICVsZE1CIHNvZnR3YXJlIElPIFRMQiBiZXR3ZWVuIDB4JWx4IC0gIgorCSAgICAgICAiMHglbHhcbiIsIChpb190bGJfbnNsYWJzICogKDEgPDwgSU9fVExCX1NISUZUKSkgPj4gMjAsCisJICAgICAgIHZpcnRfdG9fcGh5cyhpb190bGJfc3RhcnQpLCB2aXJ0X3RvX3BoeXMoaW9fdGxiX2VuZCkpOworCisJcmV0dXJuIDA7CisKK2NsZWFudXA0OgorCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpaW9fdGxiX29yaWdfYWRkciwgZ2V0X29yZGVyKGlvX3RsYl9uc2xhYnMgKgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjaGFyICopKSk7CisJaW9fdGxiX29yaWdfYWRkciA9IE5VTEw7CitjbGVhbnVwMzoKKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWlvX3RsYl9saXN0LCBnZXRfb3JkZXIoaW9fdGxiX25zbGFicyAqCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihpbnQpKSk7CisJaW9fdGxiX2xpc3QgPSBOVUxMOworCWlvX3RsYl9lbmQgPSBOVUxMOworY2xlYW51cDI6CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylpb190bGJfc3RhcnQsIG9yZGVyKTsKKwlpb190bGJfc3RhcnQgPSBOVUxMOworY2xlYW51cDE6CisJaW9fdGxiX25zbGFicyA9IHJlcV9uc2xhYnM7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50CiBhZGRyZXNzX25lZWRzX21hcHBpbmcoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgYWRkcikKIHsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9wY2kvcGNpLmMgYi9hcmNoL2lhNjQvcGNpL3BjaS5jCmluZGV4IDliNWRlNTguLjZiZjQ4ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9wY2kvcGNpLmMKKysrIGIvYXJjaC9pYTY0L3BjaS9wY2kuYwpAQCAtMTIwLDI5ICsxMjAsNiBAQAogCS53cml0ZSA9IHBjaV93cml0ZSwKIH07CiAKLSNpZmRlZiBDT05GSUdfTlVNQQotZXh0ZXJuIGFjcGlfc3RhdHVzIGFjcGlfbWFwX2lvc2FwaWMoYWNwaV9oYW5kbGUsIHUzMiwgdm9pZCAqLCB2b2lkICoqKTsKLXN0YXRpYyB2b2lkIGFjcGlfbWFwX2lvc2FwaWNzKHZvaWQpCi17Ci0JYWNwaV9nZXRfZGV2aWNlcyhOVUxMLCBhY3BpX21hcF9pb3NhcGljLCBOVUxMLCBOVUxMKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBhY3BpX21hcF9pb3NhcGljcyh2b2lkKQotewotCXJldHVybjsKLX0KLSNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLwotCi1zdGF0aWMgaW50IF9faW5pdAotcGNpX2FjcGlfaW5pdCAodm9pZCkKLXsKLQlhY3BpX21hcF9pb3NhcGljcygpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN1YnN5c19pbml0Y2FsbChwY2lfYWNwaV9pbml0KTsKLQogLyogQ2FsbGVkIGJ5IEFDUEkgd2hlbiBpdCBmaW5kcyBhIG5ldyByb290IGJ1cy4gICovCiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKiBfX2RldmluaXQKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvdGlvY3guYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvdGlvY3guYwppbmRleCBiNDVkYjUxLi5lMDgxOWVjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3Rpb2N4LmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC90aW9jeC5jCkBAIC0xODMsMTEgKzE4MywxMiBAQAogICogQHBhcnRfbnVtOiBkZXZpY2UncyBwYXJ0IG51bWJlcgogICogQG1mZ19udW06IGRldmljZSdzIG1hbnVmYWN0dXJlciBudW1iZXIKICAqIEBodWJkZXY6IGh1YiBpbmZvIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRldmljZQorICogQGJ0OiBib2FyZCB0eXBlIG9mIHRoZSBkZXZpY2UKICAqCiAgKi8KIGludAogY3hfZGV2aWNlX3JlZ2lzdGVyKG5hc2lkX3QgbmFzaWQsIGludCBwYXJ0X251bSwgaW50IG1mZ19udW0sCi0JCSAgIHN0cnVjdCBodWJkZXZfaW5mbyAqaHViZGV2KQorCQkgICBzdHJ1Y3QgaHViZGV2X2luZm8gKmh1YmRldiwgaW50IGJ0KQogewogCXN0cnVjdCBjeF9kZXYgKmN4X2RldjsKIApAQCAtMjAwLDYgKzIwMSw3IEBACiAJY3hfZGV2LT5jeF9pZC5tZmdfbnVtID0gbWZnX251bTsKIAljeF9kZXYtPmN4X2lkLm5hc2lkID0gbmFzaWQ7CiAJY3hfZGV2LT5odWJkZXYgPSBodWJkZXY7CisJY3hfZGV2LT5idCA9IGJ0OwogCiAJY3hfZGV2LT5kZXYucGFyZW50ID0gTlVMTDsKIAljeF9kZXYtPmRldi5idXMgPSAmdGlvY3hfYnVzX3R5cGU7CkBAIC0yMzgsNyArMjQwLDggQEAKIHsKIAljeF9kZXZpY2VfdW5yZWdpc3RlcihjeF9kZXYpOwogCXJldHVybiBjeF9kZXZpY2VfcmVnaXN0ZXIoY3hfZGV2LT5jeF9pZC5uYXNpZCwgY3hfZGV2LT5jeF9pZC5wYXJ0X251bSwKLQkJCQkgIGN4X2Rldi0+Y3hfaWQubWZnX251bSwgY3hfZGV2LT5odWJkZXYpOworCQkJCSAgY3hfZGV2LT5jeF9pZC5tZmdfbnVtLCBjeF9kZXYtPmh1YmRldiwKKwkJCQkgIGN4X2Rldi0+YnQpOwogfQogCiBzdGF0aWMgaW5saW5lIHVpbnQ2NF90IHRpb2N4X2ludHJfYWxsb2MobmFzaWRfdCBuYXNpZCwgaW50IHdpZGdldCwKQEAgLTM2NSwyNiArMzY4LDIwIEBACiAJdWRlbGF5KDIwMDApOwogfQogCi1zdGF0aWMgaW50IHRpb2N4X2J0Y2hhcl9nZXQoaW50IG5hc2lkKQorc3RhdGljIGludCBpc19mcGdhX3RpbyhpbnQgbmFzaWQsIGludCAqYnQpCiB7Ci0JbW9kdWxlaWRfdCBtb2R1bGVfaWQ7Ci0JZ2VvaWRfdCBnZW9pZDsKLQlpbnQgY25vZGVpZDsKKwlpbnQgaW9ib2FyZF90eXBlOwogCi0JY25vZGVpZCA9IG5hc2lkX3RvX2Nub2RlaWQobmFzaWQpOwotCWdlb2lkID0gY25vZGVpZF9nZXRfZ2VvaWQoY25vZGVpZCk7Ci0JbW9kdWxlX2lkID0gZ2VvX21vZHVsZShnZW9pZCk7Ci0JcmV0dXJuIE1PRFVMRV9HRVRfQlRDSEFSKG1vZHVsZV9pZCk7Ci19CisJaW9ib2FyZF90eXBlID0gaWE2NF9zbl9zeXNjdGxfaW9ib2FyZF9nZXQobmFzaWQpOwogCi1zdGF0aWMgaW50IGlzX2ZwZ2FfYnJpY2soaW50IG5hc2lkKQotewotCXN3aXRjaCAodGlvY3hfYnRjaGFyX2dldChuYXNpZCkpIHsKKwlzd2l0Y2ggKGlvYm9hcmRfdHlwZSkgewogCWNhc2UgTDFfQlJJQ0tUWVBFX1NBOgogCWNhc2UgTDFfQlJJQ0tUWVBFX0FUSEVOQToKLQljYXNlIEwxX0JSSUNLVFlQRV9EQVlUT05BOgorCWNhc2UgTDFfQk9BUkRUWVBFX0RBWVRPTkE6CisJCSpidCA9IGlvYm9hcmRfdHlwZTsKIAkJcmV0dXJuIDE7CiAJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQwNywxNiArNDA0LDIyIEBACiAKIAlpZiAoYml0c3RyZWFtX2xvYWRlZChuYXNpZCkpIHsKIAkJdWludDY0X3QgY3hfaWQ7CisJCWludCBydjsKIAotCQljeF9pZCA9Ci0JCSAgICAqKHZvbGF0aWxlIHVpbnQ2NF90ICopKFRJT19TV0lOX0JBU0UobmFzaWQsIFRJT0NYX0NPUkVMRVQpICsKKwkJcnYgPSBpYTY0X3NuX3N5c2N0bF90aW9fY2xvY2tfcmVzZXQobmFzaWQpOworCQlpZiAocnYpIHsKKwkJCXByaW50ayhLRVJOX0FMRVJUICJDWCBwb3J0IEpUQUcgcmVzZXQgZmFpbGVkLlxuIik7CisJCX0gZWxzZSB7CisJCQljeF9pZCA9ICoodm9sYXRpbGUgdWludDY0X3QgKikKKwkJCQkoVElPX1NXSU5fQkFTRShuYXNpZCwgVElPQ1hfQ09SRUxFVCkgKwogCQkJCQkgIFdJREdFVF9JRCk7Ci0JCXBhcnRfbnVtID0gWFdJREdFVF9QQVJUX05VTShjeF9pZCk7Ci0JCW1mZ19udW0gPSBYV0lER0VUX01GR19OVU0oY3hfaWQpOwotCQlEQkcoInBhcnQ9IDB4JXgsIG1mZz0gMHgleFxuIiwgcGFydF9udW0sIG1mZ19udW0pOwotCQkvKiBqdXN0IGlnbm9yZSBpdCBpZiBpdCdzIGEgQ0UgKi8KLQkJaWYgKHBhcnRfbnVtID09IFRJT19DRV9BU0lDX1BBUlROVU0pCi0JCQlyZXR1cm4gMDsKKwkJCXBhcnRfbnVtID0gWFdJREdFVF9QQVJUX05VTShjeF9pZCk7CisJCQltZmdfbnVtID0gWFdJREdFVF9NRkdfTlVNKGN4X2lkKTsKKwkJCURCRygicGFydD0gMHgleCwgbWZnPSAweCV4XG4iLCBwYXJ0X251bSwgbWZnX251bSk7CisJCQkvKiBqdXN0IGlnbm9yZSBpdCBpZiBpdCdzIGEgQ0UgKi8KKwkJCWlmIChwYXJ0X251bSA9PSBUSU9fQ0VfQVNJQ19QQVJUTlVNKQorCQkJCXJldHVybiAwOworCQl9CiAJfQogCiAJY3hfZGV2LT5jeF9pZC5wYXJ0X251bSA9IHBhcnRfbnVtOwpAQCAtNDM2LDEwICs0MzksMTAgQEAKIHsKIAlzdHJ1Y3QgY3hfZGV2ICpjeF9kZXYgPSB0b19jeF9kZXYoZGV2KTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JXggMHgleCAweCV4ICVkXG4iLAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JXggMHgleCAweCV4IDB4JXhcbiIsCiAJCSAgICAgICBjeF9kZXYtPmN4X2lkLm5hc2lkLAogCQkgICAgICAgY3hfZGV2LT5jeF9pZC5wYXJ0X251bSwgY3hfZGV2LT5jeF9pZC5tZmdfbnVtLAotCQkgICAgICAgdGlvY3hfYnRjaGFyX2dldChjeF9kZXYtPmN4X2lkLm5hc2lkKSk7CisJCSAgICAgICBjeF9kZXYtPmJ0KTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfY3hkZXZfY29udHJvbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCkBAIC00ODgsMTEgKzQ5MSwxMiBAQAogCiAJZm9yIChjbm9kZWlkID0gMDsgY25vZGVpZCA8IE1BWF9DT01QQUNUX05PREVTOyBjbm9kZWlkKyspIHsKIAkJbmFzaWRfdCBuYXNpZDsKKwkJaW50IGJ0OwogCiAJCWlmICgobmFzaWQgPSBjbm9kZWlkX3RvX25hc2lkKGNub2RlaWQpKSA8IDApCiAJCQlicmVhazsJLyogTm8gbW9yZSBuYXNpZHMgLi4gYmFpbCBvdXQgb2YgbG9vcCAqLwogCi0JCWlmICgobmFzaWQgJiAweDEpICYmIGlzX2ZwZ2FfYnJpY2sobmFzaWQpKSB7CisJCWlmICgobmFzaWQgJiAweDEpICYmIGlzX2ZwZ2FfdGlvKG5hc2lkLCAmYnQpKSB7CiAJCQlzdHJ1Y3QgaHViZGV2X2luZm8gKmh1YmRldjsKIAkJCXN0cnVjdCB4d2lkZ2V0X2luZm8gKndpZGdldHA7CiAKQEAgLTUxMiw3ICs1MTYsNyBAQAogCiAJCQlpZiAoY3hfZGV2aWNlX3JlZ2lzdGVyCiAJCQkgICAgKG5hc2lkLCB3aWRnZXRwLT54d2lfaHdpZC5wYXJ0X251bSwKLQkJCSAgICAgd2lkZ2V0cC0+eHdpX2h3aWQubWZnX251bSwgaHViZGV2KSA8IDApCisJCQkgICAgIHdpZGdldHAtPnh3aV9od2lkLm1mZ19udW0sIGh1YmRldiwgYnQpIDwgMCkKIAkJCQlyZXR1cm4gLUVOWElPOwogCQkJZWxzZQogCQkJCWZvdW5kX3Rpb2N4X2RldmljZSsrOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9yZWcuYyBiL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfcmVnLmMKaW5kZXggMjE0MjZkMC4uNGY3MThjMyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9yZWcuYworKysgYi9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX3JlZy5jCkBAIC04LDYgKzgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vc24vaW8uaD4KICNpbmNsdWRlIDxhc20vc24vcGNpYnJfcHJvdmlkZXIuaD4KICNpbmNsdWRlIDxhc20vc24vcGNpYnVzX3Byb3ZpZGVyX2RlZnMuaD4KICNpbmNsdWRlIDxhc20vc24vcGNpZGV2Lmg+CkBAIC0yOSwxMCArMzAsMTAgQEAKIAlpZiAocGNpYnVzX2luZm8pIHsKIAkJc3dpdGNoIChwY2lidXNfaW5mby0+cGJpX2JyaWRnZV90eXBlKSB7CiAJCWNhc2UgUENJQlJfQlJJREdFVFlQRV9USU9DUDoKLQkJCXB0ci0+dGlvLmNwX2NvbnRyb2wgJj0gfmJpdHM7CisJCQlfX3NuX2NscnFfcmVsYXhlZCgmcHRyLT50aW8uY3BfY29udHJvbCwgYml0cyk7CiAJCQlicmVhazsKIAkJY2FzZSBQQ0lCUl9CUklER0VUWVBFX1BJQzoKLQkJCXB0ci0+cGljLnBfd2lkX2NvbnRyb2wgJj0gfmJpdHM7CisJCQlfX3NuX2NscnFfcmVsYXhlZCgmcHRyLT5waWMucF93aWRfY29udHJvbCwgYml0cyk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXBhbmljCkBAIC00OSwxMCArNTAsMTAgQEAKIAlpZiAocGNpYnVzX2luZm8pIHsKIAkJc3dpdGNoIChwY2lidXNfaW5mby0+cGJpX2JyaWRnZV90eXBlKSB7CiAJCWNhc2UgUENJQlJfQlJJREdFVFlQRV9USU9DUDoKLQkJCXB0ci0+dGlvLmNwX2NvbnRyb2wgfD0gYml0czsKKwkJCV9fc25fc2V0cV9yZWxheGVkKCZwdHItPnRpby5jcF9jb250cm9sLCBiaXRzKTsKIAkJCWJyZWFrOwogCQljYXNlIFBDSUJSX0JSSURHRVRZUEVfUElDOgotCQkJcHRyLT5waWMucF93aWRfY29udHJvbCB8PSBiaXRzOworCQkJX19zbl9zZXRxX3JlbGF4ZWQoJnB0ci0+cGljLnBfd2lkX2NvbnRyb2wsIGJpdHMpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwYW5pYwpAQCAtNzMsMTAgKzc0LDEwIEBACiAJaWYgKHBjaWJ1c19pbmZvKSB7CiAJCXN3aXRjaCAocGNpYnVzX2luZm8tPnBiaV9icmlkZ2VfdHlwZSkgewogCQljYXNlIFBDSUJSX0JSSURHRVRZUEVfVElPQ1A6Ci0JCQlyZXQgPSBwdHItPnRpby5jcF90Zmx1c2g7CisJCQlyZXQgPSBfX3NuX3JlYWRxX3JlbGF4ZWQoJnB0ci0+dGlvLmNwX3RmbHVzaCk7CiAJCQlicmVhazsKIAkJY2FzZSBQQ0lCUl9CUklER0VUWVBFX1BJQzoKLQkJCXJldCA9IHB0ci0+cGljLnBfd2lkX3RmbHVzaDsKKwkJCXJldCA9IF9fc25fcmVhZHFfcmVsYXhlZCgmcHRyLT5waWMucF93aWRfdGZsdXNoKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcGFuaWMKQEAgLTEwMywxMCArMTA0LDEwIEBACiAJaWYgKHBjaWJ1c19pbmZvKSB7CiAJCXN3aXRjaCAocGNpYnVzX2luZm8tPnBiaV9icmlkZ2VfdHlwZSkgewogCQljYXNlIFBDSUJSX0JSSURHRVRZUEVfVElPQ1A6Ci0JCQlyZXQgPSBwdHItPnRpby5jcF9pbnRfc3RhdHVzOworCQkJcmV0ID0gX19zbl9yZWFkcV9yZWxheGVkKCZwdHItPnRpby5jcF9pbnRfc3RhdHVzKTsKIAkJCWJyZWFrOwogCQljYXNlIFBDSUJSX0JSSURHRVRZUEVfUElDOgotCQkJcmV0ID0gcHRyLT5waWMucF9pbnRfc3RhdHVzOworCQkJcmV0ID0gX19zbl9yZWFkcV9yZWxheGVkKCZwdHItPnBpYy5wX2ludF9zdGF0dXMpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwYW5pYwpAQCAtMTI3LDEwICsxMjgsMTAgQEAKIAlpZiAocGNpYnVzX2luZm8pIHsKIAkJc3dpdGNoIChwY2lidXNfaW5mby0+cGJpX2JyaWRnZV90eXBlKSB7CiAJCWNhc2UgUENJQlJfQlJJREdFVFlQRV9USU9DUDoKLQkJCXB0ci0+dGlvLmNwX2ludF9lbmFibGUgJj0gfmJpdHM7CisJCQlfX3NuX2NscnFfcmVsYXhlZCgmcHRyLT50aW8uY3BfaW50X2VuYWJsZSwgYml0cyk7CiAJCQlicmVhazsKIAkJY2FzZSBQQ0lCUl9CUklER0VUWVBFX1BJQzoKLQkJCXB0ci0+cGljLnBfaW50X2VuYWJsZSAmPSB+Yml0czsKKwkJCV9fc25fY2xycV9yZWxheGVkKCZwdHItPnBpYy5wX2ludF9lbmFibGUsIH5iaXRzKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcGFuaWMKQEAgLTE0NywxMCArMTQ4LDEwIEBACiAJaWYgKHBjaWJ1c19pbmZvKSB7CiAJCXN3aXRjaCAocGNpYnVzX2luZm8tPnBiaV9icmlkZ2VfdHlwZSkgewogCQljYXNlIFBDSUJSX0JSSURHRVRZUEVfVElPQ1A6Ci0JCQlwdHItPnRpby5jcF9pbnRfZW5hYmxlIHw9IGJpdHM7CisJCQlfX3NuX3NldHFfcmVsYXhlZCgmcHRyLT50aW8uY3BfaW50X2VuYWJsZSwgYml0cyk7CiAJCQlicmVhazsKIAkJY2FzZSBQQ0lCUl9CUklER0VUWVBFX1BJQzoKLQkJCXB0ci0+cGljLnBfaW50X2VuYWJsZSB8PSBiaXRzOworCQkJX19zbl9zZXRxX3JlbGF4ZWQoJnB0ci0+cGljLnBfaW50X2VuYWJsZSwgYml0cyk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXBhbmljCkBAIC0xNzEsMTQgKzE3MiwxNiBAQAogCWlmIChwY2lidXNfaW5mbykgewogCQlzd2l0Y2ggKHBjaWJ1c19pbmZvLT5wYmlfYnJpZGdlX3R5cGUpIHsKIAkJY2FzZSBQQ0lCUl9CUklER0VUWVBFX1RJT0NQOgotCQkJcHRyLT50aW8uY3BfaW50X2FkZHJbaW50X25dICY9IH5USU9DUF9IT1NUX0lOVFJfQUREUjsKLQkJCXB0ci0+dGlvLmNwX2ludF9hZGRyW2ludF9uXSB8PQotCQkJICAgIChhZGRyICYgVElPQ1BfSE9TVF9JTlRSX0FERFIpOworCQkJX19zbl9jbHJxX3JlbGF4ZWQoJnB0ci0+dGlvLmNwX2ludF9hZGRyW2ludF9uXSwKKwkJCSAgICBUSU9DUF9IT1NUX0lOVFJfQUREUik7CisJCQlfX3NuX3NldHFfcmVsYXhlZCgmcHRyLT50aW8uY3BfaW50X2FkZHJbaW50X25dLAorCQkJICAgIChhZGRyICYgVElPQ1BfSE9TVF9JTlRSX0FERFIpKTsKIAkJCWJyZWFrOwogCQljYXNlIFBDSUJSX0JSSURHRVRZUEVfUElDOgotCQkJcHRyLT5waWMucF9pbnRfYWRkcltpbnRfbl0gJj0gflBJQ19IT1NUX0lOVFJfQUREUjsKLQkJCXB0ci0+cGljLnBfaW50X2FkZHJbaW50X25dIHw9Ci0JCQkgICAgKGFkZHIgJiBQSUNfSE9TVF9JTlRSX0FERFIpOworCQkJX19zbl9jbHJxX3JlbGF4ZWQoJnB0ci0+cGljLnBfaW50X2FkZHJbaW50X25dLAorCQkJICAgIFBJQ19IT1NUX0lOVFJfQUREUik7CisJCQlfX3NuX3NldHFfcmVsYXhlZCgmcHRyLT5waWMucF9pbnRfYWRkcltpbnRfbl0sCisJCQkgICAgKGFkZHIgJiBQSUNfSE9TVF9JTlRSX0FERFIpKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcGFuaWMKQEAgLTE5OCwxMCArMjAxLDEwIEBACiAJaWYgKHBjaWJ1c19pbmZvKSB7CiAJCXN3aXRjaCAocGNpYnVzX2luZm8tPnBiaV9icmlkZ2VfdHlwZSkgewogCQljYXNlIFBDSUJSX0JSSURHRVRZUEVfVElPQ1A6Ci0JCQlwdHItPnRpby5jcF9mb3JjZV9waW5baW50X25dID0gMTsKKwkJCXdyaXRlcSgxLCAmcHRyLT50aW8uY3BfZm9yY2VfcGluW2ludF9uXSk7CiAJCQlicmVhazsKIAkJY2FzZSBQQ0lCUl9CUklER0VUWVBFX1BJQzoKLQkJCXB0ci0+cGljLnBfZm9yY2VfcGluW2ludF9uXSA9IDE7CisJCQl3cml0ZXEoMSwgJnB0ci0+cGljLnBfZm9yY2VfcGluW2ludF9uXSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXBhbmljCkBAIC0yMjIsMTAgKzIyNSwxMiBAQAogCWlmIChwY2lidXNfaW5mbykgewogCQlzd2l0Y2ggKHBjaWJ1c19pbmZvLT5wYmlfYnJpZGdlX3R5cGUpIHsKIAkJY2FzZSBQQ0lCUl9CUklER0VUWVBFX1RJT0NQOgotCQkJcmV0ID0gcHRyLT50aW8uY3Bfd3JfcmVxX2J1ZltkZXZpY2VdOworCQkJcmV0ID0KKwkJCSAgICBfX3NuX3JlYWRxX3JlbGF4ZWQoJnB0ci0+dGlvLmNwX3dyX3JlcV9idWZbZGV2aWNlXSk7CiAJCQlicmVhazsKIAkJY2FzZSBQQ0lCUl9CUklER0VUWVBFX1BJQzoKLQkJCXJldCA9IHB0ci0+cGljLnBfd3JfcmVxX2J1ZltkZXZpY2VdOworCQkJcmV0ID0KKwkJCSAgICBfX3NuX3JlYWRxX3JlbGF4ZWQoJnB0ci0+cGljLnBfd3JfcmVxX2J1ZltkZXZpY2VdKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkgICAgICBwYW5pYygicGNpcmVnX3dyYl9mbHVzaF9nZXQ6IHVua25vd24gYnJpZGdldHlwZSBicmlkZ2UgMHglcCIsICh2b2lkICopcHRyKTsKQEAgLTI0NCwxMCArMjQ5LDEwIEBACiAJaWYgKHBjaWJ1c19pbmZvKSB7CiAJCXN3aXRjaCAocGNpYnVzX2luZm8tPnBiaV9icmlkZ2VfdHlwZSkgewogCQljYXNlIFBDSUJSX0JSSURHRVRZUEVfVElPQ1A6Ci0JCQlwdHItPnRpby5jcF9pbnRfYXRlX3JhbVthdGVfaW5kZXhdID0gKHVpbnQ2NF90KSB2YWw7CisJCQl3cml0ZXEodmFsLCAmcHRyLT50aW8uY3BfaW50X2F0ZV9yYW1bYXRlX2luZGV4XSk7CiAJCQlicmVhazsKIAkJY2FzZSBQQ0lCUl9CUklER0VUWVBFX1BJQzoKLQkJCXB0ci0+cGljLnBfaW50X2F0ZV9yYW1bYXRlX2luZGV4XSA9ICh1aW50NjRfdCkgdmFsOworCQkJd3JpdGVxKHZhbCwgJnB0ci0+cGljLnBfaW50X2F0ZV9yYW1bYXRlX2luZGV4XSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXBhbmljCkBAIC0yNjUsMTIgKzI3MCwxMCBAQAogCWlmIChwY2lidXNfaW5mbykgewogCQlzd2l0Y2ggKHBjaWJ1c19pbmZvLT5wYmlfYnJpZGdlX3R5cGUpIHsKIAkJY2FzZSBQQ0lCUl9CUklER0VUWVBFX1RJT0NQOgotCQkJcmV0ID0KLQkJCSAgICAodWludDY0X3QgKikgJiAocHRyLT50aW8uY3BfaW50X2F0ZV9yYW1bYXRlX2luZGV4XSk7CisJCQlyZXQgPSAmcHRyLT50aW8uY3BfaW50X2F0ZV9yYW1bYXRlX2luZGV4XTsKIAkJCWJyZWFrOwogCQljYXNlIFBDSUJSX0JSSURHRVRZUEVfUElDOgotCQkJcmV0ID0KLQkJCSAgICAodWludDY0X3QgKikgJiAocHRyLT5waWMucF9pbnRfYXRlX3JhbVthdGVfaW5kZXhdKTsKKwkJCXJldCA9ICZwdHItPnBpYy5wX2ludF9hdGVfcmFtW2F0ZV9pbmRleF07CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXBhbmljCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24vcGNpL3Rpb2NhX3Byb3ZpZGVyLmMgYi9hcmNoL2lhNjQvc24vcGNpL3Rpb2NhX3Byb3ZpZGVyLmMKaW5kZXggMTliY2VkMy4uNDZiNjQ2YSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL3BjaS90aW9jYV9wcm92aWRlci5jCisrKyBiL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2FfcHJvdmlkZXIuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGFzbS9zbi9zbl9zYWwuaD4KICNpbmNsdWRlIDxhc20vc24vYWRkcnMuaD4KKyNpbmNsdWRlIDxhc20vc24vaW8uaD4KICNpbmNsdWRlIDxhc20vc24vcGNpZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL3NuL3BjaWJ1c19wcm92aWRlcl9kZWZzLmg+CiAjaW5jbHVkZSA8YXNtL3NuL3Rpb2NhX3Byb3ZpZGVyLmg+CkBAIC0zNyw3ICszOCw3IEBACiAJdWludDY0X3Qgb2Zmc2V0OwogCXN0cnVjdCBwYWdlICp0bXA7CiAJc3RydWN0IHRpb2NhX2NvbW1vbiAqdGlvY2FfY29tbW9uOwotCXZvbGF0aWxlIHN0cnVjdCB0aW9jYSAqY2FfYmFzZTsKKwlzdHJ1Y3QgdGlvY2EgKmNhX2Jhc2U7CiAKIAl0aW9jYV9jb21tb24gPSB0aW9jYV9rZXJuLT5jYV9jb21tb247CiAJY2FfYmFzZSA9IChzdHJ1Y3QgdGlvY2EgKil0aW9jYV9jb21tb24tPmNhX2NvbW1vbi5ic19iYXNlOwpAQCAtMTc0LDI3ICsxNzUsMjkgQEAKIAkgKiAJRElTQUJMRSBHQVJUIFBSRUZFVENISU5HIGR1ZSB0byBodyBidWcgdHJhY2tlZCBpbiBTR0kgUFY5MzAwMjkKIAkgKi8KIAotCWNhX2Jhc2UtPmNhX2NvbnRyb2wxIHw9IENBX0FHUERNQV9PUF9FTkJfQ09NQkRFTEFZOwkvKiBQVjg5NTQ2OSA/ICovCi0JY2FfYmFzZS0+Y2FfY29udHJvbDIgJj0gfihDQV9HQVJUX01FTV9QQVJBTSk7Ci0JY2FfYmFzZS0+Y2FfY29udHJvbDIgfD0gKDB4MnVsbCA8PCBDQV9HQVJUX01FTV9QQVJBTV9TSEZUKTsKKwlfX3NuX3NldHFfcmVsYXhlZCgmY2FfYmFzZS0+Y2FfY29udHJvbDEsCisJCQlDQV9BR1BETUFfT1BfRU5CX0NPTUJERUxBWSk7CS8qIFBWODk1NDY5ID8gKi8KKwlfX3NuX2NscnFfcmVsYXhlZCgmY2FfYmFzZS0+Y2FfY29udHJvbDIsIENBX0dBUlRfTUVNX1BBUkFNKTsKKwlfX3NuX3NldHFfcmVsYXhlZCgmY2FfYmFzZS0+Y2FfY29udHJvbDIsCisJCQkoMHgydWxsIDw8IENBX0dBUlRfTUVNX1BBUkFNX1NIRlQpKTsKIAl0aW9jYV9rZXJuLT5jYV9nYXJ0X2lzY29oZXJlbnQgPSAxOwotCWNhX2Jhc2UtPmNhX2NvbnRyb2wyICY9Ci0JICAgIH4oQ0FfR0FSVF9XUl9QUkVGRVRDSF9FTkIgfCBDQV9HQVJUX1JEX1BSRUZFVENIX0VOQik7CisJX19zbl9jbHJxX3JlbGF4ZWQoJmNhX2Jhc2UtPmNhX2NvbnRyb2wyLAorCSAgICAJCShDQV9HQVJUX1dSX1BSRUZFVENIX0VOQiB8IENBX0dBUlRfUkRfUFJFRkVUQ0hfRU5CKSk7CiAKIAkvKgogCSAqIFVubWFzayBHQVJUIGZldGNoIGVycm9yIGludGVycnVwdHMuICBDbGVhciByZXNpZHVhbCBlcnJvcnMgZmlyc3QuCiAJICovCiAKLQljYV9iYXNlLT5jYV9pbnRfc3RhdHVzX2FsaWFzID0gQ0FfR0FSVF9GRVRDSF9FUlI7Ci0JY2FfYmFzZS0+Y2FfbXVsdF9lcnJvcl9hbGlhcyA9IENBX0dBUlRfRkVUQ0hfRVJSOwotCWNhX2Jhc2UtPmNhX2ludF9tYXNrICY9IH5DQV9HQVJUX0ZFVENIX0VSUjsKKwl3cml0ZXEoQ0FfR0FSVF9GRVRDSF9FUlIsICZjYV9iYXNlLT5jYV9pbnRfc3RhdHVzX2FsaWFzKTsKKwl3cml0ZXEoQ0FfR0FSVF9GRVRDSF9FUlIsICZjYV9iYXNlLT5jYV9tdWx0X2Vycm9yX2FsaWFzKTsKKwlfX3NuX2NscnFfcmVsYXhlZCgmY2FfYmFzZS0+Y2FfaW50X21hc2ssIENBX0dBUlRfRkVUQ0hfRVJSKTsKIAogCS8qCiAJICogUHJvZ3JhbSB0aGUgYXBlcmF0dXJlIGFuZCBnYXJ0IHJlZ2lzdGVycyBpbiBUSU9DQQogCSAqLwogCi0JY2FfYmFzZS0+Y2FfZ2FydF9hcGVyYXR1cmUgPSBhcF9yZWc7Ci0JY2FfYmFzZS0+Y2FfZ2FydF9wdHJfdGFibGUgPSB0aW9jYV9rZXJuLT5jYV9nYXJ0X2NvcmV0YWxrX2FkZHIgfCAxOworCXdyaXRlcShhcF9yZWcsICZjYV9iYXNlLT5jYV9nYXJ0X2FwZXJhdHVyZSk7CisJd3JpdGVxKHRpb2NhX2tlcm4tPmNhX2dhcnRfY29yZXRhbGtfYWRkcnwxLCAmY2FfYmFzZS0+Y2FfZ2FydF9wdHJfdGFibGUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMTEsNyArMjE0LDYgQEAKIHRpb2NhX2Zhc3R3cml0ZV9lbmFibGUoc3RydWN0IHRpb2NhX2tlcm5lbCAqdGlvY2Ffa2VybikKIHsKIAlpbnQgY2FwX3B0cjsKLQl1aW50NjRfdCBjYV9jb250cm9sMTsKIAl1aW50MzJfdCByZWc7CiAJc3RydWN0IHRpb2NhICp0aW9jYV9iYXNlOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwpAQCAtMjU2LDkgKzI1OCw3IEBACiAJICovCiAKIAl0aW9jYV9iYXNlID0gKHN0cnVjdCB0aW9jYSAqKWNvbW1vbi0+Y2FfY29tbW9uLmJzX2Jhc2U7Ci0JY2FfY29udHJvbDEgPSB0aW9jYV9iYXNlLT5jYV9jb250cm9sMTsKLQljYV9jb250cm9sMSB8PSBDQV9BR1BfRldfRU5BQkxFOwotCXRpb2NhX2Jhc2UtPmNhX2NvbnRyb2wxID0gY2FfY29udHJvbDE7CisJX19zbl9zZXRxX3JlbGF4ZWQoJnRpb2NhX2Jhc2UtPmNhX2NvbnRyb2wxLCBDQV9BR1BfRldfRU5BQkxFKTsKIH0KIAogRVhQT1JUX1NZTUJPTCh0aW9jYV9mYXN0d3JpdGVfZW5hYmxlKTsJLyogdXNlZCBieSBhZ3Atc2dpICovCkBAIC0zNDUsNyArMzQ1LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JYWdwX2RtYV9leHRuID0gY2FfYmFzZS0+Y2FfYWdwX2RtYV9hZGRyX2V4dG47CisJYWdwX2RtYV9leHRuID0gX19zbl9yZWFkcV9yZWxheGVkKCZjYV9iYXNlLT5jYV9hZ3BfZG1hX2FkZHJfZXh0bik7CiAJaWYgKG5vZGVfdXBwZXIgIT0gKGFncF9kbWFfZXh0biA+PiBDQV9BR1BfRE1BX05PREVfSURfU0hGVCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogIGNvcmV0YWxrIHVwcGVyIG5vZGUgKCV1KSAiCiAJCSAgICAgICAibWlzbWF0Y2ggd2l0aCBjYV9hZ3BfZG1hX2FkZHJfZXh0biAoJWx1KVxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2VfcHJvdmlkZXIuYyBiL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2VfcHJvdmlkZXIuYwppbmRleCA4ZTc1ZGIyLi45ZjAzZDRlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24vcGNpL3Rpb2NlX3Byb3ZpZGVyLmMKKysrIGIvYXJjaC9pYTY0L3NuL3BjaS90aW9jZV9wcm92aWRlci5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL3NuL3NuX3NhbC5oPgogI2luY2x1ZGUgPGFzbS9zbi9hZGRycy5oPgorI2luY2x1ZGUgPGFzbS9zbi9pby5oPgogI2luY2x1ZGUgPGFzbS9zbi9wY2lkZXYuaD4KICNpbmNsdWRlIDxhc20vc24vcGNpYnVzX3Byb3ZpZGVyX2RlZnMuaD4KICNpbmNsdWRlIDxhc20vc24vdGlvY2VfcHJvdmlkZXIuaD4KQEAgLTIyNyw3ICsyMjgsNyBAQAogCiAJCWF0ZSA9IEFURV9NQUtFKGFkZHIsIHBhZ2VzaXplKTsKIAkJYXRlX3NoYWRvd1tpICsgal0gPSBhdGU7Ci0JCWF0ZV9yZWdbaSArIGpdID0gYXRlOworCQl3cml0ZXEoYXRlLCAmYXRlX3JlZ1tpICsgal0pOwogCQlhZGRyICs9IHBhZ2VzaXplOwogCX0KIApAQCAtMjY4LDEwICsyNjksMTAgQEAKIAlwY2lkZXZfdG9fdGlvY2UocGRldiwgJmNlX21tciwgJmNlX2tlcm4sICZwb3J0KTsKIAogCWlmIChjZV9rZXJuLT5jZV9wb3J0W3BvcnRdLmRpcm1hcF9yZWZjbnQgPT0gMCkgewotCQl2b2xhdGlsZSB1aW50NjRfdCB0bXA7CisJCXVpbnQ2NF90IHRtcDsKIAogCQljZV9rZXJuLT5jZV9wb3J0W3BvcnRdLmRpcm1hcF9zaGFkb3cgPSBjdF91cHBlcjsKLQkJY2VfbW1yLT5jZV91cmVfZGlyX21hcFtwb3J0XSA9IGN0X3VwcGVyOworCQl3cml0ZXEoY3RfdXBwZXIsICZjZV9tbXItPmNlX3VyZV9kaXJfbWFwW3BvcnRdKTsKIAkJdG1wID0gY2VfbW1yLT5jZV91cmVfZGlyX21hcFtwb3J0XTsKIAkJZG1hX29rID0gMTsKIAl9IGVsc2UKQEAgLTM0Myw3ICszNDQsNyBAQAogCWlmIChUSU9DRV9EMzJfQUREUihidXNfYWRkcikpIHsKIAkJaWYgKC0tY2Vfa2Vybi0+Y2VfcG9ydFtwb3J0XS5kaXJtYXBfcmVmY250ID09IDApIHsKIAkJCWNlX2tlcm4tPmNlX3BvcnRbcG9ydF0uZGlybWFwX3NoYWRvdyA9IDA7Ci0JCQljZV9tbXItPmNlX3VyZV9kaXJfbWFwW3BvcnRdID0gMDsKKwkJCXdyaXRlcSgwLCAmY2VfbW1yLT5jZV91cmVfZGlyX21hcFtwb3J0XSk7CiAJCX0KIAl9IGVsc2UgewogCQlzdHJ1Y3QgdGlvY2VfZG1hbWFwICptYXA7CkBAIC01ODIsMTggKzU4MywxOCBAQAogCSAqLwogCiAJdGlvY2VfbW1yID0gKHN0cnVjdCB0aW9jZSAqKXRpb2NlX2NvbW1vbi0+Y2VfcGNpYnVzLmJzX2Jhc2U7Ci0JdGlvY2VfbW1yLT5jZV91cmVfcGFnZV9tYXAgJj0gfkNFX1VSRV9QQUdFU0laRV9NQVNLOwotCXRpb2NlX21tci0+Y2VfdXJlX3BhZ2VfbWFwIHw9IENFX1VSRV8yNTZLX1BBR0VTSVpFOworCV9fc25fY2xycV9yZWxheGVkKCZ0aW9jZV9tbXItPmNlX3VyZV9wYWdlX21hcCwgQ0VfVVJFX1BBR0VTSVpFX01BU0spOworCV9fc25fc2V0cV9yZWxheGVkKCZ0aW9jZV9tbXItPmNlX3VyZV9wYWdlX21hcCwgQ0VfVVJFXzI1NktfUEFHRVNJWkUpOwogCXRpb2NlX2tlcm4tPmNlX2F0ZTMyNDBfcGFnZXNpemUgPSBLQigyNTYpOwogCiAJZm9yIChpID0gMDsgaSA8IFRJT0NFX05VTV9NNDBfQVRFUzsgaSsrKSB7CiAJCXRpb2NlX2tlcm4tPmNlX2F0ZTQwX3NoYWRvd1tpXSA9IDA7Ci0JCXRpb2NlX21tci0+Y2VfdXJlX2F0ZTQwW2ldID0gMDsKKwkJd3JpdGVxKDAsICZ0aW9jZV9tbXItPmNlX3VyZV9hdGU0MFtpXSk7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IFRJT0NFX05VTV9NMzI0MF9BVEVTOyBpKyspIHsKIAkJdGlvY2Vfa2Vybi0+Y2VfYXRlMzI0MF9zaGFkb3dbaV0gPSAwOwotCQl0aW9jZV9tbXItPmNlX3VyZV9hdGUzMjQwW2ldID0gMDsKKwkJd3JpdGVxKDAsICZ0aW9jZV9tbXItPmNlX3VyZV9hdGUzMjQwW2ldKTsKIAl9CiAKIAlyZXR1cm4gdGlvY2Vfa2VybjsKQEAgLTY2NSw3ICs2NjYsNyBAQAogCWRlZmF1bHQ6CiAJCXJldHVybjsKIAl9Ci0JY2VfbW1yLT5jZV9hZG1fZm9yY2VfaW50ID0gZm9yY2VfaW50X3ZhbDsKKwl3cml0ZXEoZm9yY2VfaW50X3ZhbCwgJmNlX21tci0+Y2VfYWRtX2ZvcmNlX2ludCk7CiB9CiAKIC8qKgpAQCAtNjg2LDYgKzY4Nyw3IEBACiAJc3RydWN0IHRpb2NlX2NvbW1vbiAqY2VfY29tbW9uOwogCXN0cnVjdCB0aW9jZSAqY2VfbW1yOwogCWludCBiaXQ7CisJdWludDY0X3QgdmVjdG9yOwogCiAJcGNpZGV2X2luZm8gPSAoc3RydWN0IHBjaWRldl9pbmZvICopc25faXJxX2luZm8tPmlycV9wY2lpb2luZm87CiAJaWYgKCFwY2lkZXZfaW5mbykKQEAgLTY5NiwxMSArNjk4LDExIEBACiAKIAliaXQgPSBzbl9pcnFfaW5mby0+aXJxX2ludF9iaXQ7CiAKLQljZV9tbXItPmNlX2FkbV9pbnRfbWFzayB8PSAoMVVMIDw8IGJpdCk7Ci0JY2VfbW1yLT5jZV9hZG1faW50X2Rlc3RbYml0XSA9Ci0JCSgodWludDY0X3Qpc25faXJxX2luZm8tPmlycV9pcnEgPDwgSU5UUl9WRUNUT1JfU0hGVCkgfAotCQkJICAgc25faXJxX2luZm8tPmlycV94dGFsa2FkZHI7Ci0JY2VfbW1yLT5jZV9hZG1faW50X21hc2sgJj0gfigxVUwgPDwgYml0KTsKKwlfX3NuX3NldHFfcmVsYXhlZCgmY2VfbW1yLT5jZV9hZG1faW50X21hc2ssICgxVUwgPDwgYml0KSk7CisJdmVjdG9yID0gKHVpbnQ2NF90KXNuX2lycV9pbmZvLT5pcnFfaXJxIDw8IElOVFJfVkVDVE9SX1NIRlQ7CisJdmVjdG9yIHw9IHNuX2lycV9pbmZvLT5pcnFfeHRhbGthZGRyOworCXdyaXRlcSh2ZWN0b3IsICZjZV9tbXItPmNlX2FkbV9pbnRfZGVzdFtiaXRdKTsKKwlfX3NuX2NscnFfcmVsYXhlZCgmY2VfbW1yLT5jZV9hZG1faW50X21hc2ssICgxVUwgPDwgYml0KSk7CiAKIAl0aW9jZV9mb3JjZV9pbnRlcnJ1cHQoc25faXJxX2luZm8pOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL0tjb25maWcgYi9hcmNoL20zMnIvS2NvbmZpZwppbmRleCAxZWYzOTg3ZS4uNGQxMDBmMyAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL0tjb25maWcKKysrIGIvYXJjaC9tMzJyL0tjb25maWcKQEAgLTIyMCwxMSArMjIwLDYgQEAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSBidWlsZGluZyBhIGtlcm5lbCBmb3IgYSBkZXNrdG9wLCBlbWJlZGRlZAogCSAgb3IgcmVhbC10aW1lIHN5c3RlbS4gIFNheSBOIGlmIHlvdSBhcmUgdW5zdXJlLgogCi1jb25maWcgSEFWRV9ERUNfTE9DSwotCWJvb2wKLQlkZXBlbmRzIG9uIChTTVAgfHwgUFJFRU1QVCkKLQlkZWZhdWx0IG4KLQogY29uZmlnIFNNUAogCWJvb2wgIlN5bW1ldHJpYyBtdWx0aS1wcm9jZXNzaW5nIHN1cHBvcnQiCiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL01ha2VmaWxlIGIvYXJjaC9tMzJyL01ha2VmaWxlCmluZGV4IGRkNDQxOGQuLjk4M2Q0MzggMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9NYWtlZmlsZQorKysgYi9hcmNoL20zMnIvTWFrZWZpbGUKQEAgLTI0LDcgKzI0LDcgQEAKIENGTEFHUyArPSAkKGNmbGFncy15KQogQUZMQUdTICs9ICQoYWZsYWdzLXkpCiAKLUNIRUNLRkxBR1MJOj0gJChDSEVDSykgLURfX20zMnJfXworQ0hFQ0tGTEFHUwkrPSAtRF9fbTMycl9fIC1EX19CSUdfRU5ESUFOX189MQogCiBoZWFkLXkJOj0gYXJjaC9tMzJyL2tlcm5lbC9oZWFkLm8gYXJjaC9tMzJyL2tlcm5lbC9pbml0X3Rhc2subwogCmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL2VudHJ5LlMgYi9hcmNoL20zMnIva2VybmVsL2VudHJ5LlMKaW5kZXggZGRkYmY2Yi4uODU5MjBmYiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvZW50cnkuUwpAQCAtNjgxLDYgKzY4MSwxNSBAQAogCWJsCWRvX2RlYnVnX3RyYXAKIAlicmEJZXJyb3JfY29kZQogCitFTlRSWShpbGxfdHJhcCkKKwkvKiB2b2lkIGlsbF90cmFwKHZvaWQpICovCisJU1dJVENIX1RPX0tFUk5FTF9TVEFDSworCVNBVkVfQUxMCisJbGRpCXIxLCAjMAkJCQk7IGVycm9yX2NvZGUgOyBGSVhNRQorCW12CXIwLCBzcAkJCQk7IHB0X3JlZ3MKKwlibAlkb19pbGxfdHJhcAorCWJyYQllcnJvcl9jb2RlCisKIAogLyogQ2FjaGUgZmx1c2hpbmcgaGFuZGxlciAqLwogRU5UUlkoY2FjaGVfZmx1c2hpbmdfaGFuZGxlcikKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvc21wLmMgYi9hcmNoL20zMnIva2VybmVsL3NtcC5jCmluZGV4IGE0NTc2YWMuLjhiMWY2ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9zbXAuYwpAQCAtMjc1LDEyICsyNzUsMTQgQEAKICAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogdm9pZCBzbXBfZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewotCWludCBjcHVfaWQgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaW50IGNwdV9pZDsKIAljcHVtYXNrX3QgY3B1X21hc2s7Ci0JdW5zaWduZWQgbG9uZyAqbW1jID0gJm1tLT5jb250ZXh0W2NwdV9pZF07CisJdW5zaWduZWQgbG9uZyAqbW1jOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKKwljcHVfaWQgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJbW1jID0gJm1tLT5jb250ZXh0W2NwdV9pZF07CiAJY3B1X21hc2sgPSBtbS0+Y3B1X3ZtX21hc2s7CiAJY3B1X2NsZWFyKGNwdV9pZCwgY3B1X21hc2spOwogCkBAIC0zNDMsMTIgKzM0NSwxNCBAQAogdm9pZCBzbXBfZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdmEpCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwotCWludCBjcHVfaWQgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaW50IGNwdV9pZDsKIAljcHVtYXNrX3QgY3B1X21hc2s7Ci0JdW5zaWduZWQgbG9uZyAqbW1jID0gJm1tLT5jb250ZXh0W2NwdV9pZF07CisJdW5zaWduZWQgbG9uZyAqbW1jOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKKwljcHVfaWQgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJbW1jID0gJm1tLT5jb250ZXh0W2NwdV9pZF07CiAJY3B1X21hc2sgPSBtbS0+Y3B1X3ZtX21hc2s7CiAJY3B1X2NsZWFyKGNwdV9pZCwgY3B1X21hc2spOwogCmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3RyYXBzLmMgYi9hcmNoL20zMnIva2VybmVsL3RyYXBzLmMKaW5kZXggMDE5MjIyNy4uNWZlOGVkNiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvdHJhcHMuYwpAQCAtNSw4ICs1LDYgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpdG9zaGkgWWFtYW1vdG8KICAqLwogCi0vKiAkSWQkICovCi0KIC8qCiAgKiAndHJhcHMuYycgaGFuZGxlcyBoYXJkd2FyZSB0cmFwcyBhbmQgZmF1bHRzIGFmdGVyIHdlIGhhdmUgc2F2ZWQgc29tZQogICogc3RhdGUgaW4gJ2VudHJ5LlMnLgpAQCAtMzUsNiArMzMsNyBAQAogYXNtbGlua2FnZSB2b2lkIHJpZV9oYW5kbGVyKHZvaWQpOwogYXNtbGlua2FnZSB2b2lkIGRlYnVnX3RyYXAodm9pZCk7CiBhc21saW5rYWdlIHZvaWQgY2FjaGVfZmx1c2hpbmdfaGFuZGxlcih2b2lkKTsKK2FzbWxpbmthZ2Ugdm9pZCBpbGxfdHJhcCh2b2lkKTsKIAogI2lmZGVmIENPTkZJR19TTVAKIGV4dGVybiB2b2lkIHNtcF9yZXNjaGVkdWxlX2ludGVycnVwdCh2b2lkKTsKQEAgLTc3LDIyICs3NiwyMiBAQAogCWVpdF92ZWN0b3JbNV0gPSBCUkFfSU5TTihkZWZhdWx0X2VpdF9oYW5kbGVyLCA1KTsKIAllaXRfdmVjdG9yWzhdID0gQlJBX0lOU04ocmllX2hhbmRsZXIsIDgpOwogCWVpdF92ZWN0b3JbMTJdID0gQlJBX0lOU04oYWxpZ25tZW50X2NoZWNrLCAxMik7Ci0JZWl0X3ZlY3RvclsxNl0gPSAweGZmMDAwMDAwVUw7CisJZWl0X3ZlY3RvclsxNl0gPSBCUkFfSU5TTihpbGxfdHJhcCwgMTYpOwogCWVpdF92ZWN0b3JbMTddID0gQlJBX0lOU04oZGVidWdfdHJhcCwgMTcpOwogCWVpdF92ZWN0b3JbMThdID0gQlJBX0lOU04oc3lzdGVtX2NhbGwsIDE4KTsKLQllaXRfdmVjdG9yWzE5XSA9IDB4ZmYwMDAwMDBVTDsKLQllaXRfdmVjdG9yWzIwXSA9IDB4ZmYwMDAwMDBVTDsKLQllaXRfdmVjdG9yWzIxXSA9IDB4ZmYwMDAwMDBVTDsKLQllaXRfdmVjdG9yWzIyXSA9IDB4ZmYwMDAwMDBVTDsKLQllaXRfdmVjdG9yWzIzXSA9IDB4ZmYwMDAwMDBVTDsKLQllaXRfdmVjdG9yWzI0XSA9IDB4ZmYwMDAwMDBVTDsKLQllaXRfdmVjdG9yWzI1XSA9IDB4ZmYwMDAwMDBVTDsKLQllaXRfdmVjdG9yWzI2XSA9IDB4ZmYwMDAwMDBVTDsKLQllaXRfdmVjdG9yWzI3XSA9IDB4ZmYwMDAwMDBVTDsKKwllaXRfdmVjdG9yWzE5XSA9IEJSQV9JTlNOKGlsbF90cmFwLCAxOSk7CisJZWl0X3ZlY3RvclsyMF0gPSBCUkFfSU5TTihpbGxfdHJhcCwgMjApOworCWVpdF92ZWN0b3JbMjFdID0gQlJBX0lOU04oaWxsX3RyYXAsIDIxKTsKKwllaXRfdmVjdG9yWzIyXSA9IEJSQV9JTlNOKGlsbF90cmFwLCAyMik7CisJZWl0X3ZlY3RvclsyM10gPSBCUkFfSU5TTihpbGxfdHJhcCwgMjMpOworCWVpdF92ZWN0b3JbMjRdID0gQlJBX0lOU04oaWxsX3RyYXAsIDI0KTsKKwllaXRfdmVjdG9yWzI1XSA9IEJSQV9JTlNOKGlsbF90cmFwLCAyNSk7CisJZWl0X3ZlY3RvclsyNl0gPSBCUkFfSU5TTihpbGxfdHJhcCwgMjYpOworCWVpdF92ZWN0b3JbMjddID0gQlJBX0lOU04oaWxsX3RyYXAsIDI3KTsKIAllaXRfdmVjdG9yWzI4XSA9IEJSQV9JTlNOKGNhY2hlX2ZsdXNoaW5nX2hhbmRsZXIsIDI4KTsKLQllaXRfdmVjdG9yWzI5XSA9IDB4ZmYwMDAwMDBVTDsKLQllaXRfdmVjdG9yWzMwXSA9IDB4ZmYwMDAwMDBVTDsKLQllaXRfdmVjdG9yWzMxXSA9IDB4ZmYwMDAwMDBVTDsKKwllaXRfdmVjdG9yWzI5XSA9IEJSQV9JTlNOKGlsbF90cmFwLCAyOSk7CisJZWl0X3ZlY3RvclszMF0gPSBCUkFfSU5TTihpbGxfdHJhcCwgMzApOworCWVpdF92ZWN0b3JbMzFdID0gQlJBX0lOU04oaWxsX3RyYXAsIDMxKTsKIAllaXRfdmVjdG9yWzMyXSA9IEJSQV9JTlNOKGVpX2hhbmRsZXIsIDMyKTsKIAllaXRfdmVjdG9yWzY0XSA9IEJSQV9JTlNOKHBpZV9oYW5kbGVyLCA2NCk7CiAjaWZkZWYgQ09ORklHX01NVQpAQCAtMjg2LDcgKzI4NSw4IEBACiAKIERPX0VSUk9SKCAxLCBTSUdUUkFQLCAiZGVidWcgdHJhcCIsIGRlYnVnX3RyYXApCiBET19FUlJPUl9JTkZPKDB4MjAsIFNJR0lMTCwgICJyZXNlcnZlZCBpbnN0cnVjdGlvbiAiLCByaWVfaGFuZGxlciwgSUxMX0lMTE9QQywgcmVncy0+YnBjKQotRE9fRVJST1JfSU5GTygweDEwMCwgU0lHSUxMLCAgInByaXZpbGVnZSBpbnN0cnVjdGlvbiIsIHBpZV9oYW5kbGVyLCBJTExfUFJWT1BDLCByZWdzLT5icGMpCitET19FUlJPUl9JTkZPKDB4MTAwLCBTSUdJTEwsICAicHJpdmlsZWdlZCBpbnN0cnVjdGlvbiIsIHBpZV9oYW5kbGVyLCBJTExfUFJWT1BDLCByZWdzLT5icGMpCitET19FUlJPUl9JTkZPKC0xLCBTSUdJTEwsICAiaWxsZWdhbCB0cmFwIiwgaWxsX3RyYXAsIElMTF9JTExUUlAsIHJlZ3MtPmJwYykKIAogZXh0ZXJuIGludCBoYW5kbGVfdW5hbGlnbmVkX2FjY2Vzcyh1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgcHRfcmVncyAqKTsKIApAQCAtMzI5LDQgKzMyOSwzIEBACiAJCXNldF9mcyhvbGRmcyk7CiAJfQogfQotCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvbGliL3VzZXJjb3B5LmMgYi9hcmNoL20zMnIvbGliL3VzZXJjb3B5LmMKaW5kZXggNmM2ODU1Zi4uY2UxNmJiZSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2xpYi91c2VyY29weS5jCisrKyBiL2FyY2gvbTMyci9saWIvdXNlcmNvcHkuYwpAQCAtMTMsNyArMTMsNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKIHVuc2lnbmVkIGxvbmcKLV9fZ2VuZXJpY19jb3B5X3RvX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKK19fZ2VuZXJpY19jb3B5X3RvX3VzZXIodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCiB7CiAJcHJlZmV0Y2goZnJvbSk7CiAJaWYgKGFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHRvLCBuKSkKQEAgLTIyLDcgKzIyLDcgQEAKIH0KIAogdW5zaWduZWQgbG9uZwotX19nZW5lcmljX2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCitfX2dlbmVyaWNfY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCiB7CiAJcHJlZmV0Y2h3KHRvKTsKIAlpZiAoYWNjZXNzX29rKFZFUklGWV9SRUFELCBmcm9tLCBuKSkKQEAgLTExMSw3ICsxMTEsNyBAQAogI2VuZGlmIC8qIENPTkZJR19JU0FfRFVBTF9JU1NVRSAqLwogCiBsb25nCi1fX3N0cm5jcHlfZnJvbV91c2VyKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBsb25nIGNvdW50KQorX19zdHJuY3B5X2Zyb21fdXNlcihjaGFyICpkc3QsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsIGxvbmcgY291bnQpCiB7CiAJbG9uZyByZXM7CiAJX19kb19zdHJuY3B5X2Zyb21fdXNlcihkc3QsIHNyYywgY291bnQsIHJlcyk7CkBAIC0xMTksNyArMTE5LDcgQEAKIH0KIAogbG9uZwotc3RybmNweV9mcm9tX3VzZXIoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIGxvbmcgY291bnQpCitzdHJuY3B5X2Zyb21fdXNlcihjaGFyICpkc3QsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsIGxvbmcgY291bnQpCiB7CiAJbG9uZyByZXMgPSAtRUZBVUxUOwogCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHNyYywgMSkpCkBAIC0yMjIsNyArMjIyLDcgQEAKICNlbmRpZiAvKiBub3QgQ09ORklHX0lTQV9EVUFMX0lTU1VFICovCiAKIHVuc2lnbmVkIGxvbmcKLWNsZWFyX3VzZXIodm9pZCAqdG8sIHVuc2lnbmVkIGxvbmcgbikKK2NsZWFyX3VzZXIodm9pZCBfX3VzZXIgKnRvLCB1bnNpZ25lZCBsb25nIG4pCiB7CiAJaWYgKGFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHRvLCBuKSkKIAkJX19kb19jbGVhcl91c2VyKHRvLCBuKTsKQEAgLTIzMCw3ICsyMzAsNyBAQAogfQogCiB1bnNpZ25lZCBsb25nCi1fX2NsZWFyX3VzZXIodm9pZCAqdG8sIHVuc2lnbmVkIGxvbmcgbikKK19fY2xlYXJfdXNlcih2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGxvbmcgbikKIHsKIAlfX2RvX2NsZWFyX3VzZXIodG8sIG4pOwogCXJldHVybiBuOwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAKICNpZmRlZiBDT05GSUdfSVNBX0RVQUxfSVNTVUUKIAotbG9uZyBzdHJubGVuX3VzZXIoY29uc3QgY2hhciAqcywgbG9uZyBuKQorbG9uZyBzdHJubGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnMsIGxvbmcgbikKIHsKIAl1bnNpZ25lZCBsb25nIG1hc2sgPSAtX19hZGRyX29rKHMpOwogCXVuc2lnbmVkIGxvbmcgcmVzOwpAQCAtMzEzLDcgKzMxMyw3IEBACiAKICNlbHNlIC8qIG5vdCBDT05GSUdfSVNBX0RVQUxfSVNTVUUgKi8KIAotbG9uZyBzdHJubGVuX3VzZXIoY29uc3QgY2hhciAqcywgbG9uZyBuKQorbG9uZyBzdHJubGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnMsIGxvbmcgbikKIHsKIAl1bnNpZ25lZCBsb25nIG1hc2sgPSAtX19hZGRyX29rKHMpOwogCXVuc2lnbmVkIGxvbmcgcmVzOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL0tjb25maWcgYi9hcmNoL21pcHMvS2NvbmZpZwppbmRleCAwZWI3MWFjLi40Y2Q3MjRjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvS2NvbmZpZworKysgYi9hcmNoL21pcHMvS2NvbmZpZwpAQCAtMTAwOSwxMCArMTAwOSw2IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCi1jb25maWcgSEFWRV9ERUNfTE9DSwotCWJvb2wKLQlkZWZhdWx0IHkKLQogIwogIyBTZWxlY3Qgc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXV0b21hdGljYWxseSBiYXNlZCBvbiB1c2VyIHNlbGVjdGlvbnMuCiAjCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGliL01ha2VmaWxlIGIvYXJjaC9taXBzL2xpYi9NYWtlZmlsZQppbmRleCAyMWI5MmI5Li4wMzczMDM0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbGliL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9saWIvTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIE1ha2VmaWxlIGZvciBNSVBTLXNwZWNpZmljIGxpYnJhcnkgZmlsZXMuLgogIwogCi1saWIteQkrPSBjc3VtX3BhcnRpYWxfY29weS5vIGRlY19hbmRfbG9jay5vIG1lbWNweS5vIHByb21saWIubyBcCitsaWIteQkrPSBjc3VtX3BhcnRpYWxfY29weS5vIG1lbWNweS5vIHByb21saWIubyBcCiAJICAgc3RybGVuX3VzZXIubyBzdHJuY3B5X3VzZXIubyBzdHJubGVuX3VzZXIubwogCiBvYmoteQkrPSBpb21hcC5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGliL2RlY19hbmRfbG9jay5jIGIvYXJjaC9taXBzL2xpYi9kZWNfYW5kX2xvY2suYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ4MmM4NC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvbGliL2RlY19hbmRfbG9jay5jCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIE1JUFMgdmVyc2lvbiBvZiBhdG9taWNfZGVjX2FuZF9sb2NrKCkgdXNpbmcgY21weGNoZwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLQotLyoKLSAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG5vdGlvbiBvZiAiZGVjcmVtZW50IGEKLSAqIHJlZmVyZW5jZSBjb3VudCwgYW5kIHJldHVybiBsb2NrZWQgaWYgaXQgZGVjcmVtZW50ZWQgdG8gemVybyIuCi0gKgotICogVGhpcyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgdXNlZCBvbiBhbnkgYXJjaGl0ZWN0dXJlIHRoYXQKLSAqIGhhcyBhIGNtcHhjaGcsIGFuZCB3aGVyZSBhdG9taWMtPnZhbHVlIGlzIGFuIGludCBob2xkaW5nCi0gKiB0aGUgdmFsdWUgb2YgdGhlIGF0b21pYyAoaS5lLiB0aGUgaGlnaCBiaXRzIGFyZW4ndCB1c2VkCi0gKiBmb3IgYSBsb2NrIG9yIGFueXRoaW5nIGxpa2UgdGhhdCkuCi0gKi8KLWludCBfYXRvbWljX2RlY19hbmRfbG9jayhhdG9taWNfdCAqYXRvbWljLCBzcGlubG9ja190ICpsb2NrKQotewotCWludCBjb3VudGVyOwotCWludCBuZXdjb3VudDsKLQotCWZvciAoOzspIHsKLQkJY291bnRlciA9IGF0b21pY19yZWFkKGF0b21pYyk7Ci0JCW5ld2NvdW50ID0gY291bnRlciAtIDE7Ci0JCWlmICghbmV3Y291bnQpCi0JCQlicmVhazsJCS8qIGRvIGl0IHRoZSBzbG93IHdheSAqLwotCi0JCW5ld2NvdW50ID0gY21weGNoZygmYXRvbWljLT5jb3VudGVyLCBjb3VudGVyLCBuZXdjb3VudCk7Ci0JCWlmIChuZXdjb3VudCA9PSBjb3VudGVyKQotCQkJcmV0dXJuIDA7Ci0JfQotCi0Jc3Bpbl9sb2NrKGxvY2spOwotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KGF0b21pYykpCi0JCXJldHVybiAxOwotCXNwaW5fdW5sb2NrKGxvY2spOwotCXJldHVybiAwOwotfQotCi1FWFBPUlRfU1lNQk9MKF9hdG9taWNfZGVjX2FuZF9sb2NrKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvZml4dXAtdGIwMjI2LmMgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLXRiMDIyNi5jCmluZGV4IDYxNTEzZDUuLmI1ZDQyYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvZml4dXAtdGIwMjI2LmMKKysrIGIvYXJjaC9taXBzL3BjaS9maXh1cC10YjAyMjYuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgZml4dXAtdGIwMjI2LmMsIFRoZSBUQU5CQUMgVEIwMjI2IHNwZWNpZmljIFBDSSBmaXh1cHMuCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwMi0yMDA0ICBZb2ljaGkgWXVhc2EgPHl1YXNhQGhoLmlpajR1Lm9yLmpwPgorICogIENvcHlyaWdodCAoQykgMjAwMi0yMDA1ICBZb2ljaGkgWXVhc2EgPHl1YXNhQGhoLmlpajR1Lm9yLmpwPgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCisjaW5jbHVkZSA8YXNtL3ZyNDF4eC9naXUuaD4KICNpbmNsdWRlIDxhc20vdnI0MXh4L3RiMDIyNi5oPgogCiBpbnQgX19pbml0IHBjaWJpb3NfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCkBAIC0yOSw0MiArMzAsNDIgQEAKIAlzd2l0Y2ggKHNsb3QpIHsKIAljYXNlIDEyOgogCQl2cjQxeHhfc2V0X2lycV90cmlnZ2VyKEdEODI1NTlfMV9QSU4sCi0JCQkJICAgICAgIFRSSUdHRVJfTEVWRUwsCi0JCQkJICAgICAgIFNJR05BTF9USFJPVUdIKTsKLQkJdnI0MXh4X3NldF9pcnFfbGV2ZWwoR0Q4MjU1OV8xX1BJTiwgTEVWRUxfTE9XKTsKKwkJCQkgICAgICAgSVJRX1RSSUdHRVJfTEVWRUwsCisJCQkJICAgICAgIElSUV9TSUdOQUxfVEhST1VHSCk7CisJCXZyNDF4eF9zZXRfaXJxX2xldmVsKEdEODI1NTlfMV9QSU4sIElSUV9MRVZFTF9MT1cpOwogCQlpcnEgPSBHRDgyNTU5XzFfSVJROwogCQlicmVhazsKIAljYXNlIDEzOgogCQl2cjQxeHhfc2V0X2lycV90cmlnZ2VyKEdEODI1NTlfMl9QSU4sCi0JCQkJICAgICAgIFRSSUdHRVJfTEVWRUwsCi0JCQkJICAgICAgIFNJR05BTF9USFJPVUdIKTsKLQkJdnI0MXh4X3NldF9pcnFfbGV2ZWwoR0Q4MjU1OV8yX1BJTiwgTEVWRUxfTE9XKTsKKwkJCQkgICAgICAgSVJRX1RSSUdHRVJfTEVWRUwsCisJCQkJICAgICAgIElSUV9TSUdOQUxfVEhST1VHSCk7CisJCXZyNDF4eF9zZXRfaXJxX2xldmVsKEdEODI1NTlfMl9QSU4sIElSUV9MRVZFTF9MT1cpOwogCQlpcnEgPSBHRDgyNTU5XzJfSVJROwogCQlicmVhazsKIAljYXNlIDE0OgogCQlzd2l0Y2ggKHBpbikgewogCQljYXNlIDE6CiAJCQl2cjQxeHhfc2V0X2lycV90cmlnZ2VyKFVQRDcyMDEwMF9JTlRBX1BJTiwKLQkJCQkJICAgICAgIFRSSUdHRVJfTEVWRUwsCi0JCQkJCSAgICAgICBTSUdOQUxfVEhST1VHSCk7CisJCQkJCSAgICAgICBJUlFfVFJJR0dFUl9MRVZFTCwKKwkJCQkJICAgICAgIElSUV9TSUdOQUxfVEhST1VHSCk7CiAJCQl2cjQxeHhfc2V0X2lycV9sZXZlbChVUEQ3MjAxMDBfSU5UQV9QSU4sCi0JCQkJCSAgICAgTEVWRUxfTE9XKTsKKwkJCQkJICAgICBJUlFfTEVWRUxfTE9XKTsKIAkJCWlycSA9IFVQRDcyMDEwMF9JTlRBX0lSUTsKIAkJCWJyZWFrOwogCQljYXNlIDI6CiAJCQl2cjQxeHhfc2V0X2lycV90cmlnZ2VyKFVQRDcyMDEwMF9JTlRCX1BJTiwKLQkJCQkJICAgICAgIFRSSUdHRVJfTEVWRUwsCi0JCQkJCSAgICAgICBTSUdOQUxfVEhST1VHSCk7CisJCQkJCSAgICAgICBJUlFfVFJJR0dFUl9MRVZFTCwKKwkJCQkJICAgICAgIElSUV9TSUdOQUxfVEhST1VHSCk7CiAJCQl2cjQxeHhfc2V0X2lycV9sZXZlbChVUEQ3MjAxMDBfSU5UQl9QSU4sCi0JCQkJCSAgICAgTEVWRUxfTE9XKTsKKwkJCQkJICAgICBJUlFfTEVWRUxfTE9XKTsKIAkJCWlycSA9IFVQRDcyMDEwMF9JTlRCX0lSUTsKIAkJCWJyZWFrOwogCQljYXNlIDM6CiAJCQl2cjQxeHhfc2V0X2lycV90cmlnZ2VyKFVQRDcyMDEwMF9JTlRDX1BJTiwKLQkJCQkJICAgICAgIFRSSUdHRVJfTEVWRUwsCi0JCQkJCSAgICAgICBTSUdOQUxfVEhST1VHSCk7CisJCQkJCSAgICAgICBJUlFfVFJJR0dFUl9MRVZFTCwKKwkJCQkJICAgICAgIElSUV9TSUdOQUxfVEhST1VHSCk7CiAJCQl2cjQxeHhfc2V0X2lycV9sZXZlbChVUEQ3MjAxMDBfSU5UQ19QSU4sCi0JCQkJCSAgICAgTEVWRUxfTE9XKTsKKwkJCQkJICAgICBJUlFfTEVWRUxfTE9XKTsKIAkJCWlycSA9IFVQRDcyMDEwMF9JTlRDX0lSUTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvS2NvbmZpZyBiL2FyY2gvcHBjL0tjb25maWcKaW5kZXggMzQ3ZWEyOC4uNzc2OTQxYyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvS2NvbmZpZworKysgYi9hcmNoL3BwYy9LY29uZmlnCkBAIC0yNiwxMCArMjYsNiBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAotY29uZmlnIEhBVkVfREVDX0xPQ0sKLQlib29sCi0JZGVmYXVsdCB5Ci0KIGNvbmZpZyBQUEMKIAlib29sCiAJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L2xkLnNjcmlwdCBiL2FyY2gvcHBjL2Jvb3QvbGQuc2NyaXB0CmluZGV4IDkzNjIxOTMuLmQ0ZGQ4ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3QvbGQuc2NyaXB0CisrKyBiL2FyY2gvcHBjL2Jvb3QvbGQuc2NyaXB0CkBAIC0xLDQgKzEsNCBAQAotT1VUUFVUX0FSQ0gocG93ZXJwYykKK09VVFBVVF9BUkNIKHBvd2VycGM6Y29tbW9uKQogU0VDVElPTlMKIHsKICAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3BwYy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggMWZiOTJmMS4uYjE0NTdhOCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTUsOSArMTUsOCBAQAogb2JqLXkJCQkJOj0gZW50cnkubyB0cmFwcy5vIGlycS5vIGlkbGUubyB0aW1lLm8gbWlzYy5vIFwKIAkJCQkJcHJvY2Vzcy5vIHNpZ25hbC5vIHB0cmFjZS5vIGFsaWduLm8gXAogCQkJCQlzZW1hcGhvcmUubyBzeXNjYWxscy5vIHNldHVwLm8gXAotCQkJCQljcHV0YWJsZS5vIHBwY19odGFiLm8KKwkJCQkJY3B1dGFibGUubyBwcGNfaHRhYi5vIHBlcmZtb24ubwogb2JqLSQoQ09ORklHXzZ4eCkJCSs9IGwyY3IubyBjcHVfc2V0dXBfNnh4Lm8KLW9iai0kKENPTkZJR19FNTAwKQkJKz0gcGVyZm1vbi5vCiBvYmotJChDT05GSUdfU09GVFdBUkVfU1VTUEVORCkJKz0gc3dzdXNwLm8KIG9iai0kKENPTkZJR19QT1dFUjQpCQkrPSBjcHVfc2V0dXBfcG93ZXI0Lm8KIG9iai0kKENPTkZJR19NT0RVTEVTKQkJKz0gbW9kdWxlLm8gcHBjX2tzeW1zLm8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9jcHV0YWJsZS5jIGIvYXJjaC9wcGMva2VybmVsL2NwdXRhYmxlLmMKaW5kZXggNTQ2ZTFlYS4uNmI3NmNmNSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL2NwdXRhYmxlLmMKKysrIGIvYXJjaC9wcGMva2VybmVsL2NwdXRhYmxlLmMKQEAgLTkxLDcgKzkxLDcgQEAKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSX0NPTU1PTiB8IENQVV9GVFJfNjAxIHwKIAkJCUNQVV9GVFJfSFBURV9UQUJMRSwKIAkJLmNwdV91c2VyX2ZlYXR1cmVzIAk9IENPTU1PTl9QUEMgfCBQUENfRkVBVFVSRV82MDFfSU5TVFIgfAotCQkJUFBDX0ZFQVRVUkVfVU5JRklFRF9DQUNIRSwKKwkJCVBQQ19GRUFUVVJFX1VOSUZJRURfQ0FDSEUgfCBQUENfRkVBVFVSRV9OT19UQiwKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV82MDEKQEAgLTc0NSw3ICs3NDUsOCBAQAogCQkuY3B1X25hbWUJCT0gIjQwM0dDWCIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUl9TUExJVF9JRF9DQUNIRSB8CiAJCQlDUFVfRlRSX1VTRV9UQiwKLQkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gUFBDX0ZFQVRVUkVfMzIgfCBQUENfRkVBVFVSRV9IQVNfTU1VLAorCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBQUENfRkVBVFVSRV8zMiB8CisJCSAJUFBDX0ZFQVRVUkVfSEFTX01NVSB8IFBQQ19GRUFUVVJFX05PX1RCLAogCQkuaWNhY2hlX2JzaXplCQk9IDE2LAogCQkuZGNhY2hlX2JzaXplCQk9IDE2LAogCX0sCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvZG1hLW1hcHBpbmcuYyBiL2FyY2gvcHBjL2tlcm5lbC9kbWEtbWFwcGluZy5jCmluZGV4IGI1NjZkOTguLjhlZGVlODAgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9kbWEtbWFwcGluZy5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9kbWEtbWFwcGluZy5jCkBAIC00MDEsMTAgKzQwMSwxMCBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fZG1hX3N5bmNfcGFnZV9oaWdobWVtKHN0cnVjdCBwYWdlICpwYWdlLAogCQl1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCiB7Ci0Jc2l6ZV90IHNlZ19zaXplID0gbWluKChzaXplX3QpUEFHRV9TSVpFLCBzaXplKSAtIG9mZnNldDsKKwlzaXplX3Qgc2VnX3NpemUgPSBtaW4oKHNpemVfdCkoUEFHRV9TSVpFIC0gb2Zmc2V0KSwgc2l6ZSk7CiAJc2l6ZV90IGN1cl9zaXplID0gc2VnX3NpemU7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgc3RhcnQsIHNlZ19vZmZzZXQgPSBvZmZzZXQ7Ci0JaW50IG5yX3NlZ3MgPSBQQUdFX0FMSUdOKHNpemUgKyAoUEFHRV9TSVpFIC0gb2Zmc2V0KSkvUEFHRV9TSVpFOworCWludCBucl9zZWdzID0gMSArICgoc2l6ZSAtIHNlZ19zaXplKSArIFBBR0VfU0laRSAtIDEpL1BBR0VfU0laRTsKIAlpbnQgc2VnX25yID0gMDsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9wZXJmbW9uLmMgYi9hcmNoL3BwYy9rZXJuZWwvcGVyZm1vbi5jCmluZGV4IGZhMWRhZDkuLjIyZGY5YTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9wZXJmbW9uLmMKKysrIGIvYXJjaC9wcGMva2VybmVsL3BlcmZtb24uYwpAQCAtNDUsOSArNDUsOCBAQAogCW10cG1yKFBNUk5fUE1HQzAsIHBtZ2MwKTsKIH0KIAotI2Vsc2UKKyNlbGlmIGRlZmluZWQoQ09ORklHXzZ4eCkKIC8qIEVuc3VyZSBleGNlcHRpb25zIGFyZSBkaXNhYmxlZCAqLwotCiBzdGF0aWMgdm9pZCBkdW1teV9wZXJmKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGludCBtbWNyMCA9IG1mc3ByKFNQUk5fTU1DUjApOwpAQCAtNTUsNiArNTQsMTAgQEAKIAltbWNyMCAmPSB+TU1DUjBfUE1YRTsKIAltdHNwcihTUFJOX01NQ1IwLCBtbWNyMCk7CiB9CisjZWxzZQorc3RhdGljIHZvaWQgZHVtbXlfcGVyZihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKK30KICNlbmRpZgogCiB2b2lkICgqcGVyZl9pcnEpKHN0cnVjdCBwdF9yZWdzICopID0gZHVtbXlfcGVyZjsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2xpYi9NYWtlZmlsZSBiL2FyY2gvcHBjL2xpYi9NYWtlZmlsZQppbmRleCBmMWUxZmI0Li41MDM1OGU0IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC9wcGMvbGliL01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogIyBNYWtlZmlsZSBmb3IgcHBjLXNwZWNpZmljIGxpYnJhcnkgZmlsZXMuLgogIwogCi1vYmoteQkJCTo9IGNoZWNrc3VtLm8gc3RyaW5nLm8gc3RyY2FzZS5vIGRlY19hbmRfbG9jay5vIGRpdjY0Lm8KK29iai15CQkJOj0gY2hlY2tzdW0ubyBzdHJpbmcubyBzdHJjYXNlLm8gZGl2NjQubwogCiBvYmotJChDT05GSUdfOHh4KQkrPSByaGVhcC5vCiBvYmotJChDT05GSUdfQ1BNMikJKz0gcmhlYXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvbGliL2RlY19hbmRfbG9jay5jIGIvYXJjaC9wcGMvbGliL2RlY19hbmRfbG9jay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMThmMGQ5Li4wMDAwMDAwCi0tLSBhL2FyY2gvcHBjL2xpYi9kZWNfYW5kX2xvY2suYworKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0KLS8qCi0gKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBub3Rpb24gb2YgImRlY3JlbWVudCBhCi0gKiByZWZlcmVuY2UgY291bnQsIGFuZCByZXR1cm4gbG9ja2VkIGlmIGl0IGRlY3JlbWVudGVkIHRvIHplcm8iLgotICoKLSAqIFRoaXMgaW1wbGVtZW50YXRpb24gY2FuIGJlIHVzZWQgb24gYW55IGFyY2hpdGVjdHVyZSB0aGF0Ci0gKiBoYXMgYSBjbXB4Y2hnLCBhbmQgd2hlcmUgYXRvbWljLT52YWx1ZSBpcyBhbiBpbnQgaG9sZGluZwotICogdGhlIHZhbHVlIG9mIHRoZSBhdG9taWMgKGkuZS4gdGhlIGhpZ2ggYml0cyBhcmVuJ3QgdXNlZAotICogZm9yIGEgbG9jayBvciBhbnl0aGluZyBsaWtlIHRoYXQpLgotICovCi1pbnQgX2F0b21pY19kZWNfYW5kX2xvY2soYXRvbWljX3QgKmF0b21pYywgc3BpbmxvY2tfdCAqbG9jaykKLXsKLQlpbnQgY291bnRlcjsKLQlpbnQgbmV3Y291bnQ7Ci0KLQlmb3IgKDs7KSB7Ci0JCWNvdW50ZXIgPSBhdG9taWNfcmVhZChhdG9taWMpOwotCQluZXdjb3VudCA9IGNvdW50ZXIgLSAxOwotCQlpZiAoIW5ld2NvdW50KQotCQkJYnJlYWs7CQkvKiBkbyBpdCB0aGUgc2xvdyB3YXkgKi8KLQotCQluZXdjb3VudCA9IGNtcHhjaGcoJmF0b21pYy0+Y291bnRlciwgY291bnRlciwgbmV3Y291bnQpOwotCQlpZiAobmV3Y291bnQgPT0gY291bnRlcikKLQkJCXJldHVybiAwOwotCX0KLQotCXNwaW5fbG9jayhsb2NrKTsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdChhdG9taWMpKQotCQlyZXR1cm4gMTsKLQlzcGluX3VubG9jayhsb2NrKTsKLQlyZXR1cm4gMDsKLX0KLQotRVhQT1JUX1NZTUJPTChfYXRvbWljX2RlY19hbmRfbG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2JhbWJvby5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9iYW1ib28uYwppbmRleCBhYzM5MWQ0Li43OGE0MDNiIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2JhbWJvby5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvYmFtYm9vLmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcm9vdF9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvZWJvbnkuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvZWJvbnkuYwppbmRleCBkNmIyYjE5Li4yN2I3NzhhIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2Vib255LmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9lYm9ueS5jCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pZGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Jvb3RfZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2x1YW4uYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvbHVhbi5jCmluZGV4IGEzOGU2ZjkuLjE2ZDk1M2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvbHVhbi5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvbHVhbi5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pZGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Jvb3RfZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L29jb3RlYS5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9vY290ZWEuYwppbmRleCA4MDAyOGRmLi41MDY5NDljIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L29jb3RlYS5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvb2NvdGVhLmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcm9vdF9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfc3lzLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X3N5cy5jCmluZGV4IGIzOGE4NTEuLjc5YjNmNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfc3lzLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9zeXMuYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODU0MF9hZHMuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1NDBfYWRzLmMKaW5kZXggZjc2MWZkZi4uN2RjOGE2OCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODU0MF9hZHMuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTQwX2Fkcy5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Jvb3RfZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTYwX2Fkcy5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODU2MF9hZHMuYwppbmRleCBmMjc0OGM4Li44ODQxZmQ3IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTYwX2Fkcy5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1NjBfYWRzLmMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcm9vdF9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzX2NvbW1vbi5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHNfY29tbW9uLmMKaW5kZXggMThlOTUyZC4uYmQzYWMwMSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHNfY29tbW9uLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHNfY29tbW9uLmMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Nkc19jb21tb24uYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfY2RzX2NvbW1vbi5jCmluZGV4IDYyNjdiMjkuLjlmOTAzOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfY2RzX2NvbW1vbi5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfY2RzX2NvbW1vbi5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc2JjODU2MC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc2JjODU2MC5jCmluZGV4IDE2NWRmOTQuLmM3Njc2MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NjAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NTYwLmMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcm9vdF9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1eHguYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1eHguYwppbmRleCA0ZjZkMWRkLi5jMDJmMTEwIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NXh4LmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc2JjODV4eC5jCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5jCmluZGV4IGM5OWIzNjUuLjIwOTQwZjQwIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9zdHhfZ3AzLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5jCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvcm9vdF9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL2NoZXN0bnV0LmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvY2hlc3RudXQuYwppbmRleCA3Nzg2ODE4Li5kZjZmZjk4IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvY2hlc3RudXQuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvY2hlc3RudXQuYwpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPGFzbS9rZ2RiLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvY2hycF9zZXR1cC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2NocnBfc2V0dXAuYwppbmRleCA1N2YyOWFiLi42NjM0NmYwIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvY2hycF9zZXR1cC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9jaHJwX3NldHVwLmMKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Jvb3RfZGV2Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvZ2VtaW5pX3NldHVwLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvZ2VtaW5pX3NldHVwLmMKaW5kZXggZTM5MWU1Mi4uM2E1ZmY5ZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL2dlbWluaV9zZXR1cC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9nZW1pbmlfc2V0dXAuYwpAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdHJkLmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcm9vdF9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9iY2QuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9tdm1lNTEwMC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL212bWU1MTAwLmMKaW5kZXggYjI5MmI0NC4uY2UyY2U4OCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL212bWU1MTAwLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL212bWU1MTAwLmMKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pZGUuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BtYWNfY3B1ZnJlcS5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3BtYWNfY3B1ZnJlcS5jCmluZGV4IGMwNjA1MjQuLmQ0YmM1ZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9wbWFjX2NwdWZyZXEuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcG1hY19jcHVmcmVxLmMKQEAgLTY5NSw2ICs2OTUsMTMgQEAKIAkJc2V0X3NwZWVkX3Byb2MgPSBwbXVfc2V0X2NwdV9zcGVlZDsKIAkJaXNfcG11X2Jhc2VkID0gMTsKIAl9CisJLyogRWxzZSBjaGVjayBmb3IgVGlQYiA1NTAgKi8KKwllbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsMyIpICYmIGN1cl9mcmVxID09IDU1MDAwMCkgeworCQloaV9mcmVxID0gY3VyX2ZyZXE7CisJCWxvd19mcmVxID0gNTAwMDAwOworCQlzZXRfc3BlZWRfcHJvYyA9IHBtdV9zZXRfY3B1X3NwZWVkOworCQlpc19wbXVfYmFzZWQgPSAxOworCX0KIAkvKiBFbHNlIGNoZWNrIGZvciBUaVBiIDQwMCAmIDUwMCAqLwogCWVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywyIikpIHsKIAkJLyogV2Ugb25seSBrbm93IGFib3V0IHRoZSA0MDAgTUh6IGFuZCB0aGUgNTAwTWh6IG1vZGVsCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcG1hY19mZWF0dXJlLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcG1hY19mZWF0dXJlLmMKaW5kZXggODY3MzM2YS4uZGQ2ZDQ1YSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BtYWNfZmVhdHVyZS5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wbWFjX2ZlYXR1cmUuYwpAQCAtMjMzNyw2ICsyMzM3LDEwIEBACiAJCVBNQUNfVFlQRV9VTktOT1dOX0lOVFJFUElELAlpbnRyZXBpZF9mZWF0dXJlcywKIAkJUE1BQ19NQl9NQVlfU0xFRVAgfCBQTUFDX01CX0hBU19GV19QT1dFUiB8IFBNQUNfTUJfTU9CSUxFLAogCX0sCisJewkiUG93ZXJCb29rNiw3IiwJCQkiaUJvb2sgRzQiLAorCQlQTUFDX1RZUEVfVU5LTk9XTl9JTlRSRVBJRCwJaW50cmVwaWRfZmVhdHVyZXMsCisJCVBNQUNfTUJfTUFZX1NMRUVQIHwgUE1BQ19NQl9IQVNfRldfUE9XRVIgfCBQTUFDX01CX01PQklMRSwKKwl9LAogCXsJIlBvd2VyQm9vazYsOCIsCQkJIlBvd2VyQm9vayBHNCAxMlwiIiwKIAkJUE1BQ19UWVBFX1VOS05PV05fSU5UUkVQSUQsCWludHJlcGlkX2ZlYXR1cmVzLAogCQlQTUFDX01CX01BWV9TTEVFUCB8IFBNQUNfTUJfSEFTX0ZXX1BPV0VSIHwgUE1BQ19NQl9NT0JJTEUsCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcG1hY19zZXR1cC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3BtYWNfc2V0dXAuYwppbmRleCBiMzkyYjlhLi5kNjM1NmY0IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcG1hY19zZXR1cC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wbWFjX3NldHVwLmMKQEAgLTQ4LDcgKzQ4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9hZGIuaD4KICNpbmNsdWRlIDxsaW51eC9jdWRhLmg+CiAjaW5jbHVkZSA8bGludXgvcG11Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgpAQCAtNzE5LDcgKzcxOCw4IEBACiAJaWYgKG5wKSB7CiAJCWZvciAobnAgPSBucC0+Y2hpbGQ7IG5wICE9IE5VTEw7IG5wID0gbnAtPnNpYmxpbmcpCiAJCQlpZiAoc3RybmNtcChucC0+bmFtZSwgImkyYyIsIDMpID09IDApIHsKLQkJCQlvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKG5wLCAidW5pLW4taTJjIik7CisJCQkJb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShucCwgInVuaS1uLWkyYyIsCisJCQkJCQkJICBOVUxMKTsKIAkJCQlicmVhazsKIAkJCX0KIAl9CkBAIC03MjcsMTcgKzcyNywxOCBAQAogCWlmIChucCkgewogCQlmb3IgKG5wID0gbnAtPmNoaWxkOyBucCAhPSBOVUxMOyBucCA9IG5wLT5zaWJsaW5nKQogCQkJaWYgKHN0cm5jbXAobnAtPm5hbWUsICJpMmMiLCAzKSA9PSAwKSB7Ci0JCQkJb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShucCwgInUzLWkyYyIpOworCQkJCW9mX3BsYXRmb3JtX2RldmljZV9jcmVhdGUobnAsICJ1My1pMmMiLAorCQkJCQkJCSAgTlVMTCk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJfQogCiAJbnAgPSBmaW5kX2RldmljZXMoInZhbGt5cmllIik7CiAJaWYgKG5wKQotCQlvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKG5wLCAidmFsa3lyaWUiKTsKKwkJb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShucCwgInZhbGt5cmllIiwgTlVMTCk7CiAJbnAgPSBmaW5kX2RldmljZXMoInBsYXRpbnVtIik7CiAJaWYgKG5wKQotCQlvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKG5wLCAicGxhdGludW0iKTsKKwkJb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShucCwgInBsYXRpbnVtIiwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9wbWFjX3RpbWUuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wbWFjX3RpbWUuYwppbmRleCA3NzhjZTRmLi5lZmI4MTlmIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcG1hY190aW1lLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3BtYWNfdGltZS5jCkBAIC0xOTUsNyArMTk1LDcgQEAKIAkJOwogCWRlbmQgPSBnZXRfZGVjKCk7CiAKLQl0Yl90aWNrc19wZXJfamlmZnkgPSAoZHN0YXJ0IC0gZGVuZCkgLyAoNiAqIChIWi8xMDApKTsKKwl0Yl90aWNrc19wZXJfamlmZnkgPSAoZHN0YXJ0IC0gZGVuZCkgLyAoKDYgKiBIWikvMTAwKTsKIAl0Yl90b191cyA9IG11bGh3dV9zY2FsZV9mYWN0b3IoZHN0YXJ0IC0gZGVuZCwgNjAwMDApOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAidmlhX2NhbGlicmF0ZV9kZWNyOiB0aWNrcyBwZXIgamlmZnkgPSAldSAoJXUgdGlja3MpXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3Bvd2VycG1jMjUwLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcG93ZXJwbWMyNTAuYwppbmRleCAwYWJlMTUxLi5lNmI1MjBlIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcG93ZXJwbWMyNTAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcG93ZXJwbWMyNTAuYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BwbHVzLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcHBsdXMuYwppbmRleCA2NTcwNWM5Li5lNzBhYWUyIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcHBsdXMuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcHBsdXMuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pZGUuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Jvb3RfZGV2Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJwbWM3NTAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcnBtYzc1MC5jCmluZGV4IDI0YWUxY2EuLjBiYjE0YTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcnBtYzc1MC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcnBtYzc1MC5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdHJkLmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pZGUuaD4KICNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BycG1jODAwLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJwbWM4MDAuYwppbmRleCA4YjA5ZmE2Li5kZTdiYWVmIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJwbWM4MDAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJwbWM4MDAuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaWRlLmg+CiAjaW5jbHVkZSA8bGludXgvcm9vdF9kZXYuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9yYWRzdG9uZV9wcGM3ZC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3JhZHN0b25lX3BwYzdkLmMKaW5kZXggYzMwNjA3YS4uMDM3NmM4YyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3JhZHN0b25lX3BwYzdkLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3JhZHN0b25lX3BwYzdkLmMKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pZGUuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Jvb3RfZGV2Lmg+CkBAIC01OSw3ICs1OCw2IEBACiAjaW5jbHVkZSA8YXNtL21wYzEweC5oPgogI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CiAjaW5jbHVkZSA8YXNtL212NjR4NjAuaD4KLSNpbmNsdWRlIDxhc20vaTgyNTkuaD4KIAogI2luY2x1ZGUgInJhZHN0b25lX3BwYzdkLmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9zYW5kcG9pbnQuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9zYW5kcG9pbnQuYwppbmRleCAyMWUzMTM0Li41MjMyMjgzIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvc2FuZHBvaW50LmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3NhbmRwb2ludC5jCkBAIC03NCw3ICs3NCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdHJkLmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaWRlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL01ha2VmaWxlIGIvYXJjaC9wcGMvc3lzbGliL01ha2VmaWxlCmluZGV4IDhiOWIyMjYuLmI4ZDA4ZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL3BwYy9zeXNsaWIvTWFrZWZpbGUKQEAgLTM0LDcgKzM0LDggQEAKIG9iai0kKENPTkZJR19QQ0kpCQkrPSBpbmRpcmVjdF9wY2kubyBwY2lfYXV0by5vIHBwYzQwNV9wY2kubwogZW5kaWYKIGVuZGlmCi1vYmotJChDT05GSUdfOHh4KQkJKz0gbTh4eF9zZXR1cC5vIHBwYzh4eF9waWMubyAkKHdkdC1tcGM4eHgteSkKK29iai0kKENPTkZJR184eHgpCQkrPSBtOHh4X3NldHVwLm8gcHBjOHh4X3BpYy5vICQod2R0LW1wYzh4eC15KSBcCisJCQkJICAgcHBjX3N5cy5vIG1wYzh4eF9kZXZpY2VzLm8gbXBjOHh4X3N5cy5vCiBpZmVxICgkKENPTkZJR184eHgpLHkpCiBvYmotJChDT05GSUdfUENJKQkJKz0gcXNwYW5fcGNpLm8gaTgyNTkubwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9tcGM4eHhfZGV2aWNlcy5jIGIvYXJjaC9wcGMvc3lzbGliL21wYzh4eF9kZXZpY2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI1ZjBlNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM4eHhfZGV2aWNlcy5jCkBAIC0wLDAgKzEsMjI0IEBACisvKgorICogYXJjaC9wcGMvc3lzbGliL21wYzh4eF9kZXZpY2VzLmMKKyAqCisgKiBNUEM4eHggRGV2aWNlIGRlc2NyaXB0aW9ucworICoKKyAqIE1haW50YWluZXI6IEt1bWFyIEdhbGEgPGt1bWFyLmdhbGFAZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIGJ5IFZpdGFseSBCb3JkdWc8dmJvcmR1Z0BydS5tdmlzdGEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2luY2x1ZGUgPGFzbS9jb21tcHJvYy5oPgorI2luY2x1ZGUgPGFzbS9tcGM4eHguaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3BwY19zeXMuaD4KKworLyogV2UgdXNlIG9mZnNldHMgZm9yIElPUkVTT1VSQ0VfTUVNIHRvIGRvIG5vdCBzZXQgZGVwZW5kZW5jZXMgYXQgY29tcGlsZSB0aW1lLgorICogVGhleSB3aWxsIGdldCBmaXhlZCB1cCBieSBtYWNoX21wYzh4eF9maXh1cAorICovCisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHBjX3N5c19wbGF0Zm9ybV9kZXZpY2VzW10gPSB7CisJW01QQzh4eF9DUE1fRkVDMV0gPQl7CisJCS5uYW1lID0gImZzbC1jcG0tZmVjIiwKKwkJLmlkCT0gMSwKKwkJLm51bV9yZXNvdXJjZXMgPSAyLAorCQkucmVzb3VyY2UgPSAoc3RydWN0IHJlc291cmNlW10pCXsKKwkJCXsKKwkJCQkubmFtZSAJPSAicmVncyIsCisJCQkJLnN0YXJ0CT0gMHhlMDAsCisJCQkJLmVuZAk9IDB4ZTg4LAorCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkJfSwKKwkJCXsKKwkJCQkubmFtZQk9ICJpbnRlcnJ1cHQiLAorCQkJCS5zdGFydAk9IE1QQzh4eF9JTlRfRkVDMSwKKwkJCQkuZW5kCT0gTVBDOHh4X0lOVF9GRUMxLAorCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQkJfSwKKwkJfSwKKwl9LAorCVtNUEM4eHhfQ1BNX0ZFQzJdID0JeworCQkubmFtZSA9ICJmc2wtY3BtLWZlYyIsCisJCS5pZAk9IDIsCisJCS5udW1fcmVzb3VyY2VzID0gMiwKKwkJLnJlc291cmNlID0gKHN0cnVjdCByZXNvdXJjZVtdKQl7CisJCQl7CisJCQkJLm5hbWUJPSAicmVncyIsCisJCQkJLnN0YXJ0CT0gMHgxZTAwLAorCQkJCS5lbmQJPSAweDFlODgsCisJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCQl9LAorCQkJeworCQkJCS5uYW1lCT0gImludGVycnVwdCIsCisJCQkJLnN0YXJ0CT0gTVBDOHh4X0lOVF9GRUMyLAorCQkJCS5lbmQJPSBNUEM4eHhfSU5UX0ZFQzIsCisJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJCQl9LAorCQl9LAorCX0sCisJW01QQzh4eF9DUE1fU0NDMV0gPSB7CisJCS5uYW1lID0gImZzbC1jcG0tc2NjIiwKKwkJLmlkCT0gMSwKKwkJLm51bV9yZXNvdXJjZXMgPSAzLAorCQkucmVzb3VyY2UgPSAoc3RydWN0IHJlc291cmNlW10pIHsKKwkJCXsKKwkJCQkubmFtZQk9ICJyZWdzIiwKKwkJCQkuc3RhcnQJPSAweGEwMCwKKwkJCQkuZW5kCT0gMHhhMTgsCisJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCQl9LAorCQkJeworCQkJCS5uYW1lIAk9ICJwcmFtIiwKKwkJCQkuc3RhcnQgCT0gMHgzYzAwLAorCQkJCS5lbmQgCT0gMHgzYzgwLAorCQkJCS5mbGFncyAJPSBJT1JFU09VUkNFX01FTSwKKwkJCX0sCisJCQl7CisJCQkJLm5hbWUJPSAiaW50ZXJydXB0IiwKKwkJCQkuc3RhcnQJPSBNUEM4eHhfSU5UX1NDQzEsCisJCQkJLmVuZAk9IE1QQzh4eF9JTlRfU0NDMSwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJCX0sCisJCX0sCisJfSwKKwlbTVBDOHh4X0NQTV9TQ0MyXSA9IHsKKwkJLm5hbWUgPSAiZnNsLWNwbS1zY2MiLAorCQkuaWQJPSAyLAorCQkubnVtX3Jlc291cmNlcwk9IDMsCisJCS5yZXNvdXJjZSA9IChzdHJ1Y3QgcmVzb3VyY2VbXSkgeworCQkJeworCQkJCS5uYW1lCT0gInJlZ3MiLAorCQkJCS5zdGFydAk9IDB4YTIwLAorCQkJCS5lbmQJPSAweGEzOCwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJCX0sCisJCQl7CisJCQkJLm5hbWUgCT0gInByYW0iLAorCQkJCS5zdGFydCAJPSAweDNkMDAsCisJCQkJLmVuZCAJPSAweDNkODAsCisJCQkJLmZsYWdzIAk9IElPUkVTT1VSQ0VfTUVNLAorCQkJfSwKKworCQkJeworCQkJCS5uYW1lCT0gImludGVycnVwdCIsCisJCQkJLnN0YXJ0CT0gTVBDOHh4X0lOVF9TQ0MyLAorCQkJCS5lbmQJPSBNUEM4eHhfSU5UX1NDQzIsCisJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJCQl9LAorCQl9LAorCX0sCisJW01QQzh4eF9DUE1fU0NDM10gPSB7CisJCS5uYW1lID0gImZzbC1jcG0tc2NjIiwKKwkJLmlkCT0gMywKKwkJLm51bV9yZXNvdXJjZXMJPSAzLAorCQkucmVzb3VyY2UgPSAoc3RydWN0IHJlc291cmNlW10pIHsKKwkJCXsKKwkJCQkubmFtZQk9ICJyZWdzIiwKKwkJCQkuc3RhcnQJPSAweGE0MCwKKwkJCQkuZW5kCT0gMHhhNTgsCisJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCQl9LAorCQkJeworCQkJCS5uYW1lIAk9ICJwcmFtIiwKKwkJCQkuc3RhcnQgCT0gMHgzZTAwLAorCQkJCS5lbmQgCT0gMHgzZTgwLAorCQkJCS5mbGFncyAJPSBJT1JFU09VUkNFX01FTSwKKwkJCX0sCisKKwkJCXsKKwkJCQkubmFtZQk9ICJpbnRlcnJ1cHQiLAorCQkJCS5zdGFydAk9IE1QQzh4eF9JTlRfU0NDMywKKwkJCQkuZW5kCT0gTVBDOHh4X0lOVF9TQ0MzLAorCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQkJfSwKKwkJfSwKKwl9LAorCVtNUEM4eHhfQ1BNX1NDQzRdID0geworCQkubmFtZSA9ICJmc2wtY3BtLXNjYyIsCisJCS5pZAk9IDQsCisJCS5udW1fcmVzb3VyY2VzCT0gMywKKwkJLnJlc291cmNlID0gKHN0cnVjdCByZXNvdXJjZVtdKSB7CisJCQl7CisJCQkJLm5hbWUJPSAicmVncyIsCisJCQkJLnN0YXJ0CT0gMHhhNjAsCisJCQkJLmVuZAk9IDB4YTc4LAorCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkJfSwKKwkJCXsKKwkJCQkubmFtZSAJPSAicHJhbSIsCisJCQkJLnN0YXJ0IAk9IDB4M2YwMCwKKwkJCQkuZW5kIAk9IDB4M2Y4MCwKKwkJCQkuZmxhZ3MgCT0gSU9SRVNPVVJDRV9NRU0sCisJCQl9LAorCisJCQl7CisJCQkJLm5hbWUJPSAiaW50ZXJydXB0IiwKKwkJCQkuc3RhcnQJPSBNUEM4eHhfSU5UX1NDQzQsCisJCQkJLmVuZAk9IE1QQzh4eF9JTlRfU0NDNCwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJCX0sCisJCX0sCisJfSwKKwlbTVBDOHh4X0NQTV9TTUMxXSA9IHsKKwkJLm5hbWUgPSAiZnNsLWNwbS1zbWMiLAorCQkuaWQJPSAxLAorCQkubnVtX3Jlc291cmNlcwk9IDIsCisJCS5yZXNvdXJjZSA9IChzdHJ1Y3QgcmVzb3VyY2VbXSkgeworCQkJeworCQkJCS5uYW1lCT0gInJlZ3MiLAorCQkJCS5zdGFydAk9IDB4YTgyLAorCQkJCS5lbmQJPSAweGE5MSwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJCX0sCisJCQl7CisJCQkJLm5hbWUJPSAiaW50ZXJydXB0IiwKKwkJCQkuc3RhcnQJPSBNUEM4eHhfSU5UX1NNQzEsCisJCQkJLmVuZAk9IE1QQzh4eF9JTlRfU01DMSwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJCX0sCisJCX0sCisJfSwKKwlbTVBDOHh4X0NQTV9TTUMyXSA9IHsKKwkJLm5hbWUgPSAiZnNsLWNwbS1zbWMiLAorCQkuaWQJPSAyLAorCQkubnVtX3Jlc291cmNlcwk9IDIsCisJCS5yZXNvdXJjZSA9IChzdHJ1Y3QgcmVzb3VyY2VbXSkgeworCQkJeworCQkJCS5uYW1lCT0gInJlZ3MiLAorCQkJCS5zdGFydAk9IDB4YTkyLAorCQkJCS5lbmQJPSAweGFhMSwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJCX0sCisJCQl7CisJCQkJLm5hbWUJPSAiaW50ZXJydXB0IiwKKwkJCQkuc3RhcnQJPSBNUEM4eHhfSU5UX1NNQzIsCisJCQkJLmVuZAk9IE1QQzh4eF9JTlRfU01DMiwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJCX0sCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1hY2hfbXBjOHh4X2ZpeHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcHBjX3N5c19maXh1cF9tZW1fcmVzb3VyY2UgKHBkZXYsIElNQVBfQUREUik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG1hY2hfbXBjOHh4X2luaXQodm9pZCkKK3sKKwlwcGNfc3lzX2RldmljZV9maXh1cCA9IG1hY2hfbXBjOHh4X2ZpeHVwOworCXJldHVybiAwOworfQorCitwb3N0Y29yZV9pbml0Y2FsbChtYWNoX21wYzh4eF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9tcGM4eHhfc3lzLmMgYi9hcmNoL3BwYy9zeXNsaWIvbXBjOHh4X3N5cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MzJjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3BwYy9zeXNsaWIvbXBjOHh4X3N5cy5jCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBhcmNoL3BwYy9wbGF0Zm9ybXMvbXBjOHh4X3N5cy5jCisgKgorICogTVBDOHh4IFN5c3RlbSBkZXNjcmlwdGlvbnMKKyAqCisgKiBNYWludGFpbmVyOiBLdW1hciBHYWxhIDxrdW1hci5nYWxhQGZyZWVzY2FsZS5jb20+CisgKgorICogQ29weXJpZ2h0IDIwMDUgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiBieSBWaXRhbHkgQm9yZHVnIDx2Ym9yZHVnQHJ1Lm12aXN0YS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9wcGNfc3lzLmg+CisKK3N0cnVjdCBwcGNfc3lzX3NwZWMgKmN1cl9wcGNfc3lzX3NwZWM7IAorc3RydWN0IHBwY19zeXNfc3BlYyBwcGNfc3lzX3NwZWNzW10gPSB7CisJeworCQkucHBjX3N5c19uYW1lCT0gIk1QQzg2WCIsCisJCS5tYXNrIAkJPSAweEZGRkZGRkZGLAorCQkudmFsdWUgCQk9IDB4MDAwMDAwMDAsCisJCS5udW1fZGV2aWNlcwk9IDIsCisJCS5kZXZpY2VfbGlzdAk9IChlbnVtIHBwY19zeXNfZGV2aWNlc1tdKQorCQl7CisJCQlNUEM4eHhfQ1BNX0ZFQzEsCisJCQlNUEM4eHhfQ1BNX1NDQzEsCisJCQlNUEM4eHhfQ1BNX1NDQzIsCisJCQlNUEM4eHhfQ1BNX1NDQzMsCisJCQlNUEM4eHhfQ1BNX1NDQzQsCisJCQlNUEM4eHhfQ1BNX1NNQzEsCisJCQlNUEM4eHhfQ1BNX1NNQzIsCisJCX0sCisJfSwKKwl7CisJCS5wcGNfc3lzX25hbWUJPSAiTVBDODg1IiwKKwkJLm1hc2sgCQk9IDB4RkZGRkZGRkYsCisJCS52YWx1ZSAJCT0gMHgwMDAwMDAwMCwKKwkJLm51bV9kZXZpY2VzCT0gMywKKwkJLmRldmljZV9saXN0CT0gKGVudW0gcHBjX3N5c19kZXZpY2VzW10pCisJCXsKKwkJCU1QQzh4eF9DUE1fRkVDMSwKKwkJCU1QQzh4eF9DUE1fRkVDMiwKKwkJCU1QQzh4eF9DUE1fU0NDMSwKKwkJCU1QQzh4eF9DUE1fU0NDMiwKKwkJCU1QQzh4eF9DUE1fU0NDMywKKwkJCU1QQzh4eF9DUE1fU0NDNCwKKwkJCU1QQzh4eF9DUE1fU01DMSwKKwkJCU1QQzh4eF9DUE1fU01DMiwKKwkJfSwKKwl9LAorCXsJLyogZGVmYXVsdCBtYXRjaCAqLworCQkucHBjX3N5c19uYW1lCT0gIiIsCisJCS5tYXNrIAkJPSAweDAwMDAwMDAwLAorCQkudmFsdWUgCQk9IDB4MDAwMDAwMDAsCisJfSwKK307CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvbXY2NHg2MC5jIGIvYXJjaC9wcGMvc3lzbGliL212NjR4NjAuYwppbmRleCA4MzlmODg3Li40ODQ5ODUwIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvbXY2NHg2MC5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9tdjY0eDYwLmMKQEAgLTM0LDcgKzM0LDcgQEAKIERFRklORV9TUElOTE9DSyhtdjY0eDYwX2xvY2spOwogCiBzdGF0aWMgcGh5c19hZGRyX3QgCW12NjR4NjBfYnJpZGdlX3BiYXNlOwotc3RhdGljIHZvaWQgCQkqbXY2NHg2MF9icmlkZ2VfdmJhc2U7CitzdGF0aWMgdm9pZCAJCV9faW9tZW0gKm12NjR4NjBfYnJpZGdlX3ZiYXNlOwogc3RhdGljIHUzMgkJbXY2NHg2MF9icmlkZ2VfdHlwZSA9IE1WNjR4NjBfVFlQRV9JTlZBTElEOwogc3RhdGljIHUzMgkJbXY2NHg2MF9icmlkZ2VfcmV2OwogI2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSAmJiAhZGVmaW5lZChDT05GSUdfR1Q2NDI2MCkKQEAgLTkzOCw3ICs5MzgsNyBAQAogICoKICAqIFJldHVybiB0aGUgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBicmlkZ2UncyByZWdpc3RlcnMuCiAgKi8KLXZvaWQgKgordm9pZCBfX2lvbWVtICoKIG12NjR4NjBfZ2V0X2JyaWRnZV92YmFzZSh2b2lkKQogewogCXJldHVybiBtdjY0eDYwX2JyaWRnZV92YmFzZTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9vZl9kZXZpY2UuYyBiL2FyY2gvcHBjL3N5c2xpYi9vZl9kZXZpY2UuYwppbmRleCBkYThhMGYyLi45M2M3MjMxIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvb2ZfZGV2aWNlLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL29mX2RldmljZS5jCkBAIC0yMzQsNyArMjM0LDkgQEAKIAlkZXZpY2VfdW5yZWdpc3Rlcigmb2ZkZXYtPmRldik7CiB9CiAKLXN0cnVjdCBvZl9kZXZpY2UqIG9mX3BsYXRmb3JtX2RldmljZV9jcmVhdGUoc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqYnVzX2lkKQorc3RydWN0IG9mX2RldmljZSogb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCQkgICAgY29uc3QgY2hhciAqYnVzX2lkLAorCQkJCQkgICAgc3RydWN0IGRldmljZSAqcGFyZW50KQogewogCXN0cnVjdCBvZl9kZXZpY2UgKmRldjsKIAl1MzIgKnJlZzsKQEAgLTI0Nyw3ICsyNDksNyBAQAogCWRldi0+bm9kZSA9IG9mX25vZGVfZ2V0KG5wKTsKIAlkZXYtPmRtYV9tYXNrID0gMHhmZmZmZmZmZlVMOwogCWRldi0+ZGV2LmRtYV9tYXNrID0gJmRldi0+ZG1hX21hc2s7Ci0JZGV2LT5kZXYucGFyZW50ID0gTlVMTDsKKwlkZXYtPmRldi5wYXJlbnQgPSBwYXJlbnQ7CiAJZGV2LT5kZXYuYnVzID0gJm9mX3BsYXRmb3JtX2J1c190eXBlOwogCWRldi0+ZGV2LnJlbGVhc2UgPSBvZl9yZWxlYXNlX2RldjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL29wZW5fcGljLmMgYi9hcmNoL3BwYy9zeXNsaWIvb3Blbl9waWMuYwppbmRleCA1M2RhNTg1Li4xY2Y1ZGUyIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvb3Blbl9waWMuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvb3Blbl9waWMuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvb3Blbl9waWMyLmMgYi9hcmNoL3BwYy9zeXNsaWIvb3Blbl9waWMyLmMKaW5kZXggMmUwZWE5Mi4uMTZjZmY5MSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL29wZW5fcGljMi5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9vcGVuX3BpYzIuYwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC01NzUsNyArNTc0LDcgQEAKICAqIHdlIG5lZWQgc29tZXRoaW5nIGJldHRlciB0byBkZWFsIHdpdGggdGhhdC4uLiBNYXliZSBzd2l0Y2ggdG8gUzEgZm9yCiAgKiBjcHVmcmVxIGNoYW5nZXMKICAqLwotaW50IG9wZW5waWMyX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldiwgdTMyIHN0YXRlKQoraW50IG9wZW5waWMyX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCWludAlpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvcHBjNHh4X3NldHVwLmMgYi9hcmNoL3BwYy9zeXNsaWIvcHBjNHh4X3NldHVwLmMKaW5kZXggYjg0M2M0Zi4uYmY4MzI0MCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL3BwYzR4eF9zZXR1cC5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9wcGM0eHhfc2V0dXAuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvcHBjODV4eF9zZXR1cC5jIGIvYXJjaC9wcGMvc3lzbGliL3BwYzg1eHhfc2V0dXAuYwppbmRleCBiNzI0MmYxLi44MzJiOGJmIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvcHBjODV4eF9zZXR1cC5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9wcGM4NXh4X3NldHVwLmMKQEAgLTE4NCw4ICsxODQsOCBAQAogCXBjaS0+cG93YXIxID0gMHg4MDA0NDAwMCB8CiAJICAgKF9faWxvZzIoTVBDODVYWF9QQ0kxX1VQUEVSX01FTSAtIE1QQzg1WFhfUENJMV9MT1dFUl9NRU0gKyAxKSAtIDEpOwogCi0JLyogU2V0dXAgb3V0Ym91ZCBJTyB3aW5kb3dzIEAgTVBDODVYWF9QQ0kxX0lPX0JBU0UgKi8KLQlwY2ktPnBvdGFyMiA9IDB4MDAwMDAwMDA7CisJLyogU2V0dXAgb3V0Ym91bmQgSU8gd2luZG93cyBAIE1QQzg1WFhfUENJMV9JT19CQVNFICovCisJcGNpLT5wb3RhcjIgPSAoTVBDODVYWF9QQ0kxX0xPV0VSX0lPID4+IDEyKSAmIDB4MDAwZmZmZmY7CiAJcGNpLT5wb3RlYXIyID0gMHgwMDAwMDAwMDsKIAlwY2ktPnBvd2JhcjIgPSAoTVBDODVYWF9QQ0kxX0lPX0JBU0UgPj4gMTIpICYgMHgwMDBmZmZmZjsKIAkvKiBFbmFibGUsIElPIFIvVyAqLwpAQCAtMjM1LDggKzIzNSw4IEBACiAJcGNpLT5wb3dhcjEgPSAweDgwMDQ0MDAwIHwKIAkgICAoX19pbG9nMihNUEM4NVhYX1BDSTJfVVBQRVJfTUVNIC0gTVBDODVYWF9QQ0kyX0xPV0VSX01FTSArIDEpIC0gMSk7CiAKLQkvKiBTZXR1cCBvdXRib3VkIElPIHdpbmRvd3MgQCBNUEM4NVhYX1BDSTJfSU9fQkFTRSAqLwotCXBjaS0+cG90YXIyID0gMHgwMDAwMDAwMDsKKwkvKiBTZXR1cCBvdXRib3VuZCBJTyB3aW5kb3dzIEAgTVBDODVYWF9QQ0kyX0lPX0JBU0UgKi8KKwlwY2ktPnBvdGFyMiA9IChNUEM4NVhYX1BDSTJfTE9XRVJfSU8gPj4gMTIpICYgMHgwMDBmZmZmZjs7CiAJcGNpLT5wb3RlYXIyID0gMHgwMDAwMDAwMDsKIAlwY2ktPnBvd2JhcjIgPSAoTVBDODVYWF9QQ0kyX0lPX0JBU0UgPj4gMTIpICYgMHgwMDBmZmZmZjsKIAkvKiBFbmFibGUsIElPIFIvVyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9LY29uZmlnIGIvYXJjaC9wcGM2NC9LY29uZmlnCmluZGV4IGRlY2E2OGEuLmM2NTg2NTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQvS2NvbmZpZworKysgYi9hcmNoL3BwYzY0L0tjb25maWcKQEAgLTI4LDEwICsyOCw2IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCi1jb25maWcgSEFWRV9ERUNfTE9DSwotCWJvb2wKLQlkZWZhdWx0IHkKLQogY29uZmlnIEVBUkxZX1BSSU5USwogCWJvb2wKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQvTWFrZWZpbGUgYi9hcmNoL3BwYzY0L01ha2VmaWxlCmluZGV4IDE3ZDJjMWUuLjUyMWMyYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQvTWFrZWZpbGUKKysrIGIvYXJjaC9wcGM2NC9NYWtlZmlsZQpAQCAtMTA3LDcgKzEwNyw3IEBACiAJJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KSBCT09USU1BR0U9JChCT09USU1BR0UpICRACiAKIGRlZmF1bHRpbWFnZS0kKENPTkZJR19QUENfUFNFUklFUykgOj0gekltYWdlCi1kZWZhdWx0aW1hZ2UtJChDT05GSUdfUFBDX1BNQUMpIDo9IHZtbGludXgKK2RlZmF1bHRpbWFnZS0kKENPTkZJR19QUENfUE1BQykgOj0gekltYWdlLnZtb2RlCiBkZWZhdWx0aW1hZ2UtJChDT05GSUdfUFBDX01BUExFKSA6PSB6SW1hZ2UKIGRlZmF1bHRpbWFnZS0kKENPTkZJR19QUENfSVNFUklFUykgOj0gdm1saW51eAogS0JVSUxEX0lNQUdFIDo9ICQoZGVmYXVsdGltYWdlLXkpCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2NvbmZpZ3MvYnBhX2RlZmNvbmZpZyBiL2FyY2gvcHBjNjQvY29uZmlncy9icGFfZGVmY29uZmlnCmluZGV4IDQ2YzVkYTQuLjY3ZmZlY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQvY29uZmlncy9icGFfZGVmY29uZmlnCisrKyBiL2FyY2gvcHBjNjQvY29uZmlncy9icGFfZGVmY29uZmlnCkBAIC0xLDE3ICsxLDE3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTMtcmM2Ci0jIE1vbiBBdWcgIDggMTQ6MTI6MTkgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE0LXJjNAorIyBUaHUgT2N0IDIwIDA4OjI5OjEwIDIwMDUKICMKIENPTkZJR182NEJJVD15CiBDT05GSUdfTU1VPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15Ci1DT05GSUdfSEFWRV9ERUNfTE9DSz15CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19DT01QQVQ9eQogQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTMKIAogIwpAQCAtMjYsNiArMjYsNyBAQAogIyBHZW5lcmFsIHNldHVwCiAjCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKQEAgLTk1LDYgKzk3LDcgQEAKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogIyBDT05GSUdfTlVNQSBpcyBub3Qgc2V0CiBDT05GSUdfU0NIRURfU01UPXkKIENPTkZJR19QUkVFTVBUX05PTkU9eQpAQCAtMTEwLDE3ICsxMTMsMTggQEAKIENPTkZJR19SVEFTX1BST0M9eQogQ09ORklHX1JUQVNfRkxBU0g9eQogQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogQ09ORklHX0lTQV9ETUFfQVBJPXkKIAogIwotIyBHZW5lcmFsIHNldHVwCisjIEJ1cyBPcHRpb25zCiAjCiBDT05GSUdfUENJPXkKIENPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiBDT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKLUNPTkZJR19QQ0lfTkFNRVM9eQogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKIAogIwpAQCAtMTMyLDggKzEzNiw2IEBACiAjIFBDSSBIb3RwbHVnIFN1cHBvcnQKICMKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JraW5nCkBAIC0xNjMsOCArMTY1LDggQEAKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX1RVTk5FTD15Ci1DT05GSUdfSVBfVENQRElBRz15Ci1DT05GSUdfSVBfVENQRElBR19JUFY2PXkKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0JJQz15CiAKQEAgLTE4MSw2ICsxODMsNyBAQAogQ09ORklHX0lQVjZfVFVOTkVMPW0KIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KQEAgLTE4OCwxMSArMTkxLDE0IEBACiBDT05GSUdfSVBfTkZfQ09OTlRSQUNLPXkKICMgQ09ORklHX0lQX05GX0NUX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUksgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX0VWRU5UUyBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUD15CiBDT05GSUdfSVBfTkZfRlRQPW0KIENPTkZJR19JUF9ORl9JUkM9bQorIyBDT05GSUdfSVBfTkZfTkVUQklPU19OUyBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfVEZUUD1tCiBDT05GSUdfSVBfTkZfQU1BTkRBPW0KKyMgQ09ORklHX0lQX05GX1BQVFAgaXMgbm90IHNldAogQ09ORklHX0lQX05GX1FVRVVFPW0KIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfTElNSVQ9bQpAQCAtMjE2LDEzICsyMjIsMTYgQEAKIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfUkVBTE09bQogQ09ORklHX0lQX05GX01BVENIX1NDVFA9bQorIyBDT05GSUdfSVBfTkZfTUFUQ0hfRENDUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfTUFUQ0hfQ09NTUVOVD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9TVFJJTkc9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQogQ09ORklHX0lQX05GX1RBUkdFVF9UQ1BNU1M9bQorQ09ORklHX0lQX05GX1RBUkdFVF9ORlFVRVVFPW0KIENPTkZJR19JUF9ORl9OQVQ9bQogQ09ORklHX0lQX05GX05BVF9ORUVERUQ9eQogQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KQEAgLTI0MCw2ICsyNDksNyBAQAogQ09ORklHX0lQX05GX1RBUkdFVF9EU0NQPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTUFSSz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KIENPTkZJR19JUF9ORl9SQVc9bQogQ09ORklHX0lQX05GX1RBUkdFVF9OT1RSQUNLPW0KIENPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQpAQCAtMjUxLDYgKzI2MSwxMiBAQAogIwogIyBDT05GSUdfSVA2X05GX1FVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQNl9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUDZfTkZfVEFSR0VUX05GUVVFVUUgaXMgbm90IHNldAorCisjCisjIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAKICMKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCkBAIC0yNzgsNiArMjk0LDcgQEAKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMjkyLDYgKzMwOSwxMSBAQAogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIworIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCisjCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorCisjCiAjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKICMKICMgQ09ORklHX01URCBpcyBub3Qgc2V0CkBAIC0zMjIsNyArMzQ0LDYgQEAKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTMxMDcyCiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogCiAjCkBAIC0zOTUsNiArNDE2LDcgQEAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKIAogIwpAQCAtNDM2LDEyICs0NTgsMTggQEAKICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CiAKICMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorCisjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQogIwogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKICMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogCiAjCkBAIC00NjIsMTUgKzQ5MCwxOCBAQAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAogIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKIENPTkZJR19TS0dFPW0KICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfU1BJREVSX05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCiAjCisjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAKQEAgLTU1Miw2ICs1ODMsNyBAQAogQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15CiAjIENPTkZJR19ST0NLRVRQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NZQ0xBREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJR0lFUENBIGlzIG5vdCBzZXQKICMgQ09ORklHX01PWEFfU01BUlRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0kgaXMgbm90IHNldAogIyBDT05GSUdfU1lOQ0xJTksgaXMgbm90IHNldApAQCAtNjQyLDcgKzY3NCw2IEBACiAjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKQEAgLTY1Niw3ICs2ODcsNiBAQAogIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0VOU09SIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKQEAgLTY4MywxMiArNzEzLDE3IEBACiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAogIwogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjIGRldmljZXMKICMKIAogIworIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKKyMKKworIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC03NTYsMTAgKzc5MSw2IEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC03NjgsNiArNzk5LDcgQEAKIENPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTc5NCwxMyArODI2LDExIEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfU1lTRlM9eQotIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19UTVBGUz15Ci1DT05GSUdfVE1QRlNfWEFUVFI9eQotIyBDT05GSUdfVE1QRlNfU0VDVVJJVFkgaXMgbm90IHNldAogQ09ORklHX0hVR0VUTEJGUz15CiBDT05GSUdfSFVHRVRMQl9QQUdFPXkKIENPTkZJR19SQU1GUz15CisjIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC04NDYsNiArODc2LDcgQEAKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC05MjMsNiArOTU0LDcgQEAKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE1CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTk4MSw3ICsxMDEzLDEyIEBACiAjIExpYnJhcnkgcm91dGluZXMKICMKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9bQogQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfVEVYVFNFQVJDSD15CitDT05GSUdfVEVYVFNFQVJDSF9LTVA9bQorQ09ORklHX1RFWFRTRUFSQ0hfQk09bQorQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQvY29uZmlncy9nNV9kZWZjb25maWcgYi9hcmNoL3BwYzY0L2NvbmZpZ3MvZzVfZGVmY29uZmlnCmluZGV4IGZjODNkOTMuLjYzMjMwNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQvY29uZmlncy9nNV9kZWZjb25maWcKKysrIGIvYXJjaC9wcGM2NC9jb25maWdzL2c1X2RlZmNvbmZpZwpAQCAtMSwxNyArMSwxNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEzLXJjNgotIyBNb24gQXVnICA4IDE0OjE2OjU5IDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNC1yYzQKKyMgVGh1IE9jdCAyMCAwODozMDoyMyAyMDA1CiAjCiBDT05GSUdfNjRCSVQ9eQogQ09ORklHX01NVT15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotQ09ORklHX0hBVkVfREVDX0xPQ0s9eQogQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfQ09NUEFUPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTEzCiAKICMKQEAgLTI2LDYgKzI2LDcgQEAKICMgR2VuZXJhbCBzZXR1cAogIwogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQpAQCAtMzcsNiArMzgsNyBAQAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKICMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldApAQCAtOTcsNiArOTksNyBAQAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19OVU1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1NNVCBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9OT05FPXkKQEAgLTEwOSwxOSArMTEyLDIwIEBACiBDT05GSUdfSFo9MjUwCiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfU0VDQ09NUD15CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX0NQVSBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCiAjCi0jIEdlbmVyYWwgc2V0dXAKKyMgQnVzIE9wdGlvbnMKICMKIENPTkZJR19QQ0k9eQogQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQotQ09ORklHX1BDSV9OQU1FUz15CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19DUFUgaXMgbm90IHNldAogCiAjCiAjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKQEAgLTEzMiw4ICsxMzYsNiBAQAogIyBQQ0kgSG90cGx1ZyBTdXBwb3J0CiAjCiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29ya2luZwpAQCAtMTYzLDggKzE2NSw4IEBACiBDT05GSUdfSU5FVF9FU1A9bQogQ09ORklHX0lORVRfSVBDT01QPW0KIENPTkZJR19JTkVUX1RVTk5FTD15Ci1DT05GSUdfSVBfVENQRElBRz1tCi0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKIApAQCAtMTc1LDYgKzE3Nyw3IEBACiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KQEAgLTE4MiwxMSArMTg1LDE0IEBACiBDT05GSUdfSVBfTkZfQ09OTlRSQUNLPW0KIENPTkZJR19JUF9ORl9DVF9BQ0NUPXkKIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSz15CitDT05GSUdfSVBfTkZfQ09OTlRSQUNLX0VWRU5UUz15CiBDT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUD1tCiBDT05GSUdfSVBfTkZfRlRQPW0KIENPTkZJR19JUF9ORl9JUkM9bQorIyBDT05GSUdfSVBfTkZfTkVUQklPU19OUyBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfVEZUUD1tCiBDT05GSUdfSVBfTkZfQU1BTkRBPW0KKyMgQ09ORklHX0lQX05GX1BQVFAgaXMgbm90IHNldAogQ09ORklHX0lQX05GX1FVRVVFPW0KIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfTElNSVQ9bQpAQCAtMjEwLDE0ICsyMTYsMTggQEAKIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfUkVBTE09bQogQ09ORklHX0lQX05GX01BVENIX1NDVFA9bQorIyBDT05GSUdfSVBfTkZfTUFUQ0hfRENDUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfTUFUQ0hfQ09NTUVOVD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQ09OTk1BUks9bQorQ09ORklHX0lQX05GX01BVENIX0NPTk5CWVRFUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9TVFJJTkc9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQogQ09ORklHX0lQX05GX1RBUkdFVF9UQ1BNU1M9bQorQ09ORklHX0lQX05GX1RBUkdFVF9ORlFVRVVFPW0KIENPTkZJR19JUF9ORl9OQVQ9bQogQ09ORklHX0lQX05GX05BVF9ORUVERUQ9eQogQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KQEAgLTIzNSw2ICsyNDUsNyBAQAogQ09ORklHX0lQX05GX1RBUkdFVF9EU0NQPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTUFSSz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfQ09OTk1BUks9bQogQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVA9bQogQ09ORklHX0lQX05GX1JBVz1tCkBAIC0yNDQsNiArMjU1LDExIEBACiBDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCiAKICMKKyMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKworIwogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldApAQCAtMjcwLDYgKzI4Niw3IEBACiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTI4NCw2ICszMDEsMTEgQEAKICMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CiAKICMKKyMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgorIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKworIwogIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCiAjCiAjIENPTkZJR19NVEQgaXMgbm90IHNldApAQCAtMzE1LDcgKzMzNyw2IEBACiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTY1NTM2CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19DRFJPTV9QS1RDRFZEPW0KIENPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldApAQCAtMzk1LDYgKzQxNiw3IEBACiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQogQ09ORklHX1NDU0lfUFJPQ19GUz15CiAKQEAgLTQyMiw2ICs0NDQsNyBAQAogQ09ORklHX1NDU0lfU1BJX0FUVFJTPXkKICMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwpAQCAtNDM1LDEwICs0NTgsMTIgQEAKICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9TQVRBPXkKICMgQ09ORklHX1NDU0lfU0FUQV9BSENJIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX1NBVEFfU1ZXPXkKICMgQ09ORklHX1NDU0lfQVRBX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVRBX01WIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FUQV9OViBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBVEFfUVNUT1IgaXMgbm90IHNldApAQCAtNDk4LDYgKzUyMyw3IEBACiAjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAogIyBDT05GSUdfRlVTSU9OX1NQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNJT05fRkMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OX1NBUyBpcyBub3Qgc2V0CiAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydApAQCAtNTQwLDcgKzU2Niw2IEBACiAjCiBDT05GSUdfQURCX1BNVT15CiBDT05GSUdfUE1BQ19TTVU9eQotIyBDT05GSUdfUE1BQ19CQUNLTElHSFQgaXMgbm90IHNldAogQ09ORklHX1RIRVJNX1BNNzI9eQogCiAjCkBAIC01NTgsMTIgKzU4MywxOCBAQAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKIAogIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CisKKyMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCiAjCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQogIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKIENPTkZJR19TVU5HRU09eQorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogCiAjCkBAIC01ODUsNiArNjE2LDcgQEAKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKICMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogQ09ORklHX1RJR09OMz1tCkBAIC01OTQsNiArNjI2LDcgQEAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCiAjCisjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAKQEAgLTc2MCw4ICs3OTMsOCBAQAogIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JU0EgaXMgbm90IHNldAogQ09ORklHX0kyQ19LRVlXRVNUPXkKK0NPTkZJR19JMkNfUE1BQ19TTVU9eQogIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CkBAIC03NzUsNyArODA4LDYgQEAKICMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NFTlNPUiBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CkBAIC04MDIsMTIgKzgzNCwxNyBAQAogIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKICMKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAKICMKICMgTWlzYyBkZXZpY2VzCiAjCiAKICMKKyMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCisjCisKKyMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtODU2LDYgKzg5Myw3IEBACiAjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAogIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DWUJMQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldApAQCAtOTM3LDYgKzk3NSw3IEBACiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5PXkKIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTU9eQogQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW5wdXQgRGV2aWNlcwpAQCAtOTU2LDkgKzk5NSwxMSBAQAogIyBDT05GSUdfVVNCX01UT1VDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VHQUxBWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKQEAgLTk4MywzMCArMTAyNCwxNCBAQAogQ09ORklHX1VTQl9QRUdBU1VTPW0KIENPTkZJR19VU0JfUlRMODE1MD1tCiBDT05GSUdfVVNCX1VTQk5FVD1tCi0KLSMKLSMgVVNCIEhvc3QtdG8tSG9zdCBDYWJsZXMKLSMKLUNPTkZJR19VU0JfQUxJX001NjMyPXkKLUNPTkZJR19VU0JfQU4yNzIwPXkKLUNPTkZJR19VU0JfQkVMS0lOPXkKLUNPTkZJR19VU0JfR0VORVNZUz15Ci1DT05GSUdfVVNCX05FVDEwODA9eQotQ09ORklHX1VTQl9QTDIzMDE9eQotQ09ORklHX1VTQl9LQzIxOTA9eQotCi0jCi0jIEludGVsbGlnZW50IFVTQiBEZXZpY2VzL0dhZGdldHMKLSMKLUNPTkZJR19VU0JfQVJNTElOVVg9eQotQ09ORklHX1VTQl9FUFNPTjI4ODg9eQotQ09ORklHX1VTQl9aQVVSVVM9eQotQ09ORklHX1VTQl9DRENFVEhFUj15Ci0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLUNPTkZJR19VU0JfQVg4ODE3WD15CisjIENPTkZJR19VU0JfTkVUX0FYODgxN1ggaXMgbm90IHNldAorQ09ORklHX1VTQl9ORVRfQ0RDRVRIRVI9bQorIyBDT05GSUdfVVNCX05FVF9HTDYyMEEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9ORVQxMDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfUExVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9STkRJU19IT1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX1pBVVJVUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15CiAKICMKQEAgLTExMjQsMTYgKzExNDksMTIgQEAKIENPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWT15CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKIENPTkZJR19YRlNfRlM9bQogQ09ORklHX1hGU19FWFBPUlQ9eQotIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfWEZTX1NFQ1VSSVRZPXkKIENPTkZJR19YRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CkBAIC0xMTQxLDYgKzExNjIsNyBAQAogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0FVVE9GU19GUz1tCiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTExNjgsMTQgKzExOTAsMTEgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19TWVNGUz15Ci1DT05GSUdfREVWUFRTX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0RFVlBUU19GU19TRUNVUklUWSBpcyBub3Qgc2V0CiBDT05GSUdfVE1QRlM9eQotQ09ORklHX1RNUEZTX1hBVFRSPXkKLUNPTkZJR19UTVBGU19TRUNVUklUWT15CiBDT05GSUdfSFVHRVRMQkZTPXkKIENPTkZJR19IVUdFVExCX1BBR0U9eQogQ09ORklHX1JBTUZTPXkKKyMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTEyMjUsNiArMTI0NCw3IEBACiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwpAQCAtMTMwMyw2ICsxMzIzLDcgQEAKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTEzNjAsNyArMTM4MSwxMiBAQAogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQ1JDX0NDSVRUPW0KKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiBDT05GSUdfTElCQ1JDMzJDPW0KIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfVEVYVFNFQVJDSD15CitDT05GSUdfVEVYVFNFQVJDSF9LTVA9bQorQ09ORklHX1RFWFRTRUFSQ0hfQk09bQorQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQvY29uZmlncy9pU2VyaWVzX2RlZmNvbmZpZyBiL2FyY2gvcHBjNjQvY29uZmlncy9pU2VyaWVzX2RlZmNvbmZpZwppbmRleCAwMTNkNGUwLi42MmU5MmM3IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2NvbmZpZ3MvaVNlcmllc19kZWZjb25maWcKKysrIGIvYXJjaC9wcGM2NC9jb25maWdzL2lTZXJpZXNfZGVmY29uZmlnCkBAIC0xLDE3ICsxLDE3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTMtcmM2Ci0jIE1vbiBBdWcgIDggMTQ6MTc6MDIgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE0LXJjNAorIyBUaHUgT2N0IDIwIDA4OjMwOjU2IDIwMDUKICMKIENPTkZJR182NEJJVD15CiBDT05GSUdfTU1VPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15Ci1DT05GSUdfSEFWRV9ERUNfTE9DSz15CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19DT01QQVQ9eQogQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTMKIAogIwpAQCAtMjYsNiArMjYsNyBAQAogIyBHZW5lcmFsIHNldHVwCiAjCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CkBAIC0zOCw2ICszOSw3IEBACiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogIyBDT05GSUdfQ1BVU0VUUyBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CkBAIC04OCw2ICs5MCw3IEBACiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKICMgQ09ORklHX05VTUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfU01UIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQpAQCAtMTAxLDE3ICsxMDQsMTYgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19MUEFSQ0ZHPXkKIENPTkZJR19TRUNDT01QPXkKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19JU0FfRE1BX0FQST15CiAKICMKLSMgR2VuZXJhbCBzZXR1cAorIyBCdXMgT3B0aW9ucwogIwogQ09ORklHX1BDST15CiBDT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15Ci1DT05GSUdfUENJX05BTUVTPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTE1Miw4ICsxNTQsOCBAQAogQ09ORklHX0lORVRfRVNQPW0KIENPTkZJR19JTkVUX0lQQ09NUD1tCiBDT05GSUdfSU5FVF9UVU5ORUw9eQotQ09ORklHX0lQX1RDUERJQUc9bQotIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0JJQz15CiAKQEAgLTE2NCw2ICsxNjYsNyBAQAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0CiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCkBAIC0xNzEsMTEgKzE3NCwxNCBAQAogQ09ORklHX0lQX05GX0NPTk5UUkFDSz1tCiBDT05GSUdfSVBfTkZfQ1RfQUNDVD15CiBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUks9eQorQ09ORklHX0lQX05GX0NPTk5UUkFDS19FVkVOVFM9eQogQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFA9bQogQ09ORklHX0lQX05GX0ZUUD1tCiBDT05GSUdfSVBfTkZfSVJDPW0KKyMgQ09ORklHX0lQX05GX05FVEJJT1NfTlMgaXMgbm90IHNldAogQ09ORklHX0lQX05GX1RGVFA9bQogQ09ORklHX0lQX05GX0FNQU5EQT1tCisjIENPTkZJR19JUF9ORl9QUFRQIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9RVUVVRT1tCiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQogQ09ORklHX0lQX05GX01BVENIX0xJTUlUPW0KQEAgLTE5OSwxNCArMjA1LDE4IEBACiBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQogQ09ORklHX0lQX05GX01BVENIX1JFQUxNPW0KIENPTkZJR19JUF9ORl9NQVRDSF9TQ1RQPW0KKyMgQ09ORklHX0lQX05GX01BVENIX0RDQ1AgaXMgbm90IHNldAogQ09ORklHX0lQX05GX01BVENIX0NPTU1FTlQ9bQogQ09ORklHX0lQX05GX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9DT05OQllURVM9bQogQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfU1RSSU5HPW0KIENPTkZJR19JUF9ORl9GSUxURVI9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQogQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQogQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVENQTVNTPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTkZRVUVVRT1tCiBDT05GSUdfSVBfTkZfTkFUPW0KIENPTkZJR19JUF9ORl9OQVRfTkVFREVEPXkKIENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCkBAIC0yMjQsNiArMjM0LDcgQEAKIENPTkZJR19JUF9ORl9UQVJHRVRfRFNDUD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX01BUks9bQogQ09ORklHX0lQX05GX1RBUkdFVF9DTEFTU0lGWT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0NPTk5NQVJLPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KIENPTkZJR19JUF9ORl9SQVc9bQpAQCAtMjMzLDYgKzI0NCwxMSBAQAogQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQogCiAjCisjIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisKKyMKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKQEAgLTI1OSw2ICsyNzUsNyBAQAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0yNzMsNiArMjkwLDExIEBACiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogCiAjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisKKyMKICMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQogIwogIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKQEAgLTMwMyw3ICszMjUsNiBAQAogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT02NTUzNgogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKIAogIwpAQCAtMzIzLDYgKzM0NCw3IEBACiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQogQ09ORklHX1NDU0lfUFJPQ19GUz15CiAKQEAgLTM1MCw2ICszNzIsNyBAQAogQ09ORklHX1NDU0lfU1BJX0FUVFJTPXkKIENPTkZJR19TQ1NJX0ZDX0FUVFJTPXkKICMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKQEAgLTM2Myw2ICszODYsNyBAQAogIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldApAQCAtNDE1LDYgKzQzOSw3IEBACiAjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAogIyBDT05GSUdfRlVTSU9OX1NQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNJT05fRkMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OX1NBUyBpcyBub3Qgc2V0CiAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydApAQCAtNDQ1LDEyICs0NzAsMTggQEAKICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CiAKICMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorCisjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQogIwogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKICMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogCiAjCkBAIC00ODksNiArNTIwLDcgQEAKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKICMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKQEAgLTQ5OCw2ICs1MzAsNyBAQAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKICMKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKIApAQCAtNjMyLDcgKzY2NSw2IEBACiAjIEkyQyBzdXBwb3J0CiAjCiAjIENPTkZJR19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NFTlNPUiBpcyBub3Qgc2V0CiAKICMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwpAQCAtNjQzLDEyICs2NzUsMTcgQEAKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CiAjCiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAogCiAjCiAjIE1pc2MgZGV2aWNlcwogIwogCiAjCisjIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycworIworCisjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTcyMiwxNiArNzU5LDEyIEBACiAjIENPTkZJR19KRlNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKIENPTkZJR19YRlNfRlM9bQogQ09ORklHX1hGU19FWFBPUlQ9eQotIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfWEZTX1NFQ1VSSVRZPXkKIENPTkZJR19YRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CkBAIC03MzksNiArNzcyLDcgQEAKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19BVVRPRlNfRlM9bQogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC03NjYsMTQgKzgwMCwxMSBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19ERVZQVFNfRlNfWEFUVFI9eQotQ09ORklHX0RFVlBUU19GU19TRUNVUklUWT15CiBDT05GSUdfVE1QRlM9eQotQ09ORklHX1RNUEZTX1hBVFRSPXkKLUNPTkZJR19UTVBGU19TRUNVUklUWT15CiAjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CisjIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC04MjQsNiArODU1LDcgQEAKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC04OTcsNiArOTI5LDcgQEAKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTk1NCw3ICs5ODcsMTIgQEAKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0NSQ19DQ0lUVD1tCisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogQ09ORklHX0xJQkNSQzMyQz1tCiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9bQorQ09ORklHX1RFWFRTRUFSQ0g9eQorQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KK0NPTkZJR19URVhUU0VBUkNIX0JNPW0KK0NPTkZJR19URVhUU0VBUkNIX0ZTTT1tCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2NvbmZpZ3MvbWFwbGVfZGVmY29uZmlnIGIvYXJjaC9wcGM2NC9jb25maWdzL21hcGxlX2RlZmNvbmZpZwppbmRleCBkZDQyODkyLi43YjQ4MGYzIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2NvbmZpZ3MvbWFwbGVfZGVmY29uZmlnCisrKyBiL2FyY2gvcHBjNjQvY29uZmlncy9tYXBsZV9kZWZjb25maWcKQEAgLTEsMTcgKzEsMTcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMy1yYzYKLSMgTW9uIEF1ZyAgOCAxNDoxNzowNCAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTQtcmM0CisjIFRodSBPY3QgMjAgMDg6MzE6MjQgMjAwNQogIwogQ09ORklHXzY0QklUPXkKIENPTkZJR19NTVU9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLUNPTkZJR19IQVZFX0RFQ19MT0NLPXkKIENPTkZJR19FQVJMWV9QUklOVEs9eQogQ09ORklHX0NPTVBBVD15CiBDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMwogCiAjCkBAIC0yNiw2ICsyNiw3IEBACiAjIEdlbmVyYWwgc2V0dXAKICMKIENPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKQEAgLTM3LDYgKzM4LDcgQEAKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiAjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CkBAIC05Nyw2ICs5OSw3IEBACiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKICMgQ09ORklHX05VTUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfU01UIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQpAQCAtMTA5LDE3ICsxMTIsMTggQEAKIENPTkZJR19IWj0yNTAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19TRUNDT01QPXkKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKIENPTkZJR19JU0FfRE1BX0FQST15CiAKICMKLSMgR2VuZXJhbCBzZXR1cAorIyBCdXMgT3B0aW9ucwogIwogQ09ORklHX1BDST15CiBDT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15Ci1DT05GSUdfUENJX05BTUVTPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTEzMSw4ICsxMzUsNiBAQAogIyBQQ0kgSG90cGx1ZyBTdXBwb3J0CiAjCiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29ya2luZwpAQCAtMTYzLDE0ICsxNjUsMTkgQEAKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9UQ1BESUFHPXkKLSMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCiAjCisjIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisKKyMKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKQEAgLTE5Niw2ICsyMDMsNyBAQAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0yMTAsNiArMjE4LDExIEBACiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogCiAjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisKKyMKICMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQogIwogIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKQEAgLTI0MCw3ICsyNTMsNiBAQAogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAKICMKQEAgLTMxMyw2ICszMjUsNyBAQAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAogCiAjCkBAIC0zNTQsMTIgKzM2NywxOCBAQAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKIAogIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CisKKyMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCiAjCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQogIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAKICMKQEAgLTM5OCw2ICs0MTcsNyBAQAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAogIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldApAQCAtNDA4LDYgKzQyOCw3IEBACiAjCiAjIEV0aGVybmV0ICgxMDAwMCBNYml0KQogIworIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogCkBAIC01NTMsNyArNTc0LDYgQEAKICMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNBIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldApAQCAtNTY3LDcgKzU4Nyw2IEBACiAjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TRU5TT1IgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydApAQCAtNTk0LDEyICs2MTMsMTcgQEAKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CiAjCiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAogCiAjCiAjIE1pc2MgZGV2aWNlcwogIwogCiAjCisjIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycworIworCisjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTY4MSw5ICs3MDUsMTEgQEAKICMgQ09ORklHX1VTQl9NVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lUTVRPVUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FR0FMQVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW1hZ2luZyBkZXZpY2VzCkBAIC04MTQsMTAgKzg0MCw2IEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC04MjYsNiArODQ4LDcgQEAKIENPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTg0OSwxNCArODcyLDExIEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfU1lTRlM9eQotQ09ORklHX0RFVlBUU19GU19YQVRUUj15Ci0jIENPTkZJR19ERVZQVFNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAogQ09ORklHX1RNUEZTPXkKLUNPTkZJR19UTVBGU19YQVRUUj15Ci1DT05GSUdfVE1QRlNfU0VDVVJJVFk9eQogQ09ORklHX0hVR0VUTEJGUz15CiBDT05GSUdfSFVHRVRMQl9QQUdFPXkKIENPTkZJR19SQU1GUz15CisjIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC04OTgsNiArOTE4LDcgQEAKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC05NzUsNiArOTk2LDcgQEAKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU0xBQj15CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xMDM0LDYgKzEwNTYsNyBAQAogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQ1JDX0NDSVRUPXkKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2NvbmZpZ3MvcFNlcmllc19kZWZjb25maWcgYi9hcmNoL3BwYzY0L2NvbmZpZ3MvcFNlcmllc19kZWZjb25maWcKaW5kZXggMjlmN2I4MC4uOWYwOWRmZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9jb25maWdzL3BTZXJpZXNfZGVmY29uZmlnCisrKyBiL2FyY2gvcHBjNjQvY29uZmlncy9wU2VyaWVzX2RlZmNvbmZpZwpAQCAtMSwxNyArMSwxNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEzLXJjNgotIyBNb24gQXVnICA4IDE0OjE3OjA3IDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNC1yYzQKKyMgVGh1IE9jdCAyMCAwODozMjoxNyAyMDA1CiAjCiBDT05GSUdfNjRCSVQ9eQogQ09ORklHX01NVT15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotQ09ORklHX0hBVkVfREVDX0xPQ0s9eQogQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfQ09NUEFUPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTEzCiAKICMKQEAgLTI2LDYgKzI2LDcgQEAKICMgR2VuZXJhbCBzZXR1cAogIwogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQpAQCAtMzgsNiArMzksNyBAQAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19DUFVTRVRTPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CkBAIC0xMDQsNiArMTA2LDcgQEAKIENPTkZJR19ESVNDT05USUdNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9FQVJMWV9QRk5fVE9fTklEPXkKIENPTkZJR19OT0RFU19TUEFOX09USEVSX05PREVTPXkKIENPTkZJR19OVU1BPXkKQEAgLTEyNCwxOSArMTI3LDIwIEBACiBDT05GSUdfU0NBTkxPRz1tCiBDT05GSUdfTFBBUkNGRz15CiBDT05GSUdfU0VDQ09NUD15CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVR19DUFU9eQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogQ09ORklHX0lTQV9ETUFfQVBJPXkKIAogIwotIyBHZW5lcmFsIHNldHVwCisjIEJ1cyBPcHRpb25zCiAjCiBDT05GSUdfUENJPXkKIENPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiBDT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKLUNPTkZJR19QQ0lfTkFNRVM9eQogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHX0NQVT15CiAKICMKICMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydApAQCAtMTUyLDggKzE1Niw2IEBACiAjIENPTkZJR19IT1RQTFVHX1BDSV9TSFBDIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHX1BDSV9SUEE9bQogQ09ORklHX0hPVFBMVUdfUENJX1JQQV9ETFBBUj1tCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29ya2luZwpAQCAtMTgzLDggKzE4NSw4IEBACiBDT05GSUdfSU5FVF9FU1A9bQogQ09ORklHX0lORVRfSVBDT01QPW0KIENPTkZJR19JTkVUX1RVTk5FTD15Ci1DT05GSUdfSVBfVENQRElBRz1tCi0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKIApAQCAtMTk1LDYgKzE5Nyw5IEBACiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz15CitDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCkBAIC0yMDIsMTEgKzIwNywxNSBAQAogQ09ORklHX0lQX05GX0NPTk5UUkFDSz1tCiBDT05GSUdfSVBfTkZfQ1RfQUNDVD15CiBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUks9eQorQ09ORklHX0lQX05GX0NPTk5UUkFDS19FVkVOVFM9eQorQ09ORklHX0lQX05GX0NPTk5UUkFDS19ORVRMSU5LPW0KIENPTkZJR19JUF9ORl9DVF9QUk9UT19TQ1RQPW0KIENPTkZJR19JUF9ORl9GVFA9bQogQ09ORklHX0lQX05GX0lSQz1tCisjIENPTkZJR19JUF9ORl9ORVRCSU9TX05TIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9URlRQPW0KIENPTkZJR19JUF9ORl9BTUFOREE9bQorIyBDT05GSUdfSVBfTkZfUFBUUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9NQVRDSF9MSU1JVD1tCkBAIC0yMzAsMTQgKzIzOSwxOCBAQAogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KIENPTkZJR19JUF9ORl9NQVRDSF9SRUFMTT1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfU0NUUD1tCisjIENPTkZJR19JUF9ORl9NQVRDSF9EQ0NQIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9NQVRDSF9DT01NRU5UPW0KIENPTkZJR19JUF9ORl9NQVRDSF9DT05OTUFSSz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQ09OTkJZVEVTPW0KIENPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQorQ09ORklHX0lQX05GX01BVENIX1NUUklORz1tCiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX05GUVVFVUU9bQogQ09ORklHX0lQX05GX05BVD1tCiBDT05GSUdfSVBfTkZfTkFUX05FRURFRD15CiBDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQpAQCAtMjU1LDYgKzI2OCw3IEBACiBDT05GSUdfSVBfTkZfVEFSR0VUX0RTQ1A9bQogQ09ORklHX0lQX05GX1RBUkdFVF9NQVJLPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xBU1NJRlk9bQorQ09ORklHX0lQX05GX1RBUkdFVF9UVEw9bQogQ09ORklHX0lQX05GX1RBUkdFVF9DT05OTUFSSz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUD1tCiBDT05GSUdfSVBfTkZfUkFXPW0KQEAgLTI2NCw2ICsyNzgsMTEgQEAKIENPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KIAogIworIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorCisjCiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CkBAIC0yOTAsNiArMzA5LDcgQEAKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzA0LDYgKzMyNCwxMSBAQAogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIworIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCisjCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorCisjCiAjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKICMKICMgQ09ORklHX01URCBpcyBub3Qgc2V0CkBAIC0zNDIsNyArMzY3LDYgQEAKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NjU1MzYKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAKICMKQEAgLTQxNiw2ICs0NDAsNyBAQAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKIENPTkZJR19TQ1NJX1BST0NfRlM9eQogCkBAIC00NDMsNiArNDY4LDcgQEAKIENPTkZJR19TQ1NJX1NQSV9BVFRSUz15CiBDT05GSUdfU0NTSV9GQ19BVFRSUz15CiBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUz1tCisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwpAQCAtNDU2LDYgKzQ4Miw3IEBACiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CkBAIC01MTcsNiArNTQ0LDcgQEAKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNJT05fU1BJIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0lPTl9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fU0FTIGlzIG5vdCBzZXQKIAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CkBAIC01NDcsMTIgKzU3NSwxOCBAQAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKIAogIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CisKKyMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCiAjCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQogIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfVkVORE9SXzNDT009eQogQ09ORklHX1ZPUlRFWD15CiAjIENPTkZJR19UWVBIT09OIGlzIG5vdCBzZXQKQEAgLTU4MSw2ICs2MTUsNyBAQAogIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPQ0tFVCBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKQEAgLTU5NCw2ICs2MjksNyBAQAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAogIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldApAQCAtNjA0LDYgKzY0MCw3IEBACiAjCiAjIEV0aGVybmV0ICgxMDAwMCBNYml0KQogIworIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CiBDT05GSUdfSVhHQj1tCiAjIENPTkZJR19JWEdCX05BUEkgaXMgbm90IHNldAogQ09ORklHX1MySU89bQpAQCAtNzg5LDcgKzgyNiw2IEBACiAjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUEFSUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CkBAIC04MDQsNyArODQwLDYgQEAKICMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NFTlNPUiBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CkBAIC04MzEsMTIgKzg2NiwxNyBAQAogIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKICMKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAKICMKICMgTWlzYyBkZXZpY2VzCiAjCiAKICMKKyMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCisjCisKKyMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtODg1LDYgKzkyNSw3IEBACiAjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAogIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DWUJMQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldApAQCAtOTgyLDkgKzEwMjMsMTEgQEAKICMgQ09ORklHX1VTQl9NVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lUTVRPVUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FR0FMQVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW1hZ2luZyBkZXZpY2VzCkBAIC0xMDU3LDcgKzExMDAsOCBAQAogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKIENPTkZJR19JTkZJTklCQU5EPW0KLUNPTkZJR19JTkZJTklCQU5EX1VTRVJfVkVSQlM9bQorIyBDT05GSUdfSU5GSU5JQkFORF9VU0VSX01BRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EX1VTRVJfQUNDRVNTIGlzIG5vdCBzZXQKIENPTkZJR19JTkZJTklCQU5EX01USENBPW0KICMgQ09ORklHX0lORklOSUJBTkRfTVRIQ0FfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lORklOSUJBTkRfSVBPSUI9bQpAQCAtMTA5NSwxNiArMTEzOSwxMiBAQAogIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQotCi0jCi0jIFhGUyBzdXBwb3J0Ci0jCiBDT05GSUdfWEZTX0ZTPW0KIENPTkZJR19YRlNfRVhQT1JUPXkKLSMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX1hGU19TRUNVUklUWT15CiBDT05GSUdfWEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQpAQCAtMTExMiw2ICsxMTUyLDcgQEAKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19BVVRPRlNfRlM9bQogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC0xMTM5LDE0ICsxMTgwLDExIEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfU1lTRlM9eQotQ09ORklHX0RFVlBUU19GU19YQVRUUj15Ci1DT05GSUdfREVWUFRTX0ZTX1NFQ1VSSVRZPXkKIENPTkZJR19UTVBGUz15Ci1DT05GSUdfVE1QRlNfWEFUVFI9eQotQ09ORklHX1RNUEZTX1NFQ1VSSVRZPXkKIENPTkZJR19IVUdFVExCRlM9eQogQ09ORklHX0hVR0VUTEJfUEFHRT15CiBDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtMTE5Nyw2ICsxMjM1LDcgQEAKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC0xMjYxLDYgKzEzMDAsNyBAQAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTMyMCw3ICsxMzYwLDEyIEBACiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19DUkNfQ0NJVFQ9bQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKIENPTkZJR19MSUJDUkMzMkM9bQogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19URVhUU0VBUkNIPXkKK0NPTkZJR19URVhUU0VBUkNIX0tNUD1tCitDT05GSUdfVEVYVFNFQVJDSF9CTT1tCitDT05GSUdfVEVYVFNFQVJDSF9GU009bQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9kZWZjb25maWcgYi9hcmNoL3BwYzY0L2RlZmNvbmZpZwppbmRleCA3Y2I0NzUwLi4zN2MxNTdjIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2RlZmNvbmZpZworKysgYi9hcmNoL3BwYzY0L2RlZmNvbmZpZwpAQCAtMSwxNyArMSwxNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEzLXJjNgotIyBNb24gQXVnICA4IDE0OjE2OjU0IDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNC1yYzQKKyMgVGh1IE9jdCAyMCAwODoyODozMyAyMDA1CiAjCiBDT05GSUdfNjRCSVQ9eQogQ09ORklHX01NVT15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotQ09ORklHX0hBVkVfREVDX0xPQ0s9eQogQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfQ09NUEFUPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTEzCiAKICMKQEAgLTI2LDYgKzI2LDcgQEAKICMgR2VuZXJhbCBzZXR1cAogIwogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQpAQCAtMzcsNiArMzgsNyBAQAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19DUFVTRVRTPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKQEAgLTEwNiw2ICsxMDgsNyBAQAogQ09ORklHX0RJU0NPTlRJR01FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVM9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0VBUkxZX1BGTl9UT19OSUQ9eQogQ09ORklHX05PREVTX1NQQU5fT1RIRVJfTk9ERVM9eQogIyBDT05GSUdfTlVNQSBpcyBub3Qgc2V0CkBAIC0xMjYsMTkgKzEyOSwyMCBAQAogQ09ORklHX1NDQU5MT0c9bQogQ09ORklHX0xQQVJDRkc9eQogQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9NSVNDPW0KK0NPTkZJR19IT1RQTFVHX0NQVT15CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCiAjCi0jIEdlbmVyYWwgc2V0dXAKKyMgQnVzIE9wdGlvbnMKICMKIENPTkZJR19QQ0k9eQogQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19CSU5GTVRfRUxGPXkKLUNPTkZJR19CSU5GTVRfTUlTQz1tCiAjIENPTkZJR19QQ0lfTEVHQUNZX1BST0MgaXMgbm90IHNldAotIyBDT05GSUdfUENJX05BTUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVR19DUFU9eQogCiAjCiAjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKQEAgLTE1NCw4ICsxNTgsNiBAQAogIyBDT05GSUdfSE9UUExVR19QQ0lfU0hQQyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVR19QQ0lfUlBBPW0KIENPTkZJR19IT1RQTFVHX1BDSV9SUEFfRExQQVI9bQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmtpbmcKQEAgLTE4NSw4ICsxODcsOCBAQAogQ09ORklHX0lORVRfRVNQPW0KIENPTkZJR19JTkVUX0lQQ09NUD1tCiBDT05GSUdfSU5FVF9UVU5ORUw9eQotIyBDT05GSUdfSVBfVENQRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKIApAQCAtMTk3LDYgKzE5OSw5IEBACiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz15CitDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCkBAIC0yMDQsMTEgKzIwOSwxNSBAQAogQ09ORklHX0lQX05GX0NPTk5UUkFDSz1tCiBDT05GSUdfSVBfTkZfQ1RfQUNDVD15CiBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUks9eQorQ09ORklHX0lQX05GX0NPTk5UUkFDS19FVkVOVFM9eQorQ09ORklHX0lQX05GX0NPTk5UUkFDS19ORVRMSU5LPW0KIENPTkZJR19JUF9ORl9DVF9QUk9UT19TQ1RQPW0KIENPTkZJR19JUF9ORl9GVFA9bQogQ09ORklHX0lQX05GX0lSQz1tCisjIENPTkZJR19JUF9ORl9ORVRCSU9TX05TIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9URlRQPW0KIENPTkZJR19JUF9ORl9BTUFOREE9bQorIyBDT05GSUdfSVBfTkZfUFBUUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9NQVRDSF9MSU1JVD1tCkBAIC0yMzIsMTQgKzI0MSwxOCBAQAogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KIENPTkZJR19JUF9ORl9NQVRDSF9SRUFMTT1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfU0NUUD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRENDUD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQ09NTUVOVD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQ09OTk1BUks9bQorQ09ORklHX0lQX05GX01BVENIX0NPTk5CWVRFUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9TVFJJTkc9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQogQ09ORklHX0lQX05GX1RBUkdFVF9UQ1BNU1M9bQorQ09ORklHX0lQX05GX1RBUkdFVF9ORlFVRVVFPW0KIENPTkZJR19JUF9ORl9OQVQ9bQogQ09ORklHX0lQX05GX05BVF9ORUVERUQ9eQogQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KQEAgLTI1Nyw2ICsyNzAsNyBAQAogQ09ORklHX0lQX05GX1RBUkdFVF9EU0NQPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTUFSSz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfQ09OTk1BUks9bQogQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVA9bQogQ09ORklHX0lQX05GX1JBVz1tCkBAIC0yNjYsNiArMjgwLDExIEBACiBDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCiAKICMKKyMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKworIwogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldApAQCAtMjkyLDYgKzMxMSw3IEBACiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTMwNiw2ICszMjYsMTEgQEAKICMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CiAKICMKKyMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgorIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKworIwogIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCiAjCiAjIENPTkZJR19NVEQgaXMgbm90IHNldApAQCAtMzQ0LDcgKzM2OSw2IEBACiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTY1NTM2CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogCiAjCkBAIC00MjIsNiArNDQ2LDcgQEAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIApAQCAtNDQ5LDYgKzQ3NCw3IEBACiBDT05GSUdfU0NTSV9TUElfQVRUUlM9eQogQ09ORklHX1NDU0lfRkNfQVRUUlM9eQogQ09ORklHX1NDU0lfSVNDU0lfQVRUUlM9bQorIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKQEAgLTQ2MiwxMCArNDg4LDEyIEBACiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfU0FUQT15CiAjIENPTkZJR19TQ1NJX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9TQVRBX1NWVz15CiAjIENPTkZJR19TQ1NJX0FUQV9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FUQV9NViBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBVEFfTlYgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVRBX1BST01JU0UgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVRBX1FTVE9SIGlzIG5vdCBzZXQKQEAgLTUzNSw2ICs1NjMsNyBAQAogIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0lPTl9TUEkgaXMgbm90IHNldAogIyBDT05GSUdfRlVTSU9OX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9TQVMgaXMgbm90IHNldAogCiAjCiAjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKQEAgLTU3OCw3ICs2MDcsNiBAQAogIwogQ09ORklHX0FEQl9QTVU9eQogQ09ORklHX1BNQUNfU01VPXkKLSMgQ09ORklHX1BNQUNfQkFDS0xJR0hUIGlzIG5vdCBzZXQKIENPTkZJR19USEVSTV9QTTcyPXkKIAogIwpAQCAtNTk2LDEyICs2MjQsMTggQEAKICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CiAKICMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorCisjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQogIwogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKICMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CiBDT05GSUdfU1VOR0VNPXkKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogQ09ORklHX05FVF9WRU5ET1JfM0NPTT15CiBDT05GSUdfVk9SVEVYPXkKICMgQ09ORklHX1RZUEhPT04gaXMgbm90IHNldApAQCAtNjMwLDYgKzY2NCw3IEBACiAjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMCBNYml0KQpAQCAtNjQzLDE2ICs2NzgsMTkgQEAKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKICMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKIENPTkZJR19USUdPTjM9eQogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19TUElERVJfTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKICMKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAogQ09ORklHX0lYR0I9bQogIyBDT05GSUdfSVhHQl9OQVBJIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldApAQCAtODM4LDggKzg3Niw4IEBACiAjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lTQSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0tFWVdFU1Q9eQorQ09ORklHX0kyQ19QTUFDX1NNVT15CiAjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUEFSUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CkBAIC04NTQsNyArODkyLDYgQEAKICMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NFTlNPUiBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CkBAIC04ODEsMTIgKzkxOCwxNyBAQAogIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKICMKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAKICMKICMgTWlzYyBkZXZpY2VzCiAjCiAKICMKKyMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCisjCisKKyMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtOTM5LDYgKzk4MSw3IEBACiAjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAogIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DWUJMQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldApAQCAtMTAyMCw2ICsxMDYzLDcgQEAKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbnB1dCBEZXZpY2VzCkBAIC0xMDM2LDkgKzEwODAsMTEgQEAKICMgQ09ORklHX1VTQl9NVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lUTVRPVUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FR0FMQVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW1hZ2luZyBkZXZpY2VzCkBAIC0xMTExLDcgKzExNTcsOCBAQAogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKIENPTkZJR19JTkZJTklCQU5EPW0KLUNPTkZJR19JTkZJTklCQU5EX1VTRVJfVkVSQlM9bQorIyBDT05GSUdfSU5GSU5JQkFORF9VU0VSX01BRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EX1VTRVJfQUNDRVNTIGlzIG5vdCBzZXQKIENPTkZJR19JTkZJTklCQU5EX01USENBPW0KICMgQ09ORklHX0lORklOSUJBTkRfTVRIQ0FfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lORklOSUJBTkRfSVBPSUI9bQpAQCAtMTE0OSwxNiArMTE5NiwxMiBAQAogIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQotCi0jCi0jIFhGUyBzdXBwb3J0Ci0jCiBDT05GSUdfWEZTX0ZTPW0KIENPTkZJR19YRlNfRVhQT1JUPXkKLSMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX1hGU19TRUNVUklUWT15CiBDT05GSUdfWEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQpAQCAtMTE2Niw2ICsxMjA5LDcgQEAKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19BVVRPRlNfRlM9eQogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC0xMTkyLDE0ICsxMjM2LDExIEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfU1lTRlM9eQotQ09ORklHX0RFVlBUU19GU19YQVRUUj15Ci1DT05GSUdfREVWUFRTX0ZTX1NFQ1VSSVRZPXkKIENPTkZJR19UTVBGUz15Ci1DT05GSUdfVE1QRlNfWEFUVFI9eQotQ09ORklHX1RNUEZTX1NFQ1VSSVRZPXkKIENPTkZJR19IVUdFVExCRlM9eQogQ09ORklHX0hVR0VUTEJfUEFHRT15CiBDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtMTI1MCw2ICsxMjkxLDcgQEAKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC0xMzI4LDYgKzEzNzAsNyBAQAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTM4Nyw3ICsxNDMwLDEyIEBACiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19DUkNfQ0NJVFQ9bQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKIENPTkZJR19MSUJDUkMzMkM9bQogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19URVhUU0VBUkNIPXkKK0NPTkZJR19URVhUU0VBUkNIX0tNUD1tCitDT05GSUdfVEVYVFNFQVJDSF9CTT1tCitDT05GSUdfVEVYVFNFQVJDSF9GU009bQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvYnBhX2lvbW11LmMgYi9hcmNoL3BwYzY0L2tlcm5lbC9icGFfaW9tbXUuYwppbmRleCBmMzNhN2JjLi41ZjI0NjAwIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9icGFfaW9tbXUuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9icGFfaW9tbXUuYwpAQCAtOTksNyArOTksMTEgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OiAvKiBub3QgYSBrbm93biBjb21waWxlIHRpbWUgY29uc3RhbnQgKi8KLQkJQlVJTERfQlVHX09OKDEpOworCQl7CisJCQkvKiBCVUlMRF9CVUdfT04oKSBpcyBub3QgdXNhYmxlIGhlcmUgKi8KKwkJCWV4dGVybiB2b2lkIF9fZ2V0X2lvc3RfZW50cnlfYmFkX3BhZ2Vfc2l6ZSh2b2lkKTsKKwkJCV9fZ2V0X2lvc3RfZW50cnlfYmFkX3BhZ2Vfc2l6ZSgpOworCQl9CiAJCWJyZWFrOwogCX0KIApAQCAtMzA2LDcgKzMxMCw3IEBACiAKIAogc3RhdGljIHZvaWQgKmJwYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc2l6ZV90IHNpemUsCi0JCQkgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZykKKwkJCSAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWcpCiB7CiAJdm9pZCAqcmV0OwogCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9kbWEuYyBiL2FyY2gvcHBjNjQva2VybmVsL2RtYS5jCmluZGV4IDRkYThlMzEuLjdjMzQxOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL2RtYS5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL2RtYS5jCkBAIC01Myw3ICs1Myw3IEBACiBFWFBPUlRfU1lNQk9MKGRtYV9zZXRfbWFzayk7CiAKIHZvaWQgKmRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQlkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZykKKwkJZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZykKIHsKIAlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpkbWFfb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvaGVhZC5TIGIvYXJjaC9wcGM2NC9rZXJuZWwvaGVhZC5TCmluZGV4IDU4YzMxNDcuLjcyYzYxMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL2hlYWQuUworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9oZWFkLlMKQEAgLTE2NDksNyArMTY0OSw3IEBACiAJbGQJcjMsMChyMykKIAlsd3oJcjMsUExBVEZPUk0ocjMpCQkvKiByMyA9IHBsYXRmb3JtIGZsYWdzCQkgKi8KIAlhbmRpLglyMyxyMyxQTEFURk9STV9MUEFSCS8qIFRlc3QgaWYgYml0IDAgaXMgc2V0IChMUEFSIGJpdCkgKi8KLQlibmUJOThmCisJYmVxCTk4ZgkJCS8qIGJyYW5jaCBpZiByZXN1bHQgaXMgMCAgKi8KIAltZnNwcglyMyxQVlIKIAlzcndpCXIzLHIzLDE2CiAJY21wd2kJcjMsMHgzNwkJCS8qIFNTdGFyICAqLwpAQCAtMTgxMyw3ICsxODEzLDcgQEAKIAlsZAlyMywwKHIzKQogCWx3eglyMyxQTEFURk9STShyMykJCS8qIHIzID0gcGxhdGZvcm0gZmxhZ3MgKi8KIAlhbmRpLglyMyxyMyxQTEFURk9STV9MUEFSCS8qIFRlc3QgaWYgYml0IDAgaXMgc2V0IChMUEFSIGJpdCkgKi8KLQlibmUJOThmCisJYmVxCTk4ZgkJCS8qIGJyYW5jaCBpZiByZXN1bHQgaXMgMCAgKi8KIAltZnNwcglyMyxQVlIKIAlzcndpCXIzLHIzLDE2CiAJY21wd2kJcjMsMHgzNwkJCS8qIFNTdGFyICovCkBAIC0xODM0LDcgKzE4MzQsNyBAQAogCWx3eglyMyxQTEFURk9STShyMykJCS8qIHIzID0gcGxhdGZvcm0gZmxhZ3MgKi8KIAkvKiBUZXN0IGlmIGJpdCAwIGlzIHNldCAoTFBBUiBiaXQpICovCiAJYW5kaS4JcjMscjMsUExBVEZPUk1fTFBBUgotCWJuZQk5OGYKKwlibmUJOThmCQkJLyogYnJhbmNoIGlmIHJlc3VsdCBpcyAhMCAgKi8KIAlMT0FEQUREUihyNixfU0RSMSkJCS8qIE9ubHkgaWYgTk9UIExQQVIgKi8KIAlzdWIJcjYscjYscjI2CiAJbGQJcjYsMChyNikJCS8qIGdldCB0aGUgdmFsdWUgb2YgX1NEUjEgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL2lTZXJpZXNfaHRhYi5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvaVNlcmllc19odGFiLmMKaW5kZXggMjE5MjA1NS4uMDczYjc2NiAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvaVNlcmllc19odGFiLmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvaVNlcmllc19odGFiLmMKQEAgLTY2LDcgKzY2LDcgQEAKIAl9CiAKIAlpZiAoc2xvdCA8IDApIHsJCS8qIE1TQiBzZXQgbWVhbnMgc2Vjb25kYXJ5IGdyb3VwICovCi0JCXZmbGFncyB8PSBIUFRFX1ZfVkFMSUQ7CisJCXZmbGFncyB8PSBIUFRFX1ZfU0VDT05EQVJZOwogCQlzZWNvbmRhcnkgPSAxOwogCQlzbG90ICY9IDB4N2ZmZmZmZmZmZmZmZmZmZjsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9pb21tdS5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvaW9tbXUuYwppbmRleCA5MDMyYjZiLi40ZDliNDM4IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9pb21tdS5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL2lvbW11LmMKQEAgLTUxOSw3ICs1MTksNyBAQAogICogdG8gdGhlIGRtYSBhZGRyZXNzIChtYXBwaW5nKSBvZiB0aGUgZmlyc3QgcGFnZS4KICAqLwogdm9pZCAqaW9tbXVfYWxsb2NfY29oZXJlbnQoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIHNpemVfdCBzaXplLAotCQlkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZykKKwkJZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZykKIHsKIAl2b2lkICpyZXQgPSBOVUxMOwogCWRtYV9hZGRyX3QgbWFwcGluZzsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL2twcm9iZXMuYyBiL2FyY2gvcHBjNjQva2VybmVsL2twcm9iZXMuYwppbmRleCA3ZTgwZDQ5Li45YzZmYWNjIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwva3Byb2Jlcy5jCkBAIC01OSw5ICs1OSw5IEBACiAKIAkvKiBpbnNuIG11c3QgYmUgb24gYSBzcGVjaWFsIGV4ZWN1dGFibGUgcGFnZSBvbiBwcGM2NCAqLwogCWlmICghcmV0KSB7Ci0JCXVwKCZrcHJvYmVfbXV0ZXgpOwotCQlwLT5haW5zbi5pbnNuID0gZ2V0X2luc25fc2xvdCgpOwogCQlkb3duKCZrcHJvYmVfbXV0ZXgpOworCQlwLT5haW5zbi5pbnNuID0gZ2V0X2luc25fc2xvdCgpOworCQl1cCgma3Byb2JlX211dGV4KTsKIAkJaWYgKCFwLT5haW5zbi5pbnNuKQogCQkJcmV0ID0gLUVOT01FTTsKIAl9CkBAIC05MCw5ICs5MCw5IEBACiAKIHZvaWQgX19rcHJvYmVzIGFyY2hfcmVtb3ZlX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQogewotCXVwKCZrcHJvYmVfbXV0ZXgpOwotCWZyZWVfaW5zbl9zbG90KHAtPmFpbnNuLmluc24pOwogCWRvd24oJmtwcm9iZV9tdXRleCk7CisJZnJlZV9pbnNuX3Nsb3QocC0+YWluc24uaW5zbik7CisJdXAoJmtwcm9iZV9tdXRleCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwcmVwYXJlX3NpbmdsZXN0ZXAoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9tYWNoaW5lX2tleGVjLmMgYi9hcmNoL3BwYzY0L2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKaW5kZXggNDc3NWYxMi4uYmY3Y2M0ZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL21hY2hpbmVfa2V4ZWMuYwpAQCAtMjA1LDYgKzIwNSw3IEBACiAJCQljb250aW51ZTsKIAogCQl3aGlsZSAocGFjYVtpXS5od19jcHVfaWQgIT0gLTEpIHsKKwkJCWJhcnJpZXIoKTsKIAkJCWlmICghY3B1X3Bvc3NpYmxlKGkpKSB7CiAJCQkJcHJpbnRrKCJrZXhlYzogY3B1ICVkIGh3X2NwdV9pZCAlZCBpcyBub3QiCiAJCQkJCQkiIHBvc3NpYmxlLCBpZ25vcmluZ1xuIiwKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL21vZHVsZS5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvbW9kdWxlLmMKaW5kZXggYzY4M2JmOC4uOTI4Yjg1OCAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvbW9kdWxlLmMKQEAgLTM0MSw2ICszNDEsMTkgQEAKIAkJCSoodW5zaWduZWQgbG9uZyAqKWxvY2F0aW9uID0gbXlfcjIoc2VjaGRycywgbWUpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBSX1BQQzY0X1RPQzE2OgorCQkJLyogU3VidGFjdCBUT0MgcG9pbnRlciAqLworCQkJdmFsdWUgLT0gbXlfcjIoc2VjaGRycywgbWUpOworCQkJaWYgKHZhbHVlICsgMHg4MDAwID4gMHhmZmZmKSB7CisJCQkJcHJpbnRrKCIlczogYmFkIFRPQzE2IHJlbG9jYXRpb24gKCVsdSlcbiIsCisJCQkJICAgICAgIG1lLT5uYW1lLCB2YWx1ZSk7CisJCQkJcmV0dXJuIC1FTk9FWEVDOworCQkJfQorCQkJKigodWludDE2X3QgKikgbG9jYXRpb24pCisJCQkJPSAoKigodWludDE2X3QgKikgbG9jYXRpb24pICYgfjB4ZmZmZikKKwkJCQl8ICh2YWx1ZSAmIDB4ZmZmZik7CisJCQlicmVhazsKKwogCQljYXNlIFJfUFBDNjRfVE9DMTZfRFM6CiAJCQkvKiBTdWJ0YWN0IFRPQyBwb2ludGVyICovCiAJCQl2YWx1ZSAtPSBteV9yMihzZWNoZHJzLCBtZSk7CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9tcGljLmMgYi9hcmNoL3BwYzY0L2tlcm5lbC9tcGljLmMKaW5kZXggY2MyNjJhMC4uNWY1YmM3MyAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvbXBpYy5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL21waWMuYwpAQCAtNTA2LDggKzUwNiw4IEBACiAJbXBpYy0+c2Vuc2VzX2NvdW50ID0gc2Vuc2VzX2NvdW50OwogCiAJLyogTWFwIHRoZSBnbG9iYWwgcmVnaXN0ZXJzICovCi0JbXBpYy0+Z3JlZ3MgPSBpb3JlbWFwKHBoeXNfYWRkciArIE1QSUNfR1JFR19CQVNFLCAweDEwMDApOwotCW1waWMtPnRtcmVncyA9IG1waWMtPmdyZWdzICsgKE1QSUNfVElNRVJfQkFTRSA+PiAyKTsKKwltcGljLT5ncmVncyA9IGlvcmVtYXAocGh5c19hZGRyICsgTVBJQ19HUkVHX0JBU0UsIDB4MjAwMCk7CisJbXBpYy0+dG1yZWdzID0gbXBpYy0+Z3JlZ3MgKyAoKE1QSUNfVElNRVJfQkFTRSAtIE1QSUNfR1JFR19CQVNFKSA+PiAyKTsKIAlCVUdfT04obXBpYy0+Z3JlZ3MgPT0gTlVMTCk7CiAKIAkvKiBSZXNldCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvb2ZfZGV2aWNlLmMgYi9hcmNoL3BwYzY0L2tlcm5lbC9vZl9kZXZpY2UuYwppbmRleCBkYTU4MDgxLi45ZjIwMGYwIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9vZl9kZXZpY2UuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9vZl9kZXZpY2UuYwpAQCAtMjMzLDcgKzIzMyw5IEBACiAJZGV2aWNlX3VucmVnaXN0ZXIoJm9mZGV2LT5kZXYpOwogfQogCi1zdHJ1Y3Qgb2ZfZGV2aWNlKiBvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNvbnN0IGNoYXIgKmJ1c19pZCkKK3N0cnVjdCBvZl9kZXZpY2UqIG9mX3BsYXRmb3JtX2RldmljZV9jcmVhdGUoc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKmJ1c19pZCwKKwkJCQkJICAgIHN0cnVjdCBkZXZpY2UgKnBhcmVudCkKIHsKIAlzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXY7CiAKQEAgLTI0NSw3ICsyNDcsNyBAQAogCWRldi0+bm9kZSA9IG5wOwogCWRldi0+ZG1hX21hc2sgPSAweGZmZmZmZmZmVUw7CiAJZGV2LT5kZXYuZG1hX21hc2sgPSAmZGV2LT5kbWFfbWFzazsKLQlkZXYtPmRldi5wYXJlbnQgPSBOVUxMOworCWRldi0+ZGV2LnBhcmVudCA9IHBhcmVudDsKIAlkZXYtPmRldi5idXMgPSAmb2ZfcGxhdGZvcm1fYnVzX3R5cGU7CiAJZGV2LT5kZXYucmVsZWFzZSA9IG9mX3JlbGVhc2VfZGV2OwogCkBAIC0yNTksNiArMjYxLDcgQEAKIAlyZXR1cm4gZGV2OwogfQogCisKIEVYUE9SVF9TWU1CT0wob2ZfbWF0Y2hfZGV2aWNlKTsKIEVYUE9SVF9TWU1CT0wob2ZfcGxhdGZvcm1fYnVzX3R5cGUpOwogRVhQT1JUX1NZTUJPTChvZl9yZWdpc3Rlcl9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvcFNlcmllc19pb21tdS5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvcFNlcmllc19pb21tdS5jCmluZGV4IGYwZmQ3ZmIuLmQxN2YwMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3BTZXJpZXNfaW9tbXUuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9wU2VyaWVzX2lvbW11LmMKQEAgLTI2NSw4ICsyNjUsMTAgQEAKIAl0YmwtPml0X29mZnNldCA9IHBoYi0+ZG1hX3dpbmRvd19iYXNlX2N1ciA+PiBQQUdFX1NISUZUOwogCQogCS8qIFRlc3QgaWYgd2UgYXJlIGdvaW5nIG92ZXIgMkdCIG9mIERNQSBzcGFjZSAqLwotCWlmIChwaGItPmRtYV93aW5kb3dfYmFzZV9jdXIgKyBwaGItPmRtYV93aW5kb3dfc2l6ZSA+ICgxTCA8PCAzMSkpCisJaWYgKHBoYi0+ZG1hX3dpbmRvd19iYXNlX2N1ciArIHBoYi0+ZG1hX3dpbmRvd19zaXplID4gMHg4MDAwMDAwMHVsKSB7CisJCXVkYmdfcHJpbnRmKCJQQ0lfRE1BOiBVbmV4cGVjdGVkIG51bWJlciBvZiBJT0FzIHVuZGVyIHRoaXMgUEhCLlxuIik7CiAJCXBhbmljKCJQQ0lfRE1BOiBVbmV4cGVjdGVkIG51bWJlciBvZiBJT0FzIHVuZGVyIHRoaXMgUEhCLlxuIik7IAorCX0KIAkKIAlwaGItPmRtYV93aW5kb3dfYmFzZV9jdXIgKz0gcGhiLT5kbWFfd2luZG93X3NpemU7CiAKQEAgLTMxMCw5MiArMzEyLDg1IEBACiAKIHN0YXRpYyB2b2lkIGlvbW11X2J1c19zZXR1cF9wU2VyaWVzKHN0cnVjdCBwY2lfYnVzICpidXMpCiB7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpkbiwgKnBkbjsKLQlzdHJ1Y3QgcGNpX2RuICpwY2k7CisJc3RydWN0IGRldmljZV9ub2RlICpkbjsKIAlzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmlzYV9kbiwgKmlzYV9kbl9vcmlnOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqdG1wOworCXN0cnVjdCBwY2lfZG4gKnBjaTsKKwlpbnQgY2hpbGRyZW47CiAKIAlEQkcoImlvbW11X2J1c19zZXR1cF9wU2VyaWVzLCBidXMgJXAsIGJ1cy0+c2VsZiAlcFxuIiwgYnVzLCBidXMtPnNlbGYpOwogCi0JLyogRm9yIGVhY2ggKHJvb3QpIGJ1cywgd2UgY2FydmUgdXAgdGhlIGF2YWlsYWJsZSBETUEgc3BhY2UgaW4gMjU2TUIKLQkgKiBwaWVjZXMuIFNpbmNlIGVhY2ggcGllY2UgaXMgdXNlZCBieSBvbmUgKHN1YikgYnVzL2RldmljZSwgdGhhdCB3b3VsZAotCSAqIGdpdmUgYSBtYXhpbXVtIG9mIDcgZGV2aWNlcyBwZXIgUEhCLiBJbiBtb3N0IGNhc2VzLCB0aGlzIGlzIHBsZW50eS4KKwlkbiA9IHBjaV9idXNfdG9fT0Zfbm9kZShidXMpOworCXBjaSA9IFBDSV9ETihkbik7CisKKwlpZiAoYnVzLT5zZWxmKSB7CisJCS8qIFRoaXMgaXMgbm90IGEgcm9vdCBidXMsIGFueSBzZXR1cCB3aWxsIGJlIGRvbmUgZm9yIHRoZQorCQkgKiBkZXZpY2Utc2lkZSBvZiB0aGUgYnJpZGdlIGluIGlvbW11X2Rldl9zZXR1cF9wU2VyaWVzKCkuCisJCSAqLworCQlyZXR1cm47CisJfQorCisJLyogQ2hlY2sgaWYgdGhlIElTQSBidXMgb24gdGhlIHN5c3RlbSBpcyB1bmRlcgorCSAqIHRoaXMgUEhCLgorCSAqLworCWlzYV9kbiA9IGlzYV9kbl9vcmlnID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgImlzYSIpOworCisJd2hpbGUgKGlzYV9kbiAmJiBpc2FfZG4gIT0gZG4pCisJCWlzYV9kbiA9IGlzYV9kbi0+cGFyZW50OworCisJaWYgKGlzYV9kbl9vcmlnKQorCQlvZl9ub2RlX3B1dChpc2FfZG5fb3JpZyk7CisKKwkvKiBDb3VudCBudW1iZXIgb2YgZGlyZWN0IFBDSSBjaGlsZHJlbiBvZiB0aGUgUEhCLgorCSAqIEFsbCBQQ0kgZGV2aWNlIG5vZGVzIGhhdmUgY2xhc3MtY29kZSBwcm9wZXJ0eSwgc28gaXQncworCSAqIGFuIGVhc3kgd2F5IHRvIGZpbmQgdGhlbS4KKwkgKi8KKwlmb3IgKGNoaWxkcmVuID0gMCwgdG1wID0gZG4tPmNoaWxkOyB0bXA7IHRtcCA9IHRtcC0+c2libGluZykKKwkJaWYgKGdldF9wcm9wZXJ0eSh0bXAsICJjbGFzcy1jb2RlIiwgTlVMTCkpCisJCQljaGlsZHJlbisrOworCisJREJHKCJDaGlsZHJlbjogJWRcbiIsIGNoaWxkcmVuKTsKKworCS8qIENhbGN1bGF0ZSBhbW91bnQgb2YgRE1BIHdpbmRvdyBwZXIgc2xvdC4gRWFjaCB3aW5kb3cgbXVzdCBiZQorCSAqIGEgcG93ZXIgb2YgdHdvIChkdWUgdG8gcGNpX2FsbG9jX2NvbnNpc3RlbnQgcmVxdWlyZW1lbnRzKS4KIAkgKgotCSAqIFRoZSBleGNlcHRpb24gaXMgb24gUHl0aG9uIFBIQnMgKHByZS1QT1dFUjQpLiBIZXJlIHdlIGRvbid0IGhhdmUgRUFEUwotCSAqIGJyaWRnZXMgYmVsb3cgdGhlIFBIQiB0byBhbGxvY2F0ZSB0aGUgc2VjdGlvbmVkIHRhYmxlcyB0bywgc28gaW5zdGVhZAotCSAqIHdlIGFsbG9jYXRlIGEgMUdCIHRhYmxlIGF0IHRoZSBQSEIgbGV2ZWwuCisJICogS2VlcCAyNTZNQiBhc2lkZSBmb3IgUEhCcyB3aXRoIElTQS4KIAkgKi8KIAotCWRuID0gcGNpX2J1c190b19PRl9ub2RlKGJ1cyk7Ci0JcGNpID0gZG4tPmRhdGE7CisJaWYgKCFpc2FfZG4pIHsKKwkJLyogTm8gSVNBL0lERSAtIGp1c3Qgc2V0IHdpbmRvdyBzaXplIGFuZCByZXR1cm4gKi8KKwkJcGNpLT5waGItPmRtYV93aW5kb3dfc2l6ZSA9IDB4ODAwMDAwMDB1bDsgLyogVG8gYmUgZGl2aWRlZCAqLwogCi0JaWYgKCFidXMtPnNlbGYpIHsKLQkJLyogUm9vdCBidXMgKi8KLQkJaWYgKGlzX3B5dGhvbihkbikpIHsKLQkJCXVuc2lnbmVkIGludCAqaW9ob2xlOworCQl3aGlsZSAocGNpLT5waGItPmRtYV93aW5kb3dfc2l6ZSAqIGNoaWxkcmVuID4gMHg4MDAwMDAwMHVsKQorCQkJcGNpLT5waGItPmRtYV93aW5kb3dfc2l6ZSA+Pj0gMTsKKwkJREJHKCJObyBJU0EvSURFLCB3aW5kb3cgc2l6ZSBpcyAweCVseFxuIiwKKwkJCXBjaS0+cGhiLT5kbWFfd2luZG93X3NpemUpOworCQlwY2ktPnBoYi0+ZG1hX3dpbmRvd19iYXNlX2N1ciA9IDA7CiAKLQkJCURCRygiUHl0aG9uIHJvb3QgYnVzICVzXG4iLCBidXMtPm5hbWUpOwotCi0JCQlpb2hvbGUgPSAodW5zaWduZWQgaW50ICopZ2V0X3Byb3BlcnR5KGRuLCAiaW8taG9sZSIsIDApOwotCi0JCQlpZiAoaW9ob2xlKSB7Ci0JCQkJLyogT24gZmlyc3QgYnVzIHdlIG5lZWQgdG8gbGVhdmUgcm9vbSBmb3IgdGhlCi0JCQkJICogSVNBIGFkZHJlc3Mgc3BhY2UuIEp1c3Qgc2tpcCB0aGUgZmlyc3QgMjU2TUIKLQkJCQkgKiBhbGx0b2dldGhlci4gVGhpcyBsZWF2ZXMgNzY4TUIgZm9yIHRoZSB3aW5kb3cuCi0JCQkJICovCi0JCQkJREJHKCJQSEIgaGFzIGlvLWhvbGUsIHJlc2VydmluZyAyNTZNQlxuIik7Ci0JCQkJcGNpLT5waGItPmRtYV93aW5kb3dfc2l6ZSA9IDMgPDwgMjg7Ci0JCQkJcGNpLT5waGItPmRtYV93aW5kb3dfYmFzZV9jdXIgPSAxIDw8IDI4OwotCQkJfSBlbHNlIHsKLQkJCQkvKiAxR0Igd2luZG93IGJ5IGRlZmF1bHQgKi8KLQkJCQlwY2ktPnBoYi0+ZG1hX3dpbmRvd19zaXplID0gMSA8PCAzMDsKLQkJCQlwY2ktPnBoYi0+ZG1hX3dpbmRvd19iYXNlX2N1ciA9IDA7Ci0JCQl9Ci0KLQkJCXRibCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpb21tdV90YWJsZSksIEdGUF9LRVJORUwpOwotCi0JCQlpb21tdV90YWJsZV9zZXRwYXJtcyhwY2ktPnBoYiwgZG4sIHRibCk7Ci0JCQlwY2ktPmlvbW11X3RhYmxlID0gaW9tbXVfaW5pdF90YWJsZSh0YmwpOwotCQl9IGVsc2UgewotCQkJLyogRG8gYSAxMjhNQiB0YWJsZSBhdCByb290LiBUaGlzIGlzIHVzZWQgZm9yIHRoZSBJREUKLQkJCSAqIGNvbnRyb2xsZXIgb24gc29tZSBTTVAtbW9kZSBQT1dFUjQgbWFjaGluZXMuIEl0Ci0JCQkgKiBkb2Vzbid0IGh1cnQgdG8gYWxsb2NhdGUgaXQgb24gb3RoZXIgbWFjaGluZXMKLQkJCSAqIC0tIGl0J2xsIGp1c3QgYmUgdW51c2VkIHNpbmNlIG5ldyB0YWJsZXMgYXJlCi0JCQkgKiBhbGxvY2F0ZWQgb24gdGhlIEVBRFMgbGV2ZWwuCi0JCQkgKgotCQkJICogQWxsb2NhdGUgYXQgb2Zmc2V0IDEyOE1CIHRvIGF2b2lkIGhhdmluZyB0byBkZWFsCi0JCQkgKiB3aXRoIElTQSBob2xlczsgMTI4TUIgdGFibGUgZm9yIElERSBpcyBwbGVudHkuCi0JCQkgKi8KLQkJCXBjaS0+cGhiLT5kbWFfd2luZG93X3NpemUgPSAxIDw8IDI3OwotCQkJcGNpLT5waGItPmRtYV93aW5kb3dfYmFzZV9jdXIgPSAxIDw8IDI3OwotCi0JCQl0YmwgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW9tbXVfdGFibGUpLCBHRlBfS0VSTkVMKTsKLQotCQkJaW9tbXVfdGFibGVfc2V0cGFybXMocGNpLT5waGIsIGRuLCB0YmwpOwotCQkJcGNpLT5pb21tdV90YWJsZSA9IGlvbW11X2luaXRfdGFibGUodGJsKTsKLQotCQkJLyogQWxsIGNoaWxkIGJ1c2VzIGhhdmUgMjU2TUIgdGFibGVzICovCi0JCQlwY2ktPnBoYi0+ZG1hX3dpbmRvd19zaXplID0gMSA8PCAyODsKLQkJfQotCX0gZWxzZSB7Ci0JCXBkbiA9IHBjaV9idXNfdG9fT0Zfbm9kZShidXMtPnBhcmVudCk7Ci0KLQkJaWYgKCFidXMtPnBhcmVudC0+c2VsZiAmJiAhaXNfcHl0aG9uKHBkbikpIHsKLQkJCXN0cnVjdCBpb21tdV90YWJsZSAqdGJsOwotCQkJLyogRmlyc3QgY2hpbGQgYW5kIG5vdCBweXRob24gbWVhbnMgdGhpcyBpcyB0aGUgRUFEUwotCQkJICogbGV2ZWwuIEFsbG9jYXRlIG5ldyB0YWJsZSBmb3IgdGhpcyBzbG90IHdpdGggMjU2TUIKLQkJCSAqIHdpbmRvdy4KLQkJCSAqLwotCi0JCQl0YmwgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW9tbXVfdGFibGUpLCBHRlBfS0VSTkVMKTsKLQotCQkJaW9tbXVfdGFibGVfc2V0cGFybXMocGNpLT5waGIsIGRuLCB0YmwpOwotCi0JCQlwY2ktPmlvbW11X3RhYmxlID0gaW9tbXVfaW5pdF90YWJsZSh0YmwpOwotCQl9IGVsc2UgewotCQkJLyogTG93ZXIgdGhhbiBmaXJzdCBjaGlsZCBvciB1bmRlciBweXRob24sIHVzZSBwYXJlbnQgdGFibGUgKi8KLQkJCXBjaS0+aW9tbXVfdGFibGUgPSBQQ0lfRE4ocGRuKS0+aW9tbXVfdGFibGU7Ci0JCX0KKwkJcmV0dXJuOwogCX0KKworCS8qIElmIHdlIGhhdmUgSVNBLCB0aGVuIHdlIHByb2JhYmx5IGhhdmUgYW4gSURFCisJICogY29udHJvbGxlciB0b28uIEFsbG9jYXRlIGEgMTI4TUIgdGFibGUgYnV0CisJICogc2tpcCB0aGUgZmlyc3QgMTI4TUIgdG8gYXZvaWQgc3RlcHBpbmcgb24gSVNBCisJICogc3BhY2UuCisJICovCisJcGNpLT5waGItPmRtYV93aW5kb3dfc2l6ZSA9IDB4ODAwMDAwMHVsOworCXBjaS0+cGhiLT5kbWFfd2luZG93X2Jhc2VfY3VyID0gMHg4MDAwMDAwdWw7CisKKwl0YmwgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW9tbXVfdGFibGUpLCBHRlBfS0VSTkVMKTsKKworCWlvbW11X3RhYmxlX3NldHBhcm1zKHBjaS0+cGhiLCBkbiwgdGJsKTsKKwlwY2ktPmlvbW11X3RhYmxlID0gaW9tbXVfaW5pdF90YWJsZSh0YmwpOworCisJLyogRGl2aWRlIHRoZSByZXN0ICgxLjc1R0IpIGFtb25nIHRoZSBjaGlsZHJlbiAqLworCXBjaS0+cGhiLT5kbWFfd2luZG93X3NpemUgPSAweDgwMDAwMDAwdWw7CisJd2hpbGUgKHBjaS0+cGhiLT5kbWFfd2luZG93X3NpemUgKiBjaGlsZHJlbiA+IDB4NzAwMDAwMDB1bCkKKwkJcGNpLT5waGItPmRtYV93aW5kb3dfc2l6ZSA+Pj0gMTsKKworCURCRygiSVNBL0lERSwgd2luZG93IHNpemUgaXMgMHglbHhcbiIsIHBjaS0+cGhiLT5kbWFfd2luZG93X3NpemUpOworCiB9CiAKIApAQCAtNDQ2LDIxICs0NDEsMzYgQEAKIHN0YXRpYyB2b2lkIGlvbW11X2Rldl9zZXR1cF9wU2VyaWVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpkbiwgKm15ZG47CisJc3RydWN0IGlvbW11X3RhYmxlICp0Ymw7CiAKLQlEQkcoImlvbW11X2Rldl9zZXR1cF9wU2VyaWVzLCBkZXYgJXAgKCVzKVxuIiwgZGV2LCBkZXYtPnByZXR0eV9uYW1lKTsKLQkvKiBOb3cgY29weSB0aGUgaW9tbXVfdGFibGUgcHRyIGZyb20gdGhlIGJ1cyBkZXZpY2UgZG93biB0byB0aGUKLQkgKiBwY2kgZGV2aWNlX25vZGUuICBUaGlzIG1lYW5zIGdldF9pb21tdV90YWJsZSgpIHdvbid0IG5lZWQgdG8gc2VhcmNoCi0JICogdXAgdGhlIGRldmljZSB0cmVlIHRvIGZpbmQgaXQuCi0JICovCisJREJHKCJpb21tdV9kZXZfc2V0dXBfcFNlcmllcywgZGV2ICVwICglcylcbiIsIGRldiwgcGNpX25hbWUoZGV2KSk7CisKIAlteWRuID0gZG4gPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKIAorCS8qIElmIHdlJ3JlIHRoZSBkaXJlY3QgY2hpbGQgb2YgYSByb290IGJ1cywgdGhlbiB3ZSBuZWVkIHRvIGFsbG9jYXRlCisJICogYW4gaW9tbXUgdGFibGUgb3Vyc2VsdmVzLiBUaGUgYnVzIHNldHVwIGNvZGUgc2hvdWxkIGhhdmUgc2V0dXAKKwkgKiB0aGUgd2luZG93IHNpemVzIGFscmVhZHkuCisJICovCisJaWYgKCFkZXYtPmJ1cy0+c2VsZikgeworCQlEQkcoIiAtLT4gZmlyc3QgY2hpbGQsIG5vIGJyaWRnZS4gQWxsb2NhdGluZyBpb21tdSB0YWJsZS5cbiIpOworCQl0YmwgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW9tbXVfdGFibGUpLCBHRlBfS0VSTkVMKTsKKwkJaW9tbXVfdGFibGVfc2V0cGFybXMoUENJX0ROKGRuKS0+cGhiLCBkbiwgdGJsKTsKKwkJUENJX0ROKG15ZG4pLT5pb21tdV90YWJsZSA9IGlvbW11X2luaXRfdGFibGUodGJsKTsKKworCQlyZXR1cm47CisJfQorCisJLyogSWYgdGhpcyBkZXZpY2UgaXMgZnVydGhlciBkb3duIHRoZSBidXMgdHJlZSwgc2VhcmNoIHVwd2FyZHMgdW50aWwKKwkgKiBhbiBhbHJlYWR5IGFsbG9jYXRlZCBpb21tdSB0YWJsZSBpcyBmb3VuZCBhbmQgdXNlIHRoYXQuCisJICovCisKIAl3aGlsZSAoZG4gJiYgZG4tPmRhdGEgJiYgUENJX0ROKGRuKS0+aW9tbXVfdGFibGUgPT0gTlVMTCkKIAkJZG4gPSBkbi0+cGFyZW50OwogCiAJaWYgKGRuICYmIGRuLT5kYXRhKSB7CiAJCVBDSV9ETihteWRuKS0+aW9tbXVfdGFibGUgPSBQQ0lfRE4oZG4pLT5pb21tdV90YWJsZTsKIAl9IGVsc2UgewotCQlEQkcoImlvbW11X2Rldl9zZXR1cF9wU2VyaWVzLCBkZXYgJXAgKCVzKSBoYXMgbm8gaW9tbXUgdGFibGVcbiIsIGRldiwgZGV2LT5wcmV0dHlfbmFtZSk7CisJCURCRygiaW9tbXVfZGV2X3NldHVwX3BTZXJpZXMsIGRldiAlcCAoJXMpIGhhcyBubyBpb21tdSB0YWJsZVxuIiwgZGV2LCBwY2lfbmFtZShkZXYpKTsKIAl9CiB9CiAKQEAgLTQ5NCw3ICs1MDQsNyBAQAogCWludCAqZG1hX3dpbmRvdyA9IE5VTEw7CiAJc3RydWN0IHBjaV9kbiAqcGNpOwogCi0JREJHKCJpb21tdV9kZXZfc2V0dXBfcFNlcmllc0xQLCBkZXYgJXAgKCVzKVxuIiwgZGV2LCBkZXYtPnByZXR0eV9uYW1lKTsKKwlEQkcoImlvbW11X2Rldl9zZXR1cF9wU2VyaWVzTFAsIGRldiAlcCAoJXMpXG4iLCBkZXYsIHBjaV9uYW1lKGRldikpOwogCiAJLyogZGV2IHNldHVwIGZvciBMUEFSIGlzIGEgbGl0dGxlIHRyaWNreSwgc2luY2UgdGhlIGRldmljZSB0cmVlIG1pZ2h0CiAJICogY29udGFpbiB0aGUgZG1hLXdpbmRvdyBwcm9wZXJ0aWVzIHBlci1kZXZpY2UgYW5kIG5vdCBuZWNjZXNhcmlseQpAQCAtNTE2LDkgKzUyNiw4IEBACiAJICogc2xvdHMgb24gUE9XRVI0IG1hY2hpbmVzLgogCSAqLwogCWlmIChkbWFfd2luZG93ID09IE5VTEwgfHwgcGRuLT5wYXJlbnQgPT0gTlVMTCkgewotCQkvKiBGYWxsIGJhY2sgdG8gcmVndWxhciAobm9uLUxQQVIpIGRldiBzZXR1cCAqLwotCQlEQkcoIk5vIGRtYSB3aW5kb3cgZm9yIGRldmljZSwgZmFsbGluZyBiYWNrIHRvIHJlZ3VsYXIgc2V0dXBcbiIpOwotCQlpb21tdV9kZXZfc2V0dXBfcFNlcmllcyhkZXYpOworCQlEQkcoIk5vIGRtYSB3aW5kb3cgZm9yIGRldmljZSwgbGlua2luZyB0byBwYXJlbnRcbiIpOworCQlQQ0lfRE4oZG4pLT5pb21tdV90YWJsZSA9IFBDSV9ETihwZG4pLT5pb21tdV90YWJsZTsKIAkJcmV0dXJuOwogCX0gZWxzZSB7CiAJCURCRygiRm91bmQgRE1BIHdpbmRvdywgYWxsb2NhdGluZyB0YWJsZVxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9wU2VyaWVzX3BjaS5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvcFNlcmllc19wY2kuYwppbmRleCAxZjVmMTQxLi45MjhmOGZlIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9wU2VyaWVzX3BjaS5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3BTZXJpZXNfcGNpLmMKQEAgLTMyLDcgKzMyLDcgQEAKIAogI2luY2x1ZGUgInBjaS5oIgogCi1zdGF0aWMgaW50IF9faW5pdGRhdGEgczdhX3dvcmthcm91bmQgPSAtMTsKK3N0YXRpYyBpbnQgX19kZXZpbml0ZGF0YSBzN2Ffd29ya2Fyb3VuZCA9IC0xOwogCiAjaWYgMAogdm9pZCBwY2liaW9zX25hbWVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCkBAIC02MCw3ICs2MCw3IEBACiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGNpYmlvc19uYW1lX2RldmljZSk7CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgX19pbml0IGNoZWNrX3M3YSh2b2lkKQorc3RhdGljIHZvaWQgX19kZXZpbml0IGNoZWNrX3M3YSh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdDsKIAljaGFyICptb2RlbDsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3BjaS5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvcGNpLmMKaW5kZXggODYxMTM4YS4uZmY0YmUxZCAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvcGNpLmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvcGNpLmMKQEAgLTI0NiwxMSArMjQ2LDE0IEBACiAJdW5zaWduZWQgaW50IGZsYWdzID0gMDsKIAogCWlmIChhZGRyMCAmIDB4MDIwMDAwMDApIHsKLQkJZmxhZ3MgfD0gSU9SRVNPVVJDRV9NRU07CisJCWZsYWdzID0gSU9SRVNPVVJDRV9NRU0gfCBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX01FTU9SWTsKKwkJZmxhZ3MgfD0gKGFkZHIwID4+IDIyKSAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfNjQ7CisJCWZsYWdzIHw9IChhZGRyMCA+PiAyOCkgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzFNOwogCQlpZiAoYWRkcjAgJiAweDQwMDAwMDAwKQotCQkJZmxhZ3MgfD0gSU9SRVNPVVJDRV9QUkVGRVRDSDsKKwkJCWZsYWdzIHw9IElPUkVTT1VSQ0VfUFJFRkVUQ0gKKwkJCQkgfCBQQ0lfQkFTRV9BRERSRVNTX01FTV9QUkVGRVRDSDsKIAl9IGVsc2UgaWYgKGFkZHIwICYgMHgwMTAwMDAwMCkKLQkJZmxhZ3MgfD0gSU9SRVNPVVJDRV9JTzsKKwkJZmxhZ3MgPSBJT1JFU09VUkNFX0lPIHwgUENJX0JBU0VfQUREUkVTU19TUEFDRV9JTzsKIAlyZXR1cm4gZmxhZ3M7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3BjaV9kaXJlY3RfaW9tbXUuYyBiL2FyY2gvcHBjNjQva2VybmVsL3BjaV9kaXJlY3RfaW9tbXUuYwppbmRleCBiOGY3ZjU4Li41NDA1NWM4IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9wY2lfZGlyZWN0X2lvbW11LmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvcGNpX2RpcmVjdF9pb21tdS5jCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAicGNpLmgiCiAKIHN0YXRpYyB2b2lkICpwY2lfZGlyZWN0X2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCQkgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZykKKwkJCQkgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKQogewogCXZvaWQgKnJldDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvcGNpX2lvbW11LmMgYi9hcmNoL3BwYzY0L2tlcm5lbC9wY2lfaW9tbXUuYwppbmRleCAxNDY0N2UwLi5kOWUzM2I3IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9wY2lfaW9tbXUuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9wY2lfaW9tbXUuYwpAQCAtNzYsNyArNzYsNyBAQAogICogdG8gdGhlIGRtYSBhZGRyZXNzIChtYXBwaW5nKSBvZiB0aGUgZmlyc3QgcGFnZS4KICAqLwogc3RhdGljIHZvaWQgKnBjaV9pb21tdV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc2l6ZV90IHNpemUsCi0JCQkgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZykKKwkJCSAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWcpCiB7CiAJcmV0dXJuIGlvbW11X2FsbG9jX2NvaGVyZW50KGRldm5vZGVfdGFibGUoaHdkZXYpLCBzaXplLCBkbWFfaGFuZGxlLAogCQkJZmxhZyk7CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9wbWFjX3NldHVwLmMgYi9hcmNoL3BwYzY0L2tlcm5lbC9wbWFjX3NldHVwLmMKaW5kZXggMzI1NDI2Yy4uZmE4MTIxZCAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvcG1hY19zZXR1cC5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3BtYWNfc2V0dXAuYwpAQCAtMTE1LDcgKzExNSw3IEBACiAJCiAJLyogZmluZCBtb3RoZXJib2FyZCB0eXBlICovCiAJc2VxX3ByaW50ZihtLCAibWFjaGluZVx0XHQ6ICIpOwotCW5wID0gZmluZF9kZXZpY2VzKCJkZXZpY2UtdHJlZSIpOworCW5wID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKIAlpZiAobnAgIT0gTlVMTCkgewogCQlwcCA9IChjaGFyICopIGdldF9wcm9wZXJ0eShucCwgIm1vZGVsIiwgTlVMTCk7CiAJCWlmIChwcCAhPSBOVUxMKQpAQCAtMTMzLDYgKzEzMyw3IEBACiAJCQl9CiAJCQlzZXFfcHJpbnRmKG0sICJcbiIpOwogCQl9CisJCW9mX25vZGVfcHV0KG5wKTsKIAl9IGVsc2UKIAkJc2VxX3ByaW50ZihtLCAiUG93ZXJNYWNcbiIpOwogCkBAIC00MzQsMTUgKzQzNSwyMyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBwbWFjX2RlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyh2b2lkKQogewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJc3RydWN0IGRldmljZV9ub2RlICpucCwgKm5wcDsKIAotCW5wID0gZmluZF9kZXZpY2VzKCJ1MyIpOwotCWlmIChucCkgewotCQlmb3IgKG5wID0gbnAtPmNoaWxkOyBucCAhPSBOVUxMOyBucCA9IG5wLT5zaWJsaW5nKQorCW5wcCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJ1MyIpOworCWlmIChucHApIHsKKwkJZm9yIChucCA9IE5VTEw7IChucCA9IG9mX2dldF9uZXh0X2NoaWxkKG5wcCwgbnApKSAhPSBOVUxMOykgewogCQkJaWYgKHN0cm5jbXAobnAtPm5hbWUsICJpMmMiLCAzKSA9PSAwKSB7Ci0JCQkJb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShucCwgInUzLWkyYyIpOworCQkJCW9mX3BsYXRmb3JtX2RldmljZV9jcmVhdGUobnAsICJ1My1pMmMiLCBOVUxMKTsKKwkJCQlvZl9ub2RlX3B1dChucCk7CiAJCQkJYnJlYWs7CiAJCQl9CisJCX0KKwkJb2Zfbm9kZV9wdXQobnBwKTsKKwl9CisgICAgICAgIG5wcCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJzbXUiKTsKKyAgICAgICAgaWYgKG5wcCkgeworCQlvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKG5wcCwgInNtdSIsIE5VTEwpOworCQlvZl9ub2RlX3B1dChucHApOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvcG1hY190aW1lLmMgYi9hcmNoL3BwYzY0L2tlcm5lbC9wbWFjX3RpbWUuYwppbmRleCAzMDU5ZWRiLi40MWJiYjhjIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9wbWFjX3RpbWUuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9wbWFjX3RpbWUuYwpAQCAtODQsNyArODQsNyBAQAogCiAjaWZkZWYgQ09ORklHX1BNQUNfU01VCiAJY2FzZSBTWVNfQ1RSTEVSX1NNVToKLQkJc211X2dldF9ydGNfdGltZSh0bSk7CisJCXNtdV9nZXRfcnRjX3RpbWUodG0sIDEpOwogCQlicmVhazsKICNlbmRpZiAvKiBDT05GSUdfUE1BQ19TTVUgKi8KIAlkZWZhdWx0OgpAQCAtMTI4LDcgKzEyOCw3IEBACiAKICNpZmRlZiBDT05GSUdfUE1BQ19TTVUKIAljYXNlIFNZU19DVFJMRVJfU01VOgotCQlyZXR1cm4gc211X3NldF9ydGNfdGltZSh0bSk7CisJCXJldHVybiBzbXVfc2V0X3J0Y190aW1lKHRtLCAxKTsKICNlbmRpZiAvKiBDT05GSUdfUE1BQ19TTVUgKi8KIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Byb21faW5pdC5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvcHJvbV9pbml0LmMKaW5kZXggOTk3OTkxOS4uZjI1MjY3MCAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvcHJvbV9pbml0LmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvcHJvbV9pbml0LmMKQEAgLTE3MTEsNiArMTcxMSw3IEBACiAJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSByZWxvY19vZmZzZXQoKTsKIAl1bnNpZ25lZCBsb25nIG1lbV9zdGFydCwgbWVtX2VuZCwgcm9vbTsKIAlzdHJ1Y3QgYm9vdF9wYXJhbV9oZWFkZXIgKmhkcjsKKwlzdHJ1Y3QgcHJvbV90ICpfcHJvbSA9IFBUUlJFTE9DKCZwcm9tKTsKIAljaGFyICpuYW1lcDsKIAl1NjQgKnJzdm1hcDsKIApAQCAtMTc2NSw2ICsxNzY2LDcgQEAKIAlSRUxPQyhkdF9zdHJ1Y3RfZW5kKSA9IFBBR0VfQUxJR04obWVtX3N0YXJ0KTsKIAogCS8qIEZpbmlzaCBoZWFkZXIgKi8KKwloZHItPmJvb3RfY3B1aWRfcGh5cyA9IF9wcm9tLT5jcHU7CiAJaGRyLT5tYWdpYyA9IE9GX0RUX0hFQURFUjsKIAloZHItPnRvdGFsc2l6ZSA9IFJFTE9DKGR0X3N0cnVjdF9lbmQpIC0gUkVMT0MoZHRfaGVhZGVyX3N0YXJ0KTsKIAloZHItPm9mZl9kdF9zdHJ1Y3QgPSBSRUxPQyhkdF9zdHJ1Y3Rfc3RhcnQpIC0gUkVMT0MoZHRfaGVhZGVyX3N0YXJ0KTsKQEAgLTE4NTQsNyArMTg1Niw2IEBACiAKIAljcHVfcGtnID0gY2FsbF9wcm9tKCJpbnN0YW5jZS10by1wYWNrYWdlIiwgMSwgMSwgcHJvbV9jcHUpOwogCi0JcHJvbV9zZXRwcm9wKGNwdV9wa2csICJsaW51eCxib290LWNwdSIsIE5VTEwsIDApOwogCXByb21fZ2V0cHJvcChjcHVfcGtnLCAicmVnIiwgJmdldHByb3BfcnZhbCwgc2l6ZW9mKGdldHByb3BfcnZhbCkpOwogCV9wcm9tLT5jcHUgPSBnZXRwcm9wX3J2YWw7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvcHRyYWNlLmMKaW5kZXggODVlZDMxOC4uYjFjMDQ0YyAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvcHRyYWNlLmMKQEAgLTIxOSw2ICsyMTksNyBAQAogCiAJY2FzZSBQVFJBQ0VfU0VUX0RFQlVHUkVHOgogCQlyZXQgPSBwdHJhY2Vfc2V0X2RlYnVncmVnKGNoaWxkLCBhZGRyLCBkYXRhKTsKKwkJYnJlYWs7CiAKIAljYXNlIFBUUkFDRV9ERVRBQ0g6CiAJCXJldCA9IHB0cmFjZV9kZXRhY2goY2hpbGQsIGRhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdGltZS5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvdGltZS5jCmluZGV4IDk5MzljMjAuLmI1NmM2YTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC90aW1lLmMKQEAgLTg3MCw3ICs4NzAsNyBAQAogCXJiID0gKChyYSArIGIpIC0gKHggKiBkaXZpc29yKSkgPDwgMzI7CiAKIAl5ID0gKHJiICsgYykvZGl2aXNvcjsKLQlyYyA9ICgocmIgKyBiKSAtICh5ICogZGl2aXNvcikpIDw8IDMyOworCXJjID0gKChyYiArIGMpIC0gKHkgKiBkaXZpc29yKSkgPDwgMzI7CiAKIAl6ID0gKHJjICsgZCkvZGl2aXNvcjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL2dldHRpbWVvZmRheS5TIGIvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL2dldHRpbWVvZmRheS5TCmluZGV4IDA3ZjFjMWM2Li5lMjQzYzFkIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvZ2V0dGltZW9mZGF5LlMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL2dldHRpbWVvZmRheS5TCkBAIC0xMDksNyArMTA5LDcgQEAKIAlsd3oJcjYsKENGR19UQl9UT19YUys0KShyOSkKIAltdWxod3UJcjQscjcscjUKIAltdWxod3UJcjYscjcscjYKLQltdWxsdwlyNixyNyxyNQorCW11bGx3CXIwLHI3LHI1CiAJYWRkYwlyNixyNixyMAogCiAJLyogQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSB0aGUgc2NhbGVkIHhzZWMgdmFsdWUgaW4gcjQgKyBYRVI6Q0EKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Zpby5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvdmlvLmMKaW5kZXggYzkwZTFkZC4uMGU1NTViNyAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvdmlvLmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvdmlvLmMKQEAgLTIxOCw3ICsyMTgsNyBAQAogfQogCiBzdGF0aWMgdm9pZCAqdmlvX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCi0JCQkgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZykKKwkJCSAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWcpCiB7CiAJcmV0dXJuIGlvbW11X2FsbG9jX2NvaGVyZW50KHRvX3Zpb19kZXYoZGV2KS0+aW9tbXVfdGFibGUsIHNpemUsCiAJCQlkbWFfaGFuZGxlLCBmbGFnKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQvbGliL01ha2VmaWxlIGIvYXJjaC9wcGM2NC9saWIvTWFrZWZpbGUKaW5kZXggNzZmYmZhOS4uMGI2ZTk2NyAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC9wcGM2NC9saWIvTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIE1ha2VmaWxlIGZvciBwcGM2NC1zcGVjaWZpYyBsaWJyYXJ5IGZpbGVzLi4KICMKIAotbGliLXkgOj0gY2hlY2tzdW0ubyBkZWNfYW5kX2xvY2subyBzdHJpbmcubyBzdHJjYXNlLm8KK2xpYi15IDo9IGNoZWNrc3VtLm8gc3RyaW5nLm8gc3RyY2FzZS5vCiBsaWIteSArPSBjb3B5cGFnZS5vIG1lbWNweS5vIGNvcHl1c2VyLm8gdXNlcmNvcHkubwogCiAjIExvY2sgcHJpbWl0aXZlcyBhcmUgZGVmaW5lZCBhcyBuby1vcHMgaW4gaW5jbHVkZS9saW51eC9zcGlubG9jay5oCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2xpYi9kZWNfYW5kX2xvY2suYyBiL2FyY2gvcHBjNjQvbGliL2RlY19hbmRfbG9jay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjlkNGRhLi4wMDAwMDAwCi0tLSBhL2FyY2gvcHBjNjQvbGliL2RlY19hbmRfbG9jay5jCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIHBwYzY0IHZlcnNpb24gb2YgYXRvbWljX2RlY19hbmRfbG9jaygpIHVzaW5nIGNtcHhjaGcKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0KLS8qCi0gKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBub3Rpb24gb2YgImRlY3JlbWVudCBhCi0gKiByZWZlcmVuY2UgY291bnQsIGFuZCByZXR1cm4gbG9ja2VkIGlmIGl0IGRlY3JlbWVudGVkIHRvIHplcm8iLgotICoKLSAqIFRoaXMgaW1wbGVtZW50YXRpb24gY2FuIGJlIHVzZWQgb24gYW55IGFyY2hpdGVjdHVyZSB0aGF0Ci0gKiBoYXMgYSBjbXB4Y2hnLCBhbmQgd2hlcmUgYXRvbWljLT52YWx1ZSBpcyBhbiBpbnQgaG9sZGluZwotICogdGhlIHZhbHVlIG9mIHRoZSBhdG9taWMgKGkuZS4gdGhlIGhpZ2ggYml0cyBhcmVuJ3QgdXNlZAotICogZm9yIGEgbG9jayBvciBhbnl0aGluZyBsaWtlIHRoYXQpLgotICovCi1pbnQgX2F0b21pY19kZWNfYW5kX2xvY2soYXRvbWljX3QgKmF0b21pYywgc3BpbmxvY2tfdCAqbG9jaykKLXsKLQlpbnQgY291bnRlcjsKLQlpbnQgbmV3Y291bnQ7Ci0KLQlmb3IgKDs7KSB7Ci0JCWNvdW50ZXIgPSBhdG9taWNfcmVhZChhdG9taWMpOwotCQluZXdjb3VudCA9IGNvdW50ZXIgLSAxOwotCQlpZiAoIW5ld2NvdW50KQotCQkJYnJlYWs7CQkvKiBkbyBpdCB0aGUgc2xvdyB3YXkgKi8KLQotCQluZXdjb3VudCA9IGNtcHhjaGcoJmF0b21pYy0+Y291bnRlciwgY291bnRlciwgbmV3Y291bnQpOwotCQlpZiAobmV3Y291bnQgPT0gY291bnRlcikKLQkJCXJldHVybiAwOwotCX0KLQotCXNwaW5fbG9jayhsb2NrKTsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdChhdG9taWMpKQotCQlyZXR1cm4gMTsKLQlzcGluX3VubG9jayhsb2NrKTsKLQlyZXR1cm4gMDsKLX0KLQotRVhQT1JUX1NZTUJPTChfYXRvbWljX2RlY19hbmRfbG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L21tL2ZhdWx0LmMgYi9hcmNoL3BwYzY0L21tL2ZhdWx0LmMKaW5kZXggN2ZiYzY4Yi4uYmUzZjI1YyAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvcHBjNjQvbW0vZmF1bHQuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KKyNpbmNsdWRlIDxhc20vc2lnaW5mby5oPgogCiAvKgogICogQ2hlY2sgd2hldGhlciB0aGUgaW5zdHJ1Y3Rpb24gYXQgcmVncy0+bmlwIGlzIGEgc3RvcmUgdXNpbmcKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQvbW0vaGFzaF9uYXRpdmUuYyBiL2FyY2gvcHBjNjQvbW0vaGFzaF9uYXRpdmUuYwppbmRleCA3NjI2YmI1Li5iZmQzODViIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L21tL2hhc2hfbmF0aXZlLmMKKysrIGIvYXJjaC9wcGM2NC9tbS9oYXNoX25hdGl2ZS5jCkBAIC0zNDMsOSArMzQzLDcgQEAKIAlocHRlX3QgKmhwdGVwOwogCXVuc2lnbmVkIGxvbmcgaHB0ZV92OwogCXN0cnVjdCBwcGM2NF90bGJfYmF0Y2ggKmJhdGNoID0gJl9fZ2V0X2NwdV92YXIocHBjNjRfdGxiX2JhdGNoKTsKLQotCS8qIFhYWCBmaXggZm9yIGxhcmdlIHB0ZXMgKi8KLQl1bnNpZ25lZCBsb25nIGxhcmdlID0gMDsKKwl1bnNpZ25lZCBsb25nIGxhcmdlID0gYmF0Y2gtPmxhcmdlOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCkBAIC00MDcsNyArNDA1LDcgQEAKIAkJYXNtIHZvbGF0aWxlKCJwdGVzeW5jIjo6OiJtZW1vcnkiKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgajsgaSsrKQotCQkJX190bGJpZShiYXRjaC0+dmFkZHJbaV0sIDApOworCQkJX190bGJpZShiYXRjaC0+dmFkZHJbaV0sIGxhcmdlKTsKIAogCQlhc20gdm9sYXRpbGUoImVpZWlvOyB0bGJzeW5jOyBwdGVzeW5jIjo6OiJtZW1vcnkiKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9wcGM2NC9tbS9odWdldGxicGFnZS5jCmluZGV4IDMzODc3MWUuLjBlYTA5OTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQvbW0vaHVnZXRsYnBhZ2UuYworKysgYi9hcmNoL3BwYzY0L21tL2h1Z2V0bGJwYWdlLmMKQEAgLTcxMCwxMCArNzEwLDEzIEBACiAJCQlocHRlX2dyb3VwID0gKCh+aGFzaCAmIGh0YWJfaGFzaF9tYXNrKSAqCiAJCQkJICAgICAgSFBURVNfUEVSX0dST1VQKSAmIH4weDdVTDsgCiAJCQlzbG90ID0gcHBjX21kLmhwdGVfaW5zZXJ0KGhwdGVfZ3JvdXAsIHZhLCBwcnBuLAotCQkJCQkJICBIUFRFX1ZfTEFSR0UsIHJmbGFncyk7CisJCQkJCQkgIEhQVEVfVl9MQVJHRSB8CisJCQkJCQkgIEhQVEVfVl9TRUNPTkRBUlksCisJCQkJCQkgIHJmbGFncyk7CiAJCQlpZiAoc2xvdCA9PSAtMSkgewogCQkJCWlmIChtZnRiKCkgJiAweDEpCi0JCQkJCWhwdGVfZ3JvdXAgPSAoKGhhc2ggJiBodGFiX2hhc2hfbWFzaykgKiBIUFRFU19QRVJfR1JPVVApICYgfjB4N1VMOworCQkJCQlocHRlX2dyb3VwID0gKChoYXNoICYgaHRhYl9oYXNoX21hc2spICoKKwkJCQkJCSAgICAgIEhQVEVTX1BFUl9HUk9VUCkmfjB4N1VMOwogCiAJCQkJcHBjX21kLmhwdGVfcmVtb3ZlKGhwdGVfZ3JvdXApOwogCQkJCWdvdG8gcmVwZWF0OwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9tbS9pbml0LmMgYi9hcmNoL3BwYzY0L21tL2luaXQuYwppbmRleCBjMjE1N2M5Li5iZTY0YjE1IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L21tL2luaXQuYworKysgYi9hcmNoL3BwYzY0L21tL2luaXQuYwpAQCAtNzk5LDggKzc5OSw3IEBACiAJaWYgKGNwdXNfZXF1YWwodm1hLT52bV9tbS0+Y3B1X3ZtX21hc2ssIHRtcCkpCiAJCWxvY2FsID0gMTsKIAotCV9faGFzaF9wYWdlKGVhLCBwdGVfdmFsKHB0ZSkgJiAoX1BBR0VfVVNFUnxfUEFHRV9SVyksIHZzaWQsIHB0ZXAsCi0JCSAgICAweDMwMCwgbG9jYWwpOworCV9faGFzaF9wYWdlKGVhLCAwLCB2c2lkLCBwdGVwLCAweDMwMCwgbG9jYWwpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9tbS90bGIuYyBiL2FyY2gvcHBjNjQvbW0vdGxiLmMKaW5kZXggZDhhNjU5My4uMjFmYmZmYiAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9tbS90bGIuYworKysgYi9hcmNoL3BwYzY0L21tL3RsYi5jCkBAIC0xNDMsNyArMTQzLDggQEAKIAkgKiB1cCBzY2FubmluZyBhbmQgcmVzZXR0aW5nIHJlZmVyZW5jZWQgYml0cyB0aGVuIG91ciBiYXRjaCBjb250ZXh0CiAJICogd2lsbCBjaGFuZ2UgbWlkIHN0cmVhbS4KIAkgKi8KLQlpZiAodW5saWtlbHkoaSAhPSAwICYmIGNvbnRleHQgIT0gYmF0Y2gtPmNvbnRleHQpKSB7CisJaWYgKGkgIT0gMCAmJiAoY29udGV4dCAhPSBiYXRjaC0+Y29udGV4dCB8fAorCQkgICAgICAgYmF0Y2gtPmxhcmdlICE9IHB0ZV9odWdlKHB0ZSkpKSB7CiAJCWZsdXNoX3RsYl9wZW5kaW5nKCk7CiAJCWkgPSAwOwogCX0KQEAgLTE1MSw2ICsxNTIsNyBAQAogCWlmIChpID09IDApIHsKIAkJYmF0Y2gtPmNvbnRleHQgPSBjb250ZXh0OwogCQliYXRjaC0+bW0gPSBtbTsKKwkJYmF0Y2gtPmxhcmdlID0gcHRlX2h1Z2UocHRlKTsKIAl9CiAJYmF0Y2gtPnB0ZVtpXSA9IF9fcHRlKHB0ZSk7CiAJYmF0Y2gtPmFkZHJbaV0gPSBhZGRyOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2RlZmNvbmZpZyBiL2FyY2gvczM5MC9kZWZjb25maWcKaW5kZXggMDg2NTI1MS4uNDVkNDRjNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2RlZmNvbmZpZworKysgYi9hcmNoL3MzOTAvZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEzLXJjNAotIyBGcmkgSnVsIDI5IDE0OjQ5OjMwIDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNC1yYzEKKyMgV2VkIFNlcCAxNCAxNjo0NjoxOSAyMDA1CiAjCiBDT05GSUdfTU1VPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CkBAIC0yMSw2ICsyMSw3IEBACiAjIEdlbmVyYWwgc2V0dXAKICMKIENPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKQEAgLTMzLDYgKzM0LDcgQEAKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiAjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKQEAgLTk0LDYgKzk2LDcgQEAKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogCiAjCiAjIEkvTyBzdWJzeXN0ZW0gY29uZmlndXJhdGlvbgpAQCAtMTUxLDggKzE1NCw4IEBACiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfVENQRElBRz15Ci1DT05GSUdfSVBfVENQRElBR19JUFY2PXkKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0JJQz15CiBDT05GSUdfSVBWNj15CkBAIC0xNjUsNiArMTY4LDExIEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCiAjCisjIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisKKyMKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKQEAgLTIxNyw5ICsyMjUsMTEgQEAKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDTUNJQSBpcyBub3Qgc2V0CiAKICMKQEAgLTIzMyw2ICsyNDMsNyBAQAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKIENPTkZJR19TQ1NJX1BST0NfRlM9eQogCkBAIC0yNjAsNiArMjcxLDcgQEAKICMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0ZDX0FUVFJTPXkKICMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKQEAgLTI4MCw3ICsyOTIsNiBAQAogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKIApAQCAtMzg0LDYgKzM5NSwxMCBAQAogQ09ORklHX1RVTj1tCiAKICMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCisKKyMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCiAjCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKQEAgLTQ1MywxMCArNDY4LDYgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotCi0jCi0jIFhGUyBzdXBwb3J0Ci0jCiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldApAQCAtNDY1LDYgKzQ3Niw3IEBACiBDT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC00ODUsMTEgKzQ5NywxMCBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CisjIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC01MzMsNiArNTQ0LDcgQEAKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC01NzIsNiArNTg0LDcgQEAKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19QUkVFTVBUPXkKQEAgLTYyNiw1ICs2MzksNiBAQAogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPW0KICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlIGIvYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZQppbmRleCBhYjFlNDlkMi4uODU4NGRkOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogCiBvYmoteQk6PSAgYml0bWFwLm8gdHJhcHMubyB0aW1lLm8gcHJvY2Vzcy5vIFwKICAgICAgICAgICAgIHNldHVwLm8gc3lzX3MzOTAubyBwdHJhY2UubyBzaWduYWwubyBjcGNtZC5vIGViY2RpYy5vIFwKLSAgICAgICAgICAgIHNlbWFwaG9yZS5vIHMzOTBfZXh0Lm8gZGVidWcubyBwcm9maWxlLm8gaXJxLm8KKyAgICAgICAgICAgIHNlbWFwaG9yZS5vIHMzOTBfZXh0Lm8gZGVidWcubyBwcm9maWxlLm8gaXJxLm8gcmVpcGxfZGlhZy5vCiAKIGV4dHJhLSQoQ09ORklHX0FSQ0hfUzM5MF8zMSkJKz0gaGVhZC5vIAogZXh0cmEtJChDT05GSUdfQVJDSF9TMzkwWCkJKz0gaGVhZDY0Lm8gCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9zaWduYWwuYyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3NpZ25hbC5jCmluZGV4IDczNThjZGIuLjRmZjY4MDggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3NpZ25hbC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3NpZ25hbC5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIF9fU0lfRkFVTFQgPj4gMTY6CiAJCQllcnIgfD0gX19nZXRfdXNlcih0bXAsICZmcm9tLT5zaV9hZGRyKTsKLQkJCXRvLT5zaV9hZGRyID0gKHZvaWQgKikodTY0KSAodG1wICYgUFNXMzJfQUREUl9JTlNOKTsKKwkJCXRvLT5zaV9hZGRyID0gKHZvaWQgX191c2VyICopKHU2NCkgKHRtcCAmIFBTVzMyX0FERFJfSU5TTik7CiAJCQlicmVhazsKIAkJY2FzZSBfX1NJX1BPTEwgPj4gMTY6CiAJCQllcnIgfD0gX19nZXRfdXNlcih0by0+c2lfYmFuZCwgJmZyb20tPnNpX2JhbmQpOwpAQCAtMzM4LDcgKzMzOCw3IEBACiAJCWVyciB8PSBfX2dldF91c2VyKGtzcy5zc19mbGFncywgJnVzcy0+c3NfZmxhZ3MpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWtzcy5zc19zcCA9ICh2b2lkICopIHNzX3NwOworCQlrc3Muc3Nfc3AgPSAodm9pZCBfX3VzZXIgKikgc3Nfc3A7CiAJfQogCiAJc2V0X2ZzIChLRVJORUxfRFMpOwpAQCAtNDYxLDcgKzQ2MSw3IEBACiAJCWdvdG8gYmFkZnJhbWU7CiAKIAllcnIgPSBfX2dldF91c2VyKHNzX3NwLCAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX3NwKTsKLQlzdC5zc19zcCA9ICh2b2lkICopIEEoKHVuc2lnbmVkIGxvbmcpc3Nfc3ApOworCXN0LnNzX3NwID0gY29tcGF0X3B0cihzc19zcCk7CiAJZXJyIHw9IF9fZ2V0X3VzZXIoc3Quc3Nfc2l6ZSwgJmZyYW1lLT51Yy51Y19zdGFjay5zc19zaXplKTsKIAllcnIgfD0gX19nZXRfdXNlcihzdC5zc19mbGFncywgJmZyYW1lLT51Yy51Y19zdGFjay5zc19mbGFncyk7CiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUwppbmRleCA1OGZjN2ZiLi45YjMwZjRjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TCkBAIC0xMDgsNyArMTA4LDcgQEAKIAlibAlCQVNFRCgwZikKIAlsCSVyMTQsQkFTRUQoLkxjbGVhbnVwX2NyaXRpY2FsKQogCWJhc3IJJXIxNCwlcjE0Ci0JdG0JMCglcjEyKSwweDAxCQkjIHJldGVzdCBwcm9ibGVtIHN0YXRlIGFmdGVyIGNsZWFudXAKKwl0bQkxKCVyMTIpLDB4MDEJCSMgcmV0ZXN0IHByb2JsZW0gc3RhdGUgYWZ0ZXIgY2xlYW51cAogCWJueglCQVNFRCgxZikKIDA6CWwJJXIxNCxfX0xDX0FTWU5DX1NUQUNLCSMgYXJlIHdlIGFscmVhZHkgb24gdGhlIGFzeW5jIHN0YWNrID8KIAlzbHIJJXIxNCwlcjE1CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TCmluZGV4IGQwYzlmZmEuLjdiOWI0YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TCkBAIC0xMDEsNyArMTAxLDcgQEAKIAljbGMJXHBzd29yZys4KDgpLEJBU0VEKC5MY3JpdGljYWxfc3RhcnQpCiAJamwJMGYKIAlicmFzbAklcjE0LGNsZWFudXBfY3JpdGljYWwKLQl0bQkwKCVyMTIpLDB4MDEJCSMgcmV0ZXN0IHByb2JsZW0gc3RhdGUgYWZ0ZXIgY2xlYW51cAorCXRtCTEoJXIxMiksMHgwMQkJIyByZXRlc3QgcHJvYmxlbSBzdGF0ZSBhZnRlciBjbGVhbnVwCiAJam56CTFmCiAwOglsZwklcjE0LF9fTENfQVNZTkNfU1RBQ0sJIyBhcmUgd2UgYWxyZWFkeSBvbiB0aGUgYXN5bmMuIHN0YWNrID8KIAlzbGdyCSVyMTQsJXIxNQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbF9kaWFnLmMgYi9hcmNoL3MzOTAva2VybmVsL3JlaXBsX2RpYWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2NiNDJiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbF9kaWFnLmMKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlCisgKiBMaW51eCByZS1JUEwgc3VwcG9ydAorICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDUKKyAqCisgKiBBdXRob3Iocyk6IFZvbGtlciBTYW1lc2tlIChzYW1lc2tlQGRlLmlibS5jb20pCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworc3RhdGljIHVuc2lnbmVkIGludCByZWlwbF9kaWFnX3JjMTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmVpcGxfZGlhZ19yYzI7CisKKy8qCisgKiByZS1JUEwgdGhlIHN5c3RlbSB1c2luZyB0aGUgbGFzdCB1c2VkIElQTCBwYXJhbWV0ZXJzCisgKi8KK3ZvaWQgcmVpcGxfZGlhZyh2b2lkKQoreworICAgICAgICBhc20gdm9sYXRpbGUgKAorCQkiICAgbGEgICAlJXI0LDBcbiIKKwkJIiAgIGxhICAgJSVyNSwwXG4iCisgICAgICAgICAgICAgICAgIiAgIGRpYWcgJSVyNCwlMiwweDMwOFxuIgorICAgICAgICAgICAgICAgICIwOlxuIgorCQkiICAgc3QgICAlJXI0LCUwXG4iCisJCSIgICBzdCAgICUlcjUsJTFcbiIKKyAgICAgICAgICAgICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorI2lmZGVmIF9fczM5MHhfXworICAgICAgICAgICAgICAgICIgICAuYWxpZ24gOFxuIgorICAgICAgICAgICAgICAgICIgICAucXVhZCAwYiwgMGJcbiIKKyNlbHNlCisgICAgICAgICAgICAgICAgIiAgIC5hbGlnbiA0XG4iCisgICAgICAgICAgICAgICAgIiAgIC5sb25nIDBiLCAwYlxuIgorI2VuZGlmCisgICAgICAgICAgICAgICAgIi5wcmV2aW91c1xuIgorICAgICAgICAgICAgICAgIDogIj1tIiAocmVpcGxfZGlhZ19yYzEpLCAiPW0iIChyZWlwbF9kaWFnX3JjMikKKwkJOiAiZCIgKDMpIDogImNjIiwgIjQiLCAiNSIgKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwppbmRleCA1YmE1YTU0Li41MjA0Nzc4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCkBAIC0yNjEsOCArMjYxLDExIEBACiAgKiBSZWJvb3QsIGhhbHQgYW5kIHBvd2VyX29mZiByb3V0aW5lcyBmb3Igbm9uIFNNUC4KICAqLwogZXh0ZXJuIHZvaWQgcmVpcGwodW5zaWduZWQgbG9uZyBkZXZubyk7CitleHRlcm4gdm9pZCByZWlwbF9kaWFnKHZvaWQpOwogc3RhdGljIHZvaWQgZG9fbWFjaGluZV9yZXN0YXJ0X25vbnNtcChjaGFyICogX191bnVzZWQpCiB7CisJcmVpcGxfZGlhZygpOworCiAJaWYgKE1BQ0hJTkVfSVNfVk0pCiAJCWNwY21kICgiSVBMIiwgTlVMTCwgMCk7CiAJZWxzZQpAQCAtNjM0LDYgKzYzNyw3IEBACiAgICAgICAgIHN0cnVjdCBjcHVpbmZvX1MzOTAgKmNwdWluZm87CiAJdW5zaWduZWQgbG9uZyBuID0gKHVuc2lnbmVkIGxvbmcpIHYgLSAxOwogCisJcHJlZW1wdF9kaXNhYmxlKCk7CiAJaWYgKCFuKSB7CiAJCXNlcV9wcmludGYobSwgInZlbmRvcl9pZCAgICAgICA6IElCTS9TMzkwXG4iCiAJCQkgICAgICAgIiMgcHJvY2Vzc29ycyAgICA6ICVpXG4iCkBAIC02NTgsNiArNjYyLDcgQEAKIAkJCSAgICAgICBjcHVpbmZvLT5jcHVfaWQuaWRlbnQsCiAJCQkgICAgICAgY3B1aW5mby0+Y3B1X2lkLm1hY2hpbmUpOwogCX0KKwlwcmVlbXB0X2VuYWJsZSgpOwogICAgICAgICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmMKaW5kZXggNmEzZjViNy4uNmUwMTEwZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NpZ25hbC5jCkBAIC0zNzYsOCArMzc2LDggQEAKIAogCS8qIENyZWF0ZSB0aGUgdWNvbnRleHQuICAqLwogCWVyciB8PSBfX3B1dF91c2VyKDAsICZmcmFtZS0+dWMudWNfZmxhZ3MpOwotCWVyciB8PSBfX3B1dF91c2VyKDAsICZmcmFtZS0+dWMudWNfbGluayk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoKHZvaWQgKiljdXJyZW50LT5zYXNfc3Nfc3AsICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc3ApOworCWVyciB8PSBfX3B1dF91c2VyKE5VTEwsICZmcmFtZS0+dWMudWNfbGluayk7CisJZXJyIHw9IF9fcHV0X3VzZXIoKHZvaWQgX191c2VyICopY3VycmVudC0+c2FzX3NzX3NwLCAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX3NwKTsKIAllcnIgfD0gX19wdXRfdXNlcihzYXNfc3NfZmxhZ3MocmVncy0+Z3Byc1sxNV0pLAogCQkJICAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX2ZsYWdzKTsKIAllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT5zYXNfc3Nfc2l6ZSwgJmZyYW1lLT51Yy51Y19zdGFjay5zc19zaXplKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCmluZGV4IDg1MjIyZmUuLmUxM2M4N2IgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwpAQCAtNjUsNiArNjUsNyBAQAogZXh0ZXJuIGNoYXIgdm1wb2ZmX2NtZFtdOwogCiBleHRlcm4gdm9pZCByZWlwbCh1bnNpZ25lZCBsb25nIGRldm5vKTsKK2V4dGVybiB2b2lkIHJlaXBsX2RpYWcodm9pZCk7CiAKIHN0YXRpYyB2b2lkIHNtcF9leHRfYml0Y2FsbChpbnQsIGVjX2JpdF9zaWcpOwogc3RhdGljIHZvaWQgc21wX2V4dF9iaXRjYWxsX290aGVycyhlY19iaXRfc2lnKTsKQEAgLTI4Myw2ICsyODQsOCBAQAogCSAqIGludGVycnVwdGVkIGJ5IGFuIGV4dGVybmFsIGludGVycnVwdCBhbmQgczM5MGlycQogCSAqIGxvY2tzIGFyZSBhbHdheXMgaGVsZCBkaXNhYmxlZCkuCiAJICovCisJcmVpcGxfZGlhZygpOworCiAJaWYgKE1BQ0hJTkVfSVNfVk0pCiAJCWNwY21kICgiSVBMIiwgTlVMTCwgMCwgTlVMTCk7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc21wLmMgYi9hcmNoL3NoL2tlcm5lbC9zbXAuYwppbmRleCA1NmEzOWQ2Li41ZWNlZmMwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zbXAuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgpAQCAtMzksNiArNDAsOCBAQAogZXh0ZXJuIHZvaWQgcGVyX2NwdV90cmFwX2luaXQodm9pZCk7CiAKIGNwdW1hc2tfdCBjcHVfcG9zc2libGVfbWFwOworRVhQT1JUX1NZTUJPTChjcHVfcG9zc2libGVfbWFwKTsKKwogY3B1bWFza190IGNwdV9vbmxpbmVfbWFwOwogc3RhdGljIGF0b21pY190IGNwdXNfYm9vdGVkID0gQVRPTUlDX0lOSVQoMCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvS2NvbmZpZyBiL2FyY2gvc3BhcmMvS2NvbmZpZwppbmRleCBhYmEwNTM5Li42NTM3NDQ1IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL0tjb25maWcKKysrIGIvYXJjaC9zcGFyYy9LY29uZmlnCkBAIC0yNSw2MiArMjUsNiBAQAogCiBtZW51ICJHZW5lcmFsIG1hY2hpbmUgc2V0dXAiCiAKLWNvbmZpZyBWVAotCWJvb2wKLQlzZWxlY3QgSU5QVVQKLQlkZWZhdWx0IHkKLQktLS1oZWxwLS0tCi0JICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgZ2V0IHN1cHBvcnQgZm9yIHRlcm1pbmFsIGRldmljZXMgd2l0aAotCSAgZGlzcGxheSBhbmQga2V5Ym9hcmQgZGV2aWNlcy4gVGhlc2UgYXJlIGNhbGxlZCAidmlydHVhbCIgYmVjYXVzZSB5b3UKLQkgIGNhbiBydW4gc2V2ZXJhbCB2aXJ0dWFsIHRlcm1pbmFscyAoYWxzbyBjYWxsZWQgdmlydHVhbCBjb25zb2xlcykgb24KLQkgIG9uZSBwaHlzaWNhbCB0ZXJtaW5hbC4gVGhpcyBpcyByYXRoZXIgdXNlZnVsLCBmb3IgZXhhbXBsZSBvbmUKLQkgIHZpcnR1YWwgdGVybWluYWwgY2FuIGNvbGxlY3Qgc3lzdGVtIG1lc3NhZ2VzIGFuZCB3YXJuaW5ncywgYW5vdGhlcgotCSAgb25lIGNhbiBiZSB1c2VkIGZvciBhIHRleHQtbW9kZSB1c2VyIHNlc3Npb24sIGFuZCBhIHRoaXJkIGNvdWxkIHJ1bgotCSAgYW4gWCBzZXNzaW9uLCBhbGwgaW4gcGFyYWxsZWwuIFN3aXRjaGluZyBiZXR3ZWVuIHZpcnR1YWwgdGVybWluYWxzCi0JICBpcyBkb25lIHdpdGggY2VydGFpbiBrZXkgY29tYmluYXRpb25zLCB1c3VhbGx5IEFsdC08ZnVuY3Rpb24ga2V5Pi4KLQotCSAgVGhlIHNldHRlcm0gY29tbWFuZCAoIm1hbiBzZXR0ZXJtIikgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZQotCSAgcHJvcGVydGllcyAoc3VjaCBhcyBjb2xvcnMgb3IgYmVlcGluZykgb2YgYSB2aXJ0dWFsIHRlcm1pbmFsLiBUaGUKLQkgIG1hbiBwYWdlIGNvbnNvbGVfY29kZXMoNCkgKCJtYW4gY29uc29sZV9jb2RlcyIpIGNvbnRhaW5zIHRoZSBzcGVjaWFsCi0JICBjaGFyYWN0ZXIgc2VxdWVuY2VzIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRob3NlIHByb3BlcnRpZXMKLQkgIGRpcmVjdGx5LiBUaGUgZm9udHMgdXNlZCBvbiB2aXJ0dWFsIHRlcm1pbmFscyBjYW4gYmUgY2hhbmdlZCB3aXRoCi0JICB0aGUgc2V0Zm9udCAoIm1hbiBzZXRmb250IikgY29tbWFuZCBhbmQgdGhlIGtleSBiaW5kaW5ncyBhcmUgZGVmaW5lZAotCSAgd2l0aCB0aGUgbG9hZGtleXMgKCJtYW4gbG9hZGtleXMiKSBjb21tYW5kLgotCi0JICBZb3UgbmVlZCBhdCBsZWFzdCBvbmUgdmlydHVhbCB0ZXJtaW5hbCBkZXZpY2UgaW4gb3JkZXIgdG8gbWFrZSB1c2UKLQkgIG9mIHlvdXIga2V5Ym9hcmQgYW5kIG1vbml0b3IuIFRoZXJlZm9yZSwgb25seSBwZW9wbGUgY29uZmlndXJpbmcgYW4KLQkgIGVtYmVkZGVkIHN5c3RlbSB3b3VsZCB3YW50IHRvIHNheSBOIGhlcmUgaW4gb3JkZXIgdG8gc2F2ZSBzb21lCi0JICBtZW1vcnk7IHRoZSBvbmx5IHdheSB0byBsb2cgaW50byBzdWNoIGEgc3lzdGVtIGlzIHRoZW4gdmlhIGEgc2VyaWFsCi0JICBvciBuZXR3b3JrIGNvbm5lY3Rpb24uCi0KLQkgIElmIHVuc3VyZSwgc2F5IFksIG9yIGVsc2UgeW91IHdvbid0IGJlIGFibGUgdG8gZG8gbXVjaCB3aXRoIHlvdXIgbmV3Ci0JICBzaGlueSBMaW51eCBzeXN0ZW0gOi0pCi0KLWNvbmZpZyBWVF9DT05TT0xFCi0JYm9vbAotCWRlZmF1bHQgeQotCS0tLWhlbHAtLS0KLQkgIFRoZSBzeXN0ZW0gY29uc29sZSBpcyB0aGUgZGV2aWNlIHdoaWNoIHJlY2VpdmVzIGFsbCBrZXJuZWwgbWVzc2FnZXMKLQkgIGFuZCB3YXJuaW5ncyBhbmQgd2hpY2ggYWxsb3dzIGxvZ2lucyBpbiBzaW5nbGUgdXNlciBtb2RlLiBJZiB5b3UKLQkgIGFuc3dlciBZIGhlcmUsIGEgdmlydHVhbCB0ZXJtaW5hbCAodGhlIGRldmljZSB1c2VkIHRvIGludGVyYWN0IHdpdGgKLQkgIGEgcGh5c2ljYWwgdGVybWluYWwpIGNhbiBiZSB1c2VkIGFzIHN5c3RlbSBjb25zb2xlLiBUaGlzIGlzIHRoZSBtb3N0Ci0JICBjb21tb24gbW9kZSBvZiBvcGVyYXRpb25zLCBzbyB5b3Ugc2hvdWxkIHNheSBZIGhlcmUgdW5sZXNzIHlvdSB3YW50Ci0JICB0aGUga2VybmVsIG1lc3NhZ2VzIGJlIG91dHB1dCBvbmx5IHRvIGEgc2VyaWFsIHBvcnQgKGluIHdoaWNoIGNhc2UKLQkgIHlvdSBzaG91bGQgc2F5IFkgdG8gIkNvbnNvbGUgb24gc2VyaWFsIHBvcnQiLCBiZWxvdykuCi0KLQkgIElmIHlvdSBkbyBzYXkgWSBoZXJlLCBieSBkZWZhdWx0IHRoZSBjdXJyZW50bHkgdmlzaWJsZSB2aXJ0dWFsCi0JICB0ZXJtaW5hbCAoL2Rldi90dHkwKSB3aWxsIGJlIHVzZWQgYXMgc3lzdGVtIGNvbnNvbGUuIFlvdSBjYW4gY2hhbmdlCi0JICB0aGF0IHdpdGggYSBrZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbiBzdWNoIGFzICJjb25zb2xlPXR0eTMiIHdoaWNoCi0JICB3b3VsZCB1c2UgdGhlIHRoaXJkIHZpcnR1YWwgdGVybWluYWwgYXMgc3lzdGVtIGNvbnNvbGUuIChUcnkgIm1hbgotCSAgYm9vdHBhcmFtIiBvciBzZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgeW91ciBib290IGxvYWRlciAobGlsbyBvcgotCSAgbG9hZGxpbikgYWJvdXQgaG93IHRvIHBhc3Mgb3B0aW9ucyB0byB0aGUga2VybmVsIGF0IGJvb3QgdGltZS4pCi0KLQkgIElmIHVuc3VyZSwgc2F5IFkuCi0KLWNvbmZpZyBIV19DT05TT0xFCi0JYm9vbAotCWRlZmF1bHQgeQotCiBjb25maWcgU01QCiAJYm9vbCAiU3ltbWV0cmljIG11bHRpLXByb2Nlc3Npbmcgc3VwcG9ydCAoZG9lcyBub3Qgd29yayBvbiBzdW40L3N1bjRjKSIKIAlkZXBlbmRzIG9uIEJST0tFTgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NldHVwLmMKaW5kZXggNTNjMTkyYS4uMzUwOWU0MyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cC5jCkBAIC0yNDksOCArMjQ5LDYgQEAKIAogc3RydWN0IHB0X3JlZ3MgZmFrZV9zd2FwcGVyX3JlZ3M7CiAKLWV4dGVybiB2b2lkIHBhZ2luZ19pbml0KHZvaWQpOwotCiB2b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApCiB7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC90aW1lLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC90aW1lLmMKaW5kZXggYmMwMTVlOS4uMjc5YTYyNiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3RpbWUuYwpAQCAtNDU3LDcgKzQ1Nyw3IEBACiAJc2J1c190aW1lX2luaXQoKTsKIH0KIAotZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBkb19nZXR0aW1lb2Zmc2V0KHZvaWQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZG9fZ2V0dGltZW9mZnNldCh2b2lkKQogewogCXJldHVybiAoKm1hc3Rlcl9sMTBfY291bnRlciA+PiAxMCkgJiAweDFmZmZmZjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vc3JtbXUuYyBiL2FyY2gvc3BhcmMvbW0vc3JtbXUuYwppbmRleCBjODlhODAzLi5jNjY0Yjk2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL3NybW11LmMKKysrIGIvYXJjaC9zcGFyYy9tbS9zcm1tdS5jCkBAIC0yNjAsNyArMjYwLDcgQEAKIHsgcmV0dXJuIF9fcHRlKChwdGVfdmFsKHB0ZSkgJiBTUk1NVV9DSEdfTUFTSykgfCBwZ3Byb3RfdmFsKG5ld3Byb3QpKTsgfQogCiAvKiB0byBmaW5kIGFuIGVudHJ5IGluIGEgdG9wLWxldmVsIHBhZ2UgdGFibGUuLi4gKi8KLWV4dGVybiBpbmxpbmUgcGdkX3QgKnNybW11X3BnZF9vZmZzZXQoc3RydWN0IG1tX3N0cnVjdCAqIG1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCitzdGF0aWMgaW5saW5lIHBnZF90ICpzcm1tdV9wZ2Rfb2Zmc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogeyByZXR1cm4gbW0tPnBnZCArIChhZGRyZXNzID4+IFNSTU1VX1BHRElSX1NISUZUKTsgfQogCiAvKiBGaW5kIGFuIGVudHJ5IGluIHRoZSBzZWNvbmQtbGV2ZWwgcGFnZSB0YWJsZS4uICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvc3BhcmM2NC9LY29uZmlnLmRlYnVnCmluZGV4IGNkOGQzOWZiLi5mYTA2ZWEwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL3NwYXJjNjQvS2NvbmZpZy5kZWJ1ZwpAQCAtMzMsMTMgKzMzLDEzIEBACiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKIAlib29sICJEZWJ1ZyBCT09UTUVNIGluaXRpYWxpemF0aW9uIgogCi0jIFdlIGhhdmUgYSBjdXN0b20gYXRvbWljX2RlY19hbmRfbG9jaygpIGltcGxlbWVudGF0aW9uIGJ1dCBpdCdzIG5vdAotIyBjb21wYXRpYmxlIHdpdGggc3BpbmxvY2sgZGVidWdnaW5nIHNvIHdlIG5lZWQgdG8gZmFsbCBiYWNrIG9uCi0jIHRoZSBnZW5lcmljIHZlcnNpb24gaW4gdGhhdCBjYXNlLgotY29uZmlnIEhBVkVfREVDX0xPQ0sKLQlib29sCi0JZGVwZW5kcyBvbiBTTVAgJiYgIURFQlVHX1NQSU5MT0NLCi0JZGVmYXVsdCB5Citjb25maWcgREVCVUdfUEFHRUFMTE9DCisJYm9vbCAiUGFnZSBhbGxvYyBkZWJ1Z2dpbmciCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgIVNPRlRXQVJFX1NVU1BFTkQKKwloZWxwCisJICBVbm1hcCBwYWdlcyBmcm9tIHRoZSBrZXJuZWwgbGluZWFyIG1hcHBpbmcgYWZ0ZXIgZnJlZV9wYWdlcygpLgorCSAgVGhpcyByZXN1bHRzIGluIGEgbGFyZ2Ugc2xvd2Rvd24sIGJ1dCBoZWxwcyB0byBmaW5kIGNlcnRhaW4gdHlwZXMKKwkgIG9mIG1lbW9yeSBjb3JydXB0aW9ucy4KIAogY29uZmlnIE1DT1VOVAogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvY3B1LmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2NwdS5jCmluZGV4IDQ4NzU2OTUuLjc3ZWY1ZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvY3B1LmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9jcHUuYwpAQCAtMzksNiArMzksOCBAQAogICB7IDB4M2UsIDB4MTUsIDAsICJVbHRyYVNwYXJjIElJSSsgaW50ZWdyYXRlZCBGUFUifSwKICAgeyAweDNlLCAweDE2LCAwLCAiVWx0cmFTcGFyYyBJSUlpIGludGVncmF0ZWQgRlBVIn0sCiAgIHsgMHgzZSwgMHgxOCwgMCwgIlVsdHJhU3BhcmMgSVYgaW50ZWdyYXRlZCBGUFUifSwKKyAgeyAweDNlLCAweDE5LCAwLCAiVWx0cmFTcGFyYyBJVisgaW50ZWdyYXRlZCBGUFUifSwKKyAgeyAweDNlLCAweDIyLCAwLCAiVWx0cmFTcGFyYyBJSUlpKyBpbnRlZ3JhdGVkIEZQVSJ9LAogfTsKIAogI2RlZmluZSBOU1BBUkNGUFUgIChzaXplb2YobGludXhfc3BhcmNfZnB1KS9zaXplb2Yoc3RydWN0IGNwdV9mcF9pbmZvKSkKQEAgLTUzLDYgKzU1LDggQEAKICAgeyAweDNlLCAweDE1LCAiVEkgVWx0cmFTcGFyYyBJSUkrIChDaGVldGFoKykifSwKICAgeyAweDNlLCAweDE2LCAiVEkgVWx0cmFTcGFyYyBJSUlpIChKYWxhcGVubykifSwKICAgeyAweDNlLCAweDE4LCAiVEkgVWx0cmFTcGFyYyBJViAoSmFndWFyKSJ9LAorICB7IDB4M2UsIDB4MTksICJUSSBVbHRyYVNwYXJjIElWKyAoUGFudGhlcikifSwKKyAgeyAweDNlLCAweDIyLCAiVEkgVWx0cmFTcGFyYyBJSUlpKyAoU2VycmFubykifSwKIH07CiAKICNkZWZpbmUgTlNQQVJDQ0hJUFMgIChzaXplb2YobGludXhfc3BhcmNfY2hpcHMpL3NpemVvZihzdHJ1Y3QgY3B1X2l1X2luZm8pKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9kZXZpY2VzLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2RldmljZXMuYwppbmRleCBkNzEwMjc0Li5kZjlhMWNhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2RldmljZXMuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2RldmljZXMuYwpAQCAtMTM1LDYgKzEzNSwyOCBAQAogCQljcHVfZGF0YSgwKS5jbG9ja190aWNrID0gcHJvbV9nZXRpbnRkZWZhdWx0KGNwdV9ub2RlLAogCQkJCQkJCSAgICAiY2xvY2stZnJlcXVlbmN5IiwKIAkJCQkJCQkgICAgMCk7CisJCWNwdV9kYXRhKDApLmRjYWNoZV9zaXplID0gcHJvbV9nZXRpbnRkZWZhdWx0KGNwdV9ub2RlLAorCQkJCQkJCSAgICAgImRjYWNoZS1zaXplIiwKKwkJCQkJCQkgICAgIDE2ICogMTAyNCk7CisJCWNwdV9kYXRhKDApLmRjYWNoZV9saW5lX3NpemUgPQorCQkJcHJvbV9nZXRpbnRkZWZhdWx0KGNwdV9ub2RlLCAiZGNhY2hlLWxpbmUtc2l6ZSIsIDMyKTsKKwkJY3B1X2RhdGEoMCkuaWNhY2hlX3NpemUgPSBwcm9tX2dldGludGRlZmF1bHQoY3B1X25vZGUsCisJCQkJCQkJICAgICAiaWNhY2hlLXNpemUiLAorCQkJCQkJCSAgICAgMTYgKiAxMDI0KTsKKwkJY3B1X2RhdGEoMCkuaWNhY2hlX2xpbmVfc2l6ZSA9CisJCQlwcm9tX2dldGludGRlZmF1bHQoY3B1X25vZGUsICJpY2FjaGUtbGluZS1zaXplIiwgMzIpOworCQljcHVfZGF0YSgwKS5lY2FjaGVfc2l6ZSA9IHByb21fZ2V0aW50ZGVmYXVsdChjcHVfbm9kZSwKKwkJCQkJCQkgICAgICJlY2FjaGUtc2l6ZSIsCisJCQkJCQkJICAgICA0ICogMTAyNCAqIDEwMjQpOworCQljcHVfZGF0YSgwKS5lY2FjaGVfbGluZV9zaXplID0KKwkJCXByb21fZ2V0aW50ZGVmYXVsdChjcHVfbm9kZSwgImVjYWNoZS1saW5lLXNpemUiLCA2NCk7CisJCXByaW50aygiQ1BVWzBdOiBDYWNoZXMgIgorCQkgICAgICAgIkRbc3ooJWQpOmxpbmVfc3ooJWQpXSAiCisJCSAgICAgICAiSVtzeiglZCk6bGluZV9zeiglZCldICIKKwkJICAgICAgICJFW3N6KCVkKTpsaW5lX3N6KCVkKV1cbiIsCisJCSAgICAgICBjcHVfZGF0YSgwKS5kY2FjaGVfc2l6ZSwgY3B1X2RhdGEoMCkuZGNhY2hlX2xpbmVfc2l6ZSwKKwkJICAgICAgIGNwdV9kYXRhKDApLmljYWNoZV9zaXplLCBjcHVfZGF0YSgwKS5pY2FjaGVfbGluZV9zaXplLAorCQkgICAgICAgY3B1X2RhdGEoMCkuZWNhY2hlX3NpemUsIGNwdV9kYXRhKDApLmVjYWNoZV9saW5lX3NpemUpOwogCX0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2R0bGJfYmFja2VuZC5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9kdGxiX2JhY2tlbmQuUwppbmRleCA1Mzg1MjI4Li5hY2M4ODlhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2R0bGJfYmFja2VuZC5TCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvZHRsYl9iYWNrZW5kLlMKQEAgLTksMTcgKzksNyBAQAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgogCi0jaWYgUEFHRV9TSElGVCA9PSAxMwotI2RlZmluZSBTWl9CSVRTCQlfUEFHRV9TWjhLCi0jZWxpZiBQQUdFX1NISUZUID09IDE2Ci0jZGVmaW5lIFNaX0JJVFMJCV9QQUdFX1NaNjRLCi0jZWxpZiBQQUdFX1NISUZUID09IDE5Ci0jZGVmaW5lIFNaX0JJVFMJCV9QQUdFX1NaNTEySwotI2VsaWYgUEFHRV9TSElGVCA9PSAyMgotI2RlZmluZSBTWl9CSVRTCQlfUEFHRV9TWjRNQgotI2VuZGlmCi0KLSNkZWZpbmUgVkFMSURfU1pfQklUUwkoX1BBR0VfVkFMSUQgfCBTWl9CSVRTKQorI2RlZmluZSBWQUxJRF9TWl9CSVRTCShfUEFHRV9WQUxJRCB8IF9QQUdFX1NaQklUUykKIAogI2RlZmluZSBWUFRFX0JJVFMJCShfUEFHRV9DUCB8IF9QQUdFX0NWIHwgX1BBR0VfUCApCiAjZGVmaW5lIFZQVEVfU0hJRlQJCShQQUdFX1NISUZUIC0gMykKQEAgLTE2Myw3ICsxNTMsNiBAQAogCXN0eGEJCSVnNCwgWyVnMSArICVnMV0gQVNJX0RNTVUJISBSZXN0b3JlIHByZXZpb3VzIFRBR19BQ0NFU1MKIAlyZXRyeQkJCQkJCSEgTG9hZCBQVEUgb25jZSBhZ2FpbgogCi0jdW5kZWYgU1pfQklUUwogI3VuZGVmIFZBTElEX1NaX0JJVFMKICN1bmRlZiBWUFRFX1NISUZUCiAjdW5kZWYgVlBURV9CSVRTCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2R0bGJfYmFzZS5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9kdGxiX2Jhc2UuUwppbmRleCBkZWQyZmVkLi42NTI4Nzg2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2R0bGJfYmFzZS5TCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvZHRsYl9iYXNlLlMKQEAgLTUzLDM5ICs1MywzNiBAQAogICogYmUgZ3VhcmFudGVlZCB0byBiZSAwIC4uLiBtbXVfY29udGV4dC5oIGRvZXMgZ3VhcmFudGVlIHRoaXMKICAqIGJ5IG9ubHkgdXNpbmcgMTAgYml0cyBpbiB0aGUgaHdjb250ZXh0IHZhbHVlLgogICovCi0jZGVmaW5lIENSRUFURV9WUFRFX09GRlNFVDEocjEsIHIyKQorI2RlZmluZSBDUkVBVEVfVlBURV9PRkZTRVQxKHIxLCByMikgbm9wCiAjZGVmaW5lIENSRUFURV9WUFRFX09GRlNFVDIocjEsIHIyKSBcCiAJCQkJc3JheAlyMSwgMTAsIHIyCi0jZGVmaW5lIENSRUFURV9WUFRFX05PUAkJbm9wCiAjZWxzZQogI2RlZmluZSBDUkVBVEVfVlBURV9PRkZTRVQxKHIxLCByMikgXAogCQkJCXNyYXgJcjEsIFBBR0VfU0hJRlQsIHIyCiAjZGVmaW5lIENSRUFURV9WUFRFX09GRlNFVDIocjEsIHIyKSBcCiAJCQkJc2xseAlyMiwgMywgcjIKLSNkZWZpbmUgQ1JFQVRFX1ZQVEVfTk9QCiAjZW5kaWYKIAogLyogRFRMQiAqKiBJQ0FDSEUgbGluZSAxOiBRdWljayB1c2VyIFRMQiBtaXNzZXMJCSovCisJbW92CQlUTEJfU0ZTUiwgJWcxCiAJbGR4YQkJWyVnMSArICVnMV0gQVNJX0RNTVUsICVnNAkhIEdldCBUQUdfQUNDRVNTCiAJYW5kY2MJCSVnNCwgVEFHX0NPTlRFWFRfQklUUywgJWcwCSEgRnJvbSBOdWNsZXVzPwogZnJvbV90bDFfdHJhcDoKIAlyZHByCQkldGwsICVnNQkJCSEgRm9yIFRMPT0zIHRlc3QKIAlDUkVBVEVfVlBURV9PRkZTRVQxKCVnNCwgJWc2KQkJCSEgQ3JlYXRlIFZQVEUgb2Zmc2V0Ci0JYmUscG4JCSV4Y2MsIDNmCQkJISBZZXAsIHNwZWNpYWwgcHJvY2Vzc2luZworCWJlLHBuCQkleGNjLCBrdm1hcAkJCSEgWWVwLCBzcGVjaWFsIHByb2Nlc3NpbmcKIAkgQ1JFQVRFX1ZQVEVfT0ZGU0VUMiglZzQsICVnNikJCQkhIENyZWF0ZSBWUFRFIG9mZnNldAogCWNtcAkJJWc1LCA0CQkJCSEgTGFzdCB0cmFwIGxldmVsPwotCWJlLHBuCQkleGNjLCBsb25ncGF0aAkJCSEgWWVwLCBjYW5ub3QgcmlzayBWUFRFIG1pc3MKLQkgbm9wCQkJCQkJISBkZWxheSBzbG90CiAKIC8qIERUTEIgKiogSUNBQ0hFIGxpbmUgMjogVXNlciBmaW5pc2ggKyBxdWljayBrZXJuZWwgVExCIG1pc3NlcwkqLworCWJlLHBuCQkleGNjLCBsb25ncGF0aAkJCSEgWWVwLCBjYW5ub3QgcmlzayBWUFRFIG1pc3MKKwkgbm9wCQkJCQkJISBkZWxheSBzbG90CiAJbGR4YQkJWyVnMyArICVnNl0gQVNJX1MsICVnNQkJISBMb2FkIFZQVEUKIDE6CWJyZ2V6LHBuCSVnNSwgbG9uZ3BhdGgJCQkhIEludmFsaWQsIGJyYW5jaCBvdXQKIAkgbm9wCQkJCQkJISBEZWxheS1zbG90CiA5OglzdHhhCQklZzUsIFslZzBdIEFTSV9EVExCX0RBVEFfSU4JISBSZWxvYWQgVExCCiAJcmV0cnkJCQkJCQkhIFRyYXAgcmV0dXJuCi0zOglicmx6LHB0CQklZzQsIDliCQkJCSEgS2VybmVsIHZpcnR1YWwgbWFwPwotCSB4b3IJCSVnMiwgJWc0LCAlZzUJCQkhIEZpbmlzaCBiaXQgdHdpZGRsZXMKLQliYSxhLHB0CQkleGNjLCBrdm1hcAkJCSEgWWVwLCBnbyBjaGVjayBmb3Igb2JwL3ZtYWxsb2MKKwlub3AKIAogLyogRFRMQiAqKiBJQ0FDSEUgbGluZSAzOiB3aW5maXh1cHMrcmVhbF9mYXVsdHMJCSovCiBsb25ncGF0aDoKQEAgLTEwNiw4ICsxMDMsNyBAQAogCW5vcAogCW5vcAogCW5vcAotCUNSRUFURV9WUFRFX05PUAorCW5vcAogCiAjdW5kZWYgQ1JFQVRFX1ZQVEVfT0ZGU0VUMQogI3VuZGVmIENSRUFURV9WUFRFX09GRlNFVDIKLSN1bmRlZiBDUkVBVEVfVlBURV9OT1AKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZHRsYl9wcm90LlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2R0bGJfcHJvdC5TCmluZGV4IGQ4NDhiYjcuLmUwYTkyMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZHRsYl9wcm90LlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9kdGxiX3Byb3QuUwpAQCAtMTQsMTQgKzE0LDE0IEBACiAgKi8KIAogLyogUFJPVCAqKiBJQ0FDSEUgbGluZSAxOiBVc2VyIERUTEIgcHJvdGVjdGlvbiB0cmFwCSovCi0Jc3R4YQkJJWcwLCBbJWcxXSBBU0lfRE1NVQkJISBDbGVhciBTRlNSIEZhdWx0VmFsaWQgYml0Ci0JbWVtYmFyCQkjU3luYwkJCQkhIFN5bmNocm9uaXplIEFTSSBzdG9yZXMKLQlyZHByCQklcHN0YXRlLCAlZzUJCQkhIE1vdmUgaW50byBhbHRlcm5hdGUgZ2xvYmFscworCW1vdgkJVExCX1NGU1IsICVnMQorCXN0eGEJCSVnMCwgWyVnMV0gQVNJX0RNTVUJCSEgQ2xlYXIgRmF1bHRWYWxpZCBiaXQKKwltZW1iYXIJCSNTeW5jCQkJCSEgU3luY2hyb25pemUgc3RvcmVzCisJcmRwcgkJJXBzdGF0ZSwgJWc1CQkJISBNb3ZlIGludG8gYWx0LWdsb2JhbHMKIAl3cnByCQklZzUsIFBTVEFURV9BR3xQU1RBVEVfTUcsICVwc3RhdGUKLQlyZHByCQkldGwsICVnMQkJCSEgTmVlZCB0byBkbyBhIHdpbmZpeHVwPworCXJkcHIJCSV0bCwgJWcxCQkJISBOZWVkIGEgd2luZml4dXA/CiAJY21wCQklZzEsIDEJCQkJISBUcmFwIGxldmVsID4xPwotCW1vdgkJVExCX1RBR19BQ0NFU1MsICVnNAkJISBQcmVwYXJlIHJlbG9hZCBvZiB2YWRkcgotCW5vcAorCW1vdgkJVExCX1RBR19BQ0NFU1MsICVnNAkJISBGb3IgcmVsb2FkIG9mIHZhZGRyCiAKIC8qIFBST1QgKiogSUNBQ0hFIGxpbmUgMjogTW9yZSByZWFsIGZhdWx0IHByb2Nlc3NpbmcgKi8KIAliZ3UscG4JCSV4Y2MsIHdpbmZpeF90cmFtcG9saW5lCQkhIFllcywgcGVyZm9ybSB3aW5maXh1cApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9lbnRyeS5TCmluZGV4IDNlMGJhZGIuLjExYTg0ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2VudHJ5LlMKQEAgLTMwLDE2NCArMzAsMTAgQEAKIAkudGV4dAogCS5hbGlnbgkJMzIKIAotCS5nbG9ibAkJc3BhcmM2NF92cHRlX3BhdGNobWUxCi0JLmdsb2JsCQlzcGFyYzY0X3ZwdGVfcGF0Y2htZTIKLS8qCi0gKiBPbiBhIHNlY29uZCBsZXZlbCB2cHRlIG1pc3MsIGNoZWNrIHdoZXRoZXIgdGhlIG9yaWdpbmFsIGZhdWx0IGlzIHRvIHRoZSBPQlAgCi0gKiByYW5nZSAobm90ZSB0aGF0IHRoaXMgaXMgb25seSBwb3NzaWJsZSBmb3IgaW5zdHJ1Y3Rpb24gbWlzcywgZGF0YSBtaXNzZXMgdG8KLSAqIG9icCByYW5nZSBkbyBub3QgdXNlIHZwdGUpLiBJZiBzbywgZ28gYmFjayBkaXJlY3RseSB0byB0aGUgZmF1bHRpbmcgYWRkcmVzcy4KLSAqIFRoaXMgaXMgYmVjYXVzZSB3ZSB3YW50IHRvIHJlYWQgdGhlIHRwYywgb3RoZXJ3aXNlIHdlIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcKLSAqIHRoZSA4ayBhbGlnbmVkIGZhdWx0aW5nIGFkZHJlc3MgaWYgd2UgYXJlIHVzaW5nID44ayBrZXJuZWwgcGFnZXNpemUuIFRoaXMKLSAqIGFsc28gZW5zdXJlcyBubyB2cHRlIHJhbmdlIGFkZHJlc3NlcyBhcmUgZHJvcHBlZCBpbnRvIHRsYiB3aGlsZSBvYnAgaXMKLSAqIGV4ZWN1dGluZyAoc2VlIGluaGVyaXRfbG9ja2VkX3Byb21fbWFwcGluZ3MoKSByYW50KS4KLSAqLwotc3BhcmM2NF92cHRlX251Y2xldXM6Ci0JLyogTG9hZCAweGYwMDAwMDAwLCB3aGljaCBpcyBMT1dfT0JQX0FERFJFU1MuICAqLwotCW1vdgkJMHhmLCAlZzUKLQlzbGx4CQklZzUsIDI4LCAlZzUKLQotCS8qIElzIGFkZHIgPj0gTE9XX09CUF9BRERSRVNTPyAgKi8KLQljbXAJCSVnNCwgJWc1Ci0JYmx1LHBuCQkleGNjLCBzcGFyYzY0X3ZwdGVfcGF0Y2htZTEKLQkgbW92CQkweDEsICVnNQotCi0JLyogTG9hZCAweDEwMDAwMDAwMCwgd2hpY2ggaXMgSElfT0JQX0FERFJFU1MuICAqLwotCXNsbHgJCSVnNSwgMzIsICVnNQotCi0JLyogSXMgYWRkciA8IEhJX09CUF9BRERSRVNTPyAgKi8KLQljbXAJCSVnNCwgJWc1Ci0JYmx1LHBuCQkleGNjLCBvYnBfaWFkZHJfcGF0Y2gKLQkgbm9wCi0KLQkvKiBUaGVzZSB0d28gaW5zdHJ1Y3Rpb25zIGFyZSBwYXRjaGVkIGJ5IHBhZ2luaWdfaW5pdCgpLiAgKi8KLXNwYXJjNjRfdnB0ZV9wYXRjaG1lMToKLQlzZXRoaQkJJWhpKDApLCAlZzUKLXNwYXJjNjRfdnB0ZV9wYXRjaG1lMjoKLQlvcgkJJWc1LCAlbG8oMCksICVnNQotCi0JLyogV2l0aCBrZXJuZWwgUEdEIGluICVnNSwgYnJhbmNoIGJhY2sgaW50byBkdGxiX2JhY2tlbmQuICAqLwotCWJhLHB0CQkleGNjLCBzcGFyYzY0X2twdGVfY29udGludWUKLQkgYW5kbgkJJWcxLCAweDMsICVnMQkvKiBGaW5pc2ggUE1EIG9mZnNldCBhZGp1c3RtZW50LiAgKi8KLQotdnB0ZV9ub2VudDoKLQkvKiBSZXN0b3JlIHByZXZpb3VzIFRBR19BQ0NFU1MsICVnNSBpcyB6ZXJvLCBhbmQgd2Ugd2lsbAotCSAqIHNraXAgb3ZlciB0aGUgdHJhcCBpbnN0cnVjdGlvbiBzbyB0aGF0IHRoZSB0b3AgbGV2ZWwKLQkgKiBUTEIgbWlzcyBoYW5kbGVyIHdpbGwgdGhpbmcgdGhpcyAlZzUgdmFsdWUgaXMganVzdCBhbgotCSAqIGludmFsaWQgUFRFLCB0aHVzIGJyYW5jaGluZyB0byBmdWxsIGZhdWx0IHByb2Nlc3NpbmcuCi0JICovCi0JbW92CQlUTEJfU0ZTUiwgJWcxCi0Jc3R4YQkJJWc0LCBbJWcxICsgJWcxXSBBU0lfRE1NVQotCWRvbmUKLQotCS5nbG9ibAkJb2JwX2lhZGRyX3BhdGNoCi1vYnBfaWFkZHJfcGF0Y2g6Ci0JLyogVGhlc2UgdHdvIGluc3RydWN0aW9ucyBwYXRjaGVkIGJ5IGluaGVyaXRfcHJvbV9tYXBwaW5ncygpLiAgKi8KLQlzZXRoaQkJJWhpKDApLCAlZzUKLQlvcgkJJWc1LCAlbG8oMCksICVnNQotCi0JLyogQmVoYXZlIGFzIGlmIHdlIGFyZSBhdCBUTDAuICAqLwotCXdycHIJCSVnMCwgMSwgJXRsCi0JcmRwcgkJJXRwYywgJWc0CS8qIEZpbmQgb3JpZ2luYWwgZmF1bHRpbmcgaWFkZHIgKi8KLQlzcmx4CQklZzQsIDEzLCAlZzQJLyogVGhyb3cgb3V0IGNvbnRleHQgYml0cyAqLwotCXNsbHgJCSVnNCwgMTMsICVnNAkvKiBnNCBoYXMgdnBuICsgY3R4MCBub3cgKi8KLQotCS8qIFJlc3RvcmUgcHJldmlvdXMgVEFHX0FDQ0VTUy4gICovCi0JbW92CQlUTEJfU0ZTUiwgJWcxCi0Jc3R4YQkJJWc0LCBbJWcxICsgJWcxXSBBU0lfSU1NVQotCi0JLyogR2V0IFBNRCBvZmZzZXQuICAqLwotCXNybHgJCSVnNCwgMjMsICVnNgotCWFuZAkJJWc2LCAweDdmZiwgJWc2Ci0Jc2xseAkJJWc2LCAyLCAlZzYKLQotCS8qIExvYWQgUE1ELCBpcyBpdCB2YWxpZD8gICovCi0JbGR1d2EJCVslZzUgKyAlZzZdIEFTSV9QSFlTX1VTRV9FQywgJWc1Ci0JYnJ6LHBuCQklZzUsIGxvbmdwYXRoCi0JIHNsbHgJCSVnNSwgMTEsICVnNQotCi0JLyogR2V0IFBURSBvZmZzZXQuICAqLwotCXNybHgJCSVnNCwgMTMsICVnNgotCWFuZAkJJWc2LCAweDNmZiwgJWc2Ci0Jc2xseAkJJWc2LCAzLCAlZzYKLQotCS8qIExvYWQgUFRFLiAgKi8KLQlsZHhhCQlbJWc1ICsgJWc2XSBBU0lfUEhZU19VU0VfRUMsICVnNQotCWJyZ2V6LHBuCSVnNSwgbG9uZ3BhdGgKLQkgbm9wCi0KLQkvKiBUTEIgbG9hZCBhbmQgcmV0dXJuIGZyb20gdHJhcC4gICovCi0Jc3R4YQkJJWc1LCBbJWcwXSBBU0lfSVRMQl9EQVRBX0lOCi0JcmV0cnkKLQotCS5nbG9ibAkJb2JwX2RhZGRyX3BhdGNoCi1vYnBfZGFkZHJfcGF0Y2g6Ci0JLyogVGhlc2UgdHdvIGluc3RydWN0aW9ucyBwYXRjaGVkIGJ5IGluaGVyaXRfcHJvbV9tYXBwaW5ncygpLiAgKi8KLQlzZXRoaQkJJWhpKDApLCAlZzUKLQlvcgkJJWc1LCAlbG8oMCksICVnNQotCi0JLyogR2V0IFBNRCBvZmZzZXQuICAqLwotCXNybHgJCSVnNCwgMjMsICVnNgotCWFuZAkJJWc2LCAweDdmZiwgJWc2Ci0Jc2xseAkJJWc2LCAyLCAlZzYKLQotCS8qIExvYWQgUE1ELCBpcyBpdCB2YWxpZD8gICovCi0JbGR1d2EJCVslZzUgKyAlZzZdIEFTSV9QSFlTX1VTRV9FQywgJWc1Ci0JYnJ6LHBuCQklZzUsIGxvbmdwYXRoCi0JIHNsbHgJCSVnNSwgMTEsICVnNQotCi0JLyogR2V0IFBURSBvZmZzZXQuICAqLwotCXNybHgJCSVnNCwgMTMsICVnNgotCWFuZAkJJWc2LCAweDNmZiwgJWc2Ci0Jc2xseAkJJWc2LCAzLCAlZzYKLQotCS8qIExvYWQgUFRFLiAgKi8KLQlsZHhhCQlbJWc1ICsgJWc2XSBBU0lfUEhZU19VU0VfRUMsICVnNQotCWJyZ2V6LHBuCSVnNSwgbG9uZ3BhdGgKLQkgbm9wCi0KLQkvKiBUTEIgbG9hZCBhbmQgcmV0dXJuIGZyb20gdHJhcC4gICovCi0Jc3R4YQkJJWc1LCBbJWcwXSBBU0lfRFRMQl9EQVRBX0lOCi0JcmV0cnkKLQotLyoKLSAqIE9uIGEgZmlyc3QgbGV2ZWwgZGF0YSBtaXNzLCBjaGVjayB3aGV0aGVyIHRoaXMgaXMgdG8gdGhlIE9CUCByYW5nZSAobm90ZQotICogdGhhdCBzdWNoIGFjY2Vzc2VzIGNhbiBiZSBtYWRlIGJ5IHByb20sIGFzIHdlbGwgYXMgYnkga2VybmVsIHVzaW5nCi0gKiBwcm9tX2dldHByb3BlcnR5IG9uICJhZGRyZXNzIiksIGFuZCBpZiBzbywgZG8gbm90IHVzZSB2cHRlIGFjY2VzcyAuLi4KLSAqIHJhdGhlciwgdXNlIGluZm9ybWF0aW9uIHNhdmVkIGR1cmluZyBpbmhlcml0X3Byb21fbWFwcGluZ3MoKSB1c2luZyA4awotICogcGFnZXNpemUuCi0gKi8KLWt2bWFwOgotCS8qIExvYWQgMHhmMDAwMDAwMCwgd2hpY2ggaXMgTE9XX09CUF9BRERSRVNTLiAgKi8KLQltb3YJCTB4ZiwgJWc1Ci0Jc2xseAkJJWc1LCAyOCwgJWc1Ci0KLQkvKiBJcyBhZGRyID49IExPV19PQlBfQUREUkVTUz8gICovCi0JY21wCQklZzQsICVnNQotCWJsdSxwbgkJJXhjYywgdm1hbGxvY19hZGRyCi0JIG1vdgkJMHgxLCAlZzUKLQotCS8qIExvYWQgMHgxMDAwMDAwMDAsIHdoaWNoIGlzIEhJX09CUF9BRERSRVNTLiAgKi8KLQlzbGx4CQklZzUsIDMyLCAlZzUKLQotCS8qIElzIGFkZHIgPCBISV9PQlBfQUREUkVTUz8gICovCi0JY21wCQklZzQsICVnNQotCWJsdSxwbgkJJXhjYywgb2JwX2RhZGRyX3BhdGNoCi0JIG5vcAotCi12bWFsbG9jX2FkZHI6Ci0JLyogSWYgd2UgZ2V0IGhlcmUsIGEgdm1hbGxvYyBhZGRyIGFjY2Vzc2VkLCBsb2FkIGtlcm5lbCBWUFRFLiAgKi8KLQlsZHhhCQlbJWczICsgJWc2XSBBU0lfTiwgJWc1Ci0JYnJnZXoscG4JJWc1LCBsb25ncGF0aAotCSBub3AKLQotCS8qIFBURSBpcyB2YWxpZCwgbG9hZCBpbnRvIFRMQiBhbmQgcmV0dXJuIGZyb20gdHJhcC4gICovCi0Jc3R4YQkJJWc1LCBbJWcwXSBBU0lfRFRMQl9EQVRBX0lOCSEgUmVsb2FkIFRMQgotCXJldHJ5Ci0KIAkvKiBUaGlzIGlzIHRyaXZpYWwgd2l0aCB0aGUgbmV3IGNvZGUuLi4gKi8KIAkuZ2xvYmwJCWRvX2ZwZGlzCiBkb19mcGRpczoKLQlzZXRoaQkJJWhpKFRTVEFURV9QRUYpLCAlZzQJCQkJCSEgSUVVMAorCXNldGhpCQklaGkoVFNUQVRFX1BFRiksICVnNAogCXJkcHIJCSV0c3RhdGUsICVnNQogCWFuZGNjCQklZzUsICVnNCwgJWcwCiAJYmUscHQJCSV4Y2MsIDFmCkBAIC0yMDQsMTggKzUwLDE4IEBACiAJYWRkCQklZzAsICVnMCwgJWcwCiAJYmEsYSxwdAkJJXhjYywgcnRyYXBfY2xyX2w2CiAKLTE6CWxkdWIJCVslZzYgKyBUSV9GUFNBVkVEXSwgJWc1CQkJCQkhIExvYWQJR3JvdXAKLQl3cgkJJWcwLCBGUFJTX0ZFRiwgJWZwcnMJCQkJCSEgTFNVCUdyb3VwKzRidWJibGVzCi0JYW5kY2MJCSVnNSwgRlBSU19GRUYsICVnMAkJCQkJISBJRVUxCUdyb3VwCi0JYmUsYSxwdAkJJWljYywgMWYJCQkJCQkhIENUSQotCSBjbHIJCSVnNwkJCQkJCQkhIElFVTAKLQlsZHgJCVslZzYgKyBUSV9HU1JdLCAlZzcJCQkJCSEgTG9hZAlHcm91cAotMToJYW5kY2MJCSVnNSwgRlBSU19ETCwgJWcwCQkJCQkhIElFVTEKLQlibmUscG4JCSVpY2MsIDJmCQkJCQkJISBDVEkKLQkgZnplcm8JCSVmMAkJCQkJCQkhIEZQQQotCWFuZGNjCQklZzUsIEZQUlNfRFUsICVnMAkJCQkJISBJRVUxICBHcm91cAotCWJuZSxwbgkJJWljYywgMWYJCQkJCQkhIENUSQotCSBmemVybwkJJWYyCQkJCQkJCSEgRlBBCisxOglsZHViCQlbJWc2ICsgVElfRlBTQVZFRF0sICVnNQorCXdyCQklZzAsIEZQUlNfRkVGLCAlZnBycworCWFuZGNjCQklZzUsIEZQUlNfRkVGLCAlZzAKKwliZSxhLHB0CQklaWNjLCAxZgorCSBjbHIJCSVnNworCWxkeAkJWyVnNiArIFRJX0dTUl0sICVnNworMToJYW5kY2MJCSVnNSwgRlBSU19ETCwgJWcwCisJYm5lLHBuCQklaWNjLCAyZgorCSBmemVybwkJJWYwCisJYW5kY2MJCSVnNSwgRlBSU19EVSwgJWcwCisJYm5lLHBuCQklaWNjLCAxZgorCSBmemVybwkJJWYyCiAJZmFkZGQJCSVmMCwgJWYyLCAlZjQKIAlmbXVsZAkJJWYwLCAlZjIsICVmNgogCWZhZGRkCQklZjAsICVmMiwgJWY4CkBAIC0yNTEsMTUgKzk3LDE3IEBACiAJZmFkZGQJCSVmMCwgJWYyLCAlZjQKIAlmbXVsZAkJJWYwLCAlZjIsICVmNgogCWxkeGEJCVslZzNdIEFTSV9ETU1VLCAlZzUKLWNwbHVzX2ZwdHJhcF9pbnNuXzE6Ci0Jc2V0aGkJCSVoaSgwKSwgJWcyCisJc2V0aGkJCSVoaShzcGFyYzY0X2tlcm5fc2VjX2NvbnRleHQpLCAlZzIKKwlsZHgJCVslZzIgKyAlbG8oc3BhcmM2NF9rZXJuX3NlY19jb250ZXh0KV0sICVnMgogCXN0eGEJCSVnMiwgWyVnM10gQVNJX0RNTVUKIAltZW1iYXIJCSNTeW5jCiAJYWRkCQklZzYsIFRJX0ZQUkVHUyArIDB4YzAsICVnMgogCWZhZGRkCQklZjAsICVmMiwgJWY4CiAJZm11bGQJCSVmMCwgJWYyLCAlZjEwCi0JbGRkYQkJWyVnMV0gQVNJX0JMS19TLCAlZjMyCSEgZ3Jyciwgd2hlcmUgaXMgQVNJX0JMS19OVUNMRVVTIDgtKAorCW1lbWJhcgkJI1N5bmMKKwlsZGRhCQlbJWcxXSBBU0lfQkxLX1MsICVmMzIKIAlsZGRhCQlbJWcyXSBBU0lfQkxLX1MsICVmNDgKKwltZW1iYXIJCSNTeW5jCiAJZmFkZGQJCSVmMCwgJWYyLCAlZjEyCiAJZm11bGQJCSVmMCwgJWYyLCAlZjE0CiAJZmFkZGQJCSVmMCwgJWYyLCAlZjE2CkBAIC0yNzAsNyArMTE4LDYgQEAKIAlmbXVsZAkJJWYwLCAlZjIsICVmMjYKIAlmYWRkZAkJJWYwLCAlZjIsICVmMjgKIAlmbXVsZAkJJWYwLCAlZjIsICVmMzAKLQltZW1iYXIJCSNTeW5jCiAJYixwdAkJJXhjYywgZnBkaXNfZXhpdAogCSBub3AKIDI6CWFuZGNjCQklZzUsIEZQUlNfRFUsICVnMApAQCAtMjgwLDE1ICsxMjcsMTcgQEAKIAlmemVybwkJJWYzNAogCWxkeGEJCVslZzNdIEFTSV9ETU1VLCAlZzUKIAlhZGQJCSVnNiwgVElfRlBSRUdTLCAlZzEKLWNwbHVzX2ZwdHJhcF9pbnNuXzI6Ci0Jc2V0aGkJCSVoaSgwKSwgJWcyCisJc2V0aGkJCSVoaShzcGFyYzY0X2tlcm5fc2VjX2NvbnRleHQpLCAlZzIKKwlsZHgJCVslZzIgKyAlbG8oc3BhcmM2NF9rZXJuX3NlY19jb250ZXh0KV0sICVnMgogCXN0eGEJCSVnMiwgWyVnM10gQVNJX0RNTVUKIAltZW1iYXIJCSNTeW5jCiAJYWRkCQklZzYsIFRJX0ZQUkVHUyArIDB4NDAsICVnMgogCWZhZGRkCQklZjMyLCAlZjM0LCAlZjM2CiAJZm11bGQJCSVmMzIsICVmMzQsICVmMzgKLQlsZGRhCQlbJWcxXSBBU0lfQkxLX1MsICVmMAkhIGdycnIsIHdoZXJlIGlzIEFTSV9CTEtfTlVDTEVVUyA4LSgKKwltZW1iYXIJCSNTeW5jCisJbGRkYQkJWyVnMV0gQVNJX0JMS19TLCAlZjAKIAlsZGRhCQlbJWcyXSBBU0lfQkxLX1MsICVmMTYKKwltZW1iYXIJCSNTeW5jCiAJZmFkZGQJCSVmMzIsICVmMzQsICVmNDAKIAlmbXVsZAkJJWYzMiwgJWYzNCwgJWY0MgogCWZhZGRkCQklZjMyLCAlZjM0LCAlZjQ0CkBAIC0zMDEsMTggKzE1MCwxOCBAQAogCWZtdWxkCQklZjMyLCAlZjM0LCAlZjU4CiAJZmFkZGQJCSVmMzIsICVmMzQsICVmNjAKIAlmbXVsZAkJJWYzMiwgJWYzNCwgJWY2MgotCW1lbWJhcgkJI1N5bmMKIAliYSxwdAkJJXhjYywgZnBkaXNfZXhpdAogCSBub3AKIDM6CW1vdgkJU0VDT05EQVJZX0NPTlRFWFQsICVnMwogCWFkZAkJJWc2LCBUSV9GUFJFR1MsICVnMQogCWxkeGEJCVslZzNdIEFTSV9ETU1VLCAlZzUKLWNwbHVzX2ZwdHJhcF9pbnNuXzM6Ci0Jc2V0aGkJCSVoaSgwKSwgJWcyCisJc2V0aGkJCSVoaShzcGFyYzY0X2tlcm5fc2VjX2NvbnRleHQpLCAlZzIKKwlsZHgJCVslZzIgKyAlbG8oc3BhcmM2NF9rZXJuX3NlY19jb250ZXh0KV0sICVnMgogCXN0eGEJCSVnMiwgWyVnM10gQVNJX0RNTVUKIAltZW1iYXIJCSNTeW5jCiAJbW92CQkweDQwLCAlZzIKLQlsZGRhCQlbJWcxXSBBU0lfQkxLX1MsICVmMAkJISBncnJyLCB3aGVyZSBpcyBBU0lfQkxLX05VQ0xFVVMgOC0oCisJbWVtYmFyCQkjU3luYworCWxkZGEJCVslZzFdIEFTSV9CTEtfUywgJWYwCiAJbGRkYQkJWyVnMSArICVnMl0gQVNJX0JMS19TLCAlZjE2CiAJYWRkCQklZzEsIDB4ODAsICVnMQogCWxkZGEJCVslZzFdIEFTSV9CTEtfUywgJWYzMgpAQCAtNDczLDggKzMyMiw4IEBACiAJc3R4CQklZzMsIFslZzYgKyBUSV9HU1JdCiAJbW92CQlTRUNPTkRBUllfQ09OVEVYVCwgJWczCiAJbGR4YQkJWyVnM10gQVNJX0RNTVUsICVnNQotY3BsdXNfZnB0cmFwX2luc25fNDoKLQlzZXRoaQkJJWhpKDApLCAlZzIKKwlzZXRoaQkJJWhpKHNwYXJjNjRfa2Vybl9zZWNfY29udGV4dCksICVnMgorCWxkeAkJWyVnMiArICVsbyhzcGFyYzY0X2tlcm5fc2VjX2NvbnRleHQpXSwgJWcyCiAJc3R4YQkJJWcyLCBbJWczXSBBU0lfRE1NVQogCW1lbWJhcgkJI1N5bmMKIAlhZGQJCSVnNiwgVElfRlBSRUdTLCAlZzIKQEAgLTQ5NSw0NSArMzQ0LDE3IEBACiAJYmEscHQJCSV4Y2MsIGV0cmFwCiAJIHdyCQklZzAsIDAsICVmcHJzCiAKLWNwbHVzX2ZwdHJhcF8xOgotCXNldGhpCQklaGkoQ1RYX0NIRUVUQUhfUExVU19DVFgwKSwgJWcyCi0KLQkuZ2xvYmwJCWNoZWV0YWhfcGx1c19wYXRjaF9mcGRpcwotY2hlZXRhaF9wbHVzX3BhdGNoX2ZwZGlzOgotCS8qIFdlIGNvbmZpZ3VyZSB0aGUgZFRMQjUxMl8wIGZvciA0TUIgcGFnZXMgYW5kIHRoZQotCSAqIGRUTEI1MTJfMSBmb3IgOEsgcGFnZXMgd2hlbiBpbiBjb250ZXh0IHplcm8uCi0JICovCi0Jc2V0aGkJCQklaGkoY3BsdXNfZnB0cmFwXzEpLCAlbzAKLQlsZHV3CQkJWyVvMCArICVsbyhjcGx1c19mcHRyYXBfMSldLCAlbzEKLQotCXNldAkJCWNwbHVzX2ZwdHJhcF9pbnNuXzEsICVvMgotCXN0dwkJCSVvMSwgWyVvMl0KLQlmbHVzaAkJCSVvMgotCXNldAkJCWNwbHVzX2ZwdHJhcF9pbnNuXzIsICVvMgotCXN0dwkJCSVvMSwgWyVvMl0KLQlmbHVzaAkJCSVvMgotCXNldAkJCWNwbHVzX2ZwdHJhcF9pbnNuXzMsICVvMgotCXN0dwkJCSVvMSwgWyVvMl0KLQlmbHVzaAkJCSVvMgotCXNldAkJCWNwbHVzX2ZwdHJhcF9pbnNuXzQsICVvMgotCXN0dwkJCSVvMSwgWyVvMl0KLQlmbHVzaAkJCSVvMgotCi0JcmV0bAotCSBub3AKLQogCS8qIFRoZSByZWdpc3RlcnMgZm9yIGNyb3NzIGNhbGxzIHdpbGwgYmU6CiAJICoKIAkgKiBEQVRBIDA6IFtsb3cgMzItYml0c10gIEFkZHJlc3Mgb2YgZnVuY3Rpb24gdG8gY2FsbCwgam1wIHRvIHRoaXMKIAkgKiAgICAgICAgIFtoaWdoIDMyLWJpdHNdIE1NVSBDb250ZXh0IEFyZ3VtZW50IDAsIHBsYWNlIGluICVnNQotCSAqIERBVEEgMTogQWRkcmVzcyBBcmd1bWVudCAxLCBwbGFjZSBpbiAlZzYKKwkgKiBEQVRBIDE6IEFkZHJlc3MgQXJndW1lbnQgMSwgcGxhY2UgaW4gJWcxCiAJICogREFUQSAyOiBBZGRyZXNzIEFyZ3VtZW50IDIsIHBsYWNlIGluICVnNwogCSAqCiAJICogV2l0aCB0aGlzIG1ldGhvZCB3ZSBjYW4gZG8gbW9zdCBvZiB0aGUgY3Jvc3MtY2FsbCB0bGIvY2FjaGUKIAkgKiBmbHVzaGluZyB2ZXJ5IHF1aWNrbHkuCiAJICoKLQkgKiBDdXJyZW50IENQVSdzIElSUSB3b3JrbGlzdCB0YWJsZSBpcyBsb2NrZWQgaW50byAlZzEsCi0JICogZG9uJ3QgdG91Y2guCisJICogQ3VycmVudCBDUFUncyBJUlEgd29ya2xpc3QgdGFibGUgaXMgbG9ja2VkIGludG8gJWc2LCBkb24ndCB0b3VjaC4KIAkgKi8KIAkudGV4dAogCS5hbGlnbgkJMzIKQEAgLTEwMDcsMTMgKzgyOCwxNCBAQAogCW5vcAogCiBkb19jaGVldGFoX3BsdXNfZGF0YV9wYXJpdHk6Ci0JYmEscHQJCSV4Y2MsIGV0cmFwCisJcmRwcgkJJXBpbCwgJWcyCisJd3JwcgkJJWcwLCAxNSwgJXBpbAorCWJhLHB0CQkleGNjLCBldHJhcF9pcnEKIAkgcmQJCSVwYywgJWc3CiAJbW92CQkweDAsICVvMAogCWNhbGwJCWNoZWV0YWhfcGx1c19wYXJpdHlfZXJyb3IKIAkgYWRkCQklc3AsIFBUUkVHU19PRkYsICVvMQotCWJhLHB0CQkleGNjLCBydHJhcAotCSBjbHIJCSVsNgorCWJhLGEscHQJCSV4Y2MsIHJ0cmFwX2lycQogCiBjaGVldGFoX3BsdXNfZGNwZV90cmFwX3ZlY3Rvcl90bDE6CiAJbWVtYmFyCQkjU3luYwpAQCAtMTAzNywxMyArODU5LDE0IEBACiAJbm9wCiAKIGRvX2NoZWV0YWhfcGx1c19pbnNuX3Bhcml0eToKLQliYSxwdAkJJXhjYywgZXRyYXAKKwlyZHByCQklcGlsLCAlZzIKKwl3cnByCQklZzAsIDE1LCAlcGlsCisJYmEscHQJCSV4Y2MsIGV0cmFwX2lycQogCSByZAkJJXBjLCAlZzcKIAltb3YJCTB4MSwgJW8wCiAJY2FsbAkJY2hlZXRhaF9wbHVzX3Bhcml0eV9lcnJvcgogCSBhZGQJCSVzcCwgUFRSRUdTX09GRiwgJW8xCi0JYmEscHQJCSV4Y2MsIHJ0cmFwCi0JIGNscgkJJWw2CisJYmEsYSxwdAkJJXhjYywgcnRyYXBfaXJxCiAKIGNoZWV0YWhfcGx1c19pY3BlX3RyYXBfdmVjdG9yX3RsMToKIAltZW1iYXIJCSNTeW5jCkBAIC0xMDc2LDYgKzg5OSwxMCBAQAogCSBub3AKIAl3cnByCQklZzEsICV0bAkJISBSZXN0b3JlIG9yaWdpbmFsIHRyYXAgbGV2ZWwKIGRvX2RjcGVfdGwxX25vbmZhdGFsOgkvKiBPayB3ZSBtYXkgdXNlIGludGVycnVwdCBnbG9iYWxzIHNhZmVseS4gKi8KKwlzZXRoaQkJJWhpKGRjYWNoZV9wYXJpdHlfdGwxX29jY3VycmVkKSwgJWcyCisJbGR1dwkJWyVnMiArICVsbyhkY2FjaGVfcGFyaXR5X3RsMV9vY2N1cnJlZCldLCAlZzEKKwlhZGQJCSVnMSwgMSwgJWcxCisJc3R3CQklZzEsIFslZzIgKyAlbG8oZGNhY2hlX3Bhcml0eV90bDFfb2NjdXJyZWQpXQogCS8qIFJlc2V0IEQtY2FjaGUgcGFyaXR5ICovCiAJc2V0aGkJCSVoaSgxIDw8IDE2KSwgJWcxCSEgRC1jYWNoZSBzaXplCiAJbW92CQkoMSA8PCA1KSwgJWcyCQkhIEQtY2FjaGUgbGluZSBzaXplCkBAIC0xMTIyLDYgKzk0OSwxMCBAQAogCSBub3AKIAl3cnByCQklZzEsICV0bAkJISBSZXN0b3JlIG9yaWdpbmFsIHRyYXAgbGV2ZWwKIGRvX2ljcGVfdGwxX25vbmZhdGFsOgkvKiBPayB3ZSBtYXkgdXNlIGludGVycnVwdCBnbG9iYWxzIHNhZmVseS4gKi8KKwlzZXRoaQkJJWhpKGljYWNoZV9wYXJpdHlfdGwxX29jY3VycmVkKSwgJWcyCisJbGR1dwkJWyVnMiArICVsbyhpY2FjaGVfcGFyaXR5X3RsMV9vY2N1cnJlZCldLCAlZzEKKwlhZGQJCSVnMSwgMSwgJWcxCisJc3R3CQklZzEsIFslZzIgKyAlbG8oaWNhY2hlX3Bhcml0eV90bDFfb2NjdXJyZWQpXQogCS8qIEZsdXNoIEktY2FjaGUgKi8KIAlzZXRoaQkJJWhpKDEgPDwgMTUpLCAlZzEJISBJLWNhY2hlIHNpemUKIAltb3YJCSgxIDw8IDUpLCAlZzIJCSEgSS1jYWNoZSBsaW5lIHNpemUKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZXRyYXAuUyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvZXRyYXAuUwppbmRleCA1MGQyYWYxLi4wZDhlYmEyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2V0cmFwLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9ldHJhcC5TCkBAIC02OCwxMiArNjgsOCBAQAogCiAJCXdycHIJJWczLCAwLCAlb3RoZXJ3aW4KIAkJd3JwcgklZzIsIDAsICV3c3RhdGUKLWNwbHVzX2V0cmFwX2luc25fMToKLQkJc2V0aGkJJWhpKDApLCAlZzMKLQkJc2xseAklZzMsIDMyLCAlZzMKLWNwbHVzX2V0cmFwX2luc25fMjoKLQkJc2V0aGkJJWhpKDApLCAlZzIKLQkJb3IJJWczLCAlZzIsICVnMworCQlzZXRoaQklaGkoc3BhcmM2NF9rZXJuX3ByaV9jb250ZXh0KSwgJWcyCisJCWxkeAlbJWcyICsgJWxvKHNwYXJjNjRfa2Vybl9wcmlfY29udGV4dCldLCAlZzMKIAkJc3R4YQklZzMsIFslbDRdIEFTSV9ETU1VCiAJCWZsdXNoCSVsNgogCQl3cgklZzAsIEFTSV9BSVVTLCAlYXNpCkBAIC0yMTUsMTIgKzIxMSw4IEBACiAJCW1vdglQUklNQVJZX0NPTlRFWFQsICVsNAogCQl3cnByCSVnMywgMCwgJW90aGVyd2luCiAJCXdycHIJJWcyLCAwLCAld3N0YXRlCi1jcGx1c19ldHJhcF9pbnNuXzM6Ci0JCXNldGhpCSVoaSgwKSwgJWczCi0JCXNsbHgJJWczLCAzMiwgJWczCi1jcGx1c19ldHJhcF9pbnNuXzQ6Ci0JCXNldGhpCSVoaSgwKSwgJWcyCi0JCW9yCSVnMywgJWcyLCAlZzMKKwkJc2V0aGkJJWhpKHNwYXJjNjRfa2Vybl9wcmlfY29udGV4dCksICVnMgorCQlsZHgJWyVnMiArICVsbyhzcGFyYzY0X2tlcm5fcHJpX2NvbnRleHQpXSwgJWczCiAJCXN0eGEJJWczLCBbJWw0XSBBU0lfRE1NVQogCQlmbHVzaAklbDYKIApAQCAtMjY0LDM4ICsyNTYsMyBAQAogCiAjdW5kZWYgVEFTS19SRUdPRkYKICN1bmRlZiBFVFJBUF9QU1RBVEUxCi0KLWNwbHVzX2VpbnNuXzE6Ci0JCXNldGhpCQkJJXVoaShDVFhfQ0hFRVRBSF9QTFVTX05VQyksICVnMwotY3BsdXNfZWluc25fMjoKLQkJc2V0aGkJCQklaGkoQ1RYX0NIRUVUQUhfUExVU19DVFgwKSwgJWcyCi0KLQkJLmdsb2JsCQkJY2hlZXRhaF9wbHVzX3BhdGNoX2V0cmFwCi1jaGVldGFoX3BsdXNfcGF0Y2hfZXRyYXA6Ci0JCS8qIFdlIGNvbmZpZ3VyZSB0aGUgZFRMQjUxMl8wIGZvciA0TUIgcGFnZXMgYW5kIHRoZQotCQkgKiBkVExCNTEyXzEgZm9yIDhLIHBhZ2VzIHdoZW4gaW4gY29udGV4dCB6ZXJvLgotCQkgKi8KLQkJc2V0aGkJCQklaGkoY3BsdXNfZWluc25fMSksICVvMAotCQlzZXRoaQkJCSVoaShjcGx1c19ldHJhcF9pbnNuXzEpLCAlbzIKLQkJbGR1dwkJCVslbzAgKyAlbG8oY3BsdXNfZWluc25fMSldLCAlbzEKLQkJb3IJCQklbzIsICVsbyhjcGx1c19ldHJhcF9pbnNuXzEpLCAlbzIKLQkJc3R3CQkJJW8xLCBbJW8yXQotCQlmbHVzaAkJCSVvMgotCQlzZXRoaQkJCSVoaShjcGx1c19ldHJhcF9pbnNuXzMpLCAlbzIKLQkJb3IJCQklbzIsICVsbyhjcGx1c19ldHJhcF9pbnNuXzMpLCAlbzIKLQkJc3R3CQkJJW8xLCBbJW8yXQotCQlmbHVzaAkJCSVvMgotCi0JCXNldGhpCQkJJWhpKGNwbHVzX2VpbnNuXzIpLCAlbzAKLQkJc2V0aGkJCQklaGkoY3BsdXNfZXRyYXBfaW5zbl8yKSwgJW8yCi0JCWxkdXcJCQlbJW8wICsgJWxvKGNwbHVzX2VpbnNuXzIpXSwgJW8xCi0JCW9yCQkJJW8yLCAlbG8oY3BsdXNfZXRyYXBfaW5zbl8yKSwgJW8yCi0JCXN0dwkJCSVvMSwgWyVvMl0KLQkJZmx1c2gJCQklbzIKLQkJc2V0aGkJCQklaGkoY3BsdXNfZXRyYXBfaW5zbl80KSwgJW8yCi0JCW9yCQkJJW8yLCAlbG8oY3BsdXNfZXRyYXBfaW5zbl80KSwgJW8yCi0JCXN0dwkJCSVvMSwgWyVvMl0KLQkJZmx1c2gJCQklbzIKLQotCQlyZXRsCi0JCSBub3AKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaGVhZC5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9oZWFkLlMKaW5kZXggMWZhMDZjNC4uYjQ5ZGNkNCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9oZWFkLlMKQEAgLTI4LDE5ICsyOCwxNCBAQAogI2luY2x1ZGUgPGFzbS9tbXUuaD4KIAkKIC8qIFRoaXMgc2VjdGlvbiBmcm9tIGZyb20gX3N0YXJ0IHRvIHNwYXJjNjRfYm9vdF9lbmQgc2hvdWxkIGZpdCBpbnRvCi0gKiAweDAwMDAuMDAwMC4wMDQwLjQwMDAgdG8gMHgwMDAwLjAwMDAuMDA0MC44MDAwIGFuZCB3aWxsIGJlIHNoYXJpbmcgc3BhY2UKLSAqIHdpdGggYm9vdHVwX3VzZXJfc3RhY2ssIHdoaWNoIGlzIGZyb20gMHgwMDAwLjAwMDAuMDA0MC40MDAwIHRvCi0gKiAweDAwMDAuMDAwMC4wMDQwLjYwMDAgYW5kIGVtcHR5X2JhZF9wYWdlLCB3aGljaCBpcyBmcm9tCi0gKiAweDAwMDAuMDAwMC4wMDQwLjYwMDAgdG8gMHgwMDAwLjAwMDAuMDA0MC44MDAwLiAKKyAqIDB4MDAwMDAwMDAwMDQwNDAwMCB0byAweDAwMDAwMDAwMDA0MDgwMDAuCiAgKi8KLQogCS50ZXh0CiAJLmdsb2JsCXN0YXJ0LCBfc3RhcnQsIHN0ZXh0LCBfc3RleHQKIF9zdGFydDoKIHN0YXJ0OgogX3N0ZXh0Ogogc3RleHQ6Ci1ib290dXBfdXNlcl9zdGFjazoKICEgMHgwMDAwMDAwMDAwNDA0MDAwCiAJYglzcGFyYzY0X2Jvb3QKIAkgZmx1c2h3CQkJCQkvKiBGbHVzaCByZWdpc3RlciBmaWxlLiAgICAgICovCkBAIC04MCwxNSArNzUsMTY5IEBACiAJLnh3b3JkCTAKIAkud29yZAlfZW5kCiAKLQkvKiBXZSBtdXN0IGJlIGNhcmVmdWwsIDMyLWJpdCBPcGVuQk9PVCB3aWxsIGdldCBjb25mdXNlZCBpZiBpdAotCSAqIHRyaWVzIHRvIHNhdmUgYXdheSBhIHJlZ2lzdGVyIHdpbmRvdyB0byBhIDY0LWJpdCBrZXJuZWwKLQkgKiBzdGFjayBhZGRyZXNzLiAgRmx1c2ggYWxsIHdpbmRvd3MsIGRpc2FibGUgaW50ZXJydXB0cywKLQkgKiByZW1hcCBpZiBuZWNlc3NhcnksIGp1bXAgb250byBrZXJuZWwgdHJhcCB0YWJsZSwgdGhlbiBrZXJuZWwKLQkgKiBzdGFjaywgb3IgZWxzZSB3ZSBkaWUuCi0JICoKLQkgKiBQUk9NIGVudHJ5IHBvaW50IGlzIG9uICVvNAotCSAqLworCS8qIFBST00gY2lmIGhhbmRsZXIgY29kZSBhZGRyZXNzIGlzIGluICVvNC4gICovCiBzcGFyYzY0X2Jvb3Q6CisxOglyZAklcGMsICVnNworCXNldAkxYiwgJWcxCisJY21wCSVnMSwgJWc3CisJYmUscG4JJXhjYywgc3BhcmM2NF9ib290X2FmdGVyX3JlbWFwCisJIG1vdgklbzQsICVsNworCisJLyogV2UgbmVlZCB0byByZW1hcCB0aGUga2VybmVsLiAgVXNlIHBvc2l0aW9uIGluZGVwZW5kYW50CisJICogY29kZSB0byByZW1hcCB1cyB0byBLRVJOQkFTRS4KKwkgKgorCSAqIFNJTE8gY2FuIGludm9rZSB1cyB3aXRoIDMyLWJpdCBhZGRyZXNzIG1hc2tpbmcgZW5hYmxlZCwKKwkgKiBzbyBtYWtlIHN1cmUgdGhhdCdzIGNsZWFyLgorCSAqLworCXJkcHIJJXBzdGF0ZSwgJWcxCisJYW5kbgklZzEsIFBTVEFURV9BTSwgJWcxCisJd3JwcgklZzEsIDB4MCwgJXBzdGF0ZQorCWJhLGEscHQJJXhjYywgMWYKKworCS5nbG9ibAlwcm9tX2ZpbmRkZXZfbmFtZSwgcHJvbV9jaG9zZW5fcGF0aAorCS5nbG9ibAlwcm9tX2dldHByb3BfbmFtZSwgcHJvbV9tbXVfbmFtZQorCS5nbG9ibAlwcm9tX2NhbGxtZXRob2RfbmFtZSwgcHJvbV90cmFuc2xhdGVfbmFtZQorCS5nbG9ibAlwcm9tX21hcF9uYW1lLCBwcm9tX3VubWFwX25hbWUsIHByb21fbW11X2loYW5kbGVfY2FjaGUKKwkuZ2xvYmwJcHJvbV9ib290X21hcHBlZF9wYywgcHJvbV9ib290X21hcHBpbmdfbW9kZQorCS5nbG9ibAlwcm9tX2Jvb3RfbWFwcGluZ19waHlzX2hpZ2gsIHByb21fYm9vdF9tYXBwaW5nX3BoeXNfbG93Citwcm9tX2ZpbmRkZXZfbmFtZToKKwkuYXNjaXoJImZpbmRkZXZpY2UiCitwcm9tX2Nob3Nlbl9wYXRoOgorCS5hc2NpegkiL2Nob3NlbiIKK3Byb21fZ2V0cHJvcF9uYW1lOgorCS5hc2NpegkiZ2V0cHJvcCIKK3Byb21fbW11X25hbWU6CisJLmFzY2l6CSJtbXUiCitwcm9tX2NhbGxtZXRob2RfbmFtZToKKwkuYXNjaXoJImNhbGwtbWV0aG9kIgorcHJvbV90cmFuc2xhdGVfbmFtZToKKwkuYXNjaXoJInRyYW5zbGF0ZSIKK3Byb21fbWFwX25hbWU6CisJLmFzY2l6CSJtYXAiCitwcm9tX3VubWFwX25hbWU6CisJLmFzY2l6CSJ1bm1hcCIKKwkuYWxpZ24JNAorcHJvbV9tbXVfaWhhbmRsZV9jYWNoZToKKwkud29yZAkwCitwcm9tX2Jvb3RfbWFwcGVkX3BjOgorCS53b3JkCTAKK3Byb21fYm9vdF9tYXBwaW5nX21vZGU6CisJLndvcmQJMAorCS5hbGlnbgk4Citwcm9tX2Jvb3RfbWFwcGluZ19waHlzX2hpZ2g6CisJLnh3b3JkCTAKK3Byb21fYm9vdF9tYXBwaW5nX3BoeXNfbG93OgorCS54d29yZAkwCisxOgorCXJkCSVwYywgJWwwCisJbW92CSgxYiAtIHByb21fZmluZGRldl9uYW1lKSwgJWwxCisJbW92CSgxYiAtIHByb21fY2hvc2VuX3BhdGgpLCAlbDIKKwltb3YJKDFiIC0gcHJvbV9ib290X21hcHBlZF9wYyksICVsMworCXN1YgklbDAsICVsMSwgJWwxCisJc3ViCSVsMCwgJWwyLCAlbDIKKwlzdWIJJWwwLCAlbDMsICVsMworCXN0dwklbDAsIFslbDNdCisJc3ViCSVzcCwgKDE5MiArIDEyOCksICVzcAorCisJLyogY2hvc2VuX25vZGUgPSBwcm9tX2ZpbmRkZXZpY2UoIi9jaG9zZW4iKSAqLworCXN0eAklbDEsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHgwMF0JISBzZXJ2aWNlLCAiZmluZGRldmljZSIKKwltb3YJMSwgJWwzCisJc3R4CSVsMywgWyVzcCArIDIwNDcgKyAxMjggKyAweDA4XQkhIG51bV9hcmdzLCAxCisJc3R4CSVsMywgWyVzcCArIDIwNDcgKyAxMjggKyAweDEwXQkhIG51bV9yZXRzLCAxCisJc3R4CSVsMiwgWyVzcCArIDIwNDcgKyAxMjggKyAweDE4XQkhIGFyZzEsICIvY2hvc2VuIgorCXN0eAklZzAsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHgyMF0JISByZXQxCisJY2FsbAklbDcKKwkgYWRkCSVzcCwgKDIwNDcgKyAxMjgpLCAlbzAJCSEgYXJndW1lbnQgYXJyYXkKKworCWxkeAlbJXNwICsgMjA0NyArIDEyOCArIDB4MjBdLCAlbDQJISBjaG9zZW4gZGV2aWNlIG5vZGUKKworCW1vdgkoMWIgLSBwcm9tX2dldHByb3BfbmFtZSksICVsMQorCW1vdgkoMWIgLSBwcm9tX21tdV9uYW1lKSwgJWwyCisJbW92CSgxYiAtIHByb21fbW11X2loYW5kbGVfY2FjaGUpLCAlbDUKKwlzdWIJJWwwLCAlbDEsICVsMQorCXN1YgklbDAsICVsMiwgJWwyCisJc3ViCSVsMCwgJWw1LCAlbDUKKworCS8qIHByb21fbW11X2loYW5kbGVfY2FjaGUgPSBwcm9tX2dldGludChjaG9zZW5fbm9kZSwgIm1tdSIpICovCisJc3R4CSVsMSwgWyVzcCArIDIwNDcgKyAxMjggKyAweDAwXQkhIHNlcnZpY2UsICJnZXRwcm9wIgorCW1vdgk0LCAlbDMKKwlzdHgJJWwzLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MDhdCSEgbnVtX2FyZ3MsIDQKKwltb3YJMSwgJWwzCisJc3R4CSVsMywgWyVzcCArIDIwNDcgKyAxMjggKyAweDEwXQkhIG51bV9yZXRzLCAxCisJc3R4CSVsNCwgWyVzcCArIDIwNDcgKyAxMjggKyAweDE4XQkhIGFyZzEsIGNob3Nlbl9ub2RlCisJc3R4CSVsMiwgWyVzcCArIDIwNDcgKyAxMjggKyAweDIwXQkhIGFyZzIsICJtbXUiCisJc3R4CSVsNSwgWyVzcCArIDIwNDcgKyAxMjggKyAweDI4XQkhIGFyZzMsICZwcm9tX21tdV9paGFuZGxlX2NhY2hlCisJbW92CTQsICVsMworCXN0eAklbDMsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHgzMF0JISBhcmc0LCBzaXplb2YoYXJnMykKKwlzdHgJJWcwLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MzhdCSEgcmV0MQorCWNhbGwJJWw3CisJIGFkZAklc3AsICgyMDQ3ICsgMTI4KSwgJW8wCQkhIGFyZ3VtZW50IGFycmF5CisKKwltb3YJKDFiIC0gcHJvbV9jYWxsbWV0aG9kX25hbWUpLCAlbDEKKwltb3YJKDFiIC0gcHJvbV90cmFuc2xhdGVfbmFtZSksICVsMgorCXN1YgklbDAsICVsMSwgJWwxCisJc3ViCSVsMCwgJWwyLCAlbDIKKwlsZHV3CVslbDVdLCAlbDUJCQkhIHByb21fbW11X2loYW5kbGVfY2FjaGUKKworCXN0eAklbDEsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHgwMF0JISBzZXJ2aWNlLCAiY2FsbC1tZXRob2QiCisJbW92CTMsICVsMworCXN0eAklbDMsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHgwOF0JISBudW1fYXJncywgMworCW1vdgk1LCAlbDMKKwlzdHgJJWwzLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MTBdCSEgbnVtX3JldHMsIDUKKwlzdHgJJWwyLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MThdCSEgYXJnMTogInRyYW5zbGF0ZSIKKwlzdHgJJWw1LCBbJXNwICsgMjA0NyArIDEyOCArIDB4MjBdCSEgYXJnMjogcHJvbV9tbXVfaWhhbmRsZV9jYWNoZQorCS8qIFBBR0UgYWxpZ24gKi8KKwlzcmx4CSVsMCwgMTMsICVsMworCXNsbHgJJWwzLCAxMywgJWwzCisJc3R4CSVsMywgWyVzcCArIDIwNDcgKyAxMjggKyAweDI4XQkhIGFyZzM6IHZhZGRyLCBvdXIgUEMKKwlzdHgJJWcwLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MzBdCSEgcmVzMQorCXN0eAklZzAsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHgzOF0JISByZXMyCisJc3R4CSVnMCwgWyVzcCArIDIwNDcgKyAxMjggKyAweDQwXQkhIHJlczMKKwlzdHgJJWcwLCBbJXNwICsgMjA0NyArIDEyOCArIDB4NDhdCSEgcmVzNAorCXN0eAklZzAsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHg1MF0JISByZXM1CisJY2FsbAklbDcKKwkgYWRkCSVzcCwgKDIwNDcgKyAxMjgpLCAlbzAJCSEgYXJndW1lbnQgYXJyYXkKKworCWxkeAlbJXNwICsgMjA0NyArIDEyOCArIDB4NDBdLCAlbDEJISB0cmFuc2xhdGlvbiBtb2RlCisJbW92CSgxYiAtIHByb21fYm9vdF9tYXBwaW5nX21vZGUpLCAlbDQKKwlzdWIJJWwwLCAlbDQsICVsNAorCXN0dwklbDEsIFslbDRdCisJbW92CSgxYiAtIHByb21fYm9vdF9tYXBwaW5nX3BoeXNfaGlnaCksICVsNAorCXN1YgklbDAsICVsNCwgJWw0CisJbGR4CVslc3AgKyAyMDQ3ICsgMTI4ICsgMHg0OF0sICVsMgkhIHBoeXNhZGRyIGhpZ2gKKwlzdHgJJWwyLCBbJWw0ICsgMHgwXQorCWxkeAlbJXNwICsgMjA0NyArIDEyOCArIDB4NTBdLCAlbDMJISBwaHlzYWRkciBsb3cKKwkvKiA0TUIgYWxpZ24gKi8KKwlzcmx4CSVsMywgMjIsICVsMworCXNsbHgJJWwzLCAyMiwgJWwzCisJc3R4CSVsMywgWyVsNCArIDB4OF0KKworCS8qIExlYXZlIHNlcnZpY2UgYXMtaXMsICJjYWxsLW1ldGhvZCIgKi8KKwltb3YJNywgJWwzCisJc3R4CSVsMywgWyVzcCArIDIwNDcgKyAxMjggKyAweDA4XQkhIG51bV9hcmdzLCA3CisJbW92CTEsICVsMworCXN0eAklbDMsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHgxMF0JISBudW1fcmV0cywgMQorCW1vdgkoMWIgLSBwcm9tX21hcF9uYW1lKSwgJWwzCisJc3ViCSVsMCwgJWwzLCAlbDMKKwlzdHgJJWwzLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MThdCSEgYXJnMTogIm1hcCIKKwkvKiBMZWF2ZSBhcmcyIGFzLWlzLCBwcm9tX21tdV9paGFuZGxlX2NhY2hlICovCisJbW92CS0xLCAlbDMKKwlzdHgJJWwzLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MjhdCSEgYXJnMzogbW9kZSAoLTEgZGVmYXVsdCkKKwlzZXRoaQklaGkoOCAqIDEwMjQgKiAxMDI0KSwgJWwzCisJc3R4CSVsMywgWyVzcCArIDIwNDcgKyAxMjggKyAweDMwXQkhIGFyZzQ6IHNpemUgKDhNQikKKwlzZXRoaQklaGkoS0VSTkJBU0UpLCAlbDMKKwlzdHgJJWwzLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MzhdCSEgYXJnNTogdmFkZHIgKEtFUk5CQVNFKQorCXN0eAklZzAsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHg0MF0JISBhcmc2OiBlbXB0eQorCW1vdgkoMWIgLSBwcm9tX2Jvb3RfbWFwcGluZ19waHlzX2xvdyksICVsMworCXN1YgklbDAsICVsMywgJWwzCisJbGR4CVslbDNdLCAlbDMKKwlzdHgJJWwzLCBbJXNwICsgMjA0NyArIDEyOCArIDB4NDhdCSEgYXJnNzogcGh5cyBhZGRyCisJY2FsbAklbDcKKwkgYWRkCSVzcCwgKDIwNDcgKyAxMjgpLCAlbzAJCSEgYXJndW1lbnQgYXJyYXkKKworCWFkZAklc3AsICgxOTIgKyAxMjgpLCAlc3AKKworc3BhcmM2NF9ib290X2FmdGVyX3JlbWFwOgogCUJSQU5DSF9JRl9DSEVFVEFIX0JBU0UoZzEsZzcsY2hlZXRhaF9ib290KQogCUJSQU5DSF9JRl9DSEVFVEFIX1BMVVNfT1JfRk9MTE9XT04oZzEsZzcsY2hlZXRhaF9wbHVzX2Jvb3QpCiAJYmEscHQJJXhjYywgc3BpdGZpcmVfYm9vdApAQCAtMTI1LDE4NSArMjc0LDcgQEAKIAlzdHhhCSVnMCwgWyVnM10gQVNJX0lNTVUKIAltZW1iYXIJI1N5bmMKIAotCXdycHIgICAgJWcwLCAoUFNUQVRFX1BSSVZ8UFNUQVRFX1BFRnxQU1RBVEVfSUUpLCAlcHN0YXRlCi0Jd3IJJWcwLCAwLCAlZnBycwotCi0JLyogSnVzdCBsaWtlIGZvciBTcGl0ZmlyZSwgd2UgcHJvYmUgaXRsYi0yIGZvciBhIG1hcHBpbmcgd2hpY2gKLQkgKiBtYXRjaGVzIG91ciBjdXJyZW50ICVwYy4gIFdlIHRha2UgdGhlIHBoeXNpY2FsIGFkZHJlc3MgaW4KLQkgKiB0aGF0IG1hcHBpbmcgYW5kIHVzZSBpdCB0byBtYWtlIG91ciBvd24uCi0JICovCi0KLQkvKiAlZzUgaG9sZHMgdGhlIHRsYiBkYXRhICovCi0gICAgICAgIHNldGhpICAgJXVoaShfUEFHRV9WQUxJRCB8IF9QQUdFX1NaNE1CKSwgJWc1Ci0gICAgICAgIHNsbHggICAgJWc1LCAzMiwgJWc1Ci0gICAgICAgIG9yICAgICAgJWc1LCAoX1BBR0VfQ1AgfCBfUEFHRV9DViB8IF9QQUdFX1AgfCBfUEFHRV9MIHwgX1BBR0VfVyB8IF9QQUdFX0cpLCAlZzUKLQotCS8qIFB1dCBQQUREUiB0bGIgZGF0YSBtYXNrIGludG8gJWczLiAqLwotCXNldGhpCSV1aGkoX1BBR0VfUEFERFIpLCAlZzMKLQlvcgklZzMsICV1bG8oX1BBR0VfUEFERFIpLCAlZzMKLQlzbGx4CSVnMywgMzIsICVnMwotCXNldGhpCSVoaShfUEFHRV9QQUREUiksICVnNwotCW9yCSVnNywgJWxvKF9QQUdFX1BBRERSKSwgJWc3Ci0Jb3IJJWczLCAlZzcsICVnMwotCi0Jc2V0CTIgPDwgMTYsICVsMAkJLyogVExCIGVudHJ5IHdhbGtlci4gKi8KLQlzZXQJMHgxZmZmLCAlbDIJCS8qIFBhZ2UgbWFzay4gKi8KLQlyZAklcGMsICVsMwotCWFuZG4JJWwzLCAlbDIsICVnMgkJLyogdmFkZHIgY29tcGFyYXRvciAqLwotCi0xOglsZHhhCVslbDBdIEFTSV9JVExCX1RBR19SRUFELCAlZzEKLQltZW1iYXIJI1N5bmMKLQlhbmRuCSVnMSwgJWwyLCAlZzEKLQljbXAJJWcxLCAlZzIKLQliZSxwbgkleGNjLCBjaGVldGFoX2dvdF90bGJlbnRyeQotCSBub3AKLQlhbmQJJWwwLCAoMTI3IDw8IDMpLCAlZzEKLQljbXAJJWcxLCAoMTI3IDw8IDMpCi0JYmx1LHB0CSV4Y2MsIDFiCi0JIGFkZAklbDAsICgxIDw8IDMpLCAlbDAKLQotCS8qIFNlYXJjaCB0aGUgc21hbGwgVExCLiAgT0JQIG5ldmVyIG1hcHMgdXMgbGlrZSB0aGF0IGJ1dAotCSAqIG5ld2VyIFNJTE8gY2FuLgotCSAqLwotCWNscgklbDAKLQotMToJbGR4YQlbJWwwXSBBU0lfSVRMQl9UQUdfUkVBRCwgJWcxCi0JbWVtYmFyCSNTeW5jCi0JYW5kbgklZzEsICVsMiwgJWcxCi0JY21wCSVnMSwgJWcyCi0JYmUscG4JJXhjYywgY2hlZXRhaF9nb3RfdGxiZW50cnkKLQkgbm9wCi0JY21wCSVsMCwgKDE1IDw8IDMpCi0JYmx1LHB0CSV4Y2MsIDFiCi0JIGFkZAklbDAsICgxIDw8IDMpLCAlbDAKLQotCS8qIEJVRygpIGlmIHdlIGdldCBoZXJlLi4uICovCi0JdGEJMHg1Ci0KLWNoZWV0YWhfZ290X3RsYmVudHJ5OgotCWxkeGEJWyVsMF0gQVNJX0lUTEJfREFUQV9BQ0NFU1MsICVnMAotCWxkeGEJWyVsMF0gQVNJX0lUTEJfREFUQV9BQ0NFU1MsICVnMQotCW1lbWJhcgkjU3luYwotCWFuZAklZzEsICVnMywgJWcxCi0Jc2V0CTB4NWZmZiwgJWwwCi0JYW5kbgklZzEsICVsMCwgJWcxCi0Jb3IJJWc1LCAlZzEsICVnNQotCi0JLyogQ2xlYXIgb3V0IGFueSBLRVJOQkFTRSBhcmVhIGVudHJpZXMuICovCi0Jc2V0CTIgPDwgMTYsICVsMAotCXNldGhpCSVoaShLRVJOQkFTRSksICVnMwotCXNldGhpCSVoaShLRVJOQkFTRTw8MSksICVnNwotCW1vdglUTEJfVEFHX0FDQ0VTUywgJWw3Ci0KLQkvKiBGaXJzdCwgY2hlY2sgSVRMQiAqLwotMToJbGR4YQlbJWwwXSBBU0lfSVRMQl9UQUdfUkVBRCwgJWcxCi0JbWVtYmFyCSNTeW5jCi0JYW5kbgklZzEsICVsMiwgJWcxCi0JY21wCSVnMSwgJWczCi0JYmx1LHBuCSV4Y2MsIDJmCi0JIGNtcAklZzEsICVnNwotCWJnZXUscG4JJXhjYywgMmYKLQkgbm9wCi0Jc3R4YQklZzAsIFslbDddIEFTSV9JTU1VCi0JbWVtYmFyCSNTeW5jCi0Jc3R4YQklZzAsIFslbDBdIEFTSV9JVExCX0RBVEFfQUNDRVNTCi0JbWVtYmFyCSNTeW5jCi0KLTI6CWFuZAklbDAsICgxMjcgPDwgMyksICVnMQotCWNtcAklZzEsICgxMjcgPDwgMykKLQlibHUscHQJJXhjYywgMWIKLQkgYWRkCSVsMCwgKDEgPDwgMyksICVsMAotCi0JLyogTmV4dCwgY2hlY2sgRFRMQiAqLwotCXNldAkyIDw8IDE2LCAlbDAKLTE6CWxkeGEJWyVsMF0gQVNJX0RUTEJfVEFHX1JFQUQsICVnMQotCW1lbWJhcgkjU3luYwotCWFuZG4JJWcxLCAlbDIsICVnMQotCWNtcAklZzEsICVnMwotCWJsdSxwbgkleGNjLCAyZgotCSBjbXAJJWcxLCAlZzcKLQliZ2V1LHBuCSV4Y2MsIDJmCi0JIG5vcAotCXN0eGEJJWcwLCBbJWw3XSBBU0lfRE1NVQotCW1lbWJhcgkjU3luYwotCXN0eGEJJWcwLCBbJWwwXSBBU0lfRFRMQl9EQVRBX0FDQ0VTUwotCW1lbWJhcgkjU3luYwotCQotMjoJYW5kCSVsMCwgKDUxMSA8PCAzKSwgJWcxCi0JY21wCSVnMSwgKDUxMSA8PCAzKQotCWJsdSxwdAkleGNjLCAxYgotCSBhZGQJJWwwLCAoMSA8PCAzKSwgJWwwCi0KLQkvKiBPbiBDaGVldGFoKywgaGF2ZSB0byBjaGVjayBzZWNvbmQgRFRMQi4gICovCi0JQlJBTkNIX0lGX0NIRUVUQUhfUExVU19PUl9GT0xMT1dPTihnMSxsMCwyZikKLQliYSxwdAkleGNjLCA5ZgotCSBub3AKLQotMjoJc2V0CTMgPDwgMTYsICVsMAotMToJbGR4YQlbJWwwXSBBU0lfRFRMQl9UQUdfUkVBRCwgJWcxCi0JbWVtYmFyCSNTeW5jCi0JYW5kbgklZzEsICVsMiwgJWcxCi0JY21wCSVnMSwgJWczCi0JYmx1LHBuCSV4Y2MsIDJmCi0JIGNtcAklZzEsICVnNwotCWJnZXUscG4JJXhjYywgMmYKLQkgbm9wCi0Jc3R4YQklZzAsIFslbDddIEFTSV9ETU1VCi0JbWVtYmFyCSNTeW5jCi0Jc3R4YQklZzAsIFslbDBdIEFTSV9EVExCX0RBVEFfQUNDRVNTCi0JbWVtYmFyCSNTeW5jCi0JCi0yOglhbmQJJWwwLCAoNTExIDw8IDMpLCAlZzEKLQljbXAJJWcxLCAoNTExIDw8IDMpCi0JYmx1LHB0CSV4Y2MsIDFiCi0JIGFkZAklbDAsICgxIDw8IDMpLCAlbDAKLQotOToKLQotCS8qIE5vdyBsb2NrIHRoZSBUVEUgd2UgY3JlYXRlZCBpbnRvIElUTEItMCBhbmQgRFRMQi0wLAotCSAqIGVudHJ5IDE1IChhbmQgbWF5YmUgMTQgdG9vKS4KLQkgKi8KLQlzZXRoaQklaGkoS0VSTkJBU0UpLCAlZzMKLQlzZXQJKDAgPDwgMTYpIHwgKDE1IDw8IDMpLCAlZzcKLQlzdHhhCSVnMywgWyVsN10gQVNJX0RNTVUKLQltZW1iYXIJI1N5bmMKLQlzdHhhCSVnNSwgWyVnN10gQVNJX0RUTEJfREFUQV9BQ0NFU1MKLQltZW1iYXIJI1N5bmMKLQlzdHhhCSVnMywgWyVsN10gQVNJX0lNTVUKLQltZW1iYXIJI1N5bmMKLQlzdHhhCSVnNSwgWyVnN10gQVNJX0lUTEJfREFUQV9BQ0NFU1MKLQltZW1iYXIJI1N5bmMKLQlmbHVzaAklZzMKLQltZW1iYXIJI1N5bmMKLQlzZXRoaQklaGkoX2VuZCksICVnMwkJCS8qIENoZWNrIGZvciBiaWdrZXJuZWwgY2FzZSAqLwotCW9yCSVnMywgJWxvKF9lbmQpLCAlZzMKLQlzcmwJJWczLCAyMywgJWczCQkJLyogQ2hlY2sgaWYgX2VuZCA+IDhNICovCi0JYnJ6LHB0CSVnMywgMWYKLQkgc2V0aGkJJWhpKEtFUk5CQVNFKSwgJWczCQkvKiBSZXN0b3JlIGZvciBmaXh1cCBjb2RlIGJlbG93ICovCi0Jc2V0aGkJJWhpKDB4NDAwMDAwKSwgJWczCi0Jb3IJJWczLCAlbG8oMHg0MDAwMDApLCAlZzMKLQlhZGQJJWc1LCAlZzMsICVnNQkJCS8qIE5ldyB0dGUgZGF0YSAqLwotCWFuZG4JJWc1LCAoX1BBR0VfRyksICVnNQotCXNldGhpCSVoaShLRVJOQkFTRSsweDQwMDAwMCksICVnMwotCW9yCSVnMywgJWxvKEtFUk5CQVNFKzB4NDAwMDAwKSwgJWczCi0Jc2V0CSgwIDw8IDE2KSB8ICgxNCA8PCAzKSwgJWc3Ci0Jc3R4YQklZzMsIFslbDddIEFTSV9ETU1VCi0JbWVtYmFyCSNTeW5jCi0Jc3R4YQklZzUsIFslZzddIEFTSV9EVExCX0RBVEFfQUNDRVNTCi0JbWVtYmFyCSNTeW5jCi0Jc3R4YQklZzMsIFslbDddIEFTSV9JTU1VCi0JbWVtYmFyCSNTeW5jCi0Jc3R4YQklZzUsIFslZzddIEFTSV9JVExCX0RBVEFfQUNDRVNTCi0JbWVtYmFyCSNTeW5jCi0JZmx1c2gJJWczCi0JbWVtYmFyCSNTeW5jCi0Jc2V0aGkJJWhpKEtFUk5CQVNFKSwgJWczCQkvKiBSZXN0b3JlIGZvciBmaXh1cCBjb2RlIGJlbG93ICovCi0JYmEscHQJJXhjYywgMWYKLQkgbm9wCi0KLTE6CXNldAlzdW40dV9pbml0LCAlZzIKLQlqbXBsICAgICVnMiArICVnMCwgJWcwCi0JIG5vcAorCWJhLGEscHQJJXhjYywganVtcF90b19zdW40dV9pbml0CiAKIHNwaXRmaXJlX2Jvb3Q6CiAJLyogVHlwaWNhbGx5IFBST00gaGFzIGFscmVhZHkgZW5hYmxlZCBib3RoIE1NVSdzIGFuZCBib3RoIG9uLWNoaXAKQEAgLTMxMyw2ICsyODQsNyBAQAogCXN0eGEJJWcxLCBbJWcwXSBBU0lfTFNVX0NPTlRST0wKIAltZW1iYXIJI1N5bmMKIAoranVtcF90b19zdW40dV9pbml0OgogCS8qCiAJICogTWFrZSBzdXJlIHdlIGFyZSBpbiBwcml2aWxlZ2VkIG1vZGUsIGhhdmUgYWRkcmVzcyBtYXNraW5nLAogICAgICAgICAgKiB1c2luZyB0aGUgb3JkaW5hcnkgZ2xvYmFscyBhbmQgaGF2ZSBlbmFibGVkIGZsb2F0aW5nCkBAIC0zMjQsMTUxICsyOTYsNiBAQAogCXdycHIgICAgJWcwLCAoUFNUQVRFX1BSSVZ8UFNUQVRFX1BFRnxQU1RBVEVfSUUpLCAlcHN0YXRlCiAJd3IJJWcwLCAwLCAlZnBycwogCi1zcGl0ZmlyZV9jcmVhdGVfbWFwcGluZ3M6Ci0JLyogJWc1IGhvbGRzIHRoZSB0bGIgZGF0YSAqLwotICAgICAgICBzZXRoaSAgICV1aGkoX1BBR0VfVkFMSUQgfCBfUEFHRV9TWjRNQiksICVnNQotICAgICAgICBzbGx4ICAgICVnNSwgMzIsICVnNQotICAgICAgICBvciAgICAgICVnNSwgKF9QQUdFX0NQIHwgX1BBR0VfQ1YgfCBfUEFHRV9QIHwgX1BBR0VfTCB8IF9QQUdFX1cgfCBfUEFHRV9HKSwgJWc1Ci0KLQkvKiBCYXNlIG9mIHBoeXNpY2FsIG1lbW9yeSBjYW5ub3QgcmVsaWFibHkgYmUgYXNzdW1lZCB0byBiZQotCSAqIGF0IDB4MCEgIEZpZ3VyZSBvdXQgd2hlcmUgaXQgaGFwcGVucyB0byBiZS4gLURhdmVNCi0JICovCi0KLQkvKiBQdXQgUEFERFIgdGxiIGRhdGEgbWFzayBpbnRvICVnMy4gKi8KLQlzZXRoaQkldWhpKF9QQUdFX1BBRERSX1NGKSwgJWczCi0Jb3IJJWczLCAldWxvKF9QQUdFX1BBRERSX1NGKSwgJWczCi0Jc2xseAklZzMsIDMyLCAlZzMKLQlzZXRoaQklaGkoX1BBR0VfUEFERFJfU0YpLCAlZzcKLQlvcgklZzcsICVsbyhfUEFHRV9QQUREUl9TRiksICVnNwotCW9yCSVnMywgJWc3LCAlZzMKLQotCS8qIFdhbGsgdGhyb3VnaCBlbnRpcmUgSVRMQiwgbG9va2luZyBmb3IgZW50cnkgd2hpY2ggbWFwcwotCSAqIG91ciAlcGMgY3VycmVudGx5LCBzdGljayBQQUREUiBmcm9tIHRoZXJlIGludG8gJWc1IHRsYiBkYXRhLgotCSAqLwotCWNscgklbDAJCQkvKiBUTEIgZW50cnkgd2Fsa2VyLiAqLwotCXNldAkweDFmZmYsICVsMgkJLyogUGFnZSBtYXNrLiAqLwotCXJkCSVwYywgJWwzCi0JYW5kbgklbDMsICVsMiwgJWcyCQkvKiB2YWRkciBjb21wYXJhdG9yICovCi0xOgotCS8qIFllcywgdGhlIG5vcHMgc2VlbSB0byBiZSBuZWNlc3NhcnkgZm9yIG5vdywgZG9uJ3QgYXNrIG1lIHdoeS4gLURhdmVNICovCi0JbGR4YQlbJWwwXSBBU0lfSVRMQl9UQUdfUkVBRCwgJWcxCi0Jbm9wCi0Jbm9wCi0Jbm9wCi0JYW5kbgklZzEsICVsMiwgJWcxCQkvKiBHZXQgdmFkZHIgKi8KLQljbXAJJWcxLCAlZzIKLQliZSxhLHBuCSV4Y2MsIHNwaXRmaXJlX2dvdF90bGJlbnRyeQotCSBsZHhhCVslbDBdIEFTSV9JVExCX0RBVEFfQUNDRVNTLCAlZzEKLQljbXAJJWwwLCAoNjMgPDwgMykKLQlibHUscHQJJXhjYywgMWIKLQkgYWRkCSVsMCwgKDEgPDwgMyksICVsMAotCi0JLyogQlVHKCkgaWYgd2UgZ2V0IGhlcmUuLi4gKi8KLQl0YQkweDUKLQotc3BpdGZpcmVfZ290X3RsYmVudHJ5OgotCS8qIE5vcHMgaGVyZSBhZ2FpbiwgcGVyaGFwcyBDaGVldGFoL0JsYWNrYmlyZCBhcmUgYmV0dGVyIGJlaGF2ZWQuLi4gKi8KLQlub3AKLQlub3AKLQlub3AKLQlhbmQJJWcxLCAlZzMsICVnMQkJLyogTWFzayB0byBqdXN0IGdldCBwYWRkciBiaXRzLiAgICAgICAqLwotCXNldAkweDVmZmYsICVsMwkJLyogTWFzayBvZmZzZXQgdG8gZ2V0IHBoeXMgYmFzZS4gICAgICAqLwotCWFuZG4JJWcxLCAlbDMsICVnMQotCi0JLyogTk9URTogV2UgaG9sZCBvbiB0byAlZzEgcGFkZHIgYmFzZSBhcyB3ZSBuZWVkIGl0IGJlbG93IHRvIGxvY2sKLQkgKiBOT1RFOiB0aGUgUFJPTSBjaWYgY29kZSBpbnRvIHRoZSBUTEIuCi0JICovCi0KLQlvcgklZzUsICVnMSwgJWc1CQkvKiBPciBpdCBpbnRvIFRBRyBiZWluZyBidWlsdC4gICAgICAgICovCi0KLQljbHIJJWwwCQkJLyogVExCIGVudHJ5IHdhbGtlci4gKi8KLQlzZXRoaQklaGkoS0VSTkJBU0UpLCAlZzMJLyogNE0gbG93ZXIgbGltaXQgKi8KLQlzZXRoaQklaGkoS0VSTkJBU0U8PDEpLCAlZzcJLyogOE0gdXBwZXIgbGltaXQgKi8KLQltb3YJVExCX1RBR19BQ0NFU1MsICVsNwotMToKLQkvKiBZZXMsIHRoZSBub3BzIHNlZW0gdG8gYmUgbmVjZXNzYXJ5IGZvciBub3csIGRvbid0IGFzayBtZSB3aHkuIC1EYXZlTSAqLwotCWxkeGEJWyVsMF0gQVNJX0lUTEJfVEFHX1JFQUQsICVnMQotCW5vcAotCW5vcAotCW5vcAotCWFuZG4JJWcxLCAlbDIsICVnMQkJLyogR2V0IHZhZGRyICovCi0JY21wCSVnMSwgJWczCi0JYmx1LHBuCSV4Y2MsIDJmCi0JIGNtcAklZzEsICVnNwotCWJnZXUscG4JJXhjYywgMmYKLQkgbm9wCi0Jc3R4YQklZzAsIFslbDddIEFTSV9JTU1VCi0Jc3R4YQklZzAsIFslbDBdIEFTSV9JVExCX0RBVEFfQUNDRVNTCi0JbWVtYmFyCSNTeW5jCi0yOgotCWNtcAklbDAsICg2MyA8PCAzKQotCWJsdSxwdAkleGNjLCAxYgotCSBhZGQJJWwwLCAoMSA8PCAzKSwgJWwwCi0KLQlub3A7IG5vcDsgbm9wCi0KLQljbHIJJWwwCQkJLyogVExCIGVudHJ5IHdhbGtlci4gKi8KLTE6Ci0JLyogWWVzLCB0aGUgbm9wcyBzZWVtIHRvIGJlIG5lY2Vzc2FyeSBmb3Igbm93LCBkb24ndCBhc2sgbWUgd2h5LiAtRGF2ZU0gKi8KLQlsZHhhCVslbDBdIEFTSV9EVExCX1RBR19SRUFELCAlZzEKLQlub3AKLQlub3AKLQlub3AKLQlhbmRuCSVnMSwgJWwyLCAlZzEJCS8qIEdldCB2YWRkciAqLwotCWNtcAklZzEsICVnMwotCWJsdSxwbgkleGNjLCAyZgotCSBjbXAJJWcxLCAlZzcKLQliZ2V1LHBuCSV4Y2MsIDJmCi0JIG5vcAotCXN0eGEJJWcwLCBbJWw3XSBBU0lfRE1NVQotCXN0eGEJJWcwLCBbJWwwXSBBU0lfRFRMQl9EQVRBX0FDQ0VTUwotCW1lbWJhcgkjU3luYwotMjoKLQljbXAJJWwwLCAoNjMgPDwgMykKLQlibHUscHQJJXhjYywgMWIKLQkgYWRkCSVsMCwgKDEgPDwgMyksICVsMAotCi0Jbm9wOyBub3A7IG5vcAotCi0KLQkvKiBQUk9NIG5ldmVyIHB1dHMgYW55IFRMQiBlbnRyaWVzIGludG8gdGhlIE1NVSB3aXRoIHRoZSBsb2NrIGJpdAotCSAqIHNldC4gIFNvIHdlIGdsYWRseSB1c2UgdGxiIGVudHJ5IDYzIGZvciBLRVJOQkFTRS4gQW5kIG1heWJlIDYyIHRvby4KLQkgKi8KLQotCXNldGhpCSVoaShLRVJOQkFTRSksICVnMwotCW1vdgkoNjMgPDwgMyksICVnNwotCXN0eGEJJWczLCBbJWw3XSBBU0lfRE1NVQkJLyogS0VSTkJBU0UgaW50byBUTEIgVEFHCSovCi0Jc3R4YQklZzUsIFslZzddIEFTSV9EVExCX0RBVEFfQUNDRVNTCS8qIFRURSBpbnRvIFRMQiBEQVRBCQkqLwotCW1lbWJhcgkjU3luYwotCXN0eGEJJWczLCBbJWw3XSBBU0lfSU1NVQkJLyogS0VSTkJBU0UgaW50byBUTEIgVEFHCSovCi0Jc3R4YQklZzUsIFslZzddIEFTSV9JVExCX0RBVEFfQUNDRVNTCS8qIFRURSBpbnRvIFRMQiBEQVRBCQkqLwotCW1lbWJhcgkjU3luYwotCWZsdXNoCSVnMwotCW1lbWJhcgkjU3luYwotCXNldGhpCSVoaShfZW5kKSwgJWczCQkJLyogQ2hlY2sgZm9yIGJpZ2tlcm5lbCBjYXNlICovCi0Jb3IJJWczLCAlbG8oX2VuZCksICVnMwotCXNybAklZzMsIDIzLCAlZzMJCQkvKiBDaGVjayBpZiBfZW5kID4gOE0gKi8KLQlicnoscHQJJWczLCAyZgotCSBzZXRoaQklaGkoS0VSTkJBU0UpLCAlZzMJCS8qIFJlc3RvcmUgZm9yIGZpeHVwIGNvZGUgYmVsb3cgKi8KLQlzZXRoaQklaGkoMHg0MDAwMDApLCAlZzMKLQlvcgklZzMsICVsbygweDQwMDAwMCksICVnMwotCWFkZAklZzUsICVnMywgJWc1CQkJLyogTmV3IHR0ZSBkYXRhICovCi0JYW5kbgklZzUsIChfUEFHRV9HKSwgJWc1Ci0Jc2V0aGkJJWhpKEtFUk5CQVNFKzB4NDAwMDAwKSwgJWczCi0Jb3IJJWczLCAlbG8oS0VSTkJBU0UrMHg0MDAwMDApLCAlZzMKLQltb3YJKDYyIDw8IDMpLCAlZzcKLQlzdHhhCSVnMywgWyVsN10gQVNJX0RNTVUKLQlzdHhhCSVnNSwgWyVnN10gQVNJX0RUTEJfREFUQV9BQ0NFU1MKLQltZW1iYXIJI1N5bmMKLQlzdHhhCSVnMywgWyVsN10gQVNJX0lNTVUKLQlzdHhhCSVnNSwgWyVnN10gQVNJX0lUTEJfREFUQV9BQ0NFU1MKLQltZW1iYXIJI1N5bmMKLQlmbHVzaAklZzMKLQltZW1iYXIJI1N5bmMKLQlzZXRoaQklaGkoS0VSTkJBU0UpLCAlZzMJCS8qIFJlc3RvcmUgZm9yIGZpeHVwIGNvZGUgYmVsb3cgKi8KLTI6CWJhLHB0CSV4Y2MsIDFmCi0JIG5vcAotMToKIAlzZXQJc3VuNHVfaW5pdCwgJWcyCiAJam1wbCAgICAlZzIgKyAlZzAsICVnMAogCSBub3AKQEAgLTQ4MywzOCArMzEwLDEyIEBACiAJc3R4YQklZzAsIFslZzddIEFTSV9ETU1VCiAJbWVtYmFyCSNTeW5jCiAKLQkvKiBXZSBhcmUgbm93IHNhZmVseSAod2UgaG9wZSkgaW4gTnVjbGV1cyBjb250ZXh0ICgwKSwgcmV3cml0ZQotCSAqIHRoZSBLRVJOQkFTRSBUVEUncyBzbyB0aGV5IG5vIGxvbmdlciBoYXZlIHRoZSBnbG9iYWwgYml0IHNldC4KLQkgKiBEb24ndCBmb3JnZXQgdG8gc2V0dXAgVEFHX0FDQ0VTUyBmaXJzdCA4LSkKLQkgKi8KLQltb3YJVExCX1RBR19BQ0NFU1MsICVnMgotCXN0eGEJJWczLCBbJWcyXSBBU0lfSU1NVQotCXN0eGEJJWczLCBbJWcyXSBBU0lfRE1NVQotCW1lbWJhcgkjU3luYwotCiAJQlJBTkNIX0lGX0FOWV9DSEVFVEFIKGcxLGc3LGNoZWV0YWhfdGxiX2ZpeHVwKQogCiAJYmEscHQJJXhjYywgc3BpdGZpcmVfdGxiX2ZpeHVwCiAJIG5vcAogCiBjaGVldGFoX3RsYl9maXh1cDoKLQlzZXQJKDAgPDwgMTYpIHwgKDE1IDw8IDMpLCAlZzcKLQlsZHhhCVslZzddIEFTSV9JVExCX0RBVEFfQUNDRVNTLCAlZzAKLQlsZHhhCVslZzddIEFTSV9JVExCX0RBVEFfQUNDRVNTLCAlZzEKLQlhbmRuCSVnMSwgKF9QQUdFX0cpLCAlZzEKLQlzdHhhCSVnMSwgWyVnN10gQVNJX0lUTEJfREFUQV9BQ0NFU1MKLQltZW1iYXIJI1N5bmMKLQotCWxkeGEJWyVnN10gQVNJX0RUTEJfREFUQV9BQ0NFU1MsICVnMAotCWxkeGEJWyVnN10gQVNJX0RUTEJfREFUQV9BQ0NFU1MsICVnMQotCWFuZG4JJWcxLCAoX1BBR0VfRyksICVnMQotCXN0eGEJJWcxLCBbJWc3XSBBU0lfRFRMQl9EQVRBX0FDQ0VTUwotCW1lbWJhcgkjU3luYwotCi0JLyogS2lsbCBpbnN0cnVjdGlvbiBwcmVmZXRjaCBxdWV1ZXMuICovCi0JZmx1c2gJJWczCi0JbWVtYmFyCSNTeW5jCi0KIAltb3YJMiwgJWcyCQkvKiBTZXQgVExCIHR5cGUgdG8gY2hlZXRhaCsuICovCiAJQlJBTkNIX0lGX0NIRUVUQUhfUExVU19PUl9GT0xMT1dPTihnMSxnNywxZikKIApAQCAtNTIzLDIzICszMjQsNyBAQAogMToJc2V0aGkJJWhpKHRsYl90eXBlKSwgJWcxCiAJc3R3CSVnMiwgWyVnMSArICVsbyh0bGJfdHlwZSldCiAKLQlCUkFOQ0hfSUZfQ0hFRVRBSF9QTFVTX09SX0ZPTExPV09OKGcxLGc3LDFmKQotCWJhLHB0CSV4Y2MsIDJmCi0JIG5vcAotCi0xOgkvKiBQYXRjaCBjb250ZXh0IHJlZ2lzdGVyIHdyaXRlcyB0byBzdXBwb3J0IG51Y2xldXMgcGFnZQotCSAqIHNpemUgY29ycmVjdGx5LgotCSAqLwotCWNhbGwJY2hlZXRhaF9wbHVzX3BhdGNoX2V0cmFwCi0JIG5vcAotCWNhbGwJY2hlZXRhaF9wbHVzX3BhdGNoX3J0cmFwCi0JIG5vcAotCWNhbGwJY2hlZXRhaF9wbHVzX3BhdGNoX2ZwZGlzCi0JIG5vcAotCWNhbGwJY2hlZXRhaF9wbHVzX3BhdGNoX3dpbmZpeHVwCi0JIG5vcAotCi0yOgkvKiBQYXRjaCBjb3B5L3BhZ2Ugb3BlcmF0aW9ucyB0byBjaGVldGFoIG9wdGltaXplZCB2ZXJzaW9ucy4gKi8KKwkvKiBQYXRjaCBjb3B5L3BhZ2Ugb3BlcmF0aW9ucyB0byBjaGVldGFoIG9wdGltaXplZCB2ZXJzaW9ucy4gKi8KIAljYWxsCWNoZWV0YWhfcGF0Y2hfY29weW9wcwogCSBub3AKIAljYWxsCWNoZWV0YWhfcGF0Y2hfY29weV9wYWdlCkBAIC01NTEsMjEgKzMzNiw2IEBACiAJIG5vcAogCiBzcGl0ZmlyZV90bGJfZml4dXA6Ci0JbW92CSg2MyA8PCAzKSwgJWc3Ci0JbGR4YQlbJWc3XSBBU0lfSVRMQl9EQVRBX0FDQ0VTUywgJWcxCi0JYW5kbgklZzEsIChfUEFHRV9HKSwgJWcxCi0Jc3R4YQklZzEsIFslZzddIEFTSV9JVExCX0RBVEFfQUNDRVNTCi0JbWVtYmFyCSNTeW5jCi0KLQlsZHhhCVslZzddIEFTSV9EVExCX0RBVEFfQUNDRVNTLCAlZzEKLQlhbmRuCSVnMSwgKF9QQUdFX0cpLCAlZzEKLQlzdHhhCSVnMSwgWyVnN10gQVNJX0RUTEJfREFUQV9BQ0NFU1MKLQltZW1iYXIJI1N5bmMKLQotCS8qIEtpbGwgaW5zdHJ1Y3Rpb24gcHJlZmV0Y2ggcXVldWVzLiAqLwotCWZsdXNoCSVnMwotCW1lbWJhcgkjU3luYwotCiAJLyogU2V0IFRMQiB0eXBlIHRvIHNwaXRmaXJlLiAqLwogCW1vdgkwLCAlZzIKIAlzZXRoaQklaGkodGxiX3R5cGUpLCAlZzEKQEAgLTU3OCwyNCArMzQ4LDYgQEAKIAltb3YJJXNwLCAlbDYKIAltb3YJJW80LCAlbDcKIAotI2lmIDAJLyogV2UgZG9uJ3QgZG8gaXQgbGlrZSB0aGlzIGFueW1vcmUsIGJ1dCBmb3IgaGlzdG9yaWNhbCBoYWNrIHZhbHVlCi0JICogSSBsZWF2ZSB0aGlzIHNuaXBwZXQgaGVyZSB0byBzaG93IGhvdyBjcmF6eSB3ZSBjYW4gYmUgc29tZXRpbWVzLiA4LSkKLQkgKi8KLQotCS8qIFNldHVwICJMaW51eCBDdXJyZW50IFJlZ2lzdGVyIiwgdGhhbmtzIFN1biA4LSkgKi8KLQl3cgklZzAsIDB4MSwgJXBjcgotCi0JLyogQmxhY2tiaXJkIGVycmF0YSB3b3JrYXJvdW5kLiAgU2VlIGNvbW1lbnRhcnkgaW4KLQkgKiBzbXAuYzpzbXBfcGVyY3B1X3RpbWVyX2ludGVycnVwdCgpIGZvciBtb3JlCi0JICogaW5mb3JtYXRpb24uCi0JICovCi0JYmEscHQJJXhjYywgOTlmCi0JIG5vcAotCS5hbGlnbgk2NAotOTk6CXdyCSVnNiwgJWcwLCAlcGljCi0JcmQJJXBpYywgJWcwCi0jZW5kaWYKLQogCXdyCSVnMCwgQVNJX1AsICVhc2kKIAltb3YJMSwgJWcxCiAJc2xseAklZzEsIFRIUkVBRF9TSElGVCwgJWcxCkBAIC02MjksMzIgKzM4MSw3OCBAQAogCSBub3AKIAkvKiBOb3QgcmVhY2hlZC4uLiAqLwogCi0vKiBJTVBPUlRBTlQgTk9URTogV2hlbmV2ZXIgbWFraW5nIGNoYW5nZXMgaGVyZSwgY2hlY2sKLSAqIHRyYW1wb2xpbmUuUyBhcyB3ZWxsLiAtamogKi8KLQkuZ2xvYmwJc2V0dXBfdGJhCi1zZXR1cF90YmE6CS8qIGkwID0gaXNfc3RhcmZpcmUgKi8KLQlzYXZlCSVzcCwgLTE2MCwgJXNwCisJLyogVGhpcyBpcyBtZWFudCB0byBhbGxvdyB0aGUgc2hhcmluZyBvZiB0aGlzIGNvZGUgYmV0d2VlbgorCSAqIGJvb3QgcHJvY2Vzc29yIGludm9jYXRpb24gKHZpYSBzZXR1cF90YmEoKSBiZWxvdykgYW5kCisJICogc2Vjb25kYXJ5IHByb2Nlc3NvciBzdGFydHVwICh2aWEgdHJhbXBvbGluZS5TKS4gIFRoZQorCSAqIGZvcm1lciBkb2VzIHVzZSB0aGlzIGNvZGUsIHRoZSBsYXR0ZXIgZG9lcyBub3QgeWV0IGR1ZQorCSAqIHRvIHNvbWUgY29tcGxleGl0aWVzLiAgVGhhdCBzaG91bGQgYmUgZml4ZWQgdXAgYXQgc29tZQorCSAqIHBvaW50LgorCSAqCisJICogVGhlcmUgdXNlZCB0byBiZSBlbm9ybW91cyBjb21wbGV4aXR5IHdydC4gdHJhbnNmZXJyaW5nCisJICogb3ZlciBmcm9tIHRoZSBmaXJ3bWFyZSdzIHRyYXAgdGFibGUgdG8gdGhlIExpbnV4IGtlcm5lbCdzLgorCSAqIEZvciBleGFtcGxlLCB0aGVyZSB3YXMgYSBjaGlja2VuICYgZWdnIHByb2JsZW0gd3J0LiBidWlsZGluZworCSAqIHRoZSBPQlAgcGFnZSB0YWJsZXMsIHlldCBuZWVkaW5nIHRvIGJlIG9uIHRoZSBMaW51eCBrZXJuZWwKKwkgKiB0cmFwIHRhYmxlICh0byB0cmFuc2xhdGUgUEFHRV9PRkZTRVQgYWRkcmVzc2VzKSBpbiBvcmRlciB0bworCSAqIGRvIHRoYXQuCisJICoKKwkgKiBXZSBub3cgaGFuZGxlIE9CUCB0bGIgbWlzc2VzIGRpZmZlcmVudGx5LCB2aWEgbGluZWFyIGxvb2t1cHMKKwkgKiBpbnRvIHRoZSBwcm9tX3RyYW5zW10gYXJyYXkuICBTbyB0aGF0IHNwZWNpZmljIHByb2JsZW0gbm8KKwkgKiBsb25nZXIgZXhpc3RzLiAgWWV0LCB1bmZvcnR1bmF0ZWx5IHRoZXJlIGFyZSBzdGlsbCBzb21lIGlzc3VlcworCSAqIHByZXZlbnRpbmcgdHJhbXBvbGluZS5TIGZyb20gdXNpbmcgdGhpcyBjb2RlLi4uIGhvIGh1bS4KKwkgKi8KKwkuZ2xvYmwJc2V0dXBfdHJhcF90YWJsZQorc2V0dXBfdHJhcF90YWJsZToKKwlzYXZlCSVzcCwgLTE5MiwgJXNwCiAKLQlyZHByCSV0YmEsICVnNwotCXNldGhpCSVoaShwcm9tX3RiYSksICVvMQotCW9yCSVvMSwgJWxvKHByb21fdGJhKSwgJW8xCi0Jc3R4CSVnNywgWyVvMV0KKwkvKiBGb3JjZSBpbnRlcnJ1cHRzIHRvIGJlIGRpc2FibGVkLiAqLworCXJkcHIJJXBzdGF0ZSwgJW8xCisJYW5kbgklbzEsIFBTVEFURV9JRSwgJW8xCisJd3JwcgklbzEsIDB4MCwgJXBzdGF0ZQorCXdycHIJJWcwLCAxNSwgJXBpbAogCi0JLyogU2V0dXAgIkxpbnV4IiBnbG9iYWxzIDgtKSAqLworCS8qIE1ha2UgdGhlIGZpcm13YXJlIGNhbGwgdG8ganVtcCBvdmVyIHRvIHRoZSBMaW51eCB0cmFwIHRhYmxlLiAgKi8KKwljYWxsCXByb21fc2V0X3RyYXBfdGFibGUKKwkgc2V0aGkJJWhpKHNwYXJjNjRfdHRhYmxlX3RsMCksICVvMAorCisJLyogU3RhcnQgdXNpbmcgcHJvcGVyIHBhZ2Ugc2l6ZSBlbmNvZGluZ3MgaW4gY3R4IHJlZ2lzdGVyLiAgKi8KKwlzZXRoaQklaGkoc3BhcmM2NF9rZXJuX3ByaV9jb250ZXh0KSwgJWczCisJbGR4CVslZzMgKyAlbG8oc3BhcmM2NF9rZXJuX3ByaV9jb250ZXh0KV0sICVnMgorCW1vdglQUklNQVJZX0NPTlRFWFQsICVnMQorCXN0eGEJJWcyLCBbJWcxXSBBU0lfRE1NVQorCW1lbWJhcgkjU3luYworCisJLyogVGhlIExpbnV4IHRyYXAgaGFuZGxlcnMgZXhwZWN0IHZhcmlvdXMgdHJhcCBnbG9iYWwgcmVnaXN0ZXJzCisJICogdG8gYmUgc2V0dXAgd2l0aCBzb21lIGZpeGVkIHZhbHVlcy4gIFNvIGhlcmUgd2Ugc2V0IHRoZXNlCisJICogdXAgdmVyeSBjYXJlZnVsbHkuICBUaGVzZSBnbG9iYWxzIGFyZToKKwkgKgorCSAqIEFsdGVybmF0ZSBHbG9iYWxzIChQU1RBVEVfQUcpOgorCSAqCisJICogJWc2CQkJLS0+IGN1cnJlbnRfdGhyZWFkX2luZm8oKQorCSAqCisJICogTU1VIEdsb2JhbHMgKFBTVEFURV9NRyk6CisJICoKKwkgKiAlZzEJCQktLT4gVExCX1NGU1IKKwkgKiAlZzIJCQktLT4gKChfUEFHRV9WQUxJRCB8IF9QQUdFX1NaNE1CIHwKKwkgKgkJCSAgICAgIF9QQUdFX0NQIHwgX1BBR0VfQ1YgfCBfUEFHRV9QIHwgX1BBR0VfVykKKwkgKgkJCSAgICAgXiAweGZmZmZmODAwMDAwMDAwMDApCisJICogKHRoaXMgJWcyIHZhbHVlIGlzIHVzZWQgZm9yIGNvbXB1dGluZyB0aGUgUEFHRV9PRkZTRVQga2VybmVsCisJICogIFRMQiBlbnRyaWVzIHF1aWNrbHksIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGZhdWx0IFhPUidkCisJICogIHdpdGggdGhpcyAlZzIgdmFsdWUgaXMgdGhlIFBURSB0byBsb2FkIGludG8gdGhlIFRMQikKKwkgKiAlZzMJCQktLT4gVlBURV9CQVNFX0NIRUVUQUggb3IgVlBURV9CQVNFX1NQSVRGSVJFCisJICoKKwkgKiBJbnRlcnJ1cHQgR2xvYmFscyAoUFNUQVRFX0lHLCBzZXR1cCBieSBpbml0X2lycXdvcmtfY3VyY3B1KCkpOgorCSAqCisJICogJWc2CQkJLS0+IF9faXJxX3dvcmtbc21wX3Byb2Nlc3Nvcl9pZCgpXQorCSAqLworCiAJcmRwcgklcHN0YXRlLCAlbzEKIAltb3YJJWc2LCAlbzIKLQl3cnByCSVvMSwgKFBTVEFURV9BR3xQU1RBVEVfSUUpLCAlcHN0YXRlCi0Jc2V0aGkJJWhpKHNwYXJjNjRfdHRhYmxlX3RsMCksICVnMQotCXdycHIJJWcxLCAldGJhCisJd3JwcgklbzEsIFBTVEFURV9BRywgJXBzdGF0ZQogCW1vdgklbzIsICVnNgogCi0JLyogU2V0IHVwIE1NVSBnbG9iYWxzICovCi0Jd3JwcgklbzEsIChQU1RBVEVfTUd8UFNUQVRFX0lFKSwgJXBzdGF0ZQotCi0JLyogU2V0IGZpeGVkIGdsb2JhbHMgdXNlZCBieSBkVExCIG1pc3MgaGFuZGxlci4gKi8KICNkZWZpbmUgS0VSTl9ISUdIQklUUwkJKChfUEFHRV9WQUxJRHxfUEFHRV9TWjRNQileMHhmZmZmZjgwMDAwMDAwMDAwKQogI2RlZmluZSBLRVJOX0xPV0JJVFMJCShfUEFHRV9DUCB8IF9QQUdFX0NWIHwgX1BBR0VfUCB8IF9QQUdFX1cpCi0KKwl3cnByCSVvMSwgUFNUQVRFX01HLCAlcHN0YXRlCiAJbW92CVRTQl9SRUcsICVnMQogCXN0eGEJJWcwLCBbJWcxXSBBU0lfRE1NVQogCW1lbWJhcgkjU3luYwpAQCAtNjY2LDE3ICs0NjQsMTcgQEAKIAlzbGx4CSVnMiwgMzIsICVnMgogCW9yCSVnMiwgS0VSTl9MT1dCSVRTLCAlZzIKIAotCUJSQU5DSF9JRl9BTllfQ0hFRVRBSChnMyxnNyxjaGVldGFoX3ZwdGVfYmFzZSkKLQliYSxwdAkleGNjLCBzcGl0ZmlyZV92cHRlX2Jhc2UKKwlCUkFOQ0hfSUZfQU5ZX0NIRUVUQUgoZzMsZzcsOGYpCisJYmEscHQJJXhjYywgOWYKIAkgbm9wCiAKLWNoZWV0YWhfdnB0ZV9iYXNlOgorODoKIAlzZXRoaQkJJXVoaShWUFRFX0JBU0VfQ0hFRVRBSCksICVnMwogCW9yCQklZzMsICV1bG8oVlBURV9CQVNFX0NIRUVUQUgpLCAlZzMKIAliYSxwdAkJJXhjYywgMmYKIAkgc2xseAkJJWczLCAzMiwgJWczCiAKLXNwaXRmaXJlX3ZwdGVfYmFzZToKKzk6CiAJc2V0aGkJCSV1aGkoVlBURV9CQVNFX1NQSVRGSVJFKSwgJWczCiAJb3IJCSVnMywgJXVsbyhWUFRFX0JBU0VfU1BJVEZJUkUpLCAlZzMKIAlzbGx4CQklZzMsIDMyLCAlZzMKQEAgLTcwMiw0OCArNTAwLDU1IEBACiAJc2xseAklbzIsIDMyLCAlbzIKIAl3cgklbzIsICVhc3IyNQogCi0JLyogT2ssIHdlJ3JlIGRvbmUgc2V0dGluZyB1cCBhbGwgdGhlIHN0YXRlIG91ciB0cmFwIG1lY2hhbmltcyBuZWVkcywKLQkgKiBub3cgZ2V0IGJhY2sgaW50byBub3JtYWwgZ2xvYmFscyBhbmQgbGV0IHRoZSBQUk9NIGtub3cgd2hhdCBpcyB1cC4KLQkgKi8KIDI6CiAJd3JwcgklZzAsICVnMCwgJXdzdGF0ZQotCXdycHIJJW8xLCBQU1RBVEVfSUUsICVwc3RhdGUKKwl3cnByCSVvMSwgMHgwLCAlcHN0YXRlCiAKIAljYWxsCWluaXRfaXJxd29ya19jdXJjcHUKIAkgbm9wCiAKLQljYWxsCXByb21fc2V0X3RyYXBfdGFibGUKLQkgc2V0aGkJJWhpKHNwYXJjNjRfdHRhYmxlX3RsMCksICVvMAotCi0JQlJBTkNIX0lGX0NIRUVUQUhfUExVU19PUl9GT0xMT1dPTihnMixnMywxZikKLQliYSxwdAkleGNjLCAyZgotCSBub3AKLQotMToJLyogU3RhcnQgdXNpbmcgcHJvcGVyIHBhZ2Ugc2l6ZSBlbmNvZGluZ3MgaW4gY3R4IHJlZ2lzdGVyLiAgKi8KLQlzZXRoaQkldWhpKENUWF9DSEVFVEFIX1BMVVNfTlVDKSwgJWczCi0JbW92CVBSSU1BUllfQ09OVEVYVCwgJWcxCi0Jc2xseAklZzMsIDMyLCAlZzMKLQlzZXRoaQklaGkoQ1RYX0NIRUVUQUhfUExVU19DVFgwKSwgJWcyCi0Jb3IJJWczLCAlZzIsICVnMwotCXN0eGEJJWczLCBbJWcxXSBBU0lfRE1NVQotCW1lbWJhcgkjU3luYwotCi0yOgorCS8qIE5vdyB3ZSBjYW4gdHVybiBpbnRlcnJ1cHRzIGJhY2sgb24uICovCiAJcmRwcgklcHN0YXRlLCAlbzEKIAlvcgklbzEsIFBTVEFURV9JRSwgJW8xCiAJd3JwcgklbzEsIDAsICVwc3RhdGUKKwl3cnByCSVnMCwgMHgwLCAlcGlsCiAKIAlyZXQKIAkgcmVzdG9yZQogCisJLmdsb2JsCXNldHVwX3RiYQorc2V0dXBfdGJhOgkvKiBpMCA9IGlzX3N0YXJmaXJlICovCisJc2F2ZQklc3AsIC0xOTIsICVzcAorCisJLyogVGhlIGJvb3QgcHJvY2Vzc29yIGlzIHRoZSBvbmx5IGNwdSB3aGljaCBpbnZva2VzIHRoaXMKKwkgKiByb3V0aW5lLCB0aGUgb3RoZXIgY3B1cyBzZXQgdGhpbmdzIHVwIHZpYSB0cmFtcG9saW5lLlMuCisJICogU28gc2F2ZSB0aGUgT0JQIHRyYXAgdGFibGUgYWRkcmVzcyBoZXJlLgorCSAqLworCXJkcHIJJXRiYSwgJWc3CisJc2V0aGkJJWhpKHByb21fdGJhKSwgJW8xCisJb3IJJW8xLCAlbG8ocHJvbV90YmEpLCAlbzEKKwlzdHgJJWc3LCBbJW8xXQorCisJY2FsbAlzZXR1cF90cmFwX3RhYmxlCisJIG5vcAorCisJcmV0CisJIHJlc3RvcmUKK3NwYXJjNjRfYm9vdF9lbmQ6CisKKyNpbmNsdWRlICJzeXN0YmxzLlMiCisjaW5jbHVkZSAia3RsYi5TIgorI2luY2x1ZGUgImV0cmFwLlMiCisjaW5jbHVkZSAicnRyYXAuUyIKKyNpbmNsdWRlICJ3aW5maXh1cC5TIgorI2luY2x1ZGUgImVudHJ5LlMiCisKIC8qCi0gKiBUaGUgZm9sbG93aW5nIHNraXBzIG1ha2Ugc3VyZSB0aGUgdHJhcCB0YWJsZSBpbiB0dGFibGUuUyBpcyBhbGlnbmVkCisgKiBUaGUgZm9sbG93aW5nIHNraXAgbWFrZXMgc3VyZSB0aGUgdHJhcCB0YWJsZSBpbiB0dGFibGUuUyBpcyBhbGlnbmVkCiAgKiBvbiBhIDMySyBib3VuZGFyeSBhcyByZXF1aXJlZCBieSB0aGUgdjkgc3BlY3MgZm9yIFRCQSByZWdpc3Rlci4KICAqLwotc3BhcmM2NF9ib290X2VuZDoKLQkuc2tpcAkweDIwMDAgKyBfc3RhcnQgLSBzcGFyYzY0X2Jvb3RfZW5kCi1ib290dXBfdXNlcl9zdGFja19lbmQ6Ci0JLnNraXAJMHgyMDAwCisxOgorCS5za2lwCTB4NDAwMCArIF9zdGFydCAtIDFiCiAKICNpZmRlZiBDT05GSUdfU0JVUwogLyogVGhpcyBpcyBqdXN0IGEgaGFjayB0byBmb29sIG1ha2UgZGVwZW5kIGNvbmZpZy5oIGRpc2NvdmVyaW5nCkBAIC03NTUsMjAgKzU2MCw2IEBACiAhIDB4MDAwMDAwMDAwMDQwODAwMAogCiAjaW5jbHVkZSAidHRhYmxlLlMiCi0jaW5jbHVkZSAic3lzdGJscy5TIgotCi0JLmFsaWduCTEwMjQKLQkuZ2xvYmwJc3dhcHBlcl9wZ19kaXIKLXN3YXBwZXJfcGdfZGlyOgotCS53b3JkCTAKLQotI2luY2x1ZGUgImV0cmFwLlMiCi0jaW5jbHVkZSAicnRyYXAuUyIKLSNpbmNsdWRlICJ3aW5maXh1cC5TIgotI2luY2x1ZGUgImVudHJ5LlMiCi0KLQkvKiBUaGlzIGlzIGp1c3QgYW5hbCByZXRlbnRpdmVuZXNzIG9uIG15IHBhcnQuLi4gKi8KLQkuYWxpZ24JMTYzODQKIAogCS5kYXRhCiAJLmFsaWduCTgKQEAgLTc3Niw4ICs1NjcsMTEgQEAKIHByb21fdGJhOgkueHdvcmQJMAogdGxiX3R5cGU6CS53b3JkCTAJLyogTXVzdCBOT1QgZW5kIHVwIGluIEJTUyAqLwogCS5zZWN0aW9uCSIuZml4dXAiLCNhbGxvYywjZXhlY2luc3RyCi0JLmdsb2JsCV9fcmV0X2VmYXVsdAorCisJLmdsb2JsCV9fcmV0X2VmYXVsdCwgX19yZXRsX2VmYXVsdAogX19yZXRfZWZhdWx0OgogCXJldAogCSByZXN0b3JlICVnMCwgLUVGQVVMVCwgJW8wCi0KK19fcmV0bF9lZmF1bHQ6CisJcmV0bAorCSBtb3YJLUVGQVVMVCwgJW8wCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2lycS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9pcnEuYwppbmRleCBjOWI2OTE2Li4yMzM1MjZiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2lycS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvaXJxLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc2J1cy5oPgogI2luY2x1ZGUgPGFzbS9pb21tdS5oPgogI2luY2x1ZGUgPGFzbS91cGEuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaXRsYl9iYXNlLlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2l0bGJfYmFzZS5TCmluZGV4IGI1ZTMyZGYuLjQ5NTFmZjggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaXRsYl9iYXNlLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9pdGxiX2Jhc2UuUwpAQCAtMTUsMTQgKzE1LDEyIEBACiAgKi8KICNkZWZpbmUgQ1JFQVRFX1ZQVEVfT0ZGU0VUMShyMSwgcjIpIFwKIAkJCQlzcmF4CXIxLCAxMCwgcjIKLSNkZWZpbmUgQ1JFQVRFX1ZQVEVfT0ZGU0VUMihyMSwgcjIpCi0jZGVmaW5lIENSRUFURV9WUFRFX05PUAkJbm9wCisjZGVmaW5lIENSRUFURV9WUFRFX09GRlNFVDIocjEsIHIyKSBub3AKICNlbHNlIC8qIFBBR0VfU0hJRlQgKi8KICNkZWZpbmUgQ1JFQVRFX1ZQVEVfT0ZGU0VUMShyMSwgcjIpIFwKIAkJCQlzcmF4CXIxLCBQQUdFX1NISUZULCByMgogI2RlZmluZSBDUkVBVEVfVlBURV9PRkZTRVQyKHIxLCByMikgXAogCQkJCXNsbHgJcjIsIDMsIHIyCi0jZGVmaW5lIENSRUFURV9WUFRFX05PUAogI2VuZGlmIC8qIFBBR0VfU0hJRlQgKi8KIAogCkBAIC0zNiw2ICszNCw3IEBACiAgKi8KIAogLyogSVRMQiAqKiBJQ0FDSEUgbGluZSAxOiBRdWljayB1c2VyIFRMQiBtaXNzZXMJCSovCisJbW92CQlUTEJfU0ZTUiwgJWcxCiAJbGR4YQkJWyVnMSArICVnMV0gQVNJX0lNTVUsICVnNAkhIEdldCBUQUdfQUNDRVNTCiAJQ1JFQVRFX1ZQVEVfT0ZGU0VUMSglZzQsICVnNikJCQkhIENyZWF0ZSBWUFRFIG9mZnNldAogCUNSRUFURV9WUFRFX09GRlNFVDIoJWc0LCAlZzYpCQkJISBDcmVhdGUgVlBURSBvZmZzZXQKQEAgLTQzLDQxICs0MiwzOCBAQAogMToJYnJnZXoscG4JJWc1LCAzZgkJCQkhIE5vdCB2YWxpZCwgYnJhbmNoIG91dAogCSBzZXRoaQkJJWhpKF9QQUdFX0VYRUMpLCAlZzQJCSEgRGVsYXktc2xvdAogCWFuZGNjCQklZzUsICVnNCwgJWcwCQkJISBFeGVjdXRhYmxlPworCisvKiBJVExCICoqIElDQUNIRSBsaW5lIDI6IFJlYWwgZmF1bHRzCQkJKi8KIAliZSxwbgkJJXhjYywgM2YJCQkhIE5vcGUsIGJyYW5jaC4KIAkgbm9wCQkJCQkJISBEZWxheS1zbG90CiAyOglzdHhhCQklZzUsIFslZzBdIEFTSV9JVExCX0RBVEFfSU4JISBMb2FkIFBURSBpbnRvIFRMQgogCXJldHJ5CQkJCQkJISBUcmFwIHJldHVybgotMzoJcmRwcgkJJXBzdGF0ZSwgJWc0CQkJISBNb3ZlIGludG8gYWx0ZXJuYXRlIGdsb2JhbHMKLQotLyogSVRMQiAqKiBJQ0FDSEUgbGluZSAyOiBSZWFsIGZhdWx0cwkJCSovCiszOglyZHByCQklcHN0YXRlLCAlZzQJCQkhIE1vdmUgaW50byBhbHQtZ2xvYmFscwogCXdycHIJCSVnNCwgUFNUQVRFX0FHfFBTVEFURV9NRywgJXBzdGF0ZQogCXJkcHIJCSV0cGMsICVnNQkJCSEgQW5kIGxvYWQgZmF1bHRpbmcgVkEKIAltb3YJCUZBVUxUX0NPREVfSVRMQiwgJWc0CQkhIEl0IHdhcyByZWFkIGZyb20gSVRMQgotc3BhcmM2NF9yZWFsZmF1bHRfY29tbW9uOgkJCQkhIENhbGxlZCBieSBUTDAgZHRsYl9taXNzIHRvbworCisvKiBJVExCICoqIElDQUNIRSBsaW5lIDM6IEZpbmlzaCBmYXVsdHMJKi8KK3NwYXJjNjRfcmVhbGZhdWx0X2NvbW1vbjoJCQkJISBDYWxsZWQgYnkgZHRsYl9taXNzCiAJc3RiCQklZzQsIFslZzYgKyBUSV9GQVVMVF9DT0RFXQogCXN0eAkJJWc1LCBbJWc2ICsgVElfRkFVTFRfQUREUl0KIAliYSxwdAkJJXhjYywgZXRyYXAJCQkhIFNhdmUgc3RhdGUKIDE6CSByZAkJJXBjLCAlZzcJCQkhIC4uLgotCW5vcAotCi0vKiBJVExCICoqIElDQUNIRSBsaW5lIDM6IEZpbmlzaCBmYXVsdHMgKyB3aW5kb3cgZml4dXBzCSovCiAJY2FsbAkJZG9fc3BhcmM2NF9mYXVsdAkJISBDYWxsIGZhdWx0IGhhbmRsZXIKIAkgYWRkCQklc3AsIFBUUkVHU19PRkYsICVvMCEgQ29tcHV0ZSBwdF9yZWdzIGFyZwogCWJhLHB0CQkleGNjLCBydHJhcF9jbHJfbDYJCSEgUmVzdG9yZSBjcHUgc3RhdGUKIAkgbm9wCisKKy8qIElUTEIgKiogSUNBQ0hFIGxpbmUgNDogV2luZG93IGZpeHVwcyAqLwogd2luZml4X3RyYW1wb2xpbmU6CiAJcmRwcgkJJXRwYywgJWczCQkJISBQcmVwYXJlIHdpbmZpeHVwIFROUEMKLQlvcgkJJWczLCAweDdjLCAlZzMJCQkhIENvbXB1dGUgb2Zmc2V0IHRvIGJyYW5jaAorCW9yCQklZzMsIDB4N2MsICVnMwkJCSEgQ29tcHV0ZSBicmFuY2ggb2Zmc2V0CiAJd3JwcgkJJWczLCAldG5wYwkJCSEgV3JpdGUgaXQgaW50byBUTlBDCiAJZG9uZQkJCQkJCSEgRG8gaXQgdG8gaXQKLQotLyogSVRMQiAqKiBJQ0FDSEUgbGluZSA0OiBVbnVzZWQuLi4JKi8KIAlub3AKIAlub3AKIAlub3AKIAlub3AKLQlDUkVBVEVfVlBURV9OT1AKIAogI3VuZGVmIENSRUFURV9WUFRFX09GRlNFVDEKICN1bmRlZiBDUkVBVEVfVlBURV9PRkZTRVQyCi0jdW5kZWYgQ1JFQVRFX1ZQVEVfTk9QCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2t0bGIuUyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwva3RsYi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MjQ0ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2t0bGIuUwpAQCAtMCwwICsxLDE5NCBAQAorLyogYXJjaC9zcGFyYzY0L2tlcm5lbC9rdGxiLlM6IEtlcm5lbCBtYXBwaW5nIFRMQiBtaXNzIGhhbmRsaW5nLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NywgMjAwNSBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRWRkaWUgQy4gRG9zdCAgICAgICAgKGVjZEBicmFpbmFpZC5kZSkKKyAqIENvcHlyaWdodCAoQykgMTk5NiBNaWd1ZWwgZGUgSWNhemEgICAgICAobWlndWVsQG51Y2xlY3UudW5hbS5teCkKKyAqIENvcHlyaWdodCAoQykgMTk5Niw5OCw5OSBKYWt1YiBKZWxpbmVrICAoampAc3Vuc2l0ZS5tZmYuY3VuaS5jeikKKyovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vaGVhZC5oPgorI2luY2x1ZGUgPGFzbS9hc2kuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisKKwkudGV4dAorCS5hbGlnbgkJMzIKKworLyoKKyAqIE9uIGEgc2Vjb25kIGxldmVsIHZwdGUgbWlzcywgY2hlY2sgd2hldGhlciB0aGUgb3JpZ2luYWwgZmF1bHQgaXMgdG8gdGhlIE9CUCAKKyAqIHJhbmdlIChub3RlIHRoYXQgdGhpcyBpcyBvbmx5IHBvc3NpYmxlIGZvciBpbnN0cnVjdGlvbiBtaXNzLCBkYXRhIG1pc3NlcyB0bworICogb2JwIHJhbmdlIGRvIG5vdCB1c2UgdnB0ZSkuIElmIHNvLCBnbyBiYWNrIGRpcmVjdGx5IHRvIHRoZSBmYXVsdGluZyBhZGRyZXNzLgorICogVGhpcyBpcyBiZWNhdXNlIHdlIHdhbnQgdG8gcmVhZCB0aGUgdHBjLCBvdGhlcndpc2Ugd2UgaGF2ZSBubyB3YXkgb2Yga25vd2luZworICogdGhlIDhrIGFsaWduZWQgZmF1bHRpbmcgYWRkcmVzcyBpZiB3ZSBhcmUgdXNpbmcgPjhrIGtlcm5lbCBwYWdlc2l6ZS4gVGhpcworICogYWxzbyBlbnN1cmVzIG5vIHZwdGUgcmFuZ2UgYWRkcmVzc2VzIGFyZSBkcm9wcGVkIGludG8gdGxiIHdoaWxlIG9icCBpcworICogZXhlY3V0aW5nIChzZWUgaW5oZXJpdF9sb2NrZWRfcHJvbV9tYXBwaW5ncygpIHJhbnQpLgorICovCitzcGFyYzY0X3ZwdGVfbnVjbGV1czoKKwkvKiBOb3RlIHRoYXQga3ZtYXAgYmVsb3cgaGFzIHZlcmlmaWVkIHRoYXQgdGhlIGFkZHJlc3MgaXMKKwkgKiBpbiB0aGUgcmFuZ2UgTU9EVUxFU19WQUREUiAtLT4gVk1BTExPQ19FTkQgYWxyZWFkeS4gIFNvCisJICogaGVyZSB3ZSBuZWVkIG9ubHkgY2hlY2sgaWYgaXQgaXMgYW4gT0JQIGFkZHJlc3Mgb3Igbm90LgorCSAqLworCXNldGhpCQklaGkoTE9XX09CUF9BRERSRVNTKSwgJWc1CisJY21wCQklZzQsICVnNQorCWJsdSxwbgkJJXhjYywga2Vybl92cHRlCisJIG1vdgkJMHgxLCAlZzUKKwlzbGx4CQklZzUsIDMyLCAlZzUKKwljbXAJCSVnNCwgJWc1CisJYmx1LHBuCQkleGNjLCB2cHRlX2luc25fb2JwCisJIG5vcAorCisJLyogVGhlc2UgdHdvIGluc3RydWN0aW9ucyBhcmUgcGF0Y2hlZCBieSBwYWdpbmlnX2luaXQoKS4gICovCitrZXJuX3ZwdGU6CisJc2V0aGkJCSVoaShzd2FwcGVyX3BnZF96ZXJvKSwgJWc1CisJbGR1dwkJWyVnNSArICVsbyhzd2FwcGVyX3BnZF96ZXJvKV0sICVnNQorCisJLyogV2l0aCBrZXJuZWwgUEdEIGluICVnNSwgYnJhbmNoIGJhY2sgaW50byBkdGxiX2JhY2tlbmQuICAqLworCWJhLHB0CQkleGNjLCBzcGFyYzY0X2twdGVfY29udGludWUKKwkgYW5kbgkJJWcxLCAweDMsICVnMQkvKiBGaW5pc2ggUE1EIG9mZnNldCBhZGp1c3RtZW50LiAgKi8KKwordnB0ZV9ub2VudDoKKwkvKiBSZXN0b3JlIHByZXZpb3VzIFRBR19BQ0NFU1MsICVnNSBpcyB6ZXJvLCBhbmQgd2Ugd2lsbAorCSAqIHNraXAgb3ZlciB0aGUgdHJhcCBpbnN0cnVjdGlvbiBzbyB0aGF0IHRoZSB0b3AgbGV2ZWwKKwkgKiBUTEIgbWlzcyBoYW5kbGVyIHdpbGwgdGhpbmcgdGhpcyAlZzUgdmFsdWUgaXMganVzdCBhbgorCSAqIGludmFsaWQgUFRFLCB0aHVzIGJyYW5jaGluZyB0byBmdWxsIGZhdWx0IHByb2Nlc3NpbmcuCisJICovCisJbW92CQlUTEJfU0ZTUiwgJWcxCisJc3R4YQkJJWc0LCBbJWcxICsgJWcxXSBBU0lfRE1NVQorCWRvbmUKKwordnB0ZV9pbnNuX29icDoKKwkvKiBCZWhhdmUgYXMgaWYgd2UgYXJlIGF0IFRMMC4gICovCisJd3JwcgkJJWcwLCAxLCAldGwKKwlyZHByCQkldHBjLCAlZzQJLyogRmluZCBvcmlnaW5hbCBmYXVsdGluZyBpYWRkciAqLworCXNybHgJCSVnNCwgMTMsICVnNAkvKiBUaHJvdyBvdXQgY29udGV4dCBiaXRzICovCisJc2xseAkJJWc0LCAxMywgJWc0CS8qIGc0IGhhcyB2cG4gKyBjdHgwIG5vdyAqLworCisJLyogUmVzdG9yZSBwcmV2aW91cyBUQUdfQUNDRVNTLiAgKi8KKwltb3YJCVRMQl9TRlNSLCAlZzEKKwlzdHhhCQklZzQsIFslZzEgKyAlZzFdIEFTSV9JTU1VCisKKwlzZXRoaQkJJWhpKHByb21fdHJhbnMpLCAlZzUKKwlvcgkJJWc1LCAlbG8ocHJvbV90cmFucyksICVnNQorCisxOglsZHgJCVslZzUgKyAweDAwXSwgJWc2CSEgYmFzZQorCWJyeixhLHBuCSVnNiwgbG9uZ3BhdGgJCSEgbm8gbW9yZSBlbnRyaWVzLCBmYWlsCisJIG1vdgkJVExCX1NGU1IsICVnMQkJISBhbmQgcmVzdG9yZSAlZzEKKwlsZHgJCVslZzUgKyAweDA4XSwgJWcxCSEgbGVuCisJYWRkCQklZzYsICVnMSwgJWcxCQkhIGVuZAorCWNtcAkJJWc2LCAlZzQKKwliZ3UscHQJCSV4Y2MsIDJmCisJIGNtcAkJJWc0LCAlZzEKKwliZ2V1LHB0CQkleGNjLCAyZgorCSBsZHgJCVslZzUgKyAweDEwXSwgJWcxCSEgUFRFCisKKwkvKiBUTEIgbG9hZCwgcmVzdG9yZSAlZzEsIGFuZCByZXR1cm4gZnJvbSB0cmFwLiAgKi8KKwlzdWIJCSVnNCwgJWc2LCAlZzYKKwlhZGQJCSVnMSwgJWc2LCAlZzUKKwltb3YJCVRMQl9TRlNSLCAlZzEKKwlzdHhhCQklZzUsIFslZzBdIEFTSV9JVExCX0RBVEFfSU4KKwlyZXRyeQorCisyOgliYSxwdAkJJXhjYywgMWIKKwkgYWRkCQklZzUsICgzICogOCksICVnNQkhIG5leHQgZW50cnkKKwora3ZtYXBfZG9fb2JwOgorCXNldGhpCQklaGkocHJvbV90cmFucyksICVnNQorCW9yCQklZzUsICVsbyhwcm9tX3RyYW5zKSwgJWc1CisJc3JseAkJJWc0LCAxMywgJWc0CisJc2xseAkJJWc0LCAxMywgJWc0CisKKzE6CWxkeAkJWyVnNSArIDB4MDBdLCAlZzYJISBiYXNlCisJYnJ6LGEscG4JJWc2LCBsb25ncGF0aAkJISBubyBtb3JlIGVudHJpZXMsIGZhaWwKKwkgbW92CQlUTEJfU0ZTUiwgJWcxCQkhIGFuZCByZXN0b3JlICVnMQorCWxkeAkJWyVnNSArIDB4MDhdLCAlZzEJISBsZW4KKwlhZGQJCSVnNiwgJWcxLCAlZzEJCSEgZW5kCisJY21wCQklZzYsICVnNAorCWJndSxwdAkJJXhjYywgMmYKKwkgY21wCQklZzQsICVnMQorCWJnZXUscHQJCSV4Y2MsIDJmCisJIGxkeAkJWyVnNSArIDB4MTBdLCAlZzEJISBQVEUKKworCS8qIFRMQiBsb2FkLCByZXN0b3JlICVnMSwgYW5kIHJldHVybiBmcm9tIHRyYXAuICAqLworCXN1YgkJJWc0LCAlZzYsICVnNgorCWFkZAkJJWcxLCAlZzYsICVnNQorCW1vdgkJVExCX1NGU1IsICVnMQorCXN0eGEJCSVnNSwgWyVnMF0gQVNJX0RUTEJfREFUQV9JTgorCXJldHJ5CisKKzI6CWJhLHB0CQkleGNjLCAxYgorCSBhZGQJCSVnNSwgKDMgKiA4KSwgJWc1CSEgbmV4dCBlbnRyeQorCisvKgorICogT24gYSBmaXJzdCBsZXZlbCBkYXRhIG1pc3MsIGNoZWNrIHdoZXRoZXIgdGhpcyBpcyB0byB0aGUgT0JQIHJhbmdlIChub3RlCisgKiB0aGF0IHN1Y2ggYWNjZXNzZXMgY2FuIGJlIG1hZGUgYnkgcHJvbSwgYXMgd2VsbCBhcyBieSBrZXJuZWwgdXNpbmcKKyAqIHByb21fZ2V0cHJvcGVydHkgb24gImFkZHJlc3MiKSwgYW5kIGlmIHNvLCBkbyBub3QgdXNlIHZwdGUgYWNjZXNzIC4uLgorICogcmF0aGVyLCB1c2UgaW5mb3JtYXRpb24gc2F2ZWQgZHVyaW5nIGluaGVyaXRfcHJvbV9tYXBwaW5ncygpIHVzaW5nIDhrCisgKiBwYWdlc2l6ZS4KKyAqLworCS5hbGlnbgkJMzIKK2t2bWFwOgorCWJyZ2V6LHBuCSVnNCwga3ZtYXBfbm9ubGluZWFyCisJIG5vcAorCisjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQworCS5nbG9ibAkJa3ZtYXBfbGluZWFyX3BhdGNoCitrdm1hcF9saW5lYXJfcGF0Y2g6CisjZW5kaWYKKwliYSxwdAkJJXhjYywga3ZtYXBfbG9hZAorCSB4b3IJCSVnMiwgJWc0LCAlZzUKKworI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKKwlzZXRoaQkJJWhpKHN3YXBwZXJfcGdfZGlyKSwgJWc1CisJb3IJCSVnNSwgJWxvKHN3YXBwZXJfcGdfZGlyKSwgJWc1CisJc2xseAkJJWc0LCA2NCAtIChQR0RJUl9TSElGVCArIFBHRElSX0JJVFMpLCAlZzYKKwlzcmx4CQklZzYsIDY0IC0gUEFHRV9TSElGVCwgJWc2CisJYW5kbgkJJWc2LCAweDMsICVnNgorCWxkdXcJCVslZzUgKyAlZzZdLCAlZzUKKwlicnoscG4JCSVnNSwgbG9uZ3BhdGgKKwkgc2xseAkJJWc0LCA2NCAtIChQTURfU0hJRlQgKyBQTURfQklUUyksICVnNgorCXNybHgJCSVnNiwgNjQgLSBQQUdFX1NISUZULCAlZzYKKwlzbGx4CQklZzUsIDExLCAlZzUKKwlhbmRuCQklZzYsIDB4MywgJWc2CisJbGR1d2EJCVslZzUgKyAlZzZdIEFTSV9QSFlTX1VTRV9FQywgJWc1CisJYnJ6LHBuCQklZzUsIGxvbmdwYXRoCisJIHNsbHgJCSVnNCwgNjQgLSBQTURfU0hJRlQsICVnNgorCXNybHgJCSVnNiwgNjQgLSBQQUdFX1NISUZULCAlZzYKKwlzbGx4CQklZzUsIDExLCAlZzUKKwlhbmRuCQklZzYsIDB4NywgJWc2CisJbGR4YQkJWyVnNSArICVnNl0gQVNJX1BIWVNfVVNFX0VDLCAlZzUKKwlicnoscG4JCSVnNSwgbG9uZ3BhdGgKKwkgbm9wCisJYmEsYSxwdAkJJXhjYywga3ZtYXBfbG9hZAorI2VuZGlmCisKK2t2bWFwX25vbmxpbmVhcjoKKwlzZXRoaQkJJWhpKE1PRFVMRVNfVkFERFIpLCAlZzUKKwljbXAJCSVnNCwgJWc1CisJYmx1LHBuCQkleGNjLCBsb25ncGF0aAorCSBtb3YJCShWTUFMTE9DX0VORCA+PiAyNCksICVnNQorCXNsbHgJCSVnNSwgMjQsICVnNQorCWNtcAkJJWc0LCAlZzUKKwliZ2V1LHBuCQkleGNjLCBsb25ncGF0aAorCSBub3AKKwora3ZtYXBfY2hlY2tfb2JwOgorCXNldGhpCQklaGkoTE9XX09CUF9BRERSRVNTKSwgJWc1CisJY21wCQklZzQsICVnNQorCWJsdSxwbgkJJXhjYywga3ZtYXBfdm1hbGxvY19hZGRyCisJIG1vdgkJMHgxLCAlZzUKKwlzbGx4CQklZzUsIDMyLCAlZzUKKwljbXAJCSVnNCwgJWc1CisJYmx1LHBuCQkleGNjLCBrdm1hcF9kb19vYnAKKwkgbm9wCisKK2t2bWFwX3ZtYWxsb2NfYWRkcjoKKwkvKiBJZiB3ZSBnZXQgaGVyZSwgYSB2bWFsbG9jIGFkZHIgd2FzIGFjY2Vzc2VkLCBsb2FkIGtlcm5lbCBWUFRFLiAgKi8KKwlsZHhhCQlbJWczICsgJWc2XSBBU0lfTiwgJWc1CisJYnJnZXoscG4JJWc1LCBsb25ncGF0aAorCSBub3AKKwora3ZtYXBfbG9hZDoKKwkvKiBQVEUgaXMgdmFsaWQsIGxvYWQgaW50byBUTEIgYW5kIHJldHVybiBmcm9tIHRyYXAuICAqLworCXN0eGEJCSVnNSwgWyVnMF0gQVNJX0RUTEJfREFUQV9JTgkhIFJlbG9hZCBUTEIKKwlyZXRyeQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfaW9tbXUuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX2lvbW11LmMKaW5kZXggNDI1YzYwYy4uYTExOTEwYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfaW9tbXUuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9pb21tdS5jCkBAIC00OSwxMiArNDksNiBAQAogCiAJLyogRW5zdXJlIGNvbXBsZXRpb24gb2YgcHJldmlvdXMgUElPIHdyaXRlcy4gKi8KIAkodm9pZCkgcGNpX2lvbW11X3JlYWQoaW9tbXUtPndyaXRlX2NvbXBsZXRlX3JlZyk7Ci0KLQkvKiBOb3cgdXBkYXRlIGV2ZXJ5b25lJ3MgZmx1c2ggcG9pbnQuICovCi0JZm9yIChlbnRyeSA9IDA7IGVudHJ5IDwgUEJNX05DTFVTVEVSUzsgZW50cnkrKykgewotCQlpb21tdS0+YWxsb2NfaW5mb1tlbnRyeV0uZmx1c2ggPQotCQkJaW9tbXUtPmFsbG9jX2luZm9bZW50cnldLm5leHQ7Ci0JfQogfQogCiAjZGVmaW5lIElPUFRFX0NPTlNJU1RFTlQoQ1RYKSBcCkBAIC04MCwxMjAgKzc0LDExNyBAQAogCWlvcHRlX3ZhbCgqaW9wdGUpID0gdmFsOwogfQogCi12b2lkIHBjaV9pb21tdV90YWJsZV9pbml0KHN0cnVjdCBwY2lfaW9tbXUgKmlvbW11LCBpbnQgdHNic2l6ZSkKKy8qIEJhc2VkIGxhcmdlbHkgdXBvbiB0aGUgcHBjNjQgaW9tbXUgYWxsb2NhdG9yLiAgKi8KK3N0YXRpYyBsb25nIHBjaV9hcmVuYV9hbGxvYyhzdHJ1Y3QgcGNpX2lvbW11ICppb21tdSwgdW5zaWduZWQgbG9uZyBucGFnZXMpCiB7Ci0JaW50IGk7CisJc3RydWN0IHBjaV9pb21tdV9hcmVuYSAqYXJlbmEgPSAmaW9tbXUtPmFyZW5hOworCXVuc2lnbmVkIGxvbmcgbiwgaSwgc3RhcnQsIGVuZCwgbGltaXQ7CisJaW50IHBhc3M7CiAKLQl0c2JzaXplIC89IHNpemVvZihpb3B0ZV90KTsKKwlsaW1pdCA9IGFyZW5hLT5saW1pdDsKKwlzdGFydCA9IGFyZW5hLT5oaW50OworCXBhc3MgPSAwOwogCi0JZm9yIChpID0gMDsgaSA8IHRzYnNpemU7IGkrKykKK2FnYWluOgorCW4gPSBmaW5kX25leHRfemVyb19iaXQoYXJlbmEtPm1hcCwgbGltaXQsIHN0YXJ0KTsKKwllbmQgPSBuICsgbnBhZ2VzOworCWlmICh1bmxpa2VseShlbmQgPj0gbGltaXQpKSB7CisJCWlmIChsaWtlbHkocGFzcyA8IDEpKSB7CisJCQlsaW1pdCA9IHN0YXJ0OworCQkJc3RhcnQgPSAwOworCQkJX19pb21tdV9mbHVzaGFsbChpb21tdSk7CisJCQlwYXNzKys7CisJCQlnb3RvIGFnYWluOworCQl9IGVsc2UgeworCQkJLyogU2Nhbm5lZCB0aGUgd2hvbGUgdGhpbmcsIGdpdmUgdXAuICovCisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlmb3IgKGkgPSBuOyBpIDwgZW5kOyBpKyspIHsKKwkJaWYgKHRlc3RfYml0KGksIGFyZW5hLT5tYXApKSB7CisJCQlzdGFydCA9IGkgKyAxOworCQkJZ290byBhZ2FpbjsKKwkJfQorCX0KKworCWZvciAoaSA9IG47IGkgPCBlbmQ7IGkrKykKKwkJX19zZXRfYml0KGksIGFyZW5hLT5tYXApOworCisJYXJlbmEtPmhpbnQgPSBlbmQ7CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIHZvaWQgcGNpX2FyZW5hX2ZyZWUoc3RydWN0IHBjaV9pb21tdV9hcmVuYSAqYXJlbmEsIHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBucGFnZXMpCit7CisJdW5zaWduZWQgbG9uZyBpOworCisJZm9yIChpID0gYmFzZTsgaSA8IChiYXNlICsgbnBhZ2VzKTsgaSsrKQorCQlfX2NsZWFyX2JpdChpLCBhcmVuYS0+bWFwKTsKK30KKwordm9pZCBwY2lfaW9tbXVfdGFibGVfaW5pdChzdHJ1Y3QgcGNpX2lvbW11ICppb21tdSwgaW50IHRzYnNpemUsIHUzMiBkbWFfb2Zmc2V0LCB1MzIgZG1hX2FkZHJfbWFzaykKK3sKKwl1bnNpZ25lZCBsb25nIGksIHRzYmJhc2UsIG9yZGVyLCBzeiwgbnVtX3RzYl9lbnRyaWVzOworCisJbnVtX3RzYl9lbnRyaWVzID0gdHNic2l6ZSAvIHNpemVvZihpb3B0ZV90KTsKKworCS8qIFNldHVwIGluaXRpYWwgc29mdHdhcmUgSU9NTVUgc3RhdGUuICovCisJc3Bpbl9sb2NrX2luaXQoJmlvbW11LT5sb2NrKTsKKwlpb21tdS0+Y3R4X2xvd2VzdF9mcmVlID0gMTsKKwlpb21tdS0+cGFnZV90YWJsZV9tYXBfYmFzZSA9IGRtYV9vZmZzZXQ7CisJaW9tbXUtPmRtYV9hZGRyX21hc2sgPSBkbWFfYWRkcl9tYXNrOworCisJLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIGZyZWUgYXJlYSBtYXAuICAqLworCXN6ID0gbnVtX3RzYl9lbnRyaWVzIC8gODsKKwlzeiA9IChzeiArIDdVTCkgJiB+N1VMOworCWlvbW11LT5hcmVuYS5tYXAgPSBrbWFsbG9jKHN6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlvbW11LT5hcmVuYS5tYXApIHsKKwkJcHJvbV9wcmludGYoIlBDSV9JT01NVTogRXJyb3IsIGttYWxsb2MoYXJlbmEubWFwKSBmYWlsZWQuXG4iKTsKKwkJcHJvbV9oYWx0KCk7CisJfQorCW1lbXNldChpb21tdS0+YXJlbmEubWFwLCAwLCBzeik7CisJaW9tbXUtPmFyZW5hLmxpbWl0ID0gbnVtX3RzYl9lbnRyaWVzOworCisJLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIGR1bW15IHBhZ2Ugd2hpY2ggd2UKKwkgKiBzZXQgaW5hY3RpdmUgSU8gUFRFcyB0byBwb2ludCB0by4KKwkgKi8KKwlpb21tdS0+ZHVtbXlfcGFnZSA9IF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgMCk7CisJaWYgKCFpb21tdS0+ZHVtbXlfcGFnZSkgeworCQlwcm9tX3ByaW50ZigiUENJX0lPTU1VOiBFcnJvciwgZ2ZwKGR1bW15X3BhZ2UpIGZhaWxlZC5cbiIpOworCQlwcm9tX2hhbHQoKTsKKwl9CisJbWVtc2V0KCh2b2lkICopaW9tbXUtPmR1bW15X3BhZ2UsIDAsIFBBR0VfU0laRSk7CisJaW9tbXUtPmR1bW15X3BhZ2VfcGEgPSAodW5zaWduZWQgbG9uZykgX19wYShpb21tdS0+ZHVtbXlfcGFnZSk7CisKKwkvKiBOb3cgYWxsb2NhdGUgYW5kIHNldHVwIHRoZSBJT01NVSBwYWdlIHRhYmxlIGl0c2VsZi4gICovCisJb3JkZXIgPSBnZXRfb3JkZXIodHNic2l6ZSk7CisJdHNiYmFzZSA9IF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgb3JkZXIpOworCWlmICghdHNiYmFzZSkgeworCQlwcm9tX3ByaW50ZigiUENJX0lPTU1VOiBFcnJvciwgZ2ZwKHRzYikgZmFpbGVkLlxuIik7CisJCXByb21faGFsdCgpOworCX0KKwlpb21tdS0+cGFnZV90YWJsZSA9IChpb3B0ZV90ICopdHNiYmFzZTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fdHNiX2VudHJpZXM7IGkrKykKIAkJaW9wdGVfbWFrZV9kdW1teShpb21tdSwgJmlvbW11LT5wYWdlX3RhYmxlW2ldKTsKIH0KIAotc3RhdGljIGlvcHRlX3QgKmFsbG9jX3N0cmVhbWluZ19jbHVzdGVyKHN0cnVjdCBwY2lfaW9tbXUgKmlvbW11LCB1bnNpZ25lZCBsb25nIG5wYWdlcykKK3N0YXRpYyBpbmxpbmUgaW9wdGVfdCAqYWxsb2NfbnBhZ2VzKHN0cnVjdCBwY2lfaW9tbXUgKmlvbW11LCB1bnNpZ25lZCBsb25nIG5wYWdlcykKIHsKLQlpb3B0ZV90ICppb3B0ZSwgKmxpbWl0LCAqZmlyc3Q7Ci0JdW5zaWduZWQgbG9uZyBjbnVtLCBlbnQsIGZsdXNoX3BvaW50OworCWxvbmcgZW50cnk7CiAKLQljbnVtID0gMDsKLQl3aGlsZSAoKDFVTCA8PCBjbnVtKSA8IG5wYWdlcykKLQkJY251bSsrOwotCWlvcHRlICA9IChpb21tdS0+cGFnZV90YWJsZSArCi0JCSAgKGNudW0gPDwgKGlvbW11LT5wYWdlX3RhYmxlX3N6X2JpdHMgLSBQQk1fTE9HQ0xVU1RFUlMpKSk7CisJZW50cnkgPSBwY2lfYXJlbmFfYWxsb2MoaW9tbXUsIG5wYWdlcyk7CisJaWYgKHVubGlrZWx5KGVudHJ5IDwgMCkpCisJCXJldHVybiBOVUxMOwogCi0JaWYgKGNudW0gPT0gMCkKLQkJbGltaXQgPSAoaW9tbXUtPnBhZ2VfdGFibGUgKwotCQkJIGlvbW11LT5sb3dlc3RfY29uc2lzdGVudF9tYXApOwotCWVsc2UKLQkJbGltaXQgPSAoaW9wdGUgKwotCQkJICgxIDw8IChpb21tdS0+cGFnZV90YWJsZV9zel9iaXRzIC0gUEJNX0xPR0NMVVNURVJTKSkpOwotCi0JaW9wdGUgKz0gKChlbnQgPSBpb21tdS0+YWxsb2NfaW5mb1tjbnVtXS5uZXh0KSA8PCBjbnVtKTsKLQlmbHVzaF9wb2ludCA9IGlvbW11LT5hbGxvY19pbmZvW2NudW1dLmZsdXNoOwotCQotCWZpcnN0ID0gaW9wdGU7Ci0JZm9yICg7OykgewotCQlpZiAoSU9QVEVfSVNfRFVNTVkoaW9tbXUsIGlvcHRlKSkgewotCQkJaWYgKChpb3B0ZSArICgxIDw8IGNudW0pKSA+PSBsaW1pdCkKLQkJCQllbnQgPSAwOwotCQkJZWxzZQotCQkJCWVudCA9IGVudCArIDE7Ci0JCQlpb21tdS0+YWxsb2NfaW5mb1tjbnVtXS5uZXh0ID0gZW50OwotCQkJaWYgKGVudCA9PSBmbHVzaF9wb2ludCkKLQkJCQlfX2lvbW11X2ZsdXNoYWxsKGlvbW11KTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlvcHRlICs9ICgxIDw8IGNudW0pOwotCQllbnQrKzsKLQkJaWYgKGlvcHRlID49IGxpbWl0KSB7Ci0JCQlpb3B0ZSA9IChpb21tdS0+cGFnZV90YWJsZSArCi0JCQkJIChjbnVtIDw8Ci0JCQkJICAoaW9tbXUtPnBhZ2VfdGFibGVfc3pfYml0cyAtIFBCTV9MT0dDTFVTVEVSUykpKTsKLQkJCWVudCA9IDA7Ci0JCX0KLQkJaWYgKGVudCA9PSBmbHVzaF9wb2ludCkKLQkJCV9faW9tbXVfZmx1c2hhbGwoaW9tbXUpOwotCQlpZiAoaW9wdGUgPT0gZmlyc3QpCi0JCQlnb3RvIGJhZDsKLQl9Ci0KLQkvKiBJJ3ZlIGdvdCB5b3VyIHN0cmVhbWluZyBjbHVzdGVyIHJpZ2h0IGhlcmUgYnVkZHkgYm95Li4uICovCi0JcmV0dXJuIGlvcHRlOwotCi1iYWQ6Ci0JcHJpbnRrKEtFUk5fRU1FUkcgInBjaV9pb21tdTogYWxsb2Nfc3RyZWFtaW5nX2NsdXN0ZXIgb2YgbnBhZ2VzKCVsZCkgZmFpbGVkIVxuIiwKLQkgICAgICAgbnBhZ2VzKTsKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gaW9tbXUtPnBhZ2VfdGFibGUgKyBlbnRyeTsKIH0KIAotc3RhdGljIHZvaWQgZnJlZV9zdHJlYW1pbmdfY2x1c3RlcihzdHJ1Y3QgcGNpX2lvbW11ICppb21tdSwgZG1hX2FkZHJfdCBiYXNlLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgbnBhZ2VzLCB1bnNpZ25lZCBsb25nIGN0eCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX25wYWdlcyhzdHJ1Y3QgcGNpX2lvbW11ICppb21tdSwgZG1hX2FkZHJfdCBiYXNlLCB1bnNpZ25lZCBsb25nIG5wYWdlcykKIHsKLQl1bnNpZ25lZCBsb25nIGNudW0sIGVudDsKLQotCWNudW0gPSAwOwotCXdoaWxlICgoMVVMIDw8IGNudW0pIDwgbnBhZ2VzKQotCQljbnVtKys7Ci0KLQllbnQgPSAoYmFzZSA8PCAoMzIgLSBJT19QQUdFX1NISUZUICsgUEJNX0xPR0NMVVNURVJTIC0gaW9tbXUtPnBhZ2VfdGFibGVfc3pfYml0cykpCi0JCT4+ICgzMiArIFBCTV9MT0dDTFVTVEVSUyArIGNudW0gLSBpb21tdS0+cGFnZV90YWJsZV9zel9iaXRzKTsKLQotCS8qIElmIHRoZSBnbG9iYWwgZmx1c2ggbWlnaHQgbm90IGhhdmUgY2F1Z2h0IHRoaXMgZW50cnksCi0JICogYWRqdXN0IHRoZSBmbHVzaCBwb2ludCBzdWNoIHRoYXQgd2Ugd2lsbCBmbHVzaCBiZWZvcmUKLQkgKiBldmVyIHRyeWluZyB0byByZXVzZSBpdC4KLQkgKi8KLSNkZWZpbmUgYmV0d2VlbihYLFksWikJKCgoWikgLSAoWSkpID49ICgoWCkgLSAoWSkpKQotCWlmIChiZXR3ZWVuKGVudCwgaW9tbXUtPmFsbG9jX2luZm9bY251bV0ubmV4dCwgaW9tbXUtPmFsbG9jX2luZm9bY251bV0uZmx1c2gpKQotCQlpb21tdS0+YWxsb2NfaW5mb1tjbnVtXS5mbHVzaCA9IGVudDsKLSN1bmRlZiBiZXR3ZWVuCi19Ci0KLS8qIFdlIGFsbG9jYXRlIGNvbnNpc3RlbnQgbWFwcGluZ3MgZnJvbSB0aGUgZW5kIG9mIGNsdXN0ZXIgemVyby4gKi8KLXN0YXRpYyBpb3B0ZV90ICphbGxvY19jb25zaXN0ZW50X2NsdXN0ZXIoc3RydWN0IHBjaV9pb21tdSAqaW9tbXUsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKQotewotCWlvcHRlX3QgKmlvcHRlOwotCi0JaW9wdGUgPSBpb21tdS0+cGFnZV90YWJsZSArICgxIDw8IChpb21tdS0+cGFnZV90YWJsZV9zel9iaXRzIC0gUEJNX0xPR0NMVVNURVJTKSk7Ci0Jd2hpbGUgKGlvcHRlID4gaW9tbXUtPnBhZ2VfdGFibGUpIHsKLQkJaW9wdGUtLTsKLQkJaWYgKElPUFRFX0lTX0RVTU1ZKGlvbW11LCBpb3B0ZSkpIHsKLQkJCXVuc2lnbmVkIGxvbmcgdG1wID0gbnBhZ2VzOwotCi0JCQl3aGlsZSAoLS10bXApIHsKLQkJCQlpb3B0ZS0tOwotCQkJCWlmICghSU9QVEVfSVNfRFVNTVkoaW9tbXUsIGlvcHRlKSkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAodG1wID09IDApIHsKLQkJCQl1MzIgZW50cnkgPSAoaW9wdGUgLSBpb21tdS0+cGFnZV90YWJsZSk7Ci0KLQkJCQlpZiAoZW50cnkgPCBpb21tdS0+bG93ZXN0X2NvbnNpc3RlbnRfbWFwKQotCQkJCQlpb21tdS0+bG93ZXN0X2NvbnNpc3RlbnRfbWFwID0gZW50cnk7Ci0JCQkJcmV0dXJuIGlvcHRlOwotCQkJfQotCQl9Ci0JfQotCXJldHVybiBOVUxMOworCXBjaV9hcmVuYV9mcmVlKCZpb21tdS0+YXJlbmEsIGJhc2UgPj4gSU9fUEFHRV9TSElGVCwgbnBhZ2VzKTsKIH0KIAogc3RhdGljIGludCBpb21tdV9hbGxvY19jdHgoc3RydWN0IHBjaV9pb21tdSAqaW9tbXUpCkBAIC0yMzMsNyArMjI0LDcgQEAKIAlzdHJ1Y3QgcGNpZGV2X2Nvb2tpZSAqcGNwOwogCXN0cnVjdCBwY2lfaW9tbXUgKmlvbW11OwogCWlvcHRlX3QgKmlvcHRlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIG9yZGVyLCBmaXJzdF9wYWdlLCBjdHg7CisJdW5zaWduZWQgbG9uZyBmbGFncywgb3JkZXIsIGZpcnN0X3BhZ2U7CiAJdm9pZCAqcmV0OwogCWludCBucGFnZXM7CiAKQEAgLTI1MSw5ICsyNDIsMTAgQEAKIAlpb21tdSA9IHBjcC0+cGJtLT5pb21tdTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+bG9jaywgZmxhZ3MpOwotCWlvcHRlID0gYWxsb2NfY29uc2lzdGVudF9jbHVzdGVyKGlvbW11LCBzaXplID4+IElPX1BBR0VfU0hJRlQpOwotCWlmIChpb3B0ZSA9PSBOVUxMKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5sb2NrLCBmbGFncyk7CisJaW9wdGUgPSBhbGxvY19ucGFnZXMoaW9tbXUsIHNpemUgPj4gSU9fUEFHRV9TSElGVCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKKworCWlmICh1bmxpa2VseShpb3B0ZSA9PSBOVUxMKSkgewogCQlmcmVlX3BhZ2VzKGZpcnN0X3BhZ2UsIG9yZGVyKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtMjYyLDMxICsyNTQsMTUgQEAKIAkJICAgICAgKChpb3B0ZSAtIGlvbW11LT5wYWdlX3RhYmxlKSA8PCBJT19QQUdFX1NISUZUKSk7CiAJcmV0ID0gKHZvaWQgKikgZmlyc3RfcGFnZTsKIAlucGFnZXMgPSBzaXplID4+IElPX1BBR0VfU0hJRlQ7Ci0JY3R4ID0gMDsKLQlpZiAoaW9tbXUtPmlvbW11X2N0eGZsdXNoKQotCQljdHggPSBpb21tdV9hbGxvY19jdHgoaW9tbXUpOwogCWZpcnN0X3BhZ2UgPSBfX3BhKGZpcnN0X3BhZ2UpOwogCXdoaWxlIChucGFnZXMtLSkgewotCQlpb3B0ZV92YWwoKmlvcHRlKSA9IChJT1BURV9DT05TSVNURU5UKGN0eCkgfAorCQlpb3B0ZV92YWwoKmlvcHRlKSA9IChJT1BURV9DT05TSVNURU5UKDBVTCkgfAogCQkJCSAgICAgSU9QVEVfV1JJVEUgfAogCQkJCSAgICAgKGZpcnN0X3BhZ2UgJiBJT1BURV9QQUdFKSk7CiAJCWlvcHRlKys7CiAJCWZpcnN0X3BhZ2UgKz0gSU9fUEFHRV9TSVpFOwogCX0KIAotCXsKLQkJaW50IGk7Ci0JCXUzMiBkYWRkciA9ICpkbWFfYWRkcnA7Ci0KLQkJbnBhZ2VzID0gc2l6ZSA+PiBJT19QQUdFX1NISUZUOwotCQlmb3IgKGkgPSAwOyBpIDwgbnBhZ2VzOyBpKyspIHsKLQkJCXBjaV9pb21tdV93cml0ZShpb21tdS0+aW9tbXVfZmx1c2gsIGRhZGRyKTsKLQkJCWRhZGRyICs9IElPX1BBR0VfU0laRTsKLQkJfQotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5sb2NrLCBmbGFncyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yOTYsNyArMjcyLDcgQEAKIAlzdHJ1Y3QgcGNpZGV2X2Nvb2tpZSAqcGNwOwogCXN0cnVjdCBwY2lfaW9tbXUgKmlvbW11OwogCWlvcHRlX3QgKmlvcHRlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIG9yZGVyLCBucGFnZXMsIGksIGN0eDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBvcmRlciwgbnBhZ2VzOwogCiAJbnBhZ2VzID0gSU9fUEFHRV9BTElHTihzaXplKSA+PiBJT19QQUdFX1NISUZUOwogCXBjcCA9IHBkZXYtPnN5c2RhdGE7CkBAIC0zMDYsNDYgKzI4Miw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKIAotCWlmICgoaW9wdGUgLSBpb21tdS0+cGFnZV90YWJsZSkgPT0KLQkgICAgaW9tbXUtPmxvd2VzdF9jb25zaXN0ZW50X21hcCkgewotCQlpb3B0ZV90ICp3YWxrID0gaW9wdGUgKyBucGFnZXM7Ci0JCWlvcHRlX3QgKmxpbWl0OwotCi0JCWxpbWl0ID0gKGlvbW11LT5wYWdlX3RhYmxlICsKLQkJCSAoMSA8PCAoaW9tbXUtPnBhZ2VfdGFibGVfc3pfYml0cyAtIFBCTV9MT0dDTFVTVEVSUykpKTsKLQkJd2hpbGUgKHdhbGsgPCBsaW1pdCkgewotCQkJaWYgKCFJT1BURV9JU19EVU1NWShpb21tdSwgd2FsaykpCi0JCQkJYnJlYWs7Ci0JCQl3YWxrKys7Ci0JCX0KLQkJaW9tbXUtPmxvd2VzdF9jb25zaXN0ZW50X21hcCA9Ci0JCQkod2FsayAtIGlvbW11LT5wYWdlX3RhYmxlKTsKLQl9Ci0KLQkvKiBEYXRhIGZvciBjb25zaXN0ZW50IG1hcHBpbmdzIGNhbm5vdCBlbnRlciB0aGUgc3RyZWFtaW5nCi0JICogYnVmZmVycywgc28gd2Ugb25seSBuZWVkIHRvIHVwZGF0ZSB0aGUgVFNCLiAgV2UgZmx1c2gKLQkgKiB0aGUgSU9NTVUgaGVyZSBhcyB3ZWxsIHRvIHByZXZlbnQgY29uZmxpY3RzIHdpdGggdGhlCi0JICogc3RyZWFtaW5nIG1hcHBpbmcgZGVmZXJyZWQgdGxiIGZsdXNoIHNjaGVtZS4KLQkgKi8KLQotCWN0eCA9IDA7Ci0JaWYgKGlvbW11LT5pb21tdV9jdHhmbHVzaCkKLQkJY3R4ID0gKGlvcHRlX3ZhbCgqaW9wdGUpICYgSU9QVEVfQ09OVEVYVCkgPj4gNDdVTDsKLQotCWZvciAoaSA9IDA7IGkgPCBucGFnZXM7IGkrKywgaW9wdGUrKykKLQkJaW9wdGVfbWFrZV9kdW1teShpb21tdSwgaW9wdGUpOwotCi0JaWYgKGlvbW11LT5pb21tdV9jdHhmbHVzaCkgewotCQlwY2lfaW9tbXVfd3JpdGUoaW9tbXUtPmlvbW11X2N0eGZsdXNoLCBjdHgpOwotCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBucGFnZXM7IGkrKykgewotCQkJdTMyIGRhZGRyID0gZHZtYSArIChpIDw8IElPX1BBR0VfU0hJRlQpOwotCi0JCQlwY2lfaW9tbXVfd3JpdGUoaW9tbXUtPmlvbW11X2ZsdXNoLCBkYWRkcik7Ci0JCX0KLQl9Ci0KLQlpb21tdV9mcmVlX2N0eChpb21tdSwgY3R4KTsKKwlmcmVlX25wYWdlcyhpb21tdSwgZHZtYSwgbnBhZ2VzKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5sb2NrLCBmbGFncyk7CiAKQEAgLTM3MiwyNSArMzA5LDI3IEBACiAJaW9tbXUgPSBwY3AtPnBibS0+aW9tbXU7CiAJc3RyYnVmID0gJnBjcC0+cGJtLT5zdGM7CiAKLQlpZiAoZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSkKLQkJQlVHKCk7CisJaWYgKHVubGlrZWx5KGRpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpKQorCQlnb3RvIGJhZF9ub19jdHg7CiAKIAlvYWRkciA9ICh1bnNpZ25lZCBsb25nKXB0cjsKIAlucGFnZXMgPSBJT19QQUdFX0FMSUdOKG9hZGRyICsgc3opIC0gKG9hZGRyICYgSU9fUEFHRV9NQVNLKTsKIAlucGFnZXMgPj49IElPX1BBR0VfU0hJRlQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKKwliYXNlID0gYWxsb2NfbnBhZ2VzKGlvbW11LCBucGFnZXMpOworCWN0eCA9IDA7CisJaWYgKGlvbW11LT5pb21tdV9jdHhmbHVzaCkKKwkJY3R4ID0gaW9tbXVfYWxsb2NfY3R4KGlvbW11KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+bG9jaywgZmxhZ3MpOwogCi0JYmFzZSA9IGFsbG9jX3N0cmVhbWluZ19jbHVzdGVyKGlvbW11LCBucGFnZXMpOwotCWlmIChiYXNlID09IE5VTEwpCisJaWYgKHVubGlrZWx5KCFiYXNlKSkKIAkJZ290byBiYWQ7CisKIAlidXNfYWRkciA9IChpb21tdS0+cGFnZV90YWJsZV9tYXBfYmFzZSArCiAJCSAgICAoKGJhc2UgLSBpb21tdS0+cGFnZV90YWJsZSkgPDwgSU9fUEFHRV9TSElGVCkpOwogCXJldCA9IGJ1c19hZGRyIHwgKG9hZGRyICYgfklPX1BBR0VfTUFTSyk7CiAJYmFzZV9wYWRkciA9IF9fcGEob2FkZHIgJiBJT19QQUdFX01BU0spOwotCWN0eCA9IDA7Ci0JaWYgKGlvbW11LT5pb21tdV9jdHhmbHVzaCkKLQkJY3R4ID0gaW9tbXVfYWxsb2NfY3R4KGlvbW11KTsKIAlpZiAoc3RyYnVmLT5zdHJidWZfZW5hYmxlZCkKIAkJaW9wdGVfcHJvdGVjdGlvbiA9IElPUFRFX1NUUkVBTUlORyhjdHgpOwogCWVsc2UKQEAgLTQwMSwxMiArMzQwLDEzIEBACiAJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgaSsrLCBiYXNlKyssIGJhc2VfcGFkZHIgKz0gSU9fUEFHRV9TSVpFKQogCQlpb3B0ZV92YWwoKmJhc2UpID0gaW9wdGVfcHJvdGVjdGlvbiB8IGJhc2VfcGFkZHI7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+bG9jaywgZmxhZ3MpOwotCiAJcmV0dXJuIHJldDsKIAogYmFkOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5sb2NrLCBmbGFncyk7CisJaW9tbXVfZnJlZV9jdHgoaW9tbXUsIGN0eCk7CitiYWRfbm9fY3R4OgorCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCVdBUk5fT04oMSk7CiAJcmV0dXJuIFBDSV9ETUFfRVJST1JfQ09ERTsKIH0KIApAQCAtNDgxLDEwICs0MjEsMTMgQEAKIAlzdHJ1Y3QgcGNpX2lvbW11ICppb21tdTsKIAlzdHJ1Y3QgcGNpX3N0cmJ1ZiAqc3RyYnVmOwogCWlvcHRlX3QgKmJhc2U7Ci0JdW5zaWduZWQgbG9uZyBmbGFncywgbnBhZ2VzLCBjdHg7CisJdW5zaWduZWQgbG9uZyBmbGFncywgbnBhZ2VzLCBjdHgsIGk7CiAKLQlpZiAoZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSkKLQkJQlVHKCk7CisJaWYgKHVubGlrZWx5KGRpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpKSB7CisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlXQVJOX09OKDEpOworCQlyZXR1cm47CisJfQogCiAJcGNwID0gcGRldi0+c3lzZGF0YTsKIAlpb21tdSA9IHBjcC0+cGJtLT5pb21tdTsKQEAgLTUxMCwxMyArNDUzLDE0IEBACiAKIAkvKiBTdGVwIDE6IEtpY2sgZGF0YSBvdXQgb2Ygc3RyZWFtaW5nIGJ1ZmZlcnMgaWYgbmVjZXNzYXJ5LiAqLwogCWlmIChzdHJidWYtPnN0cmJ1Zl9lbmFibGVkKQotCQlwY2lfc3RyYnVmX2ZsdXNoKHN0cmJ1ZiwgaW9tbXUsIGJ1c19hZGRyLCBjdHgsIG5wYWdlcywgZGlyZWN0aW9uKTsKKwkJcGNpX3N0cmJ1Zl9mbHVzaChzdHJidWYsIGlvbW11LCBidXNfYWRkciwgY3R4LAorCQkJCSBucGFnZXMsIGRpcmVjdGlvbik7CiAKLQkvKiBTdGVwIDI6IENsZWFyIG91dCBmaXJzdCBUU0IgZW50cnkuICovCi0JaW9wdGVfbWFrZV9kdW1teShpb21tdSwgYmFzZSk7CisJLyogU3RlcCAyOiBDbGVhciBvdXQgVFNCIGVudHJpZXMuICovCisJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgaSsrKQorCQlpb3B0ZV9tYWtlX2R1bW15KGlvbW11LCBiYXNlICsgaSk7CiAKLQlmcmVlX3N0cmVhbWluZ19jbHVzdGVyKGlvbW11LCBidXNfYWRkciAtIGlvbW11LT5wYWdlX3RhYmxlX21hcF9iYXNlLAotCQkJICAgICAgIG5wYWdlcywgY3R4KTsKKwlmcmVlX25wYWdlcyhpb21tdSwgYnVzX2FkZHIgLSBpb21tdS0+cGFnZV90YWJsZV9tYXBfYmFzZSwgbnBhZ2VzKTsKIAogCWlvbW11X2ZyZWVfY3R4KGlvbW11LCBjdHgpOwogCkBAIC02MjEsNiArNTY1LDggQEAKIAkJCXBjaV9tYXBfc2luZ2xlKHBkZXYsCiAJCQkJICAgICAgIChwYWdlX2FkZHJlc3Moc2dsaXN0LT5wYWdlKSArIHNnbGlzdC0+b2Zmc2V0KSwKIAkJCQkgICAgICAgc2dsaXN0LT5sZW5ndGgsIGRpcmVjdGlvbik7CisJCWlmICh1bmxpa2VseShzZ2xpc3QtPmRtYV9hZGRyZXNzID09IFBDSV9ETUFfRVJST1JfQ09ERSkpCisJCQlyZXR1cm4gMDsKIAkJc2dsaXN0LT5kbWFfbGVuZ3RoID0gc2dsaXN0LT5sZW5ndGg7CiAJCXJldHVybiAxOwogCX0KQEAgLTYyOSwyMSArNTc1LDI5IEBACiAJaW9tbXUgPSBwY3AtPnBibS0+aW9tbXU7CiAJc3RyYnVmID0gJnBjcC0+cGJtLT5zdGM7CiAJCi0JaWYgKGRpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpCi0JCUJVRygpOworCWlmICh1bmxpa2VseShkaXJlY3Rpb24gPT0gUENJX0RNQV9OT05FKSkKKwkJZ290byBiYWRfbm9fY3R4OwogCiAJLyogU3RlcCAxOiBQcmVwYXJlIHNjYXR0ZXIgbGlzdC4gKi8KIAogCW5wYWdlcyA9IHByZXBhcmVfc2coc2dsaXN0LCBuZWxlbXMpOwogCi0JLyogU3RlcCAyOiBBbGxvY2F0ZSBhIGNsdXN0ZXIuICovCisJLyogU3RlcCAyOiBBbGxvY2F0ZSBhIGNsdXN0ZXIgYW5kIGNvbnRleHQsIGlmIG5lY2Vzc2FyeS4gKi8KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+bG9jaywgZmxhZ3MpOwogCi0JYmFzZSA9IGFsbG9jX3N0cmVhbWluZ19jbHVzdGVyKGlvbW11LCBucGFnZXMpOworCWJhc2UgPSBhbGxvY19ucGFnZXMoaW9tbXUsIG5wYWdlcyk7CisJY3R4ID0gMDsKKwlpZiAoaW9tbXUtPmlvbW11X2N0eGZsdXNoKQorCQljdHggPSBpb21tdV9hbGxvY19jdHgoaW9tbXUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKKwogCWlmIChiYXNlID09IE5VTEwpCiAJCWdvdG8gYmFkOwotCWRtYV9iYXNlID0gaW9tbXUtPnBhZ2VfdGFibGVfbWFwX2Jhc2UgKyAoKGJhc2UgLSBpb21tdS0+cGFnZV90YWJsZSkgPDwgSU9fUEFHRV9TSElGVCk7CisKKwlkbWFfYmFzZSA9IGlvbW11LT5wYWdlX3RhYmxlX21hcF9iYXNlICsKKwkJKChiYXNlIC0gaW9tbXUtPnBhZ2VfdGFibGUpIDw8IElPX1BBR0VfU0hJRlQpOwogCiAJLyogU3RlcCAzOiBOb3JtYWxpemUgRE1BIGFkZHJlc3Nlcy4gKi8KIAl1c2VkID0gbmVsZW1zOwpAQCAtNjU2LDMwICs2MTAsMjggQEAKIAl9CiAJdXNlZCA9IG5lbGVtcyAtIHVzZWQ7CiAKLQkvKiBTdGVwIDQ6IENob29zZSBhIGNvbnRleHQgaWYgbmVjZXNzYXJ5LiAqLwotCWN0eCA9IDA7Ci0JaWYgKGlvbW11LT5pb21tdV9jdHhmbHVzaCkKLQkJY3R4ID0gaW9tbXVfYWxsb2NfY3R4KGlvbW11KTsKLQotCS8qIFN0ZXAgNTogQ3JlYXRlIHRoZSBtYXBwaW5ncy4gKi8KKwkvKiBTdGVwIDQ6IENyZWF0ZSB0aGUgbWFwcGluZ3MuICovCiAJaWYgKHN0cmJ1Zi0+c3RyYnVmX2VuYWJsZWQpCiAJCWlvcHRlX3Byb3RlY3Rpb24gPSBJT1BURV9TVFJFQU1JTkcoY3R4KTsKIAllbHNlCiAJCWlvcHRlX3Byb3RlY3Rpb24gPSBJT1BURV9DT05TSVNURU5UKGN0eCk7CiAJaWYgKGRpcmVjdGlvbiAhPSBQQ0lfRE1BX1RPREVWSUNFKQogCQlpb3B0ZV9wcm90ZWN0aW9uIHw9IElPUFRFX1dSSVRFOwotCWZpbGxfc2cgKGJhc2UsIHNnbGlzdCwgdXNlZCwgbmVsZW1zLCBpb3B0ZV9wcm90ZWN0aW9uKTsKKworCWZpbGxfc2coYmFzZSwgc2dsaXN0LCB1c2VkLCBuZWxlbXMsIGlvcHRlX3Byb3RlY3Rpb24pOworCiAjaWZkZWYgVkVSSUZZX1NHCiAJdmVyaWZ5X3NnbGlzdChzZ2xpc3QsIG5lbGVtcywgYmFzZSwgbnBhZ2VzKTsKICNlbmRpZgogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKLQogCXJldHVybiB1c2VkOwogCiBiYWQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gUENJX0RNQV9FUlJPUl9DT0RFOworCWlvbW11X2ZyZWVfY3R4KGlvbW11LCBjdHgpOworYmFkX25vX2N0eDoKKwlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQlXQVJOX09OKDEpOworCXJldHVybiAwOwogfQogCiAvKiBVbm1hcCBhIHNldCBvZiBzdHJlYW1pbmcgbW9kZSBETUEgdHJhbnNsYXRpb25zLiAqLwpAQCAtNjkyLDggKzY0NCwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGN0eCwgaSwgbnBhZ2VzOwogCXUzMiBidXNfYWRkcjsKIAotCWlmIChkaXJlY3Rpb24gPT0gUENJX0RNQV9OT05FKQotCQlCVUcoKTsKKwlpZiAodW5saWtlbHkoZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSkpIHsKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCVdBUk5fT04oMSk7CisJfQogCiAJcGNwID0gcGRldi0+c3lzZGF0YTsKIAlpb21tdSA9IHBjcC0+cGJtLT5pb21tdTsKQEAgLTcwNSw3ICs2NTksOCBAQAogCQlpZiAoc2dsaXN0W2ldLmRtYV9sZW5ndGggPT0gMCkKIAkJCWJyZWFrOwogCWktLTsKLQlucGFnZXMgPSAoSU9fUEFHRV9BTElHTihzZ2xpc3RbaV0uZG1hX2FkZHJlc3MgKyBzZ2xpc3RbaV0uZG1hX2xlbmd0aCkgLSBidXNfYWRkcikgPj4gSU9fUEFHRV9TSElGVDsKKwlucGFnZXMgPSAoSU9fUEFHRV9BTElHTihzZ2xpc3RbaV0uZG1hX2FkZHJlc3MgKyBzZ2xpc3RbaV0uZG1hX2xlbmd0aCkgLQorCQkgIGJ1c19hZGRyKSA+PiBJT19QQUdFX1NISUZUOwogCiAJYmFzZSA9IGlvbW11LT5wYWdlX3RhYmxlICsKIAkJKChidXNfYWRkciAtIGlvbW11LT5wYWdlX3RhYmxlX21hcF9iYXNlKSA+PiBJT19QQUdFX1NISUZUKTsKQEAgLTcyNiwxMSArNjgxLDExIEBACiAJaWYgKHN0cmJ1Zi0+c3RyYnVmX2VuYWJsZWQpCiAJCXBjaV9zdHJidWZfZmx1c2goc3RyYnVmLCBpb21tdSwgYnVzX2FkZHIsIGN0eCwgbnBhZ2VzLCBkaXJlY3Rpb24pOwogCi0JLyogU3RlcCAyOiBDbGVhciBvdXQgZmlyc3QgVFNCIGVudHJ5LiAqLwotCWlvcHRlX21ha2VfZHVtbXkoaW9tbXUsIGJhc2UpOworCS8qIFN0ZXAgMjogQ2xlYXIgb3V0IHRoZSBUU0IgZW50cmllcy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnBhZ2VzOyBpKyspCisJCWlvcHRlX21ha2VfZHVtbXkoaW9tbXUsIGJhc2UgKyBpKTsKIAotCWZyZWVfc3RyZWFtaW5nX2NsdXN0ZXIoaW9tbXUsIGJ1c19hZGRyIC0gaW9tbXUtPnBhZ2VfdGFibGVfbWFwX2Jhc2UsCi0JCQkgICAgICAgbnBhZ2VzLCBjdHgpOworCWZyZWVfbnBhZ2VzKGlvbW11LCBidXNfYWRkciAtIGlvbW11LT5wYWdlX3RhYmxlX21hcF9iYXNlLCBucGFnZXMpOwogCiAJaW9tbXVfZnJlZV9jdHgoaW9tbXUsIGN0eCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3BzeWNoby5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfcHN5Y2hvLmMKaW5kZXggNmVkMWVmMi4uYzAzZWQ1ZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfcHN5Y2hvLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfcHN5Y2hvLmMKQEAgLTEyMDcsMTMgKzEyMDcsOSBAQAogc3RhdGljIHZvaWQgcHN5Y2hvX2lvbW11X2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm8gKnApCiB7CiAJc3RydWN0IHBjaV9pb21tdSAqaW9tbXUgPSBwLT5wYm1fQS5pb21tdTsKLQl1bnNpZ25lZCBsb25nIHRzYmJhc2UsIGk7CisJdW5zaWduZWQgbG9uZyBpOwogCXU2NCBjb250cm9sOwogCi0JLyogU2V0dXAgaW5pdGlhbCBzb2Z0d2FyZSBJT01NVSBzdGF0ZS4gKi8KLQlzcGluX2xvY2tfaW5pdCgmaW9tbXUtPmxvY2spOwotCWlvbW11LT5jdHhfbG93ZXN0X2ZyZWUgPSAxOwotCiAJLyogUmVnaXN0ZXIgYWRkcmVzc2VzLiAqLwogCWlvbW11LT5pb21tdV9jb250cm9sICA9IHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFBTWUNIT19JT01NVV9DT05UUk9MOwogCWlvbW11LT5pb21tdV90c2JiYXNlICA9IHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFBTWUNIT19JT01NVV9UU0JCQVNFOwpAQCAtMTI0MCw0MCArMTIzNiwxMCBAQAogCS8qIExlYXZlIGRpYWcgbW9kZSBlbmFibGVkIGZvciBmdWxsLWZsdXNoaW5nIGRvbmUKIAkgKiBpbiBwY2lfaW9tbXUuYwogCSAqLworCXBjaV9pb21tdV90YWJsZV9pbml0KGlvbW11LCBJT19UU0JfU0laRSwgMHhjMDAwMDAwMCwgMHhmZmZmZmZmZik7CiAKLQlpb21tdS0+ZHVtbXlfcGFnZSA9IF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgMCk7Ci0JaWYgKCFpb21tdS0+ZHVtbXlfcGFnZSkgewotCQlwcm9tX3ByaW50ZigiUFNZQ0hPX0lPTU1VOiBFcnJvciwgZ2ZwKGR1bW15X3BhZ2UpIGZhaWxlZC5cbiIpOwotCQlwcm9tX2hhbHQoKTsKLQl9Ci0JbWVtc2V0KCh2b2lkICopaW9tbXUtPmR1bW15X3BhZ2UsIDAsIFBBR0VfU0laRSk7Ci0JaW9tbXUtPmR1bW15X3BhZ2VfcGEgPSAodW5zaWduZWQgbG9uZykgX19wYShpb21tdS0+ZHVtbXlfcGFnZSk7Ci0KLQkvKiBVc2luZyBhc3N1bWVkIHBhZ2Ugc2l6ZSA4SyB3aXRoIDEyOEsgZW50cmllcyB3ZSBuZWVkIDFNQiBpb21tdSBwYWdlCi0JICogdGFibGUgKDEyOEsgaW9wdGVzICogOCBieXRlcyBwZXIgaW9wdGUpLiAgVGhpcyBpcwotCSAqIHBhZ2Ugb3JkZXIgNyBvbiBVbHRyYVNwYXJjLgotCSAqLwotCXRzYmJhc2UgPSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIGdldF9vcmRlcihJT19UU0JfU0laRSkpOwotCWlmICghdHNiYmFzZSkgewotCQlwcm9tX3ByaW50ZigiUFNZQ0hPX0lPTU1VOiBFcnJvciwgZ2ZwKHRzYikgZmFpbGVkLlxuIik7Ci0JCXByb21faGFsdCgpOwotCX0KLQlpb21tdS0+cGFnZV90YWJsZSA9IChpb3B0ZV90ICopdHNiYmFzZTsKLQlpb21tdS0+cGFnZV90YWJsZV9zel9iaXRzID0gMTc7Ci0JaW9tbXUtPnBhZ2VfdGFibGVfbWFwX2Jhc2UgPSAweGMwMDAwMDAwOwotCWlvbW11LT5kbWFfYWRkcl9tYXNrID0gMHhmZmZmZmZmZjsKLQlwY2lfaW9tbXVfdGFibGVfaW5pdChpb21tdSwgSU9fVFNCX1NJWkUpOwotCi0JLyogV2Ugc3RhcnQgd2l0aCBubyBjb25zaXN0ZW50IG1hcHBpbmdzLiAqLwotCWlvbW11LT5sb3dlc3RfY29uc2lzdGVudF9tYXAgPQotCQkxIDw8IChpb21tdS0+cGFnZV90YWJsZV9zel9iaXRzIC0gUEJNX0xPR0NMVVNURVJTKTsKLQotCWZvciAoaSA9IDA7IGkgPCBQQk1fTkNMVVNURVJTOyBpKyspIHsKLQkJaW9tbXUtPmFsbG9jX2luZm9baV0uZmx1c2ggPSAwOwotCQlpb21tdS0+YWxsb2NfaW5mb1tpXS5uZXh0ID0gMDsKLQl9Ci0KLQlwc3ljaG9fd3JpdGUocC0+cGJtX0EuY29udHJvbGxlcl9yZWdzICsgUFNZQ0hPX0lPTU1VX1RTQkJBU0UsIF9fcGEodHNiYmFzZSkpOworCXBzeWNob193cml0ZShwLT5wYm1fQS5jb250cm9sbGVyX3JlZ3MgKyBQU1lDSE9fSU9NTVVfVFNCQkFTRSwKKwkJICAgICBfX3BhKGlvbW11LT5wYWdlX3RhYmxlKSk7CiAKIAljb250cm9sID0gcHN5Y2hvX3JlYWQocC0+cGJtX0EuY29udHJvbGxlcl9yZWdzICsgUFNZQ0hPX0lPTU1VX0NPTlRST0wpOwogCWNvbnRyb2wgJj0gfihQU1lDSE9fSU9NTVVfQ1RSTF9UU0JTWiB8IFBTWUNIT19JT01NVV9DVFJMX1RCV1NaKTsKQEAgLTEyODEsNyArMTI0Nyw3IEBACiAJcHN5Y2hvX3dyaXRlKHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFBTWUNIT19JT01NVV9DT05UUk9MLCBjb250cm9sKTsKIAogCS8qIElmIG5lY2Vzc2FyeSwgaG9vayB1cyB1cCBmb3Igc3RhcmZpcmUgSVJRIHRyYW5zbGF0aW9ucy4gKi8KLQlpZih0aGlzX2lzX3N0YXJmaXJlKQorCWlmICh0aGlzX2lzX3N0YXJmaXJlKQogCQlwLT5zdGFyZmlyZV9jb29raWUgPSBzdGFyZmlyZV9ob29rdXAocC0+cGJtX0EucG9ydGlkKTsKIAllbHNlCiAJCXAtPnN0YXJmaXJlX2Nvb2tpZSA9IE5VTEw7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zYWJyZS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc2FicmUuYwppbmRleCAwZWU2YmQ1Li5kYThlMTM2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zYWJyZS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3NhYnJlLmMKQEAgLTEyNjcsMTMgKzEyNjcsOSBAQAogCQkJICAgICB1MzIgZG1hX21hc2spCiB7CiAJc3RydWN0IHBjaV9pb21tdSAqaW9tbXUgPSBwLT5wYm1fQS5pb21tdTsKLQl1bnNpZ25lZCBsb25nIHRzYmJhc2UsIGksIG9yZGVyOworCXVuc2lnbmVkIGxvbmcgaTsKIAl1NjQgY29udHJvbDsKIAotCS8qIFNldHVwIGluaXRpYWwgc29mdHdhcmUgSU9NTVUgc3RhdGUuICovCi0Jc3Bpbl9sb2NrX2luaXQoJmlvbW11LT5sb2NrKTsKLQlpb21tdS0+Y3R4X2xvd2VzdF9mcmVlID0gMTsKLQogCS8qIFJlZ2lzdGVyIGFkZHJlc3Nlcy4gKi8KIAlpb21tdS0+aW9tbXVfY29udHJvbCAgPSBwLT5wYm1fQS5jb250cm9sbGVyX3JlZ3MgKyBTQUJSRV9JT01NVV9DT05UUk9MOwogCWlvbW11LT5pb21tdV90c2JiYXNlICA9IHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFNBQlJFX0lPTU1VX1RTQkJBU0U7CkBAIC0xMjk1LDI2ICsxMjkxLDEwIEBACiAJLyogTGVhdmUgZGlhZyBtb2RlIGVuYWJsZWQgZm9yIGZ1bGwtZmx1c2hpbmcgZG9uZQogCSAqIGluIHBjaV9pb21tdS5jCiAJICovCisJcGNpX2lvbW11X3RhYmxlX2luaXQoaW9tbXUsIHRzYnNpemUgKiAxMDI0ICogOCwgZHZtYV9vZmZzZXQsIGRtYV9tYXNrKTsKIAotCWlvbW11LT5kdW1teV9wYWdlID0gX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCAwKTsKLQlpZiAoIWlvbW11LT5kdW1teV9wYWdlKSB7Ci0JCXByb21fcHJpbnRmKCJQU1lDSE9fSU9NTVU6IEVycm9yLCBnZnAoZHVtbXlfcGFnZSkgZmFpbGVkLlxuIik7Ci0JCXByb21faGFsdCgpOwotCX0KLQltZW1zZXQoKHZvaWQgKilpb21tdS0+ZHVtbXlfcGFnZSwgMCwgUEFHRV9TSVpFKTsKLQlpb21tdS0+ZHVtbXlfcGFnZV9wYSA9ICh1bnNpZ25lZCBsb25nKSBfX3BhKGlvbW11LT5kdW1teV9wYWdlKTsKLQotCXRzYmJhc2UgPSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIG9yZGVyID0gZ2V0X29yZGVyKHRzYnNpemUgKiAxMDI0ICogOCkpOwotCWlmICghdHNiYmFzZSkgewotCQlwcm9tX3ByaW50ZigiU0FCUkVfSU9NTVU6IEVycm9yLCBnZnAodHNiKSBmYWlsZWQuXG4iKTsKLQkJcHJvbV9oYWx0KCk7Ci0JfQotCWlvbW11LT5wYWdlX3RhYmxlID0gKGlvcHRlX3QgKil0c2JiYXNlOwotCWlvbW11LT5wYWdlX3RhYmxlX21hcF9iYXNlID0gZHZtYV9vZmZzZXQ7Ci0JaW9tbXUtPmRtYV9hZGRyX21hc2sgPSBkbWFfbWFzazsKLQlwY2lfaW9tbXVfdGFibGVfaW5pdChpb21tdSwgUEFHRV9TSVpFIDw8IG9yZGVyKTsKLQotCXNhYnJlX3dyaXRlKHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFNBQlJFX0lPTU1VX1RTQkJBU0UsIF9fcGEodHNiYmFzZSkpOworCXNhYnJlX3dyaXRlKHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFNBQlJFX0lPTU1VX1RTQkJBU0UsCisJCSAgICBfX3BhKGlvbW11LT5wYWdlX3RhYmxlKSk7CiAKIAljb250cm9sID0gc2FicmVfcmVhZChwLT5wYm1fQS5jb250cm9sbGVyX3JlZ3MgKyBTQUJSRV9JT01NVV9DT05UUk9MKTsKIAljb250cm9sICY9IH4oU0FCUkVfSU9NTVVDVFJMX1RTQlNaIHwgU0FCUkVfSU9NTVVDVFJMX1RCV1NaKTsKQEAgLTEzMjIsMTEgKzEzMDIsOSBAQAogCXN3aXRjaCh0c2JzaXplKSB7CiAJY2FzZSA2NDoKIAkJY29udHJvbCB8PSBTQUJSRV9JT01NVV9UU0JTWl82NEs7Ci0JCWlvbW11LT5wYWdlX3RhYmxlX3N6X2JpdHMgPSAxNjsKIAkJYnJlYWs7CiAJY2FzZSAxMjg6CiAJCWNvbnRyb2wgfD0gU0FCUkVfSU9NTVVfVFNCU1pfMTI4SzsKLQkJaW9tbXUtPnBhZ2VfdGFibGVfc3pfYml0cyA9IDE3OwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcm9tX3ByaW50ZigiaW9tbXVfaW5pdDogSWxsZWdhbCBUU0Igc2l6ZSAlZFxuIiwgdHNic2l6ZSk7CkBAIC0xMzM0LDE1ICsxMzEyLDYgQEAKIAkJYnJlYWs7CiAJfQogCXNhYnJlX3dyaXRlKHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFNBQlJFX0lPTU1VX0NPTlRST0wsIGNvbnRyb2wpOwotCi0JLyogV2Ugc3RhcnQgd2l0aCBubyBjb25zaXN0ZW50IG1hcHBpbmdzLiAqLwotCWlvbW11LT5sb3dlc3RfY29uc2lzdGVudF9tYXAgPQotCQkxIDw8IChpb21tdS0+cGFnZV90YWJsZV9zel9iaXRzIC0gUEJNX0xPR0NMVVNURVJTKTsKLQotCWZvciAoaSA9IDA7IGkgPCBQQk1fTkNMVVNURVJTOyBpKyspIHsKLQkJaW9tbXUtPmFsbG9jX2luZm9baV0uZmx1c2ggPSAwOwotCQlpb21tdS0+YWxsb2NfaW5mb1tpXS5uZXh0ID0gMDsKLQl9CiB9CiAKIHN0YXRpYyB2b2lkIHBibV9yZWdpc3Rlcl90b3BsZXZlbF9yZXNvdXJjZXMoc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm8gKnAsCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zY2hpem8uYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3NjaGl6by5jCmluZGV4IDMzMTM4MmUuLmQ4YzRlMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3NjaGl6by5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3NjaGl6by5jCkBAIC0zMzAsNyArMzMwLDcgQEAKIHN0YXRpYyB2b2lkIHRvbWF0aWxsb193c3luY19oYW5kbGVyKHN0cnVjdCBpbm9fYnVja2V0ICpidWNrZXQsIHZvaWQgKl9hcmcxLCB2b2lkICpfYXJnMikKIHsKIAl1bnNpZ25lZCBsb25nIHN5bmNfcmVnID0gKHVuc2lnbmVkIGxvbmcpIF9hcmcyOwotCXU2NCBtYXNrID0gMSA8PCAoX19pcnFfaW5vKF9faXJxKGJ1Y2tldCkpICYgSU1BUF9JTk8pOworCXU2NCBtYXNrID0gMVVMIDw8IChfX2lycV9pbm8oX19pcnEoYnVja2V0KSkgJiBJTUFQX0lOTyk7CiAJdTY0IHZhbDsKIAlpbnQgbGltaXQ7CiAKQEAgLTE3NjUsNyArMTc2NSw3IEBACiBzdGF0aWMgdm9pZCBzY2hpem9fcGJtX2lvbW11X2luaXQoc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtKQogewogCXN0cnVjdCBwY2lfaW9tbXUgKmlvbW11ID0gcGJtLT5pb21tdTsKLQl1bnNpZ25lZCBsb25nIHRzYmJhc2UsIGksIHRhZ2Jhc2UsIGRhdGFiYXNlLCBvcmRlcjsKKwl1bnNpZ25lZCBsb25nIGksIHRhZ2Jhc2UsIGRhdGFiYXNlOwogCXUzMiB2ZG1hWzJdLCBkbWFfbWFzazsKIAl1NjQgY29udHJvbDsKIAlpbnQgZXJyLCB0c2JzaXplOwpAQCAtMTgwMCwxMCArMTgwMCw2IEBACiAJCQlwcm9tX2hhbHQoKTsKIAl9OwogCi0JLyogU2V0dXAgaW5pdGlhbCBzb2Z0d2FyZSBJT01NVSBzdGF0ZS4gKi8KLQlzcGluX2xvY2tfaW5pdCgmaW9tbXUtPmxvY2spOwotCWlvbW11LT5jdHhfbG93ZXN0X2ZyZWUgPSAxOwotCiAJLyogUmVnaXN0ZXIgYWRkcmVzc2VzLCBTQ0hJWk8gaGFzIGlvbW11IGN0eCBmbHVzaGluZy4gKi8KIAlpb21tdS0+aW9tbXVfY29udHJvbCAgPSBwYm0tPnBibV9yZWdzICsgU0NISVpPX0lPTU1VX0NPTlRST0w7CiAJaW9tbXUtPmlvbW11X3RzYmJhc2UgID0gcGJtLT5wYm1fcmVncyArIFNDSElaT19JT01NVV9UU0JCQVNFOwpAQCAtMTgzMiw1NiArMTgyOCw5IEBACiAJLyogTGVhdmUgZGlhZyBtb2RlIGVuYWJsZWQgZm9yIGZ1bGwtZmx1c2hpbmcgZG9uZQogCSAqIGluIHBjaV9pb21tdS5jCiAJICovCisJcGNpX2lvbW11X3RhYmxlX2luaXQoaW9tbXUsIHRzYnNpemUgKiA4ICogMTAyNCwgdmRtYVswXSwgZG1hX21hc2spOwogCi0JaW9tbXUtPmR1bW15X3BhZ2UgPSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIDApOwotCWlmICghaW9tbXUtPmR1bW15X3BhZ2UpIHsKLQkJcHJvbV9wcmludGYoIlBTWUNIT19JT01NVTogRXJyb3IsIGdmcChkdW1teV9wYWdlKSBmYWlsZWQuXG4iKTsKLQkJcHJvbV9oYWx0KCk7Ci0JfQotCW1lbXNldCgodm9pZCAqKWlvbW11LT5kdW1teV9wYWdlLCAwLCBQQUdFX1NJWkUpOwotCWlvbW11LT5kdW1teV9wYWdlX3BhID0gKHVuc2lnbmVkIGxvbmcpIF9fcGEoaW9tbXUtPmR1bW15X3BhZ2UpOwotCi0JLyogVXNpbmcgYXNzdW1lZCBwYWdlIHNpemUgOEsgd2l0aCAxMjhLIGVudHJpZXMgd2UgbmVlZCAxTUIgaW9tbXUgcGFnZQotCSAqIHRhYmxlICgxMjhLIGlvcHRlcyAqIDggYnl0ZXMgcGVyIGlvcHRlKS4gIFRoaXMgaXMKLQkgKiBwYWdlIG9yZGVyIDcgb24gVWx0cmFTcGFyYy4KLQkgKi8KLQlvcmRlciA9IGdldF9vcmRlcih0c2JzaXplICogOCAqIDEwMjQpOwotCXRzYmJhc2UgPSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIG9yZGVyKTsKLQlpZiAoIXRzYmJhc2UpIHsKLQkJcHJvbV9wcmludGYoIiVzOiBFcnJvciwgZ2ZwKHRzYikgZmFpbGVkLlxuIiwgcGJtLT5uYW1lKTsKLQkJcHJvbV9oYWx0KCk7Ci0JfQotCi0JaW9tbXUtPnBhZ2VfdGFibGUgPSAoaW9wdGVfdCAqKXRzYmJhc2U7Ci0JaW9tbXUtPnBhZ2VfdGFibGVfbWFwX2Jhc2UgPSB2ZG1hWzBdOwotCWlvbW11LT5kbWFfYWRkcl9tYXNrID0gZG1hX21hc2s7Ci0JcGNpX2lvbW11X3RhYmxlX2luaXQoaW9tbXUsIFBBR0VfU0laRSA8PCBvcmRlcik7Ci0KLQlzd2l0Y2ggKHRzYnNpemUpIHsKLQljYXNlIDY0OgotCQlpb21tdS0+cGFnZV90YWJsZV9zel9iaXRzID0gMTY7Ci0JCWJyZWFrOwotCi0JY2FzZSAxMjg6Ci0JCWlvbW11LT5wYWdlX3RhYmxlX3N6X2JpdHMgPSAxNzsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlwcm9tX3ByaW50ZigiaW9tbXVfaW5pdDogSWxsZWdhbCBUU0Igc2l6ZSAlZFxuIiwgdHNic2l6ZSk7Ci0JCXByb21faGFsdCgpOwotCQlicmVhazsKLQl9OwotCi0JLyogV2Ugc3RhcnQgd2l0aCBubyBjb25zaXN0ZW50IG1hcHBpbmdzLiAqLwotCWlvbW11LT5sb3dlc3RfY29uc2lzdGVudF9tYXAgPQotCQkxIDw8IChpb21tdS0+cGFnZV90YWJsZV9zel9iaXRzIC0gUEJNX0xPR0NMVVNURVJTKTsKLQotCWZvciAoaSA9IDA7IGkgPCBQQk1fTkNMVVNURVJTOyBpKyspIHsKLQkJaW9tbXUtPmFsbG9jX2luZm9baV0uZmx1c2ggPSAwOwotCQlpb21tdS0+YWxsb2NfaW5mb1tpXS5uZXh0ID0gMDsKLQl9Ci0KLQlzY2hpem9fd3JpdGUoaW9tbXUtPmlvbW11X3RzYmJhc2UsIF9fcGEodHNiYmFzZSkpOworCXNjaGl6b193cml0ZShpb21tdS0+aW9tbXVfdHNiYmFzZSwgX19wYShpb21tdS0+cGFnZV90YWJsZSkpOwogCiAJY29udHJvbCA9IHNjaGl6b19yZWFkKGlvbW11LT5pb21tdV9jb250cm9sKTsKIAljb250cm9sICY9IH4oU0NISVpPX0lPTU1VX0NUUkxfVFNCU1ogfCBTQ0hJWk9fSU9NTVVfQ1RSTF9UQldTWik7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3Bvd2VyLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3Bvd2VyLmMKaW5kZXggOTQ2Y2VlMC4uOWU4MzYyZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wb3dlci5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcG93ZXIuYwpAQCAtMTcsNiArMTcsNyBAQAogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9lYnVzLmg+CisjaW5jbHVkZSA8YXNtL2lzYS5oPgogI2luY2x1ZGUgPGFzbS9hdXhpby5oPgogCiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CkBAIC0xMDAsNDYgKzEwMSw4MyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBoYXNfYnV0dG9uX2ludGVycnVwdChzdHJ1Y3QgbGludXhfZWJ1c19kZXZpY2UgKmVkZXYpCitzdGF0aWMgaW50IF9faW5pdCBoYXNfYnV0dG9uX2ludGVycnVwdCh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgcHJvbV9ub2RlKQogewotCWlmIChlZGV2LT5pcnFzWzBdID09IFBDSV9JUlFfTk9ORSkKKwlpZiAoaXJxID09IFBDSV9JUlFfTk9ORSkKIAkJcmV0dXJuIDA7Ci0JaWYgKCFwcm9tX25vZGVfaGFzX3Byb3BlcnR5KGVkZXYtPnByb21fbm9kZSwgImJ1dHRvbiIpKQorCWlmICghcHJvbV9ub2RlX2hhc19wcm9wZXJ0eShwcm9tX25vZGUsICJidXR0b24iKSkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gMTsKIH0KIAotdm9pZCBfX2luaXQgcG93ZXJfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgcG93ZXJfcHJvYmVfZWJ1cyhzdHJ1Y3QgcmVzb3VyY2UgKipyZXNwLCB1bnNpZ25lZCBpbnQgKmlycV9wLCBpbnQgKnByb21fbm9kZV9wKQogewogCXN0cnVjdCBsaW51eF9lYnVzICplYnVzOwogCXN0cnVjdCBsaW51eF9lYnVzX2RldmljZSAqZWRldjsKKworCWZvcl9lYWNoX2VidXMoZWJ1cykgeworCQlmb3JfZWFjaF9lYnVzZGV2KGVkZXYsIGVidXMpIHsKKwkJCWlmICghc3RyY21wKGVkZXYtPnByb21fbmFtZSwgInBvd2VyIikpIHsKKwkJCQkqcmVzcCA9ICZlZGV2LT5yZXNvdXJjZVswXTsKKwkJCQkqaXJxX3AgPSBlZGV2LT5pcnFzWzBdOworCQkJCSpwcm9tX25vZGVfcCA9IGVkZXYtPnByb21fbm9kZTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGludCBfX2luaXQgcG93ZXJfcHJvYmVfaXNhKHN0cnVjdCByZXNvdXJjZSAqKnJlc3AsIHVuc2lnbmVkIGludCAqaXJxX3AsIGludCAqcHJvbV9ub2RlX3ApCit7CisJc3RydWN0IHNwYXJjX2lzYV9icmlkZ2UgKmlzYV9idXM7CisJc3RydWN0IHNwYXJjX2lzYV9kZXZpY2UgKmlzYV9kZXY7CisKKwlmb3JfZWFjaF9pc2EoaXNhX2J1cykgeworCQlmb3JfZWFjaF9pc2FkZXYoaXNhX2RldiwgaXNhX2J1cykgeworCQkJaWYgKCFzdHJjbXAoaXNhX2Rldi0+cHJvbV9uYW1lLCAicG93ZXIiKSkgeworCQkJCSpyZXNwID0gJmlzYV9kZXYtPnJlc291cmNlOworCQkJCSppcnFfcCA9IGlzYV9kZXYtPmlycTsKKwkJCQkqcHJvbV9ub2RlX3AgPSBpc2FfZGV2LT5wcm9tX25vZGU7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3ZvaWQgX19pbml0IHBvd2VyX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IE5VTEw7CisJdW5zaWduZWQgaW50IGlycTsKKwlpbnQgcHJvbV9ub2RlOwogCXN0YXRpYyBpbnQgaW52b2tlZDsKIAogCWlmIChpbnZva2VkKQogCQlyZXR1cm47CiAJaW52b2tlZCA9IDE7CiAKLQlmb3JfZWFjaF9lYnVzKGVidXMpIHsKLQkJZm9yX2VhY2hfZWJ1c2RldihlZGV2LCBlYnVzKSB7Ci0JCQlpZiAoIXN0cmNtcChlZGV2LT5wcm9tX25hbWUsICJwb3dlciIpKQotCQkJCWdvdG8gZm91bmQ7Ci0JCX0KLQl9CisJaWYgKCFwb3dlcl9wcm9iZV9lYnVzKCZyZXMsICZpcnEsICZwcm9tX25vZGUpKQorCQlnb3RvIGZvdW5kOworCisJaWYgKCFwb3dlcl9wcm9iZV9pc2EoJnJlcywgJmlycSwgJnByb21fbm9kZSkpCisJCWdvdG8gZm91bmQ7CisKIAlyZXR1cm47CiAKIGZvdW5kOgotCXBvd2VyX3JlZyA9IGlvcmVtYXAoZWRldi0+cmVzb3VyY2VbMF0uc3RhcnQsIDB4NCk7CisJcG93ZXJfcmVnID0gaW9yZW1hcChyZXMtPnN0YXJ0LCAweDQpOwogCXByaW50aygicG93ZXI6IENvbnRyb2wgcmVnIGF0ICVwIC4uLiAiLCBwb3dlcl9yZWcpOwogCXBvd2Vyb2ZmX21ldGhvZCA9IG1hY2hpbmVfaGFsdDsgIC8qIGFibGUgdG8gdXNlIHRoZSBzdGFuZGFyZCBoYWx0ICovCi0JaWYgKGhhc19idXR0b25faW50ZXJydXB0KGVkZXYpKSB7CisJaWYgKGhhc19idXR0b25faW50ZXJydXB0KGlycSwgcHJvbV9ub2RlKSkgewogCQlpZiAoa2VybmVsX3RocmVhZChwb3dlcmQsIE5VTEwsIENMT05FX0ZTKSA8IDApIHsKIAkJCXByaW50aygiRmFpbGVkIHRvIHN0YXJ0IHBvd2VyIGRhZW1vbi5cbiIpOwogCQkJcmV0dXJuOwogCQl9CiAJCXByaW50aygicG93ZXJkIHJ1bm5pbmcuXG4iKTsKIAotCQlpZiAocmVxdWVzdF9pcnEoZWRldi0+aXJxc1swXSwKKwkJaWYgKHJlcXVlc3RfaXJxKGlycSwKIAkJCQlwb3dlcl9oYW5kbGVyLCBTQV9TSElSUSwgInBvd2VyIiwgTlVMTCkgPCAwKQogCQkJcHJpbnRrKCJwb3dlcjogRXJyb3IsIGNhbm5vdCByZWdpc3RlciBJUlEgaGFuZGxlci5cbiIpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wdHJhY2UuYwppbmRleCAyM2FkODM5Li43NzRlY2JiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHRyYWNlLmMKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlIDxhc20vcHNyY29tcGF0Lmg+CiAjaW5jbHVkZSA8YXNtL3Zpc2FzbS5oPgogI2luY2x1ZGUgPGFzbS9zcGl0ZmlyZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2NwdWRhdGEuaD4KIAogLyogUmV0dXJuaW5nIGZyb20gcHRyYWNlIGlzIGEgYml0IHRyaWNreSBiZWNhdXNlIHRoZSBzeXNjYWxsIHJldHVybgogICogbG93IGxldmVsIGNvZGUgYXNzdW1lcyBhbnkgdmFsdWUgcmV0dXJuZWQgd2hpY2ggaXMgbmVnYXRpdmUgYW5kCkBAIC0xMjgsMjAgKzEzMCwyNCBAQAogCSAqIGlzIG1hcHBlZCB0byBpbiB0aGUgdXNlcidzIGFkZHJlc3Mgc3BhY2UsIHdlIGNhbiBza2lwIHRoZQogCSAqIEQtY2FjaGUgZmx1c2guCiAJICovCi0JaWYgKCh1YWRkciBeIGthZGRyKSAmICgxVUwgPDwgMTMpKSB7CisJaWYgKCh1YWRkciBeICh1bnNpZ25lZCBsb25nKSBrYWRkcikgJiAoMVVMIDw8IDEzKSkgewogCQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gX19wYShrYWRkcik7CiAJCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBsZW47CisJCXVuc2lnbmVkIGxvbmcgZGNhY2hlX2xpbmVfc2l6ZTsKKworCQlkY2FjaGVfbGluZV9zaXplID0gbG9jYWxfY3B1X2RhdGEoKS5kY2FjaGVfbGluZV9zaXplOwogCiAJCWlmICh0bGJfdHlwZSA9PSBzcGl0ZmlyZSkgewotCQkJZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCArPSAzMikKLQkJCQlzcGl0ZmlyZV9wdXRfZGNhY2hlX3RhZyh2YSAmIDB4M2ZlMCwgMHgwKTsKKwkJCWZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQgKz0gZGNhY2hlX2xpbmVfc2l6ZSkKKwkJCQlzcGl0ZmlyZV9wdXRfZGNhY2hlX3RhZyhzdGFydCAmIDB4M2ZlMCwgMHgwKTsKIAkJfSBlbHNlIHsKLQkJCWZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQgKz0gMzIpCisJCQlzdGFydCAmPSB+KGRjYWNoZV9saW5lX3NpemUgLSAxKTsKKwkJCWZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQgKz0gZGNhY2hlX2xpbmVfc2l6ZSkKIAkJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkJCQkJInN0eGEgJSVnMCwgWyUwXSAlMVxuXHQiCiAJCQkJCSJtZW1iYXIgI1N5bmMiCiAJCQkJCTogLyogbm8gb3V0cHV0cyAqLwotCQkJCQk6ICJyIiAodmEpLAorCQkJCQk6ICJyIiAoc3RhcnQpLAogCQkJCQkiaSIgKEFTSV9EQ0FDSEVfSU5WQUxJREFURSkpOwogCQl9CiAJfQpAQCAtMTQ5LDggKzE1NSwxMSBAQAogCWlmICh3cml0ZSAmJiB0bGJfdHlwZSA9PSBzcGl0ZmlyZSkgewogCQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpIGthZGRyOwogCQl1bnNpZ25lZCBsb25nIGVuZCA9IHN0YXJ0ICsgbGVuOworCQl1bnNpZ25lZCBsb25nIGljYWNoZV9saW5lX3NpemU7CiAKLQkJZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCArPSAzMikKKwkJaWNhY2hlX2xpbmVfc2l6ZSA9IGxvY2FsX2NwdV9kYXRhKCkuaWNhY2hlX2xpbmVfc2l6ZTsKKworCQlmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0ICs9IGljYWNoZV9saW5lX3NpemUpCiAJCQlmbHVzaGkoc3RhcnQpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcnRyYXAuUyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcnRyYXAuUwppbmRleCBmYWZkMjI3Li4wOTBkY2NhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3J0cmFwLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9ydHJhcC5TCkBAIC0yNTYsOSArMjU2LDggQEAKIAkJYnJueixwbgkJCSVsMywga2Vybl9ydHQKIAkJIG1vdgkJCVBSSU1BUllfQ09OVEVYVCwgJWw3CiAJCWxkeGEJCQlbJWw3ICsgJWw3XSBBU0lfRE1NVSwgJWwwCi1jcGx1c19ydHJhcF9pbnNuXzE6Ci0JCXNldGhpCQkJJWhpKDApLCAlbDEKLQkJc2xseAkJCSVsMSwgMzIsICVsMQorCQlzZXRoaQkJCSVoaShzcGFyYzY0X2tlcm5fcHJpX251Y19iaXRzKSwgJWwxCisJCWxkeAkJCVslbDEgKyAlbG8oc3BhcmM2NF9rZXJuX3ByaV9udWNfYml0cyldLCAlbDEKIAkJb3IJCQklbDAsICVsMSwgJWwwCiAJCXN0eGEJCQklbDAsIFslbDddIEFTSV9ETU1VCiAJCWZsdXNoCQkJJWc2CkBAIC0zMTMsNTMgKzMxMiwzNiBAQAogCQl3cgkJCSVnMSwgRlBSU19GRUYsICVmcHJzCiAJCWxkeAkJCVslbzEgKyAlbzVdLCAlZzEKIAkJYWRkCQkJJWc2LCBUSV9YRlNSLCAlbzEKLQkJbWVtYmFyCQkJI1N0b3JlTG9hZCB8ICNMb2FkTG9hZAogCQlzbGwJCQklbzAsIDgsICVvMgogCQlhZGQJCQklZzYsIFRJX0ZQUkVHUywgJW8zCiAJCWJyeixwbgkJCSVsNiwgMWYKIAkJIGFkZAkJCSVnNiwgVElfRlBSRUdTKzB4NDAsICVvNAogCisJCW1lbWJhcgkJCSNTeW5jCiAJCWxkZGEJCQlbJW8zICsgJW8yXSBBU0lfQkxLX1AsICVmMAogCQlsZGRhCQkJWyVvNCArICVvMl0gQVNJX0JMS19QLCAlZjE2CisJCW1lbWJhcgkJCSNTeW5jCiAxOgkJYW5kY2MJCQklbDIsIEZQUlNfRFUsICVnMAogCQliZSxwbgkJCSVpY2MsIDFmCiAJCSB3cgkJCSVnMSwgMCwgJWdzcgogCQlhZGQJCQklbzIsIDB4ODAsICVvMgorCQltZW1iYXIJCQkjU3luYwogCQlsZGRhCQkJWyVvMyArICVvMl0gQVNJX0JMS19QLCAlZjMyCiAJCWxkZGEJCQlbJW80ICsgJW8yXSBBU0lfQkxLX1AsICVmNDgKLQogMToJCW1lbWJhcgkJCSNTeW5jCiAJCWxkeAkJCVslbzEgKyAlbzVdLCAlZnNyCiAyOgkJc3RiCQkJJWw1LCBbJWc2ICsgVElfRlBERVBUSF0KIAkJYmEscHQJCQkleGNjLCBydF9jb250aW51ZQogCQkgbm9wCiA1OgkJd3IJCQklZzAsIEZQUlNfRkVGLCAlZnBycwotCQltZW1iYXIJCQkjU3RvcmVMb2FkIHwgI0xvYWRMb2FkCiAJCXNsbAkJCSVvMCwgOCwgJW8yCiAKIAkJYWRkCQkJJWc2LCBUSV9GUFJFR1MrMHg4MCwgJW8zCiAJCWFkZAkJCSVnNiwgVElfRlBSRUdTKzB4YzAsICVvNAorCQltZW1iYXIJCQkjU3luYwogCQlsZGRhCQkJWyVvMyArICVvMl0gQVNJX0JMS19QLCAlZjMyCiAJCWxkZGEJCQlbJW80ICsgJW8yXSBBU0lfQkxLX1AsICVmNDgKIAkJbWVtYmFyCQkJI1N5bmMKIAkJd3IJCQklZzAsIEZQUlNfRFUsICVmcHJzCiAJCWJhLHB0CQkJJXhjYywgcnRfY29udGludWUKIAkJIHN0YgkJCSVsNSwgWyVnNiArIFRJX0ZQREVQVEhdCi0KLWNwbHVzX3JpbnNuXzE6Ci0JCXNldGhpCQkJJXVoaShDVFhfQ0hFRVRBSF9QTFVTX05VQyksICVsMQotCi0JCS5nbG9ibAkJCWNoZWV0YWhfcGx1c19wYXRjaF9ydHJhcAotY2hlZXRhaF9wbHVzX3BhdGNoX3J0cmFwOgotCQkvKiBXZSBjb25maWd1cmUgdGhlIGRUTEI1MTJfMCBmb3IgNE1CIHBhZ2VzIGFuZCB0aGUKLQkJICogZFRMQjUxMl8xIGZvciA4SyBwYWdlcyB3aGVuIGluIGNvbnRleHQgemVyby4KLQkJICovCi0JCXNldGhpCQkJJWhpKGNwbHVzX3JpbnNuXzEpLCAlbzAKLQkJc2V0aGkJCQklaGkoY3BsdXNfcnRyYXBfaW5zbl8xKSwgJW8yCi0JCWxkdXcJCQlbJW8wICsgJWxvKGNwbHVzX3JpbnNuXzEpXSwgJW8xCi0JCW9yCQkJJW8yLCAlbG8oY3BsdXNfcnRyYXBfaW5zbl8xKSwgJW8yCi0JCXN0dwkJCSVvMSwgWyVvMl0KLQkJZmx1c2gJCQklbzIKLQotCQlyZXRsCi0JCSBub3AKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2V0dXAuYwppbmRleCBkZGJlZDMzLi5jMWYzNDIzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zZXR1cC5jCkBAIC0xODcsMTcgKzE4NywxMyBAQAogCQl9CiAKIAkJaWYgKCh2YSA+PSBLRVJOQkFTRSkgJiYgKHZhIDwgKEtFUk5CQVNFICsgKDQgKiAxMDI0ICogMTAyNCkpKSkgewotCQkJdW5zaWduZWQgbG9uZyBrZXJuZWxfcGN0eCA9IDA7Ci0KLQkJCWlmICh0bGJfdHlwZSA9PSBjaGVldGFoX3BsdXMpCi0JCQkJa2VybmVsX3BjdHggfD0gKENUWF9DSEVFVEFIX1BMVVNfTlVDIHwKLQkJCQkJCUNUWF9DSEVFVEFIX1BMVVNfQ1RYMCk7CisJCQlleHRlcm4gdW5zaWduZWQgbG9uZyBzcGFyYzY0X2tlcm5fcHJpX2NvbnRleHQ7CiAKIAkJCS8qIFNwaXRmaXJlIEVycmF0YSAjMzIgd29ya2Fyb3VuZCAqLwogCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEJJTAsIFslMV0gJTJcblx0IgogCQkJCQkgICAgICJmbHVzaAklJWc2IgogCQkJCQkgICAgIDogLyogTm8gb3V0cHV0cyAqLwotCQkJCQkgICAgIDogInIiIChrZXJuZWxfcGN0eCksCisJCQkJCSAgICAgOiAiciIgKHNwYXJjNjRfa2Vybl9wcmlfY29udGV4dCksCiAJCQkJCSAgICAgICAiciIgKFBSSU1BUllfQ09OVEVYVCksCiAJCQkJCSAgICAgICAiaSIgKEFTSV9ETU1VKSk7CiAKQEAgLTQ2NCw4ICs0NjAsNiBAQAogCX0KIH0KIAotZXh0ZXJuIGludCBwcm9tX3Byb2JlX21lbW9yeSh2b2lkKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CiBleHRlcm4gdm9pZCBwYW5pY19zZXR1cChjaGFyICosIGludCAqKTsKIAogZXh0ZXJuIHVuc2lnbmVkIHNob3J0IHJvb3RfZmxhZ3M7CkBAIC00OTIsMTMgKzQ4Niw4IEBACiAJCSAgICInIGxpbnV4LS5zb2Z0MiB0byAuc29mdDIiKTsKIH0KIAotZXh0ZXJuIHZvaWQgcGFnaW5nX2luaXQodm9pZCk7Ci0KIHZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcCkKIHsKLQl1bnNpZ25lZCBsb25nIGhpZ2hlc3RfcGFkZHI7Ci0JaW50IGk7Ci0KIAkvKiBJbml0aWFsaXplIFBST00gY29uc29sZSBhbmQgY29tbWFuZCBsaW5lLiAqLwogCSpjbWRsaW5lX3AgPSBwcm9tX2dldGJvb3RhcmdzKCk7CiAJc3RyY3B5KHNhdmVkX2NvbW1hbmRfbGluZSwgKmNtZGxpbmVfcCk7CkBAIC01MTcsNDAgKzUwNiw2IEBACiAJYm9vdF9mbGFnc19pbml0KCpjbWRsaW5lX3ApOwogCiAJaWRwcm9tX2luaXQoKTsKLQkodm9pZCkgcHJvbV9wcm9iZV9tZW1vcnkoKTsKLQotCS8qIEluIHBhZ2luZ19pbml0KCkgd2UgdGlwIG9mZiB0aGlzIHZhbHVlIHRvIHNlZSBpZiB3ZSBuZWVkCi0JICogdG8gY2hhbmdlIGluaXRfbW0ucGdkIHRvIHBvaW50IHRvIHRoZSByZWFsIGFsaWFzIG1hcHBpbmcuCi0JICovCi0JcGh5c19iYXNlID0gMHhmZmZmZmZmZmZmZmZmZmZmVUw7Ci0JaGlnaGVzdF9wYWRkciA9IDBVTDsKLQlmb3IgKGkgPSAwOyBzcF9iYW5rc1tpXS5udW1fYnl0ZXMgIT0gMDsgaSsrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgdG9wOwotCi0JCWlmIChzcF9iYW5rc1tpXS5iYXNlX2FkZHIgPCBwaHlzX2Jhc2UpCi0JCQlwaHlzX2Jhc2UgPSBzcF9iYW5rc1tpXS5iYXNlX2FkZHI7Ci0JCXRvcCA9IHNwX2JhbmtzW2ldLmJhc2VfYWRkciArCi0JCQlzcF9iYW5rc1tpXS5udW1fYnl0ZXM7Ci0JCWlmIChoaWdoZXN0X3BhZGRyIDwgdG9wKQotCQkJaGlnaGVzdF9wYWRkciA9IHRvcDsKLQl9Ci0JcGZuX2Jhc2UgPSBwaHlzX2Jhc2UgPj4gUEFHRV9TSElGVDsKLQotCXN3aXRjaCAodGxiX3R5cGUpIHsKLQlkZWZhdWx0OgotCWNhc2Ugc3BpdGZpcmU6Ci0JCWtlcm5fYmFzZSA9IHNwaXRmaXJlX2dldF9pdGxiX2RhdGEoc3BhcmM2NF9oaWdoZXN0X2xvY2tlZF90bGJlbnQoKSk7Ci0JCWtlcm5fYmFzZSAmPSBfUEFHRV9QQUREUl9TRjsKLQkJYnJlYWs7Ci0KLQljYXNlIGNoZWV0YWg6Ci0JY2FzZSBjaGVldGFoX3BsdXM6Ci0JCWtlcm5fYmFzZSA9IGNoZWV0YWhfZ2V0X2xpdGxiX2RhdGEoc3BhcmM2NF9oaWdoZXN0X2xvY2tlZF90bGJlbnQoKSk7Ci0JCWtlcm5fYmFzZSAmPSBfUEFHRV9QQUREUjsKLQkJYnJlYWs7Ci0JfTsKLQotCWtlcm5fc2l6ZSA9ICh1bnNpZ25lZCBsb25nKSZfZW5kIC0gKHVuc2lnbmVkIGxvbmcpS0VSTkJBU0U7CiAKIAlpZiAoIXJvb3RfZmxhZ3MpCiAJCXJvb3RfbW91bnRmbGFncyAmPSB+TVNfUkRPTkxZOwpAQCAtNjI1LDYgKzU4MCw5IEBACiBleHRlcm4gdm9pZCBzbXBfYm9nbyhzdHJ1Y3Qgc2VxX2ZpbGUgKik7CiBleHRlcm4gdm9pZCBtbXVfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKik7CiAKK3Vuc2lnbmVkIGludCBkY2FjaGVfcGFyaXR5X3RsMV9vY2N1cnJlZDsKK3Vuc2lnbmVkIGludCBpY2FjaGVfcGFyaXR5X3RsMV9vY2N1cnJlZDsKKwogc3RhdGljIGludCBzaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpfX3VudXNlZCkKIHsKIAlzZXFfcHJpbnRmKG0sIApAQCAtNjM1LDYgKzU5Myw4IEBACiAJCSAgICJ0eXBlXHRcdDogc3VuNHVcbiIKIAkJICAgIm5jcHVzIHByb2JlZFx0OiAlbGRcbiIKIAkJICAgIm5jcHVzIGFjdGl2ZVx0OiAlbGRcbiIKKwkJICAgIkQkIHBhcml0eSB0bDFcdDogJXVcbiIKKwkJICAgIkkkIHBhcml0eSB0bDFcdDogJXVcbiIKICNpZm5kZWYgQ09ORklHX1NNUAogCQkgICAiQ3B1MEJvZ29cdDogJWx1LiUwMmx1XG4iCiAJCSAgICJDcHUwQ2xrVGNrXHQ6ICUwMTZseFxuIgpAQCAtNjQ3LDcgKzYwNyw5IEBACiAJCSAgIChwcm9tX3ByZXYgPj4gOCkgJiAweGZmLAogCQkgICBwcm9tX3ByZXYgJiAweGZmLAogCQkgICAobG9uZyludW1fcG9zc2libGVfY3B1cygpLAotCQkgICAobG9uZyludW1fb25saW5lX2NwdXMoKQorCQkgICAobG9uZyludW1fb25saW5lX2NwdXMoKSwKKwkJICAgZGNhY2hlX3Bhcml0eV90bDFfb2NjdXJyZWQsCisJCSAgIGljYWNoZV9wYXJpdHlfdGwxX29jY3VycmVkCiAjaWZuZGVmIENPTkZJR19TTVAKIAkJICAgLCBjcHVfZGF0YSgwKS51ZGVsYXlfdmFsLyg1MDAwMDAvSFopLAogCQkgICAoY3B1X2RhdGEoMCkudWRlbGF5X3ZhbC8oNTAwMC9IWikpICUgMTAwLApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc21wLmMKaW5kZXggYjRmYzZhNS4uYjEzN2ZkNiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jCkBAIC05Myw2ICs5MywyNyBAQAogCWNwdV9kYXRhKGlkKS5wdGVfY2FjaGVbMV0JCT0gTlVMTDsKIAljcHVfZGF0YShpZCkucGdkX2NhY2hlCQkJPSBOVUxMOwogCWNwdV9kYXRhKGlkKS5pZGxlX3ZvbHVtZQkJPSAxOworCisJY3B1X2RhdGEoaWQpLmRjYWNoZV9zaXplID0gcHJvbV9nZXRpbnRkZWZhdWx0KGNwdV9ub2RlLCAiZGNhY2hlLXNpemUiLAorCQkJCQkJICAgICAgMTYgKiAxMDI0KTsKKwljcHVfZGF0YShpZCkuZGNhY2hlX2xpbmVfc2l6ZSA9CisJCXByb21fZ2V0aW50ZGVmYXVsdChjcHVfbm9kZSwgImRjYWNoZS1saW5lLXNpemUiLCAzMik7CisJY3B1X2RhdGEoaWQpLmljYWNoZV9zaXplID0gcHJvbV9nZXRpbnRkZWZhdWx0KGNwdV9ub2RlLCAiaWNhY2hlLXNpemUiLAorCQkJCQkJICAgICAgMTYgKiAxMDI0KTsKKwljcHVfZGF0YShpZCkuaWNhY2hlX2xpbmVfc2l6ZSA9CisJCXByb21fZ2V0aW50ZGVmYXVsdChjcHVfbm9kZSwgImljYWNoZS1saW5lLXNpemUiLCAzMik7CisJY3B1X2RhdGEoaWQpLmVjYWNoZV9zaXplID0gcHJvbV9nZXRpbnRkZWZhdWx0KGNwdV9ub2RlLCAiZWNhY2hlLXNpemUiLAorCQkJCQkJICAgICAgNCAqIDEwMjQgKiAxMDI0KTsKKwljcHVfZGF0YShpZCkuZWNhY2hlX2xpbmVfc2l6ZSA9CisJCXByb21fZ2V0aW50ZGVmYXVsdChjcHVfbm9kZSwgImVjYWNoZS1saW5lLXNpemUiLCA2NCk7CisJcHJpbnRrKCJDUFVbJWRdOiBDYWNoZXMgIgorCSAgICAgICAiRFtzeiglZCk6bGluZV9zeiglZCldICIKKwkgICAgICAgIklbc3ooJWQpOmxpbmVfc3ooJWQpXSAiCisJICAgICAgICJFW3N6KCVkKTpsaW5lX3N6KCVkKV1cbiIsCisJICAgICAgIGlkLAorCSAgICAgICBjcHVfZGF0YShpZCkuZGNhY2hlX3NpemUsIGNwdV9kYXRhKGlkKS5kY2FjaGVfbGluZV9zaXplLAorCSAgICAgICBjcHVfZGF0YShpZCkuaWNhY2hlX3NpemUsIGNwdV9kYXRhKGlkKS5pY2FjaGVfbGluZV9zaXplLAorCSAgICAgICBjcHVfZGF0YShpZCkuZWNhY2hlX3NpemUsIGNwdV9kYXRhKGlkKS5lY2FjaGVfbGluZV9zaXplKTsKIH0KIAogc3RhdGljIHZvaWQgc21wX3NldHVwX3BlcmNwdV90aW1lcih2b2lkKTsKQEAgLTk4MCwxMyArMTAwMSw2IEBACiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgeGNhbGxfcHJvbXN0b3A7Ci0KLXZvaWQgc21wX3Byb21zdG9wX290aGVycyh2b2lkKQotewotCXNtcF9jcm9zc19jYWxsKCZ4Y2FsbF9wcm9tc3RvcCwgMCwgMCwgMCk7Ci19Ci0KICNkZWZpbmUgcHJvZl9tdWx0aXBsaWVyKF9fY3B1KQkJY3B1X2RhdGEoX19jcHUpLm11bHRpcGxpZXIKICNkZWZpbmUgcHJvZl9jb3VudGVyKF9fY3B1KQkJY3B1X2RhdGEoX19jcHUpLmNvdW50ZXIKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zcGFyYzY0X2tzeW1zLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NwYXJjNjRfa3N5bXMuYwppbmRleCBjYmI1ZTU5Li5mYjdhNTM3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3NwYXJjNjRfa3N5bXMuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NwYXJjNjRfa3N5bXMuYwpAQCAtMTYzLDkgKzE2Myw2IEBACiBFWFBPUlRfU1lNQk9MKGF0b21pYzY0X2FkZF9yZXQpOwogRVhQT1JUX1NZTUJPTChhdG9taWM2NF9zdWIpOwogRVhQT1JUX1NZTUJPTChhdG9taWM2NF9zdWJfcmV0KTsKLSNpZmRlZiBDT05GSUdfU01QCi1FWFBPUlRfU1lNQk9MKF9hdG9taWNfZGVjX2FuZF9sb2NrKTsKLSNlbmRpZgogCiAvKiBBdG9taWMgYml0IG9wZXJhdGlvbnMuICovCiBFWFBPUlRfU1lNQk9MKHRlc3RfYW5kX3NldF9iaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXMzMi5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXMzMi5TCmluZGV4IDVmOWU0ZmEuLjljZDI3MmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzMzIuUworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5czMyLlMKQEAgLTE1NywxNzMgKzE1NywxOTkgQEAKIAlvcgkJJWcyLCAlbG8oX19zb2NrZXRjYWxsX3RhYmxlX2JlZ2luKSwgJWcyCiAJam1wbAkJJWcyICsgJW8wLCAlZzAKIAkgbm9wCitkb19laW52YWw6CisJcmV0bAorCSBtb3YJCS1FSU5WQUwsICVvMAogCi0JLyogRWFjaCBlbnRyeSBpcyBleGFjdGx5IDMyIGJ5dGVzLiAqLwogCS5hbGlnbgkJMzIKIF9fc29ja2V0Y2FsbF90YWJsZV9iZWdpbjoKKworCS8qIEVhY2ggZW50cnkgaXMgZXhhY3RseSAzMiBieXRlcy4gKi8KIGRvX3N5c19zb2NrZXQ6IC8qIHN5c19zb2NrZXQoaW50LCBpbnQsIGludCkgKi8KLQlsZHN3YQkJWyVvMSArIDB4MF0gJWFzaSwgJW8wCisxOglsZHN3YQkJWyVvMSArIDB4MF0gJWFzaSwgJW8wCiAJc2V0aGkJCSVoaShzeXNfc29ja2V0KSwgJWcxCi0JbGRzd2EJCVslbzEgKyAweDhdICVhc2ksICVvMgorMjoJbGRzd2EJCVslbzEgKyAweDhdICVhc2ksICVvMgogCWptcGwJCSVnMSArICVsbyhzeXNfc29ja2V0KSwgJWcwCi0JIGxkc3dhCQlbJW8xICsgMHg0XSAlYXNpLCAlbzEKKzM6CSBsZHN3YQkJWyVvMSArIDB4NF0gJWFzaSwgJW8xCiAJbm9wCiAJbm9wCiAJbm9wCiBkb19zeXNfYmluZDogLyogc3lzX2JpbmQoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgKiwgaW50KSAqLwotCWxkc3dhCQlbJW8xICsgMHgwXSAlYXNpLCAlbzAKKzQ6CWxkc3dhCQlbJW8xICsgMHgwXSAlYXNpLCAlbzAKIAlzZXRoaQkJJWhpKHN5c19iaW5kKSwgJWcxCi0JbGRzd2EJCVslbzEgKyAweDhdICVhc2ksICVvMgorNToJbGRzd2EJCVslbzEgKyAweDhdICVhc2ksICVvMgogCWptcGwJCSVnMSArICVsbyhzeXNfYmluZCksICVnMAotCSBsZHV3YQkJWyVvMSArIDB4NF0gJWFzaSwgJW8xCis2OgkgbGR1d2EJCVslbzEgKyAweDRdICVhc2ksICVvMQogCW5vcAogCW5vcAogCW5vcAogZG9fc3lzX2Nvbm5lY3Q6IC8qIHN5c19jb25uZWN0KGludCwgc3RydWN0IHNvY2thZGRyICosIGludCkgKi8KLQlsZHN3YQkJWyVvMSArIDB4MF0gJWFzaSwgJW8wCis3OglsZHN3YQkJWyVvMSArIDB4MF0gJWFzaSwgJW8wCiAJc2V0aGkJCSVoaShzeXNfY29ubmVjdCksICVnMQotCWxkc3dhCQlbJW8xICsgMHg4XSAlYXNpLCAlbzIKKzg6CWxkc3dhCQlbJW8xICsgMHg4XSAlYXNpLCAlbzIKIAlqbXBsCQklZzEgKyAlbG8oc3lzX2Nvbm5lY3QpLCAlZzAKLQkgbGR1d2EJCVslbzEgKyAweDRdICVhc2ksICVvMQorOToJIGxkdXdhCQlbJW8xICsgMHg0XSAlYXNpLCAlbzEKIAlub3AKIAlub3AKIAlub3AKIGRvX3N5c19saXN0ZW46IC8qIHN5c19saXN0ZW4oaW50LCBpbnQpICovCi0JbGRzd2EJCVslbzEgKyAweDBdICVhc2ksICVvMAorMTA6CWxkc3dhCQlbJW8xICsgMHgwXSAlYXNpLCAlbzAKIAlzZXRoaQkJJWhpKHN5c19saXN0ZW4pLCAlZzEKIAlqbXBsCQklZzEgKyAlbG8oc3lzX2xpc3RlbiksICVnMAotCSBsZHN3YQkJWyVvMSArIDB4NF0gJWFzaSwgJW8xCisxMToJIGxkc3dhCQlbJW8xICsgMHg0XSAlYXNpLCAlbzEKIAlub3AKIAlub3AKIAlub3AKIAlub3AKIGRvX3N5c19hY2NlcHQ6IC8qIHN5c19hY2NlcHQoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgaW50ICopICovCi0JbGRzd2EJCVslbzEgKyAweDBdICVhc2ksICVvMAorMTI6CWxkc3dhCQlbJW8xICsgMHgwXSAlYXNpLCAlbzAKIAlzZXRoaQkJJWhpKHN5c19hY2NlcHQpLCAlZzEKLQlsZHV3YQkJWyVvMSArIDB4OF0gJWFzaSwgJW8yCisxMzoJbGR1d2EJCVslbzEgKyAweDhdICVhc2ksICVvMgogCWptcGwJCSVnMSArICVsbyhzeXNfYWNjZXB0KSwgJWcwCi0JIGxkdXdhCQlbJW8xICsgMHg0XSAlYXNpLCAlbzEKKzE0OgkgbGR1d2EJCVslbzEgKyAweDRdICVhc2ksICVvMQogCW5vcAogCW5vcAogCW5vcAogZG9fc3lzX2dldHNvY2tuYW1lOiAvKiBzeXNfZ2V0c29ja25hbWUoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgaW50ICopICovCi0JbGRzd2EJCVslbzEgKyAweDBdICVhc2ksICVvMAorMTU6CWxkc3dhCQlbJW8xICsgMHgwXSAlYXNpLCAlbzAKIAlzZXRoaQkJJWhpKHN5c19nZXRzb2NrbmFtZSksICVnMQotCWxkdXdhCQlbJW8xICsgMHg4XSAlYXNpLCAlbzIKKzE2OglsZHV3YQkJWyVvMSArIDB4OF0gJWFzaSwgJW8yCiAJam1wbAkJJWcxICsgJWxvKHN5c19nZXRzb2NrbmFtZSksICVnMAotCSBsZHV3YQkJWyVvMSArIDB4NF0gJWFzaSwgJW8xCisxNzoJIGxkdXdhCQlbJW8xICsgMHg0XSAlYXNpLCAlbzEKIAlub3AKIAlub3AKIAlub3AKIGRvX3N5c19nZXRwZWVybmFtZTogLyogc3lzX2dldHBlZXJuYW1lKGludCwgc3RydWN0IHNvY2thZGRyICosIGludCAqKSAqLwotCWxkc3dhCQlbJW8xICsgMHgwXSAlYXNpLCAlbzAKKzE4OglsZHN3YQkJWyVvMSArIDB4MF0gJWFzaSwgJW8wCiAJc2V0aGkJCSVoaShzeXNfZ2V0cGVlcm5hbWUpLCAlZzEKLQlsZHV3YQkJWyVvMSArIDB4OF0gJWFzaSwgJW8yCisxOToJbGR1d2EJCVslbzEgKyAweDhdICVhc2ksICVvMgogCWptcGwJCSVnMSArICVsbyhzeXNfZ2V0cGVlcm5hbWUpLCAlZzAKLQkgbGR1d2EJCVslbzEgKyAweDRdICVhc2ksICVvMQorMjA6CSBsZHV3YQkJWyVvMSArIDB4NF0gJWFzaSwgJW8xCiAJbm9wCiAJbm9wCiAJbm9wCiBkb19zeXNfc29ja2V0cGFpcjogLyogc3lzX3NvY2tldHBhaXIoaW50LCBpbnQsIGludCwgaW50ICopICovCi0JbGRzd2EJCVslbzEgKyAweDBdICVhc2ksICVvMAorMjE6CWxkc3dhCQlbJW8xICsgMHgwXSAlYXNpLCAlbzAKIAlzZXRoaQkJJWhpKHN5c19zb2NrZXRwYWlyKSwgJWcxCi0JbGRzd2EJCVslbzEgKyAweDhdICVhc2ksICVvMgotCWxkdXdhCQlbJW8xICsgMHhjXSAlYXNpLCAlbzMKKzIyOglsZHN3YQkJWyVvMSArIDB4OF0gJWFzaSwgJW8yCisyMzoJbGR1d2EJCVslbzEgKyAweGNdICVhc2ksICVvMwogCWptcGwJCSVnMSArICVsbyhzeXNfc29ja2V0cGFpciksICVnMAotCSBsZHN3YQkJWyVvMSArIDB4NF0gJWFzaSwgJW8xCisyNDoJIGxkc3dhCQlbJW8xICsgMHg0XSAlYXNpLCAlbzEKIAlub3AKIAlub3AKIGRvX3N5c19zZW5kOiAvKiBzeXNfc2VuZChpbnQsIHZvaWQgKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQpICovCi0JbGRzd2EJCVslbzEgKyAweDBdICVhc2ksICVvMAorMjU6CWxkc3dhCQlbJW8xICsgMHgwXSAlYXNpLCAlbzAKIAlzZXRoaQkJJWhpKHN5c19zZW5kKSwgJWcxCi0JbGR1d2EJCVslbzEgKyAweDhdICVhc2ksICVvMgotCWxkdXdhCQlbJW8xICsgMHhjXSAlYXNpLCAlbzMKKzI2OglsZHV3YQkJWyVvMSArIDB4OF0gJWFzaSwgJW8yCisyNzoJbGR1d2EJCVslbzEgKyAweGNdICVhc2ksICVvMwogCWptcGwJCSVnMSArICVsbyhzeXNfc2VuZCksICVnMAotCSBsZHV3YQkJWyVvMSArIDB4NF0gJWFzaSwgJW8xCisyODoJIGxkdXdhCQlbJW8xICsgMHg0XSAlYXNpLCAlbzEKIAlub3AKIAlub3AKIGRvX3N5c19yZWN2OiAvKiBzeXNfcmVjdihpbnQsIHZvaWQgKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQpICovCi0JbGRzd2EJCVslbzEgKyAweDBdICVhc2ksICVvMAorMjk6CWxkc3dhCQlbJW8xICsgMHgwXSAlYXNpLCAlbzAKIAlzZXRoaQkJJWhpKHN5c19yZWN2KSwgJWcxCi0JbGR1d2EJCVslbzEgKyAweDhdICVhc2ksICVvMgotCWxkdXdhCQlbJW8xICsgMHhjXSAlYXNpLCAlbzMKKzMwOglsZHV3YQkJWyVvMSArIDB4OF0gJWFzaSwgJW8yCiszMToJbGR1d2EJCVslbzEgKyAweGNdICVhc2ksICVvMwogCWptcGwJCSVnMSArICVsbyhzeXNfcmVjdiksICVnMAotCSBsZHV3YQkJWyVvMSArIDB4NF0gJWFzaSwgJW8xCiszMjoJIGxkdXdhCQlbJW8xICsgMHg0XSAlYXNpLCAlbzEKIAlub3AKIAlub3AKIGRvX3N5c19zZW5kdG86IC8qIHN5c19zZW5kdG8oaW50LCB1MzIsIGNvbXBhdF9zaXplX3QsIHVuc2lnbmVkIGludCwgdTMyLCBpbnQpICovCi0JbGRzd2EJCVslbzEgKyAweDBdICVhc2ksICVvMAorMzM6CWxkc3dhCQlbJW8xICsgMHgwXSAlYXNpLCAlbzAKIAlzZXRoaQkJJWhpKHN5c19zZW5kdG8pLCAlZzEKLQlsZHV3YQkJWyVvMSArIDB4OF0gJWFzaSwgJW8yCi0JbGR1d2EJCVslbzEgKyAweGNdICVhc2ksICVvMwotCWxkdXdhCQlbJW8xICsgMHgxMF0gJWFzaSwgJW80Ci0JbGRzd2EJCVslbzEgKyAweDE0XSAlYXNpLCAlbzUKKzM0OglsZHV3YQkJWyVvMSArIDB4OF0gJWFzaSwgJW8yCiszNToJbGR1d2EJCVslbzEgKyAweGNdICVhc2ksICVvMworMzY6CWxkdXdhCQlbJW8xICsgMHgxMF0gJWFzaSwgJW80CiszNzoJbGRzd2EJCVslbzEgKyAweDE0XSAlYXNpLCAlbzUKIAlqbXBsCQklZzEgKyAlbG8oc3lzX3NlbmR0byksICVnMAotCSBsZHV3YQkJWyVvMSArIDB4NF0gJWFzaSwgJW8xCiszODoJIGxkdXdhCQlbJW8xICsgMHg0XSAlYXNpLCAlbzEKIGRvX3N5c19yZWN2ZnJvbTogLyogc3lzX3JlY3Zmcm9tKGludCwgdTMyLCBjb21wYXRfc2l6ZV90LCB1bnNpZ25lZCBpbnQsIHUzMiwgdTMyKSAqLwotCWxkc3dhCQlbJW8xICsgMHgwXSAlYXNpLCAlbzAKKzM5OglsZHN3YQkJWyVvMSArIDB4MF0gJWFzaSwgJW8wCiAJc2V0aGkJCSVoaShzeXNfcmVjdmZyb20pLCAlZzEKLQlsZHV3YQkJWyVvMSArIDB4OF0gJWFzaSwgJW8yCi0JbGR1d2EJCVslbzEgKyAweGNdICVhc2ksICVvMwotCWxkdXdhCQlbJW8xICsgMHgxMF0gJWFzaSwgJW80Ci0JbGR1d2EJCVslbzEgKyAweDE0XSAlYXNpLCAlbzUKKzQwOglsZHV3YQkJWyVvMSArIDB4OF0gJWFzaSwgJW8yCis0MToJbGR1d2EJCVslbzEgKyAweGNdICVhc2ksICVvMworNDI6CWxkdXdhCQlbJW8xICsgMHgxMF0gJWFzaSwgJW80Cis0MzoJbGR1d2EJCVslbzEgKyAweDE0XSAlYXNpLCAlbzUKIAlqbXBsCQklZzEgKyAlbG8oc3lzX3JlY3Zmcm9tKSwgJWcwCi0JIGxkdXdhCQlbJW8xICsgMHg0XSAlYXNpLCAlbzEKKzQ0OgkgbGR1d2EJCVslbzEgKyAweDRdICVhc2ksICVvMQogZG9fc3lzX3NodXRkb3duOiAvKiBzeXNfc2h1dGRvd24oaW50LCBpbnQpICovCi0JbGRzd2EJCVslbzEgKyAweDBdICVhc2ksICVvMAorNDU6CWxkc3dhCQlbJW8xICsgMHgwXSAlYXNpLCAlbzAKIAlzZXRoaQkJJWhpKHN5c19zaHV0ZG93biksICVnMQogCWptcGwJCSVnMSArICVsbyhzeXNfc2h1dGRvd24pLCAlZzAKLQkgbGRzd2EJCVslbzEgKyAweDRdICVhc2ksICVvMQorNDY6CSBsZHN3YQkJWyVvMSArIDB4NF0gJWFzaSwgJW8xCiAJbm9wCiAJbm9wCiAJbm9wCiAJbm9wCiBkb19zeXNfc2V0c29ja29wdDogLyogY29tcGF0X3N5c19zZXRzb2Nrb3B0KGludCwgaW50LCBpbnQsIGNoYXIgKiwgaW50KSAqLwotCWxkc3dhCQlbJW8xICsgMHgwXSAlYXNpLCAlbzAKKzQ3OglsZHN3YQkJWyVvMSArIDB4MF0gJWFzaSwgJW8wCiAJc2V0aGkJCSVoaShjb21wYXRfc3lzX3NldHNvY2tvcHQpLCAlZzEKLQlsZHN3YQkJWyVvMSArIDB4OF0gJWFzaSwgJW8yCi0JbGR1d2EJCVslbzEgKyAweGNdICVhc2ksICVvMwotCWxkc3dhCQlbJW8xICsgMHgxMF0gJWFzaSwgJW80Cis0ODoJbGRzd2EJCVslbzEgKyAweDhdICVhc2ksICVvMgorNDk6CWxkdXdhCQlbJW8xICsgMHhjXSAlYXNpLCAlbzMKKzUwOglsZHN3YQkJWyVvMSArIDB4MTBdICVhc2ksICVvNAogCWptcGwJCSVnMSArICVsbyhjb21wYXRfc3lzX3NldHNvY2tvcHQpLCAlZzAKLQkgbGRzd2EJCVslbzEgKyAweDRdICVhc2ksICVvMQorNTE6CSBsZHN3YQkJWyVvMSArIDB4NF0gJWFzaSwgJW8xCiAJbm9wCiBkb19zeXNfZ2V0c29ja29wdDogLyogY29tcGF0X3N5c19nZXRzb2Nrb3B0KGludCwgaW50LCBpbnQsIHUzMiwgdTMyKSAqLwotCWxkc3dhCQlbJW8xICsgMHgwXSAlYXNpLCAlbzAKKzUyOglsZHN3YQkJWyVvMSArIDB4MF0gJWFzaSwgJW8wCiAJc2V0aGkJCSVoaShjb21wYXRfc3lzX2dldHNvY2tvcHQpLCAlZzEKLQlsZHN3YQkJWyVvMSArIDB4OF0gJWFzaSwgJW8yCi0JbGR1d2EJCVslbzEgKyAweGNdICVhc2ksICVvMwotCWxkdXdhCQlbJW8xICsgMHgxMF0gJWFzaSwgJW80Cis1MzoJbGRzd2EJCVslbzEgKyAweDhdICVhc2ksICVvMgorNTQ6CWxkdXdhCQlbJW8xICsgMHhjXSAlYXNpLCAlbzMKKzU1OglsZHV3YQkJWyVvMSArIDB4MTBdICVhc2ksICVvNAogCWptcGwJCSVnMSArICVsbyhjb21wYXRfc3lzX2dldHNvY2tvcHQpLCAlZzAKLQkgbGRzd2EJCVslbzEgKyAweDRdICVhc2ksICVvMQorNTY6CSBsZHN3YQkJWyVvMSArIDB4NF0gJWFzaSwgJW8xCiAJbm9wCiBkb19zeXNfc2VuZG1zZzogLyogY29tcGF0X3N5c19zZW5kbXNnKGludCwgc3RydWN0IGNvbXBhdF9tc2doZHIgKiwgdW5zaWduZWQgaW50KSAqLwotCWxkc3dhCQlbJW8xICsgMHgwXSAlYXNpLCAlbzAKKzU3OglsZHN3YQkJWyVvMSArIDB4MF0gJWFzaSwgJW8wCiAJc2V0aGkJCSVoaShjb21wYXRfc3lzX3NlbmRtc2cpLCAlZzEKLQlsZHV3YQkJWyVvMSArIDB4OF0gJWFzaSwgJW8yCis1ODoJbGR1d2EJCVslbzEgKyAweDhdICVhc2ksICVvMgogCWptcGwJCSVnMSArICVsbyhjb21wYXRfc3lzX3NlbmRtc2cpLCAlZzAKLQkgbGR1d2EJCVslbzEgKyAweDRdICVhc2ksICVvMQorNTk6CSBsZHV3YQkJWyVvMSArIDB4NF0gJWFzaSwgJW8xCiAJbm9wCiAJbm9wCiAJbm9wCiBkb19zeXNfcmVjdm1zZzogLyogY29tcGF0X3N5c19yZWN2bXNnKGludCwgc3RydWN0IGNvbXBhdF9tc2doZHIgKiwgdW5zaWduZWQgaW50KSAqLwotCWxkc3dhCQlbJW8xICsgMHgwXSAlYXNpLCAlbzAKKzYwOglsZHN3YQkJWyVvMSArIDB4MF0gJWFzaSwgJW8wCiAJc2V0aGkJCSVoaShjb21wYXRfc3lzX3JlY3Ztc2cpLCAlZzEKLQlsZHV3YQkJWyVvMSArIDB4OF0gJWFzaSwgJW8yCis2MToJbGR1d2EJCVslbzEgKyAweDhdICVhc2ksICVvMgogCWptcGwJCSVnMSArICVsbyhjb21wYXRfc3lzX3JlY3Ztc2cpLCAlZzAKLQkgbGR1d2EJCVslbzEgKyAweDRdICVhc2ksICVvMQorNjI6CSBsZHV3YQkJWyVvMSArIDB4NF0gJWFzaSwgJW8xCiAJbm9wCiAJbm9wCiAJbm9wCi1fX3NvY2tldGNhbGxfdGFibGVfZW5kOgotCi1kb19laW52YWw6Ci0JcmV0bAotCSBtb3YJCS1FSU5WQUwsICVvMAotZG9fZWZhdWx0OgotCXJldGwKLQkgbW92CQktRUZBVUxULCAlbzAKIAogCS5zZWN0aW9uCV9fZXhfdGFibGUKIAkuYWxpZ24JCTQKLQkud29yZAkJX19zb2NrZXRjYWxsX3RhYmxlX2JlZ2luLCAwLCBfX3NvY2tldGNhbGxfdGFibGVfZW5kLCBkb19lZmF1bHQKKwkud29yZAkJMWIsIF9fcmV0bF9lZmF1bHQsIDJiLCBfX3JldGxfZWZhdWx0CisJLndvcmQJCTNiLCBfX3JldGxfZWZhdWx0LCA0YiwgX19yZXRsX2VmYXVsdAorCS53b3JkCQk1YiwgX19yZXRsX2VmYXVsdCwgNmIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJN2IsIF9fcmV0bF9lZmF1bHQsIDhiLCBfX3JldGxfZWZhdWx0CisJLndvcmQJCTliLCBfX3JldGxfZWZhdWx0LCAxMGIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJMTFiLCBfX3JldGxfZWZhdWx0LCAxMmIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJMTNiLCBfX3JldGxfZWZhdWx0LCAxNGIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJMTViLCBfX3JldGxfZWZhdWx0LCAxNmIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJMTdiLCBfX3JldGxfZWZhdWx0LCAxOGIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJMTliLCBfX3JldGxfZWZhdWx0LCAyMGIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJMjFiLCBfX3JldGxfZWZhdWx0LCAyMmIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJMjNiLCBfX3JldGxfZWZhdWx0LCAyNGIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJMjViLCBfX3JldGxfZWZhdWx0LCAyNmIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJMjdiLCBfX3JldGxfZWZhdWx0LCAyOGIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJMjliLCBfX3JldGxfZWZhdWx0LCAzMGIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJMzFiLCBfX3JldGxfZWZhdWx0LCAzMmIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJMzNiLCBfX3JldGxfZWZhdWx0LCAzNGIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJMzViLCBfX3JldGxfZWZhdWx0LCAzNmIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJMzdiLCBfX3JldGxfZWZhdWx0LCAzOGIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJMzliLCBfX3JldGxfZWZhdWx0LCA0MGIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJNDFiLCBfX3JldGxfZWZhdWx0LCA0MmIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJNDNiLCBfX3JldGxfZWZhdWx0LCA0NGIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJNDViLCBfX3JldGxfZWZhdWx0LCA0NmIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJNDdiLCBfX3JldGxfZWZhdWx0LCA0OGIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJNDliLCBfX3JldGxfZWZhdWx0LCA1MGIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJNTFiLCBfX3JldGxfZWZhdWx0LCA1MmIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJNTNiLCBfX3JldGxfZWZhdWx0LCA1NGIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJNTViLCBfX3JldGxfZWZhdWx0LCA1NmIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJNTdiLCBfX3JldGxfZWZhdWx0LCA1OGIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJNTliLCBfX3JldGxfZWZhdWx0LCA2MGIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJNjFiLCBfX3JldGxfZWZhdWx0LCA2MmIsIF9fcmV0bF9lZmF1bHQKIAkucHJldmlvdXMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHJhbXBvbGluZS5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFtcG9saW5lLlMKaW5kZXggM2ExNDVmYy4uOTQ3ODU1MSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFtcG9saW5lLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFtcG9saW5lLlMKQEAgLTExOSw4ICsxMTksOCBAQAogCXNldGhpCQklaGkoaXRsYl9sb2FkKSwgJWcyCiAJb3IJCSVnMiwgJWxvKGl0bGJfbG9hZCksICVnMgogCXN0eAkJJWcyLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MThdCi0Jc2V0aGkJCSVoaShtbXVfaWhhbmRsZV9jYWNoZSksICVnMgotCWxkdXcJCVslZzIgKyAlbG8obW11X2loYW5kbGVfY2FjaGUpXSwgJWcyCisJc2V0aGkJCSVoaShwcm9tX21tdV9paGFuZGxlX2NhY2hlKSwgJWcyCisJbGR1dwkJWyVnMiArICVsbyhwcm9tX21tdV9paGFuZGxlX2NhY2hlKV0sICVnMgogCXN0eAkJJWcyLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MjBdCiAJc2V0aGkJCSVoaShLRVJOQkFTRSksICVnMgogCXN0eAkJJWcyLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MjhdCkBAIC0xNTYsOCArMTU2LDggQEAKIAlzZXRoaQkJJWhpKGl0bGJfbG9hZCksICVnMgogCW9yCQklZzIsICVsbyhpdGxiX2xvYWQpLCAlZzIKIAlzdHgJCSVnMiwgWyVzcCArIDIwNDcgKyAxMjggKyAweDE4XQotCXNldGhpCQklaGkobW11X2loYW5kbGVfY2FjaGUpLCAlZzIKLQlsZHV3CQlbJWcyICsgJWxvKG1tdV9paGFuZGxlX2NhY2hlKV0sICVnMgorCXNldGhpCQklaGkocHJvbV9tbXVfaWhhbmRsZV9jYWNoZSksICVnMgorCWxkdXcJCVslZzIgKyAlbG8ocHJvbV9tbXVfaWhhbmRsZV9jYWNoZSldLCAlZzIKIAlzdHgJCSVnMiwgWyVzcCArIDIwNDcgKyAxMjggKyAweDIwXQogCXNldGhpCQklaGkoS0VSTkJBU0UgKyAweDQwMDAwMCksICVnMgogCXN0eAkJJWcyLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MjhdCkBAIC0xOTAsOCArMTkwLDggQEAKIAlzZXRoaQkJJWhpKGR0bGJfbG9hZCksICVnMgogCW9yCQklZzIsICVsbyhkdGxiX2xvYWQpLCAlZzIKIAlzdHgJCSVnMiwgWyVzcCArIDIwNDcgKyAxMjggKyAweDE4XQotCXNldGhpCQklaGkobW11X2loYW5kbGVfY2FjaGUpLCAlZzIKLQlsZHV3CQlbJWcyICsgJWxvKG1tdV9paGFuZGxlX2NhY2hlKV0sICVnMgorCXNldGhpCQklaGkocHJvbV9tbXVfaWhhbmRsZV9jYWNoZSksICVnMgorCWxkdXcJCVslZzIgKyAlbG8ocHJvbV9tbXVfaWhhbmRsZV9jYWNoZSldLCAlZzIKIAlzdHgJCSVnMiwgWyVzcCArIDIwNDcgKyAxMjggKyAweDIwXQogCXNldGhpCQklaGkoS0VSTkJBU0UpLCAlZzIKIAlzdHgJCSVnMiwgWyVzcCArIDIwNDcgKyAxMjggKyAweDI4XQpAQCAtMjI4LDggKzIyOCw4IEBACiAJc2V0aGkJCSVoaShkdGxiX2xvYWQpLCAlZzIKIAlvcgkJJWcyLCAlbG8oZHRsYl9sb2FkKSwgJWcyCiAJc3R4CQklZzIsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHgxOF0KLQlzZXRoaQkJJWhpKG1tdV9paGFuZGxlX2NhY2hlKSwgJWcyCi0JbGR1dwkJWyVnMiArICVsbyhtbXVfaWhhbmRsZV9jYWNoZSldLCAlZzIKKwlzZXRoaQkJJWhpKHByb21fbW11X2loYW5kbGVfY2FjaGUpLCAlZzIKKwlsZHV3CQlbJWcyICsgJWxvKHByb21fbW11X2loYW5kbGVfY2FjaGUpXSwgJWcyCiAJc3R4CQklZzIsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHgyMF0KIAlzZXRoaQkJJWhpKEtFUk5CQVNFICsgMHg0MDAwMDApLCAlZzIKIAlzdHgJCSVnMiwgWyVzcCArIDIwNDcgKyAxMjggKyAweDI4XQpAQCAtMzM2LDIwICszMzYsMTMgQEAKIAljYWxsCQlpbml0X2lycXdvcmtfY3VyY3B1CiAJIG5vcAogCi0JQlJBTkNIX0lGX0NIRUVUQUhfUExVU19PUl9GT0xMT1dPTihnMixnMywxZikKLQliYSxwdAkleGNjLCAyZgotCSBub3AKLQotMToJLyogU3RhcnQgdXNpbmcgcHJvcGVyIHBhZ2Ugc2l6ZSBlbmNvZGluZ3MgaW4gY3R4IHJlZ2lzdGVyLiAgKi8KLQlzZXRoaQkldWhpKENUWF9DSEVFVEFIX1BMVVNfTlVDKSwgJWczCisJLyogU3RhcnQgdXNpbmcgcHJvcGVyIHBhZ2Ugc2l6ZSBlbmNvZGluZ3MgaW4gY3R4IHJlZ2lzdGVyLiAgKi8KKwlzZXRoaQklaGkoc3BhcmM2NF9rZXJuX3ByaV9jb250ZXh0KSwgJWczCisJbGR4CVslZzMgKyAlbG8oc3BhcmM2NF9rZXJuX3ByaV9jb250ZXh0KV0sICVnMgogCW1vdglQUklNQVJZX0NPTlRFWFQsICVnMQotCXNsbHgJJWczLCAzMiwgJWczCi0Jc2V0aGkJJWhpKENUWF9DSEVFVEFIX1BMVVNfQ1RYMCksICVnMgotCW9yCSVnMywgJWcyLCAlZzMKLQlzdHhhCSVnMywgWyVnMV0gQVNJX0RNTVUKKwlzdHhhCSVnMiwgWyVnMV0gQVNJX0RNTVUKIAltZW1iYXIJI1N5bmMKIAotMjoKIAlyZHByCQklcHN0YXRlLCAlbzEKIAlvcgkJJW8xLCBQU1RBVEVfSUUsICVvMQogCXdycHIJCSVvMSwgMCwgJXBzdGF0ZQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFwcy5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFwcy5jCmluZGV4IGIyODBiMmUuLjU1NzBlN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3RyYXBzLmMKQEAgLTE4OSwxOSArMTg5LDE4IEBACiAKIAlpZiAocmVncy0+dHN0YXRlICYgVFNUQVRFX1BSSVYpIHsKIAkJLyogVGVzdCBpZiB0aGlzIGNvbWVzIGZyb20gdWFjY2VzcyBwbGFjZXMuICovCi0JCXVuc2lnbmVkIGxvbmcgZml4dXA7Ci0JCXVuc2lnbmVkIGxvbmcgZzIgPSByZWdzLT51X3JlZ3NbVVJFR19HMl07CisJCWNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmVudHJ5OwogCi0JCWlmICgoZml4dXAgPSBzZWFyY2hfZXh0YWJsZXNfcmFuZ2UocmVncy0+dHBjLCAmZzIpKSkgewotCQkJLyogT3VjaCwgc29tZWJvZHkgaXMgdHJ5aW5nIHVnbHkgVk0gaG9sZSB0cmlja3Mgb24gdXMuLi4gKi8KKwkJZW50cnkgPSBzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhyZWdzLT50cGMpOworCQlpZiAoZW50cnkpIHsKKwkJCS8qIE91Y2gsIHNvbWVib2R5IGlzIHRyeWluZyBWTSBob2xlIHRyaWNrcyBvbiB1cy4uLiAqLwogI2lmZGVmIERFQlVHX0VYQ0VQVElPTlMKIAkJCXByaW50aygiRXhjZXB0aW9uOiBQQzwlMDE2bHg+IGZhZGRyPFVOS05PV04+XG4iLCByZWdzLT50cGMpOwotCQkJcHJpbnRrKCJFWF9UQUJMRTogaW5zbjwlMDE2bHg+IGZpeHVwPCUwMTZseD4gIgotCQkJICAgICAgICJnMjwlMDE2bHg+XG4iLCByZWdzLT50cGMsIGZpeHVwLCBnMik7CisJCQlwcmludGsoIkVYX1RBQkxFOiBpbnNuPCUwMTZseD4gZml4dXA8JTAxNmx4PlxuIiwKKwkJCSAgICAgICByZWdzLT50cGMsIGVudHJ5LT5maXh1cCk7CiAjZW5kaWYKLQkJCXJlZ3MtPnRwYyA9IGZpeHVwOworCQkJcmVncy0+dHBjID0gZW50cnktPmZpeHVwOwogCQkJcmVncy0+dG5wYyA9IHJlZ3MtPnRwYyArIDQ7Ci0JCQlyZWdzLT51X3JlZ3NbVVJFR19HMl0gPSBnMjsKIAkJCXJldHVybjsKIAkJfQogCQkvKiBTaGl0Li4uICovCkBAIC03NTgsMjYgKzc1NywxMiBAQAogCWVjYWNoZV9mbHVzaF9zaXplID0gKDIgKiBsYXJnZXN0X3NpemUpOwogCWVjYWNoZV9mbHVzaF9saW5lc2l6ZSA9IHNtYWxsZXN0X2xpbmVzaXplOwogCi0JLyogRGlzY292ZXIgYSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgY2h1bmsgb2YgcGh5c2ljYWwKLQkgKiBtZW1vcnkgaW4gJ3NwX2JhbmtzJyBvZiBzaXplIGVjYWNoZV9mbHVzaF9zaXplIGNhbGN1bGF0ZWQKLQkgKiBhYm92ZS4gIFN0b3JlIHRoZSBwaHlzaWNhbCBiYXNlIG9mIHRoaXMgYXJlYSBhdAotCSAqIGVjYWNoZV9mbHVzaF9waHlzYmFzZS4KLQkgKi8KLQlmb3IgKG5vZGUgPSAwOyA7IG5vZGUrKykgewotCQlpZiAoc3BfYmFua3Nbbm9kZV0ubnVtX2J5dGVzID09IDApCi0JCQlicmVhazsKLQkJaWYgKHNwX2JhbmtzW25vZGVdLm51bV9ieXRlcyA+PSBlY2FjaGVfZmx1c2hfc2l6ZSkgewotCQkJZWNhY2hlX2ZsdXNoX3BoeXNiYXNlID0gc3BfYmFua3Nbbm9kZV0uYmFzZV9hZGRyOwotCQkJYnJlYWs7Ci0JCX0KLQl9CisJZWNhY2hlX2ZsdXNoX3BoeXNiYXNlID0gZmluZF9lY2FjaGVfZmx1c2hfc3BhbihlY2FjaGVfZmx1c2hfc2l6ZSk7CiAKLQkvKiBOb3RlOiBaZXJvIHdvdWxkIGJlIGEgdmFsaWQgdmFsdWUgb2YgZWNhY2hlX2ZsdXNoX3BoeXNiYXNlIHNvCi0JICogZG9uJ3QgdXNlIHRoYXQgYXMgdGhlIHN1Y2Nlc3MgdGVzdC4gOi0pCi0JICovCi0JaWYgKHNwX2JhbmtzW25vZGVdLm51bV9ieXRlcyA9PSAwKSB7CisJaWYgKGVjYWNoZV9mbHVzaF9waHlzYmFzZSA9PSB+MFVMKSB7CiAJCXByb21fcHJpbnRmKCJjaGVldGFoX2VjYWNoZV9mbHVzaF9pbml0OiBDYW5ub3QgZmluZCAlZCBieXRlICIKLQkJCSAgICAiY29udGlndW91cyBwaHlzaWNhbCBtZW1vcnkuXG4iLCBlY2FjaGVfZmx1c2hfc2l6ZSk7CisJCQkgICAgImNvbnRpZ3VvdXMgcGh5c2ljYWwgbWVtb3J5LlxuIiwKKwkJCSAgICBlY2FjaGVfZmx1c2hfc2l6ZSk7CiAJCXByb21faGFsdCgpOwogCX0KIApAQCAtODY5LDE0ICs4NTQsMTkgQEAKICAqLwogc3RhdGljIHZvaWQgX19jaGVldGFoX2ZsdXNoX2ljYWNoZSh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgaTsKKwl1bnNpZ25lZCBpbnQgaWNhY2hlX3NpemUsIGljYWNoZV9saW5lX3NpemU7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJaWNhY2hlX3NpemUgPSBsb2NhbF9jcHVfZGF0YSgpLmljYWNoZV9zaXplOworCWljYWNoZV9saW5lX3NpemUgPSBsb2NhbF9jcHVfZGF0YSgpLmljYWNoZV9saW5lX3NpemU7CiAKIAkvKiBDbGVhciB0aGUgdmFsaWQgYml0cyBpbiBhbGwgdGhlIHRhZ3MuICovCi0JZm9yIChpID0gMDsgaSA8ICgxIDw8IDE1KTsgaSArPSAoMSA8PCA1KSkgeworCWZvciAoYWRkciA9IDA7IGFkZHIgPCBpY2FjaGVfc2l6ZTsgYWRkciArPSBpY2FjaGVfbGluZV9zaXplKSB7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhICUlZzAsIFslMF0gJTFcblx0IgogCQkJCSAgICAgIm1lbWJhciAjU3luYyIKIAkJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLwotCQkJCSAgICAgOiAiciIgKGkgfCAoMiA8PCAzKSksICJpIiAoQVNJX0lDX1RBRykpOworCQkJCSAgICAgOiAiciIgKGFkZHIgfCAoMiA8PCAzKSksCisJCQkJICAgICAgICJpIiAoQVNJX0lDX1RBRykpOwogCX0KIH0KIApAQCAtOTA0LDEzICs4OTQsMTcgQEAKIAogc3RhdGljIHZvaWQgY2hlZXRhaF9mbHVzaF9kY2FjaGUodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGk7CisJdW5zaWduZWQgaW50IGRjYWNoZV9zaXplLCBkY2FjaGVfbGluZV9zaXplOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAotCWZvciAoaSA9IDA7IGkgPCAoMSA8PCAxNik7IGkgKz0gKDEgPDwgNSkpIHsKKwlkY2FjaGVfc2l6ZSA9IGxvY2FsX2NwdV9kYXRhKCkuZGNhY2hlX3NpemU7CisJZGNhY2hlX2xpbmVfc2l6ZSA9IGxvY2FsX2NwdV9kYXRhKCkuZGNhY2hlX2xpbmVfc2l6ZTsKKworCWZvciAoYWRkciA9IDA7IGFkZHIgPCBkY2FjaGVfc2l6ZTsgYWRkciArPSBkY2FjaGVfbGluZV9zaXplKSB7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhICUlZzAsIFslMF0gJTFcblx0IgogCQkJCSAgICAgIm1lbWJhciAjU3luYyIKIAkJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLwotCQkJCSAgICAgOiAiciIgKGkpLCAiaSIgKEFTSV9EQ0FDSEVfVEFHKSk7CisJCQkJICAgICA6ICJyIiAoYWRkciksICJpIiAoQVNJX0RDQUNIRV9UQUcpKTsKIAl9CiB9CiAKQEAgLTkyMSwyNCArOTE1LDI5IEBACiAgKi8KIHN0YXRpYyB2b2lkIGNoZWV0YWhfcGx1c196YXBfZGNhY2hlX3Bhcml0eSh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgaTsKKwl1bnNpZ25lZCBpbnQgZGNhY2hlX3NpemUsIGRjYWNoZV9saW5lX3NpemU7CisJdW5zaWduZWQgbG9uZyBhZGRyOwogCi0JZm9yIChpID0gMDsgaSA8ICgxIDw8IDE2KTsgaSArPSAoMSA8PCA1KSkgewotCQl1bnNpZ25lZCBsb25nIHRhZyA9IChpID4+IDE0KTsKLQkJdW5zaWduZWQgbG9uZyBqOworCWRjYWNoZV9zaXplID0gbG9jYWxfY3B1X2RhdGEoKS5kY2FjaGVfc2l6ZTsKKwlkY2FjaGVfbGluZV9zaXplID0gbG9jYWxfY3B1X2RhdGEoKS5kY2FjaGVfbGluZV9zaXplOworCisJZm9yIChhZGRyID0gMDsgYWRkciA8IGRjYWNoZV9zaXplOyBhZGRyICs9IGRjYWNoZV9saW5lX3NpemUpIHsKKwkJdW5zaWduZWQgbG9uZyB0YWcgPSAoYWRkciA+PiAxNCk7CisJCXVuc2lnbmVkIGxvbmcgbGluZTsKIAogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibWVtYmFyCSNTeW5jXG5cdCIKIAkJCQkgICAgICJzdHhhCSUwLCBbJTFdICUyXG5cdCIKIAkJCQkgICAgICJtZW1iYXIJI1N5bmMiCiAJCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KLQkJCQkgICAgIDogInIiICh0YWcpLCAiciIgKGkpLAorCQkJCSAgICAgOiAiciIgKHRhZyksICJyIiAoYWRkciksCiAJCQkJICAgICAgICJpIiAoQVNJX0RDQUNIRV9VVEFHKSk7Ci0JCWZvciAoaiA9IGk7IGogPCBpICsgKDEgPDwgNSk7IGogKz0gKDEgPDwgMykpCisJCWZvciAobGluZSA9IGFkZHI7IGxpbmUgPCBhZGRyICsgZGNhY2hlX2xpbmVfc2l6ZTsgbGluZSArPSA4KQogCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1lbWJhcgkjU3luY1xuXHQiCiAJCQkJCSAgICAgInN0eGEJJSVnMCwgWyUwXSAlMVxuXHQiCiAJCQkJCSAgICAgIm1lbWJhcgkjU3luYyIKIAkJCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KLQkJCQkJICAgICA6ICJyIiAoaiksICJpIiAoQVNJX0RDQUNIRV9EQVRBKSk7CisJCQkJCSAgICAgOiAiciIgKGxpbmUpLAorCQkJCQkgICAgICAgImkiIChBU0lfRENBQ0hFX0RBVEEpKTsKIAl9CiB9CiAKQEAgLTEzMzIsMTYgKzEzMzEsMTIgQEAKIC8qIFJldHVybiBub24temVybyBpZiBQQUREUiBpcyBhIHZhbGlkIHBoeXNpY2FsIG1lbW9yeSBhZGRyZXNzLiAqLwogc3RhdGljIGludCBjaGVldGFoX2NoZWNrX21haW5fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGFkZHIpCiB7Ci0JaW50IGk7CisJdW5zaWduZWQgbG9uZyB2YWRkciA9IFBBR0VfT0ZGU0VUICsgcGFkZHI7CiAKLQlmb3IgKGkgPSAwOyA7IGkrKykgewotCQlpZiAoc3BfYmFua3NbaV0ubnVtX2J5dGVzID09IDApCi0JCQlicmVhazsKLQkJaWYgKHBhZGRyID49IHNwX2JhbmtzW2ldLmJhc2VfYWRkciAmJgotCQkgICAgcGFkZHIgPCAoc3BfYmFua3NbaV0uYmFzZV9hZGRyICsgc3BfYmFua3NbaV0ubnVtX2J5dGVzKSkKLQkJCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKKwlpZiAodmFkZHIgPiAodW5zaWduZWQgbG9uZykgaGlnaF9tZW1vcnkpCisJCXJldHVybiAwOworCisJcmV0dXJuIGtlcm5fYWRkcl92YWxpZCh2YWRkcik7CiB9CiAKIHZvaWQgY2hlZXRhaF9jZWVfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZnNyLCB1bnNpZ25lZCBsb25nIGFmYXIpCkBAIC0xNTk2LDEwICsxNTkxLDEwIEBACiAJCQkvKiBPSywgdXNlcm1vZGUgYWNjZXNzLiAqLwogCQkJcmVjb3ZlcmFibGUgPSAxOwogCQl9IGVsc2UgewotCQkJdW5zaWduZWQgbG9uZyBnMiA9IHJlZ3MtPnVfcmVnc1tVUkVHX0cyXTsKLQkJCXVuc2lnbmVkIGxvbmcgZml4dXAgPSBzZWFyY2hfZXh0YWJsZXNfcmFuZ2UocmVncy0+dHBjLCAmZzIpOworCQkJY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZW50cnk7CiAKLQkJCWlmIChmaXh1cCAhPSAwVUwpIHsKKwkJCWVudHJ5ID0gc2VhcmNoX2V4Y2VwdGlvbl90YWJsZXMocmVncy0+dHBjKTsKKwkJCWlmIChlbnRyeSkgewogCQkJCS8qIE9LLCBrZXJuZWwgYWNjZXNzIHRvIHVzZXJzcGFjZS4gKi8KIAkJCQlyZWNvdmVyYWJsZSA9IDE7CiAKQEAgLTE2MTgsOSArMTYxMyw4IEBACiAJCQkJICogcmVjb3ZlcmFibGUgY29uZGl0aW9uLgogCQkJCSAqLwogCQkJCWlmIChyZWNvdmVyYWJsZSkgewotCQkJCQlyZWdzLT50cGMgPSBmaXh1cDsKKwkJCQkJcmVncy0+dHBjID0gZW50cnktPmZpeHVwOwogCQkJCQlyZWdzLT50bnBjID0gcmVncy0+dHBjICsgNDsKLQkJCQkJcmVncy0+dV9yZWdzW1VSRUdfRzJdID0gZzI7CiAJCQkJfQogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3VuYV9hc20uUyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdW5hX2FzbS5TCmluZGV4IGNiYjQwNTguLjFmNWI1YjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdW5hX2FzbS5TCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdW5hX2FzbS5TCkBAIC02LDE4ICs2LDExIEBACiAKIAkudGV4dAogCi1rZXJuZWxfdW5hbGlnbmVkX3RyYXBfZmF1bHQ6Ci0JY2FsbAlrZXJuZWxfbW5hX3RyYXBfZmF1bHQKLQkgbm9wCi0JcmV0bAotCSBub3AKLQkuc2l6ZQlrZXJuX3VuYWxpZ25lZF90cmFwX2ZhdWx0LCAuLWtlcm5fdW5hbGlnbmVkX3RyYXBfZmF1bHQKLQogCS5nbG9ibAlfX2RvX2ludF9zdG9yZQogX19kb19pbnRfc3RvcmU6CiAJcmQJJWFzaSwgJW80CiAJd3IJJW8zLCAwLCAlYXNpCi0JbGR4CVslbzJdLCAlZzMKKwltb3YJJW8yLCAlZzMKIAljbXAJJW8xLCAyCiAJYmUscG4JJWljYywgMmYKIAkgY21wCSVvMSwgNApAQCAtNTEsMjQgKzQ0LDI0IEBACiAwOgogCXdyCSVvNCwgMHgwLCAlYXNpCiAJcmV0bAotCSBub3AKKwkgbW92CTAsICVvMAogCS5zaXplCV9fZG9faW50X3N0b3JlLCAuLV9fZG9faW50X3N0b3JlCiAKIAkuc2VjdGlvbglfX2V4X3RhYmxlCi0JLndvcmQJCTRiLCBrZXJuZWxfdW5hbGlnbmVkX3RyYXBfZmF1bHQKLQkud29yZAkJNWIsIGtlcm5lbF91bmFsaWduZWRfdHJhcF9mYXVsdAotCS53b3JkCQk2Yiwga2VybmVsX3VuYWxpZ25lZF90cmFwX2ZhdWx0Ci0JLndvcmQJCTdiLCBrZXJuZWxfdW5hbGlnbmVkX3RyYXBfZmF1bHQKLQkud29yZAkJOGIsIGtlcm5lbF91bmFsaWduZWRfdHJhcF9mYXVsdAotCS53b3JkCQk5Yiwga2VybmVsX3VuYWxpZ25lZF90cmFwX2ZhdWx0Ci0JLndvcmQJCTEwYiwga2VybmVsX3VuYWxpZ25lZF90cmFwX2ZhdWx0Ci0JLndvcmQJCTExYiwga2VybmVsX3VuYWxpZ25lZF90cmFwX2ZhdWx0Ci0JLndvcmQJCTEyYiwga2VybmVsX3VuYWxpZ25lZF90cmFwX2ZhdWx0Ci0JLndvcmQJCTEzYiwga2VybmVsX3VuYWxpZ25lZF90cmFwX2ZhdWx0Ci0JLndvcmQJCTE0Yiwga2VybmVsX3VuYWxpZ25lZF90cmFwX2ZhdWx0Ci0JLndvcmQJCTE1Yiwga2VybmVsX3VuYWxpZ25lZF90cmFwX2ZhdWx0Ci0JLndvcmQJCTE2Yiwga2VybmVsX3VuYWxpZ25lZF90cmFwX2ZhdWx0Ci0JLndvcmQJCTE3Yiwga2VybmVsX3VuYWxpZ25lZF90cmFwX2ZhdWx0CisJLndvcmQJCTRiLCBfX3JldGxfZWZhdWx0CisJLndvcmQJCTViLCBfX3JldGxfZWZhdWx0CisJLndvcmQJCTZiLCBfX3JldGxfZWZhdWx0CisJLndvcmQJCTdiLCBfX3JldGxfZWZhdWx0CisJLndvcmQJCThiLCBfX3JldGxfZWZhdWx0CisJLndvcmQJCTliLCBfX3JldGxfZWZhdWx0CisJLndvcmQJCTEwYiwgX19yZXRsX2VmYXVsdAorCS53b3JkCQkxMWIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJMTJiLCBfX3JldGxfZWZhdWx0CisJLndvcmQJCTEzYiwgX19yZXRsX2VmYXVsdAorCS53b3JkCQkxNGIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJMTViLCBfX3JldGxfZWZhdWx0CisJLndvcmQJCTE2YiwgX19yZXRsX2VmYXVsdAorCS53b3JkCQkxN2IsIF9fcmV0bF9lZmF1bHQKIAkucHJldmlvdXMKIAogCS5nbG9ibAlkb19pbnRfbG9hZApAQCAtMTMzLDIxICsxMjYsMjEgQEAKIDA6CiAJd3IJJW81LCAweDAsICVhc2kKIAlyZXRsCi0JIG5vcAorCSBtb3YJMCwgJW8wCiAJLnNpemUJX19kb19pbnRfbG9hZCwgLi1fX2RvX2ludF9sb2FkCiAKIAkuc2VjdGlvbglfX2V4X3RhYmxlCi0JLndvcmQJCTRiLCBrZXJuZWxfdW5hbGlnbmVkX3RyYXBfZmF1bHQKLQkud29yZAkJNWIsIGtlcm5lbF91bmFsaWduZWRfdHJhcF9mYXVsdAotCS53b3JkCQk2Yiwga2VybmVsX3VuYWxpZ25lZF90cmFwX2ZhdWx0Ci0JLndvcmQJCTdiLCBrZXJuZWxfdW5hbGlnbmVkX3RyYXBfZmF1bHQKLQkud29yZAkJOGIsIGtlcm5lbF91bmFsaWduZWRfdHJhcF9mYXVsdAotCS53b3JkCQk5Yiwga2VybmVsX3VuYWxpZ25lZF90cmFwX2ZhdWx0Ci0JLndvcmQJCTEwYiwga2VybmVsX3VuYWxpZ25lZF90cmFwX2ZhdWx0Ci0JLndvcmQJCTExYiwga2VybmVsX3VuYWxpZ25lZF90cmFwX2ZhdWx0Ci0JLndvcmQJCTEyYiwga2VybmVsX3VuYWxpZ25lZF90cmFwX2ZhdWx0Ci0JLndvcmQJCTEzYiwga2VybmVsX3VuYWxpZ25lZF90cmFwX2ZhdWx0Ci0JLndvcmQJCTE0Yiwga2VybmVsX3VuYWxpZ25lZF90cmFwX2ZhdWx0Ci0JLndvcmQJCTE1Yiwga2VybmVsX3VuYWxpZ25lZF90cmFwX2ZhdWx0Ci0JLndvcmQJCTE2Yiwga2VybmVsX3VuYWxpZ25lZF90cmFwX2ZhdWx0CisJLndvcmQJCTRiLCBfX3JldGxfZWZhdWx0CisJLndvcmQJCTViLCBfX3JldGxfZWZhdWx0CisJLndvcmQJCTZiLCBfX3JldGxfZWZhdWx0CisJLndvcmQJCTdiLCBfX3JldGxfZWZhdWx0CisJLndvcmQJCThiLCBfX3JldGxfZWZhdWx0CisJLndvcmQJCTliLCBfX3JldGxfZWZhdWx0CisJLndvcmQJCTEwYiwgX19yZXRsX2VmYXVsdAorCS53b3JkCQkxMWIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJMTJiLCBfX3JldGxfZWZhdWx0CisJLndvcmQJCTEzYiwgX19yZXRsX2VmYXVsdAorCS53b3JkCQkxNGIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAkJMTViLCBfX3JldGxfZWZhdWx0CisJLndvcmQJCTE2YiwgX19yZXRsX2VmYXVsdAogCS5wcmV2aW91cwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC91bmFsaWduZWQuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdW5hbGlnbmVkLmMKaW5kZXggZGE5NzM5Zi4uNzBmYWY2MyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC91bmFsaWduZWQuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3VuYWxpZ25lZC5jCkBAIC0xODAsMTcgKzE4MCwxOCBAQAogCWRpZV9pZl9rZXJuZWwoc3RyLCByZWdzKTsKIH0KIAotZXh0ZXJuIHZvaWQgZG9faW50X2xvYWQodW5zaWduZWQgbG9uZyAqZGVzdF9yZWcsIGludCBzaXplLAotCQkJdW5zaWduZWQgbG9uZyAqc2FkZHIsIGludCBpc19zaWduZWQsIGludCBhc2kpOworZXh0ZXJuIGludCBkb19pbnRfbG9hZCh1bnNpZ25lZCBsb25nICpkZXN0X3JlZywgaW50IHNpemUsCisJCSAgICAgICB1bnNpZ25lZCBsb25nICpzYWRkciwgaW50IGlzX3NpZ25lZCwgaW50IGFzaSk7CiAJCi1leHRlcm4gdm9pZCBfX2RvX2ludF9zdG9yZSh1bnNpZ25lZCBsb25nICpkc3RfYWRkciwgaW50IHNpemUsCi0JCQkgICB1bnNpZ25lZCBsb25nICpzcmNfdmFsLCBpbnQgYXNpKTsKK2V4dGVybiBpbnQgX19kb19pbnRfc3RvcmUodW5zaWduZWQgbG9uZyAqZHN0X2FkZHIsIGludCBzaXplLAorCQkJICB1bnNpZ25lZCBsb25nIHNyY192YWwsIGludCBhc2kpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgZG9faW50X3N0b3JlKGludCByZWdfbnVtLCBpbnQgc2l6ZSwgdW5zaWduZWQgbG9uZyAqZHN0X2FkZHIsCi0JCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBhc2kpCitzdGF0aWMgaW5saW5lIGludCBkb19pbnRfc3RvcmUoaW50IHJlZ19udW0sIGludCBzaXplLCB1bnNpZ25lZCBsb25nICpkc3RfYWRkciwKKwkJCSAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGFzaSwgaW50IG9yaWdfYXNpKQogewogCXVuc2lnbmVkIGxvbmcgemVybyA9IDA7Ci0JdW5zaWduZWQgbG9uZyAqc3JjX3ZhbCA9ICZ6ZXJvOworCXVuc2lnbmVkIGxvbmcgKnNyY192YWxfcCA9ICZ6ZXJvOworCXVuc2lnbmVkIGxvbmcgc3JjX3ZhbDsKIAogCWlmIChzaXplID09IDE2KSB7CiAJCXNpemUgPSA4OwpAQCAtMTk4LDkgKzE5OSwyNyBAQAogCQkgICAgICAgICh1bnNpZ25lZClmZXRjaF9yZWcocmVnX251bSwgcmVncykgOiAwKSkgPDwgMzIpIHwKIAkJCSh1bnNpZ25lZClmZXRjaF9yZWcocmVnX251bSArIDEsIHJlZ3MpOwogCX0gZWxzZSBpZiAocmVnX251bSkgewotCQlzcmNfdmFsID0gZmV0Y2hfcmVnX2FkZHIocmVnX251bSwgcmVncyk7CisJCXNyY192YWxfcCA9IGZldGNoX3JlZ19hZGRyKHJlZ19udW0sIHJlZ3MpOwogCX0KLQlfX2RvX2ludF9zdG9yZShkc3RfYWRkciwgc2l6ZSwgc3JjX3ZhbCwgYXNpKTsKKwlzcmNfdmFsID0gKnNyY192YWxfcDsKKwlpZiAodW5saWtlbHkoYXNpICE9IG9yaWdfYXNpKSkgeworCQlzd2l0Y2ggKHNpemUpIHsKKwkJY2FzZSAyOgorCQkJc3JjX3ZhbCA9IHN3YWIxNihzcmNfdmFsKTsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQlzcmNfdmFsID0gc3dhYjMyKHNyY192YWwpOworCQkJYnJlYWs7CisJCWNhc2UgODoKKwkJCXNyY192YWwgPSBzd2FiNjQoc3JjX3ZhbCk7CisJCQlicmVhazsKKwkJY2FzZSAxNjoKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQkJYnJlYWs7CisJCX07CisJfQorCXJldHVybiBfX2RvX2ludF9zdG9yZShkc3RfYWRkciwgc2l6ZSwgc3JjX3ZhbCwgYXNpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGFkdmFuY2Uoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC0yMjMsMTQgKzI0MiwxNCBAQAogCXJldHVybiAhZmxvYXRpbmdfcG9pbnRfbG9hZF9vcl9zdG9yZV9wKGluc24pOwogfQogCi12b2lkIGtlcm5lbF9tbmFfdHJhcF9mYXVsdCh2b2lkKQorc3RhdGljIHZvaWQga2VybmVsX21uYV90cmFwX2ZhdWx0KHZvaWQpCiB7CiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBjdXJyZW50X3RocmVhZF9pbmZvKCktPmtlcm5fdW5hX3JlZ3M7CiAJdW5zaWduZWQgaW50IGluc24gPSBjdXJyZW50X3RocmVhZF9pbmZvKCktPmtlcm5fdW5hX2luc247Ci0JdW5zaWduZWQgbG9uZyBnMiA9IHJlZ3MtPnVfcmVnc1tVUkVHX0cyXTsKLQl1bnNpZ25lZCBsb25nIGZpeHVwID0gc2VhcmNoX2V4dGFibGVzX3JhbmdlKHJlZ3MtPnRwYywgJmcyKTsKKwljb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICplbnRyeTsKIAotCWlmICghZml4dXApIHsKKwllbnRyeSA9IHNlYXJjaF9leGNlcHRpb25fdGFibGVzKHJlZ3MtPnRwYyk7CisJaWYgKCFlbnRyeSkgewogCQl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CiAKIAkJYWRkcmVzcyA9IGNvbXB1dGVfZWZmZWN0aXZlX2FkZHJlc3MocmVncywgaW5zbiwKQEAgLTI1MSw5ICsyNzAsOCBAQAogCSAgICAgICAgZGllX2lmX2tlcm5lbCgiT29wcyIsIHJlZ3MpOwogCQkvKiBOb3QgcmVhY2hlZCAqLwogCX0KLQlyZWdzLT50cGMgPSBmaXh1cDsKKwlyZWdzLT50cGMgPSBlbnRyeS0+Zml4dXA7CiAJcmVncy0+dG5wYyA9IHJlZ3MtPnRwYyArIDQ7Ci0JcmVncy0+dV9yZWdzIFtVUkVHX0cyXSA9IGcyOwogCiAJcmVncy0+dHN0YXRlICY9IH5UU1RBVEVfQVNJOwogCXJlZ3MtPnRzdGF0ZSB8PSAoQVNJX0FJVVMgPDwgMjRVTCk7CkBAIC0yNzUsNyArMjkzLDggQEAKIAogCQlrZXJuZWxfbW5hX3RyYXBfZmF1bHQoKTsKIAl9IGVsc2UgewotCQl1bnNpZ25lZCBsb25nIGFkZHI7CisJCXVuc2lnbmVkIGxvbmcgYWRkciwgKnJlZ19hZGRyOworCQlpbnQgb3JpZ19hc2ksIGFzaSwgZXJyOwogCiAJCWFkZHIgPSBjb21wdXRlX2VmZmVjdGl2ZV9hZGRyZXNzKHJlZ3MsIGluc24sCiAJCQkJCQkgKChpbnNuID4+IDI1KSAmIDB4MWYpKTsKQEAgLTI4NSwyNSArMzA0LDU5IEBACiAJCSAgICAgICByZWdzLT50cGMsIGRpcnN0cmluZ3NbZGlyXSwgYWRkciwgc2l6ZSwKIAkJICAgICAgIHJlZ3MtPnVfcmVnc1tVUkVHX1JFVFBDXSk7CiAjZW5kaWYKKwkJb3JpZ19hc2kgPSBhc2kgPSBkZWNvZGVfYXNpKGluc24sIHJlZ3MpOworCQlzd2l0Y2ggKGFzaSkgeworCQljYXNlIEFTSV9OTDoKKwkJY2FzZSBBU0lfQUlVUEw6CisJCWNhc2UgQVNJX0FJVVNMOgorCQljYXNlIEFTSV9QTDoKKwkJY2FzZSBBU0lfU0w6CisJCWNhc2UgQVNJX1BORkw6CisJCWNhc2UgQVNJX1NORkw6CisJCQlhc2kgJj0gfjB4MDg7CisJCQlicmVhazsKKwkJfTsKIAkJc3dpdGNoIChkaXIpIHsKIAkJY2FzZSBsb2FkOgotCQkJZG9faW50X2xvYWQoZmV0Y2hfcmVnX2FkZHIoKChpbnNuPj4yNSkmMHgxZiksIHJlZ3MpLAotCQkJCSAgICBzaXplLCAodW5zaWduZWQgbG9uZyAqKSBhZGRyLAotCQkJCSAgICBkZWNvZGVfc2lnbmVkbmVzcyhpbnNuKSwKLQkJCQkgICAgZGVjb2RlX2FzaShpbnNuLCByZWdzKSk7CisJCQlyZWdfYWRkciA9IGZldGNoX3JlZ19hZGRyKCgoaW5zbj4+MjUpJjB4MWYpLCByZWdzKTsKKwkJCWVyciA9IGRvX2ludF9sb2FkKHJlZ19hZGRyLCBzaXplLAorCQkJCQkgICh1bnNpZ25lZCBsb25nICopIGFkZHIsCisJCQkJCSAgZGVjb2RlX3NpZ25lZG5lc3MoaW5zbiksIGFzaSk7CisJCQlpZiAobGlrZWx5KCFlcnIpICYmIHVubGlrZWx5KGFzaSAhPSBvcmlnX2FzaSkpIHsKKwkJCQl1bnNpZ25lZCBsb25nIHZhbF9pbiA9ICpyZWdfYWRkcjsKKwkJCQlzd2l0Y2ggKHNpemUpIHsKKwkJCQljYXNlIDI6CisJCQkJCXZhbF9pbiA9IHN3YWIxNih2YWxfaW4pOworCQkJCQlicmVhazsKKwkJCQljYXNlIDQ6CisJCQkJCXZhbF9pbiA9IHN3YWIzMih2YWxfaW4pOworCQkJCQlicmVhazsKKwkJCQljYXNlIDg6CisJCQkJCXZhbF9pbiA9IHN3YWI2NCh2YWxfaW4pOworCQkJCQlicmVhazsKKwkJCQljYXNlIDE2OgorCQkJCWRlZmF1bHQ6CisJCQkJCUJVRygpOworCQkJCQlicmVhazsKKwkJCQl9OworCQkJCSpyZWdfYWRkciA9IHZhbF9pbjsKKwkJCX0KIAkJCWJyZWFrOwogCiAJCWNhc2Ugc3RvcmU6Ci0JCQlkb19pbnRfc3RvcmUoKChpbnNuPj4yNSkmMHgxZiksIHNpemUsCi0JCQkJICAgICAodW5zaWduZWQgbG9uZyAqKSBhZGRyLCByZWdzLAotCQkJCSAgICAgZGVjb2RlX2FzaShpbnNuLCByZWdzKSk7CisJCQllcnIgPSBkb19pbnRfc3RvcmUoKChpbnNuPj4yNSkmMHgxZiksIHNpemUsCisJCQkJCSAgICh1bnNpZ25lZCBsb25nICopIGFkZHIsIHJlZ3MsCisJCQkJCSAgIGFzaSwgb3JpZ19hc2kpOwogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKIAkJCXBhbmljKCJJbXBvc3NpYmxlIGtlcm5lbCB1bmFsaWduZWQgdHJhcC4iKTsKIAkJCS8qIE5vdCByZWFjaGVkLi4uICovCiAJCX0KLQkJYWR2YW5jZShyZWdzKTsKKwkJaWYgKHVubGlrZWx5KGVycikpCisJCQlrZXJuZWxfbW5hX3RyYXBfZmF1bHQoKTsKKwkJZWxzZQorCQkJYWR2YW5jZShyZWdzKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdXMzX2NwdWZyZXEuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdXMzX2NwdWZyZXEuYwppbmRleCA5MDgwZTdjLi4wMzQwMDQxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3VzM19jcHVmcmVxLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC91czNfY3B1ZnJlcS5jCkBAIC0yMDgsNyArMjA4LDEwIEBACiAJaW1wbCAgPSAoKHZlciA+PiAzMikgJiAweGZmZmYpOwogCiAJaWYgKG1hbnVmID09IENIRUVUQUhfTUFOVUYgJiYKLQkgICAgKGltcGwgPT0gQ0hFRVRBSF9JTVBMIHx8IGltcGwgPT0gQ0hFRVRBSF9QTFVTX0lNUEwpKSB7CisJICAgIChpbXBsID09IENIRUVUQUhfSU1QTCB8fAorCSAgICAgaW1wbCA9PSBDSEVFVEFIX1BMVVNfSU1QTCB8fAorCSAgICAgaW1wbCA9PSBKQUdVQVJfSU1QTCB8fAorCSAgICAgaW1wbCA9PSBQQU5USEVSX0lNUEwpKSB7CiAJCXN0cnVjdCBjcHVmcmVxX2RyaXZlciAqZHJpdmVyOwogCiAJCXJldCA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggZjQ3ZDBiZS4uMmFmMGNmMCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtOSw4ICs5LDcgQEAKIGppZmZpZXMgPSBqaWZmaWVzXzY0OwogU0VDVElPTlMKIHsKLSAgc3dhcHBlcl9wbWRfZGlyID0gMHgwMDAwMDAwMDAwNDAyMDAwOwotICBlbXB0eV9wZ19kaXIgPSAweDAwMDAwMDAwMDA0MDMwMDA7CisgIHN3YXBwZXJfbG93X3BtZF9kaXIgPSAweDAwMDAwMDAwMDA0MDIwMDA7CiAgIC4gPSAweDQwMDA7CiAgIC50ZXh0IDB4MDAwMDAwMDAwMDQwNDAwMCA6CiAgIHsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvd2luZml4dXAuUyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvd2luZml4dXAuUwppbmRleCA5OWM4MDlhLi4zOTE2MDkyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3dpbmZpeHVwLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC93aW5maXh1cC5TCkBAIC0xNiwyMyArMTYsMTQgQEAKIAkudGV4dAogCiBzZXRfcGNvbnRleHQ6Ci1jcGx1c193aW5maXh1cF9pbnNuXzE6Ci0Jc2V0aGkJJWhpKDApLCAlbDEKKwlzZXRoaQklaGkoc3BhcmM2NF9rZXJuX3ByaV9jb250ZXh0KSwgJWwxCisJbGR4CVslbDEgKyAlbG8oc3BhcmM2NF9rZXJuX3ByaV9jb250ZXh0KV0sICVsMQogCW1vdglQUklNQVJZX0NPTlRFWFQsICVnMQotCXNsbHgJJWwxLCAzMiwgJWwxCi1jcGx1c193aW5maXh1cF9pbnNuXzI6Ci0Jc2V0aGkJJWhpKDApLCAlZzIKLQlvcgklbDEsICVnMiwgJWwxCiAJc3R4YQklbDEsIFslZzFdIEFTSV9ETU1VCiAJZmx1c2gJJWc2CiAJcmV0bAogCSBub3AKIAotY3BsdXNfd2ZpbnNuXzE6Ci0Jc2V0aGkJJXVoaShDVFhfQ0hFRVRBSF9QTFVTX05VQyksICVsMQotY3BsdXNfd2ZpbnNuXzI6Ci0Jc2V0aGkJJWhpKENUWF9DSEVFVEFIX1BMVVNfQ1RYMCksICVnMgotCiAJLmFsaWduCTMyCiAKIAkvKiBIZXJlIGFyZSB0aGUgcnVsZXMsIHBheSBhdHRlbnRpb24uCkBAIC0zOTUsMjMgKzM4NiwzIEBACiAJIGFkZAkJJXNwLCBQVFJFR1NfT0ZGLCAlbzAKIAliYSxwdAkJJXhjYywgcnRyYXAKIAkgY2xyCQklbDYKLQkKLQotCS5nbG9ibAkJY2hlZXRhaF9wbHVzX3BhdGNoX3dpbmZpeHVwCi1jaGVldGFoX3BsdXNfcGF0Y2hfd2luZml4dXA6Ci0Jc2V0aGkJCQklaGkoY3BsdXNfd2ZpbnNuXzEpLCAlbzAKLQlzZXRoaQkJCSVoaShjcGx1c193aW5maXh1cF9pbnNuXzEpLCAlbzIKLQlsZHV3CQkJWyVvMCArICVsbyhjcGx1c193Zmluc25fMSldLCAlbzEKLQlvcgkJCSVvMiwgJWxvKGNwbHVzX3dpbmZpeHVwX2luc25fMSksICVvMgotCXN0dwkJCSVvMSwgWyVvMl0KLQlmbHVzaAkJCSVvMgotCi0Jc2V0aGkJCQklaGkoY3BsdXNfd2ZpbnNuXzIpLCAlbzAKLQlzZXRoaQkJCSVoaShjcGx1c193aW5maXh1cF9pbnNuXzIpLCAlbzIKLQlsZHV3CQkJWyVvMCArICVsbyhjcGx1c193Zmluc25fMildLCAlbzEKLQlvcgkJCSVvMiwgJWxvKGNwbHVzX3dpbmZpeHVwX2luc25fMiksICVvMgotCXN0dwkJCSVvMSwgWyVvMl0KLQlmbHVzaAkJCSVvMgotCi0JcmV0bAotCSBub3AKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvTWFrZWZpbGUgYi9hcmNoL3NwYXJjNjQvbGliL01ha2VmaWxlCmluZGV4IGQ5NjhhZWIuLmMyOTU4MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC9zcGFyYzY0L2xpYi9NYWtlZmlsZQpAQCAtMTQsNiArMTQsNCBAQAogCSBjb3B5X2luX3VzZXIubyB1c2VyX2ZpeHVwLm8gbWVtbW92ZS5vIFwKIAkgbWNvdW50Lm8gaXBjc3VtLm8gcndzZW0ubyB4b3IubyBmaW5kX2JpdC5vIGRlbGF5Lm8KIAotbGliLSQoQ09ORklHX0hBVkVfREVDX0xPQ0spICs9IGRlY19hbmRfbG9jay5vCi0KIG9iai15ICs9IGlvbWFwLm8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvVklTc2F2ZS5TIGIvYXJjaC9zcGFyYzY0L2xpYi9WSVNzYXZlLlMKaW5kZXggNGUxODk4OS4uYTBkZWQ1YyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2xpYi9WSVNzYXZlLlMKKysrIGIvYXJjaC9zcGFyYzY0L2xpYi9WSVNzYXZlLlMKQEAgLTU5LDE1ICs1OSwxNyBAQAogCWJlLHBuCQklaWNjLCA5YgogCSBhZGQJCSVnNiwgVElfRlBSRUdTLCAlZzIKIAlhbmRjYwkJJW81LCBGUFJTX0RMLCAlZzAKLQltZW1iYXIJCSNTdG9yZVN0b3JlIHwgI0xvYWRTdG9yZQogCiAJYmUscG4JCSVpY2MsIDRmCiAJIGFkZAkJJWc2LCBUSV9GUFJFR1MrMHg0MCwgJWczCisJbWVtYmFyCQkjU3luYwogCXN0ZGEJCSVmMCwgWyVnMiArICVnMV0gQVNJX0JMS19QCiAJc3RkYQkJJWYxNiwgWyVnMyArICVnMV0gQVNJX0JMS19QCisJbWVtYmFyCQkjU3luYwogCWFuZGNjCQklbzUsIEZQUlNfRFUsICVnMAogCWJlLHBuCQklaWNjLCA1ZgogNDoJIGFkZAkJJWcxLCAxMjgsICVnMQorCW1lbWJhcgkJI1N5bmMKIAlzdGRhCQklZjMyLCBbJWcyICsgJWcxXSBBU0lfQkxLX1AKIAogCXN0ZGEJCSVmNDgsIFslZzMgKyAlZzFdIEFTSV9CTEtfUApAQCAtODcsNyArODksNyBAQAogCXNsbAkJJWcxLCA1LCAlZzEKIAlhZGQJCSVnNiwgVElfRlBSRUdTKzB4YzAsICVnMwogCXdyCQklZzAsIEZQUlNfRkVGLCAlZnBycwotCW1lbWJhcgkJI1N0b3JlU3RvcmUgfCAjTG9hZFN0b3JlCisJbWVtYmFyCQkjU3luYwogCXN0ZGEJCSVmMzIsIFslZzIgKyAlZzFdIEFTSV9CTEtfUAogCXN0ZGEJCSVmNDgsIFslZzMgKyAlZzFdIEFTSV9CTEtfUAogCW1lbWJhcgkJI1N5bmMKQEAgLTEyOCw4ICsxMzAsOCBAQAogCWJlLHBuCQklaWNjLCA0ZgogCSBhZGQJCSVnNiwgVElfRlBSRUdTLCAlZzIKIAotCW1lbWJhcgkJI1N0b3JlU3RvcmUgfCAjTG9hZFN0b3JlCiAJYWRkCQklZzYsIFRJX0ZQUkVHUysweDQwLCAlZzMKKwltZW1iYXIJCSNTeW5jCiAJc3RkYQkJJWYwLCBbJWcyICsgJWcxXSBBU0lfQkxLX1AKIAlzdGRhCQklZjE2LCBbJWczICsgJWcxXSBBU0lfQkxLX1AKIAltZW1iYXIJCSNTeW5jCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL2RlY19hbmRfbG9jay5TIGIvYXJjaC9zcGFyYzY0L2xpYi9kZWNfYW5kX2xvY2suUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVlMjg4ZC4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjNjQvbGliL2RlY19hbmRfbG9jay5TCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyogJElkOiBkZWNfYW5kX2xvY2suUyx2IDEuNSAyMDAxLzExLzE4IDAwOjEyOjU2IGRhdmVtIEV4cCAkCi0gKiBkZWNfYW5kX2xvY2suUzogU3BhcmM2NCB2ZXJzaW9uIG9mICJhdG9taWNfZGVjX2FuZF9sb2NrKCkiCi0gKiAgICAgICAgICAgICAgICAgdXNpbmcgY2FzIGFuZCBsZHN0dWIgaW5zdHJ1Y3Rpb25zLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KLQotCS50ZXh0Ci0JLmFsaWduCTY0Ci0KLQkvKiBDQVMgYmFzaWNhbGx5IHdvcmtzIGxpa2UgdGhpczoKLQkgKgotCSAqIHZvaWQgQ0FTKE1FTSwgUkVHMSwgUkVHMikKLQkgKiB7Ci0JICogICBTVEFSVF9BVE9NSUMoKTsKLQkgKiAgIGlmICgqKE1FTSkgPT0gUkVHMSkgewotCSAqICAgICBUTVAgPSAqKE1FTSk7Ci0JICogICAgICooTUVNKSA9IFJFRzI7Ci0JICogICAgIFJFRzIgPSBUTVA7Ci0JICogICB9IGVsc2UKLQkgKiAgICAgUkVHMiA9ICooTUVNKTsKLQkgKiAgIEVORF9BVE9NSUMoKTsKLQkgKiB9Ci0JICovCi0KLQkuZ2xvYmwJX2F0b21pY19kZWNfYW5kX2xvY2sKLV9hdG9taWNfZGVjX2FuZF9sb2NrOgkvKiAlbzAgPSBjb3VudGVyLCAlbzEgPSBsb2NrICovCi1sb29wMToJbGR1dwlbJW8wXSwgJWcyCi0Jc3ViY2MJJWcyLCAxLCAlZzcKLQliZSxwbgklaWNjLCBzdGFydF90b196ZXJvCi0JIG5vcAotbnplcm86CWNhcwlbJW8wXSwgJWcyLCAlZzcKLQljbXAJJWcyLCAlZzcKLQlibmUscG4JJWljYywgbG9vcDEKLQkgbW92CTAsICVnMQotCi1vdXQ6Ci0JbWVtYmFyCSNTdG9yZUxvYWQgfCAjU3RvcmVTdG9yZQotCXJldGwKLQkgbW92CSVnMSwgJW8wCi1zdGFydF90b196ZXJvOgotI2lmZGVmIENPTkZJR19QUkVFTVBUCi0JbGRzdwlbJWc2ICsgVElfUFJFX0NPVU5UXSwgJWczCi0JYWRkCSVnMywgMSwgJWczCi0Jc3R3CSVnMywgWyVnNiArIFRJX1BSRV9DT1VOVF0KLSNlbmRpZgotdG9femVybzoKLQlsZHN0dWIJWyVvMV0sICVnMwotCW1lbWJhcgkjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmUKLQlicm56LHBuCSVnMywgc3Bpbl9vbl9sb2NrCi0JIG5vcAotbG9vcDI6CWNhcwlbJW8wXSwgJWcyLCAlZzcJCS8qIEFTU0VSVChnNyA9PSAwKSAqLwotCWNtcAklZzIsICVnNwotCi0JYmUscHQJJWljYywgb3V0Ci0JIG1vdgkxLCAlZzEKLQlsZHV3CVslbzBdLCAlZzIKLQlzdWJjYwklZzIsIDEsICVnNwotCWJlLHBuCSVpY2MsIGxvb3AyCi0JIG5vcAotCW1lbWJhcgkjU3RvcmVTdG9yZSB8ICNMb2FkU3RvcmUKLQlzdGIJJWcwLCBbJW8xXQotI2lmZGVmIENPTkZJR19QUkVFTVBUCi0JbGRzdwlbJWc2ICsgVElfUFJFX0NPVU5UXSwgJWczCi0Jc3ViCSVnMywgMSwgJWczCi0Jc3R3CSVnMywgWyVnNiArIFRJX1BSRV9DT1VOVF0KLSNlbmRpZgotCi0JYixwdAkleGNjLCBuemVybwotCSBub3AKLXNwaW5fb25fbG9jazoKLQlsZHViCVslbzFdLCAlZzMKLQltZW1iYXIJI0xvYWRMb2FkCi0JYnJueixwdAklZzMsIHNwaW5fb25fbG9jawotCSBub3AKLQliYSxwdAkleGNjLCB0b196ZXJvCi0JIG5vcAotCW5vcApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2xpYi9zdHJuY3B5X2Zyb21fdXNlci5TIGIvYXJjaC9zcGFyYzY0L2xpYi9zdHJuY3B5X2Zyb21fdXNlci5TCmluZGV4IDA5Y2JiYWEuLmUxMjY0NjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9saWIvc3RybmNweV9mcm9tX3VzZXIuUworKysgYi9hcmNoL3NwYXJjNjQvbGliL3N0cm5jcHlfZnJvbV91c2VyLlMKQEAgLTEyNSwxNSArMTI1LDExIEBACiAJIGFkZAklbzIsICVvMywgJW8wCiAJLnNpemUJX19zdHJuY3B5X2Zyb21fdXNlciwgLi1fX3N0cm5jcHlfZnJvbV91c2VyCiAKLQkuc2VjdGlvbiAuZml4dXAsI2FsbG9jLCNleGVjaW5zdHIKLQkuYWxpZ24JNAotNDoJcmV0bAotCSBtb3YJLUVGQVVMVCwgJW8wCi0KIAkuc2VjdGlvbiBfX2V4X3RhYmxlLCNhbGxvYwogCS5hbGlnbgk0Ci0JLndvcmQJNjBiLCA0YgotCS53b3JkCTYxYiwgNGIKLQkud29yZAk2MmIsIDRiCi0JLndvcmQJNjNiLCA0YgotCS53b3JkCTY0YiwgNGIKKwkud29yZAk2MGIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAk2MWIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAk2MmIsIF9fcmV0bF9lZmF1bHQKKwkud29yZAk2M2IsIF9fcmV0bF9lZmF1bHQKKwkud29yZAk2NGIsIF9fcmV0bF9lZmF1bHQKKwkucHJldmlvdXMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvdXNlcl9maXh1cC5jIGIvYXJjaC9zcGFyYzY0L2xpYi91c2VyX2ZpeHVwLmMKaW5kZXggMDI3OGUzNC4uMTlkMWZkYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2xpYi91c2VyX2ZpeHVwLmMKKysrIGIvYXJjaC9zcGFyYzY0L2xpYi91c2VyX2ZpeHVwLmMKQEAgLTExLDYxICsxMSw1NiBAQAogCiAvKiBDYWxjdWxhdGluZyB0aGUgZXhhY3QgZmF1bHQgYWRkcmVzcyB3aGVuIHVzaW5nCiAgKiBibG9jayBsb2FkcyBhbmQgc3RvcmVzIGNhbiBiZSB2ZXJ5IGNvbXBsaWNhdGVkLgorICoKICAqIEluc3RlYWQgb2YgdHJ5aW5nIHRvIGJlIGNsZXZlciBhbmQgaGFuZGxpbmcgYWxsCiAgKiBvZiB0aGUgY2FzZXMsIGp1c3QgZml4IHRoaW5ncyB1cCBzaW1wbHkgaGVyZS4KICAqLwogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjb21wdXRlX3NpemUodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nICpvZmZzZXQpCit7CisJdW5zaWduZWQgbG9uZyBmYXVsdF9hZGRyID0gY3VycmVudF90aHJlYWRfaW5mbygpLT5mYXVsdF9hZGRyZXNzOworCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBzaXplOworCisJaWYgKGZhdWx0X2FkZHIgPCBzdGFydCB8fCBmYXVsdF9hZGRyID49IGVuZCkgeworCQkqb2Zmc2V0ID0gMDsKKwl9IGVsc2UgeworCQkqb2Zmc2V0ID0gc3RhcnQgLSBmYXVsdF9hZGRyOworCQlzaXplID0gZW5kIC0gZmF1bHRfYWRkcjsKKwl9CisJcmV0dXJuIHNpemU7Cit9CisKIHVuc2lnbmVkIGxvbmcgY29weV9mcm9tX3VzZXJfZml4dXAodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0JY2hhciAqZHN0ID0gdG87Ci0JY29uc3QgY2hhciBfX3VzZXIgKnNyYyA9IGZyb207CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CiAKLQl3aGlsZSAoc2l6ZSkgewotCQlpZiAoX19nZXRfdXNlcigqZHN0LCBzcmMpKQotCQkJYnJlYWs7Ci0JCWRzdCsrOwotCQlzcmMrKzsKLQkJc2l6ZS0tOwotCX0KLQotCWlmIChzaXplKQotCQltZW1zZXQoZHN0LCAwLCBzaXplKTsKKwlzaXplID0gY29tcHV0ZV9zaXplKCh1bnNpZ25lZCBsb25nKSBmcm9tLCBzaXplLCAmb2Zmc2V0KTsKKwlpZiAobGlrZWx5KHNpemUpKQorCQltZW1zZXQodG8gKyBvZmZzZXQsIDAsIHNpemUpOwogCiAJcmV0dXJuIHNpemU7CiB9CiAKIHVuc2lnbmVkIGxvbmcgY29weV90b191c2VyX2ZpeHVwKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBzaXplKQogewotCWNoYXIgX191c2VyICpkc3QgPSB0bzsKLQljb25zdCBjaGFyICpzcmMgPSBmcm9tOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogCi0Jd2hpbGUgKHNpemUpIHsKLQkJaWYgKF9fcHV0X3VzZXIoKnNyYywgZHN0KSkKLQkJCWJyZWFrOwotCQlkc3QrKzsKLQkJc3JjKys7Ci0JCXNpemUtLTsKLQl9Ci0KLQlyZXR1cm4gc2l6ZTsKKwlyZXR1cm4gY29tcHV0ZV9zaXplKCh1bnNpZ25lZCBsb25nKSB0bywgc2l6ZSwgJm9mZnNldCk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgY29weV9pbl91c2VyX2ZpeHVwKHZvaWQgX191c2VyICp0bywgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKLQljaGFyIF9fdXNlciAqZHN0ID0gdG87Ci0JY2hhciBfX3VzZXIgKnNyYyA9IGZyb207CisJdW5zaWduZWQgbG9uZyBmYXVsdF9hZGRyID0gY3VycmVudF90aHJlYWRfaW5mbygpLT5mYXVsdF9hZGRyZXNzOworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSAodW5zaWduZWQgbG9uZykgdG87CisJdW5zaWduZWQgbG9uZyBlbmQgPSBzdGFydCArIHNpemU7CiAKLQl3aGlsZSAoc2l6ZSkgewotCQljaGFyIHRtcDsKKwlpZiAoZmF1bHRfYWRkciA+PSBzdGFydCAmJiBmYXVsdF9hZGRyIDwgZW5kKQorCQlyZXR1cm4gZW5kIC0gZmF1bHRfYWRkcjsKIAotCQlpZiAoX19nZXRfdXNlcih0bXAsIHNyYykpCi0JCQlicmVhazsKLQkJaWYgKF9fcHV0X3VzZXIodG1wLCBkc3QpKQotCQkJYnJlYWs7Ci0JCWRzdCsrOwotCQlzcmMrKzsKLQkJc2l6ZS0tOwotCX0KKwlzdGFydCA9ICh1bnNpZ25lZCBsb25nKSBmcm9tOworCWVuZCA9IHN0YXJ0ICsgc2l6ZTsKKwlpZiAoZmF1bHRfYWRkciA+PSBzdGFydCAmJiBmYXVsdF9hZGRyIDwgZW5kKQorCQlyZXR1cm4gZW5kIC0gZmF1bHRfYWRkcjsKIAogCXJldHVybiBzaXplOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L21tL01ha2VmaWxlIGIvYXJjaC9zcGFyYzY0L21tL01ha2VmaWxlCmluZGV4IGNkYTg3MzMuLjlkMDk2MGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9tbS9NYWtlZmlsZQorKysgYi9hcmNoL3NwYXJjNjQvbW0vTWFrZWZpbGUKQEAgLTUsNiArNSw2IEBACiBFWFRSQV9BRkxBR1MgOj0gLWFuc2kKIEVYVFJBX0NGTEFHUyA6PSAtV2Vycm9yCiAKLW9iai15ICAgIDo9IHVsdHJhLm8gdGxiLm8gZmF1bHQubyBpbml0Lm8gZ2VuZXJpYy5vIGV4dGFibGUubworb2JqLXkgICAgOj0gdWx0cmEubyB0bGIubyBmYXVsdC5vIGluaXQubyBnZW5lcmljLm8KIAogb2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSkgKz0gaHVnZXRsYnBhZ2UubwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L21tL2V4dGFibGUuYyBiL2FyY2gvc3BhcmM2NC9tbS9leHRhYmxlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjMzM0MjkuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYzY0L21tL2V4dGFibGUuYworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL3NwYXJjNjQvbW0vZXh0YWJsZS5jCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLWV4dGVybiBjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5IF9fc3RhcnRfX19leF90YWJsZVtdOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgX19zdG9wX19fZXhfdGFibGVbXTsKLQotdm9pZCBzb3J0X2V4dGFibGUoc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqc3RhcnQsCi0JCSAgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZmluaXNoKQotewotfQotCi0vKiBDYWxsZXIga25vd3MgdGhleSBhcmUgaW4gYSByYW5nZSBpZiByZXQtPmZpeHVwID09IDAgKi8KLWNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKgotc2VhcmNoX2V4dGFibGUoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqc3RhcnQsCi0JICAgICAgIGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmxhc3QsCi0JICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsdWUpCi17Ci0JY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqd2FsazsKLQotCS8qIFNpbmdsZSBpbnNuIGVudHJpZXMgYXJlIGVuY29kZWQgYXM6Ci0JICoJd29yZCAxOglpbnNuIGFkZHJlc3MKLQkgKgl3b3JkIDI6CWZpeHVwIGNvZGUgYWRkcmVzcwotCSAqCi0JICogUmFuZ2UgZW50cmllcyBhcmUgZW5jb2RlZCBhczoKLQkgKgl3b3JkIDE6IGZpcnN0IGluc24gYWRkcmVzcwotCSAqCXdvcmQgMjogMAotCSAqCXdvcmQgMzogbGFzdCBpbnNuIGFkZHJlc3MgKyA0IGJ5dGVzCi0JICoJd29yZCA0OiBmaXh1cCBjb2RlIGFkZHJlc3MKLQkgKgotCSAqIFNlZSBhc20vdWFjY2Vzcy5oIGZvciBtb3JlIGRldGFpbHMuCi0JICovCi0KLQkvKiAxLiBUcnkgdG8gZmluZCBhbiBleGFjdCBtYXRjaC4gKi8KLQlmb3IgKHdhbGsgPSBzdGFydDsgd2FsayA8PSBsYXN0OyB3YWxrKyspIHsKLQkJaWYgKHdhbGstPmZpeHVwID09IDApIHsKLQkJCS8qIEEgcmFuZ2UgZW50cnksIHNraXAgYm90aCBwYXJ0cy4gKi8KLQkJCXdhbGsrKzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKHdhbGstPmluc24gPT0gdmFsdWUpCi0JCQlyZXR1cm4gd2FsazsKLQl9Ci0KLQkvKiAyLiBUcnkgdG8gZmluZCBhIHJhbmdlIG1hdGNoLiAqLwotCWZvciAod2FsayA9IHN0YXJ0OyB3YWxrIDw9IChsYXN0IC0gMSk7IHdhbGsrKykgewotCQlpZiAod2Fsay0+Zml4dXApCi0JCQljb250aW51ZTsKLQotCQlpZiAod2Fsa1swXS5pbnNuIDw9IHZhbHVlICYmIHdhbGtbMV0uaW5zbiA+IHZhbHVlKQotCQkJcmV0dXJuIHdhbGs7Ci0KLQkJd2FsaysrOwotCX0KLQotICAgICAgICByZXR1cm4gTlVMTDsKLX0KLQotLyogU3BlY2lhbCBleHRhYmxlIHNlYXJjaCwgd2hpY2ggaGFuZGxlcyByYW5nZXMuICBSZXR1cm5zIGZpeHVwICovCi11bnNpZ25lZCBsb25nIHNlYXJjaF9leHRhYmxlc19yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgKmcyKQotewotCWNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmVudHJ5OwotCi0JZW50cnkgPSBzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhhZGRyKTsKLQlpZiAoIWVudHJ5KQotCQlyZXR1cm4gMDsKLQotCS8qIEluc2lkZSByYW5nZT8gIEZpeCBnMiBhbmQgcmV0dXJuIGNvcnJlY3QgZml4dXAgKi8KLQlpZiAoIWVudHJ5LT5maXh1cCkgewotCQkqZzIgPSAoYWRkciAtIGVudHJ5LT5pbnNuKSAvIDQ7Ci0JCXJldHVybiAoZW50cnkgKyAxKS0+Zml4dXA7Ci0JfQotCi0JcmV0dXJuIGVudHJ5LT5maXh1cDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9tbS9mYXVsdC5jIGIvYXJjaC9zcGFyYzY0L21tL2ZhdWx0LmMKaW5kZXggZGIxZTMzMS4uMzFmYmM2NyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L21tL2ZhdWx0LmMKKysrIGIvYXJjaC9zcGFyYzY0L21tL2ZhdWx0LmMKQEAgLTMyLDggKzMyLDYgQEAKIAogI2RlZmluZSBFTEVNRU5UUyhhcnIpIChzaXplb2YgKGFycikvc2l6ZW9mIChhcnJbMF0pKQogCi1leHRlcm4gc3RydWN0IHNwYXJjX3BoeXNfYmFua3Mgc3BfYmFua3NbU1BBUkNfUEhZU19CQU5LU107Ci0KIC8qCiAgKiBUbyBkZWJ1ZyBrZXJuZWwgdG8gY2F0Y2ggYWNjZXNzZXMgdG8gY2VydGFpbiB2aXJ0dWFsL3BoeXNpY2FsIGFkZHJlc3Nlcy4KICAqIE1vZGUgPSAwIHNlbGVjdHMgcGh5c2ljYWwgd2F0Y2hwb2ludHMsIG1vZGUgPSAxIHNlbGVjdHMgdmlydHVhbCB3YXRjaHBvaW50cy4KQEAgLTcxLDUzICs2OSw2IEBACiAJCQkgICAgIDogIm1lbW9yeSIpOwogfQogCi0vKiBOaWNlLCBzaW1wbGUsIHByb20gbGlicmFyeSBkb2VzIGFsbCB0aGUgc3dlYXRpbmcgZm9yIHVzLiA7KSAqLwotdW5zaWduZWQgbG9uZyBfX2luaXQgcHJvbV9wcm9iZV9tZW1vcnkgKHZvaWQpCi17Ci0JcmVnaXN0ZXIgc3RydWN0IGxpbnV4X21saXN0X3AxMjc1ICptbGlzdDsKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGJ5dGVzLCBiYXNlX3BhZGRyLCB0YWxseTsKLQlyZWdpc3RlciBpbnQgaTsKLQotCWkgPSAwOwotCW1saXN0ID0gKnByb21fbWVtaW5mbygpLT5wMTI3NV9hdmFpbGFibGU7Ci0JYnl0ZXMgPSB0YWxseSA9IG1saXN0LT5udW1fYnl0ZXM7Ci0JYmFzZV9wYWRkciA9IG1saXN0LT5zdGFydF9hZHI7Ci0gIAotCXNwX2JhbmtzWzBdLmJhc2VfYWRkciA9IGJhc2VfcGFkZHI7Ci0Jc3BfYmFua3NbMF0ubnVtX2J5dGVzID0gYnl0ZXM7Ci0KLQl3aGlsZSAobWxpc3QtPnRoZXJlc19tb3JlICE9ICh2b2lkICopIDApIHsKLQkJaSsrOwotCQltbGlzdCA9IG1saXN0LT50aGVyZXNfbW9yZTsKLQkJYnl0ZXMgPSBtbGlzdC0+bnVtX2J5dGVzOwotCQl0YWxseSArPSBieXRlczsKLQkJaWYgKGkgPj0gU1BBUkNfUEhZU19CQU5LUy0xKSB7Ci0JCQlwcmludGsgKCJUaGUgbWFjaGluZSBoYXMgbW9yZSBiYW5rcyB0aGFuICIKLQkJCQkidGhpcyBrZXJuZWwgY2FuIHN1cHBvcnRcbiIKLQkJCQkiSW5jcmVhc2UgdGhlIFNQQVJDX1BIWVNfQkFOS1MgIgotCQkJCSJzZXR0aW5nIChjdXJyZW50bHkgJWQpXG4iLAotCQkJCVNQQVJDX1BIWVNfQkFOS1MpOwotCQkJaSA9IFNQQVJDX1BIWVNfQkFOS1MtMTsKLQkJCWJyZWFrOwotCQl9Ci0gICAgCi0JCXNwX2JhbmtzW2ldLmJhc2VfYWRkciA9IG1saXN0LT5zdGFydF9hZHI7Ci0JCXNwX2JhbmtzW2ldLm51bV9ieXRlcyA9IG1saXN0LT5udW1fYnl0ZXM7Ci0JfQotCi0JaSsrOwotCXNwX2JhbmtzW2ldLmJhc2VfYWRkciA9IDB4ZGVhZGJlZWZiZWVmZGVhZFVMOwotCXNwX2JhbmtzW2ldLm51bV9ieXRlcyA9IDA7Ci0KLQkvKiBOb3cgbWFzayBhbGwgYmFuayBzaXplcyBvbiBhIHBhZ2UgYm91bmRhcnksIGl0IGlzIGFsbCB3ZSBjYW4KLQkgKiB1c2UgYW55d2F5cy4KLQkgKi8KLQlmb3IgKGkgPSAwOyBzcF9iYW5rc1tpXS5udW1fYnl0ZXMgIT0gMDsgaSsrKQotCQlzcF9iYW5rc1tpXS5udW1fYnl0ZXMgJj0gUEFHRV9NQVNLOwotCi0JcmV0dXJuIHRhbGx5OwotfQotCiBzdGF0aWMgdm9pZCBfX2twcm9iZXMgdW5oYW5kbGVkX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAkJCQkgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKIAkJCQkgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKQEAgLTI0Miw3ICsxOTMsNiBAQAogc3RhdGljIHZvaWQgZG9fa2VybmVsX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2lfY29kZSwgaW50IGZhdWx0X2NvZGUsCiAJCQkgICAgdW5zaWduZWQgaW50IGluc24sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQl1bnNpZ25lZCBsb25nIGcyOwogCXVuc2lnbmVkIGNoYXIgYXNpID0gQVNJX1A7CiAgCiAJaWYgKCghaW5zbikgJiYgKHJlZ3MtPnRzdGF0ZSAmIFRTVEFURV9QUklWKSkKQEAgLTI3MywxMSArMjIzLDkgQEAKIAkJfQogCX0KIAkJCi0JZzIgPSByZWdzLT51X3JlZ3NbVVJFR19HMl07Ci0KIAkvKiBJcyB0aGlzIGluIGV4X3RhYmxlPyAqLwogCWlmIChyZWdzLT50c3RhdGUgJiBUU1RBVEVfUFJJVikgewotCQl1bnNpZ25lZCBsb25nIGZpeHVwOworCQljb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICplbnRyeTsKIAogCQlpZiAoYXNpID09IEFTSV9QICYmIChpbnNuICYgMHhjMDgwMDAwMCkgPT0gMHhjMDgwMDAwMCkgewogCQkJaWYgKGluc24gJiAweDIwMDApCkBAIC0yODgsMTAgKzIzNiw5IEBACiAJCiAJCS8qIExvb2sgaW4gYXNpLmg6IEFsbCBfUyBhc2lzIGhhdmUgTFMgYml0IHNldCAqLwogCQlpZiAoKGFzaSAmIDB4MSkgJiYKLQkJICAgIChmaXh1cCA9IHNlYXJjaF9leHRhYmxlc19yYW5nZShyZWdzLT50cGMsICZnMikpKSB7Ci0JCQlyZWdzLT50cGMgPSBmaXh1cDsKKwkJICAgIChlbnRyeSA9IHNlYXJjaF9leGNlcHRpb25fdGFibGVzKHJlZ3MtPnRwYykpKSB7CisJCQlyZWdzLT50cGMgPSBlbnRyeS0+Zml4dXA7CiAJCQlyZWdzLT50bnBjID0gcmVncy0+dHBjICsgNDsKLQkJCXJlZ3MtPnVfcmVnc1tVUkVHX0cyXSA9IGcyOwogCQkJcmV0dXJuOwogCQl9CiAJfSBlbHNlIHsKQEAgLTQ2MSw3ICs0MDgsNyBAQAogCX0KIAogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JZ290byBmYXVsdF9kb25lOworCXJldHVybjsKIAogCS8qCiAJICogU29tZXRoaW5nIHRyaWVkIHRvIGFjY2VzcyBtZW1vcnkgdGhhdCBpc24ndCBpbiBvdXIgbWVtb3J5IG1hcC4uCkBAIC00NzMsOCArNDIwLDcgQEAKIAogaGFuZGxlX2tlcm5lbF9mYXVsdDoKIAlkb19rZXJuZWxfZmF1bHQocmVncywgc2lfY29kZSwgZmF1bHRfY29kZSwgaW5zbiwgYWRkcmVzcyk7Ci0KLQlnb3RvIGZhdWx0X2RvbmU7CisJcmV0dXJuOwogCiAvKgogICogV2UgcmFuIG91dCBvZiBtZW1vcnksIG9yIHNvbWUgb3RoZXIgdGhpbmcgaGFwcGVuZWQgdG8gdXMgdGhhdCBtYWRlCkBAIC01MDUsOSArNDUxLDQgQEAKIAkvKiBLZXJuZWwgbW9kZT8gSGFuZGxlIGV4Y2VwdGlvbnMgb3IgZGllICovCiAJaWYgKHJlZ3MtPnRzdGF0ZSAmIFRTVEFURV9QUklWKQogCQlnb3RvIGhhbmRsZV9rZXJuZWxfZmF1bHQ7Ci0KLWZhdWx0X2RvbmU6Ci0JLyogVGhlc2UgdmFsdWVzIGFyZSBubyBsb25nZXIgbmVlZGVkLCBjbGVhciB0aGVtLiAqLwotCXNldF90aHJlYWRfZmF1bHRfY29kZSgwKTsKLQljdXJyZW50X3RocmVhZF9pbmZvKCktPmZhdWx0X2FkZHJlc3MgPSAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L21tL2luaXQuYyBiL2FyY2gvc3BhcmM2NC9tbS9pbml0LmMKaW5kZXggZmRiMWViYi4uMWU0NGVlMiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L21tL2luaXQuYworKysgYi9hcmNoL3NwYXJjNjQvbW0vaW5pdC5jCkBAIC0yMCw2ICsyMCw4IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NvcnQuaD4KIAogI2luY2x1ZGUgPGFzbS9oZWFkLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtNDAsMjQgKzQyLDgwIEBACiAKIGV4dGVybiB2b2lkIGRldmljZV9zY2FuKHZvaWQpOwogCi1zdHJ1Y3Qgc3BhcmNfcGh5c19iYW5rcyBzcF9iYW5rc1tTUEFSQ19QSFlTX0JBTktTXTsKKyNkZWZpbmUgTUFYX0JBTktTCTMyCiAKLXVuc2lnbmVkIGxvbmcgKnNwYXJjNjRfdmFsaWRfYWRkcl9iaXRtYXA7CitzdGF0aWMgc3RydWN0IGxpbnV4X3Byb202NF9yZWdpc3RlcnMgcGF2YWlsW01BWF9CQU5LU10gX19pbml0ZGF0YTsKK3N0YXRpYyBzdHJ1Y3QgbGludXhfcHJvbTY0X3JlZ2lzdGVycyBwYXZhaWxfcmVzY2FuW01BWF9CQU5LU10gX19pbml0ZGF0YTsKK3N0YXRpYyBpbnQgcGF2YWlsX2VudHMgX19pbml0ZGF0YTsKK3N0YXRpYyBpbnQgcGF2YWlsX3Jlc2Nhbl9lbnRzIF9faW5pdGRhdGE7CisKK3N0YXRpYyBpbnQgY21wX3A2NChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCWNvbnN0IHN0cnVjdCBsaW51eF9wcm9tNjRfcmVnaXN0ZXJzICp4ID0gYSwgKnkgPSBiOworCisJaWYgKHgtPnBoeXNfYWRkciA+IHktPnBoeXNfYWRkcikKKwkJcmV0dXJuIDE7CisJaWYgKHgtPnBoeXNfYWRkciA8IHktPnBoeXNfYWRkcikKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcmVhZF9vYnBfbWVtb3J5KGNvbnN0IGNoYXIgKnByb3BlcnR5LAorCQkJCSAgIHN0cnVjdCBsaW51eF9wcm9tNjRfcmVnaXN0ZXJzICpyZWdzLAorCQkJCSAgIGludCAqbnVtX2VudHMpCit7CisJaW50IG5vZGUgPSBwcm9tX2ZpbmRkZXZpY2UoIi9tZW1vcnkiKTsKKwlpbnQgcHJvcF9zaXplID0gcHJvbV9nZXRwcm9wbGVuKG5vZGUsIHByb3BlcnR5KTsKKwlpbnQgZW50cywgcmV0LCBpOworCisJZW50cyA9IHByb3Bfc2l6ZSAvIHNpemVvZihzdHJ1Y3QgbGludXhfcHJvbTY0X3JlZ2lzdGVycyk7CisJaWYgKGVudHMgPiBNQVhfQkFOS1MpIHsKKwkJcHJvbV9wcmludGYoIlRoZSBtYWNoaW5lIGhhcyBtb3JlICVzIHByb3BlcnR5IGVudHJpZXMgdGhhbiAiCisJCQkgICAgInRoaXMga2VybmVsIGNhbiBzdXBwb3J0ICglZCkuXG4iLAorCQkJICAgIHByb3BlcnR5LCBNQVhfQkFOS1MpOworCQlwcm9tX2hhbHQoKTsKKwl9CisKKwlyZXQgPSBwcm9tX2dldHByb3BlcnR5KG5vZGUsIHByb3BlcnR5LCAoY2hhciAqKSByZWdzLCBwcm9wX3NpemUpOworCWlmIChyZXQgPT0gLTEpIHsKKwkJcHJvbV9wcmludGYoIkNvdWxkbid0IGdldCAlcyBwcm9wZXJ0eSBmcm9tIC9tZW1vcnkuXG4iKTsKKwkJcHJvbV9oYWx0KCk7CisJfQorCisJKm51bV9lbnRzID0gZW50czsKKworCS8qIFNhbml0aXplIHdoYXQgd2UgZ290IGZyb20gdGhlIGZpcm13YXJlLCBieSBwYWdlIGFsaWduaW5nCisJICogZXZlcnl0aGluZy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZW50czsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgYmFzZSwgc2l6ZTsKKworCQliYXNlID0gcmVnc1tpXS5waHlzX2FkZHI7CisJCXNpemUgPSByZWdzW2ldLnJlZ19zaXplOworCisJCXNpemUgJj0gUEFHRV9NQVNLOworCQlpZiAoYmFzZSAmIH5QQUdFX01BU0spIHsKKwkJCXVuc2lnbmVkIGxvbmcgbmV3X2Jhc2UgPSBQQUdFX0FMSUdOKGJhc2UpOworCisJCQlzaXplIC09IG5ld19iYXNlIC0gYmFzZTsKKwkJCWlmICgobG9uZykgc2l6ZSA8IDBMKQorCQkJCXNpemUgPSAwVUw7CisJCQliYXNlID0gbmV3X2Jhc2U7CisJCX0KKwkJcmVnc1tpXS5waHlzX2FkZHIgPSBiYXNlOworCQlyZWdzW2ldLnJlZ19zaXplID0gc2l6ZTsKKwl9CisJc29ydChyZWdzLCBlbnRzLCBzaXplb2Yoc3RydWN0IGxpbnV4X3Byb202NF9yZWdpc3RlcnMpLAorCSAgICAgY21wX3A2NCwgTlVMTCk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgKnNwYXJjNjRfdmFsaWRfYWRkcl9iaXRtYXAgX19yZWFkX21vc3RseTsKIAogLyogVWdseSwgYnV0IG5lY2Vzc2FyeS4uLiAtRGF2ZU0gKi8KLXVuc2lnbmVkIGxvbmcgcGh5c19iYXNlOwotdW5zaWduZWQgbG9uZyBrZXJuX2Jhc2U7Ci11bnNpZ25lZCBsb25nIGtlcm5fc2l6ZTsKLXVuc2lnbmVkIGxvbmcgcGZuX2Jhc2U7Ci0KLS8qIFRoaXMgaXMgZXZlbiB1Z2xpZXIuIFdlIGhhdmUgYSBwcm9ibGVtIHdoZXJlIHRoZSBrZXJuZWwgbWF5IG5vdCBiZQotICogbG9jYXRlZCBhdCBwaHlzX2Jhc2UuIEhvd2V2ZXIsIGluaXRpYWwgX19hbGxvY19ib290bWVtKCkgY2FsbHMgbmVlZCB0bwotICogYmUgYWRqdXN0ZWQgdG8gYmUgd2l0aGluIHRoZSA0LThNZWdzIHRoYXQgdGhlIGtlcm5lbCBpcyBtYXBwZWQgdG8sIGVsc2UKLSAqIHRob3NlIHBhZ2UgbWFwcGluZ3Mgd29udCB3b3JrLiBUaGluZ3MgYXJlIG9rIGFmdGVyIGluaGVyaXRfcHJvbV9tYXBwaW5ncwotICogaXMgY2FsbGVkIHRob3VnaC4gRGF2ZSBzYXlzIGhlJ2xsIGNsZWFuIHRoaXMgdXAgc29tZSBvdGhlciB0aW1lLgotICogLS0gQmVuQwotICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBib290bWFwX2Jhc2U7Cit1bnNpZ25lZCBsb25nIHBoeXNfYmFzZSBfX3JlYWRfbW9zdGx5OwordW5zaWduZWQgbG9uZyBrZXJuX2Jhc2UgX19yZWFkX21vc3RseTsKK3Vuc2lnbmVkIGxvbmcga2Vybl9zaXplIF9fcmVhZF9tb3N0bHk7Cit1bnNpZ25lZCBsb25nIHBmbl9iYXNlIF9fcmVhZF9tb3N0bHk7CiAKIC8qIGdldF9uZXdfbW11X2NvbnRleHQoKSB1c2VzICJjYWNoZSArIDEiLiAgKi8KIERFRklORV9TUElOTE9DSyhjdHhfYWxsb2NfbG9jayk7CkBAIC03Myw3ICsxMzEsMTMgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgc3BhcmNfcmFtZGlza19pbWFnZTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgc3BhcmNfcmFtZGlza19zaXplOwogCi1zdHJ1Y3QgcGFnZSAqbWVtX21hcF96ZXJvOworc3RydWN0IHBhZ2UgKm1lbV9tYXBfemVybyBfX3JlYWRfbW9zdGx5OworCit1bnNpZ25lZCBpbnQgc3BhcmM2NF9oaWdoZXN0X3VubG9ja2VkX3RsYl9lbnQgX19yZWFkX21vc3RseTsKKwordW5zaWduZWQgbG9uZyBzcGFyYzY0X2tlcm5fcHJpX2NvbnRleHQgX19yZWFkX21vc3RseTsKK3Vuc2lnbmVkIGxvbmcgc3BhcmM2NF9rZXJuX3ByaV9udWNfYml0cyBfX3JlYWRfbW9zdGx5OwordW5zaWduZWQgbG9uZyBzcGFyYzY0X2tlcm5fc2VjX2NvbnRleHQgX19yZWFkX21vc3RseTsKIAogaW50IGJpZ2tlcm5lbCA9IDA7CiAKQEAgLTE3OSw4ICsyNDMsNiBAQAogCQkJICAgICA6ICJnMSIsICJnNyIpOwogfQogCi1leHRlcm4gdm9pZCBfX3VwZGF0ZV9tbXVfY2FjaGUodW5zaWduZWQgbG9uZyBtbXVfY29udGV4dF9odywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUsIGludCBjb2RlKTsKLQogdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKQEAgLTIwNywxMCArMjY5LDYgQEAKIAogCQlwdXRfY3B1KCk7CiAJfQotCi0JaWYgKGdldF90aHJlYWRfZmF1bHRfY29kZSgpKQotCQlfX3VwZGF0ZV9tbXVfY2FjaGUoQ1RYX05SQklUUyh2bWEtPnZtX21tLT5jb250ZXh0KSwKLQkJCQkgICBhZGRyZXNzLCBwdGUsIGdldF90aHJlYWRfZmF1bHRfY29kZSgpKTsKIH0KIAogdm9pZCBmbHVzaF9kY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKQEAgLTMxMCw2ICszNjgsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGRhdGE7CiB9OwogCisvKiBFeHBvcnRlZCBmb3Iga2VybmVsIFRMQiBtaXNzIGhhbmRsaW5nIGluIGt0bGIuUyAqLworc3RydWN0IGxpbnV4X3Byb21fdHJhbnNsYXRpb24gcHJvbV90cmFuc1s1MTJdIF9fcmVhZF9tb3N0bHk7Cit1bnNpZ25lZCBpbnQgcHJvbV90cmFuc19lbnRzIF9fcmVhZF9tb3N0bHk7Cit1bnNpZ25lZCBpbnQgc3dhcHBlcl9wZ2RfemVybyBfX3JlYWRfbW9zdGx5OworCiBleHRlcm4gdW5zaWduZWQgbG9uZyBwcm9tX2Jvb3RfcGFnZTsKIGV4dGVybiB2b2lkIHByb21fcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzcGFnZSwgdW5zaWduZWQgbG9uZyB2aXJ0cGFnZSwgaW50IG1tdV9paGFuZGxlKTsKIGV4dGVybiBpbnQgcHJvbV9nZXRfbW11X2loYW5kbGUodm9pZCk7CkBAIC0zMTgsMjk3ICszODEsMTYyIEBACiAvKiBFeHBvcnRlZCBmb3IgU01QIGJvb3R1cCBwdXJwb3Nlcy4gKi8KIHVuc2lnbmVkIGxvbmcga2Vybl9sb2NrZWRfdHRlX2RhdGE7CiAKLXZvaWQgX19pbml0IGVhcmx5X3BndGFibGVfYWxsb2NmYWlsKGNoYXIgKnR5cGUpCi17Ci0JcHJvbV9wcmludGYoImluaGVyaXRfcHJvbV9tYXBwaW5nczogQ2Fubm90IGFsbG9jIGtlcm5lbCAlcy5cbiIsIHR5cGUpOwotCXByb21faGFsdCgpOwotfQotCi0jZGVmaW5lIEJBU0VfUEFHRV9TSVpFIDgxOTIKLXN0YXRpYyBwbWRfdCAqcHJvbXBtZDsKLQogLyoKICAqIFRyYW5zbGF0ZSBQUk9NJ3MgbWFwcGluZyB3ZSBjYXB0dXJlIGF0IGJvb3QgdGltZSBpbnRvIHBoeXNpY2FsIGFkZHJlc3MuCiAgKiBUaGUgc2Vjb25kIHBhcmFtZXRlciBpcyBvbmx5IHNldCBmcm9tIHByb21fY2FsbGJhY2soKSBpbnZvY2F0aW9ucy4KICAqLwogdW5zaWduZWQgbG9uZyBwcm9tX3ZpcnRfdG9fcGh5cyh1bnNpZ25lZCBsb25nIHByb212YSwgaW50ICplcnJvcikKIHsKLQlwbWRfdCAqcG1kcCA9IHByb21wbWQgKyAoKHByb212YSA+PiAyMykgJiAweDdmZik7Ci0JcHRlX3QgKnB0ZXA7Ci0JdW5zaWduZWQgbG9uZyBiYXNlOworCWludCBpOwogCi0JaWYgKHBtZF9ub25lKCpwbWRwKSkgewotCQlpZiAoZXJyb3IpCi0JCQkqZXJyb3IgPSAxOwotCQlyZXR1cm4oMCk7CisJZm9yIChpID0gMDsgaSA8IHByb21fdHJhbnNfZW50czsgaSsrKSB7CisJCXN0cnVjdCBsaW51eF9wcm9tX3RyYW5zbGF0aW9uICpwID0gJnByb21fdHJhbnNbaV07CisKKwkJaWYgKHByb212YSA+PSBwLT52aXJ0ICYmCisJCSAgICBwcm9tdmEgPCAocC0+dmlydCArIHAtPnNpemUpKSB7CisJCQl1bnNpZ25lZCBsb25nIGJhc2UgPSBwLT5kYXRhICYgX1BBR0VfUEFERFI7CisKKwkJCWlmIChlcnJvcikKKwkJCQkqZXJyb3IgPSAwOworCQkJcmV0dXJuIGJhc2UgKyAocHJvbXZhICYgKDgxOTIgLSAxKSk7CisJCX0KIAl9Ci0JcHRlcCA9IChwdGVfdCAqKV9fcG1kX3BhZ2UoKnBtZHApICsgKChwcm9tdmEgPj4gMTMpICYgMHgzZmYpOwotCWlmICghcHRlX3ByZXNlbnQoKnB0ZXApKSB7Ci0JCWlmIChlcnJvcikKLQkJCSplcnJvciA9IDE7Ci0JCXJldHVybigwKTsKLQl9Ci0JaWYgKGVycm9yKSB7Ci0JCSplcnJvciA9IDA7Ci0JCXJldHVybihwdGVfdmFsKCpwdGVwKSk7Ci0JfQotCWJhc2UgPSBwdGVfdmFsKCpwdGVwKSAmIF9QQUdFX1BBRERSOwotCXJldHVybihiYXNlICsgKHByb212YSAmIChCQVNFX1BBR0VfU0laRSAtIDEpKSk7CisJaWYgKGVycm9yKQorCQkqZXJyb3IgPSAxOworCXJldHVybiAwVUw7CiB9CiAKLXN0YXRpYyB2b2lkIGluaGVyaXRfcHJvbV9tYXBwaW5ncyh2b2lkKQorLyogVGhlIG9icCB0cmFuc2xhdGlvbnMgYXJlIHNhdmVkIGJhc2VkIG9uIDhrIHBhZ2VzaXplLCBzaW5jZSBvYnAgY2FuCisgKiB1c2UgYSBtaXh0dXJlIG9mIHBhZ2VzaXplcy4gTWlzc2VzIHRvIHRoZSBMT1dfT0JQX0FERFJFU1MgLT4KKyAqIEhJX09CUF9BRERSRVNTIHJhbmdlIGFyZSBoYW5kbGVkIGluIGt0bGIuUyBhbmQgZG8gbm90IHVzZSB0aGUgdnB0ZQorICogc2NoZW1lIChhbHNvLCBzZWUgcmFudCBpbiBpbmhlcml0X2xvY2tlZF9wcm9tX21hcHBpbmdzKCkpLgorICovCitzdGF0aWMgaW5saW5lIGludCBpbl9vYnBfcmFuZ2UodW5zaWduZWQgbG9uZyB2YWRkcikKIHsKLQlzdHJ1Y3QgbGludXhfcHJvbV90cmFuc2xhdGlvbiAqdHJhbnM7Ci0JdW5zaWduZWQgbG9uZyBwaHlzX3BhZ2UsIHR0ZV92YWRkciwgdHRlX2RhdGE7Ci0Jdm9pZCAoKnJlbWFwX2Z1bmMpKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGludCk7Ci0JcG1kX3QgKnBtZHA7Ci0JcHRlX3QgKnB0ZXA7Ci0JaW50IG5vZGUsIG4sIGksIHRzejsKLQlleHRlcm4gdW5zaWduZWQgaW50IG9icF9pYWRkcl9wYXRjaFsyXSwgb2JwX2RhZGRyX3BhdGNoWzJdOworCXJldHVybiAodmFkZHIgPj0gTE9XX09CUF9BRERSRVNTICYmCisJCXZhZGRyIDwgSElfT0JQX0FERFJFU1MpOworfQorCitzdGF0aWMgaW50IGNtcF9wdHJhbnMoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljb25zdCBzdHJ1Y3QgbGludXhfcHJvbV90cmFuc2xhdGlvbiAqeCA9IGEsICp5ID0gYjsKKworCWlmICh4LT52aXJ0ID4geS0+dmlydCkKKwkJcmV0dXJuIDE7CisJaWYgKHgtPnZpcnQgPCB5LT52aXJ0KQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKKy8qIFJlYWQgT0JQIHRyYW5zbGF0aW9ucyBwcm9wZXJ0eSBpbnRvICdwcm9tX3RyYW5zW10nLiAgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCByZWFkX29icF90cmFuc2xhdGlvbnModm9pZCkKK3sKKwlpbnQgbiwgbm9kZSwgZW50cywgZmlyc3QsIGxhc3QsIGk7CiAKIAlub2RlID0gcHJvbV9maW5kZGV2aWNlKCIvdmlydHVhbC1tZW1vcnkiKTsKIAluID0gcHJvbV9nZXRwcm9wbGVuKG5vZGUsICJ0cmFuc2xhdGlvbnMiKTsKLQlpZiAobiA9PSAwIHx8IG4gPT0gLTEpIHsKLQkJcHJvbV9wcmludGYoIkNvdWxkbid0IGdldCB0cmFuc2xhdGlvbiBwcm9wZXJ0eVxuIik7CisJaWYgKHVubGlrZWx5KG4gPT0gMCB8fCBuID09IC0xKSkgeworCQlwcm9tX3ByaW50ZigicHJvbV9tYXBwaW5nczogQ291bGRuJ3QgZ2V0IHNpemUuXG4iKTsKIAkJcHJvbV9oYWx0KCk7CiAJfQotCW4gKz0gNSAqIHNpemVvZihzdHJ1Y3QgbGludXhfcHJvbV90cmFuc2xhdGlvbik7Ci0JZm9yICh0c3ogPSAxOyB0c3ogPCBuOyB0c3ogPDw9IDEpCi0JCS8qIGVtcHR5ICovOwotCXRyYW5zID0gX19hbGxvY19ib290bWVtKHRzeiwgU01QX0NBQ0hFX0JZVEVTLCBib290bWFwX2Jhc2UpOwotCWlmICh0cmFucyA9PSBOVUxMKSB7Ci0JCXByb21fcHJpbnRmKCJpbmhlcml0X3Byb21fbWFwcGluZ3M6IENhbm5vdCBhbGxvYyB0cmFuc2xhdGlvbnMuXG4iKTsKKwlpZiAodW5saWtlbHkobiA+IHNpemVvZihwcm9tX3RyYW5zKSkpIHsKKwkJcHJvbV9wcmludGYoInByb21fbWFwcGluZ3M6IFNpemUgJVpkIGlzIHRvbyBiaWcuXG4iLCBuKTsKIAkJcHJvbV9oYWx0KCk7CiAJfQotCW1lbXNldCh0cmFucywgMCwgdHN6KTsKIAotCWlmICgobiA9IHByb21fZ2V0cHJvcGVydHkobm9kZSwgInRyYW5zbGF0aW9ucyIsIChjaGFyICopdHJhbnMsIHRzeikpID09IC0xKSB7Ci0JCXByb21fcHJpbnRmKCJDb3VsZG4ndCBnZXQgdHJhbnNsYXRpb24gcHJvcGVydHlcbiIpOworCWlmICgobiA9IHByb21fZ2V0cHJvcGVydHkobm9kZSwgInRyYW5zbGF0aW9ucyIsCisJCQkJICAoY2hhciAqKSZwcm9tX3RyYW5zWzBdLAorCQkJCSAgc2l6ZW9mKHByb21fdHJhbnMpKSkgPT0gLTEpIHsKKwkJcHJvbV9wcmludGYoInByb21fbWFwcGluZ3M6IENvdWxkbid0IGdldCBwcm9wZXJ0eS5cbiIpOwogCQlwcm9tX2hhbHQoKTsKIAl9Ci0JbiA9IG4gLyBzaXplb2YoKnRyYW5zKTsKIAotCS8qCi0JICogVGhlIG9icCB0cmFuc2xhdGlvbnMgYXJlIHNhdmVkIGJhc2VkIG9uIDhrIHBhZ2VzaXplLCBzaW5jZSBvYnAgY2FuCi0JICogdXNlIGEgbWl4dHVyZSBvZiBwYWdlc2l6ZXMuIE1pc3NlcyB0byB0aGUgMHhmMDAwMDAwMCAtIDB4MTAwMDAwMDAwLAotCSAqIGllIG9icCByYW5nZSwgYXJlIGhhbmRsZWQgaW4gZW50cnkuUyBhbmQgZG8gbm90IHVzZSB0aGUgdnB0ZSBzY2hlbWUKLQkgKiAoc2VlIHJhbnQgaW4gaW5oZXJpdF9sb2NrZWRfcHJvbV9tYXBwaW5ncygpKS4KLQkgKi8KLSNkZWZpbmUgT0JQX1BNRF9TSVpFIDIwNDgKLQlwcm9tcG1kID0gX19hbGxvY19ib290bWVtKE9CUF9QTURfU0laRSwgT0JQX1BNRF9TSVpFLCBib290bWFwX2Jhc2UpOwotCWlmIChwcm9tcG1kID09IE5VTEwpCi0JCWVhcmx5X3BndGFibGVfYWxsb2NmYWlsKCJwbWQiKTsKLQltZW1zZXQocHJvbXBtZCwgMCwgT0JQX1BNRF9TSVpFKTsKLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgdmFkZHI7CisJbiA9IG4gLyBzaXplb2Yoc3RydWN0IGxpbnV4X3Byb21fdHJhbnNsYXRpb24pOwogCi0JCWlmICh0cmFuc1tpXS52aXJ0ID49IExPV19PQlBfQUREUkVTUyAmJiB0cmFuc1tpXS52aXJ0IDwgSElfT0JQX0FERFJFU1MpIHsKLQkJCWZvciAodmFkZHIgPSB0cmFuc1tpXS52aXJ0OwotCQkJICAgICAoKHZhZGRyIDwgdHJhbnNbaV0udmlydCArIHRyYW5zW2ldLnNpemUpICYmIAotCQkJICAgICAodmFkZHIgPCBISV9PQlBfQUREUkVTUykpOwotCQkJICAgICB2YWRkciArPSBCQVNFX1BBR0VfU0laRSkgewotCQkJCXVuc2lnbmVkIGxvbmcgdmFsOworCWVudHMgPSBuOwogCi0JCQkJcG1kcCA9IHByb21wbWQgKyAoKHZhZGRyID4+IDIzKSAmIDB4N2ZmKTsKLQkJCQlpZiAocG1kX25vbmUoKnBtZHApKSB7Ci0JCQkJCXB0ZXAgPSBfX2FsbG9jX2Jvb3RtZW0oQkFTRV9QQUdFX1NJWkUsCi0JCQkJCQkJICAgICAgIEJBU0VfUEFHRV9TSVpFLAotCQkJCQkJCSAgICAgICBib290bWFwX2Jhc2UpOwotCQkJCQlpZiAocHRlcCA9PSBOVUxMKQotCQkJCQkJZWFybHlfcGd0YWJsZV9hbGxvY2ZhaWwoInB0ZSIpOwotCQkJCQltZW1zZXQocHRlcCwgMCwgQkFTRV9QQUdFX1NJWkUpOwotCQkJCQlwbWRfc2V0KHBtZHAsIHB0ZXApOwotCQkJCX0KLQkJCQlwdGVwID0gKHB0ZV90ICopX19wbWRfcGFnZSgqcG1kcCkgKwotCQkJCQkJKCh2YWRkciA+PiAxMykgJiAweDNmZik7CisJc29ydChwcm9tX3RyYW5zLCBlbnRzLCBzaXplb2Yoc3RydWN0IGxpbnV4X3Byb21fdHJhbnNsYXRpb24pLAorCSAgICAgY21wX3B0cmFucywgTlVMTCk7CiAKLQkJCQl2YWwgPSB0cmFuc1tpXS5kYXRhOwotCi0JCQkJLyogQ2xlYXIgZGlhZyBUVEUgYml0cy4gKi8KLQkJCQlpZiAodGxiX3R5cGUgPT0gc3BpdGZpcmUpCi0JCQkJCXZhbCAmPSB+MHgwMDAzZmUwMDAwMDAwMDAwVUw7Ci0KLQkJCQlzZXRfcHRlX2F0KCZpbml0X21tLCB2YWRkciwKLQkJCQkJICAgcHRlcCwgX19wdGUodmFsIHwgX1BBR0VfTU9ESUZJRUQpKTsKLQkJCQl0cmFuc1tpXS5kYXRhICs9IEJBU0VfUEFHRV9TSVpFOwotCQkJfQotCQl9CisJLyogTm93IGtpY2sgb3V0IGFsbCB0aGUgbm9uLU9CUCBlbnRyaWVzLiAgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZW50czsgaSsrKSB7CisJCWlmIChpbl9vYnBfcmFuZ2UocHJvbV90cmFuc1tpXS52aXJ0KSkKKwkJCWJyZWFrOwogCX0KLQlwaHlzX3BhZ2UgPSBfX3BhKHByb21wbWQpOwotCW9icF9pYWRkcl9wYXRjaFswXSB8PSAocGh5c19wYWdlID4+IDEwKTsKLQlvYnBfaWFkZHJfcGF0Y2hbMV0gfD0gKHBoeXNfcGFnZSAmIDB4M2ZmKTsKLQlmbHVzaGkoKGxvbmcpJm9icF9pYWRkcl9wYXRjaFswXSk7Ci0Jb2JwX2RhZGRyX3BhdGNoWzBdIHw9IChwaHlzX3BhZ2UgPj4gMTApOwotCW9icF9kYWRkcl9wYXRjaFsxXSB8PSAocGh5c19wYWdlICYgMHgzZmYpOwotCWZsdXNoaSgobG9uZykmb2JwX2RhZGRyX3BhdGNoWzBdKTsKKwlmaXJzdCA9IGk7CisJZm9yICg7IGkgPCBlbnRzOyBpKyspIHsKKwkJaWYgKCFpbl9vYnBfcmFuZ2UocHJvbV90cmFuc1tpXS52aXJ0KSkKKwkJCWJyZWFrOworCX0KKwlsYXN0ID0gaTsKIAotCS8qIE5vdyBmaXh1cCBPQlAncyBpZGVhIGFib3V0IHdoZXJlIHdlIHJlYWxseSBhcmUgbWFwcGVkLiAqLwotCXByb21fcHJpbnRmKCJSZW1hcHBpbmcgdGhlIGtlcm5lbC4uLiAiKTsKKwlmb3IgKGkgPSAwOyBpIDwgKGxhc3QgLSBmaXJzdCk7IGkrKykgeworCQlzdHJ1Y3QgbGludXhfcHJvbV90cmFuc2xhdGlvbiAqc3JjID0gJnByb21fdHJhbnNbaSArIGZpcnN0XTsKKwkJc3RydWN0IGxpbnV4X3Byb21fdHJhbnNsYXRpb24gKmRlc3QgPSAmcHJvbV90cmFuc1tpXTsKIAotCS8qIFNwaXRmaXJlIEVycmF0YSAjMzIgd29ya2Fyb3VuZCAqLwotCS8qIE5PVEU6IFVzaW5nIHBsYWluIHplcm8gZm9yIHRoZSBjb250ZXh0IHZhbHVlIGlzCi0JICogICAgICAgY29ycmVjdCBoZXJlLCB3ZSBhcmUgbm90IHVzaW5nIHRoZSBMaW51eCB0cmFwCi0JICogICAgICAgdGFibGVzIHlldCBzbyB3ZSBzaG91bGQgbm90IHVzZSB0aGUgc3BlY2lhbAotCSAqICAgICAgIFVsdHJhU1BBUkMtSUlJKyBwYWdlIHNpemUgZW5jb2RpbmdzIHlldC4KLQkgKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YQklMCwgWyUxXSAlMlxuXHQiCi0JCQkgICAgICJmbHVzaAklJWc2IgotCQkJICAgICA6IC8qIE5vIG91dHB1dHMgKi8KLQkJCSAgICAgOiAiciIgKDApLCAiciIgKFBSSU1BUllfQ09OVEVYVCksICJpIiAoQVNJX0RNTVUpKTsKKwkJKmRlc3QgPSAqc3JjOworCX0KKwlmb3IgKDsgaSA8IGVudHM7IGkrKykgeworCQlzdHJ1Y3QgbGludXhfcHJvbV90cmFuc2xhdGlvbiAqZGVzdCA9ICZwcm9tX3RyYW5zW2ldOworCQlkZXN0LT52aXJ0ID0gZGVzdC0+c2l6ZSA9IGRlc3QtPmRhdGEgPSAweDBVTDsKKwl9CiAKLQlzd2l0Y2ggKHRsYl90eXBlKSB7Ci0JZGVmYXVsdDoKLQljYXNlIHNwaXRmaXJlOgotCQlwaHlzX3BhZ2UgPSBzcGl0ZmlyZV9nZXRfZHRsYl9kYXRhKHNwYXJjNjRfaGlnaGVzdF9sb2NrZWRfdGxiZW50KCkpOwotCQlicmVhazsKLQotCWNhc2UgY2hlZXRhaDoKLQljYXNlIGNoZWV0YWhfcGx1czoKLQkJcGh5c19wYWdlID0gY2hlZXRhaF9nZXRfbGl0bGJfZGF0YShzcGFyYzY0X2hpZ2hlc3RfbG9ja2VkX3RsYmVudCgpKTsKLQkJYnJlYWs7Ci0JfTsKLQotCXBoeXNfcGFnZSAmPSBfUEFHRV9QQUREUjsKLQlwaHlzX3BhZ2UgKz0gKCh1bnNpZ25lZCBsb25nKSZwcm9tX2Jvb3RfcGFnZSAtCi0JCSAgICAgICh1bnNpZ25lZCBsb25nKUtFUk5CQVNFKTsKKwlwcm9tX3RyYW5zX2VudHMgPSBsYXN0IC0gZmlyc3Q7CiAKIAlpZiAodGxiX3R5cGUgPT0gc3BpdGZpcmUpIHsKLQkJLyogTG9jayB0aGlzIGludG8gaS9kIHRsYiBlbnRyeSA1OSAqLwotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJCSJzdHhhCSUlZzAsIFslMl0gJTNcblx0IgotCQkJInN0eGEJJTAsIFslMV0gJTRcblx0IgotCQkJIm1lbWJhcgkjU3luY1xuXHQiCi0JCQkiZmx1c2gJJSVnNlxuXHQiCi0JCQkic3R4YQklJWcwLCBbJTJdICU1XG5cdCIKLQkJCSJzdHhhCSUwLCBbJTFdICU2XG5cdCIKLQkJCSJtZW1iYXIJI1N5bmNcblx0IgotCQkJImZsdXNoCSUlZzYiCi0JCQk6IDogInIiIChwaHlzX3BhZ2UgfCBfUEFHRV9WQUxJRCB8IF9QQUdFX1NaOEsgfCBfUEFHRV9DUCB8Ci0JCQkJIF9QQUdFX0NWIHwgX1BBR0VfUCB8IF9QQUdFX0wgfCBfUEFHRV9XKSwKLQkJCSJyIiAoNTkgPDwgMyksICJyIiAoVExCX1RBR19BQ0NFU1MpLAotCQkJImkiIChBU0lfRE1NVSksICJpIiAoQVNJX0RUTEJfREFUQV9BQ0NFU1MpLAotCQkJImkiIChBU0lfSU1NVSksICJpIiAoQVNJX0lUTEJfREFUQV9BQ0NFU1MpCi0JCQk6ICJtZW1vcnkiKTsKLQl9IGVsc2UgaWYgKHRsYl90eXBlID09IGNoZWV0YWggfHwgdGxiX3R5cGUgPT0gY2hlZXRhaF9wbHVzKSB7Ci0JCS8qIExvY2sgdGhpcyBpbnRvIGkvZCB0bGItMCBlbnRyeSAxMSAqLwotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJCSJzdHhhCSUlZzAsIFslMl0gJTNcblx0IgotCQkJInN0eGEJJTAsIFslMV0gJTRcblx0IgotCQkJIm1lbWJhcgkjU3luY1xuXHQiCi0JCQkiZmx1c2gJJSVnNlxuXHQiCi0JCQkic3R4YQklJWcwLCBbJTJdICU1XG5cdCIKLQkJCSJzdHhhCSUwLCBbJTFdICU2XG5cdCIKLQkJCSJtZW1iYXIJI1N5bmNcblx0IgotCQkJImZsdXNoCSUlZzYiCi0JCQk6IDogInIiIChwaHlzX3BhZ2UgfCBfUEFHRV9WQUxJRCB8IF9QQUdFX1NaOEsgfCBfUEFHRV9DUCB8Ci0JCQkJIF9QQUdFX0NWIHwgX1BBR0VfUCB8IF9QQUdFX0wgfCBfUEFHRV9XKSwKLQkJCSJyIiAoKDAgPDwgMTYpIHwgKDExIDw8IDMpKSwgInIiIChUTEJfVEFHX0FDQ0VTUyksCi0JCQkiaSIgKEFTSV9ETU1VKSwgImkiIChBU0lfRFRMQl9EQVRBX0FDQ0VTUyksCi0JCQkiaSIgKEFTSV9JTU1VKSwgImkiIChBU0lfSVRMQl9EQVRBX0FDQ0VTUykKLQkJCTogIm1lbW9yeSIpOwotCX0gZWxzZSB7Ci0JCS8qIEltcGxlbWVudCBtZSA6LSkgKi8KLQkJQlVHKCk7CisJCS8qIENsZWFyIGRpYWcgVFRFIGJpdHMuICovCisJCWZvciAoaSA9IDA7IGkgPCBwcm9tX3RyYW5zX2VudHM7IGkrKykKKwkJCXByb21fdHJhbnNbaV0uZGF0YSAmPSB+MHgwMDAzZmUwMDAwMDAwMDAwVUw7CiAJfQorfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcmVtYXBfa2VybmVsKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBwaHlzX3BhZ2UsIHR0ZV92YWRkciwgdHRlX2RhdGE7CisJaW50IHRsYl9lbnQgPSBzcGFyYzY0X2hpZ2hlc3RfbG9ja2VkX3RsYmVudCgpOwogCiAJdHRlX3ZhZGRyID0gKHVuc2lnbmVkIGxvbmcpIEtFUk5CQVNFOwotCi0JLyogU3BpdGZpcmUgRXJyYXRhICMzMiB3b3JrYXJvdW5kICovCi0JLyogTk9URTogVXNpbmcgcGxhaW4gemVybyBmb3IgdGhlIGNvbnRleHQgdmFsdWUgaXMKLQkgKiAgICAgICBjb3JyZWN0IGhlcmUsIHdlIGFyZSBub3QgdXNpbmcgdGhlIExpbnV4IHRyYXAKLQkgKiAgICAgICB0YWJsZXMgeWV0IHNvIHdlIHNob3VsZCBub3QgdXNlIHRoZSBzcGVjaWFsCi0JICogICAgICAgVWx0cmFTUEFSQy1JSUkrIHBhZ2Ugc2l6ZSBlbmNvZGluZ3MgeWV0LgotCSAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhCSUwLCBbJTFdICUyXG5cdCIKLQkJCSAgICAgImZsdXNoCSUlZzYiCi0JCQkgICAgIDogLyogTm8gb3V0cHV0cyAqLwotCQkJICAgICA6ICJyIiAoMCksCi0JCQkgICAgICJyIiAoUFJJTUFSWV9DT05URVhUKSwgImkiIChBU0lfRE1NVSkpOwotCi0JaWYgKHRsYl90eXBlID09IHNwaXRmaXJlKQotCQl0dGVfZGF0YSA9IHNwaXRmaXJlX2dldF9kdGxiX2RhdGEoc3BhcmM2NF9oaWdoZXN0X2xvY2tlZF90bGJlbnQoKSk7Ci0JZWxzZQotCQl0dGVfZGF0YSA9IGNoZWV0YWhfZ2V0X2xkdGxiX2RhdGEoc3BhcmM2NF9oaWdoZXN0X2xvY2tlZF90bGJlbnQoKSk7CisJcGh5c19wYWdlID0gKHByb21fYm9vdF9tYXBwaW5nX3BoeXNfbG93ID4+IDIyVUwpIDw8IDIyVUw7CisJdHRlX2RhdGEgPSAocGh5c19wYWdlIHwgKF9QQUdFX1ZBTElEIHwgX1BBR0VfU1o0TUIgfAorCQkJCSBfUEFHRV9DUCB8IF9QQUdFX0NWIHwgX1BBR0VfUCB8CisJCQkJIF9QQUdFX0wgfCBfUEFHRV9XKSk7CiAKIAlrZXJuX2xvY2tlZF90dGVfZGF0YSA9IHR0ZV9kYXRhOwogCi0JcmVtYXBfZnVuYyA9ICh2b2lkICopICAoKHVuc2lnbmVkIGxvbmcpICZwcm9tX3JlbWFwIC0KLQkJCQkodW5zaWduZWQgbG9uZykgJnByb21fYm9vdF9wYWdlKTsKLQotCi0JLyogU3BpdGZpcmUgRXJyYXRhICMzMiB3b3JrYXJvdW5kICovCi0JLyogTk9URTogVXNpbmcgcGxhaW4gemVybyBmb3IgdGhlIGNvbnRleHQgdmFsdWUgaXMKLQkgKiAgICAgICBjb3JyZWN0IGhlcmUsIHdlIGFyZSBub3QgdXNpbmcgdGhlIExpbnV4IHRyYXAKLQkgKiAgICAgICB0YWJsZXMgeWV0IHNvIHdlIHNob3VsZCBub3QgdXNlIHRoZSBzcGVjaWFsCi0JICogICAgICAgVWx0cmFTUEFSQy1JSUkrIHBhZ2Ugc2l6ZSBlbmNvZGluZ3MgeWV0LgotCSAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhCSUwLCBbJTFdICUyXG5cdCIKLQkJCSAgICAgImZsdXNoCSUlZzYiCi0JCQkgICAgIDogLyogTm8gb3V0cHV0cyAqLwotCQkJICAgICA6ICJyIiAoMCksCi0JCQkgICAgICJyIiAoUFJJTUFSWV9DT05URVhUKSwgImkiIChBU0lfRE1NVSkpOwotCi0JcmVtYXBfZnVuYygodGxiX3R5cGUgPT0gc3BpdGZpcmUgPwotCQkgICAgKHNwaXRmaXJlX2dldF9kdGxiX2RhdGEoc3BhcmM2NF9oaWdoZXN0X2xvY2tlZF90bGJlbnQoKSkgJiBfUEFHRV9QQUREUikgOgotCQkgICAgKGNoZWV0YWhfZ2V0X2xpdGxiX2RhdGEoc3BhcmM2NF9oaWdoZXN0X2xvY2tlZF90bGJlbnQoKSkgJiBfUEFHRV9QQUREUikpLAotCQkgICAodW5zaWduZWQgbG9uZykgS0VSTkJBU0UsCi0JCSAgIHByb21fZ2V0X21tdV9paGFuZGxlKCkpOwotCi0JaWYgKGJpZ2tlcm5lbCkKLQkJcmVtYXBfZnVuYygoKHR0ZV9kYXRhICsgMHg0MDAwMDApICYgX1BBR0VfUEFERFIpLAotCQkJKHVuc2lnbmVkIGxvbmcpIEtFUk5CQVNFICsgMHg0MDAwMDAsIHByb21fZ2V0X21tdV9paGFuZGxlKCkpOwotCi0JLyogRmx1c2ggb3V0IHRoYXQgdGVtcG9yYXJ5IG1hcHBpbmcuICovCi0Jc3BpdGZpcmVfZmx1c2hfZHRsYl9udWNsZXVzX3BhZ2UoMHgwKTsKLQlzcGl0ZmlyZV9mbHVzaF9pdGxiX251Y2xldXNfcGFnZSgweDApOwotCi0JLyogTm93IGxvY2sgdXMgYmFjayBpbnRvIHRoZSBUTEJzIHZpYSBPQlAuICovCi0JcHJvbV9kdGxiX2xvYWQoc3BhcmM2NF9oaWdoZXN0X2xvY2tlZF90bGJlbnQoKSwgdHRlX2RhdGEsIHR0ZV92YWRkcik7Ci0JcHJvbV9pdGxiX2xvYWQoc3BhcmM2NF9oaWdoZXN0X2xvY2tlZF90bGJlbnQoKSwgdHRlX2RhdGEsIHR0ZV92YWRkcik7CisJLyogTm93IGxvY2sgdXMgaW50byB0aGUgVExCcyB2aWEgT0JQLiAqLworCXByb21fZHRsYl9sb2FkKHRsYl9lbnQsIHR0ZV9kYXRhLCB0dGVfdmFkZHIpOworCXByb21faXRsYl9sb2FkKHRsYl9lbnQsIHR0ZV9kYXRhLCB0dGVfdmFkZHIpOwogCWlmIChiaWdrZXJuZWwpIHsKLQkJcHJvbV9kdGxiX2xvYWQoc3BhcmM2NF9oaWdoZXN0X2xvY2tlZF90bGJlbnQoKS0xLCB0dGVfZGF0YSArIDB4NDAwMDAwLCAKLQkJCQkJCQkJdHRlX3ZhZGRyICsgMHg0MDAwMDApOwotCQlwcm9tX2l0bGJfbG9hZChzcGFyYzY0X2hpZ2hlc3RfbG9ja2VkX3RsYmVudCgpLTEsIHR0ZV9kYXRhICsgMHg0MDAwMDAsIAotCQkJCQkJCQl0dGVfdmFkZHIgKyAweDQwMDAwMCk7CisJCXRsYl9lbnQgLT0gMTsKKwkJcHJvbV9kdGxiX2xvYWQodGxiX2VudCwKKwkJCSAgICAgICB0dGVfZGF0YSArIDB4NDAwMDAwLCAKKwkJCSAgICAgICB0dGVfdmFkZHIgKyAweDQwMDAwMCk7CisJCXByb21faXRsYl9sb2FkKHRsYl9lbnQsCisJCQkgICAgICAgdHRlX2RhdGEgKyAweDQwMDAwMCwgCisJCQkgICAgICAgdHRlX3ZhZGRyICsgMHg0MDAwMDApOwogCX0KLQotCS8qIFJlLXJlYWQgdHJhbnNsYXRpb25zIHByb3BlcnR5LiAqLwotCWlmICgobiA9IHByb21fZ2V0cHJvcGVydHkobm9kZSwgInRyYW5zbGF0aW9ucyIsIChjaGFyICopdHJhbnMsIHRzeikpID09IC0xKSB7Ci0JCXByb21fcHJpbnRmKCJDb3VsZG4ndCBnZXQgdHJhbnNsYXRpb24gcHJvcGVydHlcbiIpOwotCQlwcm9tX2hhbHQoKTsKKwlzcGFyYzY0X2hpZ2hlc3RfdW5sb2NrZWRfdGxiX2VudCA9IHRsYl9lbnQgLSAxOworCWlmICh0bGJfdHlwZSA9PSBjaGVldGFoX3BsdXMpIHsKKwkJc3BhcmM2NF9rZXJuX3ByaV9jb250ZXh0ID0gKENUWF9DSEVFVEFIX1BMVVNfQ1RYMCB8CisJCQkJCSAgICBDVFhfQ0hFRVRBSF9QTFVTX05VQyk7CisJCXNwYXJjNjRfa2Vybl9wcmlfbnVjX2JpdHMgPSBDVFhfQ0hFRVRBSF9QTFVTX05VQzsKKwkJc3BhcmM2NF9rZXJuX3NlY19jb250ZXh0ID0gQ1RYX0NIRUVUQUhfUExVU19DVFgwOwogCX0KLQluID0gbiAvIHNpemVvZigqdHJhbnMpOworfQogCi0JZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotCQl1bnNpZ25lZCBsb25nIHZhZGRyID0gdHJhbnNbaV0udmlydDsKLQkJdW5zaWduZWQgbG9uZyBzaXplID0gdHJhbnNbaV0uc2l6ZTsKIAotCQlpZiAodmFkZHIgPCAweGYwMDAwMDAwVUwpIHsKLQkJCXVuc2lnbmVkIGxvbmcgYXZvaWRfc3RhcnQgPSAodW5zaWduZWQgbG9uZykgS0VSTkJBU0U7Ci0JCQl1bnNpZ25lZCBsb25nIGF2b2lkX2VuZCA9IGF2b2lkX3N0YXJ0ICsgKDQgKiAxMDI0ICogMTAyNCk7CitzdGF0aWMgdm9pZCBfX2luaXQgaW5oZXJpdF9wcm9tX21hcHBpbmdzKHZvaWQpCit7CisJcmVhZF9vYnBfdHJhbnNsYXRpb25zKCk7CiAKLQkJCWlmIChiaWdrZXJuZWwpCi0JCQkJYXZvaWRfZW5kICs9ICg0ICogMTAyNCAqIDEwMjQpOwotCQkJaWYgKHZhZGRyIDwgYXZvaWRfc3RhcnQpIHsKLQkJCQl1bnNpZ25lZCBsb25nIHRvcCA9IHZhZGRyICsgc2l6ZTsKLQotCQkJCWlmICh0b3AgPiBhdm9pZF9zdGFydCkKLQkJCQkJdG9wID0gYXZvaWRfc3RhcnQ7Ci0JCQkJcHJvbV91bm1hcCh0b3AgLSB2YWRkciwgdmFkZHIpOwotCQkJfQotCQkJaWYgKCh2YWRkciArIHNpemUpID4gYXZvaWRfZW5kKSB7Ci0JCQkJdW5zaWduZWQgbG9uZyBib3R0b20gPSB2YWRkcjsKLQotCQkJCWlmIChib3R0b20gPCBhdm9pZF9lbmQpCi0JCQkJCWJvdHRvbSA9IGF2b2lkX2VuZDsKLQkJCQlwcm9tX3VubWFwKCh2YWRkciArIHNpemUpIC0gYm90dG9tLCBib3R0b20pOwotCQkJfQotCQl9Ci0JfQotCisJLyogTm93IGZpeHVwIE9CUCdzIGlkZWEgYWJvdXQgd2hlcmUgd2UgcmVhbGx5IGFyZSBtYXBwZWQuICovCisJcHJvbV9wcmludGYoIlJlbWFwcGluZyB0aGUga2VybmVsLi4uICIpOworCXJlbWFwX2tlcm5lbCgpOwogCXByb21fcHJpbnRmKCJkb25lLlxuIik7CiAKKwlwcm9tX3ByaW50ZigiUmVnaXN0ZXJpbmcgY2FsbGJhY2tzLi4uICIpOwogCXJlZ2lzdGVyX3Byb21fY2FsbGJhY2tzKCk7CisJcHJvbV9wcmludGYoImRvbmUuXG4iKTsKIH0KIAogLyogVGhlIE9CUCBzcGVjaWZpY2F0aW9ucyBmb3Igc3VuNHUgbWFyayAweGZmZmZmZmZjMDAwMDAwMDAgYW5kCkBAIC03OTIsOCArNzIwLDggQEAKIAkJfQogCX0KIAlpZiAodGxiX3R5cGUgPT0gc3BpdGZpcmUpIHsKLQkJaW50IGhpZ2ggPSBTUElURklSRV9ISUdIRVNUX0xPQ0tFRF9UTEJFTlQgLSBiaWdrZXJuZWw7Ci0JCWZvciAoaSA9IDA7IGkgPCBoaWdoOyBpKyspIHsKKwkJaW50IGhpZ2ggPSBzcGFyYzY0X2hpZ2hlc3RfdW5sb2NrZWRfdGxiX2VudDsKKwkJZm9yIChpID0gMDsgaSA8PSBoaWdoOyBpKyspIHsKIAkJCXVuc2lnbmVkIGxvbmcgZGF0YTsKIAogCQkJLyogU3BpdGZpcmUgRXJyYXRhICMzMiB3b3JrYXJvdW5kICovCkBAIC04ODEsOSArODA5LDkgQEAKIAkJCX0KIAkJfQogCX0gZWxzZSBpZiAodGxiX3R5cGUgPT0gY2hlZXRhaCB8fCB0bGJfdHlwZSA9PSBjaGVldGFoX3BsdXMpIHsKLQkJaW50IGhpZ2ggPSBDSEVFVEFIX0hJR0hFU1RfTE9DS0VEX1RMQkVOVCAtIGJpZ2tlcm5lbDsKKwkJaW50IGhpZ2ggPSBzcGFyYzY0X2hpZ2hlc3RfdW5sb2NrZWRfdGxiX2VudDsKIAotCQlmb3IgKGkgPSAwOyBpIDwgaGlnaDsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPD0gaGlnaDsgaSsrKSB7CiAJCQl1bnNpZ25lZCBsb25nIGRhdGE7CiAKIAkJCWRhdGEgPSBjaGVldGFoX2dldF9sZHRsYl9kYXRhKGkpOwpAQCAtMTI3NiwxNCArMTIwNCwxNCBAQAogCWludCBpOwogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0JPT1RNRU0KLQlwcm9tX3ByaW50ZigiYm9vdG1lbV9pbml0OiBTY2FuIHNwX2JhbmtzLCAiKTsKKwlwcm9tX3ByaW50ZigiYm9vdG1lbV9pbml0OiBTY2FuIHBhdmFpbCwgIik7CiAjZW5kaWYKIAogCWJ5dGVzX2F2YWlsID0gMFVMOwotCWZvciAoaSA9IDA7IHNwX2JhbmtzW2ldLm51bV9ieXRlcyAhPSAwOyBpKyspIHsKLQkJZW5kX29mX3BoeXNfbWVtb3J5ID0gc3BfYmFua3NbaV0uYmFzZV9hZGRyICsKLQkJCXNwX2JhbmtzW2ldLm51bV9ieXRlczsKLQkJYnl0ZXNfYXZhaWwgKz0gc3BfYmFua3NbaV0ubnVtX2J5dGVzOworCWZvciAoaSA9IDA7IGkgPCBwYXZhaWxfZW50czsgaSsrKSB7CisJCWVuZF9vZl9waHlzX21lbW9yeSA9IHBhdmFpbFtpXS5waHlzX2FkZHIgKworCQkJcGF2YWlsW2ldLnJlZ19zaXplOworCQlieXRlc19hdmFpbCArPSBwYXZhaWxbaV0ucmVnX3NpemU7CiAJCWlmIChjbWRsaW5lX21lbW9yeV9zaXplKSB7CiAJCQlpZiAoYnl0ZXNfYXZhaWwgPiBjbWRsaW5lX21lbW9yeV9zaXplKSB7CiAJCQkJdW5zaWduZWQgbG9uZyBzbGFjayA9IGJ5dGVzX2F2YWlsIC0gY21kbGluZV9tZW1vcnlfc2l6ZTsKQEAgLTEyOTEsMTIgKzEyMTksMTUgQEAKIAkJCQlieXRlc19hdmFpbCAtPSBzbGFjazsKIAkJCQllbmRfb2ZfcGh5c19tZW1vcnkgLT0gc2xhY2s7CiAKLQkJCQlzcF9iYW5rc1tpXS5udW1fYnl0ZXMgLT0gc2xhY2s7Ci0JCQkJaWYgKHNwX2JhbmtzW2ldLm51bV9ieXRlcyA9PSAwKSB7Ci0JCQkJCXNwX2JhbmtzW2ldLmJhc2VfYWRkciA9IDB4ZGVhZGJlZWY7CisJCQkJcGF2YWlsW2ldLnJlZ19zaXplIC09IHNsYWNrOworCQkJCWlmICgobG9uZylwYXZhaWxbaV0ucmVnX3NpemUgPD0gMEwpIHsKKwkJCQkJcGF2YWlsW2ldLnBoeXNfYWRkciA9IDB4ZGVhZGJlZWZVTDsKKwkJCQkJcGF2YWlsW2ldLnJlZ19zaXplID0gMFVMOworCQkJCQlwYXZhaWxfZW50cyA9IGk7CiAJCQkJfSBlbHNlIHsKLQkJCQkJc3BfYmFua3NbaSsxXS5udW1fYnl0ZXMgPSAwOwotCQkJCQlzcF9iYW5rc1tpKzFdLmJhc2VfYWRkciA9IDB4ZGVhZGJlZWY7CisJCQkJCXBhdmFpbFtpKzFdLnJlZ19zaXplID0gMFVsOworCQkJCQlwYXZhaWxbaSsxXS5waHlzX2FkZHIgPSAweGRlYWRiZWVmVUw7CisJCQkJCXBhdmFpbF9lbnRzID0gaSArIDE7CiAJCQkJfQogCQkJCWJyZWFrOwogCQkJfQpAQCAtMTM0NywxNyArMTI3OCwxNSBAQAogI2VuZGlmCiAJYm9vdG1hcF9zaXplID0gaW5pdF9ib290bWVtX25vZGUoTk9ERV9EQVRBKDApLCBib290bWFwX3BmbiwgcGZuX2Jhc2UsIGVuZF9wZm4pOwogCi0JYm9vdG1hcF9iYXNlID0gYm9vdG1hcF9wZm4gPDwgUEFHRV9TSElGVDsKLQogCS8qIE5vdyByZWdpc3RlciB0aGUgYXZhaWxhYmxlIHBoeXNpY2FsIG1lbW9yeSB3aXRoIHRoZQogCSAqIGFsbG9jYXRvci4KIAkgKi8KLQlmb3IgKGkgPSAwOyBzcF9iYW5rc1tpXS5udW1fYnl0ZXMgIT0gMDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHBhdmFpbF9lbnRzOyBpKyspIHsKICNpZmRlZiBDT05GSUdfREVCVUdfQk9PVE1FTQotCQlwcm9tX3ByaW50ZigiZnJlZV9ib290bWVtKHNwX2JhbmtzOiVkKTogYmFzZVslbHhdIHNpemVbJWx4XVxuIiwKLQkJCSAgICBpLCBzcF9iYW5rc1tpXS5iYXNlX2FkZHIsIHNwX2JhbmtzW2ldLm51bV9ieXRlcyk7CisJCXByb21fcHJpbnRmKCJmcmVlX2Jvb3RtZW0ocGF2YWlsOiVkKTogYmFzZVslbHhdIHNpemVbJWx4XVxuIiwKKwkJCSAgICBpLCBwYXZhaWxbaV0ucGh5c19hZGRyLCBwYXZhaWxbaV0ucmVnX3NpemUpOwogI2VuZGlmCi0JCWZyZWVfYm9vdG1lbShzcF9iYW5rc1tpXS5iYXNlX2FkZHIsIHNwX2JhbmtzW2ldLm51bV9ieXRlcyk7CisJCWZyZWVfYm9vdG1lbShwYXZhaWxbaV0ucGh5c19hZGRyLCBwYXZhaWxbaV0ucmVnX3NpemUpOwogCX0KIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRApAQCAtMTM5OCwxMjEgKzEzMjcsMTY3IEBACiAJcmV0dXJuIGVuZF9wZm47CiB9CiAKKyNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCitzdGF0aWMgdW5zaWduZWQgbG9uZyBrZXJuZWxfbWFwX3JhbmdlKHVuc2lnbmVkIGxvbmcgcHN0YXJ0LCB1bnNpZ25lZCBsb25nIHBlbmQsIHBncHJvdF90IHByb3QpCit7CisJdW5zaWduZWQgbG9uZyB2c3RhcnQgPSBQQUdFX09GRlNFVCArIHBzdGFydDsKKwl1bnNpZ25lZCBsb25nIHZlbmQgPSBQQUdFX09GRlNFVCArIHBlbmQ7CisJdW5zaWduZWQgbG9uZyBhbGxvY19ieXRlcyA9IDBVTDsKKworCWlmICgodnN0YXJ0ICYgflBBR0VfTUFTSykgfHwgKHZlbmQgJiB+UEFHRV9NQVNLKSkgeworCQlwcm9tX3ByaW50Zigia2VybmVsX21hcDogVW5hbGlnbmVkIHBoeXNtZW1bJWx4OiVseF1cbiIsCisJCQkgICAgdnN0YXJ0LCB2ZW5kKTsKKwkJcHJvbV9oYWx0KCk7CisJfQorCisJd2hpbGUgKHZzdGFydCA8IHZlbmQpIHsKKwkJdW5zaWduZWQgbG9uZyB0aGlzX2VuZCwgcGFkZHIgPSBfX3BhKHZzdGFydCk7CisJCXBnZF90ICpwZ2QgPSBwZ2Rfb2Zmc2V0X2sodnN0YXJ0KTsKKwkJcHVkX3QgKnB1ZDsKKwkJcG1kX3QgKnBtZDsKKwkJcHRlX3QgKnB0ZTsKKworCQlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgdnN0YXJ0KTsKKwkJaWYgKHB1ZF9ub25lKCpwdWQpKSB7CisJCQlwbWRfdCAqbmV3OworCisJCQluZXcgPSBfX2FsbG9jX2Jvb3RtZW0oUEFHRV9TSVpFLCBQQUdFX1NJWkUsIFBBR0VfU0laRSk7CisJCQlhbGxvY19ieXRlcyArPSBQQUdFX1NJWkU7CisJCQlwdWRfcG9wdWxhdGUoJmluaXRfbW0sIHB1ZCwgbmV3KTsKKwkJfQorCisJCXBtZCA9IHBtZF9vZmZzZXQocHVkLCB2c3RhcnQpOworCQlpZiAoIXBtZF9wcmVzZW50KCpwbWQpKSB7CisJCQlwdGVfdCAqbmV3OworCisJCQluZXcgPSBfX2FsbG9jX2Jvb3RtZW0oUEFHRV9TSVpFLCBQQUdFX1NJWkUsIFBBR0VfU0laRSk7CisJCQlhbGxvY19ieXRlcyArPSBQQUdFX1NJWkU7CisJCQlwbWRfcG9wdWxhdGVfa2VybmVsKCZpbml0X21tLCBwbWQsIG5ldyk7CisJCX0KKworCQlwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIHZzdGFydCk7CisJCXRoaXNfZW5kID0gKHZzdGFydCArIFBNRF9TSVpFKSAmIFBNRF9NQVNLOworCQlpZiAodGhpc19lbmQgPiB2ZW5kKQorCQkJdGhpc19lbmQgPSB2ZW5kOworCisJCXdoaWxlICh2c3RhcnQgPCB0aGlzX2VuZCkgeworCQkJcHRlX3ZhbCgqcHRlKSA9IChwYWRkciB8IHBncHJvdF92YWwocHJvdCkpOworCisJCQl2c3RhcnQgKz0gUEFHRV9TSVpFOworCQkJcGFkZHIgKz0gUEFHRV9TSVpFOworCQkJcHRlKys7CisJCX0KKwl9CisKKwlyZXR1cm4gYWxsb2NfYnl0ZXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGludXhfcHJvbTY0X3JlZ2lzdGVycyBwYWxsW01BWF9CQU5LU10gX19pbml0ZGF0YTsKK3N0YXRpYyBpbnQgcGFsbF9lbnRzIF9faW5pdGRhdGE7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQga3ZtYXBfbGluZWFyX3BhdGNoWzFdOworCitzdGF0aWMgdm9pZCBfX2luaXQga2VybmVsX3BoeXNpY2FsX21hcHBpbmdfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgaSwgbWVtX2FsbG9jZWQgPSAwVUw7CisKKwlyZWFkX29icF9tZW1vcnkoInJlZyIsICZwYWxsWzBdLCAmcGFsbF9lbnRzKTsKKworCWZvciAoaSA9IDA7IGkgPCBwYWxsX2VudHM7IGkrKykgeworCQl1bnNpZ25lZCBsb25nIHBoeXNfc3RhcnQsIHBoeXNfZW5kOworCisJCXBoeXNfc3RhcnQgPSBwYWxsW2ldLnBoeXNfYWRkcjsKKwkJcGh5c19lbmQgPSBwaHlzX3N0YXJ0ICsgcGFsbFtpXS5yZWdfc2l6ZTsKKwkJbWVtX2FsbG9jZWQgKz0ga2VybmVsX21hcF9yYW5nZShwaHlzX3N0YXJ0LCBwaHlzX2VuZCwKKwkJCQkJCVBBR0VfS0VSTkVMKTsKKwl9CisKKwlwcmludGsoIkFsbG9jYXRlZCAlbGQgYnl0ZXMgZm9yIGtlcm5lbCBwYWdlIHRhYmxlcy5cbiIsCisJICAgICAgIG1lbV9hbGxvY2VkKTsKKworCWt2bWFwX2xpbmVhcl9wYXRjaFswXSA9IDB4MDEwMDAwMDA7IC8qIG5vcCAqLworCWZsdXNoaSgma3ZtYXBfbGluZWFyX3BhdGNoWzBdKTsKKworCV9fZmx1c2hfdGxiX2FsbCgpOworfQorCit2b2lkIGtlcm5lbF9tYXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBoeXNfc3RhcnQgPSBwYWdlX3RvX3BmbihwYWdlKSA8PCBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgcGh5c19lbmQgPSBwaHlzX3N0YXJ0ICsgKG51bXBhZ2VzICogUEFHRV9TSVpFKTsKKworCWtlcm5lbF9tYXBfcmFuZ2UocGh5c19zdGFydCwgcGh5c19lbmQsCisJCQkgKGVuYWJsZSA/IFBBR0VfS0VSTkVMIDogX19wZ3Byb3QoMCkpKTsKKworCS8qIHdlIHNob3VsZCBwZXJmb3JtIGFuIElQSSBhbmQgZmx1c2ggYWxsIHRsYnMsCisJICogYnV0IHRoYXQgY2FuIGRlYWRsb2NrLT5mbHVzaCBvbmx5IGN1cnJlbnQgY3B1LgorCSAqLworCV9fZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShQQUdFX09GRlNFVCArIHBoeXNfc3RhcnQsCisJCQkJIFBBR0VfT0ZGU0VUICsgcGh5c19lbmQpOworfQorI2VuZGlmCisKK3Vuc2lnbmVkIGxvbmcgX19pbml0IGZpbmRfZWNhY2hlX2ZsdXNoX3NwYW4odW5zaWduZWQgbG9uZyBzaXplKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHBhdmFpbF9lbnRzOyBpKyspIHsKKwkJaWYgKHBhdmFpbFtpXS5yZWdfc2l6ZSA+PSBzaXplKQorCQkJcmV0dXJuIHBhdmFpbFtpXS5waHlzX2FkZHI7CisJfQorCisJcmV0dXJuIH4wVUw7Cit9CisKIC8qIHBhZ2luZ19pbml0KCkgc2V0cyB1cCB0aGUgcGFnZSB0YWJsZXMgKi8KIAogZXh0ZXJuIHZvaWQgY2hlZXRhaF9lY2FjaGVfZmx1c2hfaW5pdCh2b2lkKTsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdF92YWxpZF9wZm47CitwZ2RfdCBzd2FwcGVyX3BnX2RpclsyMDQ4XTsKIAogdm9pZCBfX2luaXQgcGFnaW5nX2luaXQodm9pZCkKIHsKLQlleHRlcm4gcG1kX3Qgc3dhcHBlcl9wbWRfZGlyWzEwMjRdOwotCWV4dGVybiB1bnNpZ25lZCBpbnQgc3BhcmM2NF92cHRlX3BhdGNobWUxWzFdOwotCWV4dGVybiB1bnNpZ25lZCBpbnQgc3BhcmM2NF92cHRlX3BhdGNobWUyWzFdOwotCXVuc2lnbmVkIGxvbmcgYWxpYXNfYmFzZSA9IGtlcm5fYmFzZSArIFBBR0VfT0ZGU0VUOwotCXVuc2lnbmVkIGxvbmcgc2Vjb25kX2FsaWFzX3BhZ2UgPSAwOwotCXVuc2lnbmVkIGxvbmcgcHQsIGZsYWdzLCBlbmRfcGZuLCBwYWdlc19hdmFpbDsKLQl1bnNpZ25lZCBsb25nIHNoaWZ0ID0gYWxpYXNfYmFzZSAtICgodW5zaWduZWQgbG9uZylLRVJOQkFTRSk7Ci0JdW5zaWduZWQgbG9uZyByZWFsX2VuZDsKKwl1bnNpZ25lZCBsb25nIGVuZF9wZm4sIHBhZ2VzX2F2YWlsLCBzaGlmdDsKKwl1bnNpZ25lZCBsb25nIHJlYWxfZW5kLCBpOworCisJLyogRmluZCBhdmFpbGFibGUgcGh5c2ljYWwgbWVtb3J5Li4uICovCisJcmVhZF9vYnBfbWVtb3J5KCJhdmFpbGFibGUiLCAmcGF2YWlsWzBdLCAmcGF2YWlsX2VudHMpOworCisJcGh5c19iYXNlID0gMHhmZmZmZmZmZmZmZmZmZmZmVUw7CisJZm9yIChpID0gMDsgaSA8IHBhdmFpbF9lbnRzOyBpKyspCisJCXBoeXNfYmFzZSA9IG1pbihwaHlzX2Jhc2UsIHBhdmFpbFtpXS5waHlzX2FkZHIpOworCisJcGZuX2Jhc2UgPSBwaHlzX2Jhc2UgPj4gUEFHRV9TSElGVDsKKworCWtlcm5fYmFzZSA9IChwcm9tX2Jvb3RfbWFwcGluZ19waHlzX2xvdyA+PiAyMlVMKSA8PCAyMlVMOworCWtlcm5fc2l6ZSA9ICh1bnNpZ25lZCBsb25nKSZfZW5kIC0gKHVuc2lnbmVkIGxvbmcpS0VSTkJBU0U7CiAKIAlzZXRfYml0KDAsIG1tdV9jb250ZXh0X2JtYXApOwogCisJc2hpZnQgPSBrZXJuX2Jhc2UgKyBQQUdFX09GRlNFVCAtICgodW5zaWduZWQgbG9uZylLRVJOQkFTRSk7CisKIAlyZWFsX2VuZCA9ICh1bnNpZ25lZCBsb25nKV9lbmQ7CiAJaWYgKChyZWFsX2VuZCA+ICgodW5zaWduZWQgbG9uZylLRVJOQkFTRSArIDB4NDAwMDAwKSkpCiAJCWJpZ2tlcm5lbCA9IDE7Ci0jaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi0JaWYgKHNwYXJjX3JhbWRpc2tfaW1hZ2UgfHwgc3BhcmNfcmFtZGlza19pbWFnZTY0KQotCQlyZWFsX2VuZCA9IChQQUdFX0FMSUdOKHJlYWxfZW5kKSArIFBBR0VfQUxJR04oc3BhcmNfcmFtZGlza19zaXplKSk7Ci0jZW5kaWYKLQotCS8qIFdlIGFzc3VtZSBwaHlzaWNhbCBtZW1vcnkgc3RhcnRzIGF0IHNvbWUgNG1iIG11bHRpcGxlLAotCSAqIGlmIHRoaXMgd2VyZSBub3QgdHJ1ZSB3ZSB3b3VsZG4ndCBib290IHVwIHRvIHRoaXMgcG9pbnQKLQkgKiBhbnl3YXlzLgotCSAqLwotCXB0ICA9IGtlcm5fYmFzZSB8IF9QQUdFX1ZBTElEIHwgX1BBR0VfU1o0TUI7Ci0JcHQgfD0gX1BBR0VfQ1AgfCBfUEFHRV9DViB8IF9QQUdFX1AgfCBfUEFHRV9MIHwgX1BBR0VfVzsKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JaWYgKHRsYl90eXBlID09IHNwaXRmaXJlKSB7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKAotCSIJc3R4YQklMSwgWyUwXSAlM1xuIgotCSIJc3R4YQklMiwgWyU1XSAlNFxuIgotCSIJbWVtYmFyCSNTeW5jXG4iCi0JIglmbHVzaAklJWc2XG4iCi0JIglub3BcbiIKLQkiCW5vcFxuIgotCSIJbm9wXG4iCi0JCTogLyogTm8gb3V0cHV0cyAqLwotCQk6ICJyIiAoVExCX1RBR19BQ0NFU1MpLCAiciIgKGFsaWFzX2Jhc2UpLCAiciIgKHB0KSwKLQkJICAiaSIgKEFTSV9ETU1VKSwgImkiIChBU0lfRFRMQl9EQVRBX0FDQ0VTUyksICJyIiAoNjEgPDwgMykKLQkJOiAibWVtb3J5Iik7Ci0JCWlmIChyZWFsX2VuZCA+PSBLRVJOQkFTRSArIDB4MzQwMDAwKSB7Ci0JCQlzZWNvbmRfYWxpYXNfcGFnZSA9IGFsaWFzX2Jhc2UgKyAweDQwMDAwMDsKLQkJCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiCXN0eGEJJTEsIFslMF0gJTNcbiIKLQkJIglzdHhhCSUyLCBbJTVdICU0XG4iCi0JCSIJbWVtYmFyCSNTeW5jXG4iCi0JCSIJZmx1c2gJJSVnNlxuIgotCQkiCW5vcFxuIgotCQkiCW5vcFxuIgotCQkiCW5vcFxuIgotCQkJOiAvKiBObyBvdXRwdXRzICovCi0JCQk6ICJyIiAoVExCX1RBR19BQ0NFU1MpLCAiciIgKHNlY29uZF9hbGlhc19wYWdlKSwgInIiIChwdCArIDB4NDAwMDAwKSwKLQkJCSAgImkiIChBU0lfRE1NVSksICJpIiAoQVNJX0RUTEJfREFUQV9BQ0NFU1MpLCAiciIgKDYwIDw8IDMpCi0JCQk6ICJtZW1vcnkiKTsKLQkJfQotCX0gZWxzZSBpZiAodGxiX3R5cGUgPT0gY2hlZXRhaCB8fCB0bGJfdHlwZSA9PSBjaGVldGFoX3BsdXMpIHsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIglzdHhhCSUxLCBbJTBdICUzXG4iCi0JIglzdHhhCSUyLCBbJTVdICU0XG4iCi0JIgltZW1iYXIJI1N5bmNcbiIKLQkiCWZsdXNoCSUlZzZcbiIKLQkiCW5vcFxuIgotCSIJbm9wXG4iCi0JIglub3BcbiIKLQkJOiAvKiBObyBvdXRwdXRzICovCi0JCTogInIiIChUTEJfVEFHX0FDQ0VTUyksICJyIiAoYWxpYXNfYmFzZSksICJyIiAocHQpLAotCQkgICJpIiAoQVNJX0RNTVUpLCAiaSIgKEFTSV9EVExCX0RBVEFfQUNDRVNTKSwgInIiICgoMDw8MTYpIHwgKDEzPDwzKSkKLQkJOiAibWVtb3J5Iik7Ci0JCWlmIChyZWFsX2VuZCA+PSBLRVJOQkFTRSArIDB4MzQwMDAwKSB7Ci0JCQlzZWNvbmRfYWxpYXNfcGFnZSA9IGFsaWFzX2Jhc2UgKyAweDQwMDAwMDsKLQkJCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiCXN0eGEJJTEsIFslMF0gJTNcbiIKLQkJIglzdHhhCSUyLCBbJTVdICU0XG4iCi0JCSIJbWVtYmFyCSNTeW5jXG4iCi0JCSIJZmx1c2gJJSVnNlxuIgotCQkiCW5vcFxuIgotCQkiCW5vcFxuIgotCQkiCW5vcFxuIgotCQkJOiAvKiBObyBvdXRwdXRzICovCi0JCQk6ICJyIiAoVExCX1RBR19BQ0NFU1MpLCAiciIgKHNlY29uZF9hbGlhc19wYWdlKSwgInIiIChwdCArIDB4NDAwMDAwKSwKLQkJCSAgImkiIChBU0lfRE1NVSksICJpIiAoQVNJX0RUTEJfREFUQV9BQ0NFU1MpLCAiciIgKCgwPDwxNikgfCAoMTI8PDMpKQotCQkJOiAibWVtb3J5Iik7Ci0JCX0KKwlpZiAoKHJlYWxfZW5kID4gKCh1bnNpZ25lZCBsb25nKUtFUk5CQVNFICsgMHg4MDAwMDApKSkgeworCQlwcm9tX3ByaW50ZigicGFnaW5nX2luaXQ6IEtlcm5lbCA+IDhNQiwgdG9vIGxhcmdlLlxuIik7CisJCXByb21faGFsdCgpOwogCX0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCi0JLyogTm93IHNldCBrZXJuZWwgcGdkIHRvIHVwcGVyIGFsaWFzIHNvIHBoeXNpY2FsIHBhZ2UgY29tcHV0YXRpb25zCisKKwkvKiBTZXQga2VybmVsIHBnZCB0byB1cHBlciBhbGlhcyBzbyBwaHlzaWNhbCBwYWdlIGNvbXB1dGF0aW9ucwogCSAqIHdvcmsuCiAJICovCiAJaW5pdF9tbS5wZ2QgKz0gKChzaGlmdCkgLyAoc2l6ZW9mKHBnZF90KSkpOwogCQotCW1lbXNldChzd2FwcGVyX3BtZF9kaXIsIDAsIHNpemVvZihzd2FwcGVyX3BtZF9kaXIpKTsKKwltZW1zZXQoc3dhcHBlcl9sb3dfcG1kX2RpciwgMCwgc2l6ZW9mKHN3YXBwZXJfbG93X3BtZF9kaXIpKTsKIAogCS8qIE5vdyBjYW4gaW5pdCB0aGUga2VybmVsL2JhZCBwYWdlIHRhYmxlcy4gKi8KIAlwdWRfc2V0KHB1ZF9vZmZzZXQoJnN3YXBwZXJfcGdfZGlyWzBdLCAwKSwKLQkJc3dhcHBlcl9wbWRfZGlyICsgKHNoaWZ0IC8gc2l6ZW9mKHBnZF90KSkpOworCQlzd2FwcGVyX2xvd19wbWRfZGlyICsgKHNoaWZ0IC8gc2l6ZW9mKHBnZF90KSkpOwogCQotCXNwYXJjNjRfdnB0ZV9wYXRjaG1lMVswXSB8PQotCQkoKCh1bnNpZ25lZCBsb25nKXBnZF92YWwoaW5pdF9tbS5wZ2RbMF0pKSA+PiAxMCk7Ci0Jc3BhcmM2NF92cHRlX3BhdGNobWUyWzBdIHw9Ci0JCSgoKHVuc2lnbmVkIGxvbmcpcGdkX3ZhbChpbml0X21tLnBnZFswXSkpICYgMHgzZmYpOwotCWZsdXNoaSgobG9uZykmc3BhcmM2NF92cHRlX3BhdGNobWUxWzBdKTsKKwlzd2FwcGVyX3BnZF96ZXJvID0gcGdkX3ZhbChzd2FwcGVyX3BnX2RpclswXSk7CiAJCi0JLyogU2V0dXAgYm9vdG1lbS4uLiAqLwotCXBhZ2VzX2F2YWlsID0gMDsKLQlsYXN0X3ZhbGlkX3BmbiA9IGVuZF9wZm4gPSBib290bWVtX2luaXQoJnBhZ2VzX2F2YWlsKTsKLQotCS8qIEluaGVyaXQgbm9uLWxvY2tlZCBPQlAgbWFwcGluZ3MuICovCiAJaW5oZXJpdF9wcm9tX21hcHBpbmdzKCk7CiAJCiAJLyogT2ssIHdlIGNhbiB1c2Ugb3VyIFRMQiBtaXNzIGFuZCB3aW5kb3cgdHJhcCBoYW5kbGVycyBzYWZlbHkuCkBAIC0xNTI3LDEzICsxNTAyLDE2IEBACiAKIAlpbmhlcml0X2xvY2tlZF9wcm9tX21hcHBpbmdzKDEpOwogCi0JLyogV2Ugb25seSBjcmVhdGVkIERUTEIgbWFwcGluZyBvZiB0aGlzIHN0dWZmLiAqLwotCXNwaXRmaXJlX2ZsdXNoX2R0bGJfbnVjbGV1c19wYWdlKGFsaWFzX2Jhc2UpOwotCWlmIChzZWNvbmRfYWxpYXNfcGFnZSkKLQkJc3BpdGZpcmVfZmx1c2hfZHRsYl9udWNsZXVzX3BhZ2Uoc2Vjb25kX2FsaWFzX3BhZ2UpOwotCiAJX19mbHVzaF90bGJfYWxsKCk7CiAKKwkvKiBTZXR1cCBib290bWVtLi4uICovCisJcGFnZXNfYXZhaWwgPSAwOworCWxhc3RfdmFsaWRfcGZuID0gZW5kX3BmbiA9IGJvb3RtZW1faW5pdCgmcGFnZXNfYXZhaWwpOworCisjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQworCWtlcm5lbF9waHlzaWNhbF9tYXBwaW5nX2luaXQoKTsKKyNlbmRpZgorCiAJewogCQl1bnNpZ25lZCBsb25nIHpvbmVzX3NpemVbTUFYX05SX1pPTkVTXTsKIAkJdW5zaWduZWQgbG9uZyB6aG9sZXNfc2l6ZVtNQVhfTlJfWk9ORVNdOwpAQCAtMTU1NCwxMjggKzE1MzIsMzUgQEAKIAlkZXZpY2Vfc2NhbigpOwogfQogCi0vKiBPaywgaXQgc2VlbXMgdGhhdCB0aGUgcHJvbSBjYW4gYWxsb2NhdGUgc29tZSBtb3JlIG1lbW9yeSBjaHVua3MKLSAqIGFzIGEgc2lkZSBlZmZlY3Qgb2Ygc29tZSBwcm9tIGNhbGxzIHdlIHBlcmZvcm0gZHVyaW5nIHRoZQotICogYm9vdCBzZXF1ZW5jZS4gIE15IG1vc3QgbGlrZWx5IHRoZW9yeSBpcyB0aGF0IGl0IGlzIGZyb20gdGhlCi0gKiBwcm9tX3NldF90cmFwdGFibGUoKSBjYWxsLCBhbmQgT0JQIGlzIGFsbG9jYXRpbmcgYSBzY3JhdGNocGFkCi0gKiBmb3Igc2F2aW5nIGNsaWVudCBwcm9ncmFtIHJlZ2lzdGVyIHN0YXRlIGV0Yy4KLSAqLwotc3RhdGljIHZvaWQgX19pbml0IHNvcnRfbWVtbGlzdChzdHJ1Y3QgbGludXhfbWxpc3RfcDEyNzUgKnRoaXNsaXN0KQotewotCWludCBzd2FwaSA9IDA7Ci0JaW50IGksIG1pdHI7Ci0JdW5zaWduZWQgbG9uZyB0bXBhZGRyLCB0bXBzaXplOwotCXVuc2lnbmVkIGxvbmcgbG93ZXN0OwotCi0JZm9yIChpID0gMDsgdGhpc2xpc3RbaV0udGhlcmVzX21vcmUgIT0gMDsgaSsrKSB7Ci0JCWxvd2VzdCA9IHRoaXNsaXN0W2ldLnN0YXJ0X2FkcjsKLQkJZm9yIChtaXRyID0gaSsxOyB0aGlzbGlzdFttaXRyLTFdLnRoZXJlc19tb3JlICE9IDA7IG1pdHIrKykKLQkJCWlmICh0aGlzbGlzdFttaXRyXS5zdGFydF9hZHIgPCBsb3dlc3QpIHsKLQkJCQlsb3dlc3QgPSB0aGlzbGlzdFttaXRyXS5zdGFydF9hZHI7Ci0JCQkJc3dhcGkgPSBtaXRyOwotCQkJfQotCQlpZiAobG93ZXN0ID09IHRoaXNsaXN0W2ldLnN0YXJ0X2FkcikKLQkJCWNvbnRpbnVlOwotCQl0bXBhZGRyID0gdGhpc2xpc3Rbc3dhcGldLnN0YXJ0X2FkcjsKLQkJdG1wc2l6ZSA9IHRoaXNsaXN0W3N3YXBpXS5udW1fYnl0ZXM7Ci0JCWZvciAobWl0ciA9IHN3YXBpOyBtaXRyID4gaTsgbWl0ci0tKSB7Ci0JCQl0aGlzbGlzdFttaXRyXS5zdGFydF9hZHIgPSB0aGlzbGlzdFttaXRyLTFdLnN0YXJ0X2FkcjsKLQkJCXRoaXNsaXN0W21pdHJdLm51bV9ieXRlcyA9IHRoaXNsaXN0W21pdHItMV0ubnVtX2J5dGVzOwotCQl9Ci0JCXRoaXNsaXN0W2ldLnN0YXJ0X2FkciA9IHRtcGFkZHI7Ci0JCXRoaXNsaXN0W2ldLm51bV9ieXRlcyA9IHRtcHNpemU7Ci0JfQotfQotCi12b2lkIF9faW5pdCByZXNjYW5fc3BfYmFua3Modm9pZCkKLXsKLQlzdHJ1Y3QgbGludXhfcHJvbTY0X3JlZ2lzdGVycyBtZW1saXN0WzY0XTsKLQlzdHJ1Y3QgbGludXhfbWxpc3RfcDEyNzUgYXZhaWxbNjRdLCAqbWxpc3Q7Ci0JdW5zaWduZWQgbG9uZyBieXRlcywgYmFzZV9wYWRkcjsKLQlpbnQgbnVtX3JlZ3MsIG5vZGUgPSBwcm9tX2ZpbmRkZXZpY2UoIi9tZW1vcnkiKTsKLQlpbnQgaTsKLQotCW51bV9yZWdzID0gcHJvbV9nZXRwcm9wZXJ0eShub2RlLCAiYXZhaWxhYmxlIiwKLQkJCQkgICAgKGNoYXIgKikgbWVtbGlzdCwgc2l6ZW9mKG1lbWxpc3QpKTsKLQludW1fcmVncyA9IChudW1fcmVncyAvIHNpemVvZihzdHJ1Y3QgbGludXhfcHJvbTY0X3JlZ2lzdGVycykpOwotCWZvciAoaSA9IDA7IGkgPCBudW1fcmVnczsgaSsrKSB7Ci0JCWF2YWlsW2ldLnN0YXJ0X2FkciA9IG1lbWxpc3RbaV0ucGh5c19hZGRyOwotCQlhdmFpbFtpXS5udW1fYnl0ZXMgPSBtZW1saXN0W2ldLnJlZ19zaXplOwotCQlhdmFpbFtpXS50aGVyZXNfbW9yZSA9ICZhdmFpbFtpICsgMV07Ci0JfQotCWF2YWlsW2kgLSAxXS50aGVyZXNfbW9yZSA9IE5VTEw7Ci0Jc29ydF9tZW1saXN0KGF2YWlsKTsKLQotCW1saXN0ID0gJmF2YWlsWzBdOwotCWkgPSAwOwotCWJ5dGVzID0gbWxpc3QtPm51bV9ieXRlczsKLQliYXNlX3BhZGRyID0gbWxpc3QtPnN0YXJ0X2FkcjsKLSAgCi0Jc3BfYmFua3NbMF0uYmFzZV9hZGRyID0gYmFzZV9wYWRkcjsKLQlzcF9iYW5rc1swXS5udW1fYnl0ZXMgPSBieXRlczsKLQotCXdoaWxlIChtbGlzdC0+dGhlcmVzX21vcmUgIT0gTlVMTCl7Ci0JCWkrKzsKLQkJbWxpc3QgPSBtbGlzdC0+dGhlcmVzX21vcmU7Ci0JCWJ5dGVzID0gbWxpc3QtPm51bV9ieXRlczsKLQkJaWYgKGkgPj0gU1BBUkNfUEhZU19CQU5LUy0xKSB7Ci0JCQlwcmludGsgKCJUaGUgbWFjaGluZSBoYXMgbW9yZSBiYW5rcyB0aGFuICIKLQkJCQkidGhpcyBrZXJuZWwgY2FuIHN1cHBvcnRcbiIKLQkJCQkiSW5jcmVhc2UgdGhlIFNQQVJDX1BIWVNfQkFOS1MgIgotCQkJCSJzZXR0aW5nIChjdXJyZW50bHkgJWQpXG4iLAotCQkJCVNQQVJDX1BIWVNfQkFOS1MpOwotCQkJaSA9IFNQQVJDX1BIWVNfQkFOS1MtMTsKLQkJCWJyZWFrOwotCQl9Ci0gICAgCi0JCXNwX2JhbmtzW2ldLmJhc2VfYWRkciA9IG1saXN0LT5zdGFydF9hZHI7Ci0JCXNwX2JhbmtzW2ldLm51bV9ieXRlcyA9IG1saXN0LT5udW1fYnl0ZXM7Ci0JfQotCi0JaSsrOwotCXNwX2JhbmtzW2ldLmJhc2VfYWRkciA9IDB4ZGVhZGJlZWZiZWVmZGVhZFVMOwotCXNwX2JhbmtzW2ldLm51bV9ieXRlcyA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBzcF9iYW5rc1tpXS5udW1fYnl0ZXMgIT0gMDsgaSsrKQotCQlzcF9iYW5rc1tpXS5udW1fYnl0ZXMgJj0gUEFHRV9NQVNLOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgdGFpbnRfcmVhbF9wYWdlcyh2b2lkKQogewotCXN0cnVjdCBzcGFyY19waHlzX2JhbmtzIHNhdmVkX3NwX2JhbmtzW1NQQVJDX1BIWVNfQkFOS1NdOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IFNQQVJDX1BIWVNfQkFOS1M7IGkrKykgewotCQlzYXZlZF9zcF9iYW5rc1tpXS5iYXNlX2FkZHIgPQotCQkJc3BfYmFua3NbaV0uYmFzZV9hZGRyOwotCQlzYXZlZF9zcF9iYW5rc1tpXS5udW1fYnl0ZXMgPQotCQkJc3BfYmFua3NbaV0ubnVtX2J5dGVzOwotCX0KKwlyZWFkX29icF9tZW1vcnkoImF2YWlsYWJsZSIsICZwYXZhaWxfcmVzY2FuWzBdLCAmcGF2YWlsX3Jlc2Nhbl9lbnRzKTsKIAotCXJlc2Nhbl9zcF9iYW5rcygpOwotCi0JLyogRmluZCBjaGFuZ2VzIGRpc2NvdmVyZWQgaW4gdGhlIHNwX2JhbmsgcmVzY2FuIGFuZAorCS8qIEZpbmQgY2hhbmdlcyBkaXNjb3ZlcmVkIGluIHRoZSBwaHlzbWVtIGF2YWlsYWJsZSByZXNjYW4gYW5kCiAJICogcmVzZXJ2ZSB0aGUgbG9zdCBwb3J0aW9ucyBpbiB0aGUgYm9vdG1lbSBtYXBzLgogCSAqLwotCWZvciAoaSA9IDA7IHNhdmVkX3NwX2JhbmtzW2ldLm51bV9ieXRlczsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHBhdmFpbF9lbnRzOyBpKyspIHsKIAkJdW5zaWduZWQgbG9uZyBvbGRfc3RhcnQsIG9sZF9lbmQ7CiAKLQkJb2xkX3N0YXJ0ID0gc2F2ZWRfc3BfYmFua3NbaV0uYmFzZV9hZGRyOworCQlvbGRfc3RhcnQgPSBwYXZhaWxbaV0ucGh5c19hZGRyOwogCQlvbGRfZW5kID0gb2xkX3N0YXJ0ICsKLQkJCXNhdmVkX3NwX2JhbmtzW2ldLm51bV9ieXRlczsKKwkJCXBhdmFpbFtpXS5yZWdfc2l6ZTsKIAkJd2hpbGUgKG9sZF9zdGFydCA8IG9sZF9lbmQpIHsKIAkJCWludCBuOwogCi0JCQlmb3IgKG4gPSAwOyBzcF9iYW5rc1tuXS5udW1fYnl0ZXM7IG4rKykgeworCQkJZm9yIChuID0gMDsgcGF2YWlsX3Jlc2Nhbl9lbnRzOyBuKyspIHsKIAkJCQl1bnNpZ25lZCBsb25nIG5ld19zdGFydCwgbmV3X2VuZDsKIAotCQkJCW5ld19zdGFydCA9IHNwX2JhbmtzW25dLmJhc2VfYWRkcjsKLQkJCQluZXdfZW5kID0gbmV3X3N0YXJ0ICsgc3BfYmFua3Nbbl0ubnVtX2J5dGVzOworCQkJCW5ld19zdGFydCA9IHBhdmFpbF9yZXNjYW5bbl0ucGh5c19hZGRyOworCQkJCW5ld19lbmQgPSBuZXdfc3RhcnQgKworCQkJCQlwYXZhaWxfcmVzY2FuW25dLnJlZ19zaXplOwogCiAJCQkJaWYgKG5ld19zdGFydCA8PSBvbGRfc3RhcnQgJiYKIAkJCQkgICAgbmV3X2VuZCA+PSAob2xkX3N0YXJ0ICsgUEFHRV9TSVpFKSkgewotCQkJCQlzZXRfYml0IChvbGRfc3RhcnQgPj4gMjIsCi0JCQkJCQkgc3BhcmM2NF92YWxpZF9hZGRyX2JpdG1hcCk7CisJCQkJCXNldF9iaXQob2xkX3N0YXJ0ID4+IDIyLAorCQkJCQkJc3BhcmM2NF92YWxpZF9hZGRyX2JpdG1hcCk7CiAJCQkJCWdvdG8gZG9fbmV4dF9wYWdlOwogCQkJCX0KIAkJCX0KQEAgLTE2OTUsOCArMTU4MCw3IEBACiAKIAlpID0gbGFzdF92YWxpZF9wZm4gPj4gKCgyMiAtIFBBR0VfU0hJRlQpICsgNik7CiAJaSArPSAxOwotCXNwYXJjNjRfdmFsaWRfYWRkcl9iaXRtYXAgPSAodW5zaWduZWQgbG9uZyAqKQotCQlfX2FsbG9jX2Jvb3RtZW0oaSA8PCAzLCBTTVBfQ0FDSEVfQllURVMsIGJvb3RtYXBfYmFzZSk7CisJc3BhcmM2NF92YWxpZF9hZGRyX2JpdG1hcCA9ICh1bnNpZ25lZCBsb25nICopIGFsbG9jX2Jvb3RtZW0oaSA8PCAzKTsKIAlpZiAoc3BhcmM2NF92YWxpZF9hZGRyX2JpdG1hcCA9PSBOVUxMKSB7CiAJCXByb21fcHJpbnRmKCJtZW1faW5pdDogQ2Fubm90IGFsbG9jIHZhbGlkX2FkZHJfYml0bWFwLlxuIik7CiAJCXByb21faGFsdCgpOwpAQCAtMTc0OSw3ICsxNjMzLDcgQEAKIAkJY2hlZXRhaF9lY2FjaGVfZmx1c2hfaW5pdCgpOwogfQogCi12b2lkIGZyZWVfaW5pdG1lbSAodm9pZCkKK3ZvaWQgZnJlZV9pbml0bWVtKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyLCBpbml0ZW5kOwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbW0vdWx0cmEuUyBiL2FyY2gvc3BhcmM2NC9tbS91bHRyYS5TCmluZGV4IGIyZWU5YjUuLmU0YzkxNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9tbS91bHRyYS5TCisrKyBiL2FyY2gvc3BhcmM2NC9tbS91bHRyYS5TCkBAIC0xNDQsNDIgKzE0NCwyOSBAQAogCiAjZGVmaW5lIERUQUdfTUFTSyAweDMKIAorCS8qIFRoaXMgcm91dGluZSBpcyBTcGl0ZmlyZSBzcGVjaWZpYyBzbyB0aGUgaGFyZGNvZGVkCisJICogRC1jYWNoZSBzaXplIGFuZCBsaW5lLXNpemUgYXJlIE9LLgorCSAqLwogCS5hbGlnbgkJNjQKIAkuZ2xvYmwJCV9fZmx1c2hfZGNhY2hlX3BhZ2UKIF9fZmx1c2hfZGNhY2hlX3BhZ2U6CS8qICVvMD1rYWRkciwgJW8xPWZsdXNoX2ljYWNoZSAqLwogCXNldGhpCQkldWhpKFBBR0VfT0ZGU0VUKSwgJWcxCiAJc2xseAkJJWcxLCAzMiwgJWcxCi0Jc3ViCQklbzAsICVnMSwgJW8wCi0JY2xyCQklbzQKLQlzcmx4CQklbzAsIDExLCAlbzAKLQlzZXRoaQkJJWhpKDEgPDwgMTQpLCAlbzIKLTE6CWxkeGEJCVslbzRdIEFTSV9EQ0FDSEVfVEFHLCAlbzMJISBMU1UJR3JvdXAKLQlhZGQJCSVvNCwgKDEgPDwgNSksICVvNAkJISBJRVUwCi0JbGR4YQkJWyVvNF0gQVNJX0RDQUNIRV9UQUcsICVnMQkhIExTVQlHcm91cAotCWFkZAkJJW80LCAoMSA8PCA1KSwgJW80CQkhIElFVTAKLQlsZHhhCQlbJW80XSBBU0lfRENBQ0hFX1RBRywgJWcyCSEgTFNVCUdyb3VwCW8zIGF2YWlsYWJsZQotCWFkZAkJJW80LCAoMSA8PCA1KSwgJW80CQkhIElFVTAKLQlhbmRuCQklbzMsIERUQUdfTUFTSywgJW8zCQkhIElFVTEKLQlsZHhhCQlbJW80XSBBU0lfRENBQ0hFX1RBRywgJWczCSEgTFNVCUdyb3VwCi0JYWRkCQklbzQsICgxIDw8IDUpLCAlbzQJCSEgSUVVMAotCWFuZG4JCSVnMSwgRFRBR19NQVNLLCAlZzEJCSEgSUVVMQotCWNtcAkJJW8wLCAlbzMJCQkhIElFVTEJR3JvdXAKLQliZSxhLHBuCQkleGNjLCBkZmx1c2gxCQkJISBDVEkKLQkgc3ViCQklbzQsICg0IDw8IDUpLCAlbzQJCSEgSUVVMAkoR3JvdXApCi0JY21wCQklbzAsICVnMQkJCSEgSUVVMQlHcm91cAotCWFuZG4JCSVnMiwgRFRBR19NQVNLLCAlZzIJCSEgSUVVMAotCWJlLGEscG4JCSV4Y2MsIGRmbHVzaDIJCQkhIENUSQotCSBzdWIJCSVvNCwgKDMgPDwgNSksICVvNAkJISBJRVUwCShHcm91cCkKLQljbXAJCSVvMCwgJWcyCQkJISBJRVUxCUdyb3VwCi0JYW5kbgkJJWczLCBEVEFHX01BU0ssICVnMwkJISBJRVUwCi0JYmUsYSxwbgkJJXhjYywgZGZsdXNoMwkJCSEgQ1RJCi0JIHN1YgkJJW80LCAoMiA8PCA1KSwgJW80CQkhIElFVTAJKEdyb3VwKQotCWNtcAkJJW8wLCAlZzMJCQkhIElFVTEJR3JvdXAKLQliZSxhLHBuCQkleGNjLCBkZmx1c2g0CQkJISBDVEkKLQkgc3ViCQklbzQsICgxIDw8IDUpLCAlbzQJCSEgSUVVMAotMjoJY21wCQklbzQsICVvMgkJCSEgSUVVMQlHcm91cAotCWJuZSxwdAkJJXhjYywgMWIJCQkhIENUSQotCSBub3AJCQkJCQkhIElFVTAKKwlzdWIJCSVvMCwgJWcxLCAlbzAJCQkhIHBoeXNpY2FsIGFkZHJlc3MKKwlzcmx4CQklbzAsIDExLCAlbzAJCQkhIG1ha2UgRC1jYWNoZSBUQUcKKwlzZXRoaQkJJWhpKDEgPDwgMTQpLCAlbzIJCSEgRC1jYWNoZSBzaXplCisJc3ViCQklbzIsICgxIDw8IDUpLCAlbzIJCSEgRC1jYWNoZSBsaW5lIHNpemUKKzE6CWxkeGEJCVslbzJdIEFTSV9EQ0FDSEVfVEFHLCAlbzMJISBsb2FkIEQtY2FjaGUgVEFHCisJYW5kY2MJCSVvMywgRFRBR19NQVNLLCAlZzAJCSEgVmFsaWQ/CisJYmUscG4JCSV4Y2MsIDJmCQkJISBOb3BlLCBicmFuY2gKKwkgYW5kbgkJJW8zLCBEVEFHX01BU0ssICVvMwkJISBDbGVhciB2YWxpZCBiaXRzCisJY21wCQklbzMsICVvMAkJCSEgVEFHIG1hdGNoPworCWJuZSxwdAkJJXhjYywgMmYJCQkhIE5vcGUsIGJyYW5jaAorCSBub3AKKwlzdHhhCQklZzAsIFslbzJdIEFTSV9EQ0FDSEVfVEFHCSEgSW52YWxpZGF0ZSBUQUcKKwltZW1iYXIJCSNTeW5jCisyOglicm56LHB0CQklbzIsIDFiCisJIHN1YgkJJW8yLCAoMSA8PCA1KSwgJW8yCQkhIEQtY2FjaGUgbGluZSBzaXplCiAKIAkvKiBUaGUgSS1jYWNoZSBkb2VzIG5vdCBzbm9vcCBsb2NhbCBzdG9yZXMgc28gd2UKIAkgKiBiZXR0ZXIgZmx1c2ggdGhhdCB0b28gd2hlbiBuZWNlc3NhcnkuCkBAIC0xODksNDggKzE3Niw5IEBACiAJcmV0bAogCSBub3AKIAotZGZsdXNoMTpzdHhhCQklZzAsIFslbzRdIEFTSV9EQ0FDSEVfVEFHCi0JYWRkCQklbzQsICgxIDw8IDUpLCAlbzQKLWRmbHVzaDI6c3R4YQkJJWcwLCBbJW80XSBBU0lfRENBQ0hFX1RBRwotCWFkZAkJJW80LCAoMSA8PCA1KSwgJW80Ci1kZmx1c2gzOnN0eGEJCSVnMCwgWyVvNF0gQVNJX0RDQUNIRV9UQUcKLQlhZGQJCSVvNCwgKDEgPDwgNSksICVvNAotZGZsdXNoNDpzdHhhCQklZzAsIFslbzRdIEFTSV9EQ0FDSEVfVEFHCi0JYWRkCQklbzQsICgxIDw8IDUpLCAlbzQKLQltZW1iYXIJCSNTeW5jCi0JYmEscHQJCSV4Y2MsIDJiCi0JIG5vcAogI2VuZGlmIC8qIERDQUNIRV9BTElBU0lOR19QT1NTSUJMRSAqLwogCi0JLnByZXZpb3VzIC50ZXh0Ci0JLmFsaWduCQkzMgotX19wcmVmaWxsX2R0bGI6Ci0JcmRwcgkJJXBzdGF0ZSwgJWc3Ci0Jd3JwcgkJJWc3LCBQU1RBVEVfSUUsICVwc3RhdGUKLQltb3YJCVRMQl9UQUdfQUNDRVNTLCAlZzEKLQlzdHhhCQklbzUsIFslZzFdIEFTSV9ETU1VCi0Jc3R4YQkJJW8yLCBbJWcwXSBBU0lfRFRMQl9EQVRBX0lOCi0JZmx1c2gJCSVnNgotCXJldGwKLQkgd3JwcgkJJWc3LCAlcHN0YXRlCi1fX3ByZWZpbGxfaXRsYjoKLQlyZHByCQklcHN0YXRlLCAlZzcKLQl3cnByCQklZzcsIFBTVEFURV9JRSwgJXBzdGF0ZQotCW1vdgkJVExCX1RBR19BQ0NFU1MsICVnMQotCXN0eGEJCSVvNSwgWyVnMV0gQVNJX0lNTVUKLQlzdHhhCQklbzIsIFslZzBdIEFTSV9JVExCX0RBVEFfSU4KLQlmbHVzaAkJJWc2Ci0JcmV0bAotCSB3cnByCQklZzcsICVwc3RhdGUKLQotCS5nbG9ibAkJX191cGRhdGVfbW11X2NhY2hlCi1fX3VwZGF0ZV9tbXVfY2FjaGU6CS8qICVvMD1od19jb250ZXh0LCAlbzE9YWRkcmVzcywgJW8yPXB0ZSwgJW8zPWZhdWx0X2NvZGUgKi8KLQlzcmx4CQklbzEsIFBBR0VfU0hJRlQsICVvMQotCWFuZGNjCQklbzMsIEZBVUxUX0NPREVfRFRMQiwgJWcwCi0Jc2xseAkJJW8xLCBQQUdFX1NISUZULCAlbzUKLQlibmUscHQJCSV4Y2MsIF9fcHJlZmlsbF9kdGxiCi0JIG9yCQklbzUsICVvMCwgJW81Ci0JYmEsYSxwdAkJJXhjYywgX19wcmVmaWxsX2l0bGIKKwkucHJldmlvdXMKIAogCS8qIENoZWV0YWggc3BlY2lmaWMgdmVyc2lvbnMsIHBhdGNoZWQgYXQgYm9vdCB0aW1lLiAqLwogX19jaGVldGFoX2ZsdXNoX3RsYl9tbTogLyogMTggaW5zbnMgKi8KQEAgLTI4Myw3ICsyMzEsNyBAQAogCSB3cnByCQklZzcsIDB4MCwgJXBzdGF0ZQogCiAjaWZkZWYgRENBQ0hFX0FMSUFTSU5HX1BPU1NJQkxFCi1mbHVzaF9kY3BhZ2VfY2hlZXRhaDogLyogMTEgaW5zbnMgKi8KK19fY2hlZXRhaF9mbHVzaF9kY2FjaGVfcGFnZTogLyogMTEgaW5zbnMgKi8KIAlzZXRoaQkJJXVoaShQQUdFX09GRlNFVCksICVnMQogCXNsbHgJCSVnMSwgMzIsICVnMQogCXN1YgkJJW8wLCAlZzEsICVvMApAQCAtMzI5LDggKzI3Nyw4IEBACiAjaWZkZWYgRENBQ0hFX0FMSUFTSU5HX1BPU1NJQkxFCiAJc2V0aGkJCSVoaShfX2ZsdXNoX2RjYWNoZV9wYWdlKSwgJW8wCiAJb3IJCSVvMCwgJWxvKF9fZmx1c2hfZGNhY2hlX3BhZ2UpLCAlbzAKLQlzZXRoaQkJJWhpKGZsdXNoX2RjcGFnZV9jaGVldGFoKSwgJW8xCi0Jb3IJCSVvMSwgJWxvKGZsdXNoX2RjcGFnZV9jaGVldGFoKSwgJW8xCisJc2V0aGkJCSVoaShfX2NoZWV0YWhfZmx1c2hfZGNhY2hlX3BhZ2UpLCAlbzEKKwlvcgkJJW8xLCAlbG8oX19jaGVldGFoX2ZsdXNoX2RjYWNoZV9wYWdlKSwgJW8xCiAJY2FsbAkJY2hlZXRhaF9wYXRjaF9vbmUKIAkgbW92CQkxMSwgJW8yCiAjZW5kaWYgLyogRENBQ0hFX0FMSUFTSU5HX1BPU1NJQkxFICovCkBAIC01MDUsMjIgKzQ1Myw2IEBACiAJbm9wCiAJbm9wCiAKLQkuZ2xvYmwJCXhjYWxsX3Byb21zdG9wCi14Y2FsbF9wcm9tc3RvcDoKLQlyZHByCQklcHN0YXRlLCAlZzIKLQl3cnByCQklZzIsIFBTVEFURV9JRyB8IFBTVEFURV9BRywgJXBzdGF0ZQotCXJkcHIJCSVwaWwsICVnMgotCXdycHIJCSVnMCwgMTUsICVwaWwKLQlzZXRoaQkJJWhpKDEwOWYpLCAlZzcKLQliLHB0CQkleGNjLCBldHJhcF9pcnEKLTEwOToJIG9yCQklZzcsICVsbygxMDliKSwgJWc3Ci0JZmx1c2h3Ci0JY2FsbAkJcHJvbV9zdG9wc2VsZgotCSBub3AKLQkvKiBXZSBzaG91bGQgbm90IHJldHVybiwganVzdCBzcGluIGlmIHdlIGRvLi4uICovCi0xOgliLGEscHQJCSV4Y2MsIDFiCi0Jbm9wCi0KIAkuZGF0YQogCiBlcnJhdGEzMl9od2J1ZzoKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9wcm9tL01ha2VmaWxlIGIvYXJjaC9zcGFyYzY0L3Byb20vTWFrZWZpbGUKaW5kZXggOGYyNDIwZC4uM2QzM2VkMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9wcm9tL01ha2VmaWxlCisrKyBiL2FyY2gvc3BhcmM2NC9wcm9tL01ha2VmaWxlCkBAIC02LDUgKzYsNSBAQAogRVhUUkFfQUZMQUdTIDo9IC1hbnNpCiBFWFRSQV9DRkxBR1MgOj0gLVdlcnJvcgogCi1saWIteSAgIDo9IGJvb3RzdHIubyBkZXZvcHMubyBpbml0Lm8gbWVtb3J5Lm8gbWlzYy5vIFwKLQkgICB0cmVlLm8gY29uc29sZS5vIHByaW50Zi5vIHAxMjc1Lm8gbWFwLm8gY2lmLm8KK2xpYi15ICAgOj0gYm9vdHN0ci5vIGRldm9wcy5vIGluaXQubyBtaXNjLm8gXAorCSAgIHRyZWUubyBjb25zb2xlLm8gcHJpbnRmLm8gcDEyNzUubyBjaWYubwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L3Byb20vY29uc29sZS5jIGIvYXJjaC9zcGFyYzY0L3Byb20vY29uc29sZS5jCmluZGV4IDAyOGE1M2YuLmVhZTVkYjggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9wcm9tL2NvbnNvbGUuYworKysgYi9hcmNoL3NwYXJjNjQvcHJvbS9jb25zb2xlLmMKQEAgLTY3LDcgKzY3LDcgQEAKIH0KIAogdm9pZAotcHJvbV9wdXRzKGNoYXIgKnMsIGludCBsZW4pCitwcm9tX3B1dHMoY29uc3QgY2hhciAqcywgaW50IGxlbikKIHsKIAlwMTI3NV9jbWQoIndyaXRlIiwgUDEyNzVfQVJHKDEsUDEyNzVfQVJHX0lOX0JVRil8CiAJCQkgICBQMTI3NV9JTk9VVCgzLDEpLApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L3Byb20vZGV2b3BzLmMgYi9hcmNoL3NwYXJjNjQvcHJvbS9kZXZvcHMuYwppbmRleCAyYzk5YjIxLi40NjQxODM5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvcHJvbS9kZXZvcHMuYworKysgYi9hcmNoL3NwYXJjNjQvcHJvbS9kZXZvcHMuYwpAQCAtMTYsNyArMTYsNyBAQAogICogUmV0dXJucyAwIG9uIGZhaWx1cmUuCiAgKi8KIGludAotcHJvbV9kZXZvcGVuKGNoYXIgKmRzdHIpCitwcm9tX2Rldm9wZW4oY29uc3QgY2hhciAqZHN0cikKIHsKIAlyZXR1cm4gcDEyNzVfY21kICgib3BlbiIsIFAxMjc1X0FSRygwLFAxMjc1X0FSR19JTl9TVFJJTkcpfAogCQkJCSAgUDEyNzVfSU5PVVQoMSwxKSwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9wcm9tL2luaXQuYyBiL2FyY2gvc3BhcmM2NC9wcm9tL2luaXQuYwppbmRleCA4MTdmYWFlLi5mM2NjMmQ4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvcHJvbS9pbml0LmMKKysrIGIvYXJjaC9zcGFyYzY0L3Byb20vaW5pdC5jCkBAIC0yNyw3ICsyNyw2IEBACiAgKiBmYWlsdXJlLiAgSXQgZ2V0cyBwYXNzZWQgdGhlIHBvaW50ZXIgdG8gdGhlIFBST00gdmVjdG9yLgogICovCiAKLWV4dGVybiB2b2lkIHByb21fbWVtaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHByb21fY2lmX2luaXQodm9pZCAqLCB2b2lkICopOwogCiB2b2lkIF9faW5pdCBwcm9tX2luaXQodm9pZCAqY2lmX2hhbmRsZXIsIHZvaWQgKmNpZl9zdGFjaykKQEAgLTQ2LDcgKzQ1LDcgQEAKIAlpZigocHJvbV9yb290X25vZGUgPT0gMCkgfHwgKHByb21fcm9vdF9ub2RlID09IC0xKSkKIAkJcHJvbV9oYWx0KCk7CiAKLQlwcm9tX2Nob3Nlbl9ub2RlID0gcHJvbV9maW5kZGV2aWNlKCIvY2hvc2VuIik7CisJcHJvbV9jaG9zZW5fbm9kZSA9IHByb21fZmluZGRldmljZShwcm9tX2Nob3Nlbl9wYXRoKTsKIAlpZiAoIXByb21fY2hvc2VuX25vZGUgfHwgcHJvbV9jaG9zZW5fbm9kZSA9PSAtMSkKIAkJcHJvbV9oYWx0KCk7CiAKQEAgLTkwLDggKzg5LDYgQEAKIAogCXByaW50ayAoIlBST01MSUI6IFN1biBJRUVFIEJvb3QgUHJvbSAlc1xuIiwgYnVmZmVyICsgYnVmYWRqdXN0KTsKIAotCXByb21fbWVtaW5pdCgpOwotCiAJLyogSW5pdGlhbGl6YXRpb24gc3VjY2Vzc2Z1bC4gKi8KIAlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9wcm9tL21hcC5TIGIvYXJjaC9zcGFyYzY0L3Byb20vbWFwLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxYjNmOWMuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYzY0L3Byb20vbWFwLlMKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKiAkSWQ6IG1hcC5TLHYgMS4yIDE5OTkvMTEvMTkgMDU6NTM6MDIgZGF2ZW0gRXhwICQKLSAqIG1hcC5TOiBUcmlja3kgY29kaW5nIHJlcXVpcmVkIHRvIGZpeHVwIHRoZSBrZXJuZWwgT0JQIG1hcHMKLSAqCSAgcHJvcGVybHkuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKLSAqLwotCi0JLnRleHQKLQkuYWxpZ24JODE5MgotCS5nbG9ibAlwcm9tX2Jvb3RfcGFnZQotcHJvbV9ib290X3BhZ2U6Ci1jYWxsX21ldGhvZDoKLQkuYXNjaXoJImNhbGwtbWV0aG9kIgotCS5hbGlnbgk4Ci1tYXA6Ci0JLmFzY2l6CSJtYXAiCi0JLmFsaWduCTgKLQotCS8qIFdoZW4gd2UgYXJlIGludm9rZWQsIG91ciBjYWxsZXIgaGFzIHJlbWFwcGVkIHVzIHRvCi0JICogcGFnZSB6ZXJvLCB0aGVyZWZvcmUgd2UgbXVzdCB1c2UgUEMgcmVsYXRpdmUgYWRkcmVzc2luZwotCSAqIGZvciBldmVyeXRoaW5nIGFmdGVyIHdlIGJlZ2luIHBlcmZvcm1pbmcgdGhlIHVubWFwL21hcAotCSAqIGNhbGxzLgotCSAqLwotCS5nbG9ibAlwcm9tX3JlbWFwCi1wcm9tX3JlbWFwOgkvKiAlbzAgPSBwaHlzcGFnZSwgJW8xID0gdmlydHBhZ2UsICVvMiA9IG1tdV9paGFuZGxlICovCi0JcmQJJXBjLCAlZzEKLQlzcmwJJW8yLCAwLCAlbzIJCQkhIGtpbGwgc2lnbiBleHRlbnNpb24KLQlzZXRoaQklaGkocDEyNzVidWYpLCAlZzIKLQlvcgklZzIsICVsbyhwMTI3NWJ1ZiksICVnMgotCWxkeAlbJWcyICsgMHgxMF0sICVnMwkJISBwcm9tX2NpZl9zdGFjawotCXNhdmUJJWczLCAtKDE5MiArIDEyOCksICVzcAotCWxkeAlbJWcyICsgMHgwOF0sICVsMAkJISBwcm9tX2NpZl9oYW5kbGVyCi0JbW92CSVnNiwgJWkzCi0JbW92CSVnNCwgJWk0Ci0JbW92CSVnNSwgJWk1Ci0JZmx1c2h3Ci0KLQlzZXRoaQklaGkocHJvbV9yZW1hcCAtIGNhbGxfbWV0aG9kKSwgJWc3Ci0Jb3IJJWc3LCAlbG8ocHJvbV9yZW1hcCAtIGNhbGxfbWV0aG9kKSwgJWc3Ci0Jc3ViCSVnMSwgJWc3LCAlbDIJCQkhIGNhbGwtbWV0aG9kIHN0cmluZwotCXNldGhpCSVoaShwcm9tX3JlbWFwIC0gbWFwKSwgJWc3Ci0Jb3IJJWc3LCAlbG8ocHJvbV9yZW1hcCAtIG1hcCksICVnNwotCXN1YgklZzEsICVnNywgJWw0CQkJISBtYXAgc3RyaW5nCi0KLQkvKiBPSywgbWFwIHRoZSA0TUIgcmVnaW9uIHdlIHJlYWxseSBsaXZlIGF0LiAqLwotCXN0eAklbDIsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHgwMF0JISBjYWxsLW1ldGhvZAotCW1vdgk3LCAlbDUKLQlzdHgJJWw1LCBbJXNwICsgMjA0NyArIDEyOCArIDB4MDhdCSEgbnVtX2FyZ3MKLQltb3YJMSwgJWw1Ci0Jc3R4CSVsNSwgWyVzcCArIDIwNDcgKyAxMjggKyAweDEwXQkhIG51bV9yZXRzCi0Jc3R4CSVsNCwgWyVzcCArIDIwNDcgKyAxMjggKyAweDE4XQkhIG1hcAotCXN0eAklaTIsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHgyMF0JISBtbXVfaWhhbmRsZQotCW1vdgktMSwgJWw1Ci0Jc3R4CSVsNSwgWyVzcCArIDIwNDcgKyAxMjggKyAweDI4XQkhIG1vZGUgPT0gZGVmYXVsdAotCXNldGhpCSVoaSg0ICogMTAyNCAqIDEwMjQpLCAlbDUKLQlzdHgJJWw1LCBbJXNwICsgMjA0NyArIDEyOCArIDB4MzBdCSEgc2l6ZQotCXN0eAklaTEsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHgzOF0JISB2YWRkcgotCXN0eAklZzAsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHg0MF0JISBmaWxsZXIKLQlzdHgJJWkwLCBbJXNwICsgMjA0NyArIDEyOCArIDB4NDhdCSEgcGFkZHIKLQljYWxsCSVsMAotCSBhZGQJJXNwLCAoMjA0NyArIDEyOCksICVvMAkJISBhcmd1bWVudCBhcnJheQotCi0JLyogUmVzdG9yZSBoYXJkLWNvZGVkIGdsb2JhbHMuICovCi0JbW92CSVpMywgJWc2Ci0JbW92CSVpNCwgJWc0Ci0JbW92CSVpNSwgJWc1Ci0KLQkvKiBXaGVlZS4uLi4gd2UgYXJlIGRvbmUuICovCi0JcmV0Ci0JcmVzdG9yZQotCi0JLmFsaWduCTgxOTIKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9wcm9tL21lbW9yeS5jIGIvYXJjaC9zcGFyYzY0L3Byb20vbWVtb3J5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0YTgxNDMuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYzY0L3Byb20vbWVtb3J5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyogJElkOiBtZW1vcnkuYyx2IDEuNSAxOTk5LzA4LzMxIDA2OjU1OjA0IGRhdmVtIEV4cCAkCi0gKiBtZW1vcnkuYzogUHJvbSByb3V0aW5lIGZvciBhY3F1aXJpbmcgdmFyaW91cyBiaXRzIG9mIGluZm9ybWF0aW9uCi0gKiAgICAgICAgICAgYWJvdXQgUkFNIG9uIHRoZSBtYWNoaW5lLCBib3RoIHZpcnR1YWwgYW5kIHBoeXNpY2FsLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTcgSmFrdWIgSmVsaW5layAoampAc3Vuc2l0ZS5tZmYuY3VuaS5jeikKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaW5jbHVkZSA8YXNtL29wZW5wcm9tLmg+Ci0jaW5jbHVkZSA8YXNtL29wbGliLmg+Ci0KLS8qIFRoaXMgcm91dGluZSwgZm9yIGNvbnNpc3RlbmN5LCByZXR1cm5zIHRoZSByYW0gcGFyYW1ldGVycyBpbiB0aGUKLSAqIFYwIHByb20gbWVtb3J5IGRlc2NyaXB0b3IgZm9ybWF0LiAgSSBjaG9vc2UgdGhpcyBmb3JtYXQgYmVjYXVzZSBJCi0gKiB0aGluayBpdCB3YXMgdGhlIGVhc2llc3QgdG8gd29yayB3aXRoLiAgSSBmZWVsIHRoZSByZWxpZ2lvdXMKLSAqIGFyZ3VtZW50cyBub3cuLi4gOykgIEFsc28sIEkgcmV0dXJuIHRoZSBsaW5rZWQgbGlzdHMgc29ydGVkIHRvCi0gKiBwcmV2ZW50IHBhZ2luZ19pbml0KCkgdXBzZXQgc3RvbWFjaCBhcyBJIGhhdmUgbm90IHlldCB3cml0dGVuCi0gKiB0aGUgcGVwdG8tYmlzbW9sIGtlcm5lbCBtb2R1bGUgeWV0LgotICovCi0KLXN0cnVjdCBsaW51eF9wcm9tNjRfcmVnaXN0ZXJzIHByb21fcmVnX21lbWxpc3RbNjRdOwotc3RydWN0IGxpbnV4X3Byb202NF9yZWdpc3RlcnMgcHJvbV9yZWdfdG1wWzY0XTsKLQotc3RydWN0IGxpbnV4X21saXN0X3AxMjc1IHByb21fcGh5c190b3RhbFs2NF07Ci1zdHJ1Y3QgbGludXhfbWxpc3RfcDEyNzUgcHJvbV9wcm9tX3Rha2VuWzY0XTsKLXN0cnVjdCBsaW51eF9tbGlzdF9wMTI3NSBwcm9tX3BoeXNfYXZhaWxbNjRdOwotCi1zdHJ1Y3QgbGludXhfbWxpc3RfcDEyNzUgKnByb21fcHRvdF9wdHIgPSBwcm9tX3BoeXNfdG90YWw7Ci1zdHJ1Y3QgbGludXhfbWxpc3RfcDEyNzUgKnByb21fcHRha19wdHIgPSBwcm9tX3Byb21fdGFrZW47Ci1zdHJ1Y3QgbGludXhfbWxpc3RfcDEyNzUgKnByb21fcGF2bF9wdHIgPSBwcm9tX3BoeXNfYXZhaWw7Ci0KLXN0cnVjdCBsaW51eF9tZW1fcDEyNzUgcHJvbV9tZW1saXN0OwotCi0KLS8qIEludGVybmFsIFByb20gbGlicmFyeSByb3V0aW5lIHRvIHNvcnQgYSBsaW51eF9tbGlzdF9wMTI3NSBtZW1vcnkKLSAqIGxpc3QuICBVc2VkIGJlbG93IGluIGluaXRpYWxpemF0aW9uLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQKLXByb21fc29ydG1lbWxpc3Qoc3RydWN0IGxpbnV4X21saXN0X3AxMjc1ICp0aGlzbGlzdCkKLXsKLQlpbnQgc3dhcGkgPSAwOwotCWludCBpLCBtaXRyOwotCXVuc2lnbmVkIGxvbmcgdG1wYWRkciwgdG1wc2l6ZTsKLQl1bnNpZ25lZCBsb25nIGxvd2VzdDsKLQotCWZvcihpPTA7IHRoaXNsaXN0W2ldLnRoZXJlc19tb3JlOyBpKyspIHsKLQkJbG93ZXN0ID0gdGhpc2xpc3RbaV0uc3RhcnRfYWRyOwotCQlmb3IobWl0ciA9IGkrMTsgdGhpc2xpc3RbbWl0ci0xXS50aGVyZXNfbW9yZTsgbWl0cisrKQotCQkJaWYodGhpc2xpc3RbbWl0cl0uc3RhcnRfYWRyIDwgbG93ZXN0KSB7Ci0JCQkJbG93ZXN0ID0gdGhpc2xpc3RbbWl0cl0uc3RhcnRfYWRyOwotCQkJCXN3YXBpID0gbWl0cjsKLQkJCX0KLQkJaWYobG93ZXN0ID09IHRoaXNsaXN0W2ldLnN0YXJ0X2FkcikgY29udGludWU7Ci0JCXRtcGFkZHIgPSB0aGlzbGlzdFtzd2FwaV0uc3RhcnRfYWRyOwotCQl0bXBzaXplID0gdGhpc2xpc3Rbc3dhcGldLm51bV9ieXRlczsKLQkJZm9yKG1pdHIgPSBzd2FwaTsgbWl0ciA+IGk7IG1pdHItLSkgewotCQkJdGhpc2xpc3RbbWl0cl0uc3RhcnRfYWRyID0gdGhpc2xpc3RbbWl0ci0xXS5zdGFydF9hZHI7Ci0JCQl0aGlzbGlzdFttaXRyXS5udW1fYnl0ZXMgPSB0aGlzbGlzdFttaXRyLTFdLm51bV9ieXRlczsKLQkJfQotCQl0aGlzbGlzdFtpXS5zdGFydF9hZHIgPSB0bXBhZGRyOwotCQl0aGlzbGlzdFtpXS5udW1fYnl0ZXMgPSB0bXBzaXplOwotCX0KLX0KLQotLyogSW5pdGlhbGl6ZSB0aGUgbWVtb3J5IGxpc3RzIGJhc2VkIHVwb24gdGhlIHByb20gdmVyc2lvbi4gKi8KLXZvaWQgX19pbml0IHByb21fbWVtaW5pdCh2b2lkKQotewotCWludCBub2RlID0gMDsKLQl1bnNpZ25lZCBpbnQgaXRlciwgbnVtX3JlZ3M7Ci0KLQlub2RlID0gcHJvbV9maW5kZGV2aWNlKCIvbWVtb3J5Iik7Ci0JbnVtX3JlZ3MgPSBwcm9tX2dldHByb3BlcnR5KG5vZGUsICJhdmFpbGFibGUiLAotCQkJCSAgICAoY2hhciAqKSBwcm9tX3JlZ19tZW1saXN0LAotCQkJCSAgICBzaXplb2YocHJvbV9yZWdfbWVtbGlzdCkpOwotCW51bV9yZWdzID0gKG51bV9yZWdzL3NpemVvZihzdHJ1Y3QgbGludXhfcHJvbTY0X3JlZ2lzdGVycykpOwotCWZvcihpdGVyPTA7IGl0ZXI8bnVtX3JlZ3M7IGl0ZXIrKykgewotCQlwcm9tX3BoeXNfYXZhaWxbaXRlcl0uc3RhcnRfYWRyID0KLQkJCXByb21fcmVnX21lbWxpc3RbaXRlcl0ucGh5c19hZGRyOwotCQlwcm9tX3BoeXNfYXZhaWxbaXRlcl0ubnVtX2J5dGVzID0KLQkJCXByb21fcmVnX21lbWxpc3RbaXRlcl0ucmVnX3NpemU7Ci0JCXByb21fcGh5c19hdmFpbFtpdGVyXS50aGVyZXNfbW9yZSA9Ci0JCQkmcHJvbV9waHlzX2F2YWlsW2l0ZXIrMV07Ci0JfQotCXByb21fcGh5c19hdmFpbFtpdGVyLTFdLnRoZXJlc19tb3JlID0gTlVMTDsKLQotCW51bV9yZWdzID0gcHJvbV9nZXRwcm9wZXJ0eShub2RlLCAicmVnIiwKLQkJCQkgICAgKGNoYXIgKikgcHJvbV9yZWdfbWVtbGlzdCwKLQkJCQkgICAgc2l6ZW9mKHByb21fcmVnX21lbWxpc3QpKTsKLQludW1fcmVncyA9IChudW1fcmVncy9zaXplb2Yoc3RydWN0IGxpbnV4X3Byb202NF9yZWdpc3RlcnMpKTsKLQlmb3IoaXRlcj0wOyBpdGVyPG51bV9yZWdzOyBpdGVyKyspIHsKLQkJcHJvbV9waHlzX3RvdGFsW2l0ZXJdLnN0YXJ0X2FkciA9Ci0JCQlwcm9tX3JlZ19tZW1saXN0W2l0ZXJdLnBoeXNfYWRkcjsKLQkJcHJvbV9waHlzX3RvdGFsW2l0ZXJdLm51bV9ieXRlcyA9Ci0JCQlwcm9tX3JlZ19tZW1saXN0W2l0ZXJdLnJlZ19zaXplOwotCQlwcm9tX3BoeXNfdG90YWxbaXRlcl0udGhlcmVzX21vcmUgPQotCQkJJnByb21fcGh5c190b3RhbFtpdGVyKzFdOwotCX0KLQlwcm9tX3BoeXNfdG90YWxbaXRlci0xXS50aGVyZXNfbW9yZSA9IE5VTEw7Ci0KLQlub2RlID0gcHJvbV9maW5kZGV2aWNlKCIvdmlydHVhbC1tZW1vcnkiKTsKLQludW1fcmVncyA9IHByb21fZ2V0cHJvcGVydHkobm9kZSwgImF2YWlsYWJsZSIsCi0JCQkJICAgIChjaGFyICopIHByb21fcmVnX21lbWxpc3QsCi0JCQkJICAgIHNpemVvZihwcm9tX3JlZ19tZW1saXN0KSk7Ci0JbnVtX3JlZ3MgPSAobnVtX3JlZ3Mvc2l6ZW9mKHN0cnVjdCBsaW51eF9wcm9tNjRfcmVnaXN0ZXJzKSk7Ci0KLQkvKiBDb252ZXJ0IGF2YWlsYWJsZSB2aXJ0dWFsIGFyZWFzIHRvIHRha2VuIHZpcnR1YWwKLQkgKiBhcmVhcy4gIEZpcnN0IHNvcnQsIHRoZW4gY29udmVydC4KLQkgKi8KLQlmb3IoaXRlcj0wOyBpdGVyPG51bV9yZWdzOyBpdGVyKyspIHsKLQkJcHJvbV9wcm9tX3Rha2VuW2l0ZXJdLnN0YXJ0X2FkciA9Ci0JCQlwcm9tX3JlZ19tZW1saXN0W2l0ZXJdLnBoeXNfYWRkcjsKLQkJcHJvbV9wcm9tX3Rha2VuW2l0ZXJdLm51bV9ieXRlcyA9Ci0JCQlwcm9tX3JlZ19tZW1saXN0W2l0ZXJdLnJlZ19zaXplOwotCQlwcm9tX3Byb21fdGFrZW5baXRlcl0udGhlcmVzX21vcmUgPQotCQkJJnByb21fcHJvbV90YWtlbltpdGVyKzFdOwotCX0KLQlwcm9tX3Byb21fdGFrZW5baXRlci0xXS50aGVyZXNfbW9yZSA9IE5VTEw7Ci0KLQlwcm9tX3NvcnRtZW1saXN0KHByb21fcHJvbV90YWtlbik7Ci0KLQkvKiBGaW5hbGx5LCBjb252ZXJ0LiAqLwotCWZvcihpdGVyPTA7IGl0ZXI8bnVtX3JlZ3M7IGl0ZXIrKykgewotCQlwcm9tX3Byb21fdGFrZW5baXRlcl0uc3RhcnRfYWRyID0KLQkJCXByb21fcHJvbV90YWtlbltpdGVyXS5zdGFydF9hZHIgKwotCQkJcHJvbV9wcm9tX3Rha2VuW2l0ZXJdLm51bV9ieXRlczsKLQkJcHJvbV9wcm9tX3Rha2VuW2l0ZXJdLm51bV9ieXRlcyA9Ci0JCQlwcm9tX3Byb21fdGFrZW5baXRlcisxXS5zdGFydF9hZHIgLQotCQkJcHJvbV9wcm9tX3Rha2VuW2l0ZXJdLnN0YXJ0X2FkcjsKLQl9Ci0JcHJvbV9wcm9tX3Rha2VuW2l0ZXItMV0ubnVtX2J5dGVzID0KLQkJLTFVTCAtIHByb21fcHJvbV90YWtlbltpdGVyLTFdLnN0YXJ0X2FkcjsKLQotCS8qIFNvcnQgdGhlIG90aGVyIHR3byBsaXN0cy4gKi8KLQlwcm9tX3NvcnRtZW1saXN0KHByb21fcGh5c190b3RhbCk7Ci0JcHJvbV9zb3J0bWVtbGlzdChwcm9tX3BoeXNfYXZhaWwpOwotCi0JLyogTGluayBhbGwgdGhlIGxpc3RzIGludG8gdGhlIHRvcC1sZXZlbCBkZXNjcmlwdG9yLiAqLwotCXByb21fbWVtbGlzdC5wMTI3NV90b3RwaHlzPSZwcm9tX3B0b3RfcHRyOwotCXByb21fbWVtbGlzdC5wMTI3NV9wcm9tbWFwPSZwcm9tX3B0YWtfcHRyOwotCXByb21fbWVtbGlzdC5wMTI3NV9hdmFpbGFibGU9JnByb21fcGF2bF9wdHI7Ci19Ci0KLS8qIFRoaXMgcmV0dXJucyBhIHBvaW50ZXIgdG8gb3VyIGxpYnJhcmllcyBpbnRlcm5hbCBwMTI3NSBmb3JtYXQKLSAqIG1lbW9yeSBkZXNjcmlwdG9yLgotICovCi1zdHJ1Y3QgbGludXhfbWVtX3AxMjc1ICoKLXByb21fbWVtaW5mbyh2b2lkKQotewotCXJldHVybiAmcHJvbV9tZW1saXN0OwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L3Byb20vbWlzYy5jIGIvYXJjaC9zcGFyYzY0L3Byb20vbWlzYy5jCmluZGV4IDE5YzQ0ZTkuLjg3ZjVjZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9wcm9tL21pc2MuYworKysgYi9hcmNoL3NwYXJjNjQvcHJvbS9taXNjLmMKQEAgLTE3LDE0ICsxNywxNCBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAogLyogUmVzZXQgYW5kIHJlYm9vdCB0aGUgbWFjaGluZSB3aXRoIHRoZSBjb21tYW5kICdiY29tbWFuZCcuICovCi12b2lkIHByb21fcmVib290KGNoYXIgKmJjb21tYW5kKQordm9pZCBwcm9tX3JlYm9vdChjb25zdCBjaGFyICpiY29tbWFuZCkKIHsKIAlwMTI3NV9jbWQoImJvb3QiLCBQMTI3NV9BUkcoMCwgUDEyNzVfQVJHX0lOX1NUUklORykgfAogCQkgIFAxMjc1X0lOT1VUKDEsIDApLCBiY29tbWFuZCk7CiB9CiAKIC8qIEZvcnRoIGV2YWx1YXRlIHRoZSBleHByZXNzaW9uIGNvbnRhaW5lZCBpbiAnZnN0cmluZycuICovCi12b2lkIHByb21fZmV2YWwoY2hhciAqZnN0cmluZykKK3ZvaWQgcHJvbV9mZXZhbChjb25zdCBjaGFyICpmc3RyaW5nKQogewogCWlmICghZnN0cmluZyB8fCBmc3RyaW5nWzBdID09IDApCiAJCXJldHVybjsKQEAgLTY4LDE5ICs2OCwxMSBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotI2lmZGVmIENPTkZJR19TTVAKLWV4dGVybiB2b2lkIHNtcF9wcm9tc3RvcF9vdGhlcnModm9pZCk7Ci0jZW5kaWYKLQogLyogRHJvcCBpbnRvIHRoZSBwcm9tLCBidXQgY29tcGxldGVseSB0ZXJtaW5hdGUgdGhlIHByb2dyYW0uCiAgKiBObyBjaGFuY2Ugb2YgY29udGludWluZy4KICAqLwogdm9pZCBwcm9tX2hhbHQodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfU01QCi0Jc21wX3Byb21zdG9wX290aGVycygpOwotCXVkZWxheSg4MDAwKTsKLSNlbmRpZgogYWdhaW46CiAJcDEyNzVfY21kKCJleGl0IiwgUDEyNzVfSU5PVVQoMCwgMCkpOwogCWdvdG8gYWdhaW47IC8qIFBST00gaXMgb3V0IHRvIGdldCBtZSAtRGF2ZU0gKi8KQEAgLTg4LDEwICs4MCw2IEBACiAKIHZvaWQgcHJvbV9oYWx0X3Bvd2VyX29mZih2b2lkKQogewotI2lmZGVmIENPTkZJR19TTVAKLQlzbXBfcHJvbXN0b3Bfb3RoZXJzKCk7Ci0JdWRlbGF5KDgwMDApOwotI2VuZGlmCiAJcDEyNzVfY21kKCJTVU5XLHBvd2VyLW9mZiIsIFAxMjc1X0lOT1VUKDAsIDApKTsKIAogCS8qIGlmIG5vdGhpbmcgZWxzZSBoZWxwcywgd2UganVzdCBoYWx0ICovCkBAIC0xNDgsMjEgKzEzNiwxOSBAQAogCXAxMjc1X2NtZCgiU1VOVyxzZXQtdHJhcC10YWJsZSIsIFAxMjc1X0lOT1VUKDEsIDApLCB0YmEpOwogfQogCi1pbnQgbW11X2loYW5kbGVfY2FjaGUgPSAwOwotCiBpbnQgcHJvbV9nZXRfbW11X2loYW5kbGUodm9pZCkKIHsKIAlpbnQgbm9kZSwgcmV0OwogCi0JaWYgKG1tdV9paGFuZGxlX2NhY2hlICE9IDApCi0JCXJldHVybiBtbXVfaWhhbmRsZV9jYWNoZTsKKwlpZiAocHJvbV9tbXVfaWhhbmRsZV9jYWNoZSAhPSAwKQorCQlyZXR1cm4gcHJvbV9tbXVfaWhhbmRsZV9jYWNoZTsKIAotCW5vZGUgPSBwcm9tX2ZpbmRkZXZpY2UoIi9jaG9zZW4iKTsKLQlyZXQgPSBwcm9tX2dldGludChub2RlLCAibW11Iik7CisJbm9kZSA9IHByb21fZmluZGRldmljZShwcm9tX2Nob3Nlbl9wYXRoKTsKKwlyZXQgPSBwcm9tX2dldGludChub2RlLCBwcm9tX21tdV9uYW1lKTsKIAlpZiAocmV0ID09IC0xIHx8IHJldCA9PSAwKQotCQltbXVfaWhhbmRsZV9jYWNoZSA9IC0xOworCQlwcm9tX21tdV9paGFuZGxlX2NhY2hlID0gLTE7CiAJZWxzZQotCQltbXVfaWhhbmRsZV9jYWNoZSA9IHJldDsKKwkJcHJvbV9tbXVfaWhhbmRsZV9jYWNoZSA9IHJldDsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xOTAsNyArMTc2LDcgQEAKIAkJICAgIHVuc2lnbmVkIGxvbmcgdHRlX2RhdGEsCiAJCSAgICB1bnNpZ25lZCBsb25nIHZhZGRyKQogewotCXJldHVybiBwMTI3NV9jbWQoImNhbGwtbWV0aG9kIiwKKwlyZXR1cm4gcDEyNzVfY21kKHByb21fY2FsbG1ldGhvZF9uYW1lLAogCQkJIChQMTI3NV9BUkcoMCwgUDEyNzVfQVJHX0lOX1NUUklORykgfAogCQkJICBQMTI3NV9BUkcoMiwgUDEyNzVfQVJHX0lOXzY0QikgfAogCQkJICBQMTI3NV9BUkcoMywgUDEyNzVfQVJHX0lOXzY0QikgfApAQCAtMjA3LDcgKzE5Myw3IEBACiAJCSAgICB1bnNpZ25lZCBsb25nIHR0ZV9kYXRhLAogCQkgICAgdW5zaWduZWQgbG9uZyB2YWRkcikKIHsKLQlyZXR1cm4gcDEyNzVfY21kKCJjYWxsLW1ldGhvZCIsCisJcmV0dXJuIHAxMjc1X2NtZChwcm9tX2NhbGxtZXRob2RfbmFtZSwKIAkJCSAoUDEyNzVfQVJHKDAsIFAxMjc1X0FSR19JTl9TVFJJTkcpIHwKIAkJCSAgUDEyNzVfQVJHKDIsIFAxMjc1X0FSR19JTl82NEIpIHwKIAkJCSAgUDEyNzVfQVJHKDMsIFAxMjc1X0FSR19JTl82NEIpIHwKQEAgLTIyMywxMyArMjA5LDEzIEBACiBpbnQgcHJvbV9tYXAoaW50IG1vZGUsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkgICAgIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgcGFkZHIpCiB7Ci0JaW50IHJldCA9IHAxMjc1X2NtZCgiY2FsbC1tZXRob2QiLAorCWludCByZXQgPSBwMTI3NV9jbWQocHJvbV9jYWxsbWV0aG9kX25hbWUsCiAJCQkgICAgKFAxMjc1X0FSRygwLCBQMTI3NV9BUkdfSU5fU1RSSU5HKSB8CiAJCQkgICAgIFAxMjc1X0FSRygzLCBQMTI3NV9BUkdfSU5fNjRCKSB8CiAJCQkgICAgIFAxMjc1X0FSRyg0LCBQMTI3NV9BUkdfSU5fNjRCKSB8CiAJCQkgICAgIFAxMjc1X0FSRyg2LCBQMTI3NV9BUkdfSU5fNjRCKSB8CiAJCQkgICAgIFAxMjc1X0lOT1VUKDcsIDEpKSwKLQkJCSAgICAibWFwIiwKKwkJCSAgICBwcm9tX21hcF9uYW1lLAogCQkJICAgIHByb21fZ2V0X21tdV9paGFuZGxlKCksCiAJCQkgICAgbW9kZSwKIAkJCSAgICBzaXplLApAQCAtMjQ0LDEyICsyMzAsMTIgQEAKIAogdm9pZCBwcm9tX3VubWFwKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyB2YWRkcikKIHsKLQlwMTI3NV9jbWQoImNhbGwtbWV0aG9kIiwKKwlwMTI3NV9jbWQocHJvbV9jYWxsbWV0aG9kX25hbWUsCiAJCSAgKFAxMjc1X0FSRygwLCBQMTI3NV9BUkdfSU5fU1RSSU5HKSB8CiAJCSAgIFAxMjc1X0FSRygyLCBQMTI3NV9BUkdfSU5fNjRCKSB8CiAJCSAgIFAxMjc1X0FSRygzLCBQMTI3NV9BUkdfSU5fNjRCKSB8CiAJCSAgIFAxMjc1X0lOT1VUKDQsIDApKSwKLQkJICAidW5tYXAiLAorCQkgIHByb21fdW5tYXBfbmFtZSwKIAkJICBwcm9tX2dldF9tbXVfaWhhbmRsZSgpLAogCQkgIHNpemUsCiAJCSAgdmFkZHIpOwpAQCAtMjU4LDcgKzI0NCw3IEBACiAvKiBTZXQgYXNpZGUgcGh5c2ljYWwgbWVtb3J5IHdoaWNoIGlzIG5vdCB0b3VjaGVkIG9yIG1vZGlmaWVkCiAgKiBhY3Jvc3Mgc29mdCByZXNldHMuCiAgKi8KLXVuc2lnbmVkIGxvbmcgcHJvbV9yZXRhaW4oY2hhciAqbmFtZSwKK3Vuc2lnbmVkIGxvbmcgcHJvbV9yZXRhaW4oY29uc3QgY2hhciAqbmFtZSwKIAkJCSAgdW5zaWduZWQgbG9uZyBwYV9sb3csIHVuc2lnbmVkIGxvbmcgcGFfaGlnaCwKIAkJCSAgbG9uZyBzaXplLCBsb25nIGFsaWduKQogewpAQCAtMjkwLDcgKzI3Niw3IEBACiAJCSAgICB1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwKIAkJICAgIGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbikKIHsKLQlyZXR1cm4gcDEyNzVfY21kKCJjYWxsLW1ldGhvZCIsCisJcmV0dXJuIHAxMjc1X2NtZChwcm9tX2NhbGxtZXRob2RfbmFtZSwKIAkJCSAoUDEyNzVfQVJHKDAsIFAxMjc1X0FSR19JTl9TVFJJTkcpCXwKIAkJCSAgUDEyNzVfQVJHKDMsIFAxMjc1X0FSR19PVVRfQlVGKQl8CiAJCQkgIFAxMjc1X0FSRyg2LCBQMTI3NV9BUkdfSU5fNjRCKQl8CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvcHJvbS9wMTI3NS5jIGIvYXJjaC9zcGFyYzY0L3Byb20vcDEyNzUuYwppbmRleCA1OWZlMzhiLi5hNWE3YzU3MSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L3Byb20vcDEyNzUuYworKysgYi9hcmNoL3NwYXJjNjQvcHJvbS9wMTI3NS5jCkBAIC00Niw3ICs0Niw3IEBACiAgKi8KIERFRklORV9TUElOTE9DSyhwcm9tX2VudHJ5X2xvY2spOwogCi1sb25nIHAxMjc1X2NtZCAoY2hhciAqc2VydmljZSwgbG9uZyBmbXQsIC4uLikKK2xvbmcgcDEyNzVfY21kKGNvbnN0IGNoYXIgKnNlcnZpY2UsIGxvbmcgZm10LCAuLi4pCiB7CiAJY2hhciAqcCwgKnE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9wcm9tL3ByaW50Zi5jIGIvYXJjaC9zcGFyYzY0L3Byb20vcHJpbnRmLmMKaW5kZXggYTZkZjgyYy4uNjYwOTQzZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L3Byb20vcHJpbnRmLmMKKysrIGIvYXJjaC9zcGFyYzY0L3Byb20vcHJpbnRmLmMKQEAgLTM0LDcgKzM0LDcgQEAKIH0KIAogdm9pZAotcHJvbV9wcmludGYoY2hhciAqZm10LCAuLi4pCitwcm9tX3ByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAl2YV9saXN0IGFyZ3M7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvcHJvbS90cmVlLmMgYi9hcmNoL3NwYXJjNjQvcHJvbS90cmVlLmMKaW5kZXggY2NmNzMyNS4uYjFmZjllOCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L3Byb20vdHJlZS5jCisrKyBiL2FyY2gvc3BhcmM2NC9wcm9tL3RyZWUuYwpAQCAtNjksNyArNjksNyBAQAogICogUmV0dXJuIC0xIG9uIGVycm9yLgogICovCiBfX2lubGluZV9fIGludAotcHJvbV9nZXRwcm9wbGVuKGludCBub2RlLCBjaGFyICpwcm9wKQorcHJvbV9nZXRwcm9wbGVuKGludCBub2RlLCBjb25zdCBjaGFyICpwcm9wKQogewogCWlmKCghbm9kZSkgfHwgKCFwcm9wKSkgcmV0dXJuIC0xOwogCXJldHVybiBwMTI3NV9jbWQgKCJnZXRwcm9wbGVuIiwgCkBAIC04MywyMCArODMsMjAgQEAKICAqIHdhcyBzdWNjZXNzZnVsIHRoZSBsZW5ndGggd2lsbCBiZSByZXR1cm5lZCwgZWxzZSAtMSBpcyByZXR1cm5lZC4KICAqLwogX19pbmxpbmVfXyBpbnQKLXByb21fZ2V0cHJvcGVydHkoaW50IG5vZGUsIGNoYXIgKnByb3AsIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZnNpemUpCitwcm9tX2dldHByb3BlcnR5KGludCBub2RlLCBjb25zdCBjaGFyICpwcm9wLCBjaGFyICpidWZmZXIsIGludCBidWZzaXplKQogewogCWludCBwbGVuOwogCiAJcGxlbiA9IHByb21fZ2V0cHJvcGxlbihub2RlLCBwcm9wKTsKLQlpZigocGxlbiA+IGJ1ZnNpemUpIHx8IChwbGVuID09IDApIHx8IChwbGVuID09IC0xKSkKKwlpZiAoKHBsZW4gPiBidWZzaXplKSB8fCAocGxlbiA9PSAwKSB8fCAocGxlbiA9PSAtMSkpIHsKIAkJcmV0dXJuIC0xOwotCWVsc2UgeworCX0gZWxzZSB7CiAJCS8qIE9rLCB0aGluZ3Mgc2VlbSBhbGwgcmlnaHQuICovCi0JCXJldHVybiBwMTI3NV9jbWQgKCJnZXRwcm9wIiwgCi0JCQkJICBQMTI3NV9BUkcoMSxQMTI3NV9BUkdfSU5fU1RSSU5HKXwKLQkJCQkgIFAxMjc1X0FSRygyLFAxMjc1X0FSR19PVVRfQlVGKXwKLQkJCQkgIFAxMjc1X0lOT1VUKDQsIDEpLCAKLQkJCQkgIG5vZGUsIHByb3AsIGJ1ZmZlciwgUDEyNzVfU0laRShwbGVuKSk7CisJCXJldHVybiBwMTI3NV9jbWQocHJvbV9nZXRwcm9wX25hbWUsIAorCQkJCSBQMTI3NV9BUkcoMSxQMTI3NV9BUkdfSU5fU1RSSU5HKXwKKwkJCQkgUDEyNzVfQVJHKDIsUDEyNzVfQVJHX09VVF9CVUYpfAorCQkJCSBQMTI3NV9JTk9VVCg0LCAxKSwgCisJCQkJIG5vZGUsIHByb3AsIGJ1ZmZlciwgUDEyNzVfU0laRShwbGVuKSk7CiAJfQogfQogCkBAIC0xMDQsNyArMTA0LDcgQEAKICAqIG9uIGZhaWx1cmUuCiAgKi8KIF9faW5saW5lX18gaW50Ci1wcm9tX2dldGludChpbnQgbm9kZSwgY2hhciAqcHJvcCkKK3Byb21fZ2V0aW50KGludCBub2RlLCBjb25zdCBjaGFyICpwcm9wKQogewogCWludCBpbnRwcm9wOwogCkBAIC0xMTksNyArMTE5LDcgQEAKICAqLwogCiBpbnQKLXByb21fZ2V0aW50ZGVmYXVsdChpbnQgbm9kZSwgY2hhciAqcHJvcGVydHksIGludCBkZWZsdCkKK3Byb21fZ2V0aW50ZGVmYXVsdChpbnQgbm9kZSwgY29uc3QgY2hhciAqcHJvcGVydHksIGludCBkZWZsdCkKIHsKIAlpbnQgcmV0dmFsOwogCkBAIC0xMzEsNyArMTMxLDcgQEAKIAogLyogQWNxdWlyZSBhIGJvb2xlYW4gcHJvcGVydHksIDE9VFJVRSAwPUZBTFNFLiAqLwogaW50Ci1wcm9tX2dldGJvb2woaW50IG5vZGUsIGNoYXIgKnByb3ApCitwcm9tX2dldGJvb2woaW50IG5vZGUsIGNvbnN0IGNoYXIgKnByb3ApCiB7CiAJaW50IHJldHZhbDsKIApAQCAtMTQ1LDcgKzE0NSw3IEBACiAgKiBidWZmZXIuCiAgKi8KIHZvaWQKLXByb21fZ2V0c3RyaW5nKGludCBub2RlLCBjaGFyICpwcm9wLCBjaGFyICp1c2VyX2J1ZiwgaW50IHVidWZfc2l6ZSkKK3Byb21fZ2V0c3RyaW5nKGludCBub2RlLCBjb25zdCBjaGFyICpwcm9wLCBjaGFyICp1c2VyX2J1ZiwgaW50IHVidWZfc2l6ZSkKIHsKIAlpbnQgbGVuOwogCkBAIC0xNjAsNyArMTYwLDcgQEAKICAqIFlFUyA9IDEgICBOTyA9IDAKICAqLwogaW50Ci1wcm9tX25vZGVtYXRjaChpbnQgbm9kZSwgY2hhciAqbmFtZSkKK3Byb21fbm9kZW1hdGNoKGludCBub2RlLCBjb25zdCBjaGFyICpuYW1lKQogewogCWNoYXIgbmFtZWJ1ZlsxMjhdOwogCXByb21fZ2V0cHJvcGVydHkobm9kZSwgIm5hbWUiLCBuYW1lYnVmLCBzaXplb2YobmFtZWJ1ZikpOwpAQCAtMTcyLDcgKzE3Miw3IEBACiAgKiAnbm9kZW5hbWUnLiAgUmV0dXJuIG5vZGUgaWYgc3VjY2Vzc2Z1bCwgemVybyBpZiBub3QuCiAgKi8KIGludAotcHJvbV9zZWFyY2hzaWJsaW5ncyhpbnQgbm9kZV9zdGFydCwgY2hhciAqbm9kZW5hbWUpCitwcm9tX3NlYXJjaHNpYmxpbmdzKGludCBub2RlX3N0YXJ0LCBjb25zdCBjaGFyICpub2RlbmFtZSkKIHsKIAogCWludCB0aGlzbm9kZSwgZXJyb3I7CkBAIC0yOTQsNyArMjk0LDcgQEAKICAqIHByb3BlcnR5IHR5cGVzIGZvciB0aGlzIG5vZGUuCiAgKi8KIF9faW5saW5lX18gY2hhciAqCi1wcm9tX25leHRwcm9wKGludCBub2RlLCBjaGFyICpvcHJvcCwgY2hhciAqYnVmZmVyKQorcHJvbV9uZXh0cHJvcChpbnQgbm9kZSwgY29uc3QgY2hhciAqb3Byb3AsIGNoYXIgKmJ1ZmZlcikKIHsKIAljaGFyIGJ1ZlszMl07CiAKQEAgLTMxNCwxNSArMzE0LDE3IEBACiB9CiAKIGludAotcHJvbV9maW5kZGV2aWNlKGNoYXIgKm5hbWUpCitwcm9tX2ZpbmRkZXZpY2UoY29uc3QgY2hhciAqbmFtZSkKIHsKLQlpZighbmFtZSkgcmV0dXJuIDA7Ci0JcmV0dXJuIHAxMjc1X2NtZCAoImZpbmRkZXZpY2UiLCBQMTI3NV9BUkcoMCxQMTI3NV9BUkdfSU5fU1RSSU5HKXwKLQkJCQkgICAgICAgIFAxMjc1X0lOT1VUKDEsIDEpLCAKLQkJCQkgICAgICAgIG5hbWUpOworCWlmICghbmFtZSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHAxMjc1X2NtZChwcm9tX2ZpbmRkZXZfbmFtZSwKKwkJCSBQMTI3NV9BUkcoMCxQMTI3NV9BUkdfSU5fU1RSSU5HKXwKKwkJCSBQMTI3NV9JTk9VVCgxLCAxKSwgCisJCQkgbmFtZSk7CiB9CiAKLWludCBwcm9tX25vZGVfaGFzX3Byb3BlcnR5KGludCBub2RlLCBjaGFyICpwcm9wKQoraW50IHByb21fbm9kZV9oYXNfcHJvcGVydHkoaW50IG5vZGUsIGNvbnN0IGNoYXIgKnByb3ApCiB7CiAJY2hhciBidWYgWzMyXTsKICAgICAgICAgCkBAIC0zMzksNyArMzQxLDcgQEAKICAqIG9mICdzaXplJyBieXRlcy4gIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoZSBwcm9tIGFjY2VwdGVkLgogICovCiBpbnQKLXByb21fc2V0cHJvcChpbnQgbm9kZSwgY2hhciAqcG5hbWUsIGNoYXIgKnZhbHVlLCBpbnQgc2l6ZSkKK3Byb21fc2V0cHJvcChpbnQgbm9kZSwgY29uc3QgY2hhciAqcG5hbWUsIGNoYXIgKnZhbHVlLCBpbnQgc2l6ZSkKIHsKIAlpZihzaXplID09IDApIHJldHVybiAwOwogCWlmKChwbmFtZSA9PSAwKSB8fCAodmFsdWUgPT0gMCkpIHJldHVybiAwOwpAQCAtMzY0LDcgKzM2Niw3IEBACiAgKiBGSVhNRTogU2hvdWxkIHdvcmsgZm9yIHYwIGFzIHdlbGwKICAqLwogaW50Ci1wcm9tX3BhdGh0b2lub2RlKGNoYXIgKnBhdGgpCitwcm9tX3BhdGh0b2lub2RlKGNvbnN0IGNoYXIgKnBhdGgpCiB7CiAJaW50IG5vZGUsIGluc3Q7CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vS2NvbmZpZy5pMzg2IGIvYXJjaC91bS9LY29uZmlnLmkzODYKaW5kZXggOGFkMTU2YS4uNWQ5MmNhYyAxMDA2NDQKLS0tIGEvYXJjaC91bS9LY29uZmlnLmkzODYKKysrIGIvYXJjaC91bS9LY29uZmlnLmkzODYKQEAgLTQyLDMgKzQyLDcgQEAKIGNvbmZpZyBBUkNIX1JFVVNFX0hPU1RfVlNZU0NBTExfQVJFQQogCWJvb2wKIAlkZWZhdWx0IHkKKworY29uZmlnIFg4Nl9DTVBYQ0hHCisJYm9vbAorCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9NYWtlZmlsZSBiL2FyY2gvdW0vTWFrZWZpbGUKaW5kZXggY2U5ODcyNi4uZTFmZmFkMiAxMDA2NDQKLS0tIGEvYXJjaC91bS9NYWtlZmlsZQorKysgYi9hcmNoL3VtL01ha2VmaWxlCkBAIC0yOCw4ICsyOCw2IEBACiBBUkNIX1NZTUxJTktTID0gaW5jbHVkZS9hc20tdW0vYXJjaCAkKEFSQ0hfRElSKS9pbmNsdWRlL3N5c2RlcCAkKEFSQ0hfRElSKS9vcyBcCiAJJChTWU1MSU5LX0hFQURFUlMpICQoQVJDSF9ESVIpL2luY2x1ZGUvdW1sLWNvbmZpZy5oCiAKLUdFTl9IRUFERVJTICs9ICQoQVJDSF9ESVIpL2luY2x1ZGUvdGFzay5oICQoQVJDSF9ESVIpL2luY2x1ZGUva2Vybl9jb25zdGFudHMuaAotCiB1bS1tb2Rlcy0kKENPTkZJR19NT0RFX1RUKSArPSB0dAogdW0tbW9kZXMtJChDT05GSUdfTU9ERV9TS0FTKSArPSBza2FzCiAKQEAgLTQ1LDE3ICs0MywxOSBAQAogCiBBUkNIX0lOQ0xVREUJOj0gLUkkKEFSQ0hfRElSKS9pbmNsdWRlCiBpZm5lcSAoJChLQlVJTERfU1JDKSwpCi1BUkNIX0lOQ0xVREUJKz0gLUkkKEFSQ0hfRElSKS9pbmNsdWRlMgogQVJDSF9JTkNMVURFCSs9IC1JJChzcmN0cmVlKS8kKEFSQ0hfRElSKS9pbmNsdWRlCi1NUlBST1BFUl9ESVJTCSs9ICQoQVJDSF9ESVIpL2luY2x1ZGUyCiBlbmRpZgogU1lTX0RJUgkJOj0gJChBUkNIX0RJUikvaW5jbHVkZS9zeXNkZXAtJChTVUJBUkNIKQogCiAjIC1Edm1hcD1rZXJuZWxfdm1hcCBhZmZlY3RzIGV2ZXJ5dGhpbmcsIGFuZCBwcmV2ZW50cyBhbnl0aGluZyBmcm9tCiAjIHJlZmVyZW5jaW5nIHRoZSBsaWJwY2FwLm8gc3ltYm9sIHNvIG5hbWVkLgorIworIyBTYW1lIHRoaW5ncyBmb3IgaW42YWRkcl9sb29wYmFjayAtIGZvdW5kIGluIGxpYmMuCiAKIENGTEFHUyArPSAkKENGTEFHUy15KSAtRF9fYXJjaF91bV9fIC1EU1VCQVJDSD1cIiQoU1VCQVJDSClcIiBcCi0JJChBUkNIX0lOQ0xVREUpICQoTU9ERV9JTkNMVURFKSAtRHZtYXA9a2VybmVsX3ZtYXAKKwkkKEFSQ0hfSU5DTFVERSkgJChNT0RFX0lOQ0xVREUpIC1Edm1hcD1rZXJuZWxfdm1hcCBcCisJLURpbjZhZGRyX2xvb3BiYWNrPWtlcm5lbF9pbjZhZGRyX2xvb3BiYWNrCisKIEFGTEFHUyArPSAkKEFSQ0hfSU5DTFVERSkKIAogVVNFUl9DRkxBR1MgOj0gJChwYXRzdWJzdCAtSSUsLCQoQ0ZMQUdTKSkKQEAgLTgzLDEwICs4Myw2IEBACiAKIFNJWkUgPSAoKCQoQ09ORklHX05FU1RfTEVWRUwpICsgJChDT05GSUdfS0VSTkVMX0hBTEZfR0lHUykpICogMHgyMDAwMDAwMCkKIAotaWZlcSAoJChDT05GSUdfTU9ERV9TS0FTKSwgeSkKLSQoU1lTX0hFQURFUlMpIDogJChBUkNIX0RJUikvaW5jbHVkZS9za2FzX3B0cmVncy5oCi1lbmRpZgotCiAuUEhPTlk6IGxpbnV4CiAKIGFsbDogbGludXgKQEAgLTEwNyw3ICsxMDMsOCBAQAogJChzaGVsbCBjZCAkKEFSQ0hfRElSKSAmJiBsbiAtc2YgS2NvbmZpZy4kKFNVQkFSQ0gpIEtjb25maWcuYXJjaCkKIGVuZGlmCiAKLWFyY2hwcmVwYXJlOiAkKEFSQ0hfU1lNTElOS1MpICQoU1lTX0hFQURFUlMpICQoR0VOX0hFQURFUlMpCithcmNocHJlcGFyZTogJChBUkNIX1NZTUxJTktTKSAkKEFSQ0hfRElSKS9pbmNsdWRlL3VzZXJfY29uc3RhbnRzLmgKK3ByZXBhcmU6ICQoQVJDSF9ESVIpL2luY2x1ZGUva2Vybl9jb25zdGFudHMuaAogCiBMSU5LLSQoQ09ORklHX0xEX1NDUklQVF9TVEFUSUMpICs9IC1zdGF0aWMKIExJTkstJChDT05GSUdfTERfU0NSSVBUX0RZTikgKz0gLVdsLC1ycGF0aCwvbGliCkBAIC0xNDIsMjIgKzEzOSwyMCBAQAogI1doZW4gY2xlYW5pbmcgd2UgZG9uJ3QgaW5jbHVkZSAuY29uZmlnLCBzbyB3ZSBkb24ndCBpbmNsdWRlCiAjVFQgb3Igc2thcyBtYWtlZmlsZXMgYW5kIGRvbid0IGNsZWFuIHNrYXNfcHRyZWdzLmguCiBDTEVBTl9GSUxFUyArPSBsaW51eCB4LmkgZ21vbi5vdXQgJChBUkNIX0RJUikvaW5jbHVkZS91bWwtY29uZmlnLmggXAotCSQoR0VOX0hFQURFUlMpICQoQVJDSF9ESVIpL2luY2x1ZGUvc2thc19wdHJlZ3MuaCBcCi0JJChBUkNIX0RJUikvaW5jbHVkZS91c2VyX2NvbnN0YW50cy5oICQoQVJDSF9ESVIpL0tjb25maWcuYXJjaAorCSQoQVJDSF9ESVIpL2luY2x1ZGUvdXNlcl9jb25zdGFudHMuaCBcCisJJChBUkNIX0RJUikvaW5jbHVkZS9rZXJuX2NvbnN0YW50cy5oICQoQVJDSF9ESVIpL0tjb25maWcuYXJjaAogCiBNUlBST1BFUl9GSUxFUyArPSAkKFNZTUxJTktfSEVBREVSUykgJChBUkNIX1NZTUxJTktTKSBcCiAJJChhZGRwcmVmaXggJChBUkNIX0RJUikva2VybmVsLywkKEtFUk5fU1lNTElOS1MpKSAkKEFSQ0hfRElSKS9vcwogCiBhcmNoY2xlYW46Ci0JJChRKSQoTUFLRSkgJChjbGVhbik9JChBUkNIX0RJUikvdXRpbAotCSQoUSkkKE1BS0UpICQoY2xlYW4pPSQoQVJDSF9ESVIpL29zLSQoT1MpL3V0aWwKIAlAZmluZCAuIFwoIC1uYW1lICcqLmJiJyAtbyAtbmFtZSAnKi5iYmcnIC1vIC1uYW1lICcqLmRhJyBcCiAJCS1vIC1uYW1lICcqLmdjb3YnIFwpIC10eXBlIGYgLXByaW50IHwgeGFyZ3Mgcm0gLWYKIAogJChTWU1MSU5LX0hFQURFUlMpOgogCUBlY2hvICcgIFNZTUxJTksgJEAnCiBpZm5lcSAoJChLQlVJTERfU1JDKSwpCi0JbG4gLWZzbiAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtLXVtLyQoYmFzZW5hbWUgJChub3RkaXIgJEApKS0kKFNVQkFSQ0gpJChzdWZmaXggJEApICRACisJJChRKWxuIC1mc24gJChzcmN0cmVlKS9pbmNsdWRlL2FzbS11bS8kKGJhc2VuYW1lICQobm90ZGlyICRAKSktJChTVUJBUkNIKSQoc3VmZml4ICRAKSAkQAogZWxzZQogCSQoUSljZCAkKFRPUERJUikvJChkaXIgJEApIDsgXAogCWxuIC1zZiAkKGJhc2VuYW1lICQobm90ZGlyICRAKSktJChTVUJBUkNIKSQoc3VmZml4ICRAKSAkKG5vdGRpciAkQCkKQEAgLTE3Niw5ICsxNzEsNyBAQAogCUBlY2hvICcgIFNZTUxJTksgJEAnCiBpZm5lcSAoJChLQlVJTERfU1JDKSwpCiAJJChRKW1rZGlyIC1wICQoQVJDSF9ESVIpL2luY2x1ZGUKLQkkKFEpbWtkaXIgLXAgJChBUkNIX0RJUikvaW5jbHVkZTIKLQkkKFEpbG4gLWZzbiBzeXNkZXAtJChTVUJBUkNIKSAkKEFSQ0hfRElSKS9pbmNsdWRlL3N5c2RlcAotCSQoUSlsbiAtZnNuICQoc3JjdHJlZSkvJChBUkNIX0RJUikvaW5jbHVkZS9zeXNkZXAtJChTVUJBUkNIKSAkKEFSQ0hfRElSKS9pbmNsdWRlMi9zeXNkZXAKKwkkKFEpbG4gLWZzbiAkKHNyY3RyZWUpLyQoQVJDSF9ESVIpL2luY2x1ZGUvc3lzZGVwLSQoU1VCQVJDSCkgJChBUkNIX0RJUikvaW5jbHVkZS9zeXNkZXAKIGVsc2UKIAkkKFEpY2QgJChBUkNIX0RJUikvaW5jbHVkZSAmJiBsbiAtc2Ygc3lzZGVwLSQoU1VCQVJDSCkgc3lzZGVwCiBlbmRpZgpAQCAtMTk4LDggKzE5MSw2IEBACiAKIGRlZmluZSBmaWxlY2hrX2dlbi1hc20tb2Zmc2V0cwogICAgICAgICAoc2V0IC1lOyBcCi0gICAgICAgICBlY2hvICIjaWZuZGVmIF9fQVNNX09GRlNFVFNfSF9fIjsgXAotICAgICAgICAgZWNobyAiI2RlZmluZSBfX0FTTV9PRkZTRVRTX0hfXyI7IFwKICAgICAgICAgIGVjaG8gIi8qIjsgXAogICAgICAgICAgZWNobyAiICogRE8gTk9UIE1PRElGWS4iOyBcCiAgICAgICAgICBlY2hvICIgKiI7IFwKQEAgLTIwOCw4ICsxOTksNyBAQAogICAgICAgICAgZWNobyAiICovIjsgXAogICAgICAgICAgZWNobyAiIjsgXAogICAgICAgICAgc2VkIC1uZSAiL14tPi97czpeLT5cKFteIF0qXCkgW1wkJCNdKlwoW14gXSpcKSBcKC4qXCk6I2RlZmluZSBcMSBcMiAvKiBcMyAqLzo7IHM6LT46OjsgcDt9IjsgXAotICAgICAgICAgZWNobyAiIjsgXAotICAgICAgICAgZWNobyAiI2VuZGlmIiApCisgICAgICAgICBlY2hvICIiOyApCiBlbmRlZgogCiAkKEFSQ0hfRElSKS9pbmNsdWRlL3VtbC1jb25maWcuaCA6IGluY2x1ZGUvbGludXgvYXV0b2NvbmYuaApAQCAtMjE4LDUwICsyMDgsMTggQEAKICQoQVJDSF9ESVIpL3VzZXItb2Zmc2V0cy5zOiAkKEFSQ0hfRElSKS9zeXMtJChTVUJBUkNIKS91c2VyLW9mZnNldHMuYwogCSQoQ0MpICQoVVNFUl9DRkxBR1MpIC1TIC1vICRAICQ8CiAKLSQoQVJDSF9ESVIpL3VzZXItb2Zmc2V0cy5oOiAkKEFSQ0hfRElSKS91c2VyLW9mZnNldHMucworJChBUkNIX0RJUikvaW5jbHVkZS91c2VyX2NvbnN0YW50cy5oOiAkKEFSQ0hfRElSKS91c2VyLW9mZnNldHMucwogCSQoY2FsbCBmaWxlY2hrLGdlbi1hc20tb2Zmc2V0cykKIAotQ0xFQU5fRklMRVMgKz0gJChBUkNIX0RJUikvdXNlci1vZmZzZXRzLnMgICQoQVJDSF9ESVIpL3VzZXItb2Zmc2V0cy5oCitDTEVBTl9GSUxFUyArPSAkKEFSQ0hfRElSKS91c2VyLW9mZnNldHMucwogCiAkKEFSQ0hfRElSKS9rZXJuZWwtb2Zmc2V0cy5zOiAkKEFSQ0hfRElSKS9zeXMtJChTVUJBUkNIKS9rZXJuZWwtb2Zmc2V0cy5jIFwKLQkJCQkgICAkKEFSQ0hfU1lNTElOS1MpIFwKLQkJCQkgICAkKFNZU19ESVIpL3NjLmggXAotCQkJCSAgIGluY2x1ZGUvYXNtIGluY2x1ZGUvbGludXgvdmVyc2lvbi5oIFwKLQkJCQkgICBpbmNsdWRlL2NvbmZpZy9NQVJLRVIgXAotCQkJCSAgICQoQVJDSF9ESVIpL2luY2x1ZGUvdXNlcl9jb25zdGFudHMuaAorCQkJCSAgIGFyY2hwcmVwYXJlCiAJJChDQykgJChDRkxBR1MpICQoTk9TVERJTkNfRkxBR1MpICQoQ1BQRkxBR1MpIC1TIC1vICRAICQ8CiAKLSQoQVJDSF9ESVIpL2tlcm5lbC1vZmZzZXRzLmg6ICQoQVJDSF9ESVIpL2tlcm5lbC1vZmZzZXRzLnMKKyQoQVJDSF9ESVIpL2luY2x1ZGUva2Vybl9jb25zdGFudHMuaDogJChBUkNIX0RJUikva2VybmVsLW9mZnNldHMucwogCSQoY2FsbCBmaWxlY2hrLGdlbi1hc20tb2Zmc2V0cykKIAotQ0xFQU5fRklMRVMgKz0gJChBUkNIX0RJUikva2VybmVsLW9mZnNldHMucyAgJChBUkNIX0RJUikva2VybmVsLW9mZnNldHMuaAotCi0kKEFSQ0hfRElSKS9pbmNsdWRlL3Rhc2suaDogJChBUkNIX0RJUikvdXRpbC9ta190YXNrCi0JJChjYWxsIGZpbGVjaGssZ2VuX2hlYWRlcikKLQotJChBUkNIX0RJUikvaW5jbHVkZS91c2VyX2NvbnN0YW50cy5oOiAkKEFSQ0hfRElSKS9vcy0kKE9TKS91dGlsL21rX3VzZXJfY29uc3RhbnRzCi0JJChjYWxsIGZpbGVjaGssZ2VuX2hlYWRlcikKLQotJChBUkNIX0RJUikvaW5jbHVkZS9rZXJuX2NvbnN0YW50cy5oOiAkKEFSQ0hfRElSKS91dGlsL21rX2NvbnN0YW50cwotCSQoY2FsbCBmaWxlY2hrLGdlbl9oZWFkZXIpCi0KLSQoQVJDSF9ESVIpL2luY2x1ZGUvc2thc19wdHJlZ3MuaDogJChBUkNIX0RJUikva2VybmVsL3NrYXMvdXRpbC9ta19wdHJlZ3MKLQkkKGNhbGwgZmlsZWNoayxnZW5faGVhZGVyKQotCi0kKEFSQ0hfRElSKS9vcy0kKE9TKS91dGlsL21rX3VzZXJfY29uc3RhbnRzOiAkKEFSQ0hfRElSKS9vcy0kKE9TKS91dGlsIEZPUkNFIDsKLQotJChBUkNIX0RJUikvdXRpbC9ta190YXNrICQoQVJDSF9ESVIpL3V0aWwvbWtfY29uc3RhbnRzOiAkKEFSQ0hfRElSKS9pbmNsdWRlL3VzZXJfY29uc3RhbnRzLmggJChBUkNIX0RJUikvdXRpbCBcCi0JRk9SQ0UgOwotCi0kKEFSQ0hfRElSKS9rZXJuZWwvc2thcy91dGlsL21rX3B0cmVnczogJChBUkNIX0RJUikva2VybmVsL3NrYXMvdXRpbCBGT1JDRSA7Ci0KLSQoQVJDSF9ESVIpL3V0aWw6IHNjcmlwdHNfYmFzaWMgJChTWVNfRElSKS9zYy5oICQoQVJDSF9ESVIpL2tlcm5lbC1vZmZzZXRzLmggRk9SQ0UKLQkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kQAotCi0kKEFSQ0hfRElSKS9rZXJuZWwvc2thcy91dGlsOiBzY3JpcHRzX2Jhc2ljICQoQVJDSF9ESVIpL3VzZXItb2Zmc2V0cy5oIEZPUkNFCi0JJChRKSQoTUFLRSkgJChidWlsZCk9JEAKLQotJChBUkNIX0RJUikvb3MtJChPUykvdXRpbDogc2NyaXB0c19iYXNpYyAkKEFSQ0hfRElSKS91c2VyLW9mZnNldHMuaCBGT1JDRQotCSQoUSkkKE1BS0UpICQoYnVpbGQpPSRACitDTEVBTl9GSUxFUyArPSAkKEFSQ0hfRElSKS9rZXJuZWwtb2Zmc2V0cy5zCiAKIGV4cG9ydCBTVUJBUkNIIFVTRVJfQ0ZMQUdTIE9TCmRpZmYgLS1naXQgYS9hcmNoL3VtL01ha2VmaWxlLWkzODYgYi9hcmNoL3VtL01ha2VmaWxlLWkzODYKaW5kZXggMWFiNDMxYS4uMmVlOGEyOCAxMDA2NDQKLS0tIGEvYXJjaC91bS9NYWtlZmlsZS1pMzg2CisrKyBiL2FyY2gvdW0vTWFrZWZpbGUtaTM4NgpAQCAtMzIsMjUgKzMyLDMgQEAKIGlmbmVxICgkKENPTkZJR19HUFJPRikseSkKIEFSQ0hfQ0ZMQUdTICs9IC1EVU1fRkFTVENBTEwKIGVuZGlmCi0KLVNZU19VVElMX0RJUgk6PSAkKEFSQ0hfRElSKS9zeXMtaTM4Ni91dGlsCi1TWVNfSEVBREVSUwk6PSAkKFNZU19ESVIpL3NjLmggJChTWVNfRElSKS90aHJlYWQuaAotCi1wcmVwYXJlOiAkKFNZU19IRUFERVJTKQotCi0kKFNZU19ESVIpL3NjLmg6ICQoU1lTX1VUSUxfRElSKS9ta19zYwotCSQoY2FsbCBmaWxlY2hrLGdlbl9oZWFkZXIpCi0KLSQoU1lTX0RJUikvdGhyZWFkLmg6ICQoU1lTX1VUSUxfRElSKS9ta190aHJlYWQgCi0JJChjYWxsIGZpbGVjaGssZ2VuX2hlYWRlcikKLQotJChTWVNfVVRJTF9ESVIpL21rX3NjOiBzY3JpcHRzX2Jhc2ljICQoQVJDSF9ESVIpL3VzZXItb2Zmc2V0cy5oIEZPUkNFCi0JJChRKSQoTUFLRSkgJChidWlsZCk9JChTWVNfVVRJTF9ESVIpICRACi0KLSQoU1lTX1VUSUxfRElSKS9ta190aHJlYWQ6IHNjcmlwdHNfYmFzaWMgJChBUkNIX0RJUikva2VybmVsLW9mZnNldHMuaCBGT1JDRQotCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoU1lTX1VUSUxfRElSKSAkQAotCi0kKFNZU19VVElMX0RJUik6IHNjcmlwdHNfYmFzaWMgaW5jbHVkZS9hc20gRk9SQ0UKLQkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKFNZU19VVElMX0RJUikKLQotQ0xFQU5fRklMRVMgKz0gJChTWVNfSEVBREVSUykKZGlmZiAtLWdpdCBhL2FyY2gvdW0vTWFrZWZpbGUtc2thcyBiL2FyY2gvdW0vTWFrZWZpbGUtc2thcwppbmRleCBmZDE4ZWM1Li5hYzM1ZGU1IDEwMDY0NAotLS0gYS9hcmNoL3VtL01ha2VmaWxlLXNrYXMKKysrIGIvYXJjaC91bS9NYWtlZmlsZS1za2FzCkBAIC0xMCw1ICsxMCwzIEBACiBDRkxBR1MtJChDT05GSUdfR1BST0YpICs9ICQoR1BST0ZfT1BUKQogTElOSy0kKENPTkZJR19HQ09WKSArPSAkKEdDT1ZfT1BUKQogTElOSy0kKENPTkZJR19HUFJPRikgKz0gJChHUFJPRl9PUFQpCi0KLUdFTl9IRUFERVJTICs9ICQoQVJDSF9ESVIpL2luY2x1ZGUvc2thc19wdHJlZ3MuaApkaWZmIC0tZ2l0IGEvYXJjaC91bS9NYWtlZmlsZS14ODZfNjQgYi9hcmNoL3VtL01ha2VmaWxlLXg4Nl82NAppbmRleCA0MzZhYmJiLi40ZjExOGQ1IDEwMDY0NAotLS0gYS9hcmNoL3VtL01ha2VmaWxlLXg4Nl82NAorKysgYi9hcmNoL3VtL01ha2VmaWxlLXg4Nl82NApAQCAtMTIsMjQgKzEyLDMgQEAKIAogRUxGX0FSQ0ggOj0gaTM4Njp4ODYtNjQKIEVMRl9GT1JNQVQgOj0gZWxmNjQteDg2LTY0Ci0KLVNZU19VVElMX0RJUiA6PSAkKEFSQ0hfRElSKS9zeXMteDg2XzY0L3V0aWwKLVNZU19ESVIgOj0gJChBUkNIX0RJUikvaW5jbHVkZS9zeXNkZXAteDg2XzY0Ci0KLVNZU19IRUFERVJTID0gJChTWVNfRElSKS9zYy5oICQoU1lTX0RJUikvdGhyZWFkLmgKLQotcHJlcGFyZTogJChTWVNfSEVBREVSUykKLQotJChTWVNfRElSKS9zYy5oOiAkKFNZU19VVElMX0RJUikvbWtfc2MKLQkkKGNhbGwgZmlsZWNoayxnZW5faGVhZGVyKQotCi0kKFNZU19ESVIpL3RocmVhZC5oOiAkKFNZU19VVElMX0RJUikvbWtfdGhyZWFkCi0JJChjYWxsIGZpbGVjaGssZ2VuX2hlYWRlcikKLQotJChTWVNfVVRJTF9ESVIpL21rX3NjOiBzY3JpcHRzX2Jhc2ljICQoQVJDSF9ESVIpL3VzZXItb2Zmc2V0cy5oIEZPUkNFCi0JJChRKSQoTUFLRSkgJChidWlsZCk9JChTWVNfVVRJTF9ESVIpICRACi0KLSQoU1lTX1VUSUxfRElSKS9ta190aHJlYWQ6IHNjcmlwdHNfYmFzaWMgJChHRU5fSEVBREVSUykgJChBUkNIX0RJUikva2VybmVsLW9mZnNldHMuaCBGT1JDRQotCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoU1lTX1VUSUxfRElSKSAkQAotCi1DTEVBTl9GSUxFUyArPSAkKFNZU19IRUFERVJTKQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL01ha2VmaWxlIGIvYXJjaC91bS9kcml2ZXJzL01ha2VmaWxlCmluZGV4IDc4M2UxOGMuLmRlMTdkNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9NYWtlZmlsZQorKysgYi9hcmNoL3VtL2RyaXZlcnMvTWFrZWZpbGUKQEAgLTEzLDcgKzEzLDcgQEAKIG5ldC1vYmpzIDo9IG5ldF9rZXJuLm8gbmV0X3VzZXIubwogbWNvbnNvbGUtb2JqcyA6PSBtY29uc29sZV9rZXJuLm8gbWNvbnNvbGVfdXNlci5vCiBob3N0YXVkaW8tb2JqcyA6PSBob3N0YXVkaW9fa2Vybi5vCi11YmQtb2JqcyA6PSB1YmRfa2Vybi5vCit1YmQtb2JqcyA6PSB1YmRfa2Vybi5vIHViZF91c2VyLm8KIHBvcnQtb2JqcyA6PSBwb3J0X2tlcm4ubyBwb3J0X3VzZXIubwogaGFyZGRvZy1vYmpzIDo9IGhhcmRkb2dfa2Vybi5vIGhhcmRkb2dfdXNlci5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9jaGFuX2tlcm4uYyBiL2FyY2gvdW0vZHJpdmVycy9jaGFuX2tlcm4uYwppbmRleCAxNGExMmQ2Li4xNmU3ZGM4IDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvY2hhbl9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL2NoYW5fa2Vybi5jCkBAIC0xOSwxOCArMTksNDQgQEAKICNpbmNsdWRlICJsaW5lLmgiCiAjaW5jbHVkZSAib3MuaCIKIAotI2lmZGVmIENPTkZJR19OT0NPTkZJR19DSEFOCisvKiBYWFg6IGNvdWxkIHdlbGwgYmUgbW92ZWQgdG8gc29tZXdoZXJlIGVsc2UsIGlmIG5lZWRlZC4gKi8KK3N0YXRpYyBpbnQgbXlfcHJpbnRmKGNvbnN0IGNoYXIgKiBmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CiAKLS8qIFRoZSBwcmludGsncyBoZXJlIGFyZSB3cm9uZyBiZWNhdXNlIHdlIGFyZSBjb21wbGFpbmluZyB0aGF0IHRoZXJlIGlzIG5vCi0gKiBvdXRwdXQgZGV2aWNlLCBidXQgcHJpbnRrIGlzIHByaW50aW5nIHRvIHRoYXQgb3V0cHV0IGRldmljZS4gIFRoZSB1c2VyIHdpbGwKLSAqIG5ldmVyIHNlZSB0aGUgZXJyb3IuICBwcmludGYgd291bGQgYmUgYmV0dGVyLCBleGNlcHQgaXQgY2FuJ3QgcnVuIG9uIGEKLSAqIGtlcm5lbCBzdGFjayBiZWNhdXNlIGl0IHdpbGwgb3ZlcmZsb3cgaXQuCi0gKiBVc2UgcHJpbnRrIGZvciBub3cgc2luY2UgdGhhdCB3aWxsIGF2b2lkIGNyYXNoaW5nLgotICovCitzdGF0aWMgaW50IG15X3ByaW50Zihjb25zdCBjaGFyICogZm10LCAuLi4pCit7CisJLyogWWVzLCBjYW4gYmUgY2FsbGVkIG9uIGF0b21pYyBjb250ZXh0LiovCisJY2hhciAqYnVmID0ga21hbGxvYyg0MDk2LCBHRlBfQVRPTUlDKTsKKwl2YV9saXN0IGFyZ3M7CisJaW50IHI7CisKKwlpZiAoIWJ1ZikgeworCQkvKiBXZSBwcmludCBkaXJlY3RseSBmbXQuCisJCSAqIFllcywgeWVzLCB5ZXMsIGZlZWwgZnJlZSB0byBjb21wbGFpbi4gKi8KKwkJciA9IHN0cmxlbihmbXQpOworCX0gZWxzZSB7CisJCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJCXIgPSB2c3ByaW50ZihidWYsIGZtdCwgYXJncyk7CisJCXZhX2VuZChhcmdzKTsKKwkJZm10ID0gYnVmOworCX0KKworCWlmIChyKQorCQlyID0gb3Nfd3JpdGVfZmlsZSgxLCBmbXQsIHIpOworCXJldHVybiByOworCit9CisKKyNpZmRlZiBDT05GSUdfTk9DT05GSUdfQ0hBTgorLyogRGVzcGl0ZSBpdHMgbmFtZSwgdGhlcmUncyBubyBhZGRlZCB0cmFpbGluZyBuZXdsaW5lLiAqLworc3RhdGljIGludCBteV9wdXRzKGNvbnN0IGNoYXIgKiBidWYpCit7CisJcmV0dXJuIG9zX3dyaXRlX2ZpbGUoMSwgYnVmLCBzdHJsZW4oYnVmKSk7Cit9CiAKIHN0YXRpYyB2b2lkICpub3RfY29uZmlnZ2VkX2luaXQoY2hhciAqc3RyLCBpbnQgZGV2aWNlLCBzdHJ1Y3QgY2hhbl9vcHRzICpvcHRzKQogewotCXByaW50ayhLRVJOX0VSUiAiVXNpbmcgYSBjaGFubmVsIHR5cGUgd2hpY2ggaXMgY29uZmlndXJlZCBvdXQgb2YgIgorCW15X3B1dHMoIlVzaW5nIGEgY2hhbm5lbCB0eXBlIHdoaWNoIGlzIGNvbmZpZ3VyZWQgb3V0IG9mICIKIAkgICAgICAgIlVNTFxuIik7CiAJcmV0dXJuKE5VTEwpOwogfQpAQCAtMzgsMjcgKzY0LDI3IEBACiBzdGF0aWMgaW50IG5vdF9jb25maWdnZWRfb3BlbihpbnQgaW5wdXQsIGludCBvdXRwdXQsIGludCBwcmltYXJ5LCB2b2lkICpkYXRhLAogCQkJICAgICAgY2hhciAqKmRldl9vdXQpCiB7Ci0JcHJpbnRrKEtFUk5fRVJSICJVc2luZyBhIGNoYW5uZWwgdHlwZSB3aGljaCBpcyBjb25maWd1cmVkIG91dCBvZiAiCisJbXlfcHV0cygiVXNpbmcgYSBjaGFubmVsIHR5cGUgd2hpY2ggaXMgY29uZmlndXJlZCBvdXQgb2YgIgogCSAgICAgICAiVU1MXG4iKTsKIAlyZXR1cm4oLUVOT0RFVik7CiB9CiAKIHN0YXRpYyB2b2lkIG5vdF9jb25maWdnZWRfY2xvc2UoaW50IGZkLCB2b2lkICpkYXRhKQogewotCXByaW50ayhLRVJOX0VSUiAiVXNpbmcgYSBjaGFubmVsIHR5cGUgd2hpY2ggaXMgY29uZmlndXJlZCBvdXQgb2YgIgorCW15X3B1dHMoIlVzaW5nIGEgY2hhbm5lbCB0eXBlIHdoaWNoIGlzIGNvbmZpZ3VyZWQgb3V0IG9mICIKIAkgICAgICAgIlVNTFxuIik7CiB9CiAKIHN0YXRpYyBpbnQgbm90X2NvbmZpZ2dlZF9yZWFkKGludCBmZCwgY2hhciAqY19vdXQsIHZvaWQgKmRhdGEpCiB7Ci0JcHJpbnRrKEtFUk5fRVJSICJVc2luZyBhIGNoYW5uZWwgdHlwZSB3aGljaCBpcyBjb25maWd1cmVkIG91dCBvZiAiCisJbXlfcHV0cygiVXNpbmcgYSBjaGFubmVsIHR5cGUgd2hpY2ggaXMgY29uZmlndXJlZCBvdXQgb2YgIgogCSAgICAgICAiVU1MXG4iKTsKIAlyZXR1cm4oLUVJTyk7CiB9CiAKIHN0YXRpYyBpbnQgbm90X2NvbmZpZ2dlZF93cml0ZShpbnQgZmQsIGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGxlbiwgdm9pZCAqZGF0YSkKIHsKLQlwcmludGsoS0VSTl9FUlIgIlVzaW5nIGEgY2hhbm5lbCB0eXBlIHdoaWNoIGlzIGNvbmZpZ3VyZWQgb3V0IG9mICIKKwlteV9wdXRzKCJVc2luZyBhIGNoYW5uZWwgdHlwZSB3aGljaCBpcyBjb25maWd1cmVkIG91dCBvZiAiCiAJICAgICAgICJVTUxcbiIpOwogCXJldHVybigtRUlPKTsKIH0KQEAgLTY2LDcgKzkyLDcgQEAKIHN0YXRpYyBpbnQgbm90X2NvbmZpZ2dlZF9jb25zb2xlX3dyaXRlKGludCBmZCwgY29uc3QgY2hhciAqYnVmLCBpbnQgbGVuLAogCQkJCSAgICAgICB2b2lkICpkYXRhKQogewotCXByaW50ayhLRVJOX0VSUiAiVXNpbmcgYSBjaGFubmVsIHR5cGUgd2hpY2ggaXMgY29uZmlndXJlZCBvdXQgb2YgIgorCW15X3B1dHMoIlVzaW5nIGEgY2hhbm5lbCB0eXBlIHdoaWNoIGlzIGNvbmZpZ3VyZWQgb3V0IG9mICIKIAkgICAgICAgIlVNTFxuIik7CiAJcmV0dXJuKC1FSU8pOwogfQpAQCAtNzQsMTQgKzEwMCwxNCBAQAogc3RhdGljIGludCBub3RfY29uZmlnZ2VkX3dpbmRvd19zaXplKGludCBmZCwgdm9pZCAqZGF0YSwgdW5zaWduZWQgc2hvcnQgKnJvd3MsCiAJCQkJICAgICB1bnNpZ25lZCBzaG9ydCAqY29scykKIHsKLQlwcmludGsoS0VSTl9FUlIgIlVzaW5nIGEgY2hhbm5lbCB0eXBlIHdoaWNoIGlzIGNvbmZpZ3VyZWQgb3V0IG9mICIKKwlteV9wdXRzKCJVc2luZyBhIGNoYW5uZWwgdHlwZSB3aGljaCBpcyBjb25maWd1cmVkIG91dCBvZiAiCiAJICAgICAgICJVTUxcbiIpOwogCXJldHVybigtRU5PREVWKTsKIH0KIAogc3RhdGljIHZvaWQgbm90X2NvbmZpZ2dlZF9mcmVlKHZvaWQgKmRhdGEpCiB7Ci0JcHJpbnRmKEtFUk5fRVJSICJVc2luZyBhIGNoYW5uZWwgdHlwZSB3aGljaCBpcyBjb25maWd1cmVkIG91dCBvZiAiCisJbXlfcHV0cygiVXNpbmcgYSBjaGFubmVsIHR5cGUgd2hpY2ggaXMgY29uZmlndXJlZCBvdXQgb2YgIgogCSAgICAgICAiVU1MXG4iKTsKIH0KIApAQCAtNDU3LDcgKzQ4Myw3IEBACiAJCX0KIAl9CiAJaWYob3BzID09IE5VTEwpewotCQlwcmludGsoS0VSTl9FUlIgInBhcnNlX2NoYW4gY291bGRuJ3QgcGFyc2UgXCIlc1wiXG4iLCAKKwkJbXlfcHJpbnRmKCJwYXJzZV9jaGFuIGNvdWxkbid0IHBhcnNlIFwiJXNcIlxuIiwKIAkJICAgICAgIHN0cik7CiAJCXJldHVybihOVUxMKTsKIAl9CkBAIC00NjUsNyArNDkxLDcgQEAKIAlkYXRhID0gKCpvcHMtPmluaXQpKHN0ciwgZGV2aWNlLCBvcHRzKTsKIAlpZihkYXRhID09IE5VTEwpIHJldHVybihOVUxMKTsKIAotCWNoYW4gPSBrbWFsbG9jKHNpemVvZigqY2hhbiksIEdGUF9LRVJORUwpOworCWNoYW4gPSBrbWFsbG9jKHNpemVvZigqY2hhbiksIEdGUF9BVE9NSUMpOwogCWlmKGNoYW4gPT0gTlVMTCkgcmV0dXJuKE5VTEwpOwogCSpjaGFuID0gKChzdHJ1Y3QgY2hhbikgeyAubGlzdAkgCT0gTElTVF9IRUFEX0lOSVQoY2hhbi0+bGlzdCksCiAJCQkJIC5wcmltYXJ5CT0gMSwKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9jb3cuaCBiL2FyY2gvdW0vZHJpdmVycy9jb3cuaAppbmRleCA0ZmNmM2E4Li5kYzM2YjIyIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvY293LmgKKysrIGIvYXJjaC91bS9kcml2ZXJzL2Nvdy5oCkBAIC0zLDE1ICszLDQwIEBACiAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIAotI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQotIyBkZWZpbmUgbnRvaGxsKHgpICh4KQotIyBkZWZpbmUgaHRvbmxsKHgpICh4KQotI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCi0jIGRlZmluZSBudG9obGwoeCkgIGJzd2FwXzY0KHgpCi0jIGRlZmluZSBodG9ubGwoeCkgIGJzd2FwXzY0KHgpCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKQorCisjIGluY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworIyBpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKyMJZGVmaW5lIG50b2hsbCh4KSAoeCkKKyMJZGVmaW5lIGh0b25sbCh4KSAoeCkKKyMgZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKyMJZGVmaW5lIG50b2hsbCh4KSAgYmU2NF90b19jcHUoeCkKKyMJZGVmaW5lIGh0b25sbCh4KSAgY3B1X3RvX2JlNjQoeCkKKyMgZWxzZQorIwllcnJvciAiQ291bGQgbm90IGRldGVybWluZSBieXRlIG9yZGVyIgorIyBlbmRpZgorCiAjZWxzZQotI2Vycm9yICJfX0JZVEVfT1JERVIgbm90IGRlZmluZWQiCisvKiBGb3IgdGhlIGRlZmluaXRpb24gb2YgbnRvaGwsIGh0b25sIGFuZCBfX0JZVEVfT1JERVIgKi8KKyNpbmNsdWRlIDxlbmRpYW4uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaWYgZGVmaW5lZChfX0JZVEVfT1JERVIpCisKKyMgIGlmIF9fQllURV9PUkRFUiA9PSBfX0JJR19FTkRJQU4KKyMJZGVmaW5lIG50b2hsbCh4KSAoeCkKKyMJZGVmaW5lIGh0b25sbCh4KSAoeCkKKyMgIGVsaWYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTgorIwlkZWZpbmUgbnRvaGxsKHgpICBic3dhcF82NCh4KQorIwlkZWZpbmUgaHRvbmxsKHgpICBic3dhcF82NCh4KQorIyAgZWxzZQorIwllcnJvciAiQ291bGQgbm90IGRldGVybWluZSBieXRlIG9yZGVyOiBfX0JZVEVfT1JERVIgdW5jb3JyZWN0bHkgZGVmaW5lZCIKKyMgIGVuZGlmCisKKyNlbHNlICAvKiAhIGRlZmluZWQoX19CWVRFX09SREVSKSAqLworIwllcnJvciAiQ291bGQgbm90IGRldGVybWluZSBieXRlIG9yZGVyOiBfX0JZVEVfT1JERVIgbm90IGRlZmluZWQiCiAjZW5kaWYKKyNlbmRpZiAvKiAhIGRlZmluZWQoX19LRVJORUxfXykgKi8KIAogZXh0ZXJuIGludCBpbml0X2Nvd19maWxlKGludCBmZCwgY2hhciAqY293X2ZpbGUsIGNoYXIgKmJhY2tpbmdfZmlsZSwKIAkJCSBpbnQgc2VjdG9yc2l6ZSwgaW50IGFsaWdubWVudCwgaW50ICpiaXRtYXBfb2Zmc2V0X291dCwKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9jb3dfdXNlci5jIGIvYXJjaC91bS9kcml2ZXJzL2Nvd191c2VyLmMKaW5kZXggYThjZTZmYy4uZmJlMjIxNyAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL2Nvd191c2VyLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL2Nvd191c2VyLmMKQEAgLTksNyArOSw2IEBACiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KICNpbmNsdWRlIDxzeXMvdXNlci5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KIAogI2luY2x1ZGUgIm9zLmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9tY2FzdF91c2VyLmMgYi9hcmNoL3VtL2RyaXZlcnMvbWNhc3RfdXNlci5jCmluZGV4IDdhMGQxMTUuLjVkYjEzNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9tY2FzdF91c2VyLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL21jYXN0X3VzZXIuYwpAQCAtMTMsNyArMTMsNiBAQAogCiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2luY2x1ZGUgPHN5cy91bi5oPgogI2luY2x1ZGUgPHN5cy90aW1lLmg+CkBAIC01NSw3ICs1NCw3IEBACiAJc3RydWN0IG1jYXN0X2RhdGEgKnByaSA9IGRhdGE7CiAJc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSBwcmktPm1jYXN0X2FkZHI7CiAJc3RydWN0IGlwX21yZXEgbXJlcTsKLQlpbnQgZmQgPSAtRUlOVkFMLCB5ZXMgPSAxLCBlcnIgPSAtRUlOVkFMOzsKKwlpbnQgZmQsIHllcyA9IDEsIGVyciA9IDA7CiAKIAogCWlmICgoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gMCkgfHwgKHNpbi0+c2luX3BvcnQgPT0gMCkpCkBAIC02NiwxMyArNjUsMTQgQEAKIAlpZiAoZmQgPCAwKXsKIAkJcHJpbnRrKCJtY2FzdF9vcGVuIDogZGF0YSBzb2NrZXQgZmFpbGVkLCBlcnJubyA9ICVkXG4iLCAKIAkJICAgICAgIGVycm5vKTsKLQkJZmQgPSAtZXJybm87CisJCWVyciA9IC1lcnJubzsKIAkJZ290byBvdXQ7CiAJfQogCiAJaWYgKHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgJnllcywgc2l6ZW9mKHllcykpIDwgMCkgewogCQlwcmludGsoIm1jYXN0X29wZW46IFNPX1JFVVNFQUREUiBmYWlsZWQsIGVycm5vID0gJWRcbiIsCiAJCQllcnJubyk7CisJCWVyciA9IC1lcnJubzsKIAkJZ290byBvdXRfY2xvc2U7CiAJfQogCkBAIC04MSw2ICs4MSw3IEBACiAJCSAgICAgICBzaXplb2YocHJpLT50dGwpKSA8IDApIHsKIAkJcHJpbnRrKCJtY2FzdF9vcGVuOiBJUF9NVUxUSUNBU1RfVFRMIGZhaWxlZCwgZXJyb3IgPSAlZFxuIiwKIAkJCWVycm5vKTsKKwkJZXJyID0gLWVycm5vOwogCQlnb3RvIG91dF9jbG9zZTsKIAl9CiAKQEAgLTg4LDEyICs4OSwxNCBAQAogCWlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfSVAsIElQX01VTFRJQ0FTVF9MT09QLCAmeWVzLCBzaXplb2YoeWVzKSkgPCAwKSB7CiAJCXByaW50aygibWNhc3Rfb3BlbjogSVBfTVVMVElDQVNUX0xPT1AgZmFpbGVkLCBlcnJvciA9ICVkXG4iLAogCQkJZXJybm8pOworCQllcnIgPSAtZXJybm87CiAJCWdvdG8gb3V0X2Nsb3NlOwogCX0KIAogCS8qIGJpbmQgc29ja2V0IHRvIG1jYXN0IGFkZHJlc3MgKi8KIAlpZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSBzaW4sIHNpemVvZigqc2luKSkgPCAwKSB7CiAJCXByaW50aygibWNhc3Rfb3BlbiA6IGRhdGEgYmluZCBmYWlsZWQsIGVycm5vID0gJWRcbiIsIGVycm5vKTsKKwkJZXJyID0gLWVycm5vOwogCQlnb3RvIG91dF9jbG9zZTsKIAl9CQkKIAkKQEAgLTEwOCwxNCArMTExLDE1IEBACiAJCSAgICAgICAiaW50ZXJmYWNlIG9uIHRoZSBob3N0LlxuIik7CiAJCXByaW50aygiZXRoMCBzaG91bGQgYmUgY29uZmlndXJlZCBpbiBvcmRlciB0byB1c2UgdGhlICIKIAkJICAgICAgICJtdWx0aWNhc3QgdHJhbnNwb3J0LlxuIik7CisJCWVyciA9IC1lcnJubzsKICAgICAgICAgICAgICAgICBnb3RvIG91dF9jbG9zZTsKIAl9CiAKLSBvdXQ6CiAJcmV0dXJuIGZkOwogCiAgb3V0X2Nsb3NlOgogICAgICAgICBvc19jbG9zZV9maWxlKGZkKTsKKyBvdXQ6CiAgICAgICAgIHJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9tY29uc29sZV9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvbWNvbnNvbGVfa2Vybi5jCmluZGV4IGMxOTBjMjQuLjEyYzk1MzYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9tY29uc29sZV9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL21jb25zb2xlX2tlcm4uYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIm9zLmgiCiAjaW5jbHVkZSAidW1pZC5oIgogI2luY2x1ZGUgImlycV9rZXJuLmgiCisjaW5jbHVkZSAiY2hvb3NlLW1vZGUuaCIKIAogc3RhdGljIGludCBkb191bmxpbmtfc29ja2V0KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbm90aWZpZXIsIAogCQkJICAgIHVuc2lnbmVkIGxvbmcgd2hhdCwgdm9pZCAqZGF0YSkKQEAgLTI3Niw2ICsyNzcsNyBAQAogICAgIGdvIC0gY29udGludWUgdGhlIFVNTCBhZnRlciBhICdzdG9wJyBcblwKICAgICBsb2cgPHN0cmluZz4gLSBtYWtlIFVNTCBlbnRlciA8c3RyaW5nPiBpbnRvIHRoZSBrZXJuZWwgbG9nXG5cCiAgICAgcHJvYyA8ZmlsZT4gLSByZXR1cm5zIHRoZSBjb250ZW50cyBvZiB0aGUgVU1MJ3MgL3Byb2MvPGZpbGU+XG5cCisgICAgc3RhY2sgPHBpZD4gLSByZXR1cm5zIHRoZSBzdGFjayBvZiB0aGUgc3BlY2lmaWVkIHBpZFxuXAogIgogCiB2b2lkIG1jb25zb2xlX2hlbHAoc3RydWN0IG1jX3JlcXVlc3QgKnJlcSkKQEAgLTQ3OSw2ICs0ODEsNTYgQEAKIH0KICNlbmRpZgogCisvKiBNY29uc29sZSBzdGFjayB0cmFjZQorICogIEFkZGVkIGJ5IEFsbGFuIEdyYXZlcywgSmVmZiBEaWtlCisgKiAgRHVtcHMgYSBzdGFja3MgcmVnaXN0ZXJzIHRvIHRoZSBsaW51eCBjb25zb2xlLgorICogIFVzYWdlIHN0YWNrIDxwaWQ+LgorICovCit2b2lkIGRvX3N0YWNrKHN0cnVjdCBtY19yZXF1ZXN0ICpyZXEpCit7CisgICAgICAgIGNoYXIgKnB0ciA9IHJlcS0+cmVxdWVzdC5kYXRhOworICAgICAgICBpbnQgcGlkX3JlcXVlc3RlZD0gLTE7CisgICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqZnJvbSA9IE5VTEw7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0byA9IE5VTEw7CisKKyAgICAgICAgLyogV291bGQgYmUgbmljZToKKyAgICAgICAgICogMSkgU2VuZCBzaG93cmVncyBvdXRwdXQgdG8gbWNvbnNvbGUuCisJICogMikgQWRkIGEgd2F5IHRvIHN0YWNrIGR1bXAgYWxsIHBpZHMuCisJICovCisKKyAgICAgICAgcHRyICs9IHN0cmxlbigic3RhY2siKTsKKyAgICAgICAgd2hpbGUoaXNzcGFjZSgqcHRyKSkgcHRyKys7CisKKyAgICAgICAgLyogU2hvdWxkIHJlYWxseSBjaGVjayBmb3IgbXVsdGlwbGUgcGlkcyBvciByZWplY3QgYmFkIGFyZ3MgaGVyZSAqLworICAgICAgICAvKiBXaGF0IGRvIHRoZSBhcmd1bWVudHMgaW4gbWNvbnNvbGVfcmVwbHkgbWVhbj8gKi8KKyAgICAgICAgaWYoc3NjYW5mKHB0ciwgIiVkIiwgJnBpZF9yZXF1ZXN0ZWQpID09IDApeworICAgICAgICAgICAgICAgIG1jb25zb2xlX3JlcGx5KHJlcSwgIlBsZWFzZSBzcGVjaWZ5IGEgcGlkIiwgMSwgMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZnJvbSA9IGN1cnJlbnQ7CisgICAgICAgIHRvID0gZmluZF90YXNrX2J5X3BpZChwaWRfcmVxdWVzdGVkKTsKKworICAgICAgICBpZigodG8gPT0gTlVMTCkgfHwgKHBpZF9yZXF1ZXN0ZWQgPT0gMCkpIHsKKyAgICAgICAgICAgICAgICBtY29uc29sZV9yZXBseShyZXEsICJDb3VsZG4ndCBmaW5kIHRoYXQgcGlkIiwgMSwgMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRvLT50aHJlYWQuc2F2ZWRfdGFzayA9IGN1cnJlbnQ7CisKKyAgICAgICAgc3dpdGNoX3RvKGZyb20sIHRvLCBmcm9tKTsKKyAgICAgICAgbWNvbnNvbGVfcmVwbHkocmVxLCAiU3RhY2sgRHVtcGVkIHRvIGNvbnNvbGUgYW5kIG1lc3NhZ2UgbG9nIiwgMCwgMCk7Cit9CisKK3ZvaWQgbWNvbnNvbGVfc3RhY2soc3RydWN0IG1jX3JlcXVlc3QgKnJlcSkKK3sKKwkvKiBUaGlzIGNvbW1hbmQgZG9lc24ndCB3b3JrIGluIFRUIG1vZGUsIHNvIGxldCdzIGNoZWNrIGFuZCB0aGVuCisJICogZ2V0IG91dCBvZiBoZXJlCisJICovCisJQ0hPT1NFX01PREUobWNvbnNvbGVfcmVwbHkocmVxLCAiU29ycnksIHRoaXMgZG9lc24ndCB3b3JrIGluIFRUIG1vZGUiLAorCQkJCSAgIDEsIDApLAorCQkgICAgZG9fc3RhY2socmVxKSk7Cit9CisKIC8qIENoYW5nZWQgYnkgbWNvbnNvbGVfc2V0dXAsIHdoaWNoIGlzIF9fc2V0dXAsIGFuZCBjYWxsZWQgYmVmb3JlIFNNUCBpcwogICogYWN0aXZlLgogICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvbWNvbnNvbGVfdXNlci5jIGIvYXJjaC91bS9kcml2ZXJzL21jb25zb2xlX3VzZXIuYwppbmRleCBmZTVhZmIxMzIuLjMxMGMxZjggMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9tY29uc29sZV91c2VyLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL21jb25zb2xlX3VzZXIuYwpAQCAtMzAsNiArMzAsNyBAQAogCXsgImdvIiwgbWNvbnNvbGVfZ28sIE1DT05TT0xFX0lOVFIgfSwKIAl7ICJsb2ciLCBtY29uc29sZV9sb2csIE1DT05TT0xFX0lOVFIgfSwKIAl7ICJwcm9jIiwgbWNvbnNvbGVfcHJvYywgTUNPTlNPTEVfUFJPQyB9LAorICAgICAgICB7ICJzdGFjayIsIG1jb25zb2xlX3N0YWNrLCBNQ09OU09MRV9JTlRSIH0sCiB9OwogCiAvKiBJbml0aWFsaXplZCBpbiBtY29uc29sZV9pbml0LCB3aGljaCBpcyBhbiBpbml0Y2FsbCAqLwpAQCAtMTcyLDkgKzE3Myw5IEBACiAJaWYobm90aWZ5X3NvY2sgPCAwKXsKIAkJbm90aWZ5X3NvY2sgPSBzb2NrZXQoUEZfVU5JWCwgU09DS19ER1JBTSwgMCk7CiAJCWlmKG5vdGlmeV9zb2NrIDwgMCl7Ci0JCQlwcmludGsoIm1jb25zb2xlX25vdGlmeSAtIHNvY2tldCBmYWlsZWQsIGVycm5vID0gJWRcbiIsCi0JCQkgICAgICAgZXJybm8pOwogCQkJZXJyID0gLWVycm5vOworCQkJcHJpbnRrKCJtY29uc29sZV9ub3RpZnkgLSBzb2NrZXQgZmFpbGVkLCBlcnJubyA9ICVkXG4iLAorCQkJICAgICAgIGVycik7CiAJCX0KIAl9CiAJdW5sb2NrX25vdGlmeSgpOwpAQCAtMTk3LDggKzE5OCw4IEBACiAJbiA9IHNlbmR0byhub3RpZnlfc29jaywgJnBhY2tldCwgbGVuLCAwLCAoc3RydWN0IHNvY2thZGRyICopICZ0YXJnZXQsIAogCQkgICBzaXplb2YodGFyZ2V0KSk7CiAJaWYobiA8IDApewotCQlwcmludGsoIm1jb25zb2xlX25vdGlmeSAtIHNlbmR0byBmYWlsZWQsIGVycm5vID0gJWRcbiIsIGVycm5vKTsKIAkJZXJyID0gLWVycm5vOworCQlwcmludGsoIm1jb25zb2xlX25vdGlmeSAtIHNlbmR0byBmYWlsZWQsIGVycm5vID0gJWRcbiIsIGVycm5vKTsKIAl9CiAJcmV0dXJuKGVycik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvcG9ydF9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvcG9ydF9rZXJuLmMKaW5kZXggYzQxZWZkMi4uMTg5ODM5ZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3BvcnRfa2Vybi5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9wb3J0X2tlcm4uYwpAQCAtNyw3ICs3LDYgQEAKICNpbmNsdWRlICJsaW51eC9zY2hlZC5oIgogI2luY2x1ZGUgImxpbnV4L3NsYWIuaCIKICNpbmNsdWRlICJsaW51eC9pbnRlcnJ1cHQuaCIKLSNpbmNsdWRlICJsaW51eC9pcnEuaCIKICNpbmNsdWRlICJsaW51eC9zcGlubG9jay5oIgogI2luY2x1ZGUgImxpbnV4L2Vycm5vLmgiCiAjaW5jbHVkZSAiYXNtL2F0b21pYy5oIgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3B0eS5jIGIvYXJjaC91bS9kcml2ZXJzL3B0eS5jCmluZGV4IGVkODRkMDEuLjAzMDZhMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9wdHkuYworKysgYi9hcmNoL3VtL2RyaXZlcnMvcHR5LmMKQEAgLTQzLDggKzQzLDkgQEAKIAogCWZkID0gZ2V0X3B0eSgpOwogCWlmKGZkIDwgMCl7CisJCWVyciA9IC1lcnJubzsKIAkJcHJpbnRrKCJvcGVuX3B0cyA6IEZhaWxlZCB0byBvcGVuIHB0c1xuIik7Ci0JCXJldHVybigtZXJybm8pOworCQlyZXR1cm4gZXJyOwogCX0KIAlpZihkYXRhLT5yYXcpewogCQlDQVRDSF9FSU5UUihlcnIgPSB0Y2dldGF0dHIoZmQsICZkYXRhLT50dCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYwppbmRleCBlNzdhMzhkLi5mNzMxMzQzIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYwpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgImxpbnV4L2Jsa3BnLmgiCiAjaW5jbHVkZSAibGludXgvZ2VuaGQuaCIKICNpbmNsdWRlICJsaW51eC9zcGlubG9jay5oIgotI2luY2x1ZGUgImFzbS9hdG9taWMuaCIKICNpbmNsdWRlICJhc20vc2VnbWVudC5oIgogI2luY2x1ZGUgImFzbS91YWNjZXNzLmgiCiAjaW5jbHVkZSAiYXNtL2lycS5oIgpAQCAtNTQsMjEgKzUzLDIwIEBACiAjaW5jbHVkZSAibWVtLmgiCiAjaW5jbHVkZSAibWVtX2tlcm4uaCIKICNpbmNsdWRlICJjb3cuaCIKLSNpbmNsdWRlICJhaW8uaCIKIAogZW51bSB1YmRfcmVxIHsgVUJEX1JFQUQsIFVCRF9XUklURSB9OwogCiBzdHJ1Y3QgaW9fdGhyZWFkX3JlcSB7Ci0JZW51bSBhaW9fdHlwZSBvcDsKKwllbnVtIHViZF9yZXEgb3A7CiAJaW50IGZkc1syXTsKIAl1bnNpZ25lZCBsb25nIG9mZnNldHNbMl07CiAJdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldDsKIAl1bnNpZ25lZCBsb25nIGxlbmd0aDsKIAljaGFyICpidWZmZXI7CiAJaW50IHNlY3RvcnNpemU7Ci0JaW50IGJpdG1hcF9vZmZzZXQ7Ci0JbG9uZyBiaXRtYXBfc3RhcnQ7Ci0JbG9uZyBiaXRtYXBfZW5kOworCXVuc2lnbmVkIGxvbmcgc2VjdG9yX21hc2s7CisJdW5zaWduZWQgbG9uZyBsb25nIGNvd19vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBiaXRtYXBfd29yZHNbMl07CiAJaW50IGVycm9yOwogfTsKIApAQCAtODIsMzEgKzgwLDI4IEBACiAJCQkgICB1bnNpZ25lZCBsb25nICpiaXRtYXBfbGVuX291dCwKIAkJCSAgIGludCAqZGF0YV9vZmZzZXRfb3V0KTsKIGV4dGVybiBpbnQgcmVhZF9jb3dfYml0bWFwKGludCBmZCwgdm9pZCAqYnVmLCBpbnQgb2Zmc2V0LCBpbnQgbGVuKTsKLWV4dGVybiB2b2lkIGRvX2lvKHN0cnVjdCBpb190aHJlYWRfcmVxICpyZXEsIHN0cnVjdCByZXF1ZXN0ICpyLAotCQkgIHVuc2lnbmVkIGxvbmcgKmJpdG1hcCk7CitleHRlcm4gdm9pZCBkb19pbyhzdHJ1Y3QgaW9fdGhyZWFkX3JlcSAqcmVxKTsKIAotc3RhdGljIGlubGluZSBpbnQgdWJkX3Rlc3RfYml0KF9fdTY0IGJpdCwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbmxpbmUgaW50IHViZF90ZXN0X2JpdChfX3U2NCBiaXQsIHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7Ci0JdW5zaWduZWQgY2hhciAqYnVmZmVyID0gZGF0YTsKIAlfX3U2NCBuOwogCWludCBiaXRzLCBvZmY7CiAKLQliaXRzID0gc2l6ZW9mKGJ1ZmZlclswXSkgKiA4OworCWJpdHMgPSBzaXplb2YoZGF0YVswXSkgKiA4OwogCW4gPSBiaXQgLyBiaXRzOwogCW9mZiA9IGJpdCAlIGJpdHM7Ci0JcmV0dXJuKChidWZmZXJbbl0gJiAoMSA8PCBvZmYpKSAhPSAwKTsKKwlyZXR1cm4oKGRhdGFbbl0gJiAoMSA8PCBvZmYpKSAhPSAwKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHViZF9zZXRfYml0KF9fdTY0IGJpdCwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbmxpbmUgdm9pZCB1YmRfc2V0X2JpdChfX3U2NCBiaXQsIHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7Ci0JdW5zaWduZWQgY2hhciAqYnVmZmVyID0gZGF0YTsKIAlfX3U2NCBuOwogCWludCBiaXRzLCBvZmY7CiAKLQliaXRzID0gc2l6ZW9mKGJ1ZmZlclswXSkgKiA4OworCWJpdHMgPSBzaXplb2YoZGF0YVswXSkgKiA4OwogCW4gPSBiaXQgLyBiaXRzOwogCW9mZiA9IGJpdCAlIGJpdHM7Ci0JYnVmZmVyW25dIHw9ICgxIDw8IG9mZik7CisJZGF0YVtuXSB8PSAoMSA8PCBvZmYpOwogfQogLypFbmQgc3R1ZmYgZnJvbSB1YmRfdXNlci5oKi8KIApAQCAtMTE1LDYgKzExMCw4IEBACiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHViZF9pb19sb2NrKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodWJkX2xvY2spOwogCitzdGF0aWMgdm9pZCAoKmRvX3ViZCkodm9pZCk7CisKIHN0YXRpYyBpbnQgdWJkX29wZW4oc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCk7CiBzdGF0aWMgaW50IHViZF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUpOwogc3RhdGljIGludCB1YmRfaW9jdGwoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlsZSwKQEAgLTE2MSw4ICsxNTgsNiBAQAogICAgICAgICBpbnQgZGF0YV9vZmZzZXQ7CiB9OwogCi0jZGVmaW5lIE1BWF9TRyA2NAotCiBzdHJ1Y3QgdWJkIHsKIAljaGFyICpmaWxlOwogCWludCBjb3VudDsKQEAgLTE3Myw3ICsxNjgsNiBAQAogCWludCBub19jb3c7CiAJc3RydWN0IGNvdyBjb3c7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSBwZGV2OwotICAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbTUFYX1NHXTsKIH07CiAKICNkZWZpbmUgREVGQVVMVF9DT1cgeyBcCkBAIC00NjYsMTE0ICs0NjAsODEgQEAKICk7CiAKIHN0YXRpYyB2b2lkIGRvX3ViZF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqIHEpOwotc3RhdGljIGludCBpbl91YmQ7CisKKy8qIE9ubHkgY2hhbmdlZCBieSB1YmRfaW5pdCwgd2hpY2ggaXMgYW4gaW5pdGNhbGwuICovCitpbnQgdGhyZWFkX2ZkID0gLTE7CiAKIC8qIENoYW5nZWQgYnkgdWJkX2hhbmRsZXIsIHdoaWNoIGlzIHNlcmlhbGl6ZWQgYmVjYXVzZSBpbnRlcnJ1cHRzIG9ubHkKICAqIGhhcHBlbiBvbiBDUFUgMC4KICAqLwogaW50IGludHJfY291bnQgPSAwOwogCi1zdGF0aWMgdm9pZCB1YmRfZW5kX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJlcSwgaW50IGJ5dGVzLCBpbnQgdXB0b2RhdGUpCi17Ci0JaWYgKCFlbmRfdGhhdF9yZXF1ZXN0X2ZpcnN0KHJlcSwgdXB0b2RhdGUsIGJ5dGVzID4+IDkpKSB7Ci0JCWFkZF9kaXNrX3JhbmRvbW5lc3MocmVxLT5ycV9kaXNrKTsKLQkJZW5kX3RoYXRfcmVxdWVzdF9sYXN0KHJlcSk7Ci0JfQotfQotCiAvKiBjYWxsIHViZF9maW5pc2ggaWYgeW91IG5lZWQgdG8gc2VyaWFsaXplICovCi1zdGF0aWMgdm9pZCBfX3ViZF9maW5pc2goc3RydWN0IHJlcXVlc3QgKnJlcSwgaW50IGJ5dGVzKQorc3RhdGljIHZvaWQgX191YmRfZmluaXNoKHN0cnVjdCByZXF1ZXN0ICpyZXEsIGludCBlcnJvcikKIHsKLQlpZihieXRlcyA8IDApewotCQl1YmRfZW5kX3JlcXVlc3QocmVxLCAwLCAwKTsKLSAgCQlyZXR1cm47Ci0gIAl9CisJaW50IG5zZWN0OwogCi0JdWJkX2VuZF9yZXF1ZXN0KHJlcSwgYnl0ZXMsIDEpOworCWlmKGVycm9yKXsKKwkJZW5kX3JlcXVlc3QocmVxLCAwKTsKKwkJcmV0dXJuOworCX0KKwluc2VjdCA9IHJlcS0+Y3VycmVudF9ucl9zZWN0b3JzOworCXJlcS0+c2VjdG9yICs9IG5zZWN0OworCXJlcS0+YnVmZmVyICs9IG5zZWN0IDw8IDk7CisJcmVxLT5lcnJvcnMgPSAwOworCXJlcS0+bnJfc2VjdG9ycyAtPSBuc2VjdDsKKwlyZXEtPmN1cnJlbnRfbnJfc2VjdG9ycyA9IDA7CisJZW5kX3JlcXVlc3QocmVxLCAxKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHViZF9maW5pc2goc3RydWN0IHJlcXVlc3QgKnJlcSwgaW50IGJ5dGVzKQorc3RhdGljIGlubGluZSB2b2lkIHViZF9maW5pc2goc3RydWN0IHJlcXVlc3QgKnJlcSwgaW50IGVycm9yKQogewotICAgCXNwaW5fbG9jaygmdWJkX2lvX2xvY2spOwotCV9fdWJkX2ZpbmlzaChyZXEsIGJ5dGVzKTsKLSAgCXNwaW5fdW5sb2NrKCZ1YmRfaW9fbG9jayk7CisgCXNwaW5fbG9jaygmdWJkX2lvX2xvY2spOworCV9fdWJkX2ZpbmlzaChyZXEsIGVycm9yKTsKKwlzcGluX3VubG9jaygmdWJkX2lvX2xvY2spOwogfQogCi1zdHJ1Y3QgYml0bWFwX2lvIHsKLSAgICAgICAgYXRvbWljX3QgY291bnQ7Ci0gICAgICAgIHN0cnVjdCBhaW9fY29udGV4dCBhaW87Ci19OworLyogQ2FsbGVkIHdpdGhvdXQgdWJkX2lvX2xvY2sgaGVsZCAqLworc3RhdGljIHZvaWQgdWJkX2hhbmRsZXIodm9pZCkKK3sKKwlzdHJ1Y3QgaW9fdGhyZWFkX3JlcSByZXE7CisJc3RydWN0IHJlcXVlc3QgKnJxID0gZWx2X25leHRfcmVxdWVzdCh1YmRfcXVldWUpOworCWludCBuOwogCi1zdHJ1Y3QgdWJkX2FpbyB7Ci0gICAgICAgIHN0cnVjdCBhaW9fY29udGV4dCBhaW87Ci0gICAgICAgIHN0cnVjdCByZXF1ZXN0ICpyZXE7Ci0gICAgICAgIGludCBsZW47Ci0gICAgICAgIHN0cnVjdCBiaXRtYXBfaW8gKmJpdG1hcDsKLSAgICAgICAgdm9pZCAqYml0bWFwX2J1ZjsKLX07Ci0KLXN0YXRpYyBpbnQgdWJkX3JlcGx5X2ZkID0gLTE7CisJZG9fdWJkID0gTlVMTDsKKwlpbnRyX2NvdW50Kys7CisJbiA9IG9zX3JlYWRfZmlsZSh0aHJlYWRfZmQsICZyZXEsIHNpemVvZihyZXEpKTsKKwlpZihuICE9IHNpemVvZihyZXEpKXsKKwkJcHJpbnRrKEtFUk5fRVJSICJQaWQgJWQgLSBzcHVyaW91cyBpbnRlcnJ1cHQgaW4gdWJkX2hhbmRsZXIsICIKKwkJICAgICAgICJlcnIgPSAlZFxuIiwgb3NfZ2V0cGlkKCksIC1uKTsKKwkJc3Bpbl9sb2NrKCZ1YmRfaW9fbG9jayk7CisJCWVuZF9yZXF1ZXN0KHJxLCAwKTsKKwkJc3Bpbl91bmxvY2soJnViZF9pb19sb2NrKTsKKwkJcmV0dXJuOworCX0KKyAgICAgICAgCisJdWJkX2ZpbmlzaChycSwgcmVxLmVycm9yKTsKKwlyZWFjdGl2YXRlX2ZkKHRocmVhZF9mZCwgVUJEX0lSUSk7CQorCWRvX3ViZF9yZXF1ZXN0KHViZF9xdWV1ZSk7Cit9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCB1YmRfaW50cihpbnQgaXJxLCB2b2lkICpkZXYsIHN0cnVjdCBwdF9yZWdzICp1bnVzZWQpCiB7Ci0Jc3RydWN0IGFpb190aHJlYWRfcmVwbHkgcmVwbHk7Ci0Jc3RydWN0IHViZF9haW8gKmFpbzsKLQlzdHJ1Y3QgcmVxdWVzdCAqcmVxOwotCWludCBlcnIsIG4sIGZkID0gKGludCkgKGxvbmcpIGRldjsKLQotCXdoaWxlKDEpewotCQllcnIgPSBvc19yZWFkX2ZpbGUoZmQsICZyZXBseSwgc2l6ZW9mKHJlcGx5KSk7Ci0JCWlmKGVyciA9PSAtRUFHQUlOKQotCQkJYnJlYWs7Ci0JCWlmKGVyciA8IDApewotCQkJcHJpbnRrKCJ1YmRfYWlvX2hhbmRsZXIgLSByZWFkIHJldHVybmVkIGVyciAlZFxuIiwKLQkJCSAgICAgICAtZXJyKTsKLQkJCWJyZWFrOwotCQl9Ci0KLSAgICAgICAgICAgICAgICBhaW8gPSBjb250YWluZXJfb2YocmVwbHkuZGF0YSwgc3RydWN0IHViZF9haW8sIGFpbyk7Ci0gICAgICAgICAgICAgICAgbiA9IHJlcGx5LmVycjsKLQotCQlpZihuID09IDApewotCQkJcmVxID0gYWlvLT5yZXE7Ci0JCQlyZXEtPm5yX3NlY3RvcnMgLT0gYWlvLT5sZW4gPj4gOTsKLQotCQkJaWYoKGFpby0+Yml0bWFwICE9IE5VTEwpICYmCi0JCQkgICAoYXRvbWljX2RlY19hbmRfdGVzdCgmYWlvLT5iaXRtYXAtPmNvdW50KSkpewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaW8tPmFpbyA9IGFpby0+Yml0bWFwLT5haW87Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpby0+bGVuID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2ZyZWUoYWlvLT5iaXRtYXApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaW8tPmJpdG1hcCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdF9haW8oJmFpby0+YWlvKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWlmKChyZXEtPm5yX3NlY3RvcnMgPT0gMCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFpby0+Yml0bWFwID09IE5VTEwpKXsKLQkJCQkJaW50IGxlbiA9IHJlcS0+aGFyZF9ucl9zZWN0b3JzIDw8IDk7Ci0JCQkJCXViZF9maW5pc2gocmVxLCBsZW4pOwotCQkJCX0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihhaW8tPmJpdG1hcF9idWYgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZnJlZShhaW8tPmJpdG1hcF9idWYpOwotCQkJCWtmcmVlKGFpbyk7Ci0JCQl9Ci0JCX0KLSAgICAgICAgICAgICAgICBlbHNlIGlmKG4gPCAwKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIHViZF9maW5pc2goYWlvLT5yZXEsIG4pOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYoYWlvLT5iaXRtYXAgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2ZyZWUoYWlvLT5iaXRtYXApOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYoYWlvLT5iaXRtYXBfYnVmICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtmcmVlKGFpby0+Yml0bWFwX2J1Zik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBrZnJlZShhaW8pOwotICAgICAgICAgICAgICAgIH0KLQl9Ci0JcmVhY3RpdmF0ZV9mZChmZCwgVUJEX0lSUSk7Ci0KLSAgICAgICAgZG9fdWJkX3JlcXVlc3QodWJkX3F1ZXVlKTsKLQorCXViZF9oYW5kbGVyKCk7CiAJcmV0dXJuKElSUV9IQU5ETEVEKTsKIH0KIAorLyogT25seSBjaGFuZ2VkIGJ5IHViZF9pbml0LCB3aGljaCBpcyBhbiBpbml0Y2FsbC4gKi8KK3N0YXRpYyBpbnQgaW9fcGlkID0gLTE7CisKK3ZvaWQga2lsbF9pb190aHJlYWQodm9pZCkKK3sKKwlpZihpb19waWQgIT0gLTEpIAorCQlvc19raWxsX3Byb2Nlc3MoaW9fcGlkLCAxKTsKK30KKworX191bWxfZXhpdGNhbGwoa2lsbF9pb190aHJlYWQpOworCiBzdGF0aWMgaW50IHViZF9maWxlX3NpemUoc3RydWN0IHViZCAqZGV2LCBfX3U2NCAqc2l6ZV9vdXQpCiB7CiAJY2hhciAqZmlsZTsKQEAgLTYwOCw3ICs1NjksNyBAQAogCQkJCSZkZXYtPmNvdy5kYXRhX29mZnNldCwgY3JlYXRlX3B0cik7CiAKIAlpZigoZGV2LT5mZCA9PSAtRU5PRU5UKSAmJiBjcmVhdGVfY293KXsKLQkJZGV2LT5mZCA9IGNyZWF0ZV9jb3dfZmlsZShkZXYtPmZpbGUsIGRldi0+Y293LmZpbGUsCisJCWRldi0+ZmQgPSBjcmVhdGVfY293X2ZpbGUoZGV2LT5maWxlLCBkZXYtPmNvdy5maWxlLCAKIAkJCQkJICBkZXYtPm9wZW5mbGFncywgMSA8PCA5LCBQQUdFX1NJWkUsCiAJCQkJCSAgJmRldi0+Y293LmJpdG1hcF9vZmZzZXQsIAogCQkJCQkgICZkZXYtPmNvdy5iaXRtYXBfbGVuLApAQCAtODcwLDEwICs4MzEsNiBAQAogewogICAgICAgICBpbnQgaTsKIAotCXViZF9yZXBseV9mZCA9IGluaXRfYWlvX2lycShVQkRfSVJRLCAidWJkIiwgdWJkX2ludHIpOwotCWlmKHViZF9yZXBseV9mZCA8IDApCi0JCXByaW50aygiU2V0dGluZyB1cCB1YmQgQUlPIGZhaWxlZCwgZXJyID0gJWRcbiIsIHViZF9yZXBseV9mZCk7Ci0KIAlkZXZmc19ta19kaXIoInViZCIpOwogCWlmIChyZWdpc3Rlcl9ibGtkZXYoTUFKT1JfTlIsICJ1YmQiKSkKIAkJcmV0dXJuIC0xOwpAQCAtODg0LDcgKzg0MSw2IEBACiAJCXJldHVybiAtMTsKIAl9CiAJCQotCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHModWJkX3F1ZXVlLCBNQVhfU0cpOwogCWlmIChmYWtlX21ham9yICE9IE1BSk9SX05SKSB7CiAJCWNoYXIgbmFtZVtzaXplb2YoInViZF9ubm5cMCIpXTsKIApAQCAtODk2LDEyICs4NTIsNDAgQEAKIAlkcml2ZXJfcmVnaXN0ZXIoJnViZF9kcml2ZXIpOwogCWZvciAoaSA9IDA7IGkgPCBNQVhfREVWOyBpKyspIAogCQl1YmRfYWRkKGkpOwotCiAJcmV0dXJuIDA7CiB9CiAKIGxhdGVfaW5pdGNhbGwodWJkX2luaXQpOwogCitpbnQgdWJkX2RyaXZlcl9pbml0KHZvaWQpeworCXVuc2lnbmVkIGxvbmcgc3RhY2s7CisJaW50IGVycjsKKworCS8qIFNldCBieSBDT05GSUdfQkxLX0RFVl9VQkRfU1lOQyBvciB1YmQ9c3luYy4qLworCWlmKGdsb2JhbF9vcGVuZmxhZ3Mucyl7CisJCXByaW50ayhLRVJOX0lORk8gInViZDogU3luY2hyb25vdXMgbW9kZVxuIik7CisJCS8qIExldHRpbmcgdWJkPXN5bmMgYmUgbGlrZSB1c2luZyB1YmQjcz0gaW5zdGVhZCBvZiB1YmQjPSBpcworCQkgKiBlbm91Z2guIFNvIHVzZSBhbnl3YXkgdGhlIGlvIHRocmVhZC4gKi8KKwl9CisJc3RhY2sgPSBhbGxvY19zdGFjaygwLCAwKTsKKwlpb19waWQgPSBzdGFydF9pb190aHJlYWQoc3RhY2sgKyBQQUdFX1NJWkUgLSBzaXplb2Yodm9pZCAqKSwgCisJCQkJICZ0aHJlYWRfZmQpOworCWlmKGlvX3BpZCA8IDApeworCQlwcmludGsoS0VSTl9FUlIgCisJCSAgICAgICAidWJkIDogRmFpbGVkIHRvIHN0YXJ0IEkvTyB0aHJlYWQgKGVycm5vID0gJWQpIC0gIgorCQkgICAgICAgImZhbGxpbmcgYmFjayB0byBzeW5jaHJvbm91cyBJL09cbiIsIC1pb19waWQpOworCQlpb19waWQgPSAtMTsKKwkJcmV0dXJuKDApOworCX0KKwllcnIgPSB1bV9yZXF1ZXN0X2lycShVQkRfSVJRLCB0aHJlYWRfZmQsIElSUV9SRUFELCB1YmRfaW50ciwgCisJCQkgICAgIFNBX0lOVEVSUlVQVCwgInViZCIsIHViZF9kZXYpOworCWlmKGVyciAhPSAwKQorCQlwcmludGsoS0VSTl9FUlIgInVtX3JlcXVlc3RfaXJxIGZhaWxlZCAtIGVycm5vID0gJWRcbiIsIC1lcnIpOworCXJldHVybihlcnIpOworfQorCitkZXZpY2VfaW5pdGNhbGwodWJkX2RyaXZlcl9pbml0KTsKKwogc3RhdGljIGludCB1YmRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2s7CkBAIC05MzksNTUgKzkyMywxMDUgQEAKIAlyZXR1cm4oMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNvd2lmeV9iaXRtYXAoc3RydWN0IGlvX3RocmVhZF9yZXEgKnJlcSwgdW5zaWduZWQgbG9uZyAqYml0bWFwKQorc3RhdGljIHZvaWQgY293aWZ5X2JpdG1hcChfX3U2NCBpb19vZmZzZXQsIGludCBsZW5ndGgsIHVuc2lnbmVkIGxvbmcgKmNvd19tYXNrLAorCQkJICBfX3U2NCAqY293X29mZnNldCwgdW5zaWduZWQgbG9uZyAqYml0bWFwLAorCQkJICBfX3U2NCBiaXRtYXBfb2Zmc2V0LCB1bnNpZ25lZCBsb25nICpiaXRtYXBfd29yZHMsCisJCQkgIF9fdTY0IGJpdG1hcF9sZW4pCiB7Ci0gICAgICAgIF9fdTY0IHNlY3RvciA9IHJlcS0+b2Zmc2V0IC8gcmVxLT5zZWN0b3JzaXplOwotICAgICAgICBpbnQgaTsKKwlfX3U2NCBzZWN0b3IgPSBpb19vZmZzZXQgPj4gOTsKKwlpbnQgaSwgdXBkYXRlX2JpdG1hcCA9IDA7CiAKLSAgICAgICAgZm9yKGkgPSAwOyBpIDwgcmVxLT5sZW5ndGggLyByZXEtPnNlY3RvcnNpemU7IGkrKyl7Ci0gICAgICAgICAgICAgICAgaWYodWJkX3Rlc3RfYml0KHNlY3RvciArIGksIGJpdG1hcCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKwlmb3IoaSA9IDA7IGkgPCBsZW5ndGggPj4gOTsgaSsrKXsKKwkJaWYoY293X21hc2sgIT0gTlVMTCkKKwkJCXViZF9zZXRfYml0KGksICh1bnNpZ25lZCBjaGFyICopIGNvd19tYXNrKTsKKwkJaWYodWJkX3Rlc3RfYml0KHNlY3RvciArIGksICh1bnNpZ25lZCBjaGFyICopIGJpdG1hcCkpCisJCQljb250aW51ZTsKIAotICAgICAgICAgICAgICAgIGlmKHJlcS0+Yml0bWFwX3N0YXJ0ID09IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVxLT5iaXRtYXBfc3RhcnQgPSBzZWN0b3IgKyBpOwotICAgICAgICAgICAgICAgIHJlcS0+Yml0bWFwX2VuZCA9IHNlY3RvciArIGkgKyAxOworCQl1cGRhdGVfYml0bWFwID0gMTsKKwkJdWJkX3NldF9iaXQoc2VjdG9yICsgaSwgKHVuc2lnbmVkIGNoYXIgKikgYml0bWFwKTsKKwl9CiAKLSAgICAgICAgICAgICAgICB1YmRfc2V0X2JpdChzZWN0b3IgKyBpLCBiaXRtYXApOwotICAgICAgICB9CisJaWYoIXVwZGF0ZV9iaXRtYXApCisJCXJldHVybjsKKworCSpjb3dfb2Zmc2V0ID0gc2VjdG9yIC8gKHNpemVvZih1bnNpZ25lZCBsb25nKSAqIDgpOworCisJLyogVGhpcyB0YWtlcyBjYXJlIG9mIHRoZSBjYXNlIHdoZXJlIHdlJ3JlIGV4YWN0bHkgYXQgdGhlIGVuZCBvZiB0aGUKKwkgKiBkZXZpY2UsIGFuZCAqY293X29mZnNldCArIDEgaXMgb2ZmIHRoZSBlbmQuICBTbywganVzdCBiYWNrIGl0IHVwCisJICogYnkgb25lIHdvcmQuICBUaGFua3MgdG8gTHlubiBLZXJieSBmb3IgdGhlIGZpeCBhbmQgSmFtZXMgTWNNZWNoYW4KKwkgKiBmb3IgdGhlIG9yaWdpbmFsIGRpYWdub3Npcy4KKwkgKi8KKwlpZigqY293X29mZnNldCA9PSAoKGJpdG1hcF9sZW4gKyBzaXplb2YodW5zaWduZWQgbG9uZykgLSAxKSAvCisJCQkgICBzaXplb2YodW5zaWduZWQgbG9uZykgLSAxKSkKKwkJKCpjb3dfb2Zmc2V0KS0tOworCisJYml0bWFwX3dvcmRzWzBdID0gYml0bWFwWypjb3dfb2Zmc2V0XTsKKwliaXRtYXBfd29yZHNbMV0gPSBiaXRtYXBbKmNvd19vZmZzZXQgKyAxXTsKKworCSpjb3dfb2Zmc2V0ICo9IHNpemVvZih1bnNpZ25lZCBsb25nKTsKKwkqY293X29mZnNldCArPSBiaXRtYXBfb2Zmc2V0OworfQorCitzdGF0aWMgdm9pZCBjb3dpZnlfcmVxKHN0cnVjdCBpb190aHJlYWRfcmVxICpyZXEsIHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwKKwkJICAgICAgIF9fdTY0IGJpdG1hcF9vZmZzZXQsIF9fdTY0IGJpdG1hcF9sZW4pCit7CisJX191NjQgc2VjdG9yID0gcmVxLT5vZmZzZXQgPj4gOTsKKwlpbnQgaTsKKworCWlmKHJlcS0+bGVuZ3RoID4gKHNpemVvZihyZXEtPnNlY3Rvcl9tYXNrKSAqIDgpIDw8IDkpCisJCXBhbmljKCJPcGVyYXRpb24gdG9vIGxvbmciKTsKKworCWlmKHJlcS0+b3AgPT0gVUJEX1JFQUQpIHsKKwkJZm9yKGkgPSAwOyBpIDwgcmVxLT5sZW5ndGggPj4gOTsgaSsrKXsKKwkJCWlmKHViZF90ZXN0X2JpdChzZWN0b3IgKyBpLCAodW5zaWduZWQgY2hhciAqKSBiaXRtYXApKQorCQkJCXViZF9zZXRfYml0KGksICh1bnNpZ25lZCBjaGFyICopIAorCQkJCQkgICAgJnJlcS0+c2VjdG9yX21hc2spOworICAgICAgICAgICAgICAgIH0KKwl9CisJZWxzZSBjb3dpZnlfYml0bWFwKHJlcS0+b2Zmc2V0LCByZXEtPmxlbmd0aCwgJnJlcS0+c2VjdG9yX21hc2ssCisJCQkgICAmcmVxLT5jb3dfb2Zmc2V0LCBiaXRtYXAsIGJpdG1hcF9vZmZzZXQsCisJCQkgICByZXEtPmJpdG1hcF93b3JkcywgYml0bWFwX2xlbik7CiB9CiAKIC8qIENhbGxlZCB3aXRoIHViZF9pb19sb2NrIGhlbGQgKi8KLXN0YXRpYyBpbnQgcHJlcGFyZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpyZXEsIHN0cnVjdCBpb190aHJlYWRfcmVxICppb19yZXEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LCBpbnQgcGFnZV9vZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3N0YXRpYyBpbnQgcHJlcGFyZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpyZXEsIHN0cnVjdCBpb190aHJlYWRfcmVxICppb19yZXEpCiB7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSByZXEtPnJxX2Rpc2s7CiAJc3RydWN0IHViZCAqZGV2ID0gZGlzay0+cHJpdmF0ZV9kYXRhOworCV9fdTY0IG9mZnNldDsKKwlpbnQgbGVuOworCisJaWYocmVxLT5ycV9zdGF0dXMgPT0gUlFfSU5BQ1RJVkUpIHJldHVybigxKTsKIAogCS8qIFRoaXMgc2hvdWxkIGJlIGltcG9zc2libGUgbm93ICovCiAJaWYoKHJxX2RhdGFfZGlyKHJlcSkgPT0gV1JJVEUpICYmICFkZXYtPm9wZW5mbGFncy53KXsKIAkJcHJpbnRrKCJXcml0ZSBhdHRlbXB0ZWQgb24gcmVhZG9ubHkgdWJkIGRldmljZSAlc1xuIiwgCiAJCSAgICAgICBkaXNrLT5kaXNrX25hbWUpOwotICAgICAgICAgICAgICAgIHViZF9lbmRfcmVxdWVzdChyZXEsIDAsIDApOworCQllbmRfcmVxdWVzdChyZXEsIDApOwogCQlyZXR1cm4oMSk7CiAJfQogCisJb2Zmc2V0ID0gKChfX3U2NCkgcmVxLT5zZWN0b3IpIDw8IDk7CisJbGVuID0gcmVxLT5jdXJyZW50X25yX3NlY3RvcnMgPDwgOTsKKwogCWlvX3JlcS0+ZmRzWzBdID0gKGRldi0+Y293LmZpbGUgIT0gTlVMTCkgPyBkZXYtPmNvdy5mZCA6IGRldi0+ZmQ7CiAJaW9fcmVxLT5mZHNbMV0gPSBkZXYtPmZkOworCWlvX3JlcS0+Y293X29mZnNldCA9IC0xOwogCWlvX3JlcS0+b2Zmc2V0ID0gb2Zmc2V0OwogCWlvX3JlcS0+bGVuZ3RoID0gbGVuOwogCWlvX3JlcS0+ZXJyb3IgPSAwOwotCWlvX3JlcS0+b3AgPSAocnFfZGF0YV9kaXIocmVxKSA9PSBSRUFEKSA/IEFJT19SRUFEIDogQUlPX1dSSVRFOworCWlvX3JlcS0+c2VjdG9yX21hc2sgPSAwOworCisJaW9fcmVxLT5vcCA9IChycV9kYXRhX2RpcihyZXEpID09IFJFQUQpID8gVUJEX1JFQUQgOiBVQkRfV1JJVEU7CiAJaW9fcmVxLT5vZmZzZXRzWzBdID0gMDsKIAlpb19yZXEtPm9mZnNldHNbMV0gPSBkZXYtPmNvdy5kYXRhX29mZnNldDsKLSAgICAgICAgaW9fcmVxLT5idWZmZXIgPSBwYWdlX2FkZHJlc3MocGFnZSkgKyBwYWdlX29mZnNldDsKKwlpb19yZXEtPmJ1ZmZlciA9IHJlcS0+YnVmZmVyOwogCWlvX3JlcS0+c2VjdG9yc2l6ZSA9IDEgPDwgOTsKLSAgICAgICAgaW9fcmVxLT5iaXRtYXBfb2Zmc2V0ID0gZGV2LT5jb3cuYml0bWFwX29mZnNldDsKLSAgICAgICAgaW9fcmVxLT5iaXRtYXBfc3RhcnQgPSAtMTsKLSAgICAgICAgaW9fcmVxLT5iaXRtYXBfZW5kID0gLTE7CiAKLSAgICAgICAgaWYoKGRldi0+Y293LmZpbGUgIT0gTlVMTCkgJiYgKGlvX3JlcS0+b3AgPT0gVUJEX1dSSVRFKSkKLSAgICAgICAgICAgICAgICBjb3dpZnlfYml0bWFwKGlvX3JlcSwgZGV2LT5jb3cuYml0bWFwKTsKKwlpZihkZXYtPmNvdy5maWxlICE9IE5VTEwpCisJCWNvd2lmeV9yZXEoaW9fcmVxLCBkZXYtPmNvdy5iaXRtYXAsIGRldi0+Y293LmJpdG1hcF9vZmZzZXQsCisJCQkgICBkZXYtPmNvdy5iaXRtYXBfbGVuKTsKKwogCXJldHVybigwKTsKIH0KIApAQCAtOTk2LDM2ICsxMDMwLDMwIEBACiB7CiAJc3RydWN0IGlvX3RocmVhZF9yZXEgaW9fcmVxOwogCXN0cnVjdCByZXF1ZXN0ICpyZXE7Ci0JX191NjQgc2VjdG9yOwotCWludCBlcnI7CisJaW50IGVyciwgbjsKIAotCWlmKGluX3ViZCkKLQkJcmV0dXJuOwotCWluX3ViZCA9IDE7Ci0Jd2hpbGUoKHJlcSA9IGVsdl9uZXh0X3JlcXVlc3QocSkpICE9IE5VTEwpewotCQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IHJlcS0+cnFfZGlzazsKLQkJc3RydWN0IHViZCAqZGV2ID0gZGlzay0+cHJpdmF0ZV9kYXRhOwotCQlpbnQgbiwgaTsKLQotCQlibGtkZXZfZGVxdWV1ZV9yZXF1ZXN0KHJlcSk7Ci0KLQkJc2VjdG9yID0gcmVxLT5zZWN0b3I7Ci0JCW4gPSBibGtfcnFfbWFwX3NnKHEsIHJlcSwgZGV2LT5zZyk7Ci0KLQkJZm9yKGkgPSAwOyBpIDwgbjsgaSsrKXsKLQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSAmZGV2LT5zZ1tpXTsKLQotCQkJZXJyID0gcHJlcGFyZV9yZXF1ZXN0KHJlcSwgJmlvX3JlcSwgc2VjdG9yIDw8IDksCi0JCQkJCSAgICAgIHNnLT5vZmZzZXQsIHNnLT5sZW5ndGgsCi0JCQkJCSAgICAgIHNnLT5wYWdlKTsKLQkJCWlmKGVycikKLQkJCQljb250aW51ZTsKLQotCQkJc2VjdG9yICs9IHNnLT5sZW5ndGggPj4gOTsKLQkJCWRvX2lvKCZpb19yZXEsIHJlcSwgZGV2LT5jb3cuYml0bWFwKTsKKwlpZih0aHJlYWRfZmQgPT0gLTEpeworCQl3aGlsZSgocmVxID0gZWx2X25leHRfcmVxdWVzdChxKSkgIT0gTlVMTCl7CisJCQllcnIgPSBwcmVwYXJlX3JlcXVlc3QocmVxLCAmaW9fcmVxKTsKKwkJCWlmKCFlcnIpeworCQkJCWRvX2lvKCZpb19yZXEpOworCQkJCV9fdWJkX2ZpbmlzaChyZXEsIGlvX3JlcS5lcnJvcik7CisJCQl9CiAJCX0KIAl9Ci0JaW5fdWJkID0gMDsKKwllbHNlIHsKKwkJaWYoZG9fdWJkIHx8IChyZXEgPSBlbHZfbmV4dF9yZXF1ZXN0KHEpKSA9PSBOVUxMKQorCQkJcmV0dXJuOworCQllcnIgPSBwcmVwYXJlX3JlcXVlc3QocmVxLCAmaW9fcmVxKTsKKwkJaWYoIWVycil7CisJCQlkb191YmQgPSB1YmRfaGFuZGxlcjsKKwkJCW4gPSBvc193cml0ZV9maWxlKHRocmVhZF9mZCwgKGNoYXIgKikgJmlvX3JlcSwKKwkJCQkJIHNpemVvZihpb19yZXEpKTsKKwkJCWlmKG4gIT0gc2l6ZW9mKGlvX3JlcSkpCisJCQkJcHJpbnRrKCJ3cml0ZSB0byBpbyB0aHJlYWQgZmFpbGVkLCAiCisJCQkJICAgICAgICJlcnJubyA9ICVkXG4iLCAtbik7CisJCX0KKwl9CiB9CiAKIHN0YXRpYyBpbnQgdWJkX2lvY3RsKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCkBAIC0xMjQxLDk1ICsxMjY5LDEzMSBAQAogCXJldHVybihlcnIpOwogfQogCi12b2lkIGRvX2lvKHN0cnVjdCBpb190aHJlYWRfcmVxICpyZXEsIHN0cnVjdCByZXF1ZXN0ICpyLCB1bnNpZ25lZCBsb25nICpiaXRtYXApCitzdGF0aWMgaW50IHVwZGF0ZV9iaXRtYXAoc3RydWN0IGlvX3RocmVhZF9yZXEgKnJlcSkKIHsKLSAgICAgICAgc3RydWN0IHViZF9haW8gKmFpbzsKLSAgICAgICAgc3RydWN0IGJpdG1hcF9pbyAqYml0bWFwX2lvID0gTlVMTDsKLSAgICAgICAgY2hhciAqYnVmOwotICAgICAgICB2b2lkICpiaXRtYXBfYnVmID0gTlVMTDsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIHNlY3RvcjsKLSAgICAgICAgaW50IG5zZWN0b3JzLCBzdGFydCwgZW5kLCBiaXQsIGVycjsKLSAgICAgICAgX191NjQgb2ZmOworCWludCBuOwogCi0gICAgICAgIGlmKHJlcS0+Yml0bWFwX3N0YXJ0ICE9IC0xKXsKLSAgICAgICAgICAgICAgICAvKiBSb3VuZCB1cCB0byB0aGUgbmVhcmVzdCB3b3JkICovCi0gICAgICAgICAgICAgICAgaW50IHJvdW5kID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwotICAgICAgICAgICAgICAgIGxlbiA9IChyZXEtPmJpdG1hcF9lbmQgLSByZXEtPmJpdG1hcF9zdGFydCArCi0gICAgICAgICAgICAgICAgICAgICAgIHJvdW5kICogOCAtIDEpIC8gKHJvdW5kICogOCk7Ci0gICAgICAgICAgICAgICAgbGVuICo9IHJvdW5kOworCWlmKHJlcS0+Y293X29mZnNldCA9PSAtMSkKKwkJcmV0dXJuKDApOwogCi0gICAgICAgICAgICAgICAgb2ZmID0gcmVxLT5iaXRtYXBfc3RhcnQgLyAoOCAqIHJvdW5kKTsKLSAgICAgICAgICAgICAgICBvZmYgKj0gcm91bmQ7CisJbiA9IG9zX3NlZWtfZmlsZShyZXEtPmZkc1sxXSwgcmVxLT5jb3dfb2Zmc2V0KTsKKwlpZihuIDwgMCl7CisJCXByaW50aygiZG9faW8gLSBiaXRtYXAgbHNlZWsgZmFpbGVkIDogZXJyID0gJWRcbiIsIC1uKTsKKwkJcmV0dXJuKDEpOworCX0KIAotICAgICAgICAgICAgICAgIGJpdG1hcF9pbyA9IGttYWxsb2Moc2l6ZW9mKCpiaXRtYXBfaW8pLCBHRlBfS0VSTkVMKTsKLSAgICAgICAgICAgICAgICBpZihiaXRtYXBfaW8gPT0gTlVMTCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIkZhaWxlZCB0byBrbWFsbG9jIGJpdG1hcCBJT1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXEtPmVycm9yID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9CisJbiA9IG9zX3dyaXRlX2ZpbGUocmVxLT5mZHNbMV0sICZyZXEtPmJpdG1hcF93b3JkcywKKwkJICAgICAgICAgIHNpemVvZihyZXEtPmJpdG1hcF93b3JkcykpOworCWlmKG4gIT0gc2l6ZW9mKHJlcS0+Yml0bWFwX3dvcmRzKSl7CisJCXByaW50aygiZG9faW8gLSBiaXRtYXAgdXBkYXRlIGZhaWxlZCwgZXJyID0gJWQgZmQgPSAlZFxuIiwgLW4sCisJCSAgICAgICByZXEtPmZkc1sxXSk7CisJCXJldHVybigxKTsKKwl9CiAKLSAgICAgICAgICAgICAgICBiaXRtYXBfYnVmID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOwotICAgICAgICAgICAgICAgIGlmKGJpdG1hcF9idWYgPT0gTlVMTCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoImRvX2lvIDoga21hbGxvYyBvZiBiaXRtYXAgY2h1bmsgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWRcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAga2ZyZWUoYml0bWFwX2lvKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcS0+ZXJyb3IgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZW1jcHkoYml0bWFwX2J1ZiwgJmJpdG1hcFtvZmYgLyBzaXplb2YoYml0bWFwWzBdKV0sIGxlbik7Ci0KLSAgICAgICAgICAgICAgICAqYml0bWFwX2lvID0gKChzdHJ1Y3QgYml0bWFwX2lvKQotICAgICAgICAgICAgICAgICAgICAgICAgeyAuY291bnQJPSBBVE9NSUNfSU5JVCgwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLmFpbwkJPSBJTklUX0FJTyhBSU9fV1JJVEUsIHJlcS0+ZmRzWzFdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwX2J1ZiwgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLT5iaXRtYXBfb2Zmc2V0ICsgb2ZmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWJkX3JlcGx5X2ZkKSB9ICk7Ci0gICAgICAgIH0KLQotICAgICAgICBuc2VjdG9ycyA9IHJlcS0+bGVuZ3RoIC8gcmVxLT5zZWN0b3JzaXplOwotICAgICAgICBzdGFydCA9IDA7Ci0gICAgICAgIGVuZCA9IG5zZWN0b3JzOwotICAgICAgICBiaXQgPSAwOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgaWYoYml0bWFwICE9IE5VTEwpewotICAgICAgICAgICAgICAgICAgICAgICAgc2VjdG9yID0gcmVxLT5vZmZzZXQgLyByZXEtPnNlY3RvcnNpemU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiaXQgPSB1YmRfdGVzdF9iaXQoc2VjdG9yICsgc3RhcnQsIGJpdG1hcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSBzdGFydDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKChlbmQgPCBuc2VjdG9ycykgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1YmRfdGVzdF9iaXQoc2VjdG9yICsgZW5kLCBiaXRtYXApID09IGJpdCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCsrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG9mZiA9IHJlcS0+b2Zmc2V0c1tiaXRdICsgcmVxLT5vZmZzZXQgKwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgKiByZXEtPnNlY3RvcnNpemU7Ci0gICAgICAgICAgICAgICAgbGVuID0gKGVuZCAtIHN0YXJ0KSAqIHJlcS0+c2VjdG9yc2l6ZTsKLSAgICAgICAgICAgICAgICBidWYgPSAmcmVxLT5idWZmZXJbc3RhcnQgKiByZXEtPnNlY3RvcnNpemVdOwotCi0gICAgICAgICAgICAgICAgYWlvID0ga21hbGxvYyhzaXplb2YoKmFpbyksIEdGUF9LRVJORUwpOwotICAgICAgICAgICAgICAgIGlmKGFpbyA9PSBOVUxMKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcS0+ZXJyb3IgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICphaW8gPSAoKHN0cnVjdCB1YmRfYWlvKQotICAgICAgICAgICAgICAgICAgICAgICAgeyAuYWlvCQk9IElOSVRfQUlPKHJlcS0+b3AsIHJlcS0+ZmRzW2JpdF0sIGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiwgb2ZmLCB1YmRfcmVwbHlfZmQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAubGVuCQk9IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcQkJPSByLAotICAgICAgICAgICAgICAgICAgICAgICAgICAuYml0bWFwCT0gYml0bWFwX2lvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAuYml0bWFwX2J1ZiAJPSBiaXRtYXBfYnVmIH0pOwotCi0gICAgICAgICAgICAgICAgaWYoYWlvLT5iaXRtYXAgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGF0b21pY19pbmMoJmFpby0+Yml0bWFwLT5jb3VudCk7Ci0KLSAgICAgICAgICAgICAgICBlcnIgPSBzdWJtaXRfYWlvKCZhaW8tPmFpbyk7Ci0gICAgICAgICAgICAgICAgaWYoZXJyKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiZG9faW8gLSBzdWJtaXRfYWlvIGZhaWxlZCwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlcnIgPSAlZFxuIiwgZXJyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcS0+ZXJyb3IgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHN0YXJ0ID0gZW5kOwotICAgICAgICB9IHdoaWxlKHN0YXJ0IDwgbnNlY3RvcnMpOworCXJldHVybigwKTsKIH0KKwordm9pZCBkb19pbyhzdHJ1Y3QgaW9fdGhyZWFkX3JlcSAqcmVxKQoreworCWNoYXIgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIGxlbjsKKwlpbnQgbiwgbnNlY3RvcnMsIHN0YXJ0LCBlbmQsIGJpdDsKKwlpbnQgZXJyOworCV9fdTY0IG9mZjsKKworCW5zZWN0b3JzID0gcmVxLT5sZW5ndGggLyByZXEtPnNlY3RvcnNpemU7CisJc3RhcnQgPSAwOworCWRvIHsKKwkJYml0ID0gdWJkX3Rlc3RfYml0KHN0YXJ0LCAodW5zaWduZWQgY2hhciAqKSAmcmVxLT5zZWN0b3JfbWFzayk7CisJCWVuZCA9IHN0YXJ0OworCQl3aGlsZSgoZW5kIDwgbnNlY3RvcnMpICYmCisJCSAgICAgICh1YmRfdGVzdF9iaXQoZW5kLCAodW5zaWduZWQgY2hhciAqKQorCQkJCSAgICAmcmVxLT5zZWN0b3JfbWFzaykgPT0gYml0KSkKKwkJCWVuZCsrOworCisJCW9mZiA9IHJlcS0+b2Zmc2V0ICsgcmVxLT5vZmZzZXRzW2JpdF0gKworCQkJc3RhcnQgKiByZXEtPnNlY3RvcnNpemU7CisJCWxlbiA9IChlbmQgLSBzdGFydCkgKiByZXEtPnNlY3RvcnNpemU7CisJCWJ1ZiA9ICZyZXEtPmJ1ZmZlcltzdGFydCAqIHJlcS0+c2VjdG9yc2l6ZV07CisKKwkJZXJyID0gb3Nfc2Vla19maWxlKHJlcS0+ZmRzW2JpdF0sIG9mZik7CisJCWlmKGVyciA8IDApeworCQkJcHJpbnRrKCJkb19pbyAtIGxzZWVrIGZhaWxlZCA6IGVyciA9ICVkXG4iLCAtZXJyKTsKKwkJCXJlcS0+ZXJyb3IgPSAxOworCQkJcmV0dXJuOworCQl9CisJCWlmKHJlcS0+b3AgPT0gVUJEX1JFQUQpeworCQkJbiA9IDA7CisJCQlkbyB7CisJCQkJYnVmID0gJmJ1ZltuXTsKKwkJCQlsZW4gLT0gbjsKKwkJCQluID0gb3NfcmVhZF9maWxlKHJlcS0+ZmRzW2JpdF0sIGJ1ZiwgbGVuKTsKKwkJCQlpZiAobiA8IDApIHsKKwkJCQkJcHJpbnRrKCJkb19pbyAtIHJlYWQgZmFpbGVkLCBlcnIgPSAlZCAiCisJCQkJCSAgICAgICAiZmQgPSAlZFxuIiwgLW4sIHJlcS0+ZmRzW2JpdF0pOworCQkJCQlyZXEtPmVycm9yID0gMTsKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCX0gd2hpbGUoKG4gPCBsZW4pICYmIChuICE9IDApKTsKKwkJCWlmIChuIDwgbGVuKSBtZW1zZXQoJmJ1ZltuXSwgMCwgbGVuIC0gbik7CisJCX0gZWxzZSB7CisJCQluID0gb3Nfd3JpdGVfZmlsZShyZXEtPmZkc1tiaXRdLCBidWYsIGxlbik7CisJCQlpZihuICE9IGxlbil7CisJCQkJcHJpbnRrKCJkb19pbyAtIHdyaXRlIGZhaWxlZCBlcnIgPSAlZCAiCisJCQkJICAgICAgICJmZCA9ICVkXG4iLCAtbiwgcmVxLT5mZHNbYml0XSk7CisJCQkJcmVxLT5lcnJvciA9IDE7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisKKwkJc3RhcnQgPSBlbmQ7CisJfSB3aGlsZShzdGFydCA8IG5zZWN0b3JzKTsKKworCXJlcS0+ZXJyb3IgPSB1cGRhdGVfYml0bWFwKHJlcSk7Cit9CisKKy8qIENoYW5nZWQgaW4gc3RhcnRfaW9fdGhyZWFkLCB3aGljaCBpcyBzZXJpYWxpemVkIGJ5IGJlaW5nIGNhbGxlZCBvbmx5CisgKiBmcm9tIHViZF9pbml0LCB3aGljaCBpcyBhbiBpbml0Y2FsbC4KKyAqLworaW50IGtlcm5lbF9mZCA9IC0xOworCisvKiBPbmx5IGNoYW5nZWQgYnkgdGhlIGlvIHRocmVhZCAqLworaW50IGlvX2NvdW50ID0gMDsKKworaW50IGlvX3RocmVhZCh2b2lkICphcmcpCit7CisJc3RydWN0IGlvX3RocmVhZF9yZXEgcmVxOworCWludCBuOworCisJaWdub3JlX3NpZ3dpbmNoX3NpZygpOworCXdoaWxlKDEpeworCQluID0gb3NfcmVhZF9maWxlKGtlcm5lbF9mZCwgJnJlcSwgc2l6ZW9mKHJlcSkpOworCQlpZihuICE9IHNpemVvZihyZXEpKXsKKwkJCWlmKG4gPCAwKQorCQkJCXByaW50aygiaW9fdGhyZWFkIC0gcmVhZCBmYWlsZWQsIGZkID0gJWQsICIKKwkJCQkgICAgICAgImVyciA9ICVkXG4iLCBrZXJuZWxfZmQsIC1uKTsKKwkJCWVsc2UgeworCQkJCXByaW50aygiaW9fdGhyZWFkIC0gc2hvcnQgcmVhZCwgZmQgPSAlZCwgIgorCQkJCSAgICAgICAibGVuZ3RoID0gJWRcbiIsIGtlcm5lbF9mZCwgbik7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCQlpb19jb3VudCsrOworCQlkb19pbygmcmVxKTsKKwkJbiA9IG9zX3dyaXRlX2ZpbGUoa2VybmVsX2ZkLCAmcmVxLCBzaXplb2YocmVxKSk7CisJCWlmKG4gIT0gc2l6ZW9mKHJlcSkpCisJCQlwcmludGsoImlvX3RocmVhZCAtIHdyaXRlIGZhaWxlZCwgZmQgPSAlZCwgZXJyID0gJWRcbiIsCisJCQkgICAgICAga2VybmVsX2ZkLCAtbik7CisJfQorfQorCisvKgorICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCisgKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKKyAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKKyAqIG9mIHRoZSBmaWxlLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3h0ZXJtLmMgYi9hcmNoL3VtL2RyaXZlcnMveHRlcm0uYwppbmRleCA5M2RjMTkxLi45MGUwZTVmIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMveHRlcm0uYworKysgYi9hcmNoL3VtL2RyaXZlcnMveHRlcm0uYwpAQCAtMTEwLDEzICsxMTAsMTUgQEAKIAogCWZkID0gbWtzdGVtcChmaWxlKTsKIAlpZihmZCA8IDApeworCQllcnIgPSAtZXJybm87CiAJCXByaW50aygieHRlcm1fb3BlbiA6IG1rc3RlbXAgZmFpbGVkLCBlcnJubyA9ICVkXG4iLCBlcnJubyk7Ci0JCXJldHVybigtZXJybm8pOworCQlyZXR1cm4gZXJyOwogCX0KIAogCWlmKHVubGluayhmaWxlKSl7CisJCWVyciA9IC1lcnJubzsKIAkJcHJpbnRrKCJ4dGVybV9vcGVuIDogdW5saW5rIGZhaWxlZCwgZXJybm8gPSAlZFxuIiwgZXJybm8pOwotCQlyZXR1cm4oLWVycm5vKTsKKwkJcmV0dXJuIGVycjsKIAl9CiAJb3NfY2xvc2VfZmlsZShmZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9haW8uaCBiL2FyY2gvdW0vaW5jbHVkZS9haW8uaAppbmRleCA4M2YxNjg3Li40MjNiYWU5MSAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL2Fpby5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9haW8uaApAQCAtMTQsMjcgKzE0LDE1IEBACiB9OwogCiBzdHJ1Y3QgYWlvX2NvbnRleHQgewotCWVudW0gYWlvX3R5cGUgdHlwZTsKLQlpbnQgZmQ7Ci0Jdm9pZCAqZGF0YTsKLQlpbnQgbGVuOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQ7CiAJaW50IHJlcGx5X2ZkOwogCXN0cnVjdCBhaW9fY29udGV4dCAqbmV4dDsKIH07CiAKLSNkZWZpbmUgSU5JVF9BSU8oYWlvX3R5cGUsIGFpb19mZCwgYWlvX2RhdGEsIGFpb19sZW4sIGFpb19vZmZzZXQsIFwKLQkJIGFpb19yZXBseV9mZCkgXAotCXsgLnR5cGUgCT0gYWlvX3R5cGUsIFwKLQkgIC5mZAkJPSBhaW9fZmQsIFwKLQkgIC5kYXRhCQk9IGFpb19kYXRhLCBcCi0JICAubGVuCQk9IGFpb19sZW4sIFwKLQkgIC5vZmZzZXQJPSBhaW9fb2Zmc2V0LCBcCi0JICAucmVwbHlfZmQJPSBhaW9fcmVwbHlfZmQgfQotCiAjZGVmaW5lIElOSVRfQUlPX0NPTlRFWFQgeyAucmVwbHlfZmQJPSAtMSwgXAogCQkJICAgLm5leHQJPSBOVUxMIH0KIAotZXh0ZXJuIGludCBzdWJtaXRfYWlvKHN0cnVjdCBhaW9fY29udGV4dCAqYWlvKTsKK2V4dGVybiBpbnQgc3VibWl0X2FpbyhlbnVtIGFpb190eXBlIHR5cGUsIGludCBmZCwgY2hhciAqYnVmLCBpbnQgbGVuLAorCQkgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LCBpbnQgcmVwbHlfZmQsCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFpb19jb250ZXh0ICphaW8pOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9jb21tb24tb2Zmc2V0cy5oIGIvYXJjaC91bS9pbmNsdWRlL2NvbW1vbi1vZmZzZXRzLmgKaW5kZXggMGFhNjIwOS4uMzU2MzkwZCAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL2NvbW1vbi1vZmZzZXRzLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL2NvbW1vbi1vZmZzZXRzLmgKQEAgLTEsNyArMSw3IEBACiAvKiBmb3IgdXNlIGJ5IHN5cy0kU1VCQVJDSC9rZXJuZWwtb2Zmc2V0cy5jICovCiAKLU9GRlNFVChUQVNLX1JFR1MsIHRhc2tfc3RydWN0LCB0aHJlYWQucmVncyk7Ci1PRkZTRVQoVEFTS19QSUQsIHRhc2tfc3RydWN0LCBwaWQpOworT0ZGU0VUKEhPU1RfVEFTS19SRUdTLCB0YXNrX3N0cnVjdCwgdGhyZWFkLnJlZ3MpOworT0ZGU0VUKEhPU1RfVEFTS19QSUQsIHRhc2tfc3RydWN0LCBwaWQpOwogREVGSU5FKFVNX0tFUk5fUEFHRV9TSVpFLCBQQUdFX1NJWkUpOwogREVGSU5FKFVNX05TRUNfUEVSX1NFQywgTlNFQ19QRVJfU0VDKTsKIERFRklORV9TVFIoVU1fS0VSTl9FTUVSRywgS0VSTl9FTUVSRyk7CkBAIC0xMiw0ICsxMiw2IEBACiBERUZJTkVfU1RSKFVNX0tFUk5fTk9USUNFLCBLRVJOX05PVElDRSk7CiBERUZJTkVfU1RSKFVNX0tFUk5fSU5GTywgS0VSTl9JTkZPKTsKIERFRklORV9TVFIoVU1fS0VSTl9ERUJVRywgS0VSTl9ERUJVRyk7Ci1ERUZJTkUoSE9TVF9FTEZfQ0xBU1MsIEVMRl9DTEFTUyk7CitERUZJTkUoVU1fRUxGX0NMQVNTLCBFTEZfQ0xBU1MpOworREVGSU5FKFVNX0VMRkNMQVNTMzIsIEVMRkNMQVNTMzIpOworREVGSU5FKFVNX0VMRkNMQVNTNjQsIEVMRkNMQVNTNjQpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL21jb25zb2xlLmggYi9hcmNoL3VtL2luY2x1ZGUvbWNvbnNvbGUuaAppbmRleCBjZmEzNjhlLi5iMWI1MTJmIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvbWNvbnNvbGUuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvbWNvbnNvbGUuaApAQCAtODEsNiArODEsNyBAQAogZXh0ZXJuIHZvaWQgbWNvbnNvbGVfZ28oc3RydWN0IG1jX3JlcXVlc3QgKnJlcSk7CiBleHRlcm4gdm9pZCBtY29uc29sZV9sb2coc3RydWN0IG1jX3JlcXVlc3QgKnJlcSk7CiBleHRlcm4gdm9pZCBtY29uc29sZV9wcm9jKHN0cnVjdCBtY19yZXF1ZXN0ICpyZXEpOworZXh0ZXJuIHZvaWQgbWNvbnNvbGVfc3RhY2soc3RydWN0IG1jX3JlcXVlc3QgKnJlcSk7CiAKIGV4dGVybiBpbnQgbWNvbnNvbGVfZ2V0X3JlcXVlc3QoaW50IGZkLCBzdHJ1Y3QgbWNfcmVxdWVzdCAqcmVxKTsKIGV4dGVybiBpbnQgbWNvbnNvbGVfbm90aWZ5KGNoYXIgKnNvY2tfbmFtZSwgaW50IHR5cGUsIGNvbnN0IHZvaWQgKmRhdGEsIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL21lbV91c2VyLmggYi9hcmNoL3VtL2luY2x1ZGUvbWVtX3VzZXIuaAppbmRleCBkNjQwNGJiLi45ZmVmNDEyIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvbWVtX3VzZXIuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvbWVtX3VzZXIuaApAQCAtNTEsNyArNTEsNiBAQAogCiBleHRlcm4gdm9pZCBjaGVja19kZXZhbm9uKHZvaWQpOwogZXh0ZXJuIGludCBpbml0X21lbV91c2VyKHZvaWQpOwotZXh0ZXJuIGludCBjcmVhdGVfbWVtX2ZpbGUodW5zaWduZWQgbG9uZyBsZW4pOwogZXh0ZXJuIHZvaWQgc2V0dXBfbWVtb3J5KHZvaWQgKmVudHJ5KTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGZpbmRfaW9tZW0oY2hhciAqZHJpdmVyLCB1bnNpZ25lZCBsb25nICpsZW5fb3V0KTsKIGV4dGVybiBpbnQgaW5pdF9tYXBzKHVuc2lnbmVkIGxvbmcgcGh5c21lbSwgdW5zaWduZWQgbG9uZyBpb21lbSwKQEAgLTY0LDIwICs2Myw2IEBACiBleHRlcm4gdm9pZCB1bm1hcF9waHlzbWVtKHZvaWQpOwogZXh0ZXJuIHZvaWQgbWFwX21lbW9yeSh1bnNpZ25lZCBsb25nIHZpcnQsIHVuc2lnbmVkIGxvbmcgcGh5cywKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCBpbnQgciwgaW50IHcsIGludCB4KTsKLWV4dGVybiBpbnQgcHJvdGVjdF9tZW1vcnkodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgCi0JCQkgIGludCByLCBpbnQgdywgaW50IHgsIGludCBtdXN0X3N1Y2NlZWQpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X2ttZW1fZW5kKHZvaWQpOwotZXh0ZXJuIHZvaWQgY2hlY2tfdG1wZXhlYyh2b2lkKTsKIAogI2VuZGlmCi0KLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvb3MuaCBiL2FyY2gvdW0vaW5jbHVkZS9vcy5oCmluZGV4IDRjMzYyNDUuLjJlNThlMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9vcy5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9vcy5oCkBAIC02LDYgKzYsNyBAQAogI2lmbmRlZiBfX09TX0hfXwogI2RlZmluZSBfX09TX0hfXwogCisjaW5jbHVkZSAidW1sLWNvbmZpZy5oIgogI2luY2x1ZGUgImFzbS90eXBlcy5oIgogI2luY2x1ZGUgIi4uL29zL2luY2x1ZGUvZmlsZS5oIgogCkBAIC0xNTcsNiArMTU4LDE3IEBACiBleHRlcm4gdm9pZCBvc19lYXJseV9jaGVja3Modm9pZCk7CiBleHRlcm4gaW50IGNhbl9kb19za2FzKHZvaWQpOwogCisvKiBNYWtlIHN1cmUgdGhleSBhcmUgY2xlYXIgd2hlbiBydW5uaW5nIGluIFRUIG1vZGUuIFJlcXVpcmVkIGJ5CisgKiBTRUdWX01BWUJFX0ZJWEFCTEUgKi8KKyNpZmRlZiBVTUxfQ09ORklHX01PREVfU0tBUworI2RlZmluZSBjbGVhcl9jYW5fZG9fc2thcygpIGRvIHsgcHRyYWNlX2ZhdWx0aW5mbyA9IHByb2NfbW0gPSAwOyB9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgY2xlYXJfY2FuX2RvX3NrYXMoKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKiBtZW0uYyAqLworZXh0ZXJuIGludCBjcmVhdGVfbWVtX2ZpbGUodW5zaWduZWQgbG9uZyBsZW4pOworCiAvKiBwcm9jZXNzLmMgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIG9zX3Byb2Nlc3NfcGMoaW50IHBpZCk7CiBleHRlcm4gaW50IG9zX3Byb2Nlc3NfcGFyZW50KGludCBwaWQpOwpAQCAtMTgxLDYgKzE5Myw4IEBACiAvKiB0dC5jCiAgKiBmb3IgdHQgbW9kZSBvbmx5ICh3aWxsIGJlIGRlbGV0ZWQgaW4gZnV0dXJlLi4uKQogICovCitleHRlcm4gaW50IHByb3RlY3RfbWVtb3J5KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkgIGludCByLCBpbnQgdywgaW50IHgsIGludCBtdXN0X3N1Y2NlZWQpOwogZXh0ZXJuIHZvaWQgZm9yd2FyZF9wZW5kaW5nX3NpZ2lvKGludCB0YXJnZXQpOwogZXh0ZXJuIGludCBzdGFydF9mb3JrX3RyYW1wKHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyB0ZW1wX3N0YWNrLAogCQkJICAgIGludCBjbG9uZV9mbGFncywgaW50ICgqdHJhbXApKHZvaWQgKikpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3JlZ2lzdGVycy5oIGIvYXJjaC91bS9pbmNsdWRlL3JlZ2lzdGVycy5oCmluZGV4IDBhMzVlNmQuLjQ4OTJlNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9yZWdpc3RlcnMuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvcmVnaXN0ZXJzLmgKQEAgLTE1LDE2ICsxNSw2IEBACiBleHRlcm4gdm9pZCByZXN0b3JlX3JlZ2lzdGVycyhpbnQgcGlkLCB1bmlvbiB1bWxfcHRfcmVncyAqcmVncyk7CiBleHRlcm4gdm9pZCBpbml0X3JlZ2lzdGVycyhpbnQgcGlkKTsKIGV4dGVybiB2b2lkIGdldF9zYWZlX3JlZ2lzdGVycyh1bnNpZ25lZCBsb25nICogcmVncyk7CitleHRlcm4gdm9pZCBnZXRfdGhyZWFkX3JlZ3ModW5pb24gdW1sX3B0X3JlZ3MgKnVtbF9yZWdzLCB2b2lkICpidWZmZXIpOwogCiAjZW5kaWYKLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9za2FzX3B0cmVncy5oIGIvYXJjaC91bS9pbmNsdWRlL3NrYXNfcHRyZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNkYjE5ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9za2FzX3B0cmVncy5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX1NLQVNfUFRfUkVHU18KKyNkZWZpbmUgX19TS0FTX1BUX1JFR1NfCisKKyNpbmNsdWRlIDx1c2VyX2NvbnN0YW50cy5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9zYy5oIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3NjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU3ZDE3OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9zYy5oCkBAIC0wLDAgKzEsNDQgQEAKKyNpZm5kZWYgX19TWVNERVBfSTM4Nl9TQ19ICisjZGVmaW5lIF9fU1lTREVQX0kzODZfU0NfSAorCisjaW5jbHVkZSA8dXNlcl9jb25zdGFudHMuaD4KKworI2RlZmluZSBTQ19PRkZTRVQoc2MsIGZpZWxkKSBcCisJKigodW5zaWduZWQgbG9uZyAqKSAmKCgoY2hhciAqKSAoc2MpKVtIT1NUXyMjZmllbGRdKSkKKyNkZWZpbmUgU0NfRlBfT0ZGU0VUKHNjLCBmaWVsZCkgXAorCSooKHVuc2lnbmVkIGxvbmcgKikgJigoKGNoYXIgKikgKFNDX0ZQU1RBVEUoc2MpKSlbSE9TVF8jI2ZpZWxkXSkpCisjZGVmaW5lIFNDX0ZQX09GRlNFVF9QVFIoc2MsIGZpZWxkLCB0eXBlKSBcCisJKCh0eXBlICopICYoKChjaGFyICopIChTQ19GUFNUQVRFKHNjKSkpW0hPU1RfIyNmaWVsZF0pKQorCisjZGVmaW5lIFNDX0lQKHNjKSBTQ19PRkZTRVQoc2MsIFNDX0lQKQorI2RlZmluZSBTQ19TUChzYykgU0NfT0ZGU0VUKHNjLCBTQ19TUCkKKyNkZWZpbmUgU0NfRlMoc2MpIFNDX09GRlNFVChzYywgU0NfRlMpCisjZGVmaW5lIFNDX0dTKHNjKSBTQ19PRkZTRVQoc2MsIFNDX0dTKQorI2RlZmluZSBTQ19EUyhzYykgU0NfT0ZGU0VUKHNjLCBTQ19EUykKKyNkZWZpbmUgU0NfRVMoc2MpIFNDX09GRlNFVChzYywgU0NfRVMpCisjZGVmaW5lIFNDX1NTKHNjKSBTQ19PRkZTRVQoc2MsIFNDX1NTKQorI2RlZmluZSBTQ19DUyhzYykgU0NfT0ZGU0VUKHNjLCBTQ19DUykKKyNkZWZpbmUgU0NfRUZMQUdTKHNjKSBTQ19PRkZTRVQoc2MsIFNDX0VGTEFHUykKKyNkZWZpbmUgU0NfRUFYKHNjKSBTQ19PRkZTRVQoc2MsIFNDX0VBWCkKKyNkZWZpbmUgU0NfRUJYKHNjKSBTQ19PRkZTRVQoc2MsIFNDX0VCWCkKKyNkZWZpbmUgU0NfRUNYKHNjKSBTQ19PRkZTRVQoc2MsIFNDX0VDWCkKKyNkZWZpbmUgU0NfRURYKHNjKSBTQ19PRkZTRVQoc2MsIFNDX0VEWCkKKyNkZWZpbmUgU0NfRURJKHNjKSBTQ19PRkZTRVQoc2MsIFNDX0VESSkKKyNkZWZpbmUgU0NfRVNJKHNjKSBTQ19PRkZTRVQoc2MsIFNDX0VTSSkKKyNkZWZpbmUgU0NfRUJQKHNjKSBTQ19PRkZTRVQoc2MsIFNDX0VCUCkKKyNkZWZpbmUgU0NfVFJBUE5PKHNjKSBTQ19PRkZTRVQoc2MsIFNDX1RSQVBOTykKKyNkZWZpbmUgU0NfRVJSKHNjKSBTQ19PRkZTRVQoc2MsIFNDX0VSUikKKyNkZWZpbmUgU0NfQ1IyKHNjKSBTQ19PRkZTRVQoc2MsIFNDX0NSMikKKyNkZWZpbmUgU0NfRlBTVEFURShzYykgU0NfT0ZGU0VUKHNjLCBTQ19GUFNUQVRFKQorI2RlZmluZSBTQ19TSUdNQVNLKHNjKSBTQ19PRkZTRVQoc2MsIFNDX1NJR01BU0spCisjZGVmaW5lIFNDX0ZQX0NXKHNjKSBTQ19GUF9PRkZTRVQoc2MsIFNDX0ZQX0NXKQorI2RlZmluZSBTQ19GUF9TVyhzYykgU0NfRlBfT0ZGU0VUKHNjLCBTQ19GUF9TVykKKyNkZWZpbmUgU0NfRlBfVEFHKHNjKSBTQ19GUF9PRkZTRVQoc2MsIFNDX0ZQX1RBRykKKyNkZWZpbmUgU0NfRlBfSVBPRkYoc2MpIFNDX0ZQX09GRlNFVChzYywgU0NfRlBfSVBPRkYpCisjZGVmaW5lIFNDX0ZQX0NTU0VMKHNjKSBTQ19GUF9PRkZTRVQoc2MsIFNDX0ZQX0NTU0VMKQorI2RlZmluZSBTQ19GUF9EQVRBT0ZGKHNjKSBTQ19GUF9PRkZTRVQoc2MsIFNDX0ZQX0RBVEFPRkYpCisjZGVmaW5lIFNDX0ZQX0RBVEFTRUwoc2MpIFNDX0ZQX09GRlNFVChzYywgU0NfRlBfREFUQVNFTCkKKyNkZWZpbmUgU0NfRlBfU1Qoc2MpIFNDX0ZQX09GRlNFVF9QVFIoc2MsIFNDX0ZQX1NULCBzdHJ1Y3QgX2Zwc3RhdGUpCisjZGVmaW5lIFNDX0ZYU1JfRU5WKHNjKSBTQ19GUF9PRkZTRVRfUFRSKHNjLCBTQ19GWFNSX0VOViwgdm9pZCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvc2lnY29udGV4dC5oIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3NpZ2NvbnRleHQuaAppbmRleCAxZmU3MjkyLi4yM2ZkMjY0IDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvc2lnY29udGV4dC5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9zaWdjb250ZXh0LmgKQEAgLTYsNiArNiw3IEBACiAjaWZuZGVmIF9fU1lTX1NJR0NPTlRFWFRfSTM4Nl9ICiAjZGVmaW5lIF9fU1lTX1NJR0NPTlRFWFRfSTM4Nl9ICiAKKyNpbmNsdWRlICJ1bWwtY29uZmlnLmgiCiAjaW5jbHVkZSA8c3lzZGVwL3NjLmg+CiAKICNkZWZpbmUgSVBfUkVTVEFSVF9TWVNDQUxMKGlwKSAoKGlwKSAtPSAyKQpAQCAtMjYsNyArMjcsMTQgQEAKICNkZWZpbmUgU0NfU1RBUlRfU1lTQ0FMTChzYykgZG8gU0NfRUFYKHNjKSA9IC1FTk9TWVM7IHdoaWxlKDApCiAKIC8qIFRoaXMgaXMgUGFnZSBGYXVsdCAqLwotI2RlZmluZSBTRUdWX0lTX0ZJWEFCTEUoZmkpICgoZmkpLT50cmFwX25vID09IDE0KQorI2RlZmluZSBTRUdWX0lTX0ZJWEFCTEUoZmkpCSgoZmkpLT50cmFwX25vID09IDE0KQorCisvKiBTS0FTMyBoYXMgbm8gdHJhcF9ubyBvbiBpMzg2LCBidXQgZ2V0X3NrYXNfZmF1bHRpbmZvKCkgc2V0cyBpdCB0byAwLiAqLworI2lmZGVmIFVNTF9DT05GSUdfTU9ERV9TS0FTCisjZGVmaW5lIFNFR1ZfTUFZQkVfRklYQUJMRShmaSkJKChmaSktPnRyYXBfbm8gPT0gMCAmJiBwdHJhY2VfZmF1bHRpbmZvKQorI2Vsc2UKKyNkZWZpbmUgU0VHVl9NQVlCRV9GSVhBQkxFKGZpKQkwCisjZW5kaWYKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgKnNjX3NpZ21hc2sodm9pZCAqc2NfcHRyKTsKIGV4dGVybiBpbnQgc2NfZ2V0X2ZwcmVncyh1bnNpZ25lZCBsb25nIGJ1Ziwgdm9pZCAqc2NfcHRyKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni90aHJlYWQuaCBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni90aHJlYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDNmZWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3RocmVhZC5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgX19VTV9USFJFQURfSAorI2RlZmluZSBfX1VNX1RIUkVBRF9ICisKKyNpbmNsdWRlIDxrZXJuX2NvbnN0YW50cy5oPgorCisjZGVmaW5lIFRBU0tfREVCVUdSRUdTKHRhc2spICgodW5zaWduZWQgbG9uZyAqKSAmKCgoY2hhciAqKSAodGFzaykpW0hPU1RfVEFTS19ERUJVR1JFR1NdKSkKKyNpZmRlZiBVTUxfQ09ORklHX01PREVfVFQKKyNkZWZpbmUgVEFTS19FWFRFUk5fUElEKHRhc2spICooKGludCAqKSAmKCgoY2hhciAqKSAodGFzaykpW0hPU1RfVEFTS19FWFRFUk5fUElEXSkpCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9wdHJhY2UuaCBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3B0cmFjZS5oCmluZGV4IDMzMWFhMmQuLjhkMzUzZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3B0cmFjZS5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3B0cmFjZS5oCkBAIC0xODMsMTAgKzE4Myw2IEBACiAgICAgICAgICAgICAgICAgY2FzZSBSQlA6IHZhbCA9IFVQVF9SQlAocmVncyk7IGJyZWFrOyBcCiAgICAgICAgICAgICAgICAgY2FzZSBPUklHX1JBWDogdmFsID0gVVBUX09SSUdfUkFYKHJlZ3MpOyBicmVhazsgXAogICAgICAgICAgICAgICAgIGNhc2UgQ1M6IHZhbCA9IFVQVF9DUyhyZWdzKTsgYnJlYWs7IFwKLSAgICAgICAgICAgICAgICBjYXNlIERTOiB2YWwgPSBVUFRfRFMocmVncyk7IGJyZWFrOyBcCi0gICAgICAgICAgICAgICAgY2FzZSBFUzogdmFsID0gVVBUX0VTKHJlZ3MpOyBicmVhazsgXAotICAgICAgICAgICAgICAgIGNhc2UgRlM6IHZhbCA9IFVQVF9GUyhyZWdzKTsgYnJlYWs7IFwKLSAgICAgICAgICAgICAgICBjYXNlIEdTOiB2YWwgPSBVUFRfR1MocmVncyk7IGJyZWFrOyBcCiAgICAgICAgICAgICAgICAgY2FzZSBFRkxBR1M6IHZhbCA9IFVQVF9FRkxBR1MocmVncyk7IGJyZWFrOyBcCiAgICAgICAgICAgICAgICAgZGVmYXVsdCA6ICBcCiAgICAgICAgICAgICAgICAgICAgICAgICBwYW5pYygiQmFkIHJlZ2lzdGVyIGluIFVQVF9SRUcgOiAlZFxuIiwgcmVnKTsgIFwKQEAgLTIxOCwxMCArMjE0LDYgQEAKICAgICAgICAgICAgICAgICBjYXNlIFJCUDogVVBUX1JCUChyZWdzKSA9IF9fdXB0X3ZhbDsgYnJlYWs7IFwKICAgICAgICAgICAgICAgICBjYXNlIE9SSUdfUkFYOiBVUFRfT1JJR19SQVgocmVncykgPSBfX3VwdF92YWw7IGJyZWFrOyBcCiAgICAgICAgICAgICAgICAgY2FzZSBDUzogVVBUX0NTKHJlZ3MpID0gX191cHRfdmFsOyBicmVhazsgXAotICAgICAgICAgICAgICAgIGNhc2UgRFM6IFVQVF9EUyhyZWdzKSA9IF9fdXB0X3ZhbDsgYnJlYWs7IFwKLSAgICAgICAgICAgICAgICBjYXNlIEVTOiBVUFRfRVMocmVncykgPSBfX3VwdF92YWw7IGJyZWFrOyBcCi0gICAgICAgICAgICAgICAgY2FzZSBGUzogVVBUX0ZTKHJlZ3MpID0gX191cHRfdmFsOyBicmVhazsgXAotICAgICAgICAgICAgICAgIGNhc2UgR1M6IFVQVF9HUyhyZWdzKSA9IF9fdXB0X3ZhbDsgYnJlYWs7IFwKICAgICAgICAgICAgICAgICBjYXNlIEVGTEFHUzogVVBUX0VGTEFHUyhyZWdzKSA9IF9fdXB0X3ZhbDsgYnJlYWs7IFwKICAgICAgICAgICAgICAgICBkZWZhdWx0IDogIFwKICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmljKCJCYWQgcmVnaXN0ZXIgaW4gVVBUX1NFVCA6ICVkXG4iLCByZWcpOyAgXApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvc2MuaCBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3NjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE2MGQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3NjLmgKQEAgLTAsMCArMSw0NSBAQAorI2lmbmRlZiBfX1NZU0RFUF9YODZfNjRfU0NfSAorI2RlZmluZSBfX1NZU0RFUF9YODZfNjRfU0NfSAorCisvKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA0IFBhdGhTY2FsZSwgSW5jCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgR1BMCisgKi8KKworI2luY2x1ZGUgPHVzZXJfY29uc3RhbnRzLmg+CisKKyNkZWZpbmUgU0NfT0ZGU0VUKHNjLCBmaWVsZCkgXAorCSAqKCh1bnNpZ25lZCBsb25nICopICYoKChjaGFyICopIChzYykpW0hPU1RfIyNmaWVsZF0pKQorCisjZGVmaW5lIFNDX1JCWChzYykgU0NfT0ZGU0VUKHNjLCBTQ19SQlgpCisjZGVmaW5lIFNDX1JDWChzYykgU0NfT0ZGU0VUKHNjLCBTQ19SQ1gpCisjZGVmaW5lIFNDX1JEWChzYykgU0NfT0ZGU0VUKHNjLCBTQ19SRFgpCisjZGVmaW5lIFNDX1JTSShzYykgU0NfT0ZGU0VUKHNjLCBTQ19SU0kpCisjZGVmaW5lIFNDX1JESShzYykgU0NfT0ZGU0VUKHNjLCBTQ19SREkpCisjZGVmaW5lIFNDX1JCUChzYykgU0NfT0ZGU0VUKHNjLCBTQ19SQlApCisjZGVmaW5lIFNDX1JBWChzYykgU0NfT0ZGU0VUKHNjLCBTQ19SQVgpCisjZGVmaW5lIFNDX1I4KHNjKSBTQ19PRkZTRVQoc2MsIFNDX1I4KQorI2RlZmluZSBTQ19SOShzYykgU0NfT0ZGU0VUKHNjLCBTQ19SOSkKKyNkZWZpbmUgU0NfUjEwKHNjKSBTQ19PRkZTRVQoc2MsIFNDX1IxMCkKKyNkZWZpbmUgU0NfUjExKHNjKSBTQ19PRkZTRVQoc2MsIFNDX1IxMSkKKyNkZWZpbmUgU0NfUjEyKHNjKSBTQ19PRkZTRVQoc2MsIFNDX1IxMikKKyNkZWZpbmUgU0NfUjEzKHNjKSBTQ19PRkZTRVQoc2MsIFNDX1IxMykKKyNkZWZpbmUgU0NfUjE0KHNjKSBTQ19PRkZTRVQoc2MsIFNDX1IxNCkKKyNkZWZpbmUgU0NfUjE1KHNjKSBTQ19PRkZTRVQoc2MsIFNDX1IxNSkKKyNkZWZpbmUgU0NfSVAoc2MpIFNDX09GRlNFVChzYywgU0NfSVApCisjZGVmaW5lIFNDX1NQKHNjKSBTQ19PRkZTRVQoc2MsIFNDX1NQKQorI2RlZmluZSBTQ19DUjIoc2MpIFNDX09GRlNFVChzYywgU0NfQ1IyKQorI2RlZmluZSBTQ19FUlIoc2MpIFNDX09GRlNFVChzYywgU0NfRVJSKQorI2RlZmluZSBTQ19UUkFQTk8oc2MpIFNDX09GRlNFVChzYywgU0NfVFJBUE5PKQorI2RlZmluZSBTQ19DUyhzYykgU0NfT0ZGU0VUKHNjLCBTQ19DUykKKyNkZWZpbmUgU0NfRlMoc2MpIFNDX09GRlNFVChzYywgU0NfRlMpCisjZGVmaW5lIFNDX0dTKHNjKSBTQ19PRkZTRVQoc2MsIFNDX0dTKQorI2RlZmluZSBTQ19FRkxBR1Moc2MpIFNDX09GRlNFVChzYywgU0NfRUZMQUdTKQorI2RlZmluZSBTQ19TSUdNQVNLKHNjKSBTQ19PRkZTRVQoc2MsIFNDX1NJR01BU0spCisjaWYgMAorI2RlZmluZSBTQ19PUklHX1JBWChzYykgU0NfT0ZGU0VUKHNjLCBTQ19PUklHX1JBWCkKKyNkZWZpbmUgU0NfRFMoc2MpIFNDX09GRlNFVChzYywgU0NfRFMpCisjZGVmaW5lIFNDX0VTKHNjKSBTQ19PRkZTRVQoc2MsIFNDX0VTKQorI2RlZmluZSBTQ19TUyhzYykgU0NfT0ZGU0VUKHNjLCBTQ19TUykKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3NpZ2NvbnRleHQuaCBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3NpZ2NvbnRleHQuaAppbmRleCAyYTc4MjYwLi40MTA3MzIzIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9zaWdjb250ZXh0LmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvc2lnY29udGV4dC5oCkBAIC0zMSw3ICszMSwxMCBAQAogI2RlZmluZSBTQ19TVEFSVF9TWVNDQUxMKHNjKSBkbyBTQ19SQVgoc2MpID0gLUVOT1NZUzsgd2hpbGUoMCkKIAogLyogVGhpcyBpcyBQYWdlIEZhdWx0ICovCi0jZGVmaW5lIFNFR1ZfSVNfRklYQUJMRShmaSkgKChmaSktPnRyYXBfbm8gPT0gMTQpCisjZGVmaW5lIFNFR1ZfSVNfRklYQUJMRShmaSkJKChmaSktPnRyYXBfbm8gPT0gMTQpCisKKy8qIE5vIGJyb2tlbiBTS0FTIEFQSSwgd2hpY2ggZG9lc24ndCBwYXNzIHRyYXBfbm8sIGhlcmUuICovCisjZGVmaW5lIFNFR1ZfTUFZQkVfRklYQUJMRShmaSkJMAogCiBleHRlcm4gdW5zaWduZWQgbG9uZyAqc2Nfc2lnbWFzayh2b2lkICpzY19wdHIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC90aHJlYWQuaCBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3RocmVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZWYzZTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC90aHJlYWQuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9fVU1fVEhSRUFEX0gKKyNkZWZpbmUgX19VTV9USFJFQURfSAorCisjaW5jbHVkZSA8a2Vybl9jb25zdGFudHMuaD4KKworI2lmZGVmIFVNTF9DT05GSUdfTU9ERV9UVAorI2RlZmluZSBUQVNLX0VYVEVSTl9QSUQodGFzaykgKigoaW50ICopICYoKChjaGFyICopICh0YXNrKSlbSE9TVF9UQVNLX0VYVEVSTl9QSURdKSkKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS90YXNrLmggYi9hcmNoL3VtL2luY2x1ZGUvdGFzay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNzViYTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL2luY2x1ZGUvdGFzay5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBfX1RBU0tfSAorI2RlZmluZSBfX1RBU0tfSAorCisjaW5jbHVkZSA8a2Vybl9jb25zdGFudHMuaD4KKworI2RlZmluZSBUQVNLX1JFR1ModGFzaykgKCh1bmlvbiB1bWxfcHRfcmVncyAqKSAmKCgoY2hhciAqKSAodGFzaykpW0hPU1RfVEFTS19SRUdTXSkpCisjZGVmaW5lIFRBU0tfUElEKHRhc2spICooKGludCAqKSAmKCgoY2hhciAqKSAodGFzaykpW0hPU1RfVEFTS19QSURdKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvdXNlci5oIGIvYXJjaC91bS9pbmNsdWRlL3VzZXIuaAppbmRleCA1N2VlOWUyLi4wZjg2NWVmIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvdXNlci5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS91c2VyLmgKQEAgLTE0LDcgKzE0LDkgQEAKIGV4dGVybiB2b2lkIGtmcmVlKHZvaWQgKnB0cik7CiBleHRlcm4gaW50IGluX2F0b24oY2hhciAqc3RyKTsKIGV4dGVybiBpbnQgb3Blbl9nZGJfY2hhbih2b2lkKTsKLWV4dGVybiBpbnQgc3RybGNweShjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKy8qIFRoZXNlIHVzZSBzaXplX3QsIGhvd2V2ZXIgdW5zaWduZWQgbG9uZyBpcyBjb3JyZWN0IG9uIGJvdGggaTM4NiBhbmQgeDg2XzY0LiAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3RybGNweShjaGFyICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdHJsY2F0KGNoYXIgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBsb25nKTsKIGV4dGVybiB2b2lkICp1bV92bWFsbG9jKGludCBzaXplKTsKIGV4dGVybiB2b2lkIHZmcmVlKHZvaWQgKnB0cik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL01ha2VmaWxlIGIvYXJjaC91bS9rZXJuZWwvTWFrZWZpbGUKaW5kZXggNjE0YjhlYi4uMWEwMDAxYiAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC91bS9rZXJuZWwvTWFrZWZpbGUKQEAgLTEsNCArMSw0IEBACi0jIAorIwogIyBDb3B5cmlnaHQgKEMpIDIwMDIgSmVmZiBEaWtlIChqZGlrZUBrYXJheWEuY29tKQogIyBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCiAjCkBAIC03LDExICs3LDExIEBACiBjbGVhbi1maWxlcyA6PQogCiBvYmoteSA9IGNvbmZpZy5vIGV4ZWNfa2Vybi5vIGV4aXRjb2RlLm8gXAotCWhlbHBlci5vIGluaXRfdGFzay5vIGlycS5vIGlycV91c2VyLm8ga3N5bXMubyBtYWluLm8gbWVtLm8gbWVtX3VzZXIubyBcCi0JcGh5c21lbS5vIHByb2Nlc3Nfa2Vybi5vIHB0cmFjZS5vIHJlYm9vdC5vIHJlc291cmNlLm8gc2lnaW9fdXNlci5vIFwKLQlzaWdpb19rZXJuLm8gc2lnbmFsX2tlcm4ubyBzaWduYWxfdXNlci5vIHNtcC5vIHN5c2NhbGxfa2Vybi5vIHN5c3JxLm8gXAotCXRlbXBmaWxlLm8gdGltZS5vIHRpbWVfa2Vybi5vIHRsYi5vIHRyYXBfa2Vybi5vIHRyYXBfdXNlci5vIFwKLQl1YWNjZXNzX3VzZXIubyB1bV9hcmNoLm8gdW1pZC5vIHVzZXJfdXRpbC5vCisJaGVscGVyLm8gaW5pdF90YXNrLm8gaXJxLm8gaXJxX3VzZXIubyBrc3ltcy5vIG1haW4ubyBtZW0ubyBwaHlzbWVtLm8gXAorCXByb2Nlc3Nfa2Vybi5vIHB0cmFjZS5vIHJlYm9vdC5vIHJlc291cmNlLm8gc2lnaW9fdXNlci5vIHNpZ2lvX2tlcm4ubyBcCisJc2lnbmFsX2tlcm4ubyBzaWduYWxfdXNlci5vIHNtcC5vIHN5c2NhbGxfa2Vybi5vIHN5c3JxLm8gdGltZS5vIFwKKwl0aW1lX2tlcm4ubyB0bGIubyB0cmFwX2tlcm4ubyB0cmFwX3VzZXIubyB1YWNjZXNzX3VzZXIubyB1bV9hcmNoLm8gXAorCXVtaWQubyB1c2VyX3V0aWwubwogCiBvYmotJChDT05GSUdfQkxLX0RFVl9JTklUUkQpICs9IGluaXRyZC5vCiBvYmotJChDT05GSUdfR1BST0YpCSs9IGdwcm9mX3N5bXMubwpAQCAtMjQsOCArMjQsOCBAQAogCiB1c2VyLW9ianMtJChDT05GSUdfVFRZX0xPRykgKz0gdHR5X2xvZy5vCiAKLVVTRVJfT0JKUyA6PSAkKHVzZXItb2Jqcy15KSBjb25maWcubyBoZWxwZXIubyBtYWluLm8gdGVtcGZpbGUubyB0aW1lLm8gXAotCXR0eV9sb2cubyB1bWlkLm8gdXNlcl91dGlsLm8KK1VTRVJfT0JKUyA6PSAkKHVzZXItb2Jqcy15KSBjb25maWcubyBoZWxwZXIubyBtYWluLm8gdGltZS5vIHR0eV9sb2cubyB1bWlkLm8gXAorCXVzZXJfdXRpbC5vCiAKIGluY2x1ZGUgYXJjaC91bS9zY3JpcHRzL01ha2VmaWxlLnJ1bGVzCiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL2hlbHBlci5jIGIvYXJjaC91bS9rZXJuZWwvaGVscGVyLmMKaW5kZXggZjgzZTFlOC4uMzNmYjBiZCAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvaGVscGVyLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvaGVscGVyLmMKQEAgLTg1LDggKzg1LDggQEAKIAlkYXRhLmZkID0gZmRzWzFdOwogCXBpZCA9IGNsb25lKGhlbHBlcl9jaGlsZCwgKHZvaWQgKikgc3AsIENMT05FX1ZNIHwgU0lHQ0hMRCwgJmRhdGEpOwogCWlmKHBpZCA8IDApewotCQlwcmludGsoInJ1bl9oZWxwZXIgOiBjbG9uZSBmYWlsZWQsIGVycm5vID0gJWRcbiIsIGVycm5vKTsKIAkJcmV0ID0gLWVycm5vOworCQlwcmludGsoInJ1bl9oZWxwZXIgOiBjbG9uZSBmYWlsZWQsIGVycm5vID0gJWRcbiIsIGVycm5vKTsKIAkJZ290byBvdXRfY2xvc2U7CiAJfQogCkBAIC0xMjIsNyArMTIyLDcgQEAKIAkJICAgICAgdW5zaWduZWQgbG9uZyAqc3RhY2tfb3V0LCBpbnQgc3RhY2tfb3JkZXIpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFjaywgc3A7Ci0JaW50IHBpZCwgc3RhdHVzOworCWludCBwaWQsIHN0YXR1cywgZXJyOwogCiAJc3RhY2sgPSBhbGxvY19zdGFjayhzdGFja19vcmRlciwgdW1faW5faW50ZXJydXB0KCkpOwogCWlmKHN0YWNrID09IDApIHJldHVybigtRU5PTUVNKTsKQEAgLTEzMCwxNiArMTMwLDE4IEBACiAJc3AgPSBzdGFjayArIChwYWdlX3NpemUoKSA8PCBzdGFja19vcmRlcikgLSBzaXplb2Yodm9pZCAqKTsKIAlwaWQgPSBjbG9uZShwcm9jLCAodm9pZCAqKSBzcCwgZmxhZ3MgfCBTSUdDSExELCBhcmcpOwogCWlmKHBpZCA8IDApeworCQllcnIgPSAtZXJybm87CiAJCXByaW50aygicnVuX2hlbHBlcl90aHJlYWQgOiBjbG9uZSBmYWlsZWQsIGVycm5vID0gJWRcbiIsIAogCQkgICAgICAgZXJybm8pOwotCQlyZXR1cm4oLWVycm5vKTsKKwkJcmV0dXJuIGVycjsKIAl9CiAJaWYoc3RhY2tfb3V0ID09IE5VTEwpewogCQlDQVRDSF9FSU5UUihwaWQgPSB3YWl0cGlkKHBpZCwgJnN0YXR1cywgMCkpOwogCQlpZihwaWQgPCAwKXsKKwkJCWVyciA9IC1lcnJubzsKIAkJCXByaW50aygicnVuX2hlbHBlcl90aHJlYWQgLSB3YWl0IGZhaWxlZCwgZXJybm8gPSAlZFxuIiwKIAkJCSAgICAgICBlcnJubyk7Ci0JCQlwaWQgPSAtZXJybm87CisJCQlwaWQgPSBlcnI7CiAJCX0KIAkJaWYoIVdJRkVYSVRFRChzdGF0dXMpIHx8IChXRVhJVFNUQVRVUyhzdGF0dXMpICE9IDApKQogCQkJcHJpbnRrKCJydW5faGVscGVyX3RocmVhZCAtIHRocmVhZCByZXR1cm5lZCBzdGF0dXMgIgpAQCAtMTU2LDggKzE1OCw4IEBACiAKIAlDQVRDSF9FSU5UUihyZXQgPSB3YWl0cGlkKHBpZCwgTlVMTCwgV05PSEFORykpOwogCWlmKHJldCA8IDApeworCQlyZXQgPSAtZXJybm87CiAJCXByaW50aygiaGVscGVyX3dhaXQgOiB3YWl0cGlkIGZhaWxlZCwgZXJybm8gPSAlZFxuIiwgZXJybm8pOwotCQlyZXR1cm4oLWVycm5vKTsKIAl9CiAJcmV0dXJuKHJldCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9pbml0X3Rhc2suYyBiL2FyY2gvdW0va2VybmVsL2luaXRfdGFzay5jCmluZGV4IGNkN2M4NWIuLjQ5ZWQ1ZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL2luaXRfdGFzay5jCisrKyBiL2FyY2gvdW0va2VybmVsL2luaXRfdGFzay5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSAiYXNtL3BndGFibGUuaCIKICNpbmNsdWRlICJ1c2VyX3V0aWwuaCIKICNpbmNsdWRlICJtZW1fdXNlci5oIgorI2luY2x1ZGUgIm9zLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgZnNfc3RydWN0IGluaXRfZnMgPSBJTklUX0ZTOwogc3RydWN0IG1tX3N0cnVjdCBpbml0X21tID0gSU5JVF9NTShpbml0X21tKTsKQEAgLTQ1LDggKzQ2LDggQEAKIAogdm9pZCB1bnByb3RlY3Rfc3RhY2sodW5zaWduZWQgbG9uZyBzdGFjaykKIHsKLQlwcm90ZWN0X21lbW9yeShzdGFjaywgKDEgPDwgQ09ORklHX0tFUk5FTF9TVEFDS19PUkRFUikgKiBQQUdFX1NJWkUsIAotCQkgICAgICAgMSwgMSwgMCwgMSk7CisJb3NfcHJvdGVjdF9tZW1vcnkoKHZvaWQgKikgc3RhY2ssICgxIDw8IENPTkZJR19LRVJORUxfU1RBQ0tfT1JERVIpICogUEFHRV9TSVpFLAorCQkgICAgICAgMSwgMSwgMCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9pcnEuYyBiL2FyY2gvdW0va2VybmVsL2lycS5jCmluZGV4IGRjZDgxNDkuLmJiZjk0YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL2lycS5jCisrKyBiL2FyY2gvdW0va2VybmVsL2lycS5jCkBAIC05LDcgKzksNiBAQAogI2luY2x1ZGUgImxpbnV4L2tlcm5lbC5oIgogI2luY2x1ZGUgImxpbnV4L21vZHVsZS5oIgogI2luY2x1ZGUgImxpbnV4L3NtcC5oIgotI2luY2x1ZGUgImxpbnV4L2lycS5oIgogI2luY2x1ZGUgImxpbnV4L2tlcm5lbF9zdGF0LmgiCiAjaW5jbHVkZSAibGludXgvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAibGludXgvcmFuZG9tLmgiCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9tZW0uYyBiL2FyY2gvdW0va2VybmVsL21lbS5jCmluZGV4IDY0ZmEwNjIuLmVhMDA4YjAgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL21lbS5jCisrKyBiL2FyY2gvdW0va2VybmVsL21lbS5jCkBAIC0xLDQgKzEsNCBAQAotLyogCisvKgogICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwMyBKZWZmIERpa2UgKGpkaWtlQGFkZHRvaXQuY29tKQogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAogICovCkBAIC0xOSw2ICsxOSwxMCBAQAogI2luY2x1ZGUgIm1lbV91c2VyLmgiCiAjaW5jbHVkZSAidW1sX3VhY2Nlc3MuaCIKICNpbmNsdWRlICJvcy5oIgorI2luY2x1ZGUgImxpbnV4L3R5cGVzLmgiCisjaW5jbHVkZSAibGludXgvc3RyaW5nLmgiCisjaW5jbHVkZSAiaW5pdC5oIgorI2luY2x1ZGUgImtlcm5fY29uc3RhbnRzLmgiCiAKIGV4dGVybiBjaGFyIF9fYmluYXJ5X3N0YXJ0OwogCkBAIC0zNjgsNiArMzcyLDE2IEBACiAJcmV0dXJuIHB0ZTsKIH0KIAorc3RydWN0IGlvbWVtX3JlZ2lvbiAqaW9tZW1fcmVnaW9ucyA9IE5VTEw7CitpbnQgaW9tZW1fc2l6ZSA9IDA7CisKK2V4dGVybiBpbnQgcGFyc2VfaW9tZW0oY2hhciAqc3RyLCBpbnQgKmFkZCkgX19pbml0OworCitfX3VtbF9zZXR1cCgiaW9tZW09IiwgcGFyc2VfaW9tZW0sCisiaW9tZW09PG5hbWU+LDxmaWxlPlxuIgorIiAgICBDb25maWd1cmUgPGZpbGU+IGFzIGFuIElPIG1lbW9yeSByZWdpb24gbmFtZWQgPG5hbWU+LlxuXG4iCispOworCiAvKgogICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCiAgKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL21lbV91c2VyLmMgYi9hcmNoL3VtL2tlcm5lbC9tZW1fdXNlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTY2M2ZkLi4wMDAwMDAwCi0tLSBhL2FyY2gvdW0va2VybmVsL21lbV91c2VyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzMgKzAsMCBAQAotLyoKLSAqIGFyY2gvdW0va2VybmVsL21lbV91c2VyLmMKLSAqCi0gKiBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KLSAqIHVzZXIgc2lkZSBtZW1vcnkgcm91dGluZXMgZm9yIHN1cHBvcnRpbmcgSU8gbWVtb3J5IGluc2lkZSB1c2VyIG1vZGUgbGludXgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgUmlkZ2VSdW4sIEluYy4KLSAqIEF1dGhvcjogUmlkZ2VSdW4sIEluYy4KLSAqICAgICAgICAgR3JlZyBMb25ub24gZ2xvbm5vbkByaWRnZXJ1bi5jb20gb3IgaW5mb0ByaWRnZXJ1bi5jb20KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVEICAgYGBBUyAgSVMnJyBBTkQgICBBTlkgIEVYUFJFU1MgT1IgSU1QTElFRAotICogIFdBUlJBTlRJRVMsICAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgotICogIE5PICBFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRSAgICBMSUFCTEUgRk9SIEFOWSAgIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiAgTk9UIExJTUlURUQgICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMgIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiAgVVNFLCBEQVRBLCAgT1IgUFJPRklUUzsgT1IgIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0jaW5jbHVkZSAia2Vybl91dGlsLmgiCi0jaW5jbHVkZSAidXNlci5oIgotI2luY2x1ZGUgInVzZXJfdXRpbC5oIgotI2luY2x1ZGUgIm1lbV91c2VyLmgiCi0jaW5jbHVkZSAiaW5pdC5oIgotI2luY2x1ZGUgIm9zLmgiCi0jaW5jbHVkZSAidGVtcGZpbGUuaCIKLSNpbmNsdWRlICJrZXJuX2NvbnN0YW50cy5oIgotCi0jZGVmaW5lIFRFTVBOQU1FX1RFTVBMQVRFICJ2bV9maWxlLVhYWFhYWCIKLQotc3RhdGljIGludCBjcmVhdGVfdG1wX2ZpbGUodW5zaWduZWQgbG9uZyBsZW4pCi17Ci0JaW50IGZkLCBlcnI7Ci0JY2hhciB6ZXJvOwotCi0JZmQgPSBtYWtlX3RlbXBmaWxlKFRFTVBOQU1FX1RFTVBMQVRFLCBOVUxMLCAxKTsKLQlpZihmZCA8IDApIHsKLQkJb3NfcHJpbnRfZXJyb3IoZmQsICJtYWtlX3RlbXBmaWxlIik7Ci0JCWV4aXQoMSk7Ci0JfQotCi0JZXJyID0gb3NfbW9kZV9mZChmZCwgMDc3Nyk7Ci0JaWYoZXJyIDwgMCl7Ci0JCW9zX3ByaW50X2Vycm9yKGVyciwgIm9zX21vZGVfZmQiKTsKLQkJZXhpdCgxKTsKLQl9Ci0JZXJyID0gb3Nfc2Vla19maWxlKGZkLCBsZW4pOwotCWlmKGVyciA8IDApewotCQlvc19wcmludF9lcnJvcihlcnIsICJvc19zZWVrX2ZpbGUiKTsKLQkJZXhpdCgxKTsKLQl9Ci0JemVybyA9IDA7Ci0JZXJyID0gb3Nfd3JpdGVfZmlsZShmZCwgJnplcm8sIDEpOwotCWlmKGVyciAhPSAxKXsKLQkJb3NfcHJpbnRfZXJyb3IoZXJyLCAib3Nfd3JpdGVfZmlsZSIpOwotCQlleGl0KDEpOwotCX0KLQotCXJldHVybihmZCk7Ci19Ci0KLXZvaWQgY2hlY2tfdG1wZXhlYyh2b2lkKQotewotCXZvaWQgKmFkZHI7Ci0JaW50IGVyciwgZmQgPSBjcmVhdGVfdG1wX2ZpbGUoVU1fS0VSTl9QQUdFX1NJWkUpOwotCi0JYWRkciA9IG1tYXAoTlVMTCwgVU1fS0VSTl9QQUdFX1NJWkUsCi0JCSAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFIHwgUFJPVF9FWEVDLCBNQVBfUFJJVkFURSwgZmQsIDApOwotCXByaW50ZigiQ2hlY2tpbmcgUFJPVF9FWEVDIG1tYXAgaW4gL3RtcC4uLiIpOwotCWZmbHVzaChzdGRvdXQpOwotCWlmKGFkZHIgPT0gTUFQX0ZBSUxFRCl7Ci0JCWVyciA9IGVycm5vOwotCQlwZXJyb3IoImZhaWxlZCIpOwotCQlpZihlcnIgPT0gRVBFUk0pCi0JCQlwcmludGYoIi90bXAgbXVzdCBiZSBub3QgbW91bnRlZCBub2V4ZWNcbiIpOwotCQlleGl0KDEpOwotCX0KLQlwcmludGYoIk9LXG4iKTsKLQltdW5tYXAoYWRkciwgVU1fS0VSTl9QQUdFX1NJWkUpOwotCi0Jb3NfY2xvc2VfZmlsZShmZCk7Ci19Ci0KLXN0YXRpYyBpbnQgaGF2ZV9kZXZhbm9uID0gMDsKLQotdm9pZCBjaGVja19kZXZhbm9uKHZvaWQpCi17Ci0JaW50IGZkOwotCi0JcHJpbnRrKCJDaGVja2luZyBmb3IgL2Rldi9hbm9uIG9uIHRoZSBob3N0Li4uIik7Ci0JZmQgPSBvcGVuKCIvZGV2L2Fub24iLCBPX1JEV1IpOwotCWlmKGZkIDwgMCl7Ci0JCXByaW50aygiTm90IGF2YWlsYWJsZSAob3BlbiBmYWlsZWQgd2l0aCBlcnJubyAlZClcbiIsIGVycm5vKTsKLQkJcmV0dXJuOwotCX0KLQotCXByaW50aygiT0tcbiIpOwotCWhhdmVfZGV2YW5vbiA9IDE7Ci19Ci0KLXN0YXRpYyBpbnQgY3JlYXRlX2Fub25fZmlsZSh1bnNpZ25lZCBsb25nIGxlbikKLXsKLQl2b2lkICphZGRyOwotCWludCBmZDsKLQotCWZkID0gb3BlbigiL2Rldi9hbm9uIiwgT19SRFdSKTsKLQlpZihmZCA8IDApIHsKLQkJb3NfcHJpbnRfZXJyb3IoZmQsICJvcGVuaW5nIC9kZXYvYW5vbiIpOwotCQlleGl0KDEpOwotCX0KLQotCWFkZHIgPSBtbWFwKE5VTEwsIGxlbiwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKLQlpZihhZGRyID09IE1BUF9GQUlMRUQpewotCQlwZXJyb3IoIm1hcHBpbmcgcGh5c21lbSBmaWxlIik7Ci0JCWV4aXQoMSk7Ci0JfQotCW11bm1hcChhZGRyLCBsZW4pOwotCi0JcmV0dXJuKGZkKTsKLX0KLQotaW50IGNyZWF0ZV9tZW1fZmlsZSh1bnNpZ25lZCBsb25nIGxlbikKLXsKLQlpbnQgZXJyLCBmZDsKLQotCWlmKGhhdmVfZGV2YW5vbikKLQkJZmQgPSBjcmVhdGVfYW5vbl9maWxlKGxlbik7Ci0JZWxzZSBmZCA9IGNyZWF0ZV90bXBfZmlsZShsZW4pOwotCi0JZXJyID0gb3Nfc2V0X2V4ZWNfY2xvc2UoZmQsIDEpOwotCWlmKGVyciA8IDApCi0JCW9zX3ByaW50X2Vycm9yKGVyciwgImV4ZWNfY2xvc2UiKTsKLQlyZXR1cm4oZmQpOwotfQotCi1zdHJ1Y3QgaW9tZW1fcmVnaW9uICppb21lbV9yZWdpb25zID0gTlVMTDsKLWludCBpb21lbV9zaXplID0gMDsKLQotc3RhdGljIGludCBfX2luaXQgcGFyc2VfaW9tZW0oY2hhciAqc3RyLCBpbnQgKmFkZCkKLXsKLQlzdHJ1Y3QgaW9tZW1fcmVnaW9uICpuZXc7Ci0Jc3RydWN0IHVtbF9zdGF0IGJ1ZjsKLQljaGFyICpmaWxlLCAqZHJpdmVyOwotCWludCBmZCwgZXJyLCBzaXplOwotCi0JZHJpdmVyID0gc3RyOwotCWZpbGUgPSBzdHJjaHIoc3RyLCcsJyk7Ci0JaWYoZmlsZSA9PSBOVUxMKXsKLQkJcHJpbnRmKCJwYXJzZV9pb21lbSA6IGZhaWxlZCB0byBwYXJzZSBpb21lbVxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQkqZmlsZSA9ICdcMCc7Ci0JZmlsZSsrOwotCWZkID0gb3Nfb3Blbl9maWxlKGZpbGUsIG9mX3Jkd3IoT1BFTkZMQUdTKCkpLCAwKTsKLQlpZihmZCA8IDApewotCQlvc19wcmludF9lcnJvcihmZCwgInBhcnNlX2lvbWVtIC0gQ291bGRuJ3Qgb3BlbiBpbyBmaWxlIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWVyciA9IG9zX3N0YXRfZmQoZmQsICZidWYpOwotCWlmKGVyciA8IDApewotCQlvc19wcmludF9lcnJvcihlcnIsICJwYXJzZV9pb21lbSAtIGNhbm5vdCBzdGF0X2ZkIGZpbGUiKTsKLQkJZ290byBvdXRfY2xvc2U7Ci0JfQotCi0JbmV3ID0gbWFsbG9jKHNpemVvZigqbmV3KSk7Ci0JaWYobmV3ID09IE5VTEwpewotCQlwZXJyb3IoIkNvdWxkbid0IGFsbG9jYXRlIGlvbWVtX3JlZ2lvbiBzdHJ1Y3QiKTsKLQkJZ290byBvdXRfY2xvc2U7Ci0JfQotCi0Jc2l6ZSA9IChidWYudXN0X3NpemUgKyBVTV9LRVJOX1BBR0VfU0laRSkgJiB+KFVNX0tFUk5fUEFHRV9TSVpFIC0gMSk7Ci0KLQkqbmV3ID0gKChzdHJ1Y3QgaW9tZW1fcmVnaW9uKSB7IC5uZXh0CQk9IGlvbWVtX3JlZ2lvbnMsCi0JCQkJCS5kcml2ZXIJCT0gZHJpdmVyLAotCQkJCQkuZmQJCT0gZmQsCi0JCQkJCS5zaXplCQk9IHNpemUsCi0JCQkJCS5waHlzCQk9IDAsCi0JCQkJCS52aXJ0CQk9IDAgfSk7Ci0JaW9tZW1fcmVnaW9ucyA9IG5ldzsKLQlpb21lbV9zaXplICs9IG5ldy0+c2l6ZSArIFVNX0tFUk5fUEFHRV9TSVpFOwotCi0JcmV0dXJuKDApOwotIG91dF9jbG9zZToKLQlvc19jbG9zZV9maWxlKGZkKTsKLSBvdXQ6Ci0JcmV0dXJuKDEpOwotfQotCi1fX3VtbF9zZXR1cCgiaW9tZW09IiwgcGFyc2VfaW9tZW0sCi0iaW9tZW09PG5hbWU+LDxmaWxlPlxuIgotIiAgICBDb25maWd1cmUgPGZpbGU+IGFzIGFuIElPIG1lbW9yeSByZWdpb24gbmFtZWQgPG5hbWU+LlxuXG4iCi0pOwotCi1pbnQgcHJvdGVjdF9tZW1vcnkodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgaW50IHIsIGludCB3LCBpbnQgeCwKLQkJICAgaW50IG11c3Rfc3VjY2VlZCkKLXsKLQlpbnQgZXJyOwotCi0JZXJyID0gb3NfcHJvdGVjdF9tZW1vcnkoKHZvaWQgKikgYWRkciwgbGVuLCByLCB3LCB4KTsKLQlpZihlcnIgPCAwKXsKLSAgICAgICAgICAgICAgICBpZihtdXN0X3N1Y2NlZWQpCi0JCQlwYW5pYygicHJvdGVjdCBmYWlsZWQsIGVyciA9ICVkIiwgLWVycik7Ci0JCWVsc2UgcmV0dXJuKGVycik7Ci0JfQotCXJldHVybigwKTsKLX0KLQotI2lmIDAKLS8qIERlYnVnZ2luZyBmYWNpbGl0eSBmb3IgZHVtcGluZyBzdHVmZiBvdXQgdG8gdGhlIGhvc3QsIGF2b2lkaW5nIHRoZSB0aW1pbmcKLSAqIHByb2JsZW1zIHRoYXQgY29tZSB3aXRoIHByaW50ZiBhbmQgYnJlYWtwb2ludHMuCi0gKiBFbmFibGUgaW4gY2FzZSBvZiBlbWVyZ2VuY3kuCi0gKi8KLQotaW50IGxvZ2dpbmcgPSAxOwotaW50IGxvZ2dpbmdfZmQgPSAtMTsKLQotaW50IGxvZ2dpbmdfbGluZSA9IDA7Ci1jaGFyIGxvZ2dpbmdfYnVmWzUxMl07Ci0KLXZvaWQgbG9nKGNoYXIgKmZtdCwgLi4uKQotewotICAgICAgICB2YV9saXN0IGFwOwotICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0djsKLSAgICAgICAgc3RydWN0IG9wZW5mbGFncyBmbGFnczsKLQotICAgICAgICBpZihsb2dnaW5nID09IDApIHJldHVybjsKLSAgICAgICAgaWYobG9nZ2luZ19mZCA8IDApewotICAgICAgICAgICAgICAgIGZsYWdzID0gb2ZfY3JlYXRlKG9mX3RydW5jKG9mX3Jkd3IoT1BFTkZMQUdTKCkpKSk7Ci0gICAgICAgICAgICAgICAgbG9nZ2luZ19mZCA9IG9zX29wZW5fZmlsZSgibG9nIiwgZmxhZ3MsIDA2NDQpOwotICAgICAgICB9Ci0gICAgICAgIGdldHRpbWVvZmRheSgmdHYsIE5VTEwpOwotICAgICAgICBzcHJpbnRmKGxvZ2dpbmdfYnVmLCAiJWRcdCAldS4ldSAgIiwgbG9nZ2luZ19saW5lKyssIHR2LnR2X3NlYywKLSAgICAgICAgICAgICAgICB0di50dl91c2VjKTsKLSAgICAgICAgdmFfc3RhcnQoYXAsIGZtdCk7Ci0gICAgICAgIHZzcHJpbnRmKCZsb2dnaW5nX2J1ZltzdHJsZW4obG9nZ2luZ19idWYpXSwgZm10LCBhcCk7Ci0gICAgICAgIHZhX2VuZChhcCk7Ci0gICAgICAgIHdyaXRlKGxvZ2dpbmdfZmQsIGxvZ2dpbmdfYnVmLCBzdHJsZW4obG9nZ2luZ19idWYpKTsKLX0KLSNlbmRpZgotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvcHJvY2Vzc19rZXJuLmMgYi9hcmNoL3VtL2tlcm5lbC9wcm9jZXNzX2tlcm4uYwppbmRleCBjMjNkOGEwLi5lYTY1ZGI2IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9wcm9jZXNzX2tlcm4uYworKysgYi9hcmNoL3VtL2tlcm5lbC9wcm9jZXNzX2tlcm4uYwpAQCAtODIsNyArODIsOCBAQAogCXVuc2lnbmVkIGxvbmcgcGFnZTsKIAlpbnQgZmxhZ3MgPSBHRlBfS0VSTkVMOwogCi0JaWYoYXRvbWljKSBmbGFncyB8PSBHRlBfQVRPTUlDOworCWlmIChhdG9taWMpCisJCWZsYWdzID0gR0ZQX0FUT01JQzsKIAlwYWdlID0gX19nZXRfZnJlZV9wYWdlcyhmbGFncywgb3JkZXIpOwogCWlmKHBhZ2UgPT0gMCkKIAkJcmV0dXJuKDApOwpAQCAtMTEzLDggKzExNCwyMyBAQAogCiB2b2lkICpfc3dpdGNoX3RvKHZvaWQgKnByZXYsIHZvaWQgKm5leHQsIHZvaWQgKmxhc3QpCiB7Ci0JcmV0dXJuKENIT09TRV9NT0RFKHN3aXRjaF90b190dChwcmV2LCBuZXh0KSwgCi0JCQkgICBzd2l0Y2hfdG9fc2thcyhwcmV2LCBuZXh0KSkpOworICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZyb20gPSBwcmV2OworICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRvPSBuZXh0OworCisgICAgICAgIHRvLT50aHJlYWQucHJldl9zY2hlZCA9IGZyb207CisgICAgICAgIHNldF9jdXJyZW50KHRvKTsKKworCWRvIHsKKwkJY3VycmVudC0+dGhyZWFkLnNhdmVkX3Rhc2sgPSBOVUxMIDsKKwkJQ0hPT1NFX01PREVfUFJPQyhzd2l0Y2hfdG9fdHQsIHN3aXRjaF90b19za2FzLCBwcmV2LCBuZXh0KTsKKwkJaWYoY3VycmVudC0+dGhyZWFkLnNhdmVkX3Rhc2spCisJCQlzaG93X3JlZ3MoJihjdXJyZW50LT50aHJlYWQucmVncykpOworCQluZXh0PSBjdXJyZW50LT50aHJlYWQuc2F2ZWRfdGFzazsKKwkJcHJldj0gY3VycmVudDsKKwl9IHdoaWxlKGN1cnJlbnQtPnRocmVhZC5zYXZlZF90YXNrKTsKKworICAgICAgICByZXR1cm4oY3VycmVudC0+dGhyZWFkLnByZXZfc2NoZWQpOworCiB9CiAKIHZvaWQgaW50ZXJydXB0X2VuZCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvc2lnaW9fdXNlci5jIGIvYXJjaC91bS9rZXJuZWwvc2lnaW9fdXNlci5jCmluZGV4IGU4OTIxODkuLmE1Mjc1MTEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3NpZ2lvX3VzZXIuYworKysgYi9hcmNoL3VtL2tlcm5lbC9zaWdpb191c2VyLmMKQEAgLTM0MCw3ICszNDAsNyBAQAogewogCXN0cnVjdCBwb2xsZmQgKnA7CiAKLQlwID0gdW1fa21hbGxvYyhzaXplb2Yoc3RydWN0IHBvbGxmZCkpOworCXAgPSB1bV9rbWFsbG9jX2F0b21pYyhzaXplb2Yoc3RydWN0IHBvbGxmZCkpOwogCWlmKHAgPT0gTlVMTCl7CiAJCXByaW50aygic2V0dXBfaW5pdGlhbF9wb2xsIDogZmFpbGVkIHRvIGFsbG9jYXRlIHBvbGxcbiIpOwogCQlyZXR1cm4oLTEpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvc2thcy9NYWtlZmlsZSBiL2FyY2gvdW0va2VybmVsL3NrYXMvTWFrZWZpbGUKaW5kZXggZGIzNmM3Yy4uOGRlNDcxYiAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvc2thcy9NYWtlZmlsZQorKysgYi9hcmNoL3VtL2tlcm5lbC9za2FzL01ha2VmaWxlCkBAIC02LDggKzYsNiBAQAogb2JqLXkgOj0gY2xvbmUubyBleGVjX2tlcm4ubyBtZW0ubyBtZW1fdXNlci5vIG1tdS5vIHByb2Nlc3MubyBwcm9jZXNzX2tlcm4ubyBcCiAJc3lzY2FsbC5vIHRsYi5vIHRyYXBfdXNlci5vIHVhY2Nlc3MubwogCi1zdWJkaXItIDo9IHV0aWwKLQogVVNFUl9PQkpTIDo9IHByb2Nlc3MubyBjbG9uZS5vCiAKIGluY2x1ZGUgYXJjaC91bS9zY3JpcHRzL01ha2VmaWxlLnJ1bGVzCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9za2FzL2luY2x1ZGUvbW9kZV9rZXJuLXNrYXMuaCBiL2FyY2gvdW0va2VybmVsL3NrYXMvaW5jbHVkZS9tb2RlX2tlcm4tc2thcy5oCmluZGV4IGU0ODQ5MDAuLmM5N2E4MGQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3NrYXMvaW5jbHVkZS9tb2RlX2tlcm4tc2thcy5oCisrKyBiL2FyY2gvdW0va2VybmVsL3NrYXMvaW5jbHVkZS9tb2RlX2tlcm4tc2thcy5oCkBAIC0xMSw3ICsxMSw3IEBACiAjaW5jbHVkZSAiYXNtL3B0cmFjZS5oIgogCiBleHRlcm4gdm9pZCBmbHVzaF90aHJlYWRfc2thcyh2b2lkKTsKLWV4dGVybiB2b2lkICpzd2l0Y2hfdG9fc2thcyh2b2lkICpwcmV2LCB2b2lkICpuZXh0KTsKK2V4dGVybiB2b2lkIHN3aXRjaF90b19za2FzKHZvaWQgKnByZXYsIHZvaWQgKm5leHQpOwogZXh0ZXJuIHZvaWQgc3RhcnRfdGhyZWFkX3NrYXMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZWlwLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBlc3ApOwogZXh0ZXJuIGludCBjb3B5X3RocmVhZF9za2FzKGludCBuciwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3NrYXMvaW5jbHVkZS91YWNjZXNzLXNrYXMuaCBiL2FyY2gvdW0va2VybmVsL3NrYXMvaW5jbHVkZS91YWNjZXNzLXNrYXMuaAppbmRleCA2ZWUzZjM5Li43ZGEwYzJkIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9za2FzL2luY2x1ZGUvdWFjY2Vzcy1za2FzLmgKKysrIGIvYXJjaC91bS9rZXJuZWwvc2thcy9pbmNsdWRlL3VhY2Nlc3Mtc2thcy5oCkBAIC0xOCwxMiArMTgsNiBAQAogCSAgKCh1bnNpZ25lZCBsb25nKSAoYWRkcikgKyAoc2l6ZSkgPD0gRklYQUREUl9VU0VSX0VORCkgJiYgXAogCSAgKCh1bnNpZ25lZCBsb25nKSAoYWRkcikgKyAoc2l6ZSkgPj0gKHVuc2lnbmVkIGxvbmcpKGFkZHIpKSkpCiAKLXN0YXRpYyBpbmxpbmUgaW50IHZlcmlmeV9hcmVhX3NrYXMoaW50IHR5cGUsIGNvbnN0IHZvaWQgX191c2VyICogYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzaXplKQotewotCXJldHVybihhY2Nlc3Nfb2tfc2thcyh0eXBlLCBhZGRyLCBzaXplKSA/IDAgOiAtRUZBVUxUKTsKLX0KLQogZXh0ZXJuIGludCBjb3B5X2Zyb21fdXNlcl9za2FzKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgaW50IG4pOwogZXh0ZXJuIGludCBjb3B5X3RvX3VzZXJfc2thcyh2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIGludCBuKTsKIGV4dGVybiBpbnQgc3RybmNweV9mcm9tX3VzZXJfc2thcyhjaGFyICpkc3QsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsIGludCBjb3VudCk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9za2FzL3Byb2Nlc3Nfa2Vybi5jIGIvYXJjaC91bS9rZXJuZWwvc2thcy9wcm9jZXNzX2tlcm4uYwppbmRleCAzZDFiMjI3Li5lZmU5MmU4IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9za2FzL3Byb2Nlc3Nfa2Vybi5jCisrKyBiL2FyY2gvdW0va2VybmVsL3NrYXMvcHJvY2Vzc19rZXJuLmMKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlICJwcm9jX21tLmgiCiAjaW5jbHVkZSAicmVnaXN0ZXJzLmgiCiAKLXZvaWQgKnN3aXRjaF90b19za2FzKHZvaWQgKnByZXYsIHZvaWQgKm5leHQpCit2b2lkIHN3aXRjaF90b19za2FzKHZvaWQgKnByZXYsIHZvaWQgKm5leHQpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpmcm9tLCAqdG87CiAKQEAgLTM1LDE2ICszNSwxMSBAQAogCWlmKGN1cnJlbnQtPnBpZCA9PSAwKQogCQlzd2l0Y2hfdGltZXJzKDApOwogCi0JdG8tPnRocmVhZC5wcmV2X3NjaGVkID0gZnJvbTsKLQlzZXRfY3VycmVudCh0byk7Ci0KIAlzd2l0Y2hfdGhyZWFkcygmZnJvbS0+dGhyZWFkLm1vZGUuc2thcy5zd2l0Y2hfYnVmLCAKIAkJICAgICAgIHRvLT50aHJlYWQubW9kZS5za2FzLnN3aXRjaF9idWYpOwogCiAJaWYoY3VycmVudC0+cGlkID09IDApCiAJCXN3aXRjaF90aW1lcnMoMSk7Ci0KLQlyZXR1cm4oY3VycmVudC0+dGhyZWFkLnByZXZfc2NoZWQpOwogfQogCiBleHRlcm4gdm9pZCBzY2hlZHVsZV90YWlsKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldik7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9za2FzL3V0aWwvTWFrZWZpbGUgYi9hcmNoL3VtL2tlcm5lbC9za2FzL3V0aWwvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3YjdlYmEuLjAwMDAwMDAKLS0tIGEvYXJjaC91bS9rZXJuZWwvc2thcy91dGlsL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1ob3N0cHJvZ3MteQkJOj0gbWtfcHRyZWdzCi1hbHdheXMJCQk6PSAkKGhvc3Rwcm9ncy15KQotCi1ta19wdHJlZ3Mtb2JqcyA6PSBta19wdHJlZ3MtJChTVUJBUkNIKS5vCi1IT1NUQ0ZMQUdTX21rX3B0cmVncy0kKFNVQkFSQ0gpLm8gOj0gLUkkKG9ianRyZWUpL2FyY2gvdW0KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3NrYXMvdXRpbC9ta19wdHJlZ3MtaTM4Ni5jIGIvYXJjaC91bS9rZXJuZWwvc2thcy91dGlsL21rX3B0cmVncy1pMzg2LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmOTZlMWUuLjAwMDAwMDAKLS0tIGEvYXJjaC91bS9rZXJuZWwvc2thcy91dGlsL21rX3B0cmVncy1pMzg2LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDx1c2VyLW9mZnNldHMuaD4KLQotI2RlZmluZSBTSE9XKG5hbWUpIHByaW50ZigiI2RlZmluZSAlcyAlZFxuIiwgI25hbWUsIG5hbWUpCi0KLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLQlwcmludGYoIi8qIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5ICIKLQkgICAgICAgImFyY2gvdW0va2VybmVsL3NrYXMvdXRpbC9ta19wdHJlZ3MgKi9cbiIpOwotCXByaW50ZigiXG4iKTsKLQlwcmludGYoIiNpZm5kZWYgX19TS0FTX1BUX1JFR1NfXG4iKTsKLQlwcmludGYoIiNkZWZpbmUgX19TS0FTX1BUX1JFR1NfXG4iKTsKLQlwcmludGYoIlxuIik7Ci0JU0hPVyhIT1NUX0ZSQU1FX1NJWkUpOwotCVNIT1coSE9TVF9GUF9TSVpFKTsKLQlTSE9XKEhPU1RfWEZQX1NJWkUpOwotCi0JU0hPVyhIT1NUX0lQKTsKLQlTSE9XKEhPU1RfU1ApOwotCVNIT1coSE9TVF9FRkxBR1MpOwotCVNIT1coSE9TVF9FQVgpOwotCVNIT1coSE9TVF9FQlgpOwotCVNIT1coSE9TVF9FQ1gpOwotCVNIT1coSE9TVF9FRFgpOwotCVNIT1coSE9TVF9FU0kpOwotCVNIT1coSE9TVF9FREkpOwotCVNIT1coSE9TVF9FQlApOwotCVNIT1coSE9TVF9DUyk7Ci0JU0hPVyhIT1NUX1NTKTsKLQlTSE9XKEhPU1RfRFMpOwotCVNIT1coSE9TVF9GUyk7Ci0JU0hPVyhIT1NUX0VTKTsKLQlTSE9XKEhPU1RfR1MpOwotCi0JcHJpbnRmKCJcbiIpOwotCXByaW50ZigiI2VuZGlmXG4iKTsKLQlyZXR1cm4oMCk7Ci19Ci0KLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9za2FzL3V0aWwvbWtfcHRyZWdzLXg4Nl82NC5jIGIvYXJjaC91bS9rZXJuZWwvc2thcy91dGlsL21rX3B0cmVncy14ODZfNjQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZjY2JmZTMuLjAwMDAwMDAKLS0tIGEvYXJjaC91bS9rZXJuZWwvc2thcy91dGlsL21rX3B0cmVncy14ODZfNjQuYworKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwMyBQYXRoU2NhbGUsIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8dXNlci1vZmZzZXRzLmg+Ci0KLSNkZWZpbmUgU0hPVyhuYW1lKSBcCi0JcHJpbnRmKCIjZGVmaW5lICVzICglZCAvIHNpemVvZih1bnNpZ25lZCBsb25nKSlcbiIsICNuYW1lLCBuYW1lKQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0JcHJpbnRmKCIvKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSAiCi0JICAgICAgICJhcmNoL3VtL2tlcm5lbC9za2FzL3V0aWwvbWtfcHRyZWdzICovXG4iKTsKLQlwcmludGYoIlxuIik7Ci0JcHJpbnRmKCIjaWZuZGVmIF9fU0tBU19QVF9SRUdTX1xuIik7Ci0JcHJpbnRmKCIjZGVmaW5lIF9fU0tBU19QVF9SRUdTX1xuIik7Ci0JU0hPVyhIT1NUX0ZSQU1FX1NJWkUpOwotCVNIT1coSE9TVF9SQlgpOwotCVNIT1coSE9TVF9SQ1gpOwotCVNIT1coSE9TVF9SREkpOwotCVNIT1coSE9TVF9SU0kpOwotCVNIT1coSE9TVF9SRFgpOwotCVNIT1coSE9TVF9SQlApOwotCVNIT1coSE9TVF9SQVgpOwotCVNIT1coSE9TVF9SOCk7Ci0JU0hPVyhIT1NUX1I5KTsKLQlTSE9XKEhPU1RfUjEwKTsKLQlTSE9XKEhPU1RfUjExKTsKLQlTSE9XKEhPU1RfUjEyKTsKLQlTSE9XKEhPU1RfUjEzKTsKLQlTSE9XKEhPU1RfUjE0KTsKLQlTSE9XKEhPU1RfUjE1KTsKLQlTSE9XKEhPU1RfT1JJR19SQVgpOwotCVNIT1coSE9TVF9DUyk7Ci0JU0hPVyhIT1NUX1NTKTsKLQlTSE9XKEhPU1RfRUZMQUdTKTsKLSNpZiAwCi0JU0hPVyhIT1NUX0ZTKTsKLQlTSE9XKEhPU1RfR1MpOwotCVNIT1coSE9TVF9EUyk7Ci0JU0hPVyhIT1NUX0VTKTsKLSNlbmRpZgotCi0JU0hPVyhIT1NUX0lQKTsKLQlTSE9XKEhPU1RfU1ApOwotCXByaW50ZigiI2RlZmluZSBIT1NUX0ZQX1NJWkUgMFxuIik7Ci0JcHJpbnRmKCIjZGVmaW5lIEhPU1RfWEZQX1NJWkUgMFxuIik7Ci0JcHJpbnRmKCJcbiIpOwotCXByaW50ZigiXG4iKTsKLQlwcmludGYoIiNlbmRpZlxuIik7Ci0JcmV0dXJuKDApOwotfQotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvc3lzcnEuYyBiL2FyY2gvdW0va2VybmVsL3N5c3JxLmMKaW5kZXggZjgwODUwMC4uYjMzMWU5NyAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvc3lzcnEuYworKysgYi9hcmNoL3VtL2tlcm5lbC9zeXNycS5jCkBAIC02MiwxMyArNjIsNyBAQAogCiAJaWYgKGVzcCA9PSBOVUxMKSB7CiAJCWlmICh0YXNrICE9IGN1cnJlbnQgJiYgdGFzayAhPSBOVUxMKSB7Ci0JCQkvKiBYWFg6IElzbid0IHRoaXMgYm9ndXM/IEkuZS4gaXNuJ3QgdGhpcyB0aGUKLQkJCSAqICp1c2Vyc3BhY2UqIHN0YWNrIG9mIHRoaXMgdGFzaz8gSWYgbm90IHNvLCB1c2UgdGhpcwotCQkJICogZXZlbiB3aGVuIHRhc2sgPT0gY3VycmVudCAoYXMgaW4gaTM4NikuCi0JCQkgKi8KIAkJCWVzcCA9ICh1bnNpZ25lZCBsb25nICopIEtTVEtfRVNQKHRhc2spOwotCQkJLyogV2hpY2ggb25lPyBObyBhY3R1YWwgZGlmZmVyZW5jZSAtIGp1c3QgY29kaW5nIHN0eWxlLiovCi0JCQkvL2VzcCA9ICh1bnNpZ25lZCBsb25nICopIFBUX1JFR1NfSVAoJnRhc2stPnRocmVhZC5yZWdzKTsKIAkJfSBlbHNlIHsKIAkJCWVzcCA9ICh1bnNpZ25lZCBsb25nICopICZlc3A7CiAJCX0KQEAgLTg0LDUgKzc4LDUgQEAKIAl9CiAKIAlwcmludGsoIkNhbGwgVHJhY2U6IFxuIik7Ci0Jc2hvd190cmFjZShjdXJyZW50LCBlc3ApOworCXNob3dfdHJhY2UodGFzaywgZXNwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3RlbXBmaWxlLmMgYi9hcmNoL3VtL2tlcm5lbC90ZW1wZmlsZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTY3NGJjLi4wMDAwMDAwCi0tLSBhL2FyY2gvdW0va2VybmVsL3RlbXBmaWxlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAyIEplZmYgRGlrZSAoamRpa2VAa2FyYXlhLmNvbSkKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgImluaXQuaCIKLQotLyogTW9kaWZpZWQgZnJvbSBjcmVhdGVfbWVtX2ZpbGUgYW5kIHN0YXJ0X2RlYnVnZ2VyICovCi1zdGF0aWMgY2hhciAqdGVtcGRpciA9IE5VTEw7Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBmaW5kX3RlbXBkaXIodm9pZCkKLXsKLQljaGFyICpkaXJzW10gPSB7ICJUTVAiLCAiVEVNUCIsICJUTVBESVIiLCBOVUxMIH07Ci0JaW50IGk7Ci0JY2hhciAqZGlyID0gTlVMTDsKLQotCWlmKHRlbXBkaXIgIT0gTlVMTCkgcmV0dXJuOwkvKiBXZSd2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkICovCi0JZm9yKGkgPSAwOyBkaXJzW2ldOyBpKyspewotCQlkaXIgPSBnZXRlbnYoZGlyc1tpXSk7Ci0JCWlmKChkaXIgIT0gTlVMTCkgJiYgKCpkaXIgIT0gJ1wwJykpCi0JCQlicmVhazsKLQl9Ci0JaWYoKGRpciA9PSBOVUxMKSB8fCAoKmRpciA9PSAnXDAnKSkgCi0JCWRpciA9ICIvdG1wIjsKLQotCXRlbXBkaXIgPSBtYWxsb2Moc3RybGVuKGRpcikgKyAyKTsKLQlpZih0ZW1wZGlyID09IE5VTEwpewotCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBtYWxsb2MgdGVtcGRpciwgIgotCQkJImVycm5vID0gJWRcbiIsIGVycm5vKTsKLQkJcmV0dXJuOwotCX0KLQlzdHJjcHkodGVtcGRpciwgZGlyKTsKLQlzdHJjYXQodGVtcGRpciwgIi8iKTsKLX0KLQotaW50IG1ha2VfdGVtcGZpbGUoY29uc3QgY2hhciAqdGVtcGxhdGUsIGNoYXIgKipvdXRfdGVtcG5hbWUsIGludCBkb191bmxpbmspCi17Ci0JY2hhciB0ZW1wbmFtZVtNQVhQQVRITEVOXTsKLQlpbnQgZmQ7Ci0KLQlmaW5kX3RlbXBkaXIoKTsKLQlpZiAoKnRlbXBsYXRlICE9ICcvJykKLQkJc3RyY3B5KHRlbXBuYW1lLCB0ZW1wZGlyKTsKLQllbHNlCi0JCSp0ZW1wbmFtZSA9IDA7Ci0Jc3RyY2F0KHRlbXBuYW1lLCB0ZW1wbGF0ZSk7Ci0JZmQgPSBta3N0ZW1wKHRlbXBuYW1lKTsKLQlpZihmZCA8IDApewotCQlmcHJpbnRmKHN0ZGVyciwgIm9wZW4gLSBjYW5ub3QgY3JlYXRlICVzOiAlc1xuIiwgdGVtcG5hbWUsIAotCQkJc3RyZXJyb3IoZXJybm8pKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlpZihkb191bmxpbmsgJiYgKHVubGluayh0ZW1wbmFtZSkgPCAwKSl7Ci0JCXBlcnJvcigidW5saW5rIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JaWYob3V0X3RlbXBuYW1lKXsKLQkJKm91dF90ZW1wbmFtZSA9IHN0cmR1cCh0ZW1wbmFtZSk7Ci0JCWlmKCpvdXRfdGVtcG5hbWUgPT0gTlVMTCl7Ci0JCQlwZXJyb3IoInN0cmR1cCIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotCXJldHVybihmZCk7Ci19Ci0KLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC90bGIuYyBiL2FyY2gvdW0va2VybmVsL3RsYi5jCmluZGV4IDgwZWQ2MTguLmY1YjA2MzYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3RsYi5jCisrKyBiL2FyY2gvdW0va2VybmVsL3RsYi5jCkBAIC0xOTMsMTIgKzE5MywxMiBAQAogICAgICAgICAgICAgICAgIHIgPSBwdGVfcmVhZCgqbnB0ZSk7CiAgICAgICAgICAgICAgICAgdyA9IHB0ZV93cml0ZSgqbnB0ZSk7CiAgICAgICAgICAgICAgICAgeCA9IHB0ZV9leGVjKCpucHRlKTsKLSAgICAgICAgICAgICAgICBpZighcHRlX2RpcnR5KCpucHRlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHcgPSAwOwotICAgICAgICAgICAgICAgIGlmKCFwdGVfeW91bmcoKm5wdGUpKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgdyA9IDA7Ci0gICAgICAgICAgICAgICAgfQorCQlpZiAoIXB0ZV95b3VuZygqbnB0ZSkpIHsKKwkJCXIgPSAwOworCQkJdyA9IDA7CisJCX0gZWxzZSBpZiAoIXB0ZV9kaXJ0eSgqbnB0ZSkpIHsKKwkJCXcgPSAwOworCQl9CiAgICAgICAgICAgICAgICAgaWYoZm9yY2UgfHwgcHRlX25ld3BhZ2UoKm5wdGUpKXsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHB0ZV9wcmVzZW50KCpucHRlKSkKIAkJCSAgcmV0ID0gYWRkX21tYXAoYWRkciwKQEAgLTMwNyw3ICszMDcsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIGlmKHB0ZV9uZXdwcm90KCpwdGUpKXsKICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdF9tZW1vcnkoYWRkciwgUEFHRV9TSVpFLCAxLCAxLCAxLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zX3Byb3RlY3RfbWVtb3J5KCh2b2lkICopIGFkZHIsIFBBR0VfU0laRSwgMSwgMSwgMSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGFkZHIgKz0gUEFHRV9TSVpFOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC90cmFwX2tlcm4uYyBiL2FyY2gvdW0va2VybmVsL3RyYXBfa2Vybi5jCmluZGV4IDg3Y2M2ZmQuLjk1YzhmODcgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3RyYXBfa2Vybi5jCisrKyBiL2FyY2gvdW0va2VybmVsL3RyYXBfa2Vybi5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSAiYXNtL2Eub3V0LmgiCiAjaW5jbHVkZSAiYXNtL2N1cnJlbnQuaCIKICNpbmNsdWRlICJhc20vaXJxLmgiCisjaW5jbHVkZSAic3lzZGVwL3NpZ2NvbnRleHQuaCIKICNpbmNsdWRlICJ1c2VyX3V0aWwuaCIKICNpbmNsdWRlICJrZXJuX3V0aWwuaCIKICNpbmNsdWRlICJrZXJuLmgiCkBAIC0yNSw2ICsyNiw5IEBACiAjaW5jbHVkZSAibWNvbnNvbGVfa2Vybi5oIgogI2luY2x1ZGUgIm1lbS5oIgogI2luY2x1ZGUgIm1lbV9rZXJuLmgiCisjaWZkZWYgQ09ORklHX01PREVfU0tBUworI2luY2x1ZGUgInNrYXMuaCIKKyNlbmRpZgogCiAvKiBOb3RlIHRoaXMgaXMgY29uc3RyYWluZWQgdG8gcmV0dXJuIDAsIC1FRkFVTFQsIC1FQUNDRVNTLCAtRU5PTUVNIGJ5IHNlZ3YoKS4gKi8KIGludCBoYW5kbGVfcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgaXAsIApAQCAtMzksNiArNDMsMTIgQEAKIAlpbnQgZXJyID0gLUVGQVVMVDsKIAogCSpjb2RlX291dCA9IFNFR1ZfTUFQRVJSOworCisJLyogSWYgdGhlIGZhdWx0IHdhcyBkdXJpbmcgYXRvbWljIG9wZXJhdGlvbiwgZG9uJ3QgdGFrZSB0aGUgZmF1bHQsIGp1c3QKKwkgKiBmYWlsLiAqLworCWlmIChpbl9hdG9taWMoKSkKKwkJZ290byBvdXRfbm9zZW1hcGhvcmU7CisKIAlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJdm1hID0gZmluZF92bWEobW0sIGFkZHJlc3MpOwogCWlmKCF2bWEpIApAQCAtODksNiArOTksNyBAQAogCWZsdXNoX3RsYl9wYWdlKHZtYSwgYWRkcmVzcyk7CiBvdXQ6CiAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKK291dF9ub3NlbWFwaG9yZToKIAlyZXR1cm4oZXJyKTsKIAogLyoKQEAgLTEyNSw3ICsxMzYsMTUgQEAKICAgICAgICAgfQogCWVsc2UgaWYoY3VycmVudC0+bW0gPT0gTlVMTCkKIAkJcGFuaWMoIlNlZ2ZhdWx0IHdpdGggbm8gbW0iKTsKLQllcnIgPSBoYW5kbGVfcGFnZV9mYXVsdChhZGRyZXNzLCBpcCwgaXNfd3JpdGUsIGlzX3VzZXIsICZzaS5zaV9jb2RlKTsKKworCWlmIChTRUdWX0lTX0ZJWEFCTEUoJmZpKSB8fCBTRUdWX01BWUJFX0ZJWEFCTEUoJmZpKSkKKwkJZXJyID0gaGFuZGxlX3BhZ2VfZmF1bHQoYWRkcmVzcywgaXAsIGlzX3dyaXRlLCBpc191c2VyLCAmc2kuc2lfY29kZSk7CisJZWxzZSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCS8qIEEgdGhyZWFkIGFjY2Vzc2VkIE5VTEwsIHdlIGdldCBhIGZhdWx0LCBidXQgQ1IyIGlzIGludmFsaWQuCisJCSAqIFRoaXMgY29kZSBpcyB1c2VkIGluIF9fZG9fY29weV9mcm9tX3VzZXIoKSBvZiBUVCBtb2RlLiAqLworCQlhZGRyZXNzID0gMDsKKwl9CiAKIAljYXRjaGVyID0gY3VycmVudC0+dGhyZWFkLmZhdWx0X2NhdGNoZXI7CiAJaWYoIWVycikKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3R0L2luY2x1ZGUvbW9kZV9rZXJuLXR0LmggYi9hcmNoL3VtL2tlcm5lbC90dC9pbmNsdWRlL21vZGVfa2Vybi10dC5oCmluZGV4IGUwY2EwZTAuLjJhMzViMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3R0L2luY2x1ZGUvbW9kZV9rZXJuLXR0LmgKKysrIGIvYXJjaC91bS9rZXJuZWwvdHQvaW5jbHVkZS9tb2RlX2tlcm4tdHQuaApAQCAtMTEsNyArMTEsNyBAQAogI2luY2x1ZGUgImFzbS9wdHJhY2UuaCIKICNpbmNsdWRlICJhc20vdWFjY2Vzcy5oIgogCi1leHRlcm4gdm9pZCAqc3dpdGNoX3RvX3R0KHZvaWQgKnByZXYsIHZvaWQgKm5leHQpOworZXh0ZXJuIHZvaWQgc3dpdGNoX3RvX3R0KHZvaWQgKnByZXYsIHZvaWQgKm5leHQpOwogZXh0ZXJuIHZvaWQgZmx1c2hfdGhyZWFkX3R0KHZvaWQpOwogZXh0ZXJuIHZvaWQgc3RhcnRfdGhyZWFkX3R0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVpcCwKIAkJCSAgIHVuc2lnbmVkIGxvbmcgZXNwKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3R0L2luY2x1ZGUvdWFjY2Vzcy10dC5oIGIvYXJjaC91bS9rZXJuZWwvdHQvaW5jbHVkZS91YWNjZXNzLXR0LmgKaW5kZXggYWE2ZGIzOC4uZGMyZWJmYSAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvdHQvaW5jbHVkZS91YWNjZXNzLXR0LmgKKysrIGIvYXJjaC91bS9rZXJuZWwvdHQvaW5jbHVkZS91YWNjZXNzLXR0LmgKQEAgLTMzLDEyICszMyw2IEBACiAgICAgICAgICAoKCh1bnNpZ25lZCBsb25nKSAoYWRkcikgPD0gKCh1bnNpZ25lZCBsb25nKSAoYWRkcikgKyAoc2l6ZSkpKSAmJiBcCiAgICAgICAgICAgKHVuZGVyX3Rhc2tfc2l6ZShhZGRyLCBzaXplKSB8fCBpc19zdGFjayhhZGRyLCBzaXplKSkpKQogCi1zdGF0aWMgaW5saW5lIGludCB2ZXJpZnlfYXJlYV90dChpbnQgdHlwZSwgY29uc3Qgdm9pZCBfX3VzZXIgKiBhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzaXplKQotewotCXJldHVybihhY2Nlc3Nfb2tfdHQodHlwZSwgYWRkciwgc2l6ZSkgPyAwIDogLUVGQVVMVCk7Ci19Ci0KIGV4dGVybiB1bnNpZ25lZCBsb25nIGdldF9mYXVsdF9hZGRyKHZvaWQpOwogCiBleHRlcm4gaW50IF9fZG9fY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIGludCBuLApkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvdHQvbWVtX3VzZXIuYyBiL2FyY2gvdW0va2VybmVsL3R0L21lbV91c2VyLmMKaW5kZXggMzA4NTI2Ny4uMDNlNTg5OCAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvdHQvbWVtX3VzZXIuYworKysgYi9hcmNoL3VtL2tlcm5lbC90dC9tZW1fdXNlci5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSAidHQuaCIKICNpbmNsdWRlICJtZW1fdXNlci5oIgogI2luY2x1ZGUgInVzZXJfdXRpbC5oIgorI2luY2x1ZGUgIm9zLmgiCiAKIHZvaWQgcmVtYXBfZGF0YSh2b2lkICpzZWdtZW50X3N0YXJ0LCB2b2lkICpzZWdtZW50X2VuZCwgaW50IHcpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC90dC9wcm9jZXNzX2tlcm4uYyBiL2FyY2gvdW0va2VybmVsL3R0L3Byb2Nlc3Nfa2Vybi5jCmluZGV4IGExODlhMmIuLmNmYWEzNzNhIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC90dC9wcm9jZXNzX2tlcm4uYworKysgYi9hcmNoL3VtL2tlcm5lbC90dC9wcm9jZXNzX2tlcm4uYwpAQCAtMjMsMTAgKzIzLDExIEBACiAjaW5jbHVkZSAibWVtX3VzZXIuaCIKICNpbmNsdWRlICJ0bGIuaCIKICNpbmNsdWRlICJtb2RlLmgiCisjaW5jbHVkZSAibW9kZV9rZXJuLmgiCiAjaW5jbHVkZSAiaW5pdC5oIgogI2luY2x1ZGUgInR0LmgiCiAKLXZvaWQgKnN3aXRjaF90b190dCh2b2lkICpwcmV2LCB2b2lkICpuZXh0LCB2b2lkICpsYXN0KQordm9pZCBzd2l0Y2hfdG9fdHQodm9pZCAqcHJldiwgdm9pZCAqbmV4dCkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZyb20sICp0bywgKnByZXZfc2NoZWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTM2LDggKzM3LDYgQEAKIAlmcm9tID0gcHJldjsKIAl0byA9IG5leHQ7CiAKLQl0by0+dGhyZWFkLnByZXZfc2NoZWQgPSBmcm9tOwotCiAJY3B1ID0gZnJvbS0+dGhyZWFkX2luZm8tPmNwdTsKIAlpZihjcHUgPT0gMCkKIAkJZm9yd2FyZF9pbnRlcnJ1cHRzKHRvLT50aHJlYWQubW9kZS50dC5leHRlcm5fcGlkKTsKQEAgLTUzLDcgKzUyLDYgQEAKIAlmb3J3YXJkX3BlbmRpbmdfc2lnaW8odG8tPnRocmVhZC5tb2RlLnR0LmV4dGVybl9waWQpOwogCiAJYyA9IDA7Ci0Jc2V0X2N1cnJlbnQodG8pOwogCiAJZXJyID0gb3Nfd3JpdGVfZmlsZSh0by0+dGhyZWFkLm1vZGUudHQuc3dpdGNoX3BpcGVbMV0sICZjLCBzaXplb2YoYykpOwogCWlmKGVyciAhPSBzaXplb2YoYykpCkBAIC04NSw4ICs4Myw2IEBACiAKIAlmbHVzaF90bGJfYWxsKCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JcmV0dXJuKGN1cnJlbnQtPnRocmVhZC5wcmV2X3NjaGVkKTsKIH0KIAogdm9pZCByZWxlYXNlX3RocmVhZF90dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC90dC91YWNjZXNzX3VzZXIuYyBiL2FyY2gvdW0va2VybmVsL3R0L3VhY2Nlc3NfdXNlci5jCmluZGV4IGYwMTQ3NTUuLjhjMjIwZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3R0L3VhY2Nlc3NfdXNlci5jCisrKyBiL2FyY2gvdW0va2VybmVsL3R0L3VhY2Nlc3NfdXNlci5jCkBAIC0yMiw4ICsyMiwxNSBAQAogCQkJICAgICAgIF9fZG9fY29weSwgJmZhdWx0ZWQpOwogCVRBU0tfUkVHUyhnZXRfY3VycmVudCgpKS0+dHQgPSBzYXZlOwogCi0JaWYoIWZhdWx0ZWQpIHJldHVybigwKTsKLQllbHNlIHJldHVybihuIC0gKGZhdWx0IC0gKHVuc2lnbmVkIGxvbmcpIGZyb20pKTsKKwlpZighZmF1bHRlZCkKKwkJcmV0dXJuIDA7CisJZWxzZSBpZiAoZmF1bHQpCisJCXJldHVybiBuIC0gKGZhdWx0IC0gKHVuc2lnbmVkIGxvbmcpIGZyb20pOworCWVsc2UKKwkJLyogSW4gY2FzZSBvZiBhIGdlbmVyYWwgcHJvdGVjdGlvbiBmYXVsdCwgd2UgZG9uJ3QgaGF2ZSB0aGUKKwkJICogZmF1bHQgYWRkcmVzcywgc28gTlVMTCBpcyB1c2VkIGluc3RlYWQuIFByZXRlbmQgd2UgZGlkbid0CisJCSAqIGNvcHkgYW55dGhpbmcuICovCisJCXJldHVybiBuOwogfQogCiBzdGF0aWMgdm9pZCBfX2RvX3N0cm5jcHkodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIGludCBjb3VudCkKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3VtX2FyY2guYyBiL2FyY2gvdW0va2VybmVsL3VtX2FyY2guYwppbmRleCAwOWY2ZjdjLi45M2RjNzgyIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC91bV9hcmNoLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvdW1fYXJjaC5jCkBAIC0zMzQsNiArMzM0LDggQEAKIAkJYWRkX2FyZyhERUZBVUxUX0NPTU1BTkRfTElORSk7CiAKIAlvc19lYXJseV9jaGVja3MoKTsKKwlpZiAoZm9yY2VfdHQpCisJCWNsZWFyX2Nhbl9kb19za2FzKCk7CiAJbW9kZV90dCA9IGZvcmNlX3R0ID8gMSA6ICFjYW5fZG9fc2thcygpOwogI2lmbmRlZiBDT05GSUdfTU9ERV9UVAogCWlmIChtb2RlX3R0KSB7CkBAIC0zNjEsMTEgKzM2Myw2IEBACiAJdW1sX3N0YXJ0ID0gQ0hPT1NFX01PREVfUFJPQyhzZXRfdGFza19zaXplc190dCwgc2V0X3Rhc2tfc2l6ZXNfc2thcywgMCwKIAkJCQkgICAgICZob3N0X3Rhc2tfc2l6ZSwgJnRhc2tfc2l6ZSk7CiAKLQkvKiBOZWVkIHRvIGNoZWNrIHRoaXMgZWFybHkgYmVjYXVzZSBtbWFwcGluZyBoYXBwZW5zIGJlZm9yZSB0aGUKLQkgKiBrZXJuZWwgaXMgcnVubmluZy4KLQkgKi8KLQljaGVja190bXBleGVjKCk7Ci0KIAlicmtfc3RhcnQgPSAodW5zaWduZWQgbG9uZykgc2JyaygwKTsKIAlDSE9PU0VfTU9ERV9QUk9DKGJlZm9yZV9tZW1fdHQsIGJlZm9yZV9tZW1fc2thcywgYnJrX3N0YXJ0KTsKIAkvKiBJbmNyZWFzZSBwaHlzaWNhbCBtZW1vcnkgc2l6ZSBmb3IgZXhlYy1zaGllbGQgdXNlcnMKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3VtaWQuYyBiL2FyY2gvdW0va2VybmVsL3VtaWQuYwppbmRleCAxODZjMjg4Li4wYjIxZDU5IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC91bWlkLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvdW1pZC5jCkBAIC0zMSw2ICszMSw4IEBACiAvKiBDaGFuZ2VkIGJ5IHNldF91bWlkICovCiBzdGF0aWMgaW50IHVtaWRfaXNfcmFuZG9tID0gMTsKIHN0YXRpYyBpbnQgdW1pZF9pbml0ZWQgPSAwOworLyogSGF2ZSB3ZSBjcmVhdGVkIHRoZSBmaWxlcz8gU2hvdWxkIHdlIHJlbW92ZSB0aGVtPyAqLworc3RhdGljIGludCB1bWlkX293bmVkID0gMDsKIAogc3RhdGljIGludCBtYWtlX3VtaWQoaW50ICgqcHJpbnRlcikoY29uc3QgY2hhciAqZm10LCAuLi4pKTsKIApAQCAtODIsMjAgKzg0LDIxIEBACiAKIGV4dGVybiBpbnQgdHJhY2luZ19waWQ7CiAKLXN0YXRpYyBpbnQgX19pbml0IGNyZWF0ZV9waWRfZmlsZSh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGNyZWF0ZV9waWRfZmlsZSh2b2lkKQogewogCWNoYXIgZmlsZVtzdHJsZW4odW1sX2RpcikgKyBVTUlEX0xFTiArIHNpemVvZigiL3BpZFwwIildOwogCWNoYXIgcGlkW3NpemVvZigibm5ubm5cMCIpXTsKIAlpbnQgZmQsIG47CiAKLQlpZih1bWlkX2ZpbGVfbmFtZSgicGlkIiwgZmlsZSwgc2l6ZW9mKGZpbGUpKSkgcmV0dXJuIDA7CisJaWYodW1pZF9maWxlX25hbWUoInBpZCIsIGZpbGUsIHNpemVvZihmaWxlKSkpCisJCXJldHVybjsKIAogCWZkID0gb3Nfb3Blbl9maWxlKGZpbGUsIG9mX2NyZWF0ZShvZl9leGNsKG9mX3Jkd3IoT1BFTkZMQUdTKCkpKSksIAogCQkJICAwNjQ0KTsKIAlpZihmZCA8IDApewogCQlwcmludGYoIk9wZW4gb2YgbWFjaGluZSBwaWQgZmlsZSBcIiVzXCIgZmFpbGVkOiAlc1xuIiwKIAkJICAgICAgIGZpbGUsIHN0cmVycm9yKC1mZCkpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCX0KIAogCXNwcmludGYocGlkLCAiJWRcbiIsIG9zX2dldHBpZCgpKTsKQEAgLTEwMyw3ICsxMDYsNiBAQAogCWlmKG4gIT0gc3RybGVuKHBpZCkpCiAJCXByaW50ZigiV3JpdGUgb2YgcGlkIGZpbGUgZmFpbGVkIC0gZXJyID0gJWRcbiIsIC1uKTsKIAlvc19jbG9zZV9maWxlKGZkKTsKLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhY3R1YWxseV9kb19yZW1vdmUoY2hhciAqZGlyKQpAQCAtMTQ3LDcgKzE0OSw4IEBACiB2b2lkIHJlbW92ZV91bWlkX2Rpcih2b2lkKQogewogCWNoYXIgZGlyW3N0cmxlbih1bWxfZGlyKSArIFVNSURfTEVOICsgMV07Ci0JaWYoIXVtaWRfaW5pdGVkKSByZXR1cm47CisJaWYgKCF1bWlkX293bmVkKQorCQlyZXR1cm47CiAKIAlzcHJpbnRmKGRpciwgIiVzJXMiLCB1bWxfZGlyLCB1bWlkKTsKIAlhY3R1YWxseV9kb19yZW1vdmUoZGlyKTsKQEAgLTE1NSwxMSArMTU4LDEyIEBACiAKIGNoYXIgKmdldF91bWlkKGludCBvbmx5X2lmX3NldCkKIHsKLQlpZihvbmx5X2lmX3NldCAmJiB1bWlkX2lzX3JhbmRvbSkgcmV0dXJuKE5VTEwpOwotCXJldHVybih1bWlkKTsKKwlpZihvbmx5X2lmX3NldCAmJiB1bWlkX2lzX3JhbmRvbSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIHVtaWQ7CiB9CiAKLWludCBub3RfZGVhZF95ZXQoY2hhciAqZGlyKQorc3RhdGljIGludCBub3RfZGVhZF95ZXQoY2hhciAqZGlyKQogewogCWNoYXIgZmlsZVtzdHJsZW4odW1sX2RpcikgKyBVTUlEX0xFTiArIHNpemVvZigiL3BpZFwwIildOwogCWNoYXIgcGlkW3NpemVvZigibm5ubm5cMCIpXSwgKmVuZDsKQEAgLTE5Myw3ICsxOTcsOCBAQAogCQkgICAocCA9PSBDSE9PU0VfTU9ERSh0cmFjaW5nX3BpZCwgb3NfZ2V0cGlkKCkpKSkKIAkJCWRlYWQgPSAxOwogCX0KLQlpZighZGVhZCkgcmV0dXJuKDEpOworCWlmKCFkZWFkKQorCQlyZXR1cm4oMSk7CiAJcmV0dXJuKGFjdHVhbGx5X2RvX3JlbW92ZShkaXIpKTsKIH0KIApAQCAtMjMyLDE2ICsyMzcsMTMgQEAKIAkJc3RybGNweShkaXIsIGhvbWUsIHNpemVvZihkaXIpKTsKIAkJdW1sX2RpcisrOwogCX0KKwlzdHJsY2F0KGRpciwgdW1sX2Rpciwgc2l6ZW9mKGRpcikpOwogCWxlbiA9IHN0cmxlbihkaXIpOwotCXN0cm5jYXQoZGlyLCB1bWxfZGlyLCBzaXplb2YoZGlyKSAtIGxlbik7Ci0JbGVuID0gc3RybGVuKGRpcik7Ci0JaWYoKGxlbiA+IDApICYmIChsZW4gPCBzaXplb2YoZGlyKSAtIDEpICYmIChkaXJbbGVuIC0gMV0gIT0gJy8nKSl7Ci0JCWRpcltsZW5dID0gJy8nOwotCQlkaXJbbGVuICsgMV0gPSAnXDAnOwotCX0KKwlpZiAobGVuID4gMCAmJiBkaXJbbGVuIC0gMV0gIT0gJy8nKQorCQlzdHJsY2F0KGRpciwgIi8iLCBzaXplb2YoZGlyKSk7CiAKIAl1bWxfZGlyID0gbWFsbG9jKHN0cmxlbihkaXIpICsgMSk7Ci0JaWYodW1sX2RpciA9PSBOVUxMKXsKKwlpZiAodW1sX2RpciA9PSBOVUxMKSB7CiAJCXByaW50ZigibWFrZV91bWxfZGlyIDogbWFsbG9jIGZhaWxlZCwgZXJybm8gPSAlZFxuIiwgZXJybm8pOwogCQlleGl0KDEpOwogCX0KQEAgLTI4Niw2ICsyODgsNyBAQAogCQlpZihlcnJubyA9PSBFRVhJU1QpewogCQkJaWYobm90X2RlYWRfeWV0KHRtcCkpewogCQkJCSgqcHJpbnRlcikoInVtaWQgJyVzJyBpcyBpbiB1c2VcbiIsIHVtaWQpOworCQkJCXVtaWRfb3duZWQgPSAwOwogCQkJCXJldHVybigtMSk7CiAJCQl9CiAJCQllcnIgPSBta2Rpcih0bXAsIDA3NzcpOwpAQCAtMjk2LDcgKzI5OSw4IEBACiAJCXJldHVybigtMSk7CiAJfQogCi0JcmV0dXJuKDApOworCXVtaWRfb3duZWQgPSAxOworCXJldHVybiAwOwogfQogCiBfX3VtbF9zZXR1cCgidW1sX2Rpcj0iLCBzZXRfdW1sX2RpciwKQEAgLTMwOSw3ICszMTMsOCBAQAogCS8qIG9uZSBmdW5jdGlvbiB3aXRoIHRoZSBvcmRlcmluZyB3ZSBuZWVkIC4uLiAqLwogCW1ha2VfdW1sX2RpcigpOwogCW1ha2VfdW1pZChwcmludGYpOwotCXJldHVybiBjcmVhdGVfcGlkX2ZpbGUoKTsKKwljcmVhdGVfcGlkX2ZpbGUoKTsKKwlyZXR1cm4gMDsKIH0KIF9fdW1sX3Bvc3RzZXR1cChtYWtlX3VtaWRfc2V0dXApOwogCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC91c2VyX3V0aWwuYyBiL2FyY2gvdW0va2VybmVsL3VzZXJfdXRpbC5jCmluZGV4IDk1NGZmNjcuLjQxZDE3YzcgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3VzZXJfdXRpbC5jCisrKyBiL2FyY2gvdW0va2VybmVsL3VzZXJfdXRpbC5jCkBAIC0xMDksMTggKzEwOSwxNCBAQAogCWludCBlcnI7CiAKIAlDQVRDSF9FSU5UUihlcnIgPSB0Y2dldGF0dHIoZmQsICZ0dCkpOwotCWlmIChlcnIgPCAwKSB7Ci0JCQlwcmludGsoInRjZ2V0YXR0ciBmYWlsZWQsIGVycm5vID0gJWRcbiIsIGVycm5vKTsKLQkJcmV0dXJuKC1lcnJubyk7Ci0JfQorCWlmKGVyciA8IDApCisJCXJldHVybiAtZXJybm87CiAKIAljZm1ha2VyYXcoJnR0KTsKIAogIAlDQVRDSF9FSU5UUihlcnIgPSB0Y3NldGF0dHIoZmQsIFRDU0FEUkFJTiwgJnR0KSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJCXByaW50aygidGNzZXRhdHRyIGZhaWxlZCwgZXJybm8gPSAlZFxuIiwgZXJybm8pOwotCQlyZXR1cm4oLWVycm5vKTsKLQl9CisJaWYoZXJyIDwgMCkKKwkJcmV0dXJuIC1lcnJubzsKIAogCS8qIFhYWCB0Y3NldGF0dHIgY291bGQgaGF2ZSBhcHBsaWVkIG9ubHkgc29tZSBjaGFuZ2VzCiAJICogKGFuZCBjZm1ha2VyYXcoKSBpcyBhIHNldCBvZiBjaGFuZ2VzKSAqLwpAQCAtMTMyLDYgKzEyOCwxMiBAQAogCXN0cnVjdCB1dHNuYW1lIGhvc3Q7CiAKIAl1bmFtZSgmaG9zdCk7CisjaWYgZGVmaW5lZChVTUxfQ09ORklHX1VNTF9YODYpICYmICFkZWZpbmVkKFVNTF9DT05GSUdfNjRCSVQpCisJaWYgKCFzdHJjbXAoaG9zdC5tYWNoaW5lLCAieDg2XzY0IikpIHsKKwkJc3RyY3B5KG1hY2hpbmVfb3V0LCAiaTY4NiIpOworCQlyZXR1cm47CisJfQorI2VuZGlmCiAJc3RyY3B5KG1hY2hpbmVfb3V0LCBob3N0Lm1hY2hpbmUpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L01ha2VmaWxlIGIvYXJjaC91bS9vcy1MaW51eC9NYWtlZmlsZQppbmRleCA3YTE2NjI0Li5kMTVlYzJhIDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L01ha2VmaWxlCisrKyBiL2FyY2gvdW0vb3MtTGludXgvTWFrZWZpbGUKQEAgLTMsMTEgKzMsMTEgQEAKICMgTGljZW5zZWQgdW5kZXIgdGhlIEdQTAogIwogCi1vYmoteSA9IGFpby5vIGVsZl9hdXgubyBmaWxlLm8gcHJvY2Vzcy5vIHNpZ25hbC5vIHN0YXJ0X3VwLm8gdGltZS5vIHR0Lm8gXAotCXR0eS5vIHVzZXJfc3ltcy5vIGRyaXZlcnMvIHN5cy0kKFNVQkFSQ0gpLworb2JqLXkgPSBhaW8ubyBlbGZfYXV4Lm8gZmlsZS5vIG1lbS5vIHByb2Nlc3MubyBzaWduYWwubyBzdGFydF91cC5vIHRpbWUubyBcCisJdHQubyB0dHkubyB1c2VyX3N5bXMubyBkcml2ZXJzLyBzeXMtJChTVUJBUkNIKS8KIAotVVNFUl9PQkpTIDo9IGFpby5vIGVsZl9hdXgubyBmaWxlLm8gcHJvY2Vzcy5vIHNpZ25hbC5vIHN0YXJ0X3VwLm8gdGltZS5vIHR0Lm8gXAotCXR0eS5vCitVU0VSX09CSlMgOj0gYWlvLm8gZWxmX2F1eC5vIGZpbGUubyBtZW0ubyBwcm9jZXNzLm8gc2lnbmFsLm8gc3RhcnRfdXAubyBcCisJdGltZS5vIHR0Lm8gdHR5Lm8KIAogZWxmX2F1eC5vOiAkKEFSQ0hfRElSKS9rZXJuZWwtb2Zmc2V0cy5oCiBDRkxBR1NfZWxmX2F1eC5vICs9IC1JJChvYmp0cmVlKS9hcmNoL3VtCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L2Fpby5jIGIvYXJjaC91bS9vcy1MaW51eC9haW8uYwppbmRleCBiMDQ4OTdjLi40MWNmYjA5IDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L2Fpby5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvYWlvLmMKQEAgLTYsNyArNiw2IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxzY2hlZC5oPgogI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CkBAIC0xNywzMSArMTYsMTggQEAKICNpbmNsdWRlICJ1c2VyLmgiCiAjaW5jbHVkZSAibW9kZS5oIgogCitzdHJ1Y3QgYWlvX3RocmVhZF9yZXEgeworICAgICAgICBlbnVtIGFpb190eXBlIHR5cGU7CisgICAgICAgIGludCBpb19mZDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldDsKKyAgICAgICAgY2hhciAqYnVmOworICAgICAgICBpbnQgbGVuOworICAgICAgICBzdHJ1Y3QgYWlvX2NvbnRleHQgKmFpbzsKK307CisKIHN0YXRpYyBpbnQgYWlvX3JlcV9mZF9yID0gLTE7CiBzdGF0aWMgaW50IGFpb19yZXFfZmRfdyA9IC0xOwogCi1zdGF0aWMgaW50IHVwZGF0ZV9haW8oc3RydWN0IGFpb19jb250ZXh0ICphaW8sIGludCByZXMpCi17Ci0gICAgICAgIGlmKHJlcyA8IDApCi0gICAgICAgICAgICAgICAgYWlvLT5sZW4gPSByZXM7Ci0gICAgICAgIGVsc2UgaWYoKHJlcyA9PSAwKSAmJiAoYWlvLT50eXBlID09IEFJT19SRUFEKSl7Ci0gICAgICAgICAgICAgICAgLyogVGhpcyBpcyB0aGUgRU9GIGNhc2UgLSB3ZSBoYXZlIGhpdCB0aGUgZW5kIG9mIHRoZSBmaWxlCi0gICAgICAgICAgICAgICAgICogYW5kIGl0IGVuZHMgaW4gYSBwYXJ0aWFsIGJsb2NrLCBzbyB3ZSBmaWxsIHRoZSBlbmQgb2YKLSAgICAgICAgICAgICAgICAgKiB0aGUgYmxvY2sgd2l0aCB6ZXJvcyBhbmQgY2xhaW0gc3VjY2Vzcy4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBtZW1zZXQoYWlvLT5kYXRhLCAwLCBhaW8tPmxlbik7Ci0gICAgICAgICAgICAgICAgYWlvLT5sZW4gPSAwOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYocmVzID4gMCl7Ci0gICAgICAgICAgICAgICAgYWlvLT5sZW4gLT0gcmVzOwotICAgICAgICAgICAgICAgIGFpby0+ZGF0YSArPSByZXM7Ci0gICAgICAgICAgICAgICAgYWlvLT5vZmZzZXQgKz0gcmVzOwotICAgICAgICAgICAgICAgIHJldHVybiBhaW8tPmxlbjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAwOwotfQotCiAjaWYgZGVmaW5lZChIQVZFX0FJT19BQkkpCiAjaW5jbHVkZSA8bGludXgvYWlvX2FiaS5oPgogCkBAIC04MCw3ICs2Niw4IEBACiAgKiB0aGF0IGl0IG5vdyBiYWNrcyB0aGUgbW1hcHBlZCBhcmVhLgogICovCiAKLXN0YXRpYyBpbnQgZG9fYWlvKGFpb19jb250ZXh0X3QgY3R4LCBzdHJ1Y3QgYWlvX2NvbnRleHQgKmFpbykKK3N0YXRpYyBpbnQgZG9fYWlvKGFpb19jb250ZXh0X3QgY3R4LCBlbnVtIGFpb190eXBlIHR5cGUsIGludCBmZCwgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgaW50IGxlbiwgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwgc3RydWN0IGFpb19jb250ZXh0ICphaW8pCiB7CiAgICAgICAgIHN0cnVjdCBpb2NiIGlvY2IsICppb2NicCA9ICZpb2NiOwogICAgICAgICBjaGFyIGM7CkBAIC04OCwzNyArNzUsNDAgQEAKIAogICAgICAgICBpb2NiID0gKChzdHJ1Y3QgaW9jYikgeyAuYWlvX2RhdGEgCT0gKHVuc2lnbmVkIGxvbmcpIGFpbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFpb19yZXFwcmlvCT0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFpb19maWxkZXMJPSBhaW8tPmZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYWlvX2J1Zgk9ICh1bnNpZ25lZCBsb25nKSBhaW8tPmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5haW9fbmJ5dGVzCT0gYWlvLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5haW9fb2Zmc2V0CT0gYWlvLT5vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5haW9fZmlsZGVzCT0gZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5haW9fYnVmCT0gKHVuc2lnbmVkIGxvbmcpIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFpb19uYnl0ZXMJPSBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5haW9fb2Zmc2V0CT0gb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYWlvX3Jlc2VydmVkMQk9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5haW9fcmVzZXJ2ZWQyCT0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFpb19yZXNlcnZlZDMJPSAwIH0pOwogCi0gICAgICAgIHN3aXRjaChhaW8tPnR5cGUpeworICAgICAgICBzd2l0Y2godHlwZSl7CiAgICAgICAgIGNhc2UgQUlPX1JFQUQ6CiAgICAgICAgICAgICAgICAgaW9jYi5haW9fbGlvX29wY29kZSA9IElPQ0JfQ01EX1BSRUFEOworICAgICAgICAgICAgICAgIGVyciA9IGlvX3N1Ym1pdChjdHgsIDEsICZpb2NicCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQUlPX1dSSVRFOgogICAgICAgICAgICAgICAgIGlvY2IuYWlvX2xpb19vcGNvZGUgPSBJT0NCX0NNRF9QV1JJVEU7CisgICAgICAgICAgICAgICAgZXJyID0gaW9fc3VibWl0KGN0eCwgMSwgJmlvY2JwKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBSU9fTU1BUDoKICAgICAgICAgICAgICAgICBpb2NiLmFpb19saW9fb3Bjb2RlID0gSU9DQl9DTURfUFJFQUQ7CiAgICAgICAgICAgICAgICAgaW9jYi5haW9fYnVmID0gKHVuc2lnbmVkIGxvbmcpICZjOwogICAgICAgICAgICAgICAgIGlvY2IuYWlvX25ieXRlcyA9IHNpemVvZihjKTsKKyAgICAgICAgICAgICAgICBlcnIgPSBpb19zdWJtaXQoY3R4LCAxLCAmaW9jYnApOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHByaW50aygiQm9ndXMgb3AgaW4gZG9fYWlvIC0gJWRcbiIsIGFpby0+dHlwZSk7CisgICAgICAgICAgICAgICAgcHJpbnRrKCJCb2d1cyBvcCBpbiBkb19haW8gLSAlZFxuIiwgdHlwZSk7CiAgICAgICAgICAgICAgICAgZXJyID0gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGVyciA9IGlvX3N1Ym1pdChjdHgsIDEsICZpb2NicCk7CiAgICAgICAgIGlmKGVyciA+IDApCiAgICAgICAgICAgICAgICAgZXJyID0gMDsKKwllbHNlCisJCWVyciA9IC1lcnJubzsKIAotIG91dDoKICAgICAgICAgcmV0dXJuIGVycjsKIH0KIApAQCAtMTI3LDkgKzExNyw4IEBACiBzdGF0aWMgaW50IGFpb190aHJlYWQodm9pZCAqYXJnKQogewogICAgICAgICBzdHJ1Y3QgYWlvX3RocmVhZF9yZXBseSByZXBseTsKLSAgICAgICAgc3RydWN0IGFpb19jb250ZXh0ICphaW87CiAgICAgICAgIHN0cnVjdCBpb19ldmVudCBldmVudDsKLSAgICAgICAgaW50IGVyciwgbjsKKyAgICAgICAgaW50IGVyciwgbiwgcmVwbHlfZmQ7CiAKICAgICAgICAgc2lnbmFsKFNJR1dJTkNILCBTSUdfSUdOKTsKIApAQCAtMTQyLDIxICsxMzEsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJybm8gPSAlZFxuIiwgZXJybm8pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKLQkJCWFpbyA9IChzdHJ1Y3QgYWlvX2NvbnRleHQgKikgZXZlbnQuZGF0YTsKLQkJCWlmKHVwZGF0ZV9haW8oYWlvLCBldmVudC5yZXMpKXsKLQkJCQlkb19haW8oY3R4LCBhaW8pOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCiAgICAgICAgICAgICAgICAgICAgICAgICByZXBseSA9ICgoc3RydWN0IGFpb190aHJlYWRfcmVwbHkpCi0JCQkJeyAuZGF0YSA9IGFpbywKLQkJCQkgIC5lcnIJPSBhaW8tPmxlbiB9KTsKLQkJCWVyciA9IG9zX3dyaXRlX2ZpbGUoYWlvLT5yZXBseV9mZCwgJnJlcGx5LAotCQkJCQkgICAgc2l6ZW9mKHJlcGx5KSk7CisJCQkJIHsgLmRhdGEgPSAodm9pZCAqKSAobG9uZykgZXZlbnQuZGF0YSwKKwkJCQkgICAuZXJyCT0gZXZlbnQucmVzIH0pOworCQkJcmVwbHlfZmQgPSAoKHN0cnVjdCBhaW9fY29udGV4dCAqKSByZXBseS5kYXRhKS0+cmVwbHlfZmQ7CisJCQllcnIgPSBvc193cml0ZV9maWxlKHJlcGx5X2ZkLCAmcmVwbHksIHNpemVvZihyZXBseSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYoZXJyICE9IHNpemVvZihyZXBseSkpCi0JCQkJcHJpbnRrKCJhaW9fdGhyZWFkIC0gd3JpdGUgZmFpbGVkLCAiCi0JCQkJICAgICAgICJmZCA9ICVkLCBlcnIgPSAlZFxuIiwgYWlvLT5yZXBseV9mZCwKLQkJCQkgICAgICAgLWVycik7CisJCQkJcHJpbnRrKCJhaW9fdGhyZWFkIC0gd3JpdGUgZmFpbGVkLCBmZCA9ICVkLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyID0gJWRcbiIsIGFpb19yZXFfZmRfciwgLWVycik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTY0LDM1ICsxNDYsMzUgQEAKIAogI2VuZGlmCiAKLXN0YXRpYyBpbnQgZG9fbm90X2FpbyhzdHJ1Y3QgYWlvX2NvbnRleHQgKmFpbykKK3N0YXRpYyBpbnQgZG9fbm90X2FpbyhzdHJ1Y3QgYWlvX3RocmVhZF9yZXEgKnJlcSkKIHsKICAgICAgICAgY2hhciBjOwogICAgICAgICBpbnQgZXJyOwogCi0gICAgICAgIHN3aXRjaChhaW8tPnR5cGUpeworICAgICAgICBzd2l0Y2gocmVxLT50eXBlKXsKICAgICAgICAgY2FzZSBBSU9fUkVBRDoKLSAgICAgICAgICAgICAgICBlcnIgPSBvc19zZWVrX2ZpbGUoYWlvLT5mZCwgYWlvLT5vZmZzZXQpOworICAgICAgICAgICAgICAgIGVyciA9IG9zX3NlZWtfZmlsZShyZXEtPmlvX2ZkLCByZXEtPm9mZnNldCk7CiAgICAgICAgICAgICAgICAgaWYoZXJyKQogICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7CiAKLSAgICAgICAgICAgICAgICBlcnIgPSBvc19yZWFkX2ZpbGUoYWlvLT5mZCwgYWlvLT5kYXRhLCBhaW8tPmxlbik7CisgICAgICAgICAgICAgICAgZXJyID0gb3NfcmVhZF9maWxlKHJlcS0+aW9fZmQsIHJlcS0+YnVmLCByZXEtPmxlbik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQUlPX1dSSVRFOgotICAgICAgICAgICAgICAgIGVyciA9IG9zX3NlZWtfZmlsZShhaW8tPmZkLCBhaW8tPm9mZnNldCk7CisgICAgICAgICAgICAgICAgZXJyID0gb3Nfc2Vla19maWxlKHJlcS0+aW9fZmQsIHJlcS0+b2Zmc2V0KTsKICAgICAgICAgICAgICAgICBpZihlcnIpCiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsKIAotICAgICAgICAgICAgICAgIGVyciA9IG9zX3dyaXRlX2ZpbGUoYWlvLT5mZCwgYWlvLT5kYXRhLCBhaW8tPmxlbik7CisgICAgICAgICAgICAgICAgZXJyID0gb3Nfd3JpdGVfZmlsZShyZXEtPmlvX2ZkLCByZXEtPmJ1ZiwgcmVxLT5sZW4pOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFJT19NTUFQOgotICAgICAgICAgICAgICAgIGVyciA9IG9zX3NlZWtfZmlsZShhaW8tPmZkLCBhaW8tPm9mZnNldCk7CisgICAgICAgICAgICAgICAgZXJyID0gb3Nfc2Vla19maWxlKHJlcS0+aW9fZmQsIHJlcS0+b2Zmc2V0KTsKICAgICAgICAgICAgICAgICBpZihlcnIpCiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsKIAotICAgICAgICAgICAgICAgIGVyciA9IG9zX3JlYWRfZmlsZShhaW8tPmZkLCAmYywgc2l6ZW9mKGMpKTsKKyAgICAgICAgICAgICAgICBlcnIgPSBvc19yZWFkX2ZpbGUocmVxLT5pb19mZCwgJmMsIHNpemVvZihjKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcHJpbnRrKCJkb19ub3RfYWlvIC0gYmFkIHJlcXVlc3QgdHlwZSA6ICVkXG4iLCBhaW8tPnR5cGUpOworICAgICAgICAgICAgICAgIHByaW50aygiZG9fbm90X2FpbyAtIGJhZCByZXF1ZXN0IHR5cGUgOiAlZFxuIiwgcmVxLT50eXBlKTsKICAgICAgICAgICAgICAgICBlcnIgPSAtRUlOVkFMOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMDMsMTQgKzE4NSwxNCBAQAogCiBzdGF0aWMgaW50IG5vdF9haW9fdGhyZWFkKHZvaWQgKmFyZykKIHsKLSAgICAgICAgc3RydWN0IGFpb19jb250ZXh0ICphaW87CisgICAgICAgIHN0cnVjdCBhaW9fdGhyZWFkX3JlcSByZXE7CiAgICAgICAgIHN0cnVjdCBhaW9fdGhyZWFkX3JlcGx5IHJlcGx5OwogICAgICAgICBpbnQgZXJyOwogCiAgICAgICAgIHNpZ25hbChTSUdXSU5DSCwgU0lHX0lHTik7CiAgICAgICAgIHdoaWxlKDEpewotICAgICAgICAgICAgICAgIGVyciA9IG9zX3JlYWRfZmlsZShhaW9fcmVxX2ZkX3IsICZhaW8sIHNpemVvZihhaW8pKTsKLSAgICAgICAgICAgICAgICBpZihlcnIgIT0gc2l6ZW9mKGFpbykpeworICAgICAgICAgICAgICAgIGVyciA9IG9zX3JlYWRfZmlsZShhaW9fcmVxX2ZkX3IsICZyZXEsIHNpemVvZihyZXEpKTsKKyAgICAgICAgICAgICAgICBpZihlcnIgIT0gc2l6ZW9mKHJlcSkpewogICAgICAgICAgICAgICAgICAgICAgICAgaWYoZXJyIDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJub3RfYWlvX3RocmVhZCAtIHJlYWQgZmFpbGVkLCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmQgPSAlZCwgZXJyID0gJWRcbiIsIGFpb19yZXFfZmRfciwKQEAgLTIyMSwzNCArMjAzLDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9Ci0gYWdhaW46Ci0gICAgICAgICAgICAgICAgZXJyID0gZG9fbm90X2FpbyhhaW8pOwotCi0gICAgICAgICAgICAgICAgaWYodXBkYXRlX2FpbyhhaW8sIGVycikpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGFnYWluOwotCi0gICAgICAgICAgICAgICAgcmVwbHkgPSAoKHN0cnVjdCBhaW9fdGhyZWFkX3JlcGx5KSB7IC5kYXRhIAk9IGFpbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmVycgk9IGFpby0+bGVuIH0pOwotICAgICAgICAgICAgICAgIGVyciA9IG9zX3dyaXRlX2ZpbGUoYWlvLT5yZXBseV9mZCwgJnJlcGx5LCBzaXplb2YocmVwbHkpKTsKKyAgICAgICAgICAgICAgICBlcnIgPSBkb19ub3RfYWlvKCZyZXEpOworICAgICAgICAgICAgICAgIHJlcGx5ID0gKChzdHJ1Y3QgYWlvX3RocmVhZF9yZXBseSkgeyAuZGF0YSAJPSByZXEuYWlvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZXJyCT0gZXJyIH0pOworICAgICAgICAgICAgICAgIGVyciA9IG9zX3dyaXRlX2ZpbGUocmVxLmFpby0+cmVwbHlfZmQsICZyZXBseSwgc2l6ZW9mKHJlcGx5KSk7CiAgICAgICAgICAgICAgICAgaWYoZXJyICE9IHNpemVvZihyZXBseSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIm5vdF9haW9fdGhyZWFkIC0gd3JpdGUgZmFpbGVkLCBmZCA9ICVkLCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVyciA9ICVkXG4iLCBhaW9fcmVxX2ZkX3IsIC1lcnIpOwogICAgICAgICB9CiB9CiAKLXN0YXRpYyBpbnQgc3VibWl0X2Fpb18yNChzdHJ1Y3QgYWlvX2NvbnRleHQgKmFpbykKLXsKLSAgICAgICAgaW50IGVycjsKLQotICAgICAgICBlcnIgPSBvc193cml0ZV9maWxlKGFpb19yZXFfZmRfdywgJmFpbywgc2l6ZW9mKGFpbykpOwotICAgICAgICBpZihlcnIgPT0gc2l6ZW9mKGFpbykpCi0gICAgICAgICAgICAgICAgZXJyID0gMDsKLQotICAgICAgICByZXR1cm4gZXJyOwotfQotCiBzdGF0aWMgaW50IGFpb19waWQgPSAtMTsKLXN0YXRpYyBpbnQgKCpzdWJtaXRfcHJvYykoc3RydWN0IGFpb19jb250ZXh0ICphaW8pOwogCiBzdGF0aWMgaW50IGluaXRfYWlvXzI0KHZvaWQpCiB7CkBAIC0yODAsNjggKzI0NSw2NCBAQAogI2VuZGlmCiAJcHJpbnRrKCIyLjYgaG9zdCBBSU8gc3VwcG9ydCBub3QgdXNlZCAtIGZhbGxpbmcgYmFjayB0byBJL08gIgogCSAgICAgICAidGhyZWFkXG4iKTsKLQotCXN1Ym1pdF9wcm9jID0gc3VibWl0X2Fpb18yNDsKLQogICAgICAgICByZXR1cm4gMDsKIH0KIAogI2lmZGVmIEhBVkVfQUlPX0FCSQogI2RlZmluZSBERUZBVUxUXzI0X0FJTyAwCi1zdGF0aWMgaW50IHN1Ym1pdF9haW9fMjYoc3RydWN0IGFpb19jb250ZXh0ICphaW8pCi17Ci0Jc3RydWN0IGFpb190aHJlYWRfcmVwbHkgcmVwbHk7Ci0JaW50IGVycjsKLQotCWVyciA9IGRvX2FpbyhjdHgsIGFpbyk7Ci0JaWYoZXJyKXsKLQkJcmVwbHkgPSAoKHN0cnVjdCBhaW9fdGhyZWFkX3JlcGx5KSB7IC5kYXRhID0gYWlvLAotCQkJCQkgICAgICAgICAgICAgLmVyciAgPSBlcnIgfSk7Ci0JCWVyciA9IG9zX3dyaXRlX2ZpbGUoYWlvLT5yZXBseV9mZCwgJnJlcGx5LCBzaXplb2YocmVwbHkpKTsKLQkJaWYoZXJyICE9IHNpemVvZihyZXBseSkpCi0JCQlwcmludGsoInN1Ym1pdF9haW9fMjYgLSB3cml0ZSBmYWlsZWQsICIKLQkJCSAgICAgICAiZmQgPSAlZCwgZXJyID0gJWRcbiIsIGFpby0+cmVwbHlfZmQsIC1lcnIpOwotCQllbHNlIGVyciA9IDA7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQogc3RhdGljIGludCBpbml0X2Fpb18yNih2b2lkKQogewogICAgICAgICB1bnNpZ25lZCBsb25nIHN0YWNrOwogICAgICAgICBpbnQgZXJyOwogCiAgICAgICAgIGlmKGlvX3NldHVwKDI1NiwgJmN0eCkpeworCQllcnIgPSAtZXJybm87CiAgICAgICAgICAgICAgICAgcHJpbnRrKCJhaW9fdGhyZWFkIGZhaWxlZCB0byBpbml0aWFsaXplIGNvbnRleHQsIGVyciA9ICVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICBlcnJubyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1lcnJubzsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICB9CiAKICAgICAgICAgZXJyID0gcnVuX2hlbHBlcl90aHJlYWQoYWlvX3RocmVhZCwgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0xPTkVfRklMRVMgfCBDTE9ORV9WTSB8IFNJR0NITEQsICZzdGFjaywgMCk7CiAgICAgICAgIGlmKGVyciA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1lcnJubzsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogCiAgICAgICAgIGFpb19waWQgPSBlcnI7CiAKIAlwcmludGsoIlVzaW5nIDIuNiBob3N0IEFJT1xuIik7Ci0KLQlzdWJtaXRfcHJvYyA9IHN1Ym1pdF9haW9fMjY7Ci0KICAgICAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc3VibWl0X2Fpb18yNihlbnVtIGFpb190eXBlIHR5cGUsIGludCBpb19mZCwgY2hhciAqYnVmLCBpbnQgbGVuLAorCQkJIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsIHN0cnVjdCBhaW9fY29udGV4dCAqYWlvKQoreworICAgICAgICBzdHJ1Y3QgYWlvX3RocmVhZF9yZXBseSByZXBseTsKKyAgICAgICAgaW50IGVycjsKKworICAgICAgICBlcnIgPSBkb19haW8oY3R4LCB0eXBlLCBpb19mZCwgYnVmLCBsZW4sIG9mZnNldCwgYWlvKTsKKyAgICAgICAgaWYoZXJyKXsKKyAgICAgICAgICAgICAgICByZXBseSA9ICgoc3RydWN0IGFpb190aHJlYWRfcmVwbHkpIHsgLmRhdGEgPSBhaW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5lcnIgID0gZXJyIH0pOworICAgICAgICAgICAgICAgIGVyciA9IG9zX3dyaXRlX2ZpbGUoYWlvLT5yZXBseV9mZCwgJnJlcGx5LCBzaXplb2YocmVwbHkpKTsKKyAgICAgICAgICAgICAgICBpZihlcnIgIT0gc2l6ZW9mKHJlcGx5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygic3VibWl0X2Fpb18yNiAtIHdyaXRlIGZhaWxlZCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZCA9ICVkLCBlcnIgPSAlZFxuIiwgYWlvLT5yZXBseV9mZCwgLWVycik7CisgICAgICAgICAgICAgICAgZWxzZSBlcnIgPSAwOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGVycjsKK30KKwogI2Vsc2UKICNkZWZpbmUgREVGQVVMVF8yNF9BSU8gMQotc3RhdGljIGludCBzdWJtaXRfYWlvXzI2KHN0cnVjdCBhaW9fY29udGV4dCAqYWlvKQorc3RhdGljIGludCBpbml0X2Fpb18yNih2b2lkKQogewogICAgICAgICByZXR1cm4gLUVOT1NZUzsKIH0KIAotc3RhdGljIGludCBpbml0X2Fpb18yNih2b2lkKQorc3RhdGljIGludCBzdWJtaXRfYWlvXzI2KGVudW0gYWlvX3R5cGUgdHlwZSwgaW50IGlvX2ZkLCBjaGFyICpidWYsIGludCBsZW4sCisJCQkgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwgc3RydWN0IGFpb19jb250ZXh0ICphaW8pCiB7Ci0Jc3VibWl0X3Byb2MgPSBzdWJtaXRfYWlvXzI2OwogICAgICAgICByZXR1cm4gLUVOT1NZUzsKIH0KICNlbmRpZgpAQCAtNDA4LDcgKzM2OSwzMyBAQAogCiBfX3VtbF9leGl0Y2FsbChleGl0X2Fpbyk7CiAKLWludCBzdWJtaXRfYWlvKHN0cnVjdCBhaW9fY29udGV4dCAqYWlvKQorc3RhdGljIGludCBzdWJtaXRfYWlvXzI0KGVudW0gYWlvX3R5cGUgdHlwZSwgaW50IGlvX2ZkLCBjaGFyICpidWYsIGludCBsZW4sCisJCQkgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwgc3RydWN0IGFpb19jb250ZXh0ICphaW8pCiB7Ci0JcmV0dXJuICgqc3VibWl0X3Byb2MpKGFpbyk7CisgICAgICAgIHN0cnVjdCBhaW9fdGhyZWFkX3JlcSByZXEgPSB7IC50eXBlIAkJPSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaW9fZmQJCT0gaW9fZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5vZmZzZXQJCT0gb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVmCQk9IGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmxlbgkJPSBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5haW8JCT0gYWlvLAorICAgICAgICB9OworICAgICAgICBpbnQgZXJyOworCisgICAgICAgIGVyciA9IG9zX3dyaXRlX2ZpbGUoYWlvX3JlcV9mZF93LCAmcmVxLCBzaXplb2YocmVxKSk7CisgICAgICAgIGlmKGVyciA9PSBzaXplb2YocmVxKSkKKyAgICAgICAgICAgICAgICBlcnIgPSAwOworCisgICAgICAgIHJldHVybiBlcnI7Cit9CisKK2ludCBzdWJtaXRfYWlvKGVudW0gYWlvX3R5cGUgdHlwZSwgaW50IGlvX2ZkLCBjaGFyICpidWYsIGludCBsZW4sCisgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LCBpbnQgcmVwbHlfZmQsCisgICAgICAgICAgICAgICBzdHJ1Y3QgYWlvX2NvbnRleHQgKmFpbykKK3sKKyAgICAgICAgYWlvLT5yZXBseV9mZCA9IHJlcGx5X2ZkOworICAgICAgICBpZihhaW9fMjQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1Ym1pdF9haW9fMjQodHlwZSwgaW9fZmQsIGJ1ZiwgbGVuLCBvZmZzZXQsIGFpbyk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBzdWJtaXRfYWlvXzI2KHR5cGUsIGlvX2ZkLCBidWYsIGxlbiwgb2Zmc2V0LCBhaW8pOworICAgICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L2RyaXZlcnMvdHVudGFwX3VzZXIuYyBiL2FyY2gvdW0vb3MtTGludXgvZHJpdmVycy90dW50YXBfdXNlci5jCmluZGV4IDRiODNjNmMuLjRiYTliMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvZHJpdmVycy90dW50YXBfdXNlci5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvZHJpdmVycy90dW50YXBfdXNlci5jCkBAIC03NSw3ICs3NSw3IEBACiAJc3RydWN0IG1zZ2hkciBtc2c7CiAJc3RydWN0IGNtc2doZHIgKmNtc2c7CiAJc3RydWN0IGlvdmVjIGlvdjsKLQlpbnQgcGlkLCBuOworCWludCBwaWQsIG4sIGVycjsKIAogCXNwcmludGYodmVyc2lvbl9idWYsICIlZCIsIFVNTF9ORVRfVkVSU0lPTik7CiAKQEAgLTEwNSw5ICsxMDUsMTAgQEAKIAluID0gcmVjdm1zZyhtZSwgJm1zZywgMCk7CiAJKnVzZWRfb3V0ID0gbjsKIAlpZihuIDwgMCl7CisJCWVyciA9IC1lcnJubzsKIAkJcHJpbnRrKCJ0dW50YXBfb3Blbl90cmFtcCA6IHJlY3Ztc2cgZmFpbGVkIC0gZXJybm8gPSAlZFxuIiwgCiAJCSAgICAgICBlcnJubyk7Ci0JCXJldHVybigtZXJybm8pOworCQlyZXR1cm4gZXJyOwogCX0KIAlDQVRDSF9FSU5UUih3YWl0cGlkKHBpZCwgTlVMTCwgMCkpOwogCkBAIC0xNDcsOSArMTQ4LDEwIEBACiAJCWlmci5pZnJfZmxhZ3MgPSBJRkZfVEFQIHwgSUZGX05PX1BJOwogCQlzdHJsY3B5KGlmci5pZnJfbmFtZSwgcHJpLT5kZXZfbmFtZSwgc2l6ZW9mKGlmci5pZnJfbmFtZSkpOwogCQlpZihpb2N0bChwcmktPmZkLCBUVU5TRVRJRkYsICh2b2lkICopICZpZnIpIDwgMCl7CisJCQllcnIgPSAtZXJybm87CiAJCQlwcmludGsoIlRVTlNFVElGRiBmYWlsZWQsIGVycm5vID0gJWRcbiIsIGVycm5vKTsKIAkJCW9zX2Nsb3NlX2ZpbGUocHJpLT5mZCk7Ci0JCQlyZXR1cm4oLWVycm5vKTsKKwkJCXJldHVybiBlcnI7CiAJCX0KIAl9CiAJZWxzZSB7CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L2VsZl9hdXguYyBiL2FyY2gvdW0vb3MtTGludXgvZWxmX2F1eC5jCmluZGV4IDEzOTk1MjAuLjVhOTlkZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvZWxmX2F1eC5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvZWxmX2F1eC5jCkBAIC0xMiw5ICsxMiwxMCBAQAogI2luY2x1ZGUgImluaXQuaCIKICNpbmNsdWRlICJlbGZfdXNlci5oIgogI2luY2x1ZGUgIm1lbV91c2VyLmgiCi0jaW5jbHVkZSA8a2VybmVsLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxrZXJuX2NvbnN0YW50cy5oPgogCi0jaWYgSE9TVF9FTEZfQ0xBU1MgPT0gRUxGQ0xBU1MzMgorLyogVXNlIHRoZSBvbmUgZnJvbSB0aGUga2VybmVsIC0gdGhlIGhvc3QgbWF5IG1pc3MgaXQsIGlmIGhhdmluZyBvbGQgaGVhZGVycy4gKi8KKyNpZiBVTV9FTEZfQ0xBU1MgPT0gVU1fRUxGQ0xBU1MzMgogdHlwZWRlZiBFbGYzMl9hdXh2X3QgZWxmX2F1eHZfdDsKICNlbHNlCiB0eXBlZGVmIEVsZjY0X2F1eHZfdCBlbGZfYXV4dl90OwpAQCAtNTQsNyArNTUsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhX3VuLCBzbyB3ZSBoYXZlIHRvIHVzZSBhX3ZhbCwgd2hpY2ggaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYWxsIHRoYXQncyBsZWZ0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQkJCQllbGZfYXV4X3BsYXRmb3JtID0gKGNoYXIgKikgYXV4di0+YV91bi5hX3ZhbDsKKwkJCQllbGZfYXV4X3BsYXRmb3JtID0KKwkJCQkJKGNoYXIgKikgKGxvbmcpIGF1eHYtPmFfdW4uYV92YWw7CiAJCQkJYnJlYWs7CiAJCQljYXNlIEFUX1BBR0VTWjoKIAkJCQlwYWdlX3NpemUgPSBhdXh2LT5hX3VuLmFfdmFsOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9maWxlLmMgYi9hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYwppbmRleCBmZDQ1YmIyLi5mNTU3NzNjIDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYworKysgYi9hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYwpAQCAtMTE5LDE1ICsxMTksMTEgQEAKIAogaW50IG9zX25ld190dHlfcGdycChpbnQgZmQsIGludCBwaWQpCiB7Ci0JaWYoaW9jdGwoZmQsIFRJT0NTQ1RUWSwgMCkgPCAwKXsKLQkJcHJpbnRrKCJUSU9DU0NUVFkgZmFpbGVkLCBlcnJubyA9ICVkXG4iLCBlcnJubyk7Ci0JCXJldHVybigtZXJybm8pOwotCX0KKwlpZihpb2N0bChmZCwgVElPQ1NDVFRZLCAwKSA8IDApCisJCXJldHVybiAtZXJybm87CiAKLQlpZih0Y3NldHBncnAoZmQsIHBpZCkgPCAwKXsKLQkJcHJpbnRrKCJ0Y3NldHBncnAgZmFpbGVkLCBlcnJubyA9ICVkXG4iLCBlcnJubyk7Ci0JCXJldHVybigtZXJybm8pOwotCX0KKwlpZih0Y3NldHBncnAoZmQsIHBpZCkgPCAwKQorCQlyZXR1cm4gLWVycm5vOwogCiAJcmV0dXJuKDApOwogfQpAQCAtMTQ2LDE4ICsxNDIsMTIgQEAKIAlpbnQgZGlzYywgc2VuY2FwOwogCiAJZGlzYyA9IE5fU0xJUDsKLQlpZihpb2N0bChmZCwgVElPQ1NFVEQsICZkaXNjKSA8IDApewotCQlwcmludGsoIkZhaWxlZCB0byBzZXQgc2xpcCBsaW5lIGRpc2NpcGxpbmUgLSAiCi0JCSAgICAgICAiZXJybm8gPSAlZFxuIiwgZXJybm8pOwotCQlyZXR1cm4oLWVycm5vKTsKLQl9CisJaWYoaW9jdGwoZmQsIFRJT0NTRVRELCAmZGlzYykgPCAwKQorCQlyZXR1cm4gLWVycm5vOwogCiAJc2VuY2FwID0gMDsKLQlpZihpb2N0bChmZCwgU0lPQ1NJRkVOQ0FQLCAmc2VuY2FwKSA8IDApewotCQlwcmludGsoIkZhaWxlZCB0byBzZXQgc2xpcCBlbmNhcHN1bGF0aW9uIC0gIgotCQkgICAgICAgImVycm5vID0gJWRcbiIsIGVycm5vKTsKLQkJcmV0dXJuKC1lcnJubyk7Ci0JfQorCWlmKGlvY3RsKGZkLCBTSU9DU0lGRU5DQVAsICZzZW5jYXApIDwgMCkKKwkJcmV0dXJuIC1lcnJubzsKIAogCXJldHVybigwKTsKIH0KQEAgLTE4MCwyMiArMTcwLDE1IEBACiAJaW50IGZsYWdzOwogCiAJZmxhZ3MgPSBmY250bChtYXN0ZXIsIEZfR0VURkwpOwotCWlmKGZsYWdzIDwgMCkgewotCQlwcmludGsoImZjbnRsIEZfR0VURkwgZmFpbGVkLCBlcnJubyA9ICVkXG4iLCBlcnJubyk7Ci0JCXJldHVybigtZXJybm8pOwotCX0KKwlpZihmbGFncyA8IDApCisJCXJldHVybiBlcnJubzsKIAogCWlmKChmY250bChtYXN0ZXIsIEZfU0VURkwsIGZsYWdzIHwgT19OT05CTE9DSyB8IE9fQVNZTkMpIDwgMCkgfHwKLQkgICAoZmNudGwobWFzdGVyLCBGX1NFVE9XTiwgb3NfZ2V0cGlkKCkpIDwgMCkpewotCQlwcmludGsoImZjbnRsIEZfU0VURkwgb3IgRl9TRVRPV04gZmFpbGVkLCBlcnJubyA9ICVkXG4iLAotCQkgICAgICAgZXJybm8pOwotCQlyZXR1cm4oLWVycm5vKTsKLQl9CisJICAgKGZjbnRsKG1hc3RlciwgRl9TRVRPV04sIG9zX2dldHBpZCgpKSA8IDApKQorCQlyZXR1cm4gLWVycm5vOwogCi0JaWYoKGZjbnRsKHNsYXZlLCBGX1NFVEZMLCBmbGFncyB8IE9fTk9OQkxPQ0spIDwgMCkpewotCQlwcmludGsoImZjbnRsIEZfU0VURkwgZmFpbGVkLCBlcnJubyA9ICVkXG4iLCBlcnJubyk7Ci0JCXJldHVybigtZXJybm8pOwotCX0KKwlpZigoZmNudGwoc2xhdmUsIEZfU0VURkwsIGZsYWdzIHwgT19OT05CTE9DSykgPCAwKSkKKwkJcmV0dXJuIC1lcnJubzsKIAogCXJldHVybigwKTsKIH0KQEAgLTI1NSw3ICsyMzgsNyBAQAogCiBpbnQgb3Nfb3Blbl9maWxlKGNoYXIgKmZpbGUsIHN0cnVjdCBvcGVuZmxhZ3MgZmxhZ3MsIGludCBtb2RlKQogewotCWludCBmZCwgZiA9IDA7CisJaW50IGZkLCBlcnIsIGYgPSAwOwogCiAJaWYoZmxhZ3MuciAmJiBmbGFncy53KSBmID0gT19SRFdSOwogCWVsc2UgaWYoZmxhZ3MucikgZiA9IE9fUkRPTkxZOwpAQCAtMjcyLDggKzI1NSw5IEBACiAJCXJldHVybigtZXJybm8pOwogCiAJaWYoZmxhZ3MuY2wgJiYgZmNudGwoZmQsIEZfU0VURkQsIDEpKXsKKwkJZXJyID0gLWVycm5vOwogCQlvc19jbG9zZV9maWxlKGZkKTsKLQkJcmV0dXJuKC1lcnJubyk7CisJCXJldHVybiBlcnI7CiAJfQogCiAJcmV0dXJuKGZkKTsKQEAgLTM4Myw5ICszNjcsOSBAQAogCQkJcmV0dXJuKGZkKTsKIAkJfQogCQlpZihpb2N0bChmZCwgQkxLR0VUU0laRSwgJmJsb2NrcykgPCAwKXsKKwkJCWVyciA9IC1lcnJubzsKIAkJCXByaW50aygiQ291bGRuJ3QgZ2V0IHRoZSBibG9jayBzaXplIG9mIFwiJXNcIiwgIgogCQkJICAgICAgICJlcnJubyA9ICVkXG4iLCBmaWxlLCBlcnJubyk7Ci0JCQllcnIgPSAtZXJybm87CiAJCQlvc19jbG9zZV9maWxlKGZkKTsKIAkJCXJldHVybihlcnIpOwogCQl9CkBAIC00NzMsMTEgKzQ1NywxNCBAQAogCiBpbnQgb3Nfc2V0X2ZkX2FzeW5jKGludCBmZCwgaW50IG93bmVyKQogeworCWludCBlcnI7CisKIAkvKiBYWFggVGhpcyBzaG91bGQgZG8gRl9HRVRGTCBmaXJzdCAqLwogCWlmKGZjbnRsKGZkLCBGX1NFVEZMLCBPX0FTWU5DIHwgT19OT05CTE9DSykgPCAwKXsKKwkJZXJyID0gLWVycm5vOwogCQlwcmludGsoIm9zX3NldF9mZF9hc3luYyA6IGZhaWxlZCB0byBzZXQgT19BU1lOQyBhbmQgIgogCQkgICAgICAgIk9fTk9OQkxPQ0sgb24gZmQgIyAlZCwgZXJybm8gPSAlZFxuIiwgZmQsIGVycm5vKTsKLQkJcmV0dXJuKC1lcnJubyk7CisJCXJldHVybiBlcnI7CiAJfQogI2lmZGVmIG5vdGRlZgogCWlmKGZjbnRsKGZkLCBGX1NFVEZELCAxKSA8IDApewpAQCAtNDg4LDEwICs0NzUsMTEgQEAKIAogCWlmKChmY250bChmZCwgRl9TRVRTSUcsIFNJR0lPKSA8IDApIHx8CiAJICAgKGZjbnRsKGZkLCBGX1NFVE9XTiwgb3duZXIpIDwgMCkpeworCQllcnIgPSAtZXJybm87CiAJCXByaW50aygib3Nfc2V0X2ZkX2FzeW5jIDogRmFpbGVkIHRvIGZjbnRsIEZfU0VUT1dOICIKIAkJICAgICAgICIob3IgRl9TRVRTSUcpIGZkICVkIHRvIHBpZCAlZCwgZXJybm8gPSAlZFxuIiwgZmQsIAogCQkgICAgICAgb3duZXIsIGVycm5vKTsKLQkJcmV0dXJuKC1lcnJubyk7CisJCXJldHVybiBlcnI7CiAJfQogCiAJcmV0dXJuKDApOwpAQCAtNTE2LDExICs1MDQsOSBAQAogCWlmKGJsb2NraW5nKSBmbGFncyAmPSB+T19OT05CTE9DSzsKIAllbHNlIGZsYWdzIHw9IE9fTk9OQkxPQ0s7CiAKLQlpZihmY250bChmZCwgRl9TRVRGTCwgZmxhZ3MpIDwgMCl7Ci0JCXByaW50aygiRmFpbGVkIHRvIGNoYW5nZSBibG9ja2luZyBvbiBmZCAjICVkLCBlcnJubyA9ICVkXG4iLAotCQkgICAgICAgZmQsIGVycm5vKTsKLQkJcmV0dXJuKC1lcnJubyk7Ci0JfQorCWlmKGZjbnRsKGZkLCBGX1NFVEZMLCBmbGFncykgPCAwKQorCQlyZXR1cm4gLWVycm5vOworCiAJcmV0dXJuKDApOwogfQogCkBAIC02MDksMTEgKzU5NSw4IEBACiAJaW50IHNvY2ssIGVycjsKIAogCXNvY2sgPSBzb2NrZXQoUEZfVU5JWCwgU09DS19ER1JBTSwgMCk7Ci0JaWYgKHNvY2sgPCAwKXsKLQkJcHJpbnRrKCJjcmVhdGVfdW5peF9zb2NrZXQgLSBzb2NrZXQgZmFpbGVkLCBlcnJubyA9ICVkXG4iLAotCQkgICAgICAgZXJybm8pOwotCQlyZXR1cm4oLWVycm5vKTsKLQl9CisJaWYoc29jayA8IDApCisJCXJldHVybiAtZXJybm87CiAKIAlpZihjbG9zZV9vbl9leGVjKSB7CiAJCWVyciA9IG9zX3NldF9leGVjX2Nsb3NlKHNvY2ssIDEpOwpAQCAtNjI4LDExICs2MTEsOCBAQAogCXNucHJpbnRmKGFkZHIuc3VuX3BhdGgsIGxlbiwgIiVzIiwgZmlsZSk7CiAKIAllcnIgPSBiaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsIHNpemVvZihhZGRyKSk7Ci0JaWYgKGVyciA8IDApewotCQlwcmludGsoImNyZWF0ZV9saXN0ZW5pbmdfc29ja2V0IGF0ICclcycgLSBiaW5kIGZhaWxlZCwgIgotCQkgICAgICAgImVycm5vID0gJWRcbiIsIGZpbGUsIGVycm5vKTsKLQkJcmV0dXJuKC1lcnJubyk7Ci0JfQorCWlmKGVyciA8IDApCisJCXJldHVybiAtZXJybm87CiAKIAlyZXR1cm4oc29jayk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L21lbS5jIGIvYXJjaC91bS9vcy1MaW51eC9tZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTcxZWRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9vcy1MaW51eC9tZW0uYwpAQCAtMCwwICsxLDE2MSBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSAia2Vybl91dGlsLmgiCisjaW5jbHVkZSAidXNlci5oIgorI2luY2x1ZGUgInVzZXJfdXRpbC5oIgorI2luY2x1ZGUgIm1lbV91c2VyLmgiCisjaW5jbHVkZSAiaW5pdC5oIgorI2luY2x1ZGUgIm9zLmgiCisjaW5jbHVkZSAidGVtcGZpbGUuaCIKKyNpbmNsdWRlICJrZXJuX2NvbnN0YW50cy5oIgorCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisKK3N0YXRpYyBjaGFyICp0ZW1wZGlyID0gTlVMTDsKKworc3RhdGljIHZvaWQgX19pbml0IGZpbmRfdGVtcGRpcih2b2lkKQoreworCWNoYXIgKmRpcnNbXSA9IHsgIlRNUCIsICJURU1QIiwgIlRNUERJUiIsIE5VTEwgfTsKKwlpbnQgaTsKKwljaGFyICpkaXIgPSBOVUxMOworCisJaWYodGVtcGRpciAhPSBOVUxMKSByZXR1cm47CS8qIFdlJ3ZlIGFscmVhZHkgYmVlbiBjYWxsZWQgKi8KKwlmb3IoaSA9IDA7IGRpcnNbaV07IGkrKyl7CisJCWRpciA9IGdldGVudihkaXJzW2ldKTsKKwkJaWYoKGRpciAhPSBOVUxMKSAmJiAoKmRpciAhPSAnXDAnKSkKKwkJCWJyZWFrOworCX0KKwlpZigoZGlyID09IE5VTEwpIHx8ICgqZGlyID09ICdcMCcpKQorCQlkaXIgPSAiL3RtcCI7CisKKwl0ZW1wZGlyID0gbWFsbG9jKHN0cmxlbihkaXIpICsgMik7CisJaWYodGVtcGRpciA9PSBOVUxMKXsKKwkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gbWFsbG9jIHRlbXBkaXIsICIKKwkJCSJlcnJubyA9ICVkXG4iLCBlcnJubyk7CisJCXJldHVybjsKKwl9CisJc3RyY3B5KHRlbXBkaXIsIGRpcik7CisJc3RyY2F0KHRlbXBkaXIsICIvIik7Cit9CisKKy8qCisgKiBUaGlzIHByb2Mgc3RpbGwgdXNlZCBpbiB0dC1tb2RlCisgKiAoZmlsZToga2VybmVsL3R0L3B0cHJveHkvcHJveHkuYywgcHJvYzogc3RhcnRfZGVidWdnZXIpLgorICogU28gaXQgaXNuJ3QgJ3N0YXRpYycgeWV0LgorICovCitpbnQgbWFrZV90ZW1wZmlsZShjb25zdCBjaGFyICp0ZW1wbGF0ZSwgY2hhciAqKm91dF90ZW1wbmFtZSwgaW50IGRvX3VubGluaykKK3sKKwljaGFyIHRlbXBuYW1lW01BWFBBVEhMRU5dOworCWludCBmZDsKKworCWZpbmRfdGVtcGRpcigpOworCWlmICgqdGVtcGxhdGUgIT0gJy8nKQorCQlzdHJjcHkodGVtcG5hbWUsIHRlbXBkaXIpOworCWVsc2UKKwkJKnRlbXBuYW1lID0gMDsKKwlzdHJjYXQodGVtcG5hbWUsIHRlbXBsYXRlKTsKKwlmZCA9IG1rc3RlbXAodGVtcG5hbWUpOworCWlmKGZkIDwgMCl7CisJCWZwcmludGYoc3RkZXJyLCAib3BlbiAtIGNhbm5vdCBjcmVhdGUgJXM6ICVzXG4iLCB0ZW1wbmFtZSwKKwkJCXN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybiAtMTsKKwl9CisJaWYoZG9fdW5saW5rICYmICh1bmxpbmsodGVtcG5hbWUpIDwgMCkpeworCQlwZXJyb3IoInVubGluayIpOworCQlyZXR1cm4gLTE7CisJfQorCWlmKG91dF90ZW1wbmFtZSl7CisJCSpvdXRfdGVtcG5hbWUgPSBzdHJkdXAodGVtcG5hbWUpOworCQlpZigqb3V0X3RlbXBuYW1lID09IE5VTEwpeworCQkJcGVycm9yKCJzdHJkdXAiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlyZXR1cm4oZmQpOworfQorCisjZGVmaW5lIFRFTVBOQU1FX1RFTVBMQVRFICJ2bV9maWxlLVhYWFhYWCIKKworLyoKKyAqIFRoaXMgcHJvYyBpcyB1c2VkIGluIHN0YXJ0X3VwLmMKKyAqIFNvIGl0IGlzbid0ICdzdGF0aWMnLgorICovCitpbnQgY3JlYXRlX3RtcF9maWxlKHVuc2lnbmVkIGxvbmcgbGVuKQoreworCWludCBmZCwgZXJyOworCWNoYXIgemVybzsKKworCWZkID0gbWFrZV90ZW1wZmlsZShURU1QTkFNRV9URU1QTEFURSwgTlVMTCwgMSk7CisJaWYoZmQgPCAwKSB7CisJCWV4aXQoMSk7CisJfQorCisJZXJyID0gZmNobW9kKGZkLCAwNzc3KTsKKwlpZihlcnIgPCAwKXsKKwkJcGVycm9yKCJvc19tb2RlX2ZkIik7CisJCWV4aXQoMSk7CisJfQorCisgICAgICAgIGlmIChsc2VlazY0KGZkLCBsZW4sIFNFRUtfU0VUKSA8IDApIHsKKyAJCXBlcnJvcigib3Nfc2Vla19maWxlIik7CisJCWV4aXQoMSk7CisJfQorCisJemVybyA9IDA7CisKKwllcnIgPSBvc193cml0ZV9maWxlKGZkLCAmemVybywgMSk7CisJaWYoZXJyICE9IDEpeworCQllcnJubyA9IC1lcnI7CisJCXBlcnJvcigib3Nfd3JpdGVfZmlsZSIpOworCQlleGl0KDEpOworCX0KKworCXJldHVybihmZCk7Cit9CisKK3N0YXRpYyBpbnQgY3JlYXRlX2Fub25fZmlsZSh1bnNpZ25lZCBsb25nIGxlbikKK3sKKwl2b2lkICphZGRyOworCWludCBmZDsKKworCWZkID0gb3BlbigiL2Rldi9hbm9uIiwgT19SRFdSKTsKKwlpZihmZCA8IDApIHsKKwkJcGVycm9yKCJvcGVuaW5nIC9kZXYvYW5vbiIpOworCQlleGl0KDEpOworCX0KKworCWFkZHIgPSBtbWFwKE5VTEwsIGxlbiwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKwlpZihhZGRyID09IE1BUF9GQUlMRUQpeworCQlwZXJyb3IoIm1hcHBpbmcgcGh5c21lbSBmaWxlIik7CisJCWV4aXQoMSk7CisJfQorCW11bm1hcChhZGRyLCBsZW4pOworCisJcmV0dXJuKGZkKTsKK30KKworZXh0ZXJuIGludCBoYXZlX2RldmFub247CisKK2ludCBjcmVhdGVfbWVtX2ZpbGUodW5zaWduZWQgbG9uZyBsZW4pCit7CisJaW50IGVyciwgZmQ7CisKKwlpZihoYXZlX2RldmFub24pCisJCWZkID0gY3JlYXRlX2Fub25fZmlsZShsZW4pOworCWVsc2UgZmQgPSBjcmVhdGVfdG1wX2ZpbGUobGVuKTsKKworCWVyciA9IG9zX3NldF9leGVjX2Nsb3NlKGZkLCAxKTsKKwlpZihlcnIgPCAwKXsKKwkJZXJybm8gPSAtZXJyOworCQlwZXJyb3IoImV4ZWNfY2xvc2UiKTsKKwl9CisJcmV0dXJuKGZkKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvcHJvY2Vzcy5jIGIvYXJjaC91bS9vcy1MaW51eC9wcm9jZXNzLmMKaW5kZXggZDMyNDEzZS4uZDljNTIzOCAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9wcm9jZXNzLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9wcm9jZXNzLmMKQEAgLTMsNiArMyw3IEBACiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCiAgKi8KIAorI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvc3RhcnRfdXAuYyBiL2FyY2gvdW0vb3MtTGludXgvc3RhcnRfdXAuYwppbmRleCAwNDBjYzE0Li5iOTlhYjQxIDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3N0YXJ0X3VwLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9zdGFydF91cC5jCkBAIC00LDE4ICs0LDIyIEBACiAgKi8KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8c2NoZWQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c2V0am1wLmg+CiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KICNpbmNsdWRlIDxzeXMvd2FpdC5oPgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSAidXNlcl91dGlsLmgiCiAjaW5jbHVkZSAia2Vybl91dGlsLmgiCiAjaW5jbHVkZSAidXNlci5oIgpAQCAtMjUsNiArMjksNyBAQAogI2luY2x1ZGUgInN5c2RlcC9zaWdjb250ZXh0LmgiCiAjaW5jbHVkZSAiaXJxX3VzZXIuaCIKICNpbmNsdWRlICJwdHJhY2VfdXNlci5oIgorI2luY2x1ZGUgIm1lbV91c2VyLmgiCiAjaW5jbHVkZSAidGltZV91c2VyLmgiCiAjaW5jbHVkZSAiaW5pdC5oIgogI2luY2x1ZGUgIm9zLmgiCkBAIC0zMiw2ICszNyw4IEBACiAjaW5jbHVkZSAiY2hvb3NlLW1vZGUuaCIKICNpbmNsdWRlICJtb2RlLmgiCiAjaW5jbHVkZSAidGVtcGZpbGUuaCIKKyNpbmNsdWRlICJrZXJuX2NvbnN0YW50cy5oIgorCiAjaWZkZWYgVU1MX0NPTkZJR19NT0RFX1NLQVMKICNpbmNsdWRlICJza2FzLmgiCiAjaW5jbHVkZSAic2thc19wdHJhY2UuaCIKQEAgLTEzNiwxMSArMTQzLDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIFRoZSB0d28gX191bWxfc2V0dXAgd291bGQgY29uZmxpY3QsIHdpdGhvdXQgdGhpcyBzdHVwaWQgYWxpYXMuICovCisKK3N0YXRpYyBpbnQgX19pbml0IG1vZGVfc2thczBfY21kX3BhcmFtKGNoYXIgKnN0ciwgaW50KiBhZGQpCisJX19hdHRyaWJ1dGVfXygoYWxpYXMoInNrYXMwX2NtZF9wYXJhbSIpKSk7CisKIF9fdW1sX3NldHVwKCJza2FzMCIsIHNrYXMwX2NtZF9wYXJhbSwKIAkJInNrYXMwXG4iCiAJCSIgICAgRGlzYWJsZXMgU0tBUzMgdXNhZ2UsIHNvIHRoYXQgU0tBUzAgaXMgdXNlZCwgdW5sZXNzIFxuIgogCSAgICAgICAgIiAgICB5b3Ugc3BlY2lmeSBtb2RlPXR0LlxuXG4iKTsKIAorX191bWxfc2V0dXAoIm1vZGU9c2thczAiLCBtb2RlX3NrYXMwX2NtZF9wYXJhbSwKKwkJIm1vZGU9c2thczBcbiIKKwkJIiAgICBEaXNhYmxlcyBTS0FTMyB1c2FnZSwgc28gdGhhdCBTS0FTMCBpcyB1c2VkLCB1bmxlc3MgeW91IFxuIgorCQkiICAgIHNwZWNpZnkgbW9kZT10dC4gTm90ZSB0aGF0IHRoaXMgd2FzIHJlY2VudGx5IGFkZGVkIC0gb24gXG4iCisJCSIgICAgb2xkZXIga2VybmVscyB5b3UgbXVzdCB1c2Ugc2ltcGx5IFwic2thczBcIi5cblxuIik7CisKIHN0YXRpYyBpbnQgZm9yY2Vfc3lzZW11X2Rpc2FibGVkID0gMDsKIAogc3RhdGljIGludCBfX2luaXQgbm9zeXNlbXVfY21kX3BhcmFtKGNoYXIgKnN0ciwgaW50KiBhZGQpCkBAIC0yNzYsOSArMjk0LDM4IEBACiAJY2hlY2tfc3lzZW11KCk7CiB9CiAKK2V4dGVybiBpbnQgY3JlYXRlX3RtcF9maWxlKHVuc2lnbmVkIGxvbmcgbGVuKTsKKworc3RhdGljIHZvaWQgY2hlY2tfdG1wZXhlYyh2b2lkKQoreworCXZvaWQgKmFkZHI7CisJaW50IGVyciwgZmQgPSBjcmVhdGVfdG1wX2ZpbGUoVU1fS0VSTl9QQUdFX1NJWkUpOworCisJYWRkciA9IG1tYXAoTlVMTCwgVU1fS0VSTl9QQUdFX1NJWkUsCisJCSAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFIHwgUFJPVF9FWEVDLCBNQVBfUFJJVkFURSwgZmQsIDApOworCXByaW50ZigiQ2hlY2tpbmcgUFJPVF9FWEVDIG1tYXAgaW4gL3RtcC4uLiIpOworCWZmbHVzaChzdGRvdXQpOworCWlmKGFkZHIgPT0gTUFQX0ZBSUxFRCl7CisJCWVyciA9IGVycm5vOworCQlwZXJyb3IoImZhaWxlZCIpOworCQlpZihlcnIgPT0gRVBFUk0pCisJCQlwcmludGYoIi90bXAgbXVzdCBiZSBub3QgbW91bnRlZCBub2V4ZWNcbiIpOworCQlleGl0KDEpOworCX0KKwlwcmludGYoIk9LXG4iKTsKKwltdW5tYXAoYWRkciwgVU1fS0VSTl9QQUdFX1NJWkUpOworCisJY2xvc2UoZmQpOworfQorCiB2b2lkIG9zX2Vhcmx5X2NoZWNrcyh2b2lkKQogewogCWNoZWNrX3B0cmFjZSgpOworCisJLyogTmVlZCB0byBjaGVjayB0aGlzIGVhcmx5IGJlY2F1c2UgbW1hcHBpbmcgaGFwcGVucyBiZWZvcmUgdGhlCisJICoga2VybmVsIGlzIHJ1bm5pbmcuCisJICovCisJY2hlY2tfdG1wZXhlYygpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBub3Byb2NtbV9jbWRfcGFyYW0oY2hhciAqc3RyLCBpbnQqIGFkZCkKQEAgLTM1NywzICs0MDQsNzIgQEAKIAlyZXR1cm4oMCk7CiB9CiAjZW5kaWYKKworaW50IGhhdmVfZGV2YW5vbiA9IDA7CisKK3ZvaWQgY2hlY2tfZGV2YW5vbih2b2lkKQoreworCWludCBmZDsKKworCXByaW50aygiQ2hlY2tpbmcgZm9yIC9kZXYvYW5vbiBvbiB0aGUgaG9zdC4uLiIpOworCWZkID0gb3BlbigiL2Rldi9hbm9uIiwgT19SRFdSKTsKKwlpZihmZCA8IDApeworCQlwcmludGsoIk5vdCBhdmFpbGFibGUgKG9wZW4gZmFpbGVkIHdpdGggZXJybm8gJWQpXG4iLCBlcnJubyk7CisJCXJldHVybjsKKwl9CisKKwlwcmludGsoIk9LXG4iKTsKKwloYXZlX2RldmFub24gPSAxOworfQorCitpbnQgX19pbml0IHBhcnNlX2lvbWVtKGNoYXIgKnN0ciwgaW50ICphZGQpCit7CisJc3RydWN0IGlvbWVtX3JlZ2lvbiAqbmV3OworCXN0cnVjdCB1bWxfc3RhdCBidWY7CisJY2hhciAqZmlsZSwgKmRyaXZlcjsKKwlpbnQgZmQsIGVyciwgc2l6ZTsKKworCWRyaXZlciA9IHN0cjsKKwlmaWxlID0gc3RyY2hyKHN0ciwnLCcpOworCWlmKGZpbGUgPT0gTlVMTCl7CisJCXByaW50ZigicGFyc2VfaW9tZW0gOiBmYWlsZWQgdG8gcGFyc2UgaW9tZW1cbiIpOworCQlnb3RvIG91dDsKKwl9CisJKmZpbGUgPSAnXDAnOworCWZpbGUrKzsKKwlmZCA9IG9zX29wZW5fZmlsZShmaWxlLCBvZl9yZHdyKE9QRU5GTEFHUygpKSwgMCk7CisJaWYoZmQgPCAwKXsKKwkJb3NfcHJpbnRfZXJyb3IoZmQsICJwYXJzZV9pb21lbSAtIENvdWxkbid0IG9wZW4gaW8gZmlsZSIpOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBvc19zdGF0X2ZkKGZkLCAmYnVmKTsKKwlpZihlcnIgPCAwKXsKKwkJb3NfcHJpbnRfZXJyb3IoZXJyLCAicGFyc2VfaW9tZW0gLSBjYW5ub3Qgc3RhdF9mZCBmaWxlIik7CisJCWdvdG8gb3V0X2Nsb3NlOworCX0KKworCW5ldyA9IG1hbGxvYyhzaXplb2YoKm5ldykpOworCWlmKG5ldyA9PSBOVUxMKXsKKwkJcGVycm9yKCJDb3VsZG4ndCBhbGxvY2F0ZSBpb21lbV9yZWdpb24gc3RydWN0Iik7CisJCWdvdG8gb3V0X2Nsb3NlOworCX0KKworCXNpemUgPSAoYnVmLnVzdF9zaXplICsgVU1fS0VSTl9QQUdFX1NJWkUpICYgfihVTV9LRVJOX1BBR0VfU0laRSAtIDEpOworCisJKm5ldyA9ICgoc3RydWN0IGlvbWVtX3JlZ2lvbikgeyAubmV4dAkJPSBpb21lbV9yZWdpb25zLAorCQkJCQkuZHJpdmVyCQk9IGRyaXZlciwKKwkJCQkJLmZkCQk9IGZkLAorCQkJCQkuc2l6ZQkJPSBzaXplLAorCQkJCQkucGh5cwkJPSAwLAorCQkJCQkudmlydAkJPSAwIH0pOworCWlvbWVtX3JlZ2lvbnMgPSBuZXc7CisJaW9tZW1fc2l6ZSArPSBuZXctPnNpemUgKyBVTV9LRVJOX1BBR0VfU0laRTsKKworCXJldHVybigwKTsKKyBvdXRfY2xvc2U6CisJb3NfY2xvc2VfZmlsZShmZCk7Cisgb3V0OgorCXJldHVybigxKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9zeXMtaTM4Ni9yZWdpc3RlcnMuYyBiL2FyY2gvdW0vb3MtTGludXgvc3lzLWkzODYvcmVnaXN0ZXJzLmMKaW5kZXggMzEyNWQzMi4uYWVlNDgxMiAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9zeXMtaTM4Ni9yZWdpc3RlcnMuYworKysgYi9hcmNoL3VtL29zLUxpbnV4L3N5cy1pMzg2L3JlZ2lzdGVycy5jCkBAIC01LDYgKzUsNyBAQAogCiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzZXRqbXAuaD4KICNpbmNsdWRlICJzeXNkZXAvcHRyYWNlX3VzZXIuaCIKICNpbmNsdWRlICJzeXNkZXAvcHRyYWNlLmgiCiAjaW5jbHVkZSAidW1sLWNvbmZpZy5oIgpAQCAtMTI2LDEzICsxMjcsMTEgQEAKIAltZW1jcHkocmVncywgZXhlY19yZWdzLCBIT1NUX0ZSQU1FX1NJWkUgKiBzaXplb2YodW5zaWduZWQgbG9uZykpOwogfQogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwordm9pZCBnZXRfdGhyZWFkX3JlZ3ModW5pb24gdW1sX3B0X3JlZ3MgKnVtbF9yZWdzLCB2b2lkICpidWZmZXIpCit7CisJc3RydWN0IF9fam1wX2J1Zl90YWcgKmptcGJ1ZiA9IGJ1ZmZlcjsKKworCVVQVF9TRVQodW1sX3JlZ3MsIEVJUCwgam1wYnVmLT5fX2ptcGJ1ZltKQl9QQ10pOworCVVQVF9TRVQodW1sX3JlZ3MsIFVFU1AsIGptcGJ1Zi0+X19qbXBidWZbSkJfU1BdKTsKKwlVUFRfU0VUKHVtbF9yZWdzLCBFQlAsIGptcGJ1Zi0+X19qbXBidWZbSkJfQlBdKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvc3lzLXg4Nl82NC9yZWdpc3RlcnMuYyBiL2FyY2gvdW0vb3MtTGludXgvc3lzLXg4Nl82NC9yZWdpc3RlcnMuYwppbmRleCA0NDQzOGQxLi40YjYzOGRmYiAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9zeXMteDg2XzY0L3JlZ2lzdGVycy5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvc3lzLXg4Nl82NC9yZWdpc3RlcnMuYwpAQCAtNSw2ICs1LDcgQEAKIAogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c2V0am1wLmg+CiAjaW5jbHVkZSAicHRyYWNlX3VzZXIuaCIKICNpbmNsdWRlICJ1bWwtY29uZmlnLmgiCiAjaW5jbHVkZSAic2thc19wdHJlZ3MuaCIKQEAgLTc0LDEzICs3NSwxMSBAQAogCW1lbWNweShyZWdzLCBleGVjX3JlZ3MsIEhPU1RfRlJBTUVfU0laRSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CiB9CiAKLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCit2b2lkIGdldF90aHJlYWRfcmVncyh1bmlvbiB1bWxfcHRfcmVncyAqdW1sX3JlZ3MsIHZvaWQgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgX19qbXBfYnVmX3RhZyAqam1wYnVmID0gYnVmZmVyOworCisJVVBUX1NFVCh1bWxfcmVncywgUklQLCBqbXBidWYtPl9fam1wYnVmW0pCX1BDXSk7CisJVVBUX1NFVCh1bWxfcmVncywgUlNQLCBqbXBidWYtPl9fam1wYnVmW0pCX1JTUF0pOworCVVQVF9TRVQodW1sX3JlZ3MsIFJCUCwgam1wYnVmLT5fX2ptcGJ1ZltKQl9SQlBdKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvdHQuYyBiL2FyY2gvdW0vb3MtTGludXgvdHQuYwppbmRleCA1YjA0N2FiLi5hNmRiODg3IDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3R0LmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC90dC5jCkBAIC0zNiw2ICszNiwyMCBAQAogI2luY2x1ZGUgIm1vZGUuaCIKICNpbmNsdWRlICJ0ZW1wZmlsZS5oIgogCitpbnQgcHJvdGVjdF9tZW1vcnkodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgaW50IHIsIGludCB3LCBpbnQgeCwKKwkJICAgaW50IG11c3Rfc3VjY2VlZCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gb3NfcHJvdGVjdF9tZW1vcnkoKHZvaWQgKikgYWRkciwgbGVuLCByLCB3LCB4KTsKKwlpZihlcnIgPCAwKXsKKyAgICAgICAgICAgICAgICBpZihtdXN0X3N1Y2NlZWQpCisJCQlwYW5pYygicHJvdGVjdCBmYWlsZWQsIGVyciA9ICVkIiwgLWVycik7CisJCWVsc2UgcmV0dXJuKGVycik7CisJfQorCXJldHVybigwKTsKK30KKwogLyoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogb25seSBmb3IgdHQgbW9kZSAod2lsbCBiZSBkZWxldGVkIGluIGZ1dHVyZS4uLikKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvdXRpbC9NYWtlZmlsZSBiL2FyY2gvdW0vb3MtTGludXgvdXRpbC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc3OGFlZC4uMDAwMDAwMAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3V0aWwvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWhvc3Rwcm9ncy15CQk6PSBta191c2VyX2NvbnN0YW50cwotYWx3YXlzCQkJOj0gJChob3N0cHJvZ3MteSkKLQotSE9TVENGTEFHU19ta191c2VyX2NvbnN0YW50cy5vIDo9IC1JJChvYmp0cmVlKS9hcmNoL3VtCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3V0aWwvbWtfdXNlcl9jb25zdGFudHMuYyBiL2FyY2gvdW0vb3MtTGludXgvdXRpbC9ta191c2VyX2NvbnN0YW50cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODM4ZjMwLi4wMDAwMDAwCi0tLSBhL2FyY2gvdW0vb3MtTGludXgvdXRpbC9ta191c2VyX2NvbnN0YW50cy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8dXNlci1vZmZzZXRzLmg+Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgcHJpbnRmKCIvKlxuIik7Ci0gIHByaW50ZigiICogR2VuZXJhdGVkIGJ5IG1rX3VzZXJfY29uc3RhbnRzXG4iKTsKLSAgcHJpbnRmKCIgKi9cbiIpOwotICBwcmludGYoIlxuIik7Ci0gIHByaW50ZigiI2lmbmRlZiBfX1VNX1VTRVJfQ09OU1RBTlRTX0hcbiIpOwotICBwcmludGYoIiNkZWZpbmUgX19VTV9VU0VSX0NPTlNUQU5UU19IXG4iKTsKLSAgcHJpbnRmKCJcbiIpOwotICAvKiBJJ2QgbGlrZSB0byB1c2UgRlJBTUVfU0laRSBmcm9tIHB0cmFjZS5oIGhlcmUsIGJ1dCB0aGF0J3Mgd3Jvbmcgb24KLSAgICogeDg2XzY0ICgyMTYgdnMgMTY4IGJ5dGVzKS4gIHVzZXJfcmVnc19zdHJ1Y3QgaXMgdGhlIGNvcnJlY3Qgc2l6ZSBvbgotICAgKiBib3RoIHg4Nl82NCBhbmQgaTM4Ni4KLSAgICovCi0gIHByaW50ZigiI2RlZmluZSBVTV9GUkFNRV9TSVpFICVkXG4iLCBfX1VNX0ZSQU1FX1NJWkUpOwotCi0gIHByaW50ZigiXG4iKTsKLSAgcHJpbnRmKCIjZW5kaWZcbiIpOwotCi0gIHJldHVybigwKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc2NyaXB0cy9NYWtlZmlsZS5ydWxlcyBiL2FyY2gvdW0vc2NyaXB0cy9NYWtlZmlsZS5ydWxlcwppbmRleCA1OWExMjkxLi42NTFkOWQ4IDEwMDY0NAotLS0gYS9hcmNoL3VtL3NjcmlwdHMvTWFrZWZpbGUucnVsZXMKKysrIGIvYXJjaC91bS9zY3JpcHRzL01ha2VmaWxlLnJ1bGVzCkBAIC03LDggKzcsOCBAQAogVVNFUl9PQkpTICs9ICQoZmlsdGVyICVfdXNlci5vLCQob2JqLXkpICQob2JqLW0pICAkKFVTRVJfU0lOR0xFX09CSlMpKQogVVNFUl9PQkpTIDo9ICQoZm9yZWFjaCBmaWxlLCQoVVNFUl9PQkpTKSwkKG9iaikvJChmaWxlKSkKIAotJChVU0VSX09CSlMpIDogY19mbGFncyA9IC1XcCwtTUQsJChkZXBmaWxlKSAkKFVTRVJfQ0ZMQUdTKSBcCi0JJChDRkxBR1NfJChub3RkaXIgJEApKQorJChVU0VSX09CSlMpICQoVVNFUl9PQkpTOi5vPS5pKSAkKFVTRVJfT0JKUzoubz0ucykgJChVU0VSX09CSlM6Lm89LmxzdCk6IFwKKwljX2ZsYWdzID0gLVdwLC1NRCwkKGRlcGZpbGUpICQoVVNFUl9DRkxBR1MpICQoQ0ZMQUdTXyQobm90ZGlyICRAKSkKICQoVVNFUl9PQkpTKTogY21kX2NoZWNrc3JjID0KICQoVVNFUl9PQkpTKTogcXVpZXRfY21kX2NoZWNrc3JjID0KICQoVVNFUl9PQkpTKTogY21kX2ZvcmNlX2NoZWNrc3JjID0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvTWFrZWZpbGUgYi9hcmNoL3VtL3N5cy1pMzg2L01ha2VmaWxlCmluZGV4IDRjYTJhMjIuLjZkZmViNzBmIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy1pMzg2L01ha2VmaWxlCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvTWFrZWZpbGUKQEAgLTE4LDYgKzE4LDQgQEAKIAogJChvYmopL3N0dWJfc2Vndi5vIDogX2NfZmxhZ3MgPSAkKGNhbGwgdW5wcm9maWxlLCQoQ0ZMQUdTKSkKIAotc3ViZGlyLSA6PSB1dGlsCi0KIGluY2x1ZGUgYXJjaC91bS9zY3JpcHRzL01ha2VmaWxlLnVubWFwCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L2tlcm5lbC1vZmZzZXRzLmMgYi9hcmNoL3VtL3N5cy1pMzg2L2tlcm5lbC1vZmZzZXRzLmMKaW5kZXggYTEwNzBhZi4uMzVkYjg1MCAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni9rZXJuZWwtb2Zmc2V0cy5jCisrKyBiL2FyY2gvdW0vc3lzLWkzODYva2VybmVsLW9mZnNldHMuYwpAQCAtMTgsOSArMTgsOSBAQAogCiB2b2lkIGZvbyh2b2lkKQogewotCU9GRlNFVChUQVNLX0RFQlVHUkVHUywgdGFza19zdHJ1Y3QsIHRocmVhZC5hcmNoLmRlYnVncmVncyk7CisJT0ZGU0VUKEhPU1RfVEFTS19ERUJVR1JFR1MsIHRhc2tfc3RydWN0LCB0aHJlYWQuYXJjaC5kZWJ1Z3JlZ3MpOwogI2lmZGVmIENPTkZJR19NT0RFX1RUCi0JT0ZGU0VUKFRBU0tfRVhURVJOX1BJRCwgdGFza19zdHJ1Y3QsIHRocmVhZC5tb2RlLnR0LmV4dGVybl9waWQpOworCU9GRlNFVChIT1NUX1RBU0tfRVhURVJOX1BJRCwgdGFza19zdHJ1Y3QsIHRocmVhZC5tb2RlLnR0LmV4dGVybl9waWQpOwogI2VuZGlmCiAjaW5jbHVkZSA8Y29tbW9uLW9mZnNldHMuaD4KIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvbGR0LmMgYi9hcmNoL3VtL3N5cy1pMzg2L2xkdC5jCmluZGV4IGJkM2MzNGEuLjM2YjVjMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvbGR0LmMKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9sZHQuYwpAQCAtODMsNiArODMsNyBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAkJcCA9IGJ1ZjsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmVzID0gLUVOT1NZUzsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L3N5c3JxLmMgYi9hcmNoL3VtL3N5cy1pMzg2L3N5c3JxLmMKaW5kZXggZTM3MDZkMS4uZDUyNDRmMCAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni9zeXNycS5jCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvc3lzcnEuYwpAQCAtODgsOSArODgsNyBAQAogCQl0YXNrID0gY3VycmVudDsKIAogCWlmICh0YXNrICE9IGN1cnJlbnQpIHsKLQkJLy9lYnAgPSAodW5zaWduZWQgbG9uZykgS1NUS19FQlAodGFzayk7Ci0JCS8qIFdoaWNoIG9uZT8gTm8gYWN0dWFsIGRpZmZlcmVuY2UgLSBqdXN0IGNvZGluZyBzdHlsZS4qLwotCQllYnAgPSAodW5zaWduZWQgbG9uZykgUFRfUkVHU19FQlAoJnRhc2stPnRocmVhZC5yZWdzKTsKKwkJZWJwID0gKHVuc2lnbmVkIGxvbmcpIEtTVEtfRUJQKHRhc2spOwogCX0gZWxzZSB7CiAJCWFzbSAoIm1vdmwgJSVlYnAsICUwIiA6ICI9ciIgKGVicCkgOiApOwogCX0KQEAgLTk5LDE1ICs5Nyw2IEBACiAJCSgodW5zaWduZWQgbG9uZylzdGFjayAmICh+KFRIUkVBRF9TSVpFIC0gMSkpKTsKIAlwcmludF9jb250ZXh0X3N0YWNrKGNvbnRleHQsIHN0YWNrLCBlYnApOwogCi0JLyp3aGlsZSAoKChsb25nKSBzdGFjayAmIChUSFJFQURfU0laRS0xKSkgIT0gMCkgewotCQlhZGRyID0gKnN0YWNrOwotCQlpZiAoX19rZXJuZWxfdGV4dF9hZGRyZXNzKGFkZHIpKSB7Ci0JCQlwcmludGsoIiUwOGx4OglbPCUwOGx4Pl0iLCAodW5zaWduZWQgbG9uZykgc3RhY2ssIGFkZHIpOwotCQkJcHJpbnRfc3ltYm9sKCIgJXMiLCBhZGRyKTsKLQkJCXByaW50aygiXG4iKTsKLQkJfQotCQlzdGFjaysrOwotCX0qLwogCXByaW50aygiXG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni91c2VyLW9mZnNldHMuYyBiL2FyY2gvdW0vc3lzLWkzODYvdXNlci1vZmZzZXRzLmMKaW5kZXggM2NlYWFiYy4uMjZiNjg2NyAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni91c2VyLW9mZnNldHMuYworKysgYi9hcmNoL3VtL3N5cy1pMzg2L3VzZXItb2Zmc2V0cy5jCkBAIC03LDQ3ICs3LDQ4IEBACiAjZGVmaW5lIERFRklORShzeW0sIHZhbCkgXAogICAgICAgICBhc20gdm9sYXRpbGUoIlxuLT4iICNzeW0gIiAlMCAiICN2YWwgOiA6ICJpIiAodmFsKSkKIAorI2RlZmluZSBERUZJTkVfTE9OR1Moc3ltLCB2YWwpIFwKKyAgICAgICAgYXNtIHZvbGF0aWxlKCJcbi0+IiAjc3ltICIgJTAgIiAjdmFsIDogOiAiaSIgKHZhbC9zaXplb2YodW5zaWduZWQgbG9uZykpKQorCiAjZGVmaW5lIE9GRlNFVChzeW0sIHN0ciwgbWVtKSBcCiAJREVGSU5FKHN5bSwgb2Zmc2V0b2Yoc3RydWN0IHN0ciwgbWVtKSk7CiAKIHZvaWQgZm9vKHZvaWQpCiB7Ci0JT0ZGU0VUKFNDX0lQLCBzaWdjb250ZXh0LCBlaXApOwotCU9GRlNFVChTQ19TUCwgc2lnY29udGV4dCwgZXNwKTsKLQlPRkZTRVQoU0NfRlMsIHNpZ2NvbnRleHQsIGZzKTsKLQlPRkZTRVQoU0NfR1MsIHNpZ2NvbnRleHQsIGdzKTsKLQlPRkZTRVQoU0NfRFMsIHNpZ2NvbnRleHQsIGRzKTsKLQlPRkZTRVQoU0NfRVMsIHNpZ2NvbnRleHQsIGVzKTsKLQlPRkZTRVQoU0NfU1MsIHNpZ2NvbnRleHQsIHNzKTsKLQlPRkZTRVQoU0NfQ1MsIHNpZ2NvbnRleHQsIGNzKTsKLQlPRkZTRVQoU0NfRUZMQUdTLCBzaWdjb250ZXh0LCBlZmxhZ3MpOwotCU9GRlNFVChTQ19FQVgsIHNpZ2NvbnRleHQsIGVheCk7Ci0JT0ZGU0VUKFNDX0VCWCwgc2lnY29udGV4dCwgZWJ4KTsKLQlPRkZTRVQoU0NfRUNYLCBzaWdjb250ZXh0LCBlY3gpOwotCU9GRlNFVChTQ19FRFgsIHNpZ2NvbnRleHQsIGVkeCk7Ci0JT0ZGU0VUKFNDX0VESSwgc2lnY29udGV4dCwgZWRpKTsKLQlPRkZTRVQoU0NfRVNJLCBzaWdjb250ZXh0LCBlc2kpOwotCU9GRlNFVChTQ19FQlAsIHNpZ2NvbnRleHQsIGVicCk7Ci0JT0ZGU0VUKFNDX1RSQVBOTywgc2lnY29udGV4dCwgdHJhcG5vKTsKLQlPRkZTRVQoU0NfRVJSLCBzaWdjb250ZXh0LCBlcnIpOwotCU9GRlNFVChTQ19DUjIsIHNpZ2NvbnRleHQsIGNyMik7Ci0JT0ZGU0VUKFNDX0ZQU1RBVEUsIHNpZ2NvbnRleHQsIGZwc3RhdGUpOwotCU9GRlNFVChTQ19TSUdNQVNLLCBzaWdjb250ZXh0LCBvbGRtYXNrKTsKLQlPRkZTRVQoU0NfRlBfQ1csIF9mcHN0YXRlLCBjdyk7Ci0JT0ZGU0VUKFNDX0ZQX1NXLCBfZnBzdGF0ZSwgc3cpOwotCU9GRlNFVChTQ19GUF9UQUcsIF9mcHN0YXRlLCB0YWcpOwotCU9GRlNFVChTQ19GUF9JUE9GRiwgX2Zwc3RhdGUsIGlwb2ZmKTsKLQlPRkZTRVQoU0NfRlBfQ1NTRUwsIF9mcHN0YXRlLCBjc3NlbCk7Ci0JT0ZGU0VUKFNDX0ZQX0RBVEFPRkYsIF9mcHN0YXRlLCBkYXRhb2ZmKTsKLQlPRkZTRVQoU0NfRlBfREFUQVNFTCwgX2Zwc3RhdGUsIGRhdGFzZWwpOwotCU9GRlNFVChTQ19GUF9TVCwgX2Zwc3RhdGUsIF9zdCk7Ci0JT0ZGU0VUKFNDX0ZYU1JfRU5WLCBfZnBzdGF0ZSwgX2Z4c3JfZW52KTsKKwlPRkZTRVQoSE9TVF9TQ19JUCwgc2lnY29udGV4dCwgZWlwKTsKKwlPRkZTRVQoSE9TVF9TQ19TUCwgc2lnY29udGV4dCwgZXNwKTsKKwlPRkZTRVQoSE9TVF9TQ19GUywgc2lnY29udGV4dCwgZnMpOworCU9GRlNFVChIT1NUX1NDX0dTLCBzaWdjb250ZXh0LCBncyk7CisJT0ZGU0VUKEhPU1RfU0NfRFMsIHNpZ2NvbnRleHQsIGRzKTsKKwlPRkZTRVQoSE9TVF9TQ19FUywgc2lnY29udGV4dCwgZXMpOworCU9GRlNFVChIT1NUX1NDX1NTLCBzaWdjb250ZXh0LCBzcyk7CisJT0ZGU0VUKEhPU1RfU0NfQ1MsIHNpZ2NvbnRleHQsIGNzKTsKKwlPRkZTRVQoSE9TVF9TQ19FRkxBR1MsIHNpZ2NvbnRleHQsIGVmbGFncyk7CisJT0ZGU0VUKEhPU1RfU0NfRUFYLCBzaWdjb250ZXh0LCBlYXgpOworCU9GRlNFVChIT1NUX1NDX0VCWCwgc2lnY29udGV4dCwgZWJ4KTsKKwlPRkZTRVQoSE9TVF9TQ19FQ1gsIHNpZ2NvbnRleHQsIGVjeCk7CisJT0ZGU0VUKEhPU1RfU0NfRURYLCBzaWdjb250ZXh0LCBlZHgpOworCU9GRlNFVChIT1NUX1NDX0VESSwgc2lnY29udGV4dCwgZWRpKTsKKwlPRkZTRVQoSE9TVF9TQ19FU0ksIHNpZ2NvbnRleHQsIGVzaSk7CisJT0ZGU0VUKEhPU1RfU0NfRUJQLCBzaWdjb250ZXh0LCBlYnApOworCU9GRlNFVChIT1NUX1NDX1RSQVBOTywgc2lnY29udGV4dCwgdHJhcG5vKTsKKwlPRkZTRVQoSE9TVF9TQ19FUlIsIHNpZ2NvbnRleHQsIGVycik7CisJT0ZGU0VUKEhPU1RfU0NfQ1IyLCBzaWdjb250ZXh0LCBjcjIpOworCU9GRlNFVChIT1NUX1NDX0ZQU1RBVEUsIHNpZ2NvbnRleHQsIGZwc3RhdGUpOworCU9GRlNFVChIT1NUX1NDX1NJR01BU0ssIHNpZ2NvbnRleHQsIG9sZG1hc2spOworCU9GRlNFVChIT1NUX1NDX0ZQX0NXLCBfZnBzdGF0ZSwgY3cpOworCU9GRlNFVChIT1NUX1NDX0ZQX1NXLCBfZnBzdGF0ZSwgc3cpOworCU9GRlNFVChIT1NUX1NDX0ZQX1RBRywgX2Zwc3RhdGUsIHRhZyk7CisJT0ZGU0VUKEhPU1RfU0NfRlBfSVBPRkYsIF9mcHN0YXRlLCBpcG9mZik7CisJT0ZGU0VUKEhPU1RfU0NfRlBfQ1NTRUwsIF9mcHN0YXRlLCBjc3NlbCk7CisJT0ZGU0VUKEhPU1RfU0NfRlBfREFUQU9GRiwgX2Zwc3RhdGUsIGRhdGFvZmYpOworCU9GRlNFVChIT1NUX1NDX0ZQX0RBVEFTRUwsIF9mcHN0YXRlLCBkYXRhc2VsKTsKKwlPRkZTRVQoSE9TVF9TQ19GUF9TVCwgX2Zwc3RhdGUsIF9zdCk7CisJT0ZGU0VUKEhPU1RfU0NfRlhTUl9FTlYsIF9mcHN0YXRlLCBfZnhzcl9lbnYpOwogCiAJREVGSU5FKEhPU1RfRlJBTUVfU0laRSwgRlJBTUVfU0laRSk7Ci0JREVGSU5FKEhPU1RfRlBfU0laRSwKLQkJc2l6ZW9mKHN0cnVjdCB1c2VyX2kzODdfc3RydWN0KSAvIHNpemVvZih1bnNpZ25lZCBsb25nKSk7Ci0JREVGSU5FKEhPU1RfWEZQX1NJWkUsCi0JICAgICAgIHNpemVvZihzdHJ1Y3QgdXNlcl9meHNyX3N0cnVjdCkgLyBzaXplb2YodW5zaWduZWQgbG9uZykpOworCURFRklORV9MT05HUyhIT1NUX0ZQX1NJWkUsIHNpemVvZihzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCkpOworCURFRklORV9MT05HUyhIT1NUX1hGUF9TSVpFLCBzaXplb2Yoc3RydWN0IHVzZXJfZnhzcl9zdHJ1Y3QpKTsKIAogCURFRklORShIT1NUX0lQLCBFSVApOwogCURFRklORShIT1NUX1NQLCBVRVNQKTsKQEAgLTY1LDUgKzY2LDUgQEAKIAlERUZJTkUoSE9TVF9GUywgRlMpOwogCURFRklORShIT1NUX0VTLCBFUyk7CiAJREVGSU5FKEhPU1RfR1MsIEdTKTsKLQlERUZJTkUoX19VTV9GUkFNRV9TSVpFLCBzaXplb2Yoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QpKTsKKwlERUZJTkUoVU1fRlJBTUVfU0laRSwgc2l6ZW9mKHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0KSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L3V0aWwvTWFrZWZpbGUgYi9hcmNoL3VtL3N5cy1pMzg2L3V0aWwvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmNjFhZmQuLjAwMDAwMDAKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni91dGlsL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1ob3N0cHJvZ3MteQk6PSBta19zYyBta190aHJlYWQKLWFsd2F5cwkJOj0gJChob3N0cHJvZ3MteSkKLQotSE9TVENGTEFHU19ta19zYy5vIDo9IC1JJChvYmp0cmVlKS9hcmNoL3VtCi1IT1NUQ0ZMQUdTX21rX3RocmVhZC5vIDo9IC1JJChvYmp0cmVlKS9hcmNoL3VtCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L3V0aWwvbWtfc2MuYyBiL2FyY2gvdW0vc3lzLWkzODYvdXRpbC9ta19zYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGMwZDczLi4wMDAwMDAwCi0tLSBhL2FyY2gvdW0vc3lzLWkzODYvdXRpbC9ta19zYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8dXNlci1vZmZzZXRzLmg+Ci0KLSNkZWZpbmUgU0NfT0ZGU0VUKG5hbWUsIGZpZWxkKSBcCi0gIHByaW50ZigiI2RlZmluZSAiICNuYW1lICIoc2MpICooKHVuc2lnbmVkIGxvbmcgKikgJigoKGNoYXIgKikgKHNjKSlbJWRdKSlcbiIsXAotCSBuYW1lKQotCi0jZGVmaW5lIFNDX0ZQX09GRlNFVChuYW1lLCBmaWVsZCkgXAotICBwcmludGYoIiNkZWZpbmUgIiAjbmFtZSBcCi0JICIoc2MpICooKHVuc2lnbmVkIGxvbmcgKikgJigoKGNoYXIgKikgKFNDX0ZQU1RBVEUoc2MpKSlbJWRdKSlcbiIsXAotCSBuYW1lKQotCi0jZGVmaW5lIFNDX0ZQX09GRlNFVF9QVFIobmFtZSwgZmllbGQsIHR5cGUpIFwKLSAgcHJpbnRmKCIjZGVmaW5lICIgI25hbWUgXAotCSAiKHNjKSAoKCIgdHlwZSAiICopICYoKChjaGFyICopIChTQ19GUFNUQVRFKHNjKSkpWyVkXSkpXG4iLFwKLQkgbmFtZSkKLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICBTQ19PRkZTRVQoU0NfSVAsIGVpcCk7Ci0gIFNDX09GRlNFVChTQ19TUCwgZXNwKTsKLSAgU0NfT0ZGU0VUKFNDX0ZTLCBmcyk7Ci0gIFNDX09GRlNFVChTQ19HUywgZ3MpOwotICBTQ19PRkZTRVQoU0NfRFMsIGRzKTsKLSAgU0NfT0ZGU0VUKFNDX0VTLCBlcyk7Ci0gIFNDX09GRlNFVChTQ19TUywgc3MpOwotICBTQ19PRkZTRVQoU0NfQ1MsIGNzKTsKLSAgU0NfT0ZGU0VUKFNDX0VGTEFHUywgZWZsYWdzKTsKLSAgU0NfT0ZGU0VUKFNDX0VBWCwgZWF4KTsKLSAgU0NfT0ZGU0VUKFNDX0VCWCwgZWJ4KTsKLSAgU0NfT0ZGU0VUKFNDX0VDWCwgZWN4KTsKLSAgU0NfT0ZGU0VUKFNDX0VEWCwgZWR4KTsKLSAgU0NfT0ZGU0VUKFNDX0VESSwgZWRpKTsKLSAgU0NfT0ZGU0VUKFNDX0VTSSwgZXNpKTsKLSAgU0NfT0ZGU0VUKFNDX0VCUCwgZWJwKTsKLSAgU0NfT0ZGU0VUKFNDX1RSQVBOTywgdHJhcG5vKTsKLSAgU0NfT0ZGU0VUKFNDX0VSUiwgZXJyKTsKLSAgU0NfT0ZGU0VUKFNDX0NSMiwgY3IyKTsKLSAgU0NfT0ZGU0VUKFNDX0ZQU1RBVEUsIGZwc3RhdGUpOwotICBTQ19PRkZTRVQoU0NfU0lHTUFTSywgb2xkbWFzayk7Ci0gIFNDX0ZQX09GRlNFVChTQ19GUF9DVywgY3cpOwotICBTQ19GUF9PRkZTRVQoU0NfRlBfU1csIHN3KTsKLSAgU0NfRlBfT0ZGU0VUKFNDX0ZQX1RBRywgdGFnKTsKLSAgU0NfRlBfT0ZGU0VUKFNDX0ZQX0lQT0ZGLCBpcG9mZik7Ci0gIFNDX0ZQX09GRlNFVChTQ19GUF9DU1NFTCwgY3NzZWwpOwotICBTQ19GUF9PRkZTRVQoU0NfRlBfREFUQU9GRiwgZGF0YW9mZik7Ci0gIFNDX0ZQX09GRlNFVChTQ19GUF9EQVRBU0VMLCBkYXRhc2VsKTsKLSAgU0NfRlBfT0ZGU0VUX1BUUihTQ19GUF9TVCwgX3N0LCAic3RydWN0IF9mcHN0YXRlIik7Ci0gIFNDX0ZQX09GRlNFVF9QVFIoU0NfRlhTUl9FTlYsIF9meHNyX2VudiwgInZvaWQiKTsKLSAgcmV0dXJuKDApOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni91dGlsL21rX3RocmVhZC5jIGIvYXJjaC91bS9zeXMtaTM4Ni91dGlsL21rX3RocmVhZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDcwZDBkLi4wMDAwMDAwCi0tLSBhL2FyY2gvdW0vc3lzLWkzODYvdXRpbC9ta190aHJlYWQuYworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGtlcm5lbC1vZmZzZXRzLmg+Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgcHJpbnRmKCIvKlxuIik7Ci0gIHByaW50ZigiICogR2VuZXJhdGVkIGJ5IG1rX3RocmVhZFxuIik7Ci0gIHByaW50ZigiICovXG4iKTsKLSAgcHJpbnRmKCJcbiIpOwotICBwcmludGYoIiNpZm5kZWYgX19VTV9USFJFQURfSFxuIik7Ci0gIHByaW50ZigiI2RlZmluZSBfX1VNX1RIUkVBRF9IXG4iKTsKLSAgcHJpbnRmKCJcbiIpOwotICBwcmludGYoIiNkZWZpbmUgVEFTS19ERUJVR1JFR1ModGFzaykgKCh1bnNpZ25lZCBsb25nICopICIKLQkgIiYoKChjaGFyICopICh0YXNrKSlbJWRdKSlcbiIsIFRBU0tfREVCVUdSRUdTKTsKLSNpZmRlZiBUQVNLX0VYVEVSTl9QSUQKLSAgcHJpbnRmKCIjZGVmaW5lIFRBU0tfRVhURVJOX1BJRCh0YXNrKSAqKChpbnQgKikgJigoKGNoYXIgKikgKHRhc2spKVslZF0pKVxuIiwKLQkgVEFTS19FWFRFUk5fUElEKTsKLSNlbmRpZgotICBwcmludGYoIlxuIik7Ci0gIHByaW50ZigiI2VuZGlmXG4iKTsKLSAgcmV0dXJuKDApOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L01ha2VmaWxlIGIvYXJjaC91bS9zeXMteDg2XzY0L01ha2VmaWxlCmluZGV4IGYwYWI1NzRkLi4wNmMzNjMzIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy14ODZfNjQvTWFrZWZpbGUKKysrIGIvYXJjaC91bS9zeXMteDg2XzY0L01ha2VmaWxlCkBAIC0yOSw2ICsyOSw0IEBACiAKICQob2JqKS9zdHViX3NlZ3YubzogX2NfZmxhZ3MgPSAkKGNhbGwgdW5wcm9maWxlLCQoQ0ZMQUdTKSkKIAotc3ViZGlyLSA6PSB1dGlsCi0KIGluY2x1ZGUgYXJjaC91bS9zY3JpcHRzL01ha2VmaWxlLnVubWFwCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQva2VybmVsLW9mZnNldHMuYyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9rZXJuZWwtb2Zmc2V0cy5jCmluZGV4IDk5ODU0MWUuLmJmY2IxMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLXg4Nl82NC9rZXJuZWwtb2Zmc2V0cy5jCisrKyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9rZXJuZWwtb2Zmc2V0cy5jCkBAIC0xOSw3ICsxOSw3IEBACiB2b2lkIGZvbyh2b2lkKQogewogI2lmZGVmIENPTkZJR19NT0RFX1RUCi0JT0ZGU0VUKFRBU0tfRVhURVJOX1BJRCwgdGFza19zdHJ1Y3QsIHRocmVhZC5tb2RlLnR0LmV4dGVybl9waWQpOworCU9GRlNFVChIT1NUX1RBU0tfRVhURVJOX1BJRCwgdGFza19zdHJ1Y3QsIHRocmVhZC5tb2RlLnR0LmV4dGVybl9waWQpOwogI2VuZGlmCiAjaW5jbHVkZSA8Y29tbW9uLW9mZnNldHMuaD4KIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLXg4Nl82NC9zdHViX3NlZ3YuYyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9zdHViX3NlZ3YuYwppbmRleCA2NWExMzFiLi5kMWU1M2JkIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy14ODZfNjQvc3R1Yl9zZWd2LmMKKysrIGIvYXJjaC91bS9zeXMteDg2XzY0L3N0dWJfc2Vndi5jCkBAIC0xMCw2ICsxMCwyMiBAQAogI2luY2x1ZGUgInVtbC1jb25maWcuaCIKICNpbmNsdWRlICJzeXNkZXAvc2lnY29udGV4dC5oIgogI2luY2x1ZGUgInN5c2RlcC9mYXVsdGluZm8uaCIKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLyogQ29waWVkIGZyb20gc3lzLXg4Nl82NC9zaWduYWwuYyAtIENhbid0IGZpbmQgYW4gZXF1aXZhbGVudCBkZWZpbml0aW9uCisgKiBpbiB0aGUgbGliYyBoZWFkZXJzIGFueXdoZXJlLgorICovCitzdHJ1Y3QgcnRfc2lnZnJhbWUKK3sKKwljaGFyICpwcmV0Y29kZTsKKwlzdHJ1Y3QgdWNvbnRleHQgdWM7CisJc3RydWN0IHNpZ2luZm8gaW5mbzsKK307CisKKy8qIENvcGllZCBoZXJlIGZyb20gPGxpbnV4L2tlcm5lbC5oPiAtIHdlJ3JlIHVzZXJzcGFjZS4gKi8KKyNkZWZpbmUgY29udGFpbmVyX29mKHB0ciwgdHlwZSwgbWVtYmVyKSAoeyAgICAgICAgICAgICAgICAgICBcCisJY29uc3QgdHlwZW9mKCAoKHR5cGUgKikwKS0+bWVtYmVyICkgKl9fbXB0ciA9IChwdHIpOyBcCisJKHR5cGUgKikoIChjaGFyICopX19tcHRyIC0gb2Zmc2V0b2YodHlwZSxtZW1iZXIpICk7fSkKIAogdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIuX19zeXNjYWxsX3N0dWIiKSkpCiBzdHViX3NlZ3ZfaGFuZGxlcihpbnQgc2lnKQpAQCAtMTcsMTYgKzMzLDE5IEBACiAJc3RydWN0IHVjb250ZXh0ICp1YzsKIAogCV9fYXNtX18oIm1vdnEgJSVyZHgsICUwIiA6ICI9ZyIgKHVjKSA6KTsKLSAgICAgICAgR0VUX0ZBVUxUSU5GT19GUk9NX1NDKCooKHN0cnVjdCBmYXVsdGluZm8gKikgVU1MX0NPTkZJR19TVFVCX0RBVEEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVjLT51Y19tY29udGV4dCk7CisJR0VUX0ZBVUxUSU5GT19GUk9NX1NDKCooKHN0cnVjdCBmYXVsdGluZm8gKikgVU1MX0NPTkZJR19TVFVCX0RBVEEpLAorCQkJICAgICAgJnVjLT51Y19tY29udGV4dCk7CiAKLQlfX2FzbV9fKCJtb3ZxICUwLCAlJXJheCA7IHN5c2NhbGwiOiA6ICJnIiAoX19OUl9nZXRwaWQpKTsKKwlfX2FzbV9fKCJtb3ZxICUwLCAlJXJheCA7IHN5c2NhbGwiOiA6ICJnIiAoX19OUl9nZXRwaWQpKTsJCiAJX19hc21fXygibW92cSAlJXJheCwgJSVyZGkgOyBtb3ZxICUwLCAlJXJheCA7IG1vdnEgJTEsICUlcnNpIDsiCi0JCSJzeXNjYWxsIjogOiAiZyIgKF9fTlJfa2lsbCksICJnIiAoU0lHVVNSMSkpOwotCS8qIFR3byBwb3BxcyB0byByZXN0b3JlIHRoZSBzdGFjayB0byB0aGUgc3RhdGUganVzdCBiZWZvcmUgZW50ZXJpbmcKLQkgKiB0aGUgaGFuZGxlciwgb25lIHBvcHMgdGhlIHJldHVybiBhZGRyZXNzLCB0aGUgb3RoZXIgcG9wcyB0aGUgZnJhbWUKLQkgKiBwb2ludGVyLgorCQkic3lzY2FsbCI6IDogImciIChfX05SX2tpbGwpLCAiZyIgKFNJR1VTUjEpIDogCisJCSIlcmRpIiwgIiVyYXgiLCAiJXJzaSIpOworCS8qIHN5c19zaWdyZXR1cm4gZXhwZWN0cyB0aGF0IHRoZSBzdGFjayBwb2ludGVyIHdpbGwgYmUgOCBieXRlcyBpbnRvCisJICogdGhlIHNpZ25hbCBmcmFtZS4gIFNvLCB3ZSB1c2UgdGhlIHVjb250ZXh0IHBvaW50ZXIsIHdoaWNoIHdlIGtub3cKKwkgKiBhbHJlYWR5LCB0byBnZXQgdGhlIHNpZ25hbCBmcmFtZSBwb2ludGVyLCBhbmQgYWRkIDggdG8gdGhhdC4KIAkgKi8KLQlfX2FzbV9fKCJwb3BxICUlcmF4IDsgcG9wcSAlJXJheCA7IG1vdnEgJTAsICUlcmF4IDsgc3lzY2FsbCIgOiA6ICJnIgotCQkoX19OUl9ydF9zaWdyZXR1cm4pKTsKKwlfX2FzbV9fKCJtb3ZxICUwLCAlJXJzcCI6IDogCisJCSJnIiAoKHVuc2lnbmVkIGxvbmcpIGNvbnRhaW5lcl9vZih1Yywgc3RydWN0IHJ0X3NpZ2ZyYW1lLCAKKwkJCQkJCSAgdWMpICsgOCkpOworCV9fYXNtX18oIm1vdnEgJTAsICUlcmF4IDsgc3lzY2FsbCIgOiA6ICJnIiAoX19OUl9ydF9zaWdyZXR1cm4pKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLXg4Nl82NC91c2VyLW9mZnNldHMuYyBiL2FyY2gvdW0vc3lzLXg4Nl82NC91c2VyLW9mZnNldHMuYwppbmRleCA1MTNkMTdjLi41YTU4NWJmIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy14ODZfNjQvdXNlci1vZmZzZXRzLmMKKysrIGIvYXJjaC91bS9zeXMteDg2XzY0L3VzZXItb2Zmc2V0cy5jCkBAIC0xNiw3MSArMTYsNzYgQEAKICNkZWZpbmUgREVGSU5FKHN5bSwgdmFsKSBcCiAgICAgICAgIGFzbSB2b2xhdGlsZSgiXG4tPiIgI3N5bSAiICUwICIgI3ZhbCA6IDogImkiICh2YWwpKQogCisjZGVmaW5lIERFRklORV9MT05HUyhzeW0sIHZhbCkgXAorICAgICAgICBhc20gdm9sYXRpbGUoIlxuLT4iICNzeW0gIiAlMCAiICN2YWwgOiA6ICJpIiAodmFsL3NpemVvZih1bnNpZ25lZCBsb25nKSkpCisKICNkZWZpbmUgT0ZGU0VUKHN5bSwgc3RyLCBtZW0pIFwKIAlERUZJTkUoc3ltLCBvZmZzZXRvZihzdHJ1Y3Qgc3RyLCBtZW0pKTsKIAogdm9pZCBmb28odm9pZCkKIHsKLQlPRkZTRVQoU0NfUkJYLCBzaWdjb250ZXh0LCByYngpOwotCU9GRlNFVChTQ19SQ1gsIHNpZ2NvbnRleHQsIHJjeCk7Ci0JT0ZGU0VUKFNDX1JEWCwgc2lnY29udGV4dCwgcmR4KTsKLQlPRkZTRVQoU0NfUlNJLCBzaWdjb250ZXh0LCByc2kpOwotCU9GRlNFVChTQ19SREksIHNpZ2NvbnRleHQsIHJkaSk7Ci0JT0ZGU0VUKFNDX1JCUCwgc2lnY29udGV4dCwgcmJwKTsKLQlPRkZTRVQoU0NfUkFYLCBzaWdjb250ZXh0LCByYXgpOwotCU9GRlNFVChTQ19SOCwgc2lnY29udGV4dCwgcjgpOwotCU9GRlNFVChTQ19SOSwgc2lnY29udGV4dCwgcjkpOwotCU9GRlNFVChTQ19SMTAsIHNpZ2NvbnRleHQsIHIxMCk7Ci0JT0ZGU0VUKFNDX1IxMSwgc2lnY29udGV4dCwgcjExKTsKLQlPRkZTRVQoU0NfUjEyLCBzaWdjb250ZXh0LCByMTIpOwotCU9GRlNFVChTQ19SMTMsIHNpZ2NvbnRleHQsIHIxMyk7Ci0JT0ZGU0VUKFNDX1IxNCwgc2lnY29udGV4dCwgcjE0KTsKLQlPRkZTRVQoU0NfUjE1LCBzaWdjb250ZXh0LCByMTUpOwotCU9GRlNFVChTQ19JUCwgc2lnY29udGV4dCwgcmlwKTsKLQlPRkZTRVQoU0NfU1AsIHNpZ2NvbnRleHQsIHJzcCk7Ci0JT0ZGU0VUKFNDX0NSMiwgc2lnY29udGV4dCwgY3IyKTsKLQlPRkZTRVQoU0NfRVJSLCBzaWdjb250ZXh0LCBlcnIpOwotCU9GRlNFVChTQ19UUkFQTk8sIHNpZ2NvbnRleHQsIHRyYXBubyk7Ci0JT0ZGU0VUKFNDX0NTLCBzaWdjb250ZXh0LCBjcyk7Ci0JT0ZGU0VUKFNDX0ZTLCBzaWdjb250ZXh0LCBmcyk7Ci0JT0ZGU0VUKFNDX0dTLCBzaWdjb250ZXh0LCBncyk7Ci0JT0ZGU0VUKFNDX0VGTEFHUywgc2lnY29udGV4dCwgZWZsYWdzKTsKLQlPRkZTRVQoU0NfU0lHTUFTSywgc2lnY29udGV4dCwgb2xkbWFzayk7CisJT0ZGU0VUKEhPU1RfU0NfUkJYLCBzaWdjb250ZXh0LCByYngpOworCU9GRlNFVChIT1NUX1NDX1JDWCwgc2lnY29udGV4dCwgcmN4KTsKKwlPRkZTRVQoSE9TVF9TQ19SRFgsIHNpZ2NvbnRleHQsIHJkeCk7CisJT0ZGU0VUKEhPU1RfU0NfUlNJLCBzaWdjb250ZXh0LCByc2kpOworCU9GRlNFVChIT1NUX1NDX1JESSwgc2lnY29udGV4dCwgcmRpKTsKKwlPRkZTRVQoSE9TVF9TQ19SQlAsIHNpZ2NvbnRleHQsIHJicCk7CisJT0ZGU0VUKEhPU1RfU0NfUkFYLCBzaWdjb250ZXh0LCByYXgpOworCU9GRlNFVChIT1NUX1NDX1I4LCBzaWdjb250ZXh0LCByOCk7CisJT0ZGU0VUKEhPU1RfU0NfUjksIHNpZ2NvbnRleHQsIHI5KTsKKwlPRkZTRVQoSE9TVF9TQ19SMTAsIHNpZ2NvbnRleHQsIHIxMCk7CisJT0ZGU0VUKEhPU1RfU0NfUjExLCBzaWdjb250ZXh0LCByMTEpOworCU9GRlNFVChIT1NUX1NDX1IxMiwgc2lnY29udGV4dCwgcjEyKTsKKwlPRkZTRVQoSE9TVF9TQ19SMTMsIHNpZ2NvbnRleHQsIHIxMyk7CisJT0ZGU0VUKEhPU1RfU0NfUjE0LCBzaWdjb250ZXh0LCByMTQpOworCU9GRlNFVChIT1NUX1NDX1IxNSwgc2lnY29udGV4dCwgcjE1KTsKKwlPRkZTRVQoSE9TVF9TQ19JUCwgc2lnY29udGV4dCwgcmlwKTsKKwlPRkZTRVQoSE9TVF9TQ19TUCwgc2lnY29udGV4dCwgcnNwKTsKKwlPRkZTRVQoSE9TVF9TQ19DUjIsIHNpZ2NvbnRleHQsIGNyMik7CisJT0ZGU0VUKEhPU1RfU0NfRVJSLCBzaWdjb250ZXh0LCBlcnIpOworCU9GRlNFVChIT1NUX1NDX1RSQVBOTywgc2lnY29udGV4dCwgdHJhcG5vKTsKKwlPRkZTRVQoSE9TVF9TQ19DUywgc2lnY29udGV4dCwgY3MpOworCU9GRlNFVChIT1NUX1NDX0ZTLCBzaWdjb250ZXh0LCBmcyk7CisJT0ZGU0VUKEhPU1RfU0NfR1MsIHNpZ2NvbnRleHQsIGdzKTsKKwlPRkZTRVQoSE9TVF9TQ19FRkxBR1MsIHNpZ2NvbnRleHQsIGVmbGFncyk7CisJT0ZGU0VUKEhPU1RfU0NfU0lHTUFTSywgc2lnY29udGV4dCwgb2xkbWFzayk7CiAjaWYgMAotCU9GRlNFVChTQ19PUklHX1JBWCwgc2lnY29udGV4dCwgb3JpZ19yYXgpOwotCU9GRlNFVChTQ19EUywgc2lnY29udGV4dCwgZHMpOwotCU9GRlNFVChTQ19FUywgc2lnY29udGV4dCwgZXMpOwotCU9GRlNFVChTQ19TUywgc2lnY29udGV4dCwgc3MpOworCU9GRlNFVChIT1NUX1NDX09SSUdfUkFYLCBzaWdjb250ZXh0LCBvcmlnX3JheCk7CisJT0ZGU0VUKEhPU1RfU0NfRFMsIHNpZ2NvbnRleHQsIGRzKTsKKwlPRkZTRVQoSE9TVF9TQ19FUywgc2lnY29udGV4dCwgZXMpOworCU9GRlNFVChIT1NUX1NDX1NTLCBzaWdjb250ZXh0LCBzcyk7CiAjZW5kaWYKIAotCURFRklORShIT1NUX0ZSQU1FX1NJWkUsIEZSQU1FX1NJWkUpOwotCURFRklORShIT1NUX1JCWCwgUkJYKTsKLQlERUZJTkUoSE9TVF9SQ1gsIFJDWCk7Ci0JREVGSU5FKEhPU1RfUkRJLCBSREkpOwotCURFRklORShIT1NUX1JTSSwgUlNJKTsKLQlERUZJTkUoSE9TVF9SRFgsIFJEWCk7Ci0JREVGSU5FKEhPU1RfUkJQLCBSQlApOwotCURFRklORShIT1NUX1JBWCwgUkFYKTsKLQlERUZJTkUoSE9TVF9SOCwgUjgpOwotCURFRklORShIT1NUX1I5LCBSOSk7Ci0JREVGSU5FKEhPU1RfUjEwLCBSMTApOwotCURFRklORShIT1NUX1IxMSwgUjExKTsKLQlERUZJTkUoSE9TVF9SMTIsIFIxMik7Ci0JREVGSU5FKEhPU1RfUjEzLCBSMTMpOwotCURFRklORShIT1NUX1IxNCwgUjE0KTsKLQlERUZJTkUoSE9TVF9SMTUsIFIxNSk7Ci0JREVGSU5FKEhPU1RfT1JJR19SQVgsIE9SSUdfUkFYKTsKLQlERUZJTkUoSE9TVF9DUywgQ1MpOwotCURFRklORShIT1NUX1NTLCBTUyk7Ci0JREVGSU5FKEhPU1RfRUZMQUdTLCBFRkxBR1MpOworCURFRklORV9MT05HUyhIT1NUX0ZSQU1FX1NJWkUsIEZSQU1FX1NJWkUpOworCURFRklORShIT1NUX0ZQX1NJWkUsIDApOworCURFRklORShIT1NUX1hGUF9TSVpFLCAwKTsKKwlERUZJTkVfTE9OR1MoSE9TVF9SQlgsIFJCWCk7CisJREVGSU5FX0xPTkdTKEhPU1RfUkNYLCBSQ1gpOworCURFRklORV9MT05HUyhIT1NUX1JESSwgUkRJKTsKKwlERUZJTkVfTE9OR1MoSE9TVF9SU0ksIFJTSSk7CisJREVGSU5FX0xPTkdTKEhPU1RfUkRYLCBSRFgpOworCURFRklORV9MT05HUyhIT1NUX1JCUCwgUkJQKTsKKwlERUZJTkVfTE9OR1MoSE9TVF9SQVgsIFJBWCk7CisJREVGSU5FX0xPTkdTKEhPU1RfUjgsIFI4KTsKKwlERUZJTkVfTE9OR1MoSE9TVF9SOSwgUjkpOworCURFRklORV9MT05HUyhIT1NUX1IxMCwgUjEwKTsKKwlERUZJTkVfTE9OR1MoSE9TVF9SMTEsIFIxMSk7CisJREVGSU5FX0xPTkdTKEhPU1RfUjEyLCBSMTIpOworCURFRklORV9MT05HUyhIT1NUX1IxMywgUjEzKTsKKwlERUZJTkVfTE9OR1MoSE9TVF9SMTQsIFIxNCk7CisJREVGSU5FX0xPTkdTKEhPU1RfUjE1LCBSMTUpOworCURFRklORV9MT05HUyhIT1NUX09SSUdfUkFYLCBPUklHX1JBWCk7CisJREVGSU5FX0xPTkdTKEhPU1RfQ1MsIENTKTsKKwlERUZJTkVfTE9OR1MoSE9TVF9TUywgU1MpOworCURFRklORV9MT05HUyhIT1NUX0VGTEFHUywgRUZMQUdTKTsKICNpZiAwCi0JREVGSU5FKEhPU1RfRlMsIEZTKTsKLQlERUZJTkUoSE9TVF9HUywgR1MpOwotCURFRklORShIT1NUX0RTLCBEUyk7Ci0JREVGSU5FKEhPU1RfRVMsIEVTKTsKKwlERUZJTkVfTE9OR1MoSE9TVF9GUywgRlMpOworCURFRklORV9MT05HUyhIT1NUX0dTLCBHUyk7CisJREVGSU5FX0xPTkdTKEhPU1RfRFMsIERTKTsKKwlERUZJTkVfTE9OR1MoSE9TVF9FUywgRVMpOwogI2VuZGlmCiAKLQlERUZJTkUoSE9TVF9JUCwgUklQKTsKLQlERUZJTkUoSE9TVF9TUCwgUlNQKTsKLQlERUZJTkUoX19VTV9GUkFNRV9TSVpFLCBzaXplb2Yoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QpKTsKKwlERUZJTkVfTE9OR1MoSE9TVF9JUCwgUklQKTsKKwlERUZJTkVfTE9OR1MoSE9TVF9TUCwgUlNQKTsKKwlERUZJTkUoVU1fRlJBTUVfU0laRSwgc2l6ZW9mKHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0KSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQvdXRpbC9NYWtlZmlsZSBiL2FyY2gvdW0vc3lzLXg4Nl82NC91dGlsL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWIwNTJjLi4wMDAwMDAwCi0tLSBhL2FyY2gvdW0vc3lzLXg4Nl82NC91dGlsL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jIENvcHlyaWdodCAyMDAzIC0gMjAwNCBQYXRoc2NhbGUsIEluYwotIyBSZWxlYXNlZCB1bmRlciB0aGUgR1BMCi0KLWhvc3Rwcm9ncy15CTo9IG1rX3NjIG1rX3RocmVhZAotYWx3YXlzCQk6PSAkKGhvc3Rwcm9ncy15KQotCi1IT1NUQ0ZMQUdTX21rX3NjLm8gOj0gLUkkKG9ianRyZWUpL2FyY2gvdW0KLUhPU1RDRkxBR1NfbWtfdGhyZWFkLm8gOj0gLUkkKG9ianRyZWUpL2FyY2gvdW0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLXg4Nl82NC91dGlsL21rX3NjLmMgYi9hcmNoL3VtL3N5cy14ODZfNjQvdXRpbC9ta19zYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjE5YmMzLi4wMDAwMDAwCi0tLSBhL2FyY2gvdW0vc3lzLXg4Nl82NC91dGlsL21rX3NjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA0IFBhdGhTY2FsZSwgSW5jCi0gKiBSZWxlYXNlZCB1bmRlciB0aGUgR1BMCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8dXNlci1vZmZzZXRzLmg+Ci0KLSNkZWZpbmUgU0NfT0ZGU0VUKG5hbWUpIFwKLSAgcHJpbnRmKCIjZGVmaW5lICIgI25hbWUgXAotCSAiKHNjKSAqKCh1bnNpZ25lZCBsb25nICopICYoKChjaGFyICopIChzYykpWyVkXSkpXG4iLFwKLQkgbmFtZSkKLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICBTQ19PRkZTRVQoU0NfUkJYKTsKLSAgU0NfT0ZGU0VUKFNDX1JDWCk7Ci0gIFNDX09GRlNFVChTQ19SRFgpOwotICBTQ19PRkZTRVQoU0NfUlNJKTsKLSAgU0NfT0ZGU0VUKFNDX1JESSk7Ci0gIFNDX09GRlNFVChTQ19SQlApOwotICBTQ19PRkZTRVQoU0NfUkFYKTsKLSAgU0NfT0ZGU0VUKFNDX1I4KTsKLSAgU0NfT0ZGU0VUKFNDX1I5KTsKLSAgU0NfT0ZGU0VUKFNDX1IxMCk7Ci0gIFNDX09GRlNFVChTQ19SMTEpOwotICBTQ19PRkZTRVQoU0NfUjEyKTsKLSAgU0NfT0ZGU0VUKFNDX1IxMyk7Ci0gIFNDX09GRlNFVChTQ19SMTQpOwotICBTQ19PRkZTRVQoU0NfUjE1KTsKLSAgU0NfT0ZGU0VUKFNDX0lQKTsKLSAgU0NfT0ZGU0VUKFNDX1NQKTsKLSAgU0NfT0ZGU0VUKFNDX0NSMik7Ci0gIFNDX09GRlNFVChTQ19FUlIpOwotICBTQ19PRkZTRVQoU0NfVFJBUE5PKTsKLSAgU0NfT0ZGU0VUKFNDX0NTKTsKLSAgU0NfT0ZGU0VUKFNDX0ZTKTsKLSAgU0NfT0ZGU0VUKFNDX0dTKTsKLSAgU0NfT0ZGU0VUKFNDX0VGTEFHUyk7Ci0gIFNDX09GRlNFVChTQ19TSUdNQVNLKTsKLSNpZiAwCi0gIFNDX09GRlNFVChTQ19PUklHX1JBWCk7Ci0gIFNDX09GRlNFVChTQ19EUyk7Ci0gIFNDX09GRlNFVChTQ19FUyk7Ci0gIFNDX09GRlNFVChTQ19TUyk7Ci0jZW5kaWYKLSAgcmV0dXJuKDApOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L3V0aWwvbWtfdGhyZWFkLmMgYi9hcmNoL3VtL3N5cy14ODZfNjQvdXRpbC9ta190aHJlYWQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU1MTczOS4uMDAwMDAwMAotLS0gYS9hcmNoL3VtL3N5cy14ODZfNjQvdXRpbC9ta190aHJlYWQuYworKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGtlcm5lbC1vZmZzZXRzLmg+Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgcHJpbnRmKCIvKlxuIik7Ci0gIHByaW50ZigiICogR2VuZXJhdGVkIGJ5IG1rX3RocmVhZFxuIik7Ci0gIHByaW50ZigiICovXG4iKTsKLSAgcHJpbnRmKCJcbiIpOwotICBwcmludGYoIiNpZm5kZWYgX19VTV9USFJFQURfSFxuIik7Ci0gIHByaW50ZigiI2RlZmluZSBfX1VNX1RIUkVBRF9IXG4iKTsKLSAgcHJpbnRmKCJcbiIpOwotI2lmZGVmIFRBU0tfRVhURVJOX1BJRAotICBwcmludGYoIiNkZWZpbmUgVEFTS19FWFRFUk5fUElEKHRhc2spICooKGludCAqKSAmKCgoY2hhciAqKSAodGFzaykpWyVkXSkpXG4iLAotCSBUQVNLX0VYVEVSTl9QSUQpOwotI2VuZGlmCi0gIHByaW50ZigiXG4iKTsKLSAgcHJpbnRmKCIjZW5kaWZcbiIpOwotICByZXR1cm4oMCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3VtL3V0aWwvTWFrZWZpbGUgYi9hcmNoL3VtL3V0aWwvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjNzU1MWMuLjAwMDAwMDAKLS0tIGEvYXJjaC91bS91dGlsL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1ob3N0cHJvZ3MteQkJOj0gbWtfdGFzayBta19jb25zdGFudHMKLWFsd2F5cwkJCTo9ICQoaG9zdHByb2dzLXkpCi0KLUhPU1RDRkxBR1NfbWtfdGFzay5vIDo9IC1JJChvYmp0cmVlKS9hcmNoL3VtCi1IT1NUQ0ZMQUdTX21rX2NvbnN0YW50cy5vIDo9IC1JJChvYmp0cmVlKS9hcmNoL3VtCmRpZmYgLS1naXQgYS9hcmNoL3VtL3V0aWwvbWtfY29uc3RhbnRzLmMgYi9hcmNoL3VtL3V0aWwvbWtfY29uc3RhbnRzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMjE3YmUuLjAwMDAwMDAKLS0tIGEvYXJjaC91bS91dGlsL21rX2NvbnN0YW50cy5jCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8a2VybmVsLW9mZnNldHMuaD4KLQotI2RlZmluZSBTSE9XX0lOVChzeW0pIHByaW50ZigiI2RlZmluZSAlcyAlZFxuIiwgI3N5bSwgc3ltKQotI2RlZmluZSBTSE9XX1NUUihzeW0pIHByaW50ZigiI2RlZmluZSAlcyAlc1xuIiwgI3N5bSwgc3ltKQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gIHByaW50ZigiLypcbiIpOwotICBwcmludGYoIiAqIEdlbmVyYXRlZCBieSBta19jb25zdGFudHNcbiIpOwotICBwcmludGYoIiAqL1xuIik7Ci0gIHByaW50ZigiXG4iKTsKLSAgcHJpbnRmKCIjaWZuZGVmIF9fVU1fQ09OU1RBTlRTX0hcbiIpOwotICBwcmludGYoIiNkZWZpbmUgX19VTV9DT05TVEFOVFNfSFxuIik7Ci0gIHByaW50ZigiXG4iKTsKLQotICBTSE9XX0lOVChVTV9LRVJOX1BBR0VfU0laRSk7Ci0KLSAgU0hPV19TVFIoVU1fS0VSTl9FTUVSRyk7Ci0gIFNIT1dfU1RSKFVNX0tFUk5fQUxFUlQpOwotICBTSE9XX1NUUihVTV9LRVJOX0NSSVQpOwotICBTSE9XX1NUUihVTV9LRVJOX0VSUik7Ci0gIFNIT1dfU1RSKFVNX0tFUk5fV0FSTklORyk7Ci0gIFNIT1dfU1RSKFVNX0tFUk5fTk9USUNFKTsKLSAgU0hPV19TVFIoVU1fS0VSTl9JTkZPKTsKLSAgU0hPV19TVFIoVU1fS0VSTl9ERUJVRyk7Ci0KLSAgU0hPV19JTlQoVU1fTlNFQ19QRVJfU0VDKTsKLSAgcHJpbnRmKCJcbiIpOwotICBwcmludGYoIiNlbmRpZlxuIik7Ci0gIHJldHVybigwKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vdXRpbC9ta190YXNrLmMgYi9hcmNoL3VtL3V0aWwvbWtfdGFzay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmM5NjA2Li4wMDAwMDAwCi0tLSBhL2FyY2gvdW0vdXRpbC9ta190YXNrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxrZXJuZWwtb2Zmc2V0cy5oPgotCi12b2lkIHByaW50X3B0cihjaGFyICpuYW1lLCBjaGFyICp0eXBlLCBpbnQgb2Zmc2V0KQotewotICBwcmludGYoIiNkZWZpbmUgJXModGFzaykgKCglcyAqKSAmKCgoY2hhciAqKSAodGFzaykpWyVkXSkpXG4iLCBuYW1lLCB0eXBlLAotCSBvZmZzZXQpOwotfQotCi12b2lkIHByaW50KGNoYXIgKm5hbWUsIGNoYXIgKnR5cGUsIGludCBvZmZzZXQpCi17Ci0gIHByaW50ZigiI2RlZmluZSAlcyh0YXNrKSAqKCglcyAqKSAmKCgoY2hhciAqKSAodGFzaykpWyVkXSkpXG4iLCBuYW1lLCB0eXBlLAotCSBvZmZzZXQpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gIHByaW50ZigiLypcbiIpOwotICBwcmludGYoIiAqIEdlbmVyYXRlZCBieSBta190YXNrXG4iKTsKLSAgcHJpbnRmKCIgKi9cbiIpOwotICBwcmludGYoIlxuIik7Ci0gIHByaW50ZigiI2lmbmRlZiBfX1RBU0tfSFxuIik7Ci0gIHByaW50ZigiI2RlZmluZSBfX1RBU0tfSFxuIik7Ci0gIHByaW50ZigiXG4iKTsKLSAgcHJpbnRfcHRyKCJUQVNLX1JFR1MiLCAidW5pb24gdW1sX3B0X3JlZ3MiLCBUQVNLX1JFR1MpOwotICBwcmludCgiVEFTS19QSUQiLCAiaW50IiwgVEFTS19QSUQpOwotICBwcmludGYoIlxuIik7Ci0gIHByaW50ZigiI2VuZGlmXG4iKTsKLSAgcmV0dXJuKDApOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvS2NvbmZpZyBiL2FyY2gveDg2XzY0L0tjb25maWcKaW5kZXggZTYzMzIzZS4uMjFhZmE2OSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvS2NvbmZpZworKysgYi9hcmNoL3g4Nl82NC9LY29uZmlnCkBAIC0yNzcsMTEgKzI3Nyw2IEBACiBjb25maWcgSEFWRV9BUkNIX0VBUkxZX1BGTl9UT19OSUQKIAlkZWZfYm9vbCB5CiAKLWNvbmZpZyBIQVZFX0RFQ19MT0NLCi0JYm9vbAotCWRlcGVuZHMgb24gU01QCi0JZGVmYXVsdCB5Ci0KIGNvbmZpZyBOUl9DUFVTCiAJaW50ICJNYXhpbXVtIG51bWJlciBvZiBDUFVzICgyLTI1NikiCiAJcmFuZ2UgMiAyNTYKQEAgLTMxMyw3ICszMDgsNyBAQAogCSAgcHJlc2VudC4gIFRoZSBIUEVUIHByb3ZpZGVzIGEgc3RhYmxlIHRpbWUgYmFzZSBvbiBTTVAKIAkgIHN5c3RlbXMsIHVubGlrZSB0aGUgVFNDLCBidXQgaXQgaXMgbW9yZSBleHBlbnNpdmUgdG8gYWNjZXNzLAogCSAgYXMgaXQgaXMgb2ZmLWNoaXAuICBZb3UgY2FuIGZpbmQgdGhlIEhQRVQgc3BlYyBhdAotCSAgPGh0dHA6Ly93d3cuaW50ZWwuY29tL2xhYnMvcGxhdGNvbXAvaHBldC9ocGV0c3BlYy5odG0+LgorCSAgPGh0dHA6Ly93d3cuaW50ZWwuY29tL2hhcmR3YXJlZGVzaWduL2hwZXRzcGVjLmh0bT4uCiAKIGNvbmZpZyBYODZfUE1fVElNRVIKIAlib29sICJQTSB0aW1lciIKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2lhMzIvaWEzMl9zaWduYWwuYyBiL2FyY2gveDg2XzY0L2lhMzIvaWEzMl9zaWduYWwuYwppbmRleCA2NmUyODIxLi4wOTAzY2MxIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9pYTMyL2lhMzJfc2lnbmFsLmMKKysrIGIvYXJjaC94ODZfNjQvaWEzMi9pYTMyX3NpZ25hbC5jCkBAIC00MjUsNyArNDI1LDExIEBACiAJCXJzcCA9ICh1bnNpZ25lZCBsb25nKSBrYS0+c2Euc2FfcmVzdG9yZXI7CiAJfQogCi0JcmV0dXJuICh2b2lkIF9fdXNlciAqKSgocnNwIC0gZnJhbWVfc2l6ZSkgJiAtOFVMKTsKKwlyc3AgLT0gZnJhbWVfc2l6ZTsKKwkvKiBBbGlnbiB0aGUgc3RhY2sgcG9pbnRlciBhY2NvcmRpbmcgdG8gdGhlIGkzODYgQUJJLAorCSAqIGkuZS4gc28gdGhhdCBvbiBmdW5jdGlvbiBlbnRyeSAoKHNwICsgNCkgJiAxNSkgPT0gMC4gKi8KKwlyc3AgPSAoKHJzcCArIDQpICYgLTE2dWwpIC0gNDsKKwlyZXR1cm4gKHZvaWQgX191c2VyICopIHJzcDsKIH0KIAogaW50IGlhMzJfc2V0dXBfZnJhbWUoaW50IHNpZywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9lODIwLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvZTgyMC5jCmluZGV4IDRlMzRiMGYuLmFiM2Y4N2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9lODIwLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2U4MjAuYwpAQCAtMTcsNiArMTcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvaGVhZC5TIGIvYXJjaC94ODZfNjQva2VybmVsL2hlYWQuUwppbmRleCA0NTkyYmYyLi5iOTJlNWY0IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9oZWFkLlMKQEAgLTI3MCwyNiArMjcwLDI2IEBACiAub3JnIDB4NDAwMAogRU5UUlkobGV2ZWwyX2lkZW50X3BndCkKIAkvKiA0ME1CIGZvciBib290dXAuIAkqLwotCS5xdWFkCTB4MDAwMDAwMDAwMDAwMDE4MwotCS5xdWFkCTB4MDAwMDAwMDAwMDIwMDE4MwotCS5xdWFkCTB4MDAwMDAwMDAwMDQwMDE4MwotCS5xdWFkCTB4MDAwMDAwMDAwMDYwMDE4MwotCS5xdWFkCTB4MDAwMDAwMDAwMDgwMDE4MwotCS5xdWFkCTB4MDAwMDAwMDAwMEEwMDE4MwotCS5xdWFkCTB4MDAwMDAwMDAwMEMwMDE4MwotCS5xdWFkCTB4MDAwMDAwMDAwMEUwMDE4MwotCS5xdWFkCTB4MDAwMDAwMDAwMTAwMDE4MwotCS5xdWFkCTB4MDAwMDAwMDAwMTIwMDE4MwotCS5xdWFkCTB4MDAwMDAwMDAwMTQwMDE4MwotCS5xdWFkCTB4MDAwMDAwMDAwMTYwMDE4MwotCS5xdWFkCTB4MDAwMDAwMDAwMTgwMDE4MwotCS5xdWFkCTB4MDAwMDAwMDAwMUEwMDE4MwotCS5xdWFkCTB4MDAwMDAwMDAwMUMwMDE4MwotCS5xdWFkCTB4MDAwMDAwMDAwMUUwMDE4MwotCS5xdWFkCTB4MDAwMDAwMDAwMjAwMDE4MwotCS5xdWFkCTB4MDAwMDAwMDAwMjIwMDE4MwotCS5xdWFkCTB4MDAwMDAwMDAwMjQwMDE4MwotCS5xdWFkCTB4MDAwMDAwMDAwMjYwMDE4MworCS5xdWFkCTB4MDAwMDAwMDAwMDAwMDA4MworCS5xdWFkCTB4MDAwMDAwMDAwMDIwMDA4MworCS5xdWFkCTB4MDAwMDAwMDAwMDQwMDA4MworCS5xdWFkCTB4MDAwMDAwMDAwMDYwMDA4MworCS5xdWFkCTB4MDAwMDAwMDAwMDgwMDA4MworCS5xdWFkCTB4MDAwMDAwMDAwMEEwMDA4MworCS5xdWFkCTB4MDAwMDAwMDAwMEMwMDA4MworCS5xdWFkCTB4MDAwMDAwMDAwMEUwMDA4MworCS5xdWFkCTB4MDAwMDAwMDAwMTAwMDA4MworCS5xdWFkCTB4MDAwMDAwMDAwMTIwMDA4MworCS5xdWFkCTB4MDAwMDAwMDAwMTQwMDA4MworCS5xdWFkCTB4MDAwMDAwMDAwMTYwMDA4MworCS5xdWFkCTB4MDAwMDAwMDAwMTgwMDA4MworCS5xdWFkCTB4MDAwMDAwMDAwMUEwMDA4MworCS5xdWFkCTB4MDAwMDAwMDAwMUMwMDA4MworCS5xdWFkCTB4MDAwMDAwMDAwMUUwMDA4MworCS5xdWFkCTB4MDAwMDAwMDAwMjAwMDA4MworCS5xdWFkCTB4MDAwMDAwMDAwMjIwMDA4MworCS5xdWFkCTB4MDAwMDAwMDAwMjQwMDA4MworCS5xdWFkCTB4MDAwMDAwMDAwMjYwMDA4MwogCS8qIFRlbXBvcmFyeSBtYXBwaW5ncyBmb3IgdGhlIHN1cGVyIGVhcmx5IGFsbG9jYXRvciBpbiBhcmNoL3g4Nl82NC9tbS9pbml0LmMgKi8KIAkuZ2xvYmwgdGVtcF9ib290X3BtZHMKIHRlbXBfYm9vdF9wbWRzOgpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2twcm9iZXMuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggZGYwOGM0My4uNzZhMjhiMCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwva3Byb2Jlcy5jCkBAIC03Nyw5ICs3Nyw5IEBACiBpbnQgX19rcHJvYmVzIGFyY2hfcHJlcGFyZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKIHsKIAkvKiBpbnNuOiBtdXN0IGJlIG9uIHNwZWNpYWwgZXhlY3V0YWJsZSBwYWdlIG9uIHg4Nl82NC4gKi8KLQl1cCgma3Byb2JlX211dGV4KTsKLQlwLT5haW5zbi5pbnNuID0gZ2V0X2luc25fc2xvdCgpOwogCWRvd24oJmtwcm9iZV9tdXRleCk7CisJcC0+YWluc24uaW5zbiA9IGdldF9pbnNuX3Nsb3QoKTsKKwl1cCgma3Byb2JlX211dGV4KTsKIAlpZiAoIXAtPmFpbnNuLmluc24pIHsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtMjMxLDkgKzIzMSw5IEBACiAKIHZvaWQgX19rcHJvYmVzIGFyY2hfcmVtb3ZlX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQogewotCXVwKCZrcHJvYmVfbXV0ZXgpOwotCWZyZWVfaW5zbl9zbG90KHAtPmFpbnNuLmluc24pOwogCWRvd24oJmtwcm9iZV9tdXRleCk7CisJZnJlZV9pbnNuX3Nsb3QocC0+YWluc24uaW5zbik7CisJdXAoJmtwcm9iZV9tdXRleCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzYXZlX3ByZXZpb3VzX2twcm9iZSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL21jZS5jIGIvYXJjaC94ODZfNjQva2VybmVsL21jZS5jCmluZGV4IDA4MjAzYjAuLjY5NTQxZGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9tY2UuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvbWNlLmMKQEAgLTU0LDkgKzU0LDEyIEBACiB7CiAJdW5zaWduZWQgbmV4dCwgZW50cnk7CiAJbWNlLT5maW5pc2hlZCA9IDA7Ci0Jc21wX3dtYigpOworCXdtYigpOwogCWZvciAoOzspIHsKIAkJZW50cnkgPSByY3VfZGVyZWZlcmVuY2UobWNlbG9nLm5leHQpOworCQkvKiBUaGUgcm1iIGZvcmNlcyB0aGUgY29tcGlsZXIgdG8gcmVsb2FkIG5leHQgaW4gZWFjaAorCQkgICAgaXRlcmF0aW9uICovCisJCXJtYigpOwogCQlmb3IgKDs7KSB7CiAJCQkvKiBXaGVuIHRoZSBidWZmZXIgZmlsbHMgdXAgZGlzY2FyZCBuZXcgZW50cmllcy4gQXNzdW1lCiAJCQkgICB0aGF0IHRoZSBlYXJsaWVyIGVycm9ycyBhcmUgdGhlIG1vcmUgaW50ZXJlc3RpbmcuICovCkBAIC02OSw2ICs3Miw3IEBACiAJCQkJZW50cnkrKzsKIAkJCQljb250aW51ZTsKIAkJCX0KKwkJCWJyZWFrOwogCQl9CiAJCXNtcF9ybWIoKTsKIAkJbmV4dCA9IGVudHJ5ICsgMTsKQEAgLTc2LDkgKzgwLDkgQEAKIAkJCWJyZWFrOwogCX0KIAltZW1jcHkobWNlbG9nLmVudHJ5ICsgZW50cnksIG1jZSwgc2l6ZW9mKHN0cnVjdCBtY2UpKTsKLQlzbXBfd21iKCk7CisJd21iKCk7CiAJbWNlbG9nLmVudHJ5W2VudHJ5XS5maW5pc2hlZCA9IDE7Ci0Jc21wX3dtYigpOworCXdtYigpOwogCiAJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KDAsICZjb25zb2xlX2xvZ2dlZCkpCiAJCW5vdGlmeV91c2VyID0gMTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94ODZfNjQva2VybmVsL3NldHVwLmMKaW5kZXggMzUxZDhkNi4uY2IyOGRmMSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3NldHVwLmMKQEAgLTgzNiw2ICs4MzYsMjMgQEAKIAlpbnQgcjsKIAlpbnQgbGV2ZWw7CiAKKyNpZmRlZiBDT05GSUdfU01QCisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKworCS8qCisJICogRGlzYWJsZSBUTEIgZmx1c2ggZmlsdGVyIGJ5IHNldHRpbmcgSFdDUi5GRkRJUyBvbiBLOAorCSAqIGJpdCA2IG9mIG1zciBDMDAxXzAwMTUKKyAJICoKKwkgKiBFcnJhdGEgNjMgZm9yIFNILUIzIHN0ZXBwaW5ncworCSAqIEVycmF0YSAxMjIgZm9yIGFsbCBzdGVwcGluZ3MgKEYrIGhhdmUgaXQgZGlzYWJsZWQgYnkgZGVmYXVsdCkKKwkgKi8KKwlpZiAoYy0+eDg2ID09IDE1KSB7CisJCXJkbXNybChNU1JfSzhfSFdDUiwgdmFsdWUpOworCQl2YWx1ZSB8PSAxIDw8IDY7CisJCXdybXNybChNU1JfSzhfSFdDUiwgdmFsdWUpOworCX0KKyNlbmRpZgorCiAJLyogQml0IDMxIGluIG5vcm1hbCBDUFVJRCB1c2VkIGZvciBub25zdGFuZGFyZCAzRE5vdyBJRDsKIAkgICAzRE5vdyBpcyBJRGQgYnkgYml0IDMxIGluIGV4dGVuZGVkIENQVUlEICgxKjMyKzMxKSBhbnl3YXkgKi8KIAljbGVhcl9iaXQoMCozMiszMSwgJmMtPng4Nl9jYXBhYmlsaXR5KTsKQEAgLTk1MCwxMyArOTY3LDEyIEBACiBzdGF0aWMgdm9pZCBzcmF0X2RldGVjdF9ub2RlKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX05VTUEKLQl1bnNpZ25lZCBhcGljaWQsIG5vZGU7CisJdW5zaWduZWQgbm9kZTsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJLyogRG9uJ3QgZG8gdGhlIGZ1bmt5IGZhbGxiYWNrIGhldXJpc3RpY3MgdGhlIEFNRCB2ZXJzaW9uIGVtcGxveXMKIAkgICBmb3Igbm93LiAqLwotCWFwaWNpZCA9IHBoeXNfcHJvY19pZFtjcHVdOwotCW5vZGUgPSBhcGljaWRfdG9fbm9kZVthcGljaWRdOworCW5vZGUgPSBhcGljaWRfdG9fbm9kZVtoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKV07CiAJaWYgKG5vZGUgPT0gTlVNQV9OT19OT0RFKQogCQlub2RlID0gMDsKIAljcHVfdG9fbm9kZVtjcHVdID0gbm9kZTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cDY0LmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXA2NC5jCmluZGV4IGJkMzNiZTIuLjc5MTkwODkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cDY0LmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3NldHVwNjQuYwpAQCAtODcsNiArODcsMTAgQEAKIAlpbnQgaTsKIAl1bnNpZ25lZCBsb25nIHNpemU7CiAKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwlwcmVmaWxsX3Bvc3NpYmxlX21hcCgpOworI2VuZGlmCisKIAkvKiBDb3B5IHNlY3Rpb24gZm9yIGVhY2ggQ1BVICh3ZSBkaXNjYXJkIHRoZSBvcmlnaW5hbCkgKi8KIAlzaXplID0gQUxJR04oX19wZXJfY3B1X2VuZCAtIF9fcGVyX2NwdV9zdGFydCwgU01QX0NBQ0hFX0JZVEVTKTsKICNpZmRlZiBDT05GSUdfTU9EVUxFUwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zbXBib290LmMKaW5kZXggZTEyZDdiYS4uNjU4YTgxYiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc21wYm9vdC5jCkBAIC04OTIsNyArODkyLDcgQEAKICAqIHRob3NlIE5SX0NQVVMsIGhlbmNlIGNwdV9wb3NzaWJsZV9tYXAgcmVwcmVzZW50cyBlbnRpcmUgTlJfQ1BVUyByYW5nZS4KICAqIC0gQXNob2sgUmFqCiAgKi8KLXN0YXRpYyB2b2lkIHByZWZpbGxfcG9zc2libGVfbWFwKHZvaWQpCitfX2luaXQgdm9pZCBwcmVmaWxsX3Bvc3NpYmxlX21hcCh2b2lkKQogewogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspCkBAIC05NjcsMTAgKzk2Nyw2IEBACiAJY3VycmVudF9jcHVfZGF0YSA9IGJvb3RfY3B1X2RhdGE7CiAJY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUgPSAwOyAgLyogbmVlZGVkPyAqLwogCi0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi0JcHJlZmlsbF9wb3NzaWJsZV9tYXAoKTsKLSNlbmRpZgotCiAJaWYgKHNtcF9zYW5pdHlfY2hlY2sobWF4X2NwdXMpIDwgMCkgewogCQlwcmludGsoS0VSTl9JTkZPICJTTVAgZGlzYWJsZWRcbiIpOwogCQlkaXNhYmxlX3NtcCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3N1c3BlbmQuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zdXNwZW5kLmMKaW5kZXggZWJiOWFiZi4uZjA2NmM2YSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3N1c3BlbmQuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc3VzcGVuZC5jCkBAIC0xMSw2ICsxMSw4IEBACiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogI2luY2x1ZGUgPGFzbS9wcm90by5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KIAogc3RydWN0IHNhdmVkX2NvbnRleHQgc2F2ZWRfY29udGV4dDsKIApAQCAtMTQwLDQgKzE0MiwxMjkgQEAKIAogfQogCisjaWZkZWYgQ09ORklHX1NPRlRXQVJFX1NVU1BFTkQKKy8qIERlZmluZWQgaW4gYXJjaC94ODZfNjQva2VybmVsL3N1c3BlbmRfYXNtLlMgKi8KK2V4dGVybiBpbnQgcmVzdG9yZV9pbWFnZSh2b2lkKTsKIAorcGdkX3QgKnRlbXBfbGV2ZWw0X3BndDsKKworc3RhdGljIHZvaWQgKipwYWdlczsKKworc3RhdGljIGlubGluZSB2b2lkICpfX2FkZF9wYWdlKHZvaWQpCit7CisJdm9pZCAqKmM7CisKKwljID0gKHZvaWQgKiopZ2V0X3VzYWJsZV9wYWdlKEdGUF9BVE9NSUMpOworCWlmIChjKSB7CisJCSpjID0gcGFnZXM7CisJCXBhZ2VzID0gYzsKKwl9CisJcmV0dXJuIGM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqX19uZXh0X3BhZ2Uodm9pZCkKK3sKKwl2b2lkICoqYzsKKworCWMgPSBwYWdlczsKKwlpZiAoYykgeworCQlwYWdlcyA9ICpjOworCQkqYyA9IE5VTEw7CisJfQorCXJldHVybiBjOworfQorCisvKgorICogVHJ5IHRvIGFsbG9jYXRlIGFzIG1hbnkgdXNhYmxlIHBhZ2VzIGFzIG5lZWRlZCBhbmQgZGFpc3kgY2hhaW4gdGhlbS4KKyAqIElmIG9uZSBhbGxvY2F0aW9uIGZhaWxzLCBmcmVlIHRoZSBwYWdlcyBhbGxvY2F0ZWQgc28gZmFyCisgKi8KK3N0YXRpYyBpbnQgYWxsb2NfdXNhYmxlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgbikKK3sKKwl2b2lkICpwOworCisJcGFnZXMgPSBOVUxMOworCWRvCisJCWlmICghX19hZGRfcGFnZSgpKQorCQkJYnJlYWs7CisJd2hpbGUgKC0tbik7CisJaWYgKG4pIHsKKwkJcCA9IF9fbmV4dF9wYWdlKCk7CisJCXdoaWxlIChwKSB7CisJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcCk7CisJCQlwID0gX19uZXh0X3BhZ2UoKTsKKwkJfQorCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlc19waHlzX3B1ZF9pbml0KHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJbG9uZyBpLCBqOworCisJaSA9IHB1ZF9pbmRleChhZGRyZXNzKTsKKwlwdWQgPSBwdWQgKyBpOworCWZvciAoOyBpIDwgUFRSU19QRVJfUFVEOyBwdWQrKywgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgcGFkZHI7CisJCXBtZF90ICpwbWQ7CisKKwkJcGFkZHIgPSBhZGRyZXNzICsgaSpQVURfU0laRTsKKwkJaWYgKHBhZGRyID49IGVuZCkKKwkJCWJyZWFrOworCisJCXBtZCA9IChwbWRfdCAqKV9fbmV4dF9wYWdlKCk7CisJCXNldF9wdWQocHVkLCBfX3B1ZChfX3BhKHBtZCkgfCBfS0VSTlBHX1RBQkxFKSk7CisJCWZvciAoaiA9IDA7IGogPCBQVFJTX1BFUl9QTUQ7IHBtZCsrLCBqKyssIHBhZGRyICs9IFBNRF9TSVpFKSB7CisJCQl1bnNpZ25lZCBsb25nIHBlOworCisJCQlpZiAocGFkZHIgPj0gZW5kKQorCQkJCWJyZWFrOworCQkJcGUgPSBfUEFHRV9OWCB8IF9QQUdFX1BTRSB8IF9LRVJOUEdfVEFCTEUgfCBwYWRkcjsKKwkJCXBlICY9IF9fc3VwcG9ydGVkX3B0ZV9tYXNrOworCQkJc2V0X3BtZChwbWQsIF9fcG1kKHBlKSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNldF91cF90ZW1wb3JhcnlfbWFwcGluZ3Modm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQsIG5leHQ7CisKKwl0ZW1wX2xldmVsNF9wZ3QgPSAocGdkX3QgKilfX25leHRfcGFnZSgpOworCisJLyogSXQgaXMgc2FmZSB0byByZXVzZSB0aGUgb3JpZ2luYWwga2VybmVsIG1hcHBpbmcgKi8KKwlzZXRfcGdkKHRlbXBfbGV2ZWw0X3BndCArIHBnZF9pbmRleChfX1NUQVJUX0tFUk5FTF9tYXApLAorCQlpbml0X2xldmVsNF9wZ3RbcGdkX2luZGV4KF9fU1RBUlRfS0VSTkVMX21hcCldKTsKKworCS8qIFNldCB1cCB0aGUgZGlyZWN0IG1hcHBpbmcgZnJvbSBzY3JhdGNoICovCisJc3RhcnQgPSAodW5zaWduZWQgbG9uZylwZm5fdG9fa2FkZHIoMCk7CisJZW5kID0gKHVuc2lnbmVkIGxvbmcpcGZuX3RvX2thZGRyKGVuZF9wZm4pOworCisJZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCA9IG5leHQpIHsKKwkJcHVkX3QgKnB1ZCA9IChwdWRfdCAqKV9fbmV4dF9wYWdlKCk7CisJCW5leHQgPSBzdGFydCArIFBHRElSX1NJWkU7CisJCWlmIChuZXh0ID4gZW5kKQorCQkJbmV4dCA9IGVuZDsKKwkJcmVzX3BoeXNfcHVkX2luaXQocHVkLCBfX3BhKHN0YXJ0KSwgX19wYShuZXh0KSk7CisJCXNldF9wZ2QodGVtcF9sZXZlbDRfcGd0ICsgcGdkX2luZGV4KHN0YXJ0KSwKKwkJCW1rX2tlcm5lbF9wZ2QoX19wYShwdWQpKSk7CisJfQorfQorCitpbnQgc3dzdXNwX2FyY2hfcmVzdW1lKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBuOworCisJbiA9ICgoZW5kX3BmbiA8PCBQQUdFX1NISUZUKSArIFBVRF9TSVpFIC0gMSkgPj4gUFVEX1NISUZUOworCW4gKz0gKG4gKyBQVFJTX1BFUl9QVUQgLSAxKSAvIFBUUlNfUEVSX1BVRCArIDE7CisJcHJfZGVidWcoInN3c3VzcF9hcmNoX3Jlc3VtZSgpOiBwYWdlcyBuZWVkZWQgPSAlbHVcbiIsIG4pOworCWlmIChhbGxvY191c2FibGVfcGFnZXMobikpIHsKKwkJZnJlZV9lYXRlbl9tZW1vcnkoKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCS8qIFdlIGhhdmUgZ290IGVub3VnaCBtZW1vcnkgYW5kIGZyb20gbm93IG9uIHdlIGNhbm5vdCByZWNvdmVyICovCisJc2V0X3VwX3RlbXBvcmFyeV9tYXBwaW5ncygpOworCXJlc3RvcmVfaW1hZ2UoKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfU09GVFdBUkVfU1VTUEVORCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3N1c3BlbmRfYXNtLlMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc3VzcGVuZF9hc20uUwppbmRleCA0ZDY1OWU5Li4zMjBiNmZiIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvc3VzcGVuZF9hc20uUworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc3VzcGVuZF9hc20uUwpAQCAtMzksMTIgKzM5LDEzIEBACiAJY2FsbCBzd3N1c3Bfc2F2ZQogCXJldAogCi1FTlRSWShzd3N1c3BfYXJjaF9yZXN1bWUpCi0JLyogc2V0IHVwIGNyMyAqLwkKLQlsZWFxCWluaXRfbGV2ZWw0X3BndCglcmlwKSwlcmF4Ci0Jc3VicQkkX19TVEFSVF9LRVJORUxfbWFwLCVyYXgKLQltb3ZxCSVyYXgsJWNyMwotCitFTlRSWShyZXN0b3JlX2ltYWdlKQorCS8qIHN3aXRjaCB0byB0ZW1wb3JhcnkgcGFnZSB0YWJsZXMgKi8KKwltb3ZxCSRfX1BBR0VfT0ZGU0VULCAlcmR4CisJbW92cQl0ZW1wX2xldmVsNF9wZ3QoJXJpcCksICVyYXgKKwlzdWJxCSVyZHgsICVyYXgKKwltb3ZxCSVyYXgsICVjcjMKKwkvKiBGbHVzaCBUTEIgKi8KIAltb3ZxCW1tdV9jcjRfZmVhdHVyZXMoJXJpcCksICVyYXgKIAltb3ZxCSVyYXgsICVyZHgKIAlhbmRxCSR+KDE8PDcpLCAlcmR4CSMgUEdFCkBAIC02OSw2ICs3MCwxMCBAQAogCW1vdnEJcGJlX25leHQoJXJkeCksICVyZHgKIAlqbXAJbG9vcAogZG9uZToKKwkvKiBnbyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBwYWdlIHRhYmxlcyAqLworCWxlYXEJaW5pdF9sZXZlbDRfcGd0KCVyaXApLCAlcmF4CisJc3VicQkkX19TVEFSVF9LRVJORUxfbWFwLCAlcmF4CisJbW92cQklcmF4LCAlY3IzCiAJLyogRmx1c2ggVExCLCBpbmNsdWRpbmcgImdsb2JhbCIgdGhpbmdzICh2bWFsbG9jKSAqLwogCW1vdnEJbW11X2NyNF9mZWF0dXJlcyglcmlwKSwgJXJheAogCW1vdnEJJXJheCwgJXJkeApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3RpbWUuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC90aW1lLmMKaW5kZXggMjM3M2NiOC4uNzAzYWNkZSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvdGltZS5jCkBAIC05NTksOSArOTU5LDYgQEAKICAJICAgYXJlIGhhbmRsZWQgaW4gdGhlIE9FTSBjaGVjayBhYm92ZS4gKi8KICAJaWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKQogIAkJcmV0dXJuIDA7Ci0gCS8qIEFsbCBpbiBhIHNpbmdsZSBzb2NrZXQgLSBzaG91bGQgYmUgc3luY2hyb25pemVkICovCi0gCWlmIChjcHVzX3dlaWdodChjcHVfY29yZV9tYXBbMF0pID09IG51bV9vbmxpbmVfY3B1cygpKQotIAkJcmV0dXJuIDA7CiAjZW5kaWYKICAJLyogQXNzdW1lIG11bHRpIHNvY2tldCBzeXN0ZW1zIGFyZSBub3Qgc3luY2hyb25pemVkICovCiAgCXJldHVybiBudW1fb25saW5lX2NwdXMoKSA+IDE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwveDg2NjRfa3N5bXMuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC94ODY2NF9rc3ltcy5jCmluZGV4IDY4ZWMwMzAuLmZkOTlkZGQwMCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3g4NjY0X2tzeW1zLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3g4NjY0X2tzeW1zLmMKQEAgLTE3OCwxMCArMTc4LDYgQEAKIAogRVhQT1JUX1NZTUJPTChlbXB0eV96ZXJvX3BhZ2UpOwogCi0jaWZkZWYgQ09ORklHX0hBVkVfREVDX0xPQ0sKLUVYUE9SVF9TWU1CT0woX2F0b21pY19kZWNfYW5kX2xvY2spOwotI2VuZGlmCi0KIEVYUE9SVF9TWU1CT0woZGllX2NoYWluKTsKIEVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfZGllX25vdGlmaWVyKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvbGliL01ha2VmaWxlIGIvYXJjaC94ODZfNjQvbGliL01ha2VmaWxlCmluZGV4IDZiMjZhMWMuLmJiYTVkYjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL3g4Nl82NC9saWIvTWFrZWZpbGUKQEAgLTEwLDUgKzEwLDMgQEAKIAl1c2VyY29weS5vIGdldHVzZXIubyBwdXR1c2VyLm8gIFwKIAl0aHVuay5vIGNsZWFyX3BhZ2UubyBjb3B5X3BhZ2UubyBiaXRzdHIubyBiaXRvcHMubwogbGliLXkgKz0gbWVtY3B5Lm8gbWVtbW92ZS5vIG1lbXNldC5vIGNvcHlfdXNlci5vCi0KLWxpYi0kKENPTkZJR19IQVZFX0RFQ19MT0NLKSArPSBkZWNfYW5kX2xvY2subwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvbGliL2RlY19hbmRfbG9jay5jIGIvYXJjaC94ODZfNjQvbGliL2RlY19hbmRfbG9jay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjQzMzk0Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2XzY0L2xpYi9kZWNfYW5kX2xvY2suYworKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiB4ODYgdmVyc2lvbiBvZiAiYXRvbWljX2RlY19hbmRfbG9jaygpIiB1c2luZwotICogdGhlIGF0b21pYyAiY21weGNoZyIgaW5zdHJ1Y3Rpb24uCi0gKgotICogKEZvciBDUFUncyBsYWNraW5nIGNtcHhjaGcsIHdlIHVzZSB0aGUgc2xvdwotICogZ2VuZXJpYyB2ZXJzaW9uLCBhbmQgdGhpcyBvbmUgbmV2ZXIgZXZlbiBnZXRzCi0gKiBjb21waWxlZCkuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotCi1pbnQgX2F0b21pY19kZWNfYW5kX2xvY2soYXRvbWljX3QgKmF0b21pYywgc3BpbmxvY2tfdCAqbG9jaykKLXsKLQlpbnQgY291bnRlcjsKLQlpbnQgbmV3Y291bnQ7Ci0KLXJlcGVhdDoKLQljb3VudGVyID0gYXRvbWljX3JlYWQoYXRvbWljKTsKLQluZXdjb3VudCA9IGNvdW50ZXItMTsKLQotCWlmICghbmV3Y291bnQpCi0JCWdvdG8gc2xvd19wYXRoOwotCi0JYXNtIHZvbGF0aWxlKCJsb2NrOyBjbXB4Y2hnbCAlMSwlMiIKLQkJOiI9YSIgKG5ld2NvdW50KQotCQk6InIiIChuZXdjb3VudCksICJtIiAoYXRvbWljLT5jb3VudGVyKSwgIjAiIChjb3VudGVyKSk7Ci0KLQkvKiBJZiB0aGUgYWJvdmUgZmFpbGVkLCAiZWF4IiB3aWxsIGhhdmUgY2hhbmdlZCAqLwotCWlmIChuZXdjb3VudCAhPSBjb3VudGVyKQotCQlnb3RvIHJlcGVhdDsKLQlyZXR1cm4gMDsKLQotc2xvd19wYXRoOgotCXNwaW5fbG9jayhsb2NrKTsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdChhdG9taWMpKQotCQlyZXR1cm4gMTsKLQlzcGluX3VubG9jayhsb2NrKTsKLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L21tL251bWEuYyBiL2FyY2gveDg2XzY0L21tL251bWEuYwppbmRleCA4MGE0OWQ5Li4yMTQ4MDM4IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9tbS9udW1hLmMKKysrIGIvYXJjaC94ODZfNjQvbW0vbnVtYS5jCkBAIC0xNjcsMTggKzE2NywxNiBAQAogCSAgIG1hcHBpbmcuIFRvIGF2b2lkIHRoaXMgZmlsbCBpbiB0aGUgbWFwcGluZyBmb3IgYWxsIHBvc3NpYmxlCiAJICAgQ1BVcywgYXMgdGhlIG51bWJlciBvZiBDUFVzIGlzIG5vdCBrbm93biB5ZXQuIAogCSAgIFdlIHJvdW5kIHJvYmluIHRoZSBleGlzdGluZyBub2Rlcy4gKi8KLQlyciA9IDA7CisJcnIgPSBmaXJzdF9ub2RlKG5vZGVfb25saW5lX21hcCk7CiAJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgewogCQlpZiAoY3B1X3RvX25vZGVbaV0gIT0gTlVNQV9OT19OT0RFKQogCQkJY29udGludWU7CisJCWNwdV90b19ub2RlW2ldID0gcnI7CiAJCXJyID0gbmV4dF9ub2RlKHJyLCBub2RlX29ubGluZV9tYXApOwogCQlpZiAocnIgPT0gTUFYX05VTU5PREVTKQogCQkJcnIgPSBmaXJzdF9ub2RlKG5vZGVfb25saW5lX21hcCk7Ci0JCWNwdV90b19ub2RlW2ldID0gcnI7Ci0JCXJyKys7IAogCX0KIAotCXNldF9iaXQoMCwgJm5vZGVfdG9fY3B1bWFza1tjcHVfdG9fbm9kZSgwKV0pOwogfQogCiAjaWZkZWYgQ09ORklHX05VTUFfRU1VCkBAIC0yNjYsOSArMjY0LDcgQEAKIAogX19jcHVpbml0IHZvaWQgbnVtYV9hZGRfY3B1KGludCBjcHUpCiB7Ci0JLyogQlAgaXMgaW5pdGlhbGl6ZWQgZWxzZXdoZXJlICovCi0JaWYgKGNwdSkgCi0JCXNldF9iaXQoY3B1LCAmbm9kZV90b19jcHVtYXNrW2NwdV90b19ub2RlKGNwdSldKTsKKwlzZXRfYml0KGNwdSwgJm5vZGVfdG9fY3B1bWFza1tjcHVfdG9fbm9kZShjcHUpXSk7CiB9IAogCiB1bnNpZ25lZCBsb25nIF9faW5pdCBudW1hX2ZyZWVfYWxsX2Jvb3RtZW0odm9pZCkgCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9tbS9wYWdlYXR0ci5jIGIvYXJjaC94ODZfNjQvbW0vcGFnZWF0dHIuYwppbmRleCA5NDg2MmUxLi5iOTBlOGZlIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9tbS9wYWdlYXR0ci5jCisrKyBiL2FyY2gveDg2XzY0L21tL3BhZ2VhdHRyLmMKQEAgLTIyMCw4ICsyMjAsNiBAQAogCWRvd25fcmVhZCgmaW5pdF9tbS5tbWFwX3NlbSk7CiAJZGYgPSB4Y2hnKCZkZl9saXN0LCBOVUxMKTsKIAl1cF9yZWFkKCZpbml0X21tLm1tYXBfc2VtKTsKLQlpZiAoIWRmKQotCQlyZXR1cm47CiAJZmx1c2hfbWFwKChkZiAmJiAhZGYtPm5leHQpID8gZGYtPmFkZHJlc3MgOiAwKTsKIAlmb3IgKDsgZGY7IGRmID0gbmV4dF9kZikgeyAKIAkJbmV4dF9kZiA9IGRmLT5uZXh0OwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvS2NvbmZpZyBiL2FyY2gveHRlbnNhL0tjb25maWcKaW5kZXggMmI2MjU3Yi4uN2U4NDFhYSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvS2NvbmZpZworKysgYi9hcmNoL3h0ZW5zYS9LY29uZmlnCkBAIC0yNiwxMCArMjYsNiBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAotY29uZmlnIEhBVkVfREVDX0xPQ0sKLQlib29sCi0JZGVmYXVsdCB5Ci0KIGNvbmZpZyBHRU5FUklDX0hBUkRJUlFTCiAJYm9vbAogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3BjaS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3BjaS5jCmluZGV4IDA5ODg3YzkuLmRlMTk1MDEgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9wY2kuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvcGNpLmMKQEAgLTQwMiw4ICs0MDIsOCBAQAogCV9fcGNpX21tYXBfc2V0X2ZsYWdzKGRldiwgdm1hLCBtbWFwX3N0YXRlKTsKIAlfX3BjaV9tbWFwX3NldF9wZ3Byb3QoZGV2LCB2bWEsIG1tYXBfc3RhdGUsIHdyaXRlX2NvbWJpbmUpOwogCi0JcmV0ID0gaW9fcmVtYXBfcGFnZV9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fcGdvZmY8PFBBR0VfU0hJRlQsCi0JCQkgICAgICAgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX3BhZ2VfcHJvdCk7CisJcmV0ID0gaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9wZ29mZiwKKwkJCSAgICAgICAgIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCx2bWEtPnZtX3BhZ2VfcHJvdCk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3BsYXRmb3JtLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvcGxhdGZvcm0uYwppbmRleCBjZjEzNjI3Li4wMzY3NGRhIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvcGxhdGZvcm0uYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvcGxhdGZvcm0uYwpAQCAtMzksNyArMzksNyBAQAogX0YoaW50LCBnZXRfcnRjX3RpbWUsICh0aW1lX3QqIHQpLCB7IHJldHVybiAwOyB9KTsKIF9GKGludCwgc2V0X3J0Y190aW1lLCAodGltZV90IHQpLCB7IHJldHVybiAwOyB9KTsKIAotI2lmIENPTkZJR19YVEVOU0FfQ0FMSUJSQVRFX0NDT1VOVAorI2lmZGVmIENPTkZJR19YVEVOU0FfQ0FMSUJSQVRFX0NDT1VOVAogX0Yodm9pZCwgY2FsaWJyYXRlX2Njb3VudCwgKHZvaWQpLAogewogICBwcmludGsgKCJFUlJPUjogQ2Fubm90IGNhbGlicmF0ZSBjcHUgZnJlcXVlbmN5ISBBc3N1bWluZyAxMDBNSHouXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGM4M2JiMGQuLjA4ZWY2ZDggMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYwpAQCAtNDU3LDcgKzQ1Nyw3IEBACiBkdW1wX3Rhc2tfZnB1KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGVsZl9mcHJlZ3NldF90ICpyKQogewogLyogc2VlIGFzbS9jb3Byb2Nlc3Nvci5oIGZvciB0aGlzIG1hZ2ljIG51bWJlciAxNiAqLwotI2lmIFRPVEFMX0NQRVhUUkFfU0laRSA+IDE2CisjaWYgWFRFTlNBX0NQX0VYVFJBX1NJWkUgPiAxNgogCWRvX3NhdmVfZnByZWdzIChyLCByZWdzLCB0YXNrKTsKIAogCS8qICBGb3Igbm93LCBiaXQgMTYgbWVhbnMgc29tZSBleHRyYSBzdGF0ZSBtYXkgYmUgcHJlc2VudDogICovCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC9zZXR1cC5jCmluZGV4IDFmNWJmNWQuLjUxM2VkOGQgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9zZXR1cC5jCkBAIC0zMDQsNyArMzA0LDcgQEAKICMgZW5kaWYKICNlbmRpZgogCi0jaWYgQ09ORklHX1BDSQorI2lmZGVmIENPTkZJR19QQ0kKIAlwbGF0Zm9ybV9wY2liaW9zX2luaXQoKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3NpZ25hbC5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3NpZ25hbC5jCmluZGV4IGRjNDJjZWQuLmUyNTJiNjEgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvc2lnbmFsLmMKQEAgLTE4Miw3ICsxODIsNyBAQAogCiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCXJlbGVhc2VfYWxsX2NwKHRzayk7Ci0JcmV0dXJuIF9fY29weV9mcm9tX3VzZXIodHNrLT50aHJlYWQuY3BleHRyYSwgYnVmLCBUT1RBTF9DUEVYVFJBX1NJWkUpOworCXJldHVybiBfX2NvcHlfZnJvbV91c2VyKHRzay0+dGhyZWFkLmNwZXh0cmEsIGJ1ZiwgWFRFTlNBX0NQX0VYVFJBX1NJWkUpOwogI2VuZGlmCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvdGltZS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3RpbWUuYwppbmRleCAxYWM3ZDVjLi44ZTQyM2QxIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC90aW1lLmMKQEAgLTY4LDcgKzY4LDcgQEAKIAkgKiBzcGVlZCBmb3IgdGhlIENBTElCUkFURS4KIAkgKi8KIAotI2lmIENPTkZJR19YVEVOU0FfQ0FMSUJSQVRFX0NDT1VOVAorI2lmZGVmIENPTkZJR19YVEVOU0FfQ0FMSUJSQVRFX0NDT1VOVAogCXByaW50aygiQ2FsaWJyYXRpbmcgQ1BVIGZyZXF1ZW5jeSAiKTsKIAlwbGF0Zm9ybV9jYWxpYnJhdGVfY2NvdW50KCk7CiAJcHJpbnRrKCIlZC4lMDJkIE1IelxuIiwgKGludCljY291bnRfcGVyX2ppZmZ5LygxMDAwMDAwL0haKSwKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL21tL2luaXQuYyBiL2FyY2gveHRlbnNhL21tL2luaXQuYwppbmRleCA1NmFhY2U4Li41YTkxZDZjIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9tbS9pbml0LmMKKysrIGIvYXJjaC94dGVuc2EvbW0vaW5pdC5jCkBAIC0yMzksNyArMjM5LDcgQEAKIAloaWdoX21lbW9yeSA9ICh2b2lkICopIF9fdmEobWF4X21hcG5yIDw8IFBBR0VfU0hJRlQpOwogCWhpZ2htZW1zaXplID0gMDsKIAotI2lmIENPTkZJR19ISUdITUVNCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KICNlcnJvciBISUdIR01FTSBub3QgaW1wbGVtZW50ZWQgaW4gaW5pdC5jCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY29ybi9jaGFyL3BjZjg1ODMuYyBiL2RyaXZlcnMvYWNvcm4vY2hhci9wY2Y4NTgzLmMKaW5kZXggMTQxYjRjMi4uMmI4NTBlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY29ybi9jaGFyL3BjZjg1ODMuYworKysgYi9kcml2ZXJzL2Fjb3JuL2NoYXIvcGNmODU4My5jCkBAIC0yMywxMiArMjMsMTMgQEAKIAogc3RhdGljIHVuc2lnbmVkIHNob3J0IGlnbm9yZVtdID0geyBJMkNfQ0xJRU5UX0VORCB9Owogc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9hZGRyW10gPSB7IDB4NTAsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgKmZvcmNlc1tdID0geyBOVUxMIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewogCS5ub3JtYWxfaTJjCQk9IG5vcm1hbF9hZGRyLAogCS5wcm9iZQkJCT0gaWdub3JlLAogCS5pZ25vcmUJCQk9IGlnbm9yZSwKLQkuZm9yY2UJCQk9IGlnbm9yZSwKKwkuZm9yY2VzCQkJPSBmb3JjZXMsCiB9OwogCiAjZGVmaW5lIERBVCh4KSAoKHVuc2lnbmVkIGludCkoeC0+ZGV2LmRyaXZlcl9kYXRhKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9ldmVudC5jIGIvZHJpdmVycy9hY3BpL2V2ZW50LmMKaW5kZXggYmZhOGI3Ni4uMmRiYjFiMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9ldmVudC5jCisrKyBiL2RyaXZlcnMvYWNwaS9ldmVudC5jCkBAIC01OCw5ICs1OCw4IEBACiAJCQlyZXR1cm5fVkFMVUUoLUVBR0FJTik7CiAKIAkJcmVzdWx0ID0gYWNwaV9idXNfcmVjZWl2ZV9ldmVudCgmZXZlbnQpOwotCQlpZiAocmVzdWx0KSB7Ci0JCQlyZXR1cm5fVkFMVUUoLUVJTyk7Ci0JCX0KKwkJaWYgKHJlc3VsdCkKKwkJCXJldHVybl9WQUxVRShyZXN1bHQpOwogCiAJCWNoYXJzX3JlbWFpbmluZyA9IHNwcmludGYoc3RyLCAiJXMgJXMgJTA4eCAlMDh4XG4iLAogCQkJCQkgIGV2ZW50LmRldmljZV9jbGFzcyA/IGV2ZW50LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2dsdWUuYyBiL2RyaXZlcnMvYWNwaS9nbHVlLmMKaW5kZXggZTM2YzVkYS4uMzkzN2FkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2dsdWUuYworKysgYi9kcml2ZXJzL2FjcGkvZ2x1ZS5jCkBAIC05Niw3ICs5Niw3IEBACiBzdGF0aWMgYWNwaV9zdGF0dXMKIGRvX3Jvb3RfYnJpZGdlX2J1c25yX2NhbGxiYWNrKHN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZSwgdm9pZCAqZGF0YSkKIHsKLQlpbnQgKmJ1c25yID0gKGludCAqKWRhdGE7CisJdW5zaWduZWQgbG9uZyAqYnVzbnIgPSAodW5zaWduZWQgbG9uZyAqKWRhdGE7CiAJc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczY0IGFkZHJlc3M7CiAKIAlpZiAocmVzb3VyY2UtPmlkICE9IEFDUElfUlNUWVBFX0FERFJFU1MxNiAmJgpAQCAtMTE1LDEzICsxMTUsMTMgQEAKIHN0YXRpYyBpbnQgZ2V0X3Jvb3RfYnJpZGdlX2J1c25yKGFjcGlfaGFuZGxlIGhhbmRsZSkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0JaW50IGJ1cywgYmJuOworCXVuc2lnbmVkIGxvbmcgYnVzLCBiYm47CiAJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKIAogCWFjcGlfZ2V0X25hbWUoaGFuZGxlLCBBQ1BJX0ZVTExfUEFUSE5BTUUsICZidWZmZXIpOwogCiAJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgTUVUSE9EX05BTUVfX0JCTiwgTlVMTCwKLQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgKikmYmJuKTsKKwkJCQkgICAgICAgJmJibik7CiAJaWYgKHN0YXR1cyA9PSBBRV9OT1RfRk9VTkQpIHsKIAkJLyogQXNzdW1lIGJ1cyA9IDAgKi8KIAkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVgKQEAgLTE1Myw3ICsxNTMsNyBAQAogCX0KICAgICAgIGV4aXQ6CiAJYWNwaV9vc19mcmVlKGJ1ZmZlci5wb2ludGVyKTsKLQlyZXR1cm4gYmJuOworCXJldHVybiAoaW50KWJibjsKIH0KIAogc3RhdGljIGFjcGlfc3RhdHVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9hbWJhc3NhZG9yLmMgYi9kcml2ZXJzL2F0bS9hbWJhc3NhZG9yLmMKaW5kZXggZDc0YTdjNS4uNGI2YmYxOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2FtYmFzc2Fkb3IuYworKysgYi9kcml2ZXJzL2F0bS9hbWJhc3NhZG9yLmMKQEAgLTc5NSw3ICs3OTUsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmlsbF9yeF9wb29sIChhbWJfZGV2ICogZGV2LCB1bnNpZ25lZCBjaGFyIHBvb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgcHJpb3JpdHkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZnBfdCBwcmlvcml0eSkKIHsKICAgcnhfaW4gcng7CiAgIGFtYl9yeHEgKiByeHE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9maXJlc3RyZWFtLmMgYi9kcml2ZXJzL2F0bS9maXJlc3RyZWFtLmMKaW5kZXggNTgyMTk3NC4uN2Y3ZWMyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vZmlyZXN0cmVhbS5jCisrKyBiL2RyaXZlcnMvYXRtL2ZpcmVzdHJlYW0uYwpAQCAtMTM3NCw4ICsxMzc0LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCAqYWxpZ25lZF9rbWFsbG9jIChpbnQgc2l6ZSwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGZsYWdzLAotCQkJCQlpbnQgYWxpZ25tZW50KQorc3RhdGljIHZvaWQgX19kZXZpbml0ICphbGlnbmVkX2ttYWxsb2MgKGludCBzaXplLCBnZnBfdCBmbGFncywgaW50IGFsaWdubWVudCkKIHsKIAl2b2lkICAqdDsKIApAQCAtMTQ2Niw3ICsxNDY1LDcgQEAKICAgIHdvcmtpbmcgYWdhaW4gYWZ0ZXIgdGhhdC4uLiAgLS0gUkVXICovCiAKIHN0YXRpYyB2b2lkIHRvcF9vZmZfZnAgKHN0cnVjdCBmc19kZXYgKmRldiwgc3RydWN0IGZyZWVwb29sICpmcCwKLQkJCXVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfZmxhZ3MpCisJCQlnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJc3RydWN0IEZTX0JQRU5UUlkgKnFlLCAqbmU7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmMgYi9kcml2ZXJzL2F0bS9mb3JlMjAwZS5jCmluZGV4IDJiZjcyM2EuLjE0ZjZhNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmMKKysrIGIvZHJpdmVycy9hdG0vZm9yZTIwMGUuYwpAQCAtMTc4LDE0ICsxNzgsMTIgQEAKIAogCiBzdGF0aWMgdm9pZCoKLWZvcmUyMDBlX2ttYWxsb2MoaW50IHNpemUsIGludCBmbGFncykKK2ZvcmUyMDBlX2ttYWxsb2MoaW50IHNpemUsIGdmcF90IGZsYWdzKQogewotICAgIHZvaWQqIGNodW5rID0ga21hbGxvYyhzaXplLCBmbGFncyk7CisgICAgdm9pZCAqY2h1bmsgPSBremFsbG9jKHNpemUsIGZsYWdzKTsKIAotICAgIGlmIChjaHVuaykKLQltZW1zZXQoY2h1bmssIDB4MDAsIHNpemUpOwotICAgIGVsc2UKLQlwcmludGsoRk9SRTIwMEUgImttYWxsb2MoKSBmYWlsZWQsIHJlcXVlc3RlZCBzaXplID0gJWQsIGZsYWdzID0gMHgleFxuIiwgc2l6ZSwgZmxhZ3MpOworICAgIGlmICghY2h1bmspCisJcHJpbnRrKEZPUkUyMDBFICJrbWFsbG9jKCkgZmFpbGVkLCByZXF1ZXN0ZWQgc2l6ZSA9ICVkLCBmbGFncyA9IDB4JXhcbiIsCQkJc2l6ZSwgZmxhZ3MpOwogICAgIAogICAgIHJldHVybiBjaHVuazsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jbGFzcy5jIGIvZHJpdmVycy9iYXNlL2NsYXNzLmMKaW5kZXggM2IxMTJlMy4uY2UyM2RjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2NsYXNzLmMKKysrIGIvZHJpdmVycy9iYXNlL2NsYXNzLmMKQEAgLTY2OSw2ICs2NjksNyBAQAogaW50IGNsYXNzX2RldmljZV9yZW5hbWUoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LCBjaGFyICpuZXdfbmFtZSkKIHsKIAlpbnQgZXJyb3IgPSAwOworCWNoYXIgKm9sZF9jbGFzc19uYW1lID0gTlVMTCwgKm5ld19jbGFzc19uYW1lID0gTlVMTDsKIAogCWNsYXNzX2RldiA9IGNsYXNzX2RldmljZV9nZXQoY2xhc3NfZGV2KTsKIAlpZiAoIWNsYXNzX2RldikKQEAgLTY3NywxMiArNjc4LDI0IEBACiAJcHJfZGVidWcoIkNMQVNTOiByZW5hbWluZyAnJXMnIHRvICclcydcbiIsIGNsYXNzX2Rldi0+Y2xhc3NfaWQsCiAJCSBuZXdfbmFtZSk7CiAKKwlpZiAoY2xhc3NfZGV2LT5kZXYpCisJCW9sZF9jbGFzc19uYW1lID0gbWFrZV9jbGFzc19uYW1lKGNsYXNzX2Rldik7CisKIAlzdHJsY3B5KGNsYXNzX2Rldi0+Y2xhc3NfaWQsIG5ld19uYW1lLCBLT0JKX05BTUVfTEVOKTsKIAogCWVycm9yID0ga29iamVjdF9yZW5hbWUoJmNsYXNzX2Rldi0+a29iaiwgbmV3X25hbWUpOwogCisJaWYgKGNsYXNzX2Rldi0+ZGV2KSB7CisJCW5ld19jbGFzc19uYW1lID0gbWFrZV9jbGFzc19uYW1lKGNsYXNzX2Rldik7CisJCXN5c2ZzX2NyZWF0ZV9saW5rKCZjbGFzc19kZXYtPmRldi0+a29iaiwgJmNsYXNzX2Rldi0+a29iaiwKKwkJCQkgIG5ld19jbGFzc19uYW1lKTsKKwkJc3lzZnNfcmVtb3ZlX2xpbmsoJmNsYXNzX2Rldi0+ZGV2LT5rb2JqLCBvbGRfY2xhc3NfbmFtZSk7CisJfQogCWNsYXNzX2RldmljZV9wdXQoY2xhc3NfZGV2KTsKIAorCWtmcmVlKG9sZF9jbGFzc19uYW1lKTsKKwlrZnJlZShuZXdfY2xhc3NfbmFtZSk7CisKIAlyZXR1cm4gZXJyb3I7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kZC5jIGIvZHJpdmVycy9iYXNlL2RkLmMKaW5kZXggZDViYmNlMy4uMzU2NWU5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RkLmMKKysrIGIvZHJpdmVycy9iYXNlL2RkLmMKQEAgLTQwLDYgKzQwLDkgQEAKICAqLwogdm9pZCBkZXZpY2VfYmluZF9kcml2ZXIoc3RydWN0IGRldmljZSAqIGRldikKIHsKKwlpZiAoa2xpc3Rfbm9kZV9hdHRhY2hlZCgmZGV2LT5rbm9kZV9kcml2ZXIpKQorCQlyZXR1cm47CisKIAlwcl9kZWJ1ZygiYm91bmQgZGV2aWNlICclcycgdG8gZHJpdmVyICclcydcbiIsCiAJCSBkZXYtPmJ1c19pZCwgZGV2LT5kcml2ZXItPm5hbWUpOwogCWtsaXN0X2FkZF90YWlsKCZkZXYtPmtub2RlX2RyaXZlciwgJmRldi0+ZHJpdmVyLT5rbGlzdF9kZXZpY2VzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kbWFwb29sLmMgYi9kcml2ZXJzL2Jhc2UvZG1hcG9vbC5jCmluZGV4IDYwYTdlZjYuLmUyZjY0ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9kbWFwb29sLmMKKysrIGIvZHJpdmVycy9iYXNlL2RtYXBvb2wuYwpAQCAtMTU2LDcgKzE1Niw3IEBACiAKIAogc3RhdGljIHN0cnVjdCBkbWFfcGFnZSAqCi1wb29sX2FsbG9jX3BhZ2UgKHN0cnVjdCBkbWFfcG9vbCAqcG9vbCwgdW5zaWduZWQgaW50IF9fbm9jYXN0IG1lbV9mbGFncykKK3Bvb2xfYWxsb2NfcGFnZSAoc3RydWN0IGRtYV9wb29sICpwb29sLCBnZnBfdCBtZW1fZmxhZ3MpCiB7CiAJc3RydWN0IGRtYV9wYWdlCSpwYWdlOwogCWludAkJbWFwc2l6ZTsKQEAgLTI2Miw4ICsyNjIsNyBAQAogICogSWYgc3VjaCBhIG1lbW9yeSBibG9jayBjYW4ndCBiZSBhbGxvY2F0ZWQsIG51bGwgaXMgcmV0dXJuZWQuCiAgKi8KIHZvaWQgKgotZG1hX3Bvb2xfYWxsb2MgKHN0cnVjdCBkbWFfcG9vbCAqcG9vbCwgdW5zaWduZWQgaW50IF9fbm9jYXN0IG1lbV9mbGFncywKLQkJZG1hX2FkZHJfdCAqaGFuZGxlKQorZG1hX3Bvb2xfYWxsb2MgKHN0cnVjdCBkbWFfcG9vbCAqcG9vbCwgZ2ZwX3QgbWVtX2ZsYWdzLCBkbWFfYWRkcl90ICpoYW5kbGUpCiB7CiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAJc3RydWN0IGRtYV9wYWdlCQkqcGFnZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuYwppbmRleCBjNTZmOTk1Li40ODZiNmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCkBAIC00ODMsOSArNDgzLDYgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiY2Npc3Nfb3BlbiAlc1xuIiwgaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+ZGlza19uYW1lKTsKICNlbmRpZiAvKiBDQ0lTU19ERUJVRyAqLyAKIAotCWlmIChob3N0LT5idXN5X2luaXRpYWxpemluZykKLQkJcmV0dXJuIC1FQlVTWTsKLQogCWlmIChob3N0LT5idXN5X2luaXRpYWxpemluZyB8fCBkcnYtPmJ1c3lfY29uZmlndXJpbmcpCiAJCXJldHVybiAtRUJVU1k7CiAJLyoKQEAgLTI5OTEsNiArMjk4OCw3IEBACiAJaGJhW2ldLT5hY2Nlc3Muc2V0X2ludHJfbWFzayhoYmFbaV0sIENDSVNTX0lOVFJfT04pOwogCiAJY2Npc3NfcHJvY2luaXQoaSk7CisJaGJhW2ldLT5idXN5X2luaXRpYWxpemluZyA9IDA7CiAKIAlmb3Ioaj0wOyBqIDwgTldEOyBqKyspIHsgLyogbWZtICovCiAJCWRyaXZlX2luZm9fc3RydWN0ICpkcnYgPSAmKGhiYVtpXS0+ZHJ2W2pdKTsKQEAgLTMwMzMsNyArMzAzMSw2IEBACiAJCWFkZF9kaXNrKGRpc2spOwogCX0KIAotCWhiYVtpXS0+YnVzeV9pbml0aWFsaXppbmcgPSAwOwogCXJldHVybigxKTsKIAogY2xlYW40OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sbF9yd19ibGsuYyBiL2RyaXZlcnMvYmxvY2svbGxfcndfYmxrLmMKaW5kZXggNDgzZDcxYi4uYmFlZGFjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9sbF9yd19ibGsuYworKysgYi9kcml2ZXJzL2Jsb2NrL2xsX3J3X2Jsay5jCkBAIC0yMzczLDQ0ICsyMzczLDYgQEAKIAogRVhQT1JUX1NZTUJPTChibGtkZXZfaXNzdWVfZmx1c2gpOwogCi0vKioKLSAqIGJsa2Rldl9zY3NpX2lzc3VlX2ZsdXNoX2ZuIC0gaXNzdWUgZmx1c2ggZm9yIFNDU0kgZGV2aWNlcwotICogQHE6CQlkZXZpY2UgcXVldWUKLSAqIEBkaXNrOglnZW5kaXNrCi0gKiBAZXJyb3Jfc2VjdG9yOgllcnJvciBvZmZzZXQKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqICAgIERldmljZXMgdW5kZXJzdGFuZGluZyB0aGUgU0NTSSBjb21tYW5kIHNldCwgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIGFzCi0gKiAgICBhIGhlbHBlciBmb3IgaXNzdWluZyBhIGNhY2hlIGZsdXNoLiBOb3RlOiBkcml2ZXIgaXMgcmVxdWlyZWQgdG8gc3RvcmUKLSAqICAgIHRoZSBlcnJvciBvZmZzZXQgKGluIGNhc2Ugb2YgZXJyb3IgZmx1c2hpbmcpIGluIC0+c2VjdG9yIG9mIHN0cnVjdAotICogICAgcmVxdWVzdC4KLSAqLwotaW50IGJsa2Rldl9zY3NpX2lzc3VlX2ZsdXNoX2ZuKHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IGdlbmRpc2sgKmRpc2ssCi0JCQkgICAgICAgc2VjdG9yX3QgKmVycm9yX3NlY3RvcikKLXsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBibGtfZ2V0X3JlcXVlc3QocSwgV1JJVEUsIF9fR0ZQX1dBSVQpOwotCWludCByZXQ7Ci0KLQlycS0+ZmxhZ3MgfD0gUkVRX0JMT0NLX1BDIHwgUkVRX1NPRlRCQVJSSUVSOwotCXJxLT5zZWN0b3IgPSAwOwotCW1lbXNldChycS0+Y21kLCAwLCBzaXplb2YocnEtPmNtZCkpOwotCXJxLT5jbWRbMF0gPSAweDM1OwotCXJxLT5jbWRfbGVuID0gMTI7Ci0JcnEtPmRhdGEgPSBOVUxMOwotCXJxLT5kYXRhX2xlbiA9IDA7Ci0JcnEtPnRpbWVvdXQgPSA2MCAqIEhaOwotCi0JcmV0ID0gYmxrX2V4ZWN1dGVfcnEocSwgZGlzaywgcnEsIDApOwotCi0JaWYgKHJldCAmJiBlcnJvcl9zZWN0b3IpCi0JCSplcnJvcl9zZWN0b3IgPSBycS0+c2VjdG9yOwotCi0JYmxrX3B1dF9yZXF1ZXN0KHJxKTsKLQlyZXR1cm4gcmV0OwotfQotCi1FWFBPUlRfU1lNQk9MKGJsa2Rldl9zY3NpX2lzc3VlX2ZsdXNoX2ZuKTsKLQogc3RhdGljIHZvaWQgZHJpdmVfc3RhdF9hY2N0KHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IG5yX3NlY3RvcnMsIGludCBuZXdfaW8pCiB7CiAJaW50IHJ3ID0gcnFfZGF0YV9kaXIocnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGYuYyBiL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BmLmMKaW5kZXggNzExZDJmMy4uOTRhZjkyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGYuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZi5jCkBAIC03NTAsNiArNzUwLDE0IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcGZfcXVldWU7CiAKK3N0YXRpYyB2b2lkIHBmX2VuZF9yZXF1ZXN0KGludCB1cHRvZGF0ZSkKK3sKKwlpZiAocGZfcmVxKSB7CisJCWVuZF9yZXF1ZXN0KHBmX3JlcSwgdXB0b2RhdGUpOworCQlwZl9yZXEgPSBOVUxMOworCX0KK30KKwogc3RhdGljIHZvaWQgZG9fcGZfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKiBxKQogewogCWlmIChwZl9idXN5KQpAQCAtNzY1LDcgKzc3Myw3IEBACiAJcGZfY291bnQgPSBwZl9yZXEtPmN1cnJlbnRfbnJfc2VjdG9yczsKIAogCWlmIChwZl9ibG9jayArIHBmX2NvdW50ID4gZ2V0X2NhcGFjaXR5KHBmX3JlcS0+cnFfZGlzaykpIHsKLQkJZW5kX3JlcXVlc3QocGZfcmVxLCAwKTsKKwkJcGZfZW5kX3JlcXVlc3QoMCk7CiAJCWdvdG8gcmVwZWF0OwogCX0KIApAQCAtNzgwLDcgKzc4OCw3IEBACiAJCXBpX2RvX2NsYWltZWQocGZfY3VycmVudC0+cGksIGRvX3BmX3dyaXRlKTsKIAllbHNlIHsKIAkJcGZfYnVzeSA9IDA7Ci0JCWVuZF9yZXF1ZXN0KHBmX3JlcSwgMCk7CisJCXBmX2VuZF9yZXF1ZXN0KDApOwogCQlnb3RvIHJlcGVhdDsKIAl9CiB9CkBAIC03OTgsOSArODA2LDExIEBACiAJaWYgKCFwZl9jb3VudCkKIAkJcmV0dXJuIDE7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBmX3NwaW5fbG9jaywgc2F2ZWRfZmxhZ3MpOwotCWVuZF9yZXF1ZXN0KHBmX3JlcSwgMSk7Ci0JcGZfY291bnQgPSBwZl9yZXEtPmN1cnJlbnRfbnJfc2VjdG9yczsKLQlwZl9idWYgPSBwZl9yZXEtPmJ1ZmZlcjsKKwlwZl9lbmRfcmVxdWVzdCgxKTsKKwlpZiAocGZfcmVxKSB7CisJCXBmX2NvdW50ID0gcGZfcmVxLT5jdXJyZW50X25yX3NlY3RvcnM7CisJCXBmX2J1ZiA9IHBmX3JlcS0+YnVmZmVyOworCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZl9zcGluX2xvY2ssIHNhdmVkX2ZsYWdzKTsKIAlyZXR1cm4gMTsKIH0KQEAgLTgxMCw3ICs4MjAsNyBAQAogCXVuc2lnbmVkIGxvbmcgc2F2ZWRfZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGZfc3Bpbl9sb2NrLCBzYXZlZF9mbGFncyk7Ci0JZW5kX3JlcXVlc3QocGZfcmVxLCBzdWNjZXNzKTsKKwlwZl9lbmRfcmVxdWVzdChzdWNjZXNzKTsKIAlwZl9idXN5ID0gMDsKIAlkb19wZl9yZXF1ZXN0KHBmX3F1ZXVlKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZl9zcGluX2xvY2ssIHNhdmVkX2ZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jIGIvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMKaW5kZXggN2UyMmE1OC4uYTI4MGU2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMKKysrIGIvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMKQEAgLTIyOSw3ICsyMjksNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCAqcGt0X3JiX2FsbG9jKHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaywgdm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkICpwa3RfcmJfYWxsb2MoZ2ZwX3QgZ2ZwX21hc2ssIHZvaWQgKmRhdGEpCiB7CiAJcmV0dXJuIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwa3RfcmJfbm9kZSksIGdmcF9tYXNrKTsKIH0KQEAgLTIwODIsNyArMjA4Miw3IEBACiB9CiAKIAotc3RhdGljIHZvaWQgKnBzZF9wb29sX2FsbG9jKHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaywgdm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkICpwc2RfcG9vbF9hbGxvYyhnZnBfdCBnZnBfbWFzaywgdm9pZCAqZGF0YSkKIHsKIAlyZXR1cm4ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBhY2tldF9zdGFja2VkX2RhdGEpLCBnZnBfbWFzayk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3Njc2lfaW9jdGwuYyBiL2RyaXZlcnMvYmxvY2svc2NzaV9pb2N0bC5jCmluZGV4IDg1NmMyMjcuLjM4MmRlYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svc2NzaV9pb2N0bC5jCisrKyBiL2RyaXZlcnMvYmxvY2svc2NzaV9pb2N0bC5jCkBAIC0xNjgsNiArMTY4LDcgQEAKIAkJc2FmZV9mb3Jfd3JpdGUoV1JJVEVfVkVSSUZZXzEyKSwKIAkJc2FmZV9mb3Jfd3JpdGUoV1JJVEVfMTYpLAogCQlzYWZlX2Zvcl93cml0ZShXUklURV9MT05HKSwKKwkJc2FmZV9mb3Jfd3JpdGUoV1JJVEVfTE9OR18yKSwKIAkJc2FmZV9mb3Jfd3JpdGUoRVJBU0UpLAogCQlzYWZlX2Zvcl93cml0ZShHUENNRF9NT0RFX1NFTEVDVF8xMCksCiAJCXNhZmVfZm9yX3dyaXRlKE1PREVfU0VMRUNUKSwKQEAgLTIwMCwxNSArMjAxLDE1IEBACiAJCQlyZXR1cm4gMDsKIAl9CiAKKwkvKiBBbmQgcm9vdCBjYW4gZG8gYW55IGNvbW1hbmQuLiAqLworCWlmIChjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQorCQlyZXR1cm4gMDsKKwogCWlmICghdHlwZSkgewogCQljbWRfdHlwZVtjbWRbMF1dID0gQ01EX1dBUk5FRDsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaTogdW5rbm93biBvcGNvZGUgMHglMDJ4XG4iLCBjbWRbMF0pOwogCX0KIAotCS8qIEFuZCByb290IGNhbiBkbyBhbnkgY29tbWFuZC4uICovCi0JaWYgKGNhcGFibGUoQ0FQX1NZU19SQVdJTykpCi0JCXJldHVybiAwOwotCiAJLyogT3RoZXJ3aXNlIGZhaWwgaXQgd2l0aCBhbiAiT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQiICovCiAJcmV0dXJuIC1FUEVSTTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdWIuYyBiL2RyaXZlcnMvYmxvY2svdWIuYwppbmRleCBhYTBiZjdlLi5lZDRkNTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3ViLmMKKysrIGIvZHJpdmVycy9ibG9jay91Yi5jCkBAIC0xNzIsNyArMTcyLDcgQEAKICAqLwogc3RydWN0IHViX2RldjsKIAotI2RlZmluZSBVQl9NQVhfUkVRX1NHCTQKKyNkZWZpbmUgVUJfTUFYX1JFUV9TRwk5CS8qIGNkcmVjb3JkIHJlcXVpcmVzIDMyS0IgYW5kIG1heWJlIGEgaGVhZGVyICovCiAjZGVmaW5lIFVCX01BWF9TRUNUT1JTIDY0CiAKIC8qCkBAIC0zODcsNyArMzg3LDcgQEAKIAlzdHJ1Y3QgYnVsa19jc193cmFwIHdvcmtfYmNzOwogCXN0cnVjdCB1c2JfY3RybHJlcXVlc3Qgd29ya19jcjsKIAotCWludCBzZ19zdGF0W1VCX01BWF9SRVFfU0crMV07CisJaW50IHNnX3N0YXRbNl07CiAJc3RydWN0IHViX3Njc2lfdHJhY2UgdHI7CiB9OwogCkBAIC01MjUsMTIgKzUyNSwxMyBAQAogCSAgICAicWxlbiAlZCBxbWF4ICVkXG4iLAogCSAgICBzYy0+Y21kX3F1ZXVlLnFsZW4sIHNjLT5jbWRfcXVldWUucW1heCk7CiAJY250ICs9IHNwcmludGYocGFnZSArIGNudCwKLQkgICAgInNnICVkICVkICVkICVkICVkXG4iLAorCSAgICAic2cgJWQgJWQgJWQgJWQgJWQgLi4gJWRcbiIsCiAJICAgIHNjLT5zZ19zdGF0WzBdLAogCSAgICBzYy0+c2dfc3RhdFsxXSwKIAkgICAgc2MtPnNnX3N0YXRbMl0sCiAJICAgIHNjLT5zZ19zdGF0WzNdLAotCSAgICBzYy0+c2dfc3RhdFs0XSk7CisJICAgIHNjLT5zZ19zdGF0WzRdLAorCSAgICBzYy0+c2dfc3RhdFs1XSk7CiAKIAlsaXN0X2Zvcl9lYWNoIChwLCAmc2MtPmx1bnMpIHsKIAkJbHVuID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgdWJfbHVuLCBsaW5rKTsKQEAgLTgzNSw3ICs4MzYsNyBAQAogCQlyZXR1cm4gLTE7CiAJfQogCWNtZC0+bnNnID0gbl9lbGVtOwotCXNjLT5zZ19zdGF0W25fZWxlbV0rKzsKKwlzYy0+c2dfc3RhdFtuX2VsZW0gPCA1ID8gbl9lbGVtIDogNV0rKzsKIAogCS8qCiAJICogYnVpbGQgdGhlIGNvbW1hbmQKQEAgLTg5MSw3ICs4OTIsNyBAQAogCQlyZXR1cm4gLTE7CiAJfQogCWNtZC0+bnNnID0gbl9lbGVtOwotCXNjLT5zZ19zdGF0W25fZWxlbV0rKzsKKwlzYy0+c2dfc3RhdFtuX2VsZW0gPCA1ID8gbl9lbGVtIDogNV0rKzsKIAogCW1lbWNweSgmY21kLT5jZGIsIHJxLT5jbWQsIHJxLT5jbWRfbGVuKTsKIAljbWQtPmNkYl9sZW4gPSBycS0+Y21kX2xlbjsKQEAgLTEwMTAsNyArMTAxMSw2IEBACiAJc2MtPmxhc3RfcGlwZSA9IHNjLT5zZW5kX2J1bGtfcGlwZTsKIAl1c2JfZmlsbF9idWxrX3VyYigmc2MtPndvcmtfdXJiLCBzYy0+ZGV2LCBzYy0+c2VuZF9idWxrX3BpcGUsCiAJICAgIGJjYiwgVVNfQlVMS19DQl9XUkFQX0xFTiwgdWJfdXJiX2NvbXBsZXRlLCBzYyk7Ci0Jc2MtPndvcmtfdXJiLnRyYW5zZmVyX2ZsYWdzID0gMDsKIAogCS8qIEZpbGwgd2hhdCB3ZSBzaG91bGRuJ3QgYmUgZmlsbGluZywgYmVjYXVzZSB1c2Itc3RvcmFnZSBkaWQgc28uICovCiAJc2MtPndvcmtfdXJiLmFjdHVhbF9sZW5ndGggPSAwOwpAQCAtMTAxOSw3ICsxMDE5LDYgQEAKIAogCWlmICgocmMgPSB1c2Jfc3VibWl0X3VyYigmc2MtPndvcmtfdXJiLCBHRlBfQVRPTUlDKSkgIT0gMCkgewogCQkvKiBYWFggQ2xlYXIgc3RhbGxzICovCi0JCXByaW50aygidWI6IGNtZCAjJWQgc3RhcnQgZmFpbGVkICglZClcbiIsIGNtZC0+dGFnLCByYyk7IC8qIFAzICovCiAJCXViX2NvbXBsZXRlKCZzYy0+d29ya19kb25lKTsKIAkJcmV0dXJuIHJjOwogCX0KQEAgLTExOTAsMTEgKzExODksOSBAQAogCQkJcmV0dXJuOwogCQl9CiAJCWlmICh1cmItPnN0YXR1cyAhPSAwKSB7Ci0JCQlwcmludGsoInViOiBjbWQgIyVkIGNtZCBzdGF0dXMgKCVkKVxuIiwgY21kLT50YWcsIHVyYi0+c3RhdHVzKTsgLyogUDMgKi8KIAkJCWdvdG8gQmFkX0VuZDsKIAkJfQogCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoICE9IFVTX0JVTEtfQ0JfV1JBUF9MRU4pIHsKLQkJCXByaW50aygidWI6IGNtZCAjJWQgeGZlcnJlZCAlZFxuIiwgY21kLT50YWcsIHVyYi0+YWN0dWFsX2xlbmd0aCk7IC8qIFAzICovCiAJCQkvKiBYWFggTXVzdCBkbyByZXNldCBoZXJlIHRvIHVuY29uZnVzZSB0aGUgZGV2aWNlICovCiAJCQlnb3RvIEJhZF9FbmQ7CiAJCX0KQEAgLTEzOTUsMTQgKzEzOTIsMTIgQEAKIAl1c2JfZmlsbF9idWxrX3VyYigmc2MtPndvcmtfdXJiLCBzYy0+ZGV2LCBwaXBlLAogCSAgICBwYWdlX2FkZHJlc3Moc2ctPnBhZ2UpICsgc2ctPm9mZnNldCwgc2ctPmxlbmd0aCwKIAkgICAgdWJfdXJiX2NvbXBsZXRlLCBzYyk7Ci0Jc2MtPndvcmtfdXJiLnRyYW5zZmVyX2ZsYWdzID0gMDsKIAlzYy0+d29ya191cmIuYWN0dWFsX2xlbmd0aCA9IDA7CiAJc2MtPndvcmtfdXJiLmVycm9yX2NvdW50ID0gMDsKIAlzYy0+d29ya191cmIuc3RhdHVzID0gMDsKIAogCWlmICgocmMgPSB1c2Jfc3VibWl0X3VyYigmc2MtPndvcmtfdXJiLCBHRlBfQVRPTUlDKSkgIT0gMCkgewogCQkvKiBYWFggQ2xlYXIgc3RhbGxzICovCi0JCXByaW50aygidWI6IGRhdGEgIyVkIHN1Ym1pdCBmYWlsZWQgKCVkKVxuIiwgY21kLT50YWcsIHJjKTsgLyogUDMgKi8KIAkJdWJfY29tcGxldGUoJnNjLT53b3JrX2RvbmUpOwogCQl1Yl9zdGF0ZV9kb25lKHNjLCBjbWQsIHJjKTsKIAkJcmV0dXJuOwpAQCAtMTQ0Miw3ICsxNDM3LDYgQEAKIAlzYy0+bGFzdF9waXBlID0gc2MtPnJlY3ZfYnVsa19waXBlOwogCXVzYl9maWxsX2J1bGtfdXJiKCZzYy0+d29ya191cmIsIHNjLT5kZXYsIHNjLT5yZWN2X2J1bGtfcGlwZSwKIAkgICAgJnNjLT53b3JrX2JjcywgVVNfQlVMS19DU19XUkFQX0xFTiwgdWJfdXJiX2NvbXBsZXRlLCBzYyk7Ci0Jc2MtPndvcmtfdXJiLnRyYW5zZmVyX2ZsYWdzID0gMDsKIAlzYy0+d29ya191cmIuYWN0dWFsX2xlbmd0aCA9IDA7CiAJc2MtPndvcmtfdXJiLmVycm9yX2NvdW50ID0gMDsKIAlzYy0+d29ya191cmIuc3RhdHVzID0gMDsKQEAgLTE1NjMsNyArMTU1Nyw2IEBACiAKIAl1c2JfZmlsbF9jb250cm9sX3VyYigmc2MtPndvcmtfdXJiLCBzYy0+ZGV2LCBzYy0+c2VuZF9jdHJsX3BpcGUsCiAJICAgICh1bnNpZ25lZCBjaGFyKikgY3IsIE5VTEwsIDAsIHViX3VyYl9jb21wbGV0ZSwgc2MpOwotCXNjLT53b3JrX3VyYi50cmFuc2Zlcl9mbGFncyA9IDA7CiAJc2MtPndvcmtfdXJiLmFjdHVhbF9sZW5ndGggPSAwOwogCXNjLT53b3JrX3VyYi5lcnJvcl9jb3VudCA9IDA7CiAJc2MtPndvcmtfdXJiLnN0YXR1cyA9IDA7CkBAIC0yMDAwLDE3ICsxOTkzLDE2IEBACiAKIAl1c2JfZmlsbF9jb250cm9sX3VyYigmc2MtPndvcmtfdXJiLCBzYy0+ZGV2LCBzYy0+cmVjdl9jdHJsX3BpcGUsCiAJICAgICh1bnNpZ25lZCBjaGFyKikgY3IsIHAsIDEsIHViX3Byb2JlX3VyYl9jb21wbGV0ZSwgJmNvbXBsKTsKLQlzYy0+d29ya191cmIudHJhbnNmZXJfZmxhZ3MgPSAwOwogCXNjLT53b3JrX3VyYi5hY3R1YWxfbGVuZ3RoID0gMDsKIAlzYy0+d29ya191cmIuZXJyb3JfY291bnQgPSAwOwogCXNjLT53b3JrX3VyYi5zdGF0dXMgPSAwOwogCiAJaWYgKChyYyA9IHVzYl9zdWJtaXRfdXJiKCZzYy0+d29ya191cmIsIEdGUF9LRVJORUwpKSAhPSAwKSB7CiAJCWlmIChyYyA9PSAtRVBJUEUpIHsKLQkJCXByaW50aygiJXM6IFN0YWxsIGF0IEdldE1heExVTiwgdXNpbmcgMSBMVU5cbiIsCisJCQlwcmludGsoIiVzOiBTdGFsbCBzdWJtaXR0aW5nIEdldE1heExVTiwgdXNpbmcgMSBMVU5cbiIsCiAJCQkgICAgIHNjLT5uYW1lKTsgLyogUDMgKi8KIAkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCXByaW50ayhLRVJOX05PVElDRQogCQkJICAgICAiJXM6IFVuYWJsZSB0byBzdWJtaXQgR2V0TWF4TFVOICglZClcbiIsCiAJCQkgICAgIHNjLT5uYW1lLCByYyk7CiAJCX0KQEAgLTIwMjgsNiArMjAyMCwxOCBAQAogCWRlbF90aW1lcl9zeW5jKCZ0aW1lcik7CiAJdXNiX2tpbGxfdXJiKCZzYy0+d29ya191cmIpOwogCisJaWYgKChyYyA9IHNjLT53b3JrX3VyYi5zdGF0dXMpIDwgMCkgeworCQlpZiAocmMgPT0gLUVQSVBFKSB7CisJCQlwcmludGsoIiVzOiBTdGFsbCBhdCBHZXRNYXhMVU4sIHVzaW5nIDEgTFVOXG4iLAorCQkJICAgICBzYy0+bmFtZSk7IC8qIFAzICovCisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UKKwkJCSAgICAgIiVzOiBFcnJvciBhdCBHZXRNYXhMVU4gKCVkKVxuIiwKKwkJCSAgICAgc2MtPm5hbWUsIHJjKTsKKwkJfQorCQlnb3RvIGVycl9pbzsKKwl9CisKIAlpZiAoc2MtPndvcmtfdXJiLmFjdHVhbF9sZW5ndGggIT0gMSkgewogCQlwcmludGsoIiVzOiBHZXRNYXhMVU4gcmV0dXJuZWQgJWQgYnl0ZXNcbiIsIHNjLT5uYW1lLAogCQkgICAgc2MtPndvcmtfdXJiLmFjdHVhbF9sZW5ndGgpOyAvKiBQMyAqLwpAQCAtMjA0OCw2ICsyMDUyLDcgQEAKIAlrZnJlZShwKTsKIAlyZXR1cm4gbmx1bnM7CiAKK2Vycl9pbzoKIGVycl9zdWJtaXQ6CiAJa2ZyZWUocCk7CiBlcnJfYWxsb2M6CkBAIC0yMDgwLDcgKzIwODUsNiBAQAogCiAJdXNiX2ZpbGxfY29udHJvbF91cmIoJnNjLT53b3JrX3VyYiwgc2MtPmRldiwgc2MtPnNlbmRfY3RybF9waXBlLAogCSAgICAodW5zaWduZWQgY2hhciopIGNyLCBOVUxMLCAwLCB1Yl9wcm9iZV91cmJfY29tcGxldGUsICZjb21wbCk7Ci0Jc2MtPndvcmtfdXJiLnRyYW5zZmVyX2ZsYWdzID0gMDsKIAlzYy0+d29ya191cmIuYWN0dWFsX2xlbmd0aCA9IDA7CiAJc2MtPndvcmtfdXJiLmVycm9yX2NvdW50ID0gMDsKIAlzYy0+d29ya191cmIuc3RhdHVzID0gMDsKQEAgLTIyMTMsOCArMjIxNywxMCBAQAogCSAqIFRoaXMgaXMgbmVlZGVkIHRvIGNsZWFyIHRvZ2dsZXMuIEl0IGlzIGEgcHJvYmxlbSBvbmx5IGlmIHdlIGRvCiAJICogYHJtbW9kIHViICYmIG1vZHByb2JlIHViYCB3aXRob3V0IGRpc2Nvbm5lY3RzLCBidXQgd2UgbGlrZSB0aGF0LgogCSAqLworI2lmIDAgLyogaVBvZCBNaW5pIGZhaWxzIGlmIHdlIGRvIHRoaXMgKGJpZyB3aGl0ZSBpUG9kIHdvcmtzKSAqLwogCXViX3Byb2JlX2NsZWFyX3N0YWxsKHNjLCBzYy0+cmVjdl9idWxrX3BpcGUpOwogCXViX3Byb2JlX2NsZWFyX3N0YWxsKHNjLCBzYy0+c2VuZF9idWxrX3BpcGUpOworI2VuZGlmCiAKIAkvKgogCSAqIFRoZSB3YXkgdGhpcyBpcyB1c2VkIGJ5IHRoZSBzdGFydHVwIGNvZGUgaXMgYSBsaXR0bGUgc3BlY2lmaWMuCkBAIC0yMjQxLDEwICsyMjQ3LDEwIEBACiAJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewogCQlpZiAoKHJjID0gdWJfc3luY19nZXRtYXhsdW4oc2MpKSA8IDApIHsKIAkJCS8qIAotCQkJICogU29tZSBkZXZpY2VzIChpLmUuIElvbWVnYSBaaXAxMDApIG5lZWQgdGhpcyAtLQotCQkJICogYXBwYXJlbnRseSB0aGUgYnVsayBwaXBlcyBnZXQgU1RBTExlZCB3aGVuIHRoZQotCQkJICogR2V0TWF4TFVOIHJlcXVlc3QgaXMgcHJvY2Vzc2VkLgotCQkJICogWFhYIEkgaGF2ZSBhIFpJUC0xMDAsIHZlcmlmeSBpdCBkb2VzIHRoaXMuCisJCQkgKiBUaGlzIHNlZ21lbnQgaXMgdGFrZW4gZnJvbSB1c2Itc3RvcmFnZS4gVGhleSBzYXkKKwkJCSAqIHRoYXQgWklQLTEwMCBuZWVkcyB0aGlzLCBidXQgbXkgb3duIFpJUC0xMDAgd29ya3MKKwkJCSAqIGZpbmUgd2l0aG91dCB0aGlzLgorCQkJICogU3RpbGwsIGl0IGRvZXMgbm90IHNlZW0gdG8gaHVydCBhbnl0aGluZy4KIAkJCSAqLwogCQkJaWYgKHJjID09IC1FUElQRSkgewogCQkJCXViX3Byb2JlX2NsZWFyX3N0YWxsKHNjLCBzYy0+cmVjdl9idWxrX3BpcGUpOwpAQCAtMjMxMyw3ICsyMzE5LDcgQEAKIAlkaXNrLT5maXJzdF9taW5vciA9IGx1bi0+aWQgKiBVQl9NSU5PUlNfUEVSX01BSk9SOwogCWRpc2stPmZvcHMgPSAmdWJfYmRfZm9wczsKIAlkaXNrLT5wcml2YXRlX2RhdGEgPSBsdW47Ci0JZGlzay0+ZHJpdmVyZnNfZGV2ID0gJnNjLT5pbnRmLT5kZXY7CS8qIFhYWCBNYW55IHRvIG9uZSBvaz8gKi8KKwlkaXNrLT5kcml2ZXJmc19kZXYgPSAmc2MtPmludGYtPmRldjsKIAogCXJjID0gLUVOT01FTTsKIAlpZiAoKHEgPSBibGtfaW5pdF9xdWV1ZSh1Yl9yZXF1ZXN0X2ZuLCAmc2MtPmxvY2spKSA9PSBOVUxMKQpAQCAtMjQ2Niw5ICsyNDcyLDYgQEAKIHsKIAlpbnQgcmM7CiAKLQkvKiBQMyAqLyBwcmludGsoInViOiBzaXplb2YgdWJfc2NzaV9jbWQgJXp1IHViX2RldiAlenUgdWJfbHVuICV6dVxuIiwKLQkJCXNpemVvZihzdHJ1Y3QgdWJfc2NzaV9jbWQpLCBzaXplb2Yoc3RydWN0IHViX2RldiksIHNpemVvZihzdHJ1Y3QgdWJfbHVuKSk7Ci0KIAlpZiAoKHJjID0gcmVnaXN0ZXJfYmxrZGV2KFVCX01BSk9SLCBEUlZfTkFNRSkpICE9IDApCiAJCWdvdG8gZXJyX3JlZ2Jsa2RldjsKIAlkZXZmc19ta19kaXIoREVWRlNfTkFNRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9icGExMHguYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2JwYTEweC5jCmluZGV4IGExYmY4ZjAuLjRmYTg1MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2JwYTEweC5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2JwYTEweC5jCkBAIC0zMDgsNyArMzA4LDcgQEAKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdXJiICpicGExMHhfYWxsb2NfdXJiKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCB1bnNpZ25lZCBpbnQgcGlwZSwKLQkJCQkJc2l6ZV90IHNpemUsIHVuc2lnbmVkIGludCBfX25vY2FzdCBmbGFncywgdm9pZCAqZGF0YSkKKwkJCQkJc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCB1cmIgKnVyYjsKIAlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV91c2IuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV91c2IuYwppbmRleCA1N2M0OGJiLi42NzU2Y2IyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfdXNiLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX3VzYi5jCkBAIC0xMzIsNyArMTMyLDcgQEAKIAl7IH0JLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgX3VyYiAqX3VyYl9hbGxvYyhpbnQgaXNvYywgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCkKK3N0YXRpYyBzdHJ1Y3QgX3VyYiAqX3VyYl9hbGxvYyhpbnQgaXNvYywgZ2ZwX3QgZ2ZwKQogewogCXN0cnVjdCBfdXJiICpfdXJiID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IF91cmIpICsKIAkJCQlzaXplb2Yoc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IpICogaXNvYywgZ2ZwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci8uZ2l0aWdub3JlIGIvZHJpdmVycy9jaGFyLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI2YjFkNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMyBAQAorY29uc29sZW1hcF9kZWZ0YmwuYworZGVma2V5bWFwLmMKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9ocC1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvaHAtYWdwLmMKaW5kZXggOTk3NjJiNi4uZGU1ZDZkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9ocC1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2hwLWFncC5jCkBAIC0yNTIsNyArMjUyLDcgQEAKIAkJcmVhZGwoaHAtPmlvY19yZWdzK0hQX1pYMV9QRElSX0JBU0UpOwogCQl3cml0ZWwoaHAtPmlvX3RsYl9wcywgaHAtPmlvY19yZWdzK0hQX1pYMV9UQ05GRyk7CiAJCXJlYWRsKGhwLT5pb2NfcmVncytIUF9aWDFfVENORkcpOwotCQl3cml0ZWwofihIUF9aWDFfSU9WQV9TSVpFLTEpLCBocC0+aW9jX3JlZ3MrSFBfWlgxX0lNQVNLKTsKKwkJd3JpdGVsKCh1bnNpZ25lZCBpbnQpKH4oSFBfWlgxX0lPVkFfU0laRS0xKSksIGhwLT5pb2NfcmVncytIUF9aWDFfSU1BU0spOwogCQlyZWFkbChocC0+aW9jX3JlZ3MrSFBfWlgxX0lNQVNLKTsKIAkJd3JpdGVsKGhwLT5pb3ZhX2Jhc2V8MSwgaHAtPmlvY19yZWdzK0hQX1pYMV9JQkFTRSk7CiAJCXJlYWRsKGhwLT5pb2NfcmVncytIUF9aWDFfSUJBU0UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9zZ2ktYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL3NnaS1hZ3AuYwppbmRleCBkM2FhMTU5Li43OTU3ZmM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3NnaS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL3NnaS1hZ3AuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9hZ3BfYmFja2VuZC5oPgogI2luY2x1ZGUgPGFzbS9zbi9hZGRycy5oPgorI2luY2x1ZGUgPGFzbS9zbi9pby5oPgogI2luY2x1ZGUgPGFzbS9zbi9wY2lkZXYuaD4KICNpbmNsdWRlIDxhc20vc24vcGNpYnVzX3Byb3ZpZGVyX2RlZnMuaD4KICNpbmNsdWRlIDxhc20vc24vdGlvY2FfcHJvdmlkZXIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2Rydi5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fZHJ2LmMKaW5kZXggNmJhNDhmMy4uMDQxYmI0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fZHJ2LmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fZHJ2LmMKQEAgLTM3Niw3ICszNzYsNyBAQAogCQlnb3RvIGVycl9wMjsKIAl9CiAKLQlkcm1fcHJvY19yb290ID0gY3JlYXRlX3Byb2NfZW50cnkoImRyaSIsIFNfSUZESVIsIE5VTEwpOworCWRybV9wcm9jX3Jvb3QgPSBwcm9jX21rZGlyKCJkcmkiLCBOVUxMKTsKIAlpZiAoIWRybV9wcm9jX3Jvb3QpIHsKIAkJRFJNX0VSUk9SKCJDYW5ub3QgY3JlYXRlIC9wcm9jL2RyaVxuIik7CiAJCXJldCA9IC0xOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fcHJvYy5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fcHJvYy5jCmluZGV4IDMyZDJiYjkuLjk3Nzk2MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX3Byb2MuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9wcm9jLmMKQEAgLTk1LDcgKzk1LDcgQEAKIAljaGFyICAgICAgICAgICAgICAgICAgbmFtZVs2NF07CiAKIAlzcHJpbnRmKG5hbWUsICIlZCIsIG1pbm9yKTsKLQkqZGV2X3Jvb3QgPSBjcmVhdGVfcHJvY19lbnRyeShuYW1lLCBTX0lGRElSLCByb290KTsKKwkqZGV2X3Jvb3QgPSBwcm9jX21rZGlyKG5hbWUsIHJvb3QpOwogCWlmICghKmRldl9yb290KSB7CiAJCURSTV9FUlJPUigiQ2Fubm90IGNyZWF0ZSAvcHJvYy9kcmkvJXNcbiIsIG5hbWUpOwogCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9zdHViLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9zdHViLmMKaW5kZXggOTVhOTc2Yy4uNzA0NThjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fc3R1Yi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3N0dWIuYwpAQCAtNDcsNyArNDcsNyBAQAogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkVuYWJsZSBkZWJ1ZyBvdXRwdXQiKTsKIAogbW9kdWxlX3BhcmFtX25hbWVkKGNhcmRzX2xpbWl0LCBkcm1fY2FyZHNfbGltaXQsIGludCwgMDQ0NCk7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGRybV9kZWJ1ZywgaW50LCAwNjY2KTsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgZHJtX2RlYnVnLCBpbnQsIDA2MDApOwogCiBkcm1faGVhZF90ICoqZHJtX2hlYWRzOwogc3RydWN0IGRybV9zeXNmc19jbGFzcyAqZHJtX2NsYXNzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fdm0uYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3ZtLmMKaW5kZXggY2VkNDIxNS4uMzllYTk2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fdm0uYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV92bS5jCkBAIC0xNDgsNyArMTQ4LDggQEAKIAogCW9mZnNldAkgPSBhZGRyZXNzIC0gdm1hLT52bV9zdGFydDsKIAlpID0gKHVuc2lnbmVkIGxvbmcpbWFwLT5oYW5kbGUgKyBvZmZzZXQ7Ci0JcGFnZSA9IHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWkpOworCXBhZ2UgPSAobWFwLT50eXBlID09IF9EUk1fQ09OU0lTVEVOVCkgPworCQl2aXJ0X3RvX3BhZ2UoKHZvaWQgKilpKSA6IHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWkpOwogCWlmICghcGFnZSkKIAkJcmV0dXJuIE5PUEFHRV9PT007CiAJZ2V0X3BhZ2UocGFnZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL21nYV9kbWEuYyBiL2RyaXZlcnMvY2hhci9kcm0vbWdhX2RtYS5jCmluZGV4IGZjN2Q0YTUuLmM4ZTFiNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vbWdhX2RtYS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vbWdhX2RtYS5jCkBAIC00MzcsNyArNDM3LDcgQEAKIAkJCQkgICAgZHJtX21nYV9kbWFfYm9vdHN0cmFwX3QgKiBkbWFfYnMpCiB7CiAJZHJtX21nYV9wcml2YXRlX3QgKiBjb25zdCBkZXZfcHJpdiA9IChkcm1fbWdhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwotCWNvbnN0IHVuc2lnbmVkIGludCB3YXJwX3NpemUgPSBtZ2Ffd2FycF9taWNyb2NvZGVfc2l6ZShkZXZfcHJpdik7CisJdW5zaWduZWQgaW50IHdhcnBfc2l6ZSA9IG1nYV93YXJwX21pY3JvY29kZV9zaXplKGRldl9wcml2KTsKIAlpbnQgZXJyOwogCXVuc2lnbmVkICBvZmZzZXQ7CiAJY29uc3QgdW5zaWduZWQgc2Vjb25kYXJ5X3NpemUgPSBkbWFfYnMtPnNlY29uZGFyeV9iaW5fY291bnQKQEAgLTQ5OSw2ICs0OTksMTIgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKKwkvKiBNYWtlIGRybV9hZGRidWZzIGhhcHB5IGJ5IG5vdCB0cnlpbmcgdG8gY3JlYXRlIGEgbWFwcGluZyBmb3IgbGVzcworCSAqIHRoYW4gYSBwYWdlLgorCSAqLworCWlmICh3YXJwX3NpemUgPCBQQUdFX1NJWkUpCisJCXdhcnBfc2l6ZSA9IFBBR0VfU0laRTsKKwogCW9mZnNldCA9IDA7CiAJZXJyID0gZHJtX2FkZG1hcCggZGV2LCBvZmZzZXQsIHdhcnBfc2l6ZSwKIAkJCSAgX0RSTV9BR1AsIF9EUk1fUkVBRF9PTkxZLCAmIGRldl9wcml2LT53YXJwICk7CkBAIC01ODcsNyArNTkzLDcgQEAKIAkJCQkgICAgZHJtX21nYV9kbWFfYm9vdHN0cmFwX3QgKiBkbWFfYnMpCiB7CiAJZHJtX21nYV9wcml2YXRlX3QgKiBjb25zdCBkZXZfcHJpdiA9IChkcm1fbWdhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwotCWNvbnN0IHVuc2lnbmVkIGludCB3YXJwX3NpemUgPSBtZ2Ffd2FycF9taWNyb2NvZGVfc2l6ZShkZXZfcHJpdik7CisJdW5zaWduZWQgaW50IHdhcnBfc2l6ZSA9IG1nYV93YXJwX21pY3JvY29kZV9zaXplKGRldl9wcml2KTsKIAl1bnNpZ25lZCBpbnQgcHJpbWFyeV9zaXplOwogCXVuc2lnbmVkIGludCBiaW5fY291bnQ7CiAJaW50IGVycjsKQEAgLTU5OSw2ICs2MDUsMTIgQEAKIAkJcmV0dXJuIERSTV9FUlIoRUZBVUxUKTsKIAl9CiAKKwkvKiBNYWtlIGRybV9hZGRidWZzIGhhcHB5IGJ5IG5vdCB0cnlpbmcgdG8gY3JlYXRlIGEgbWFwcGluZyBmb3IgbGVzcworCSAqIHRoYW4gYSBwYWdlLgorCSAqLworCWlmICh3YXJwX3NpemUgPCBQQUdFX1NJWkUpCisJCXdhcnBfc2l6ZSA9IFBBR0VfU0laRTsKKwogCS8qIFRoZSBwcm9wZXIgYWxpZ25tZW50IGlzIDB4MTAwIGZvciB0aGlzIG1hcHBpbmcgKi8KIAllcnIgPSBkcm1fYWRkbWFwKGRldiwgMCwgd2FycF9zaXplLCBfRFJNX0NPTlNJU1RFTlQsCiAJCQkgX0RSTV9SRUFEX09OTFksICZkZXZfcHJpdi0+d2FycCk7CkBAIC04MTIsNiArODI0LDEwIEBACiAJfQogCiAJaWYgKCEgZGV2X3ByaXYtPnVzZWRfbmV3X2RtYV9pbml0KSB7CisKKwkJZGV2X3ByaXYtPmRtYV9hY2Nlc3MgPSBNR0FfUEFHUFhGRVI7CisJCWRldl9wcml2LT53YWdwX2VuYWJsZSA9IE1HQV9XQUdQX0VOQUJMRTsKKwogCQlkZXZfcHJpdi0+c3RhdHVzID0gZHJtX2NvcmVfZmluZG1hcChkZXYsIGluaXQtPnN0YXR1c19vZmZzZXQpOwogCQlpZiAoIWRldl9wcml2LT5zdGF0dXMpIHsKIAkJCURSTV9FUlJPUigiZmFpbGVkIHRvIGZpbmQgc3RhdHVzIHBhZ2UhXG4iKTsKQEAgLTkyOCw3ICs5NDQsNyBAQAogCQlkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCiAJCWlmICgoZGV2X3ByaXYtPndhcnAgIT0gTlVMTCkgCi0JCSAgICAmJiAoZGV2X3ByaXYtPm1taW8tPnR5cGUgIT0gX0RSTV9DT05TSVNURU5UKSkKKwkJICAgICYmIChkZXZfcHJpdi0+d2FycC0+dHlwZSAhPSBfRFJNX0NPTlNJU1RFTlQpKQogCQkJZHJtX2NvcmVfaW9yZW1hcGZyZWUoZGV2X3ByaXYtPndhcnAsIGRldik7CiAKIAkJaWYgKChkZXZfcHJpdi0+cHJpbWFyeSAhPSBOVUxMKSAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vbWdhX2Rydi5oIGIvZHJpdmVycy9jaGFyL2RybS9tZ2FfZHJ2LmgKaW5kZXggYjIyZmRiZC4uNjA1OWM1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9tZ2FfZHJ2LmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9tZ2FfZHJ2LmgKQEAgLTIyNyw3ICsyMjcsNyBAQAogI2RlZmluZSBNR0FfRU1JVF9TVEFURSggZGV2X3ByaXYsIGRpcnR5ICkJCQkJXAogZG8gewkJCQkJCQkJCVwKIAlpZiAoIChkaXJ0eSkgJiB+TUdBX1VQTE9BRF9DTElQUkVDVFMgKSB7CQkJXAotCQlpZiAoIGRldl9wcml2LT5jaGlwc2V0ID09IE1HQV9DQVJEX1RZUEVfRzQwMCApIHsJXAorCQlpZiAoIGRldl9wcml2LT5jaGlwc2V0ID49IE1HQV9DQVJEX1RZUEVfRzQwMCApIHsJXAogCQkJbWdhX2c0MDBfZW1pdF9zdGF0ZSggZGV2X3ByaXYgKTsJCVwKIAkJfSBlbHNlIHsJCQkJCQlcCiAJCQltZ2FfZzIwMF9lbWl0X3N0YXRlKCBkZXZfcHJpdiApOwkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9tZ2Ffc3RhdGUuYyBiL2RyaXZlcnMvY2hhci9kcm0vbWdhX3N0YXRlLmMKaW5kZXggMDViYmI0Ny4uNmFjNWUwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9tZ2Ffc3RhdGUuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL21nYV9zdGF0ZS5jCkBAIC01Myw3ICs1Myw3IEBACiAKIAkvKiBGb3JjZSByZXNldCBvZiBEV0dDVEwgb24gRzQwMCAoZWxpbWluYXRlcyBjbGlwIGRpc2FibGUgYml0KS4KIAkgKi8KLQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gTUdBX0NBUkRfVFlQRV9HNDAwKSB7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID49IE1HQV9DQVJEX1RZUEVfRzQwMCkgewogCQlETUFfQkxPQ0soTUdBX0RXR0NUTCwgY3R4LT5kd2djdGwsCiAJCQkgIE1HQV9MRU4gKyBNR0FfRVhFQywgMHg4MDAwMDAwMCwKIAkJCSAgTUdBX0RXR0NUTCwgY3R4LT5kd2djdGwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9jcC5jIGIvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fY3AuYwppbmRleCA2ZDkwODBhLi4xMmVmMTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9jcC5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2NwLmMKQEAgLTExMzMsMTAgKzExMzMsMTAgQEAKIAkJcmluZ19zdGFydCA9IChkZXZfcHJpdi0+Y3BfcmluZy0+b2Zmc2V0CiAJCQkgICAgICAtIGRldi0+YWdwLT5iYXNlCiAJCQkgICAgICArIGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0KTsKLSAgICAgICB9IGVsc2UKKwl9IGVsc2UKICNlbmRpZgogCQlyaW5nX3N0YXJ0ID0gKGRldl9wcml2LT5jcF9yaW5nLT5vZmZzZXQKLQkJCSAgICAgIC0gZGV2LT5zZy0+aGFuZGxlCisJCQkgICAgICAtICh1bnNpZ25lZCBsb25nKWRldi0+c2ctPnZpcnR1YWwKIAkJCSAgICAgICsgZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQpOwogCiAJUkFERU9OX1dSSVRFKCBSQURFT05fQ1BfUkJfQkFTRSwgcmluZ19zdGFydCApOwpAQCAtMTE2NCw3ICsxMTY0LDggQEAKIAkJZHJtX3NnX21lbV90ICplbnRyeSA9IGRldi0+c2c7CiAJCXVuc2lnbmVkIGxvbmcgdG1wX29mcywgcGFnZV9vZnM7CiAKLQkJdG1wX29mcyA9IGRldl9wcml2LT5yaW5nX3JwdHItPm9mZnNldCAtIGRldi0+c2ctPmhhbmRsZTsKKwkJdG1wX29mcyA9IGRldl9wcml2LT5yaW5nX3JwdHItPm9mZnNldCAtCisJCQkJKHVuc2lnbmVkIGxvbmcpZGV2LT5zZy0+dmlydHVhbDsKIAkJcGFnZV9vZnMgPSB0bXBfb2ZzID4+IFBBR0VfU0hJRlQ7CiAKIAkJUkFERU9OX1dSSVRFKCBSQURFT05fQ1BfUkJfUlBUUl9BRERSLApAQCAtMTQ5MSw4ICsxNDkyLDggQEAKIAllbHNlCiAjZW5kaWYKIAkJZGV2X3ByaXYtPmdhcnRfYnVmZmVyc19vZmZzZXQgPSAoZGV2LT5hZ3BfYnVmZmVyX21hcC0+b2Zmc2V0Ci0JCQkJCQktIGRldi0+c2ctPmhhbmRsZQotCQkJCQkJKyBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCk7CisJCQkJCS0gKHVuc2lnbmVkIGxvbmcpZGV2LT5zZy0+dmlydHVhbAorCQkJCQkrIGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0KTsKIAogCURSTV9ERUJVRyggImRldl9wcml2LT5nYXJ0X3NpemUgJWRcbiIsCiAJCSAgIGRldl9wcml2LT5nYXJ0X3NpemUgKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9lcGNhLmMgYi9kcml2ZXJzL2NoYXIvZXBjYS5jCmluZGV4IDU4ZDM3MzguLjQwNzcwOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9lcGNhLmMKKysrIGIvZHJpdmVycy9jaGFyL2VwY2EuYwpAQCAtNTM0LDcgKzUzNCw3IEBACiAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7Ci0Jc3RydWN0IGJvYXJkX2NoYW4gKmJjOworCXN0cnVjdCBib2FyZF9jaGFuIF9faW9tZW0gKmJjOwogCiAJaWYgKCEoY2gtPmFzeW5jZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpIAogCQlyZXR1cm47CkBAIC02MTgsNyArNjE4LDcgQEAKIAlzdHJ1Y3QgY2hhbm5lbCAqY2g7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmVtYWluOwotCXN0cnVjdCBib2FyZF9jaGFuICpiYzsKKwlzdHJ1Y3QgYm9hcmRfY2hhbiBfX2lvbWVtICpiYzsKIAogCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkJcGNfd3JpdGUgaXMgcHJpbWFyaWx5IGNhbGxlZCBkaXJlY3RseSBieSB0aGUga2VybmVsIHJvdXRpbmUKQEAgLTY4NSw3ICs2ODUsNyBAQAogCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIAkJZGF0YUxlbiA9IG1pbihieXRlc0F2YWlsYWJsZSwgZGF0YUxlbik7Ci0JCW1lbWNweShjaC0+dHhwdHIgKyBoZWFkLCBidWYsIGRhdGFMZW4pOworCQltZW1jcHlfdG9pbyhjaC0+dHhwdHIgKyBoZWFkLCBidWYsIGRhdGFMZW4pOwogCQlidWYgKz0gZGF0YUxlbjsKIAkJaGVhZCArPSBkYXRhTGVuOwogCQlhbW91bnRDb3BpZWQgKz0gZGF0YUxlbjsKQEAgLTcyNiw3ICs3MjYsNyBAQAogCXN0cnVjdCBjaGFubmVsICpjaDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBoZWFkLCB0YWlsOwotCXN0cnVjdCBib2FyZF9jaGFuICpiYzsKKwlzdHJ1Y3QgYm9hcmRfY2hhbiBfX2lvbWVtICpiYzsKIAogCXJlbWFpbiA9IDA7CiAKQEAgLTc3Myw3ICs3NzMsNyBAQAogCWludCByZW1haW47CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgY2hhbm5lbCAqY2g7Ci0Jc3RydWN0IGJvYXJkX2NoYW4gKmJjOworCXN0cnVjdCBib2FyZF9jaGFuIF9faW9tZW0gKmJjOwogCiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJCXZlcmlmeUNoYW5uZWwgcmV0dXJucyB0aGUgY2hhbm5lbCBmcm9tIHRoZSB0dHkgc3RydWN0CkBAIC04MzAsNyArODMwLDcgQEAKIAl1bnNpZ25lZCBpbnQgdGFpbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBjaGFubmVsICpjaDsKLQlzdHJ1Y3QgYm9hcmRfY2hhbiAqYmM7CisJc3RydWN0IGJvYXJkX2NoYW4gX19pb21lbSAqYmM7CiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJCXZlcmlmeUNoYW5uZWwgcmV0dXJucyB0aGUgY2hhbm5lbCBmcm9tIHRoZSB0dHkgc3RydWN0CiAJCWlmIGl0IGlzIHZhbGlkLiAgVGhpcyBzZXJ2ZXMgYXMgYSBzYW5pdHkgY2hlY2suCkBAIC05NzYsNyArOTc2LDcgQEAKIAlzdHJ1Y3QgY2hhbm5lbCAqY2g7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgbGluZSwgcmV0dmFsLCBib2FyZG51bTsKLQlzdHJ1Y3QgYm9hcmRfY2hhbiAqYmM7CisJc3RydWN0IGJvYXJkX2NoYW4gX19pb21lbSAqYmM7CiAJdW5zaWduZWQgaW50IGhlYWQ7CiAKIAlsaW5lID0gdHR5LT5pbmRleDsKQEAgLTEwNDEsNyArMTA0MSw3IEBACiAJY2gtPnN0YXR1c2ZsYWdzID0gMDsKIAogCS8qIFNhdmUgYm9hcmRzIGN1cnJlbnQgbW9kZW0gc3RhdHVzICovCi0JY2gtPmltb2RlbSA9IGJjLT5tc3RhdDsKKwljaC0+aW1vZGVtID0gcmVhZGIoJmJjLT5tc3RhdCk7CiAKIAkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJICAgU2V0IHJlY2VpdmUgaGVhZCBhbmQgdGFpbCBwdHJzIHRvIGVhY2ggb3RoZXIuICBUaGlzIGluZGljYXRlcwpAQCAtMTM5OSwxMCArMTM5OSwxMCBAQAogeyAvKiBCZWdpbiBwb3N0X2ZlcF9pbml0ICovCiAKIAlpbnQgaTsKLQl1bnNpZ25lZCBjaGFyICptZW1hZGRyOwotCXN0cnVjdCBnbG9iYWxfZGF0YSAqZ2Q7CisJdm9pZCBfX2lvbWVtICptZW1hZGRyOworCXN0cnVjdCBnbG9iYWxfZGF0YSBfX2lvbWVtICpnZDsKIAlzdHJ1Y3QgYm9hcmRfaW5mbyAqYmQ7Ci0Jc3RydWN0IGJvYXJkX2NoYW4gKmJjOworCXN0cnVjdCBib2FyZF9jaGFuIF9faW9tZW0gKmJjOwogCXN0cnVjdCBjaGFubmVsICpjaDsgCiAJaW50IHNocmlua21lbSA9IDAsIGxvd3dhdGVyIDsgCiAgCkBAIC0xNDYxLDcgKzE0NjEsNyBAQAogCQk4IGFuZCA2NCBvZiB0aGVzZSBzdHJ1Y3R1cmVzLgogCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLQliYyA9IChzdHJ1Y3QgYm9hcmRfY2hhbiAqKShtZW1hZGRyICsgQ0hBTlNUUlVDVCk7CisJYmMgPSBtZW1hZGRyICsgQ0hBTlNUUlVDVDsKIAogCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkJVGhlIGJlbG93IGFzc2lnbm1lbnQgd2lsbCBzZXQgZ2QgdG8gcG9pbnQgYXQgdGhlIEJFR0lOSU5HIG9mCkBAIC0xNDcwLDcgKzE0NzAsNyBAQAogCQlwb2ludGVyIGJlZ2lucyBhdCAweGQxMC4KIAktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLQlnZCA9IChzdHJ1Y3QgZ2xvYmFsX2RhdGEgKikobWVtYWRkciArIEdMT0JBTCk7CisJZ2QgPSBtZW1hZGRyICsgR0xPQkFMOwogCiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkJWEVQT1JUUyAoYWRkcmVzcyAweGMyMikgcG9pbnRzIGF0IHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgdGhlCkBAIC0xNDkzLDYgKzE0OTMsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IGJkLT5udW1wb3J0czsgaSsrLCBjaCsrLCBiYysrKSAgeyAvKiBCZWdpbiBmb3IgZWFjaCBwb3J0ICovCiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXUxNiB0c2VnLCByc2VnOwogCiAJCWNoLT5icmRjaGFuICAgICAgICA9IGJjOwogCQljaC0+bWFpbGJveCAgICAgICAgPSBnZDsgCkBAIC0xNTUzLDUwICsxNTU0LDUzIEBACiAJCQlzaHJpbmttZW0gPSAwOwogCQl9CiAKKwkJdHNlZyA9IHJlYWR3KCZiYy0+dHNlZyk7CisJCXJzZWcgPSByZWFkdygmYmMtPnJzZWcpOworCiAJCXN3aXRjaCAoYmQtPnR5cGUpIHsKIAogCQkJY2FzZSBQQ0lYRU06CiAJCQljYXNlIFBDSVhSSjoKIAkJCWNhc2UgUENJWFI6CiAJCQkJLyogQ292ZXIgYWxsIHRoZSAyTUVHIGNhcmRzICovCi0JCQkJY2gtPnR4cHRyID0gbWVtYWRkciArICgoKGJjLT50c2VnKSA8PCA0KSAmIDB4MWZmZmZmKTsKLQkJCQljaC0+cnhwdHIgPSBtZW1hZGRyICsgKCgoYmMtPnJzZWcpIDw8IDQpICYgMHgxZmZmZmYpOwotCQkJCWNoLT50eHdpbiA9IEZFUFdJTiB8ICgoYmMtPnRzZWcpID4+IDExKTsKLQkJCQljaC0+cnh3aW4gPSBGRVBXSU4gfCAoKGJjLT5yc2VnKSA+PiAxMSk7CisJCQkJY2gtPnR4cHRyID0gbWVtYWRkciArICgodHNlZyA8PCA0KSAmIDB4MWZmZmZmKTsKKwkJCQljaC0+cnhwdHIgPSBtZW1hZGRyICsgKChyc2VnIDw8IDQpICYgMHgxZmZmZmYpOworCQkJCWNoLT50eHdpbiA9IEZFUFdJTiB8ICh0c2VnID4+IDExKTsKKwkJCQljaC0+cnh3aW4gPSBGRVBXSU4gfCAocnNlZyA+PiAxMSk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgUENYRU06CiAJCQljYXNlIEVJU0FYRU06CiAJCQkJLyogQ292ZXIgYWxsIHRoZSAzMksgd2luZG93ZWQgY2FyZHMgKi8KIAkJCQkvKiBNYXNrIGVxdWFsIHRvIHdpbmRvdyBzaXplIC0gMSAqLwotCQkJCWNoLT50eHB0ciA9IG1lbWFkZHIgKyAoKChiYy0+dHNlZykgPDwgNCkgJiAweDdmZmYpOwotCQkJCWNoLT5yeHB0ciA9IG1lbWFkZHIgKyAoKChiYy0+cnNlZykgPDwgNCkgJiAweDdmZmYpOwotCQkJCWNoLT50eHdpbiA9IEZFUFdJTiB8ICgoYmMtPnRzZWcpID4+IDExKTsKLQkJCQljaC0+cnh3aW4gPSBGRVBXSU4gfCAoKGJjLT5yc2VnKSA+PiAxMSk7CisJCQkJY2gtPnR4cHRyID0gbWVtYWRkciArICgodHNlZyA8PCA0KSAmIDB4N2ZmZik7CisJCQkJY2gtPnJ4cHRyID0gbWVtYWRkciArICgocnNlZyA8PCA0KSAmIDB4N2ZmZik7CisJCQkJY2gtPnR4d2luID0gRkVQV0lOIHwgKHRzZWcgPj4gMTEpOworCQkJCWNoLT5yeHdpbiA9IEZFUFdJTiB8IChyc2VnID4+IDExKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBQQ1hFVkU6CiAJCQljYXNlIFBDWEU6Ci0JCQkJY2gtPnR4cHRyID0gbWVtYWRkciArICgoKGJjLT50c2VnIC0gYmQtPm1lbW9yeV9zZWcpIDw8IDQpICYgMHgxZmZmKTsKLQkJCQljaC0+dHh3aW4gPSBGRVBXSU4gfCAoKGJjLT50c2VnIC0gYmQtPm1lbW9yeV9zZWcpID4+IDkpOwotCQkJCWNoLT5yeHB0ciA9IG1lbWFkZHIgKyAoKChiYy0+cnNlZyAtIGJkLT5tZW1vcnlfc2VnKSA8PCA0KSAmIDB4MWZmZik7Ci0JCQkJY2gtPnJ4d2luID0gRkVQV0lOIHwgKChiYy0+cnNlZyAtIGJkLT5tZW1vcnlfc2VnKSA+PjkgKTsKKwkJCQljaC0+dHhwdHIgPSBtZW1hZGRyICsgKCgodHNlZyAtIGJkLT5tZW1vcnlfc2VnKSA8PCA0KSAmIDB4MWZmZik7CisJCQkJY2gtPnR4d2luID0gRkVQV0lOIHwgKCh0c2VnIC0gYmQtPm1lbW9yeV9zZWcpID4+IDkpOworCQkJCWNoLT5yeHB0ciA9IG1lbWFkZHIgKyAoKChyc2VnIC0gYmQtPm1lbW9yeV9zZWcpIDw8IDQpICYgMHgxZmZmKTsKKwkJCQljaC0+cnh3aW4gPSBGRVBXSU4gfCAoKHJzZWcgLSBiZC0+bWVtb3J5X3NlZykgPj45ICk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgUENYSToKIAkJCWNhc2UgUEM2NFhFOgotCQkJCWNoLT50eHB0ciA9IG1lbWFkZHIgKyAoKGJjLT50c2VnIC0gYmQtPm1lbW9yeV9zZWcpIDw8IDQpOwotCQkJCWNoLT5yeHB0ciA9IG1lbWFkZHIgKyAoKGJjLT5yc2VnIC0gYmQtPm1lbW9yeV9zZWcpIDw8IDQpOworCQkJCWNoLT50eHB0ciA9IG1lbWFkZHIgKyAoKHRzZWcgLSBiZC0+bWVtb3J5X3NlZykgPDwgNCk7CisJCQkJY2gtPnJ4cHRyID0gbWVtYWRkciArICgocnNlZyAtIGJkLT5tZW1vcnlfc2VnKSA8PCA0KTsKIAkJCQljaC0+dHh3aW4gPSBjaC0+cnh3aW4gPSAwOwogCQkJCWJyZWFrOwogCiAJCX0gLyogRW5kIHN3aXRjaCBiZC0+dHlwZSAqLwogCiAJCWNoLT50eGJ1ZmhlYWQgPSAwOwotCQljaC0+dHhidWZzaXplID0gYmMtPnRtYXggKyAxOworCQljaC0+dHhidWZzaXplID0gcmVhZHcoJmJjLT50bWF4KSArIDE7CiAJCiAJCWNoLT5yeGJ1ZmhlYWQgPSAwOwotCQljaC0+cnhidWZzaXplID0gYmMtPnJtYXggKyAxOworCQljaC0+cnhidWZzaXplID0gcmVhZHcoJmJjLT5ybWF4KSArIDE7CiAJCiAJCWxvd3dhdGVyID0gY2gtPnR4YnVmc2l6ZSA+PSAyMDAwID8gMTAyNCA6IChjaC0+dHhidWZzaXplIC8gMik7CiAKQEAgLTE3MTgsMTEgKzE3MjIsMTEgQEAKIHN0YXRpYyB2b2lkIGRvZXZlbnQoaW50IGNyZCkKIHsgLyogQmVnaW4gZG9ldmVudCAqLwogCi0Jdm9pZCAqZXZlbnRidWY7CisJdm9pZCBfX2lvbWVtICpldmVudGJ1ZjsKIAlzdHJ1Y3QgY2hhbm5lbCAqY2gsICpjaGFuMDsKIAlzdGF0aWMgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlzdHJ1Y3QgYm9hcmRfaW5mbyAqYmQ7Ci0Jc3RydWN0IGJvYXJkX2NoYW4gKmJjOworCXN0cnVjdCBib2FyZF9jaGFuIF9faW9tZW0gKmJjOwogCXVuc2lnbmVkIGludCB0YWlsLCBoZWFkOwogCWludCBldmVudCwgY2hhbm5lbDsKIAlpbnQgbXN0YXQsIGxzdGF0OwpAQCAtMTgxNyw3ICsxODIxLDcgQEAKIHN0YXRpYyB2b2lkIGZlcGNtZChzdHJ1Y3QgY2hhbm5lbCAqY2gsIGludCBjbWQsIGludCB3b3JkX29yX2J5dGUsCiAgICAgICAgICAgICAgICAgICAgaW50IGJ5dGUyLCBpbnQgbmNtZHMsIGludCBieXRlY21kKQogeyAvKiBCZWdpbiBmZXBjbWQgKi8KLQl1bmNoYXIgKm1lbWFkZHI7CisJdW5jaGFyIF9faW9tZW0gKm1lbWFkZHI7CiAJdW5zaWduZWQgaW50IGhlYWQsIGNtZFRhaWwsIGNtZFN0YXJ0LCBjbWRNYXg7CiAJbG9uZyBjb3VudDsKIAlpbnQgbjsKQEAgLTIwMDAsNyArMjAwNCw3IEBACiAKIAl1bnNpZ25lZCBpbnQgY21kSGVhZDsKIAlzdHJ1Y3QgdGVybWlvcyAqdHM7Ci0Jc3RydWN0IGJvYXJkX2NoYW4gKmJjOworCXN0cnVjdCBib2FyZF9jaGFuIF9faW9tZW0gKmJjOwogCXVuc2lnbmVkIG12YWwsIGhmbG93LCBjZmxhZywgaWZsYWc7CiAKIAliYyA9IGNoLT5icmRjaGFuOwpAQCAtMjAxMCw3ICsyMDE0LDcgQEAKIAl0cyA9IHR0eS0+dGVybWlvczsKIAlpZiAoKHRzLT5jX2NmbGFnICYgQ0JBVUQpID09IDApICB7IC8qIEJlZ2luIENCQVVEIGRldGVjdGVkICovCiAJCWNtZEhlYWQgPSByZWFkdygmYmMtPnJpbik7Ci0JCWJjLT5yb3V0ID0gY21kSGVhZDsKKwkJd3JpdGV3KGNtZEhlYWQsICZiYy0+cm91dCk7CiAJCWNtZEhlYWQgPSByZWFkdygmYmMtPnRpbik7CiAJCS8qIENoYW5naW5nIGJhdWQgaW4gbWlkLXN0cmVhbSB0cmFuc21pc3Npb24gY2FuIGJlIHdvbmRlcmZ1bCAqLwogCQkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIxMTYsNyArMjEyMCw3IEBACiAJdW5jaGFyICpycHRyOwogCXN0cnVjdCB0ZXJtaW9zICp0cyA9IE5VTEw7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKLQlzdHJ1Y3QgYm9hcmRfY2hhbiAqYmM7CisJc3RydWN0IGJvYXJkX2NoYW4gX19pb21lbSAqYmM7CiAJaW50IGRhdGFUb1JlYWQsIHdyYXBnYXAsIGJ5dGVzQXZhaWxhYmxlOwogCXVuc2lnbmVkIGludCB0YWlsLCBoZWFkOwogCXVuc2lnbmVkIGludCB3cmFwbWFzazsKQEAgLTIxNTQsNyArMjE1OCw3IEBACiAJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIAlpZiAoIXR0eSB8fCAhdHMgfHwgISh0cy0+Y19jZmxhZyAmIENSRUFEKSkgIHsKLQkJYmMtPnJvdXQgPSBoZWFkOworCQl3cml0ZXcoaGVhZCwgJmJjLT5yb3V0KTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjI3MCw3ICsyMjc0LDcgQEAKIHN0YXRpYyBpbnQgcGNfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGNoYW5uZWwgKmNoID0gKHN0cnVjdCBjaGFubmVsICopIHR0eS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IGJvYXJkX2NoYW4gKmJjOworCXN0cnVjdCBib2FyZF9jaGFuIF9faW9tZW0gKmJjOwogCXVuc2lnbmVkIGludCBtc3RhdCwgbWZsYWcgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTIzNTEsNyArMjM1NSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgbWZsYWcsIG1zdGF0OwogCXVuc2lnbmVkIGNoYXIgc3RhcnRjLCBzdG9wYzsKLQlzdHJ1Y3QgYm9hcmRfY2hhbiAqYmM7CisJc3RydWN0IGJvYXJkX2NoYW4gX19pb21lbSAqYmM7CiAJc3RydWN0IGNoYW5uZWwgKmNoID0gKHN0cnVjdCBjaGFubmVsICopIHR0eS0+ZHJpdmVyX2RhdGE7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJCkBAIC0yNjMzLDcgKzI2MzcsNyBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZXBjYV9sb2NrLCBmbGFncyk7CiAJCS8qIEp1c3QgaW4gY2FzZSBvdXRwdXQgd2FzIHJlc3VtZWQgYmVjYXVzZSBvZiBhIGNoYW5nZSBpbiBEaWdpLWZsb3cgKi8KIAkJaWYgKGNoLT5zdGF0dXNmbGFncyAmIFRYU1RPUFBFRCkgIHsgLyogQmVnaW4gdHJhbnNtaXQgcmVzdW1lIHJlcXVlc3RlZCAqLwotCQkJc3RydWN0IGJvYXJkX2NoYW4gKmJjOworCQkJc3RydWN0IGJvYXJkX2NoYW4gX19pb21lbSAqYmM7CiAJCQlnbG9iYWx3aW5vbihjaCk7CiAJCQliYyA9IGNoLT5icmRjaGFuOwogCQkJaWYgKGNoLT5zdGF0dXNmbGFncyAmIExPV1dBSVQpCkBAIC0yNzI3LDcgKzI3MzEsNyBAQAogc3RhdGljIHZvaWQgc2V0dXBfZW1wdHlfZXZlbnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGNoYW5uZWwgKmNoKQogeyAvKiBCZWdpbiBzZXR1cF9lbXB0eV9ldmVudCAqLwogCi0Jc3RydWN0IGJvYXJkX2NoYW4gKmJjID0gY2gtPmJyZGNoYW47CisJc3RydWN0IGJvYXJkX2NoYW4gX19pb21lbSAqYmMgPSBjaC0+YnJkY2hhbjsKIAogCWdsb2JhbHdpbm9uKGNoKTsKIAljaC0+c3RhdHVzZmxhZ3MgfD0gRU1QVFlXQUlUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2VwY2EuaCBiL2RyaXZlcnMvY2hhci9lcGNhLmgKaW5kZXggMjBlZWI1YS4uNDU2ZDZjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2VwY2EuaAorKysgYi9kcml2ZXJzL2NoYXIvZXBjYS5oCkBAIC0xMjgsMTcgKzEyOCwxNyBAQAogCXVuc2lnbmVkIGxvbmcgIGNfY2ZsYWc7CiAJdW5zaWduZWQgbG9uZyAgY19sZmxhZzsKIAl1bnNpZ25lZCBsb25nICBjX29mbGFnOwotCXVuc2lnbmVkIGNoYXIgKnR4cHRyOwotCXVuc2lnbmVkIGNoYXIgKnJ4cHRyOworCXVuc2lnbmVkIGNoYXIgX19pb21lbSAqdHhwdHI7CisJdW5zaWduZWQgY2hhciBfX2lvbWVtICpyeHB0cjsKIAl1bnNpZ25lZCBjaGFyICp0bXBfYnVmOwogCXN0cnVjdCBib2FyZF9pbmZvICAgICAgICAgICAqYm9hcmQ7Ci0Jc3RydWN0IGJvYXJkX2NoYW4JICAgICpicmRjaGFuOworCXN0cnVjdCBib2FyZF9jaGFuCSAgICBfX2lvbWVtICpicmRjaGFuOwogCXN0cnVjdCBkaWdpX3N0cnVjdCAgICAgICAgICBkaWdpZXh0OwogCXN0cnVjdCB0dHlfc3RydWN0ICAgICAgICAgICAqdHR5OwogCXdhaXRfcXVldWVfaGVhZF90ICAgICAgICAgICBvcGVuX3dhaXQ7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgICAgICAgICAgIGNsb3NlX3dhaXQ7CiAJc3RydWN0IHdvcmtfc3RydWN0ICAgICAgICAgIHRxdWV1ZTsKLQlzdHJ1Y3QgZ2xvYmFsX2RhdGEgCSAgICAqbWFpbGJveDsKKwlzdHJ1Y3QgZ2xvYmFsX2RhdGEgCSAgICBfX2lvbWVtICptYWlsYm94OwogfTsKIAogc3RydWN0IGJvYXJkX2luZm8JCkBAIC0xNDksOCArMTQ5LDggQEAKIAl1bnNpZ25lZCBzaG9ydCBudW1wb3J0czsKIAl1bnNpZ25lZCBsb25nIHBvcnQ7CiAJdW5zaWduZWQgbG9uZyBtZW1iYXNlOwotCXVuc2lnbmVkIGNoYXIgX19pb21lbSAqcmVfbWFwX3BvcnQ7Ci0JdW5zaWduZWQgY2hhciAqcmVfbWFwX21lbWJhc2U7CisJdm9pZCBfX2lvbWVtICpyZV9tYXBfcG9ydDsKKwl2b2lkIF9faW9tZW0gKnJlX21hcF9tZW1iYXNlOwogCXVuc2lnbmVkIGxvbmcgIG1lbW9yeV9zZWc7CiAJdm9pZCAoICogbWVtd2lub24gKQkoc3RydWN0IGJvYXJkX2luZm8gKiwgdW5zaWduZWQgaW50KSA7CiAJdm9pZCAoICogbWVtd2lub2ZmICkgCShzdHJ1Y3QgYm9hcmRfaW5mbyAqLCB1bnNpZ25lZCBpbnQpIDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ocGV0LmMgYi9kcml2ZXJzL2NoYXIvaHBldC5jCmluZGV4IGRlMDM3OWIuLmMwNTViYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9ocGV0LmMKKysrIGIvZHJpdmVycy9jaGFyL2hwZXQuYwpAQCAtMjczLDcgKzI3Myw2IEBACiAKIAl2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPOwogCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWEtPnZtX3BhZ2VfcHJvdCk7Ci0JYWRkciA9IF9fcGEoYWRkcik7CiAKIAlpZiAoaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgYWRkciA+PiBQQUdFX1NISUZULAogCQkJCQlQQUdFX1NJWkUsIHZtYS0+dm1fcGFnZV9wcm90KSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYwppbmRleCA0NjMzNTFkLi4zMmZhODJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYworKysgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYwpAQCAtMjYyMCw3ICsyNjIwLDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmKGludGYtPndhaXRpbmdfbXNnc19sb2NrKSwgZmxhZ3MpOwogCWlmICghbGlzdF9lbXB0eSgmKGludGYtPndhaXRpbmdfbXNncykpKSB7CiAJCWxpc3RfYWRkX3RhaWwoJihtc2ctPmxpbmspLCAmKGludGYtPndhaXRpbmdfbXNncykpOwotCQlzcGluX3VubG9jaygmKGludGYtPndhaXRpbmdfbXNnc19sb2NrKSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJihpbnRmLT53YWl0aW5nX21zZ3NfbG9jayksIGZsYWdzKTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCYoaW50Zi0+d2FpdGluZ19tc2dzX2xvY2spLCBmbGFncyk7CkBAIC0yNjI5LDkgKzI2MjksOSBAQAogCWlmIChydiA+IDApIHsKIAkJLyogQ291bGQgbm90IGhhbmRsZSB0aGUgbWVzc2FnZSBub3csIGp1c3QgYWRkIGl0IHRvIGEKICAgICAgICAgICAgICAgICAgICBsaXN0IHRvIGhhbmRsZSBsYXRlci4gKi8KLQkJc3Bpbl9sb2NrKCYoaW50Zi0+d2FpdGluZ19tc2dzX2xvY2spKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJihpbnRmLT53YWl0aW5nX21zZ3NfbG9jayksIGZsYWdzKTsKIAkJbGlzdF9hZGRfdGFpbCgmKG1zZy0+bGluayksICYoaW50Zi0+d2FpdGluZ19tc2dzKSk7Ci0JCXNwaW5fdW5sb2NrKCYoaW50Zi0+d2FpdGluZ19tc2dzX2xvY2spKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmKGludGYtPndhaXRpbmdfbXNnc19sb2NrKSwgZmxhZ3MpOwogCX0gZWxzZSBpZiAocnYgPT0gMCkgewogCQlpcG1pX2ZyZWVfc21pX21zZyhtc2cpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfcG93ZXJvZmYuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfcG93ZXJvZmYuYwppbmRleCBlODJhOTZiLi5mNjY5NDc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3Bvd2Vyb2ZmLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9wb3dlcm9mZi5jCkBAIC01NSw3ICs1NSw3IEBACiBzdGF0aWMgaW50IHBvd2Vyb2ZmX3Bvd2VyY3ljbGU7CiAKIC8qIHBhcmFtZXRlciBkZWZpbml0aW9uIHRvIGFsbG93IHVzZXIgdG8gZmxhZyBwb3dlciBjeWNsZSAqLwotbW9kdWxlX3BhcmFtKHBvd2Vyb2ZmX3Bvd2VyY3ljbGUsIGludCwgMCk7Cittb2R1bGVfcGFyYW0ocG93ZXJvZmZfcG93ZXJjeWNsZSwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocG93ZXJvZmZfcG93ZXJjeWNsZXMsICIgU2V0IHRvIG5vbi16ZXJvIHRvIGVuYWJsZSBwb3dlciBjeWNsZSBpbnN0ZWFkIG9mIHBvd2VyIGRvd24uIFBvd2VyIGN5Y2xlIGlzIGNvbnRpbmdlbnQgb24gaGFyZHdhcmUgc3VwcG9ydCwgb3RoZXJ3aXNlIGl0IGRlZmF1bHRzIGJhY2sgdG8gcG93ZXIgZG93bi4iKTsKIAogLyogU3R1ZmYgZnJvbSB0aGUgZ2V0IGRldmljZSBpZCBjb21tYW5kLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21iY3MuYyBiL2RyaXZlcnMvY2hhci9tYmNzLmMKaW5kZXggM2ZhNjRjNi4uYzI2OGVlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21iY3MuYworKysgYi9kcml2ZXJzL2NoYXIvbWJjcy5jCkBAIC04MzAsNiArODMwLDkgQEAKIHsKIAlpbnQgcnY7CiAKKwlpZiAoIWlhNjRfcGxhdGZvcm1faXMoInNuMiIpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCS8vIFB1dCBkcml2ZXIgaW50byBjaHJkZXZzW10uICBHZXQgbWFqb3IgbnVtYmVyLgogCXJ2ID0gcmVnaXN0ZXJfY2hyZGV2KG1iY3NfbWFqb3IsIERFVklDRV9OQU1FLCAmbWJjc19vcHMpOwogCWlmIChydiA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9uX3IzOTY0LmMgYi9kcml2ZXJzL2NoYXIvbl9yMzk2NC5jCmluZGV4IDIyOTFhODcuLjg1M2M5OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9uX3IzOTY0LmMKKysrIGIvZHJpdmVycy9jaGFyL25fcjM5NjQuYwpAQCAtMjI5LDggKzIyOSw4IEBACiAgICAgICAgVFJBQ0VfTCgibGluZSBkaXNjaXBsaW5lICVkIHJlZ2lzdGVyZWQiLCBOX1IzOTY0KTsKICAgICAgICBUUkFDRV9MKCJmbGFncz0leCBudW09JXgiLCB0dHlfbGRpc2NfTl9SMzk2NC5mbGFncywgCiAgICAgICAgICAgICAgICB0dHlfbGRpc2NfTl9SMzk2NC5udW0pOwotICAgICAgIFRSQUNFX0woIm9wZW49JXgiLCAoaW50KXR0eV9sZGlzY19OX1IzOTY0Lm9wZW4pOwotICAgICAgIFRSQUNFX0woInR0eV9sZGlzY19OX1IzOTY0ID0gJXgiLCAoaW50KSZ0dHlfbGRpc2NfTl9SMzk2NCk7CisgICAgICAgVFJBQ0VfTCgib3Blbj0lcCIsIHR0eV9sZGlzY19OX1IzOTY0Lm9wZW4pOworICAgICAgIFRSQUNFX0woInR0eV9sZGlzY19OX1IzOTY0ID0gJXAiLCAmdHR5X2xkaXNjX05fUjM5NjQpOwogICAgICB9CiAgICBlbHNlCiAgICAgIHsKQEAgLTI2Nyw4ICsyNjcsOCBAQAogICAgCiAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwSW5mby0+bG9jaywgZmxhZ3MpOwogCi0gICBUUkFDRV9RKCJhZGRfdHhfcXVldWUgJXgsIGxlbmd0aCAlZCwgdHhfZmlyc3QgPSAleCIsIAotICAgICAgICAgIChpbnQpcEhlYWRlciwgcEhlYWRlci0+bGVuZ3RoLCAoaW50KXBJbmZvLT50eF9maXJzdCApOworICAgVFJBQ0VfUSgiYWRkX3R4X3F1ZXVlICVwLCBsZW5ndGggJWQsIHR4X2ZpcnN0ID0gJXAiLCAKKyAgICAgICAgICBwSGVhZGVyLCBwSGVhZGVyLT5sZW5ndGgsIHBJbmZvLT50eF9maXJzdCApOwogfQogCiBzdGF0aWMgdm9pZCByZW1vdmVfZnJvbV90eF9xdWV1ZShzdHJ1Y3QgcjM5NjRfaW5mbyAqcEluZm8sIGludCBlcnJvcl9jb2RlKQpAQCAtMjg1LDEwICsyODUsMTAgQEAKICAgICAgIHJldHVybjsKIAogI2lmZGVmIERFQlVHX1FVRVVFCi0gICBwcmludGsoInIzOTY0OiByZW1vdmVfZnJvbV90eF9xdWV1ZTogJXgsIGxlbmd0aCAlZCAtICIsCi0gICAgICAgICAgKGludClwSGVhZGVyLCAoaW50KXBIZWFkZXItPmxlbmd0aCApOworICAgcHJpbnRrKCJyMzk2NDogcmVtb3ZlX2Zyb21fdHhfcXVldWU6ICVwLCBsZW5ndGggJXUgLSAiLAorICAgICAgICAgIHBIZWFkZXIsIHBIZWFkZXItPmxlbmd0aCApOwogICAgZm9yKHBEdW1wPXBIZWFkZXI7cER1bXA7cER1bXA9cER1bXAtPm5leHQpCi0JIHByaW50aygiJXggIiwgKGludClwRHVtcCk7CisJIHByaW50aygiJXAgIiwgcER1bXApOwogICAgcHJpbnRrKCJcbiIpOwogI2VuZGlmCiAKQEAgLTMxOSwxMCArMzE5LDEwIEBACiAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwSW5mby0+bG9jaywgZmxhZ3MpOwogCiAgICBrZnJlZShwSGVhZGVyKTsKLSAgIFRSQUNFX00oInJlbW92ZV9mcm9tX3R4X3F1ZXVlIC0ga2ZyZWUgJXgiLChpbnQpcEhlYWRlcik7CisgICBUUkFDRV9NKCJyZW1vdmVfZnJvbV90eF9xdWV1ZSAtIGtmcmVlICVwIixwSGVhZGVyKTsKIAotICAgVFJBQ0VfUSgicmVtb3ZlX2Zyb21fdHhfcXVldWU6IHR4X2ZpcnN0ID0gJXgsIHR4X2xhc3QgPSAleCIsCi0gICAgICAgICAgKGludClwSW5mby0+dHhfZmlyc3QsIChpbnQpcEluZm8tPnR4X2xhc3QgKTsKKyAgIFRSQUNFX1EoInJlbW92ZV9mcm9tX3R4X3F1ZXVlOiB0eF9maXJzdCA9ICVwLCB0eF9sYXN0ID0gJXAiLAorICAgICAgICAgIHBJbmZvLT50eF9maXJzdCwgcEluZm8tPnR4X2xhc3QgKTsKIH0KIAogc3RhdGljIHZvaWQgYWRkX3J4X3F1ZXVlKHN0cnVjdCByMzk2NF9pbmZvICpwSW5mbywgc3RydWN0IHIzOTY0X2Jsb2NrX2hlYWRlciAqcEhlYWRlcikKQEAgLTM0Niw5ICszNDYsOSBAQAogICAgCiAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwSW5mby0+bG9jaywgZmxhZ3MpOwogCi0gICBUUkFDRV9RKCJhZGRfcnhfcXVldWU6ICV4LCBsZW5ndGggPSAlZCwgcnhfZmlyc3QgPSAleCwgY291bnQgPSAlZCIsCi0gICAgICAgICAgKGludClwSGVhZGVyLCBwSGVhZGVyLT5sZW5ndGgsCi0gICAgICAgICAgKGludClwSW5mby0+cnhfZmlyc3QsIHBJbmZvLT5ibG9ja3NfaW5fcnhfcXVldWUpOworICAgVFJBQ0VfUSgiYWRkX3J4X3F1ZXVlOiAlcCwgbGVuZ3RoID0gJWQsIHJ4X2ZpcnN0ID0gJXAsIGNvdW50ID0gJWQiLAorICAgICAgICAgIHBIZWFkZXIsIHBIZWFkZXItPmxlbmd0aCwKKyAgICAgICAgICBwSW5mby0+cnhfZmlyc3QsIHBJbmZvLT5ibG9ja3NfaW5fcnhfcXVldWUpOwogfQogCiBzdGF0aWMgdm9pZCByZW1vdmVfZnJvbV9yeF9xdWV1ZShzdHJ1Y3QgcjM5NjRfaW5mbyAqcEluZm8sCkBAIC0zNjAsMTAgKzM2MCwxMCBAQAogICAgaWYocEhlYWRlcj09TlVMTCkKICAgICAgIHJldHVybjsKIAotICAgVFJBQ0VfUSgicmVtb3ZlX2Zyb21fcnhfcXVldWU6IHJ4X2ZpcnN0ID0gJXgsIHJ4X2xhc3QgPSAleCwgY291bnQgPSAlZCIsCi0gICAgICAgICAgKGludClwSW5mby0+cnhfZmlyc3QsIChpbnQpcEluZm8tPnJ4X2xhc3QsIHBJbmZvLT5ibG9ja3NfaW5fcnhfcXVldWUgKTsKLSAgIFRSQUNFX1EoInJlbW92ZV9mcm9tX3J4X3F1ZXVlOiAleCwgbGVuZ3RoICVkIiwKLSAgICAgICAgICAoaW50KXBIZWFkZXIsIChpbnQpcEhlYWRlci0+bGVuZ3RoICk7CisgICBUUkFDRV9RKCJyZW1vdmVfZnJvbV9yeF9xdWV1ZTogcnhfZmlyc3QgPSAlcCwgcnhfbGFzdCA9ICVwLCBjb3VudCA9ICVkIiwKKyAgICAgICAgICBwSW5mby0+cnhfZmlyc3QsIHBJbmZvLT5yeF9sYXN0LCBwSW5mby0+YmxvY2tzX2luX3J4X3F1ZXVlICk7CisgICBUUkFDRV9RKCJyZW1vdmVfZnJvbV9yeF9xdWV1ZTogJXAsIGxlbmd0aCAldSIsCisgICAgICAgICAgcEhlYWRlciwgcEhlYWRlci0+bGVuZ3RoICk7CiAKICAgIHNwaW5fbG9ja19pcnFzYXZlKCZwSW5mby0+bG9jaywgZmxhZ3MpOwogCkBAIC00MDEsMTAgKzQwMSwxMCBAQAogICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEluZm8tPmxvY2ssIGZsYWdzKTsKIAogICAga2ZyZWUocEhlYWRlcik7Ci0gICBUUkFDRV9NKCJyZW1vdmVfZnJvbV9yeF9xdWV1ZSAtIGtmcmVlICV4IiwoaW50KXBIZWFkZXIpOworICAgVFJBQ0VfTSgicmVtb3ZlX2Zyb21fcnhfcXVldWUgLSBrZnJlZSAlcCIscEhlYWRlcik7CiAKLSAgIFRSQUNFX1EoInJlbW92ZV9mcm9tX3J4X3F1ZXVlOiByeF9maXJzdCA9ICV4LCByeF9sYXN0ID0gJXgsIGNvdW50ID0gJWQiLAotICAgICAgICAgIChpbnQpcEluZm8tPnJ4X2ZpcnN0LCAoaW50KXBJbmZvLT5yeF9sYXN0LCBwSW5mby0+YmxvY2tzX2luX3J4X3F1ZXVlICk7CisgICBUUkFDRV9RKCJyZW1vdmVfZnJvbV9yeF9xdWV1ZTogcnhfZmlyc3QgPSAlcCwgcnhfbGFzdCA9ICVwLCBjb3VudCA9ICVkIiwKKyAgICAgICAgICBwSW5mby0+cnhfZmlyc3QsIHBJbmZvLT5yeF9sYXN0LCBwSW5mby0+YmxvY2tzX2luX3J4X3F1ZXVlICk7CiB9CiAKIHN0YXRpYyB2b2lkIHB1dF9jaGFyKHN0cnVjdCByMzk2NF9pbmZvICpwSW5mbywgdW5zaWduZWQgY2hhciBjaCkKQEAgLTUwNiw4ICs1MDYsOCBAQAogICAgaWYodHR5LT5kcml2ZXItPndyaXRlX3Jvb20pCiAgICAgICByb29tPXR0eS0+ZHJpdmVyLT53cml0ZV9yb29tKHR0eSk7CiAKLSAgIFRSQUNFX1BTKCJ0cmFuc21pdF9ibG9jayAleCwgcm9vbSAlZCwgbGVuZ3RoICVkIiwgCi0gICAgICAgICAgKGludClwQmxvY2ssIHJvb20sIHBCbG9jay0+bGVuZ3RoKTsKKyAgIFRSQUNFX1BTKCJ0cmFuc21pdF9ibG9jayAlcCwgcm9vbSAlZCwgbGVuZ3RoICVkIiwgCisgICAgICAgICAgcEJsb2NrLCByb29tLCBwQmxvY2stPmxlbmd0aCk7CiAgICAKICAgIHdoaWxlKHBJbmZvLT50eF9wb3NpdGlvbiA8IHBCbG9jay0+bGVuZ3RoKQogICAgewpAQCAtNTg4LDcgKzU4OCw3IEBACiAKICAgIC8qIHByZXBhcmUgc3RydWN0IHIzOTY0X2Jsb2NrX2hlYWRlcjogKi8KICAgIHBCbG9jayA9IGttYWxsb2MobGVuZ3RoK3NpemVvZihzdHJ1Y3QgcjM5NjRfYmxvY2tfaGVhZGVyKSwgR0ZQX0tFUk5FTCk7Ci0gICBUUkFDRV9NKCJvbl9yZWNlaXZlX2Jsb2NrIC0ga21hbGxvYyAleCIsKGludClwQmxvY2spOworICAgVFJBQ0VfTSgib25fcmVjZWl2ZV9ibG9jayAtIGttYWxsb2MgJXAiLHBCbG9jayk7CiAKICAgIGlmKHBCbG9jaz09TlVMTCkKICAgICAgIHJldHVybjsKQEAgLTY5NSw3ICs2OTUsNyBAQAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVFJBQ0VfUEUoIklETEUgLSBnb3QgU1RYIGJ1dCBubyBzcGFjZSBpbiByeF9xdWV1ZSEiKTsKICAgICAgICAgICAgICAgIHBJbmZvLT5zdGF0ZT1SMzk2NF9XQUlUX0ZPUl9SWF9CVUY7Ci0JICAgICAgIG1vZF90aW1lcigmcEluZm8tPnRtciwgUjM5NjRfVE9fTk9fQlVGKTsKKwkgICAgICAgbW9kX3RpbWVyKCZwSW5mby0+dG1yLCBqaWZmaWVzICsgUjM5NjRfVE9fTk9fQlVGKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogc3RhcnRfcmVjZWl2aW5nOgpAQCAtNzA1LDcgKzcwNSw3IEBACiAgICAgICAgICAgICBwSW5mby0+bGFzdF9yeCA9IDA7CiAgICAgICAgICAgICBwSW5mby0+ZmxhZ3MgJj0gflIzOTY0X0VSUk9SOwogICAgICAgICAgICAgcEluZm8tPnN0YXRlPVIzOTY0X1JFQ0VJVklORzsKLQkgICAgbW9kX3RpbWVyKCZwSW5mby0+dG1yLCBSMzk2NF9UT19aVlopOworCSAgICBtb2RfdGltZXIoJnBJbmZvLT50bXIsIGppZmZpZXMgKyBSMzk2NF9UT19aVlopOwogCSAgICBwSW5mby0+blJldHJ5ID0gMDsKICAgICAgICAgICAgIHB1dF9jaGFyKHBJbmZvLCBETEUpOwogICAgICAgICAgICAgZmx1c2gocEluZm8pOwpAQCAtNzMyLDcgKzczMiw3IEBACiAgICAgICAgICAgICAgICBpZihwSW5mby0+ZmxhZ3MgJiBSMzk2NF9CQ0MpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICBwSW5mby0+c3RhdGUgPSBSMzk2NF9XQUlUX0ZPUl9CQ0M7Ci0JCSAgbW9kX3RpbWVyKCZwSW5mby0+dG1yLCBSMzk2NF9UT19aVlopOworCQkgIG1vZF90aW1lcigmcEluZm8tPnRtciwgamlmZmllcyArIFIzOTY0X1RPX1pWWik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIAogICAgICAgICAgICAgICAgewpAQCAtNzQ0LDcgKzc0NCw3IEBACiAgICAgICAgICAgICAgICBwSW5mby0+bGFzdF9yeCA9IGM7CiBjaGFyX3RvX2J1ZjoKICAgICAgICAgICAgICAgIHBJbmZvLT5yeF9idWZbcEluZm8tPnJ4X3Bvc2l0aW9uKytdID0gYzsKLQkgICAgICAgbW9kX3RpbWVyKCZwSW5mby0+dG1yLCBSMzk2NF9UT19aVlopOworCSAgICAgICBtb2RfdGltZXIoJnBJbmZvLT50bXIsIGppZmZpZXMgKyBSMzk2NF9UT19aVlopOwogICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAvKiBlbHNlOiBvdmVyZmxvdy1tc2c/IEJVRl9TSVpFPk1UVTsgc2hvdWxkIG5vdCBoYXBwZW4/ICovIApAQCAtODY4LDExICs4NjgsMTEgQEAKICAgICAgICAgICAgICAgIGlmKHBNc2cpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICBrZnJlZShwTXNnKTsKLSAgICAgICAgICAgICAgICAgIFRSQUNFX00oImVuYWJsZV9zaWduYWxzIC0gbXNnIGtmcmVlICV4IiwoaW50KXBNc2cpOworICAgICAgICAgICAgICAgICAgVFJBQ0VfTSgiZW5hYmxlX3NpZ25hbHMgLSBtc2cga2ZyZWUgJXAiLHBNc2cpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAga2ZyZWUocENsaWVudCk7Ci0gICAgICAgICAgICBUUkFDRV9NKCJlbmFibGVfc2lnbmFscyAtIGtmcmVlICV4IiwoaW50KXBDbGllbnQpOworICAgICAgICAgICAgVFJBQ0VfTSgiZW5hYmxlX3NpZ25hbHMgLSBrZnJlZSAlcCIscENsaWVudCk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgIH0KICAgICAgIH0KQEAgLTg5MCw3ICs4OTAsNyBAQAogICAgICAgewogICAgICAgICAgLyogYWRkIGNsaWVudCB0byBjbGllbnQgbGlzdCAqLwogICAgICAgICAgcENsaWVudD1rbWFsbG9jKHNpemVvZihzdHJ1Y3QgcjM5NjRfY2xpZW50X2luZm8pLCBHRlBfS0VSTkVMKTsKLSAgICAgICAgIFRSQUNFX00oImVuYWJsZV9zaWduYWxzIC0ga21hbGxvYyAleCIsKGludClwQ2xpZW50KTsKKyAgICAgICAgIFRSQUNFX00oImVuYWJsZV9zaWduYWxzIC0ga21hbGxvYyAlcCIscENsaWVudCk7CiAgICAgICAgICBpZihwQ2xpZW50PT1OVUxMKQogICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CiAKQEAgLTk1NCw3ICs5NTQsNyBAQAogcXVldWVfdGhlX21lc3NhZ2U6CiAKICAgICAgIHBNc2cgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcjM5NjRfbWVzc2FnZSksIEdGUF9LRVJORUwpOwotICAgICAgVFJBQ0VfTSgiYWRkX21zZyAtIGttYWxsb2MgJXgiLChpbnQpcE1zZyk7CisgICAgICBUUkFDRV9NKCJhZGRfbXNnIC0ga21hbGxvYyAlcCIscE1zZyk7CiAgICAgICBpZihwTXNnPT1OVUxMKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICB9CkBAIC0xMDY3LDExICsxMDY3LDExIEBACiAgICBzdHJ1Y3QgcjM5NjRfaW5mbyAqcEluZm87CiAgICAKICAgIFRSQUNFX0woIm9wZW4iKTsKLSAgIFRSQUNFX0woInR0eT0leCwgUElEPSVkLCBkaXNjX2RhdGE9JXgiLCAKLSAgICAgICAgICAoaW50KXR0eSwgY3VycmVudC0+cGlkLCAoaW50KXR0eS0+ZGlzY19kYXRhKTsKKyAgIFRSQUNFX0woInR0eT0lcCwgUElEPSVkLCBkaXNjX2RhdGE9JXAiLCAKKyAgICAgICAgICB0dHksIGN1cnJlbnQtPnBpZCwgdHR5LT5kaXNjX2RhdGEpOwogICAgCiAgICBwSW5mbz1rbWFsbG9jKHNpemVvZihzdHJ1Y3QgcjM5NjRfaW5mbyksIEdGUF9LRVJORUwpOyAKLSAgIFRSQUNFX00oInIzOTY0X29wZW4gLSBpbmZvIGttYWxsb2MgJXgiLChpbnQpcEluZm8pOworICAgVFJBQ0VfTSgicjM5NjRfb3BlbiAtIGluZm8ga21hbGxvYyAlcCIscEluZm8pOwogCiAgICBpZighcEluZm8pCiAgICB7CkBAIC0xMDgwLDI2ICsxMDgwLDI2IEBACiAgICB9CiAKICAgIHBJbmZvLT5yeF9idWYgPSBrbWFsbG9jKFJYX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKLSAgIFRSQUNFX00oInIzOTY0X29wZW4gLSByeF9idWYga21hbGxvYyAleCIsKGludClwSW5mby0+cnhfYnVmKTsKKyAgIFRSQUNFX00oInIzOTY0X29wZW4gLSByeF9idWYga21hbGxvYyAlcCIscEluZm8tPnJ4X2J1Zik7CiAKICAgIGlmKCFwSW5mby0+cnhfYnVmKQogICAgewogICAgICAgcHJpbnRrKEtFUk5fRVJSICJyMzk2NDogZmFpbGVkIHRvIGFsbG9jIHJlY2VpdmUgYnVmZmVyXG4iKTsKICAgICAgIGtmcmVlKHBJbmZvKTsKLSAgICAgIFRSQUNFX00oInIzOTY0X29wZW4gLSBpbmZvIGtmcmVlICV4IiwoaW50KXBJbmZvKTsKKyAgICAgIFRSQUNFX00oInIzOTY0X29wZW4gLSBpbmZvIGtmcmVlICVwIixwSW5mbyk7CiAgICAgICByZXR1cm4gLUVOT01FTTsKICAgIH0KICAgIAogICAgcEluZm8tPnR4X2J1ZiA9IGttYWxsb2MoVFhfQlVGX1NJWkUsIEdGUF9LRVJORUwpOwotICAgVFJBQ0VfTSgicjM5NjRfb3BlbiAtIHR4X2J1ZiBrbWFsbG9jICV4IiwoaW50KXBJbmZvLT50eF9idWYpOworICAgVFJBQ0VfTSgicjM5NjRfb3BlbiAtIHR4X2J1ZiBrbWFsbG9jICVwIixwSW5mby0+dHhfYnVmKTsKIAogICAgaWYoIXBJbmZvLT50eF9idWYpCiAgICB7CiAgICAgICBwcmludGsoS0VSTl9FUlIgInIzOTY0OiBmYWlsZWQgdG8gYWxsb2MgdHJhbnNtaXQgYnVmZmVyXG4iKTsKICAgICAgIGtmcmVlKHBJbmZvLT5yeF9idWYpOwotICAgICAgVFJBQ0VfTSgicjM5NjRfb3BlbiAtIHJ4X2J1ZiBrZnJlZSAleCIsKGludClwSW5mby0+cnhfYnVmKTsKKyAgICAgIFRSQUNFX00oInIzOTY0X29wZW4gLSByeF9idWYga2ZyZWUgJXAiLHBJbmZvLT5yeF9idWYpOwogICAgICAga2ZyZWUocEluZm8pOwotICAgICAgVFJBQ0VfTSgicjM5NjRfb3BlbiAtIGluZm8ga2ZyZWUgJXgiLChpbnQpcEluZm8pOworICAgICAgVFJBQ0VfTSgicjM5NjRfb3BlbiAtIGluZm8ga2ZyZWUgJXAiLHBJbmZvKTsKICAgICAgIHJldHVybiAtRU5PTUVNOwogICAgfQogCkBAIC0xMTU0LDExICsxMTU0LDExIEBACiAgICAgICAgICAgaWYocE1zZykKICAgICAgICAgICB7CiAgICAgICAgICAgICAga2ZyZWUocE1zZyk7Ci0gICAgICAgICAgICAgVFJBQ0VfTSgicjM5NjRfY2xvc2UgLSBtc2cga2ZyZWUgJXgiLChpbnQpcE1zZyk7CisgICAgICAgICAgICAgVFJBQ0VfTSgicjM5NjRfY2xvc2UgLSBtc2cga2ZyZWUgJXAiLHBNc2cpOwogICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAga2ZyZWUocENsaWVudCk7Ci0gICAgICAgVFJBQ0VfTSgicjM5NjRfY2xvc2UgLSBjbGllbnQga2ZyZWUgJXgiLChpbnQpcENsaWVudCk7CisgICAgICAgVFJBQ0VfTSgicjM5NjRfY2xvc2UgLSBjbGllbnQga2ZyZWUgJXAiLHBDbGllbnQpOwogICAgICAgIHBDbGllbnQ9cE5leHQ7CiAgICAgfQogICAgIC8qIFJlbW92ZSBqb2JzIGZyb20gdHhfcXVldWU6ICovCkBAIC0xMTc3LDExICsxMTc3LDExIEBACiAgICAgLyogRnJlZSBidWZmZXJzOiAqLwogICAgIHdha2VfdXBfaW50ZXJydXB0aWJsZSgmcEluZm8tPnJlYWRfd2FpdCk7CiAgICAga2ZyZWUocEluZm8tPnJ4X2J1Zik7Ci0gICAgVFJBQ0VfTSgicjM5NjRfY2xvc2UgLSByeF9idWYga2ZyZWUgJXgiLChpbnQpcEluZm8tPnJ4X2J1Zik7CisgICAgVFJBQ0VfTSgicjM5NjRfY2xvc2UgLSByeF9idWYga2ZyZWUgJXAiLHBJbmZvLT5yeF9idWYpOwogICAgIGtmcmVlKHBJbmZvLT50eF9idWYpOwotICAgIFRSQUNFX00oInIzOTY0X2Nsb3NlIC0gdHhfYnVmIGtmcmVlICV4IiwoaW50KXBJbmZvLT50eF9idWYpOworICAgIFRSQUNFX00oInIzOTY0X2Nsb3NlIC0gdHhfYnVmIGtmcmVlICVwIixwSW5mby0+dHhfYnVmKTsKICAgICBrZnJlZShwSW5mbyk7Ci0gICAgVFJBQ0VfTSgicjM5NjRfY2xvc2UgLSBpbmZvIGtmcmVlICV4IiwoaW50KXBJbmZvKTsKKyAgICBUUkFDRV9NKCJyMzk2NF9jbG9zZSAtIGluZm8ga2ZyZWUgJXAiLHBJbmZvKTsKIH0KIAogc3RhdGljIHNzaXplX3QgcjM5NjRfcmVhZChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKQEAgLTEyMzQsNyArMTIzNCw3IEBACiAgICAgICBjb3VudCA9IHNpemVvZihzdHJ1Y3QgcjM5NjRfY2xpZW50X21lc3NhZ2UpOwogCiAgICAgICBrZnJlZShwTXNnKTsKLSAgICAgIFRSQUNFX00oInIzOTY0X3JlYWQgLSBtc2cga2ZyZWUgJXgiLChpbnQpcE1zZyk7CisgICAgICBUUkFDRV9NKCJyMzk2NF9yZWFkIC0gbXNnIGtmcmVlICVwIixwTXNnKTsKIAogICAgICAgaWYgKGNvcHlfdG9fdXNlcihidWYsJnRoZU1zZywgY291bnQpKQogCXJldHVybiAtRUZBVUxUOwpAQCAtMTI3OSw3ICsxMjc5LDcgQEAKICAqIEFsbG9jYXRlIGEgYnVmZmVyIGZvciB0aGUgZGF0YSBhbmQgY29weSBpdCBmcm9tIHRoZSBidWZmZXIgd2l0aCBoZWFkZXIgcHJlcGVuZGVkCiAgKi8KICAgIG5ld19kYXRhID0ga21hbGxvYyAoY291bnQrc2l6ZW9mKHN0cnVjdCByMzk2NF9ibG9ja19oZWFkZXIpLCBHRlBfS0VSTkVMKTsKLSAgIFRSQUNFX00oInIzOTY0X3dyaXRlIC0ga21hbGxvYyAleCIsKGludCluZXdfZGF0YSk7CisgICBUUkFDRV9NKCJyMzk2NF93cml0ZSAtIGttYWxsb2MgJXAiLG5ld19kYXRhKTsKICAgIGlmIChuZXdfZGF0YSA9PSBOVUxMKSB7CiAgICAgICBpZiAocEluZm8tPmZsYWdzICYgUjM5NjRfREVCVUcpCiAgICAgICB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvczNjMjQxMC1ydGMuYyBiL2RyaXZlcnMvY2hhci9zM2MyNDEwLXJ0Yy5jCmluZGV4IGVkODY3ZGIuLmUxYTkwZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zM2MyNDEwLXJ0Yy5jCisrKyBiL2RyaXZlcnMvY2hhci9zM2MyNDEwLXJ0Yy5jCkBAIC01NjQsNiArNTY0LDcgQEAKIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHMzYzI0MTBfcnRjZHJ2ID0gewogCS5uYW1lCQk9ICJzM2MyNDEwLXJ0YyIsCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAogCS5wcm9iZQkJPSBzM2MyNDEwX3J0Y19wcm9iZSwKIAkucmVtb3ZlCQk9IHMzYzI0MTBfcnRjX3JlbW92ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92dC5jIGIvZHJpdmVycy9jaGFyL3Z0LmMKaW5kZXggMWUzM2NiMC4uZTkxMjY4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Z0LmMKKysrIGIvZHJpdmVycy9jaGFyL3Z0LmMKQEAgLTgxMCwxMyArODEwLDE0IEBACiAJCQkgKiBmcm9tIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiBjdXJzb3IgcG9zaXRpb24KIAkJCSAqLwogCQkJb2xkX29yaWdpbiArPSAodmMtPnZjX3kgLSBuZXdfcm93cy8yKSAqIG9sZF9yb3dfc2l6ZTsKLQkJCWVuZCA9IG9sZF9vcmlnaW4gKyBuZXdfc2NyZWVuX3NpemU7CisJCQllbmQgPSBvbGRfb3JpZ2luICsgKG9sZF9yb3dfc2l6ZSAqIG5ld19yb3dzKTsKIAkJfQogCX0gZWxzZQogCQkvKgogCQkgKiBDdXJzb3IgbmVhciB0aGUgdG9wLCBjb3B5IGNvbnRlbnRzIGZyb20gdGhlIHRvcCBvZiBidWZmZXIKIAkJICovCi0JCWVuZCA9IChvbGRfcm93cyA+IG5ld19yb3dzKSA/IG9sZF9vcmlnaW4gKyBuZXdfc2NyZWVuX3NpemUgOgorCQllbmQgPSAob2xkX3Jvd3MgPiBuZXdfcm93cykgPyBvbGRfb3JpZ2luICsKKwkJCShvbGRfcm93X3NpemUgKiBuZXdfcm93cykgOgogCQkJdmMtPnZjX3Njcl9lbmQ7CiAKIAl1cGRhdGVfYXR0cih2Yyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXY2NHg2MF93ZHQuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tdjY0eDYwX3dkdC5jCmluZGV4IDE0MzZhZWEuLjZkM2ZmMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tdjY0eDYwX3dkdC5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tdjY0eDYwX3dkdC5jCkBAIC04Nyw2ICs4Nyw4IEBACiAJbXY2NHg2MF93ZHRfc2VydmljZSgpOwogCW12NjR4NjBfd2R0X2hhbmRsZXJfZW5hYmxlKCk7CiAKKwlub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xMDMsMTIgKzEwNSw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IG12NjR4NjBfd2R0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpkYXRhLAorc3RhdGljIHNzaXplX3QgbXY2NHg2MF93ZHRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpkYXRhLAogCQkJCSBzaXplX3QgbGVuLCBsb2ZmX3QgKiBwcG9zKQogewotCWlmICgqcHBvcyAhPSBmaWxlLT5mX3BvcykKLQkJcmV0dXJuIC1FU1BJUEU7Ci0KIAlpZiAobGVuKQogCQltdjY0eDYwX3dkdF9zZXJ2aWNlKCk7CiAKQEAgLTExOSw2ICsxMTgsNyBAQAogCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlpbnQgdGltZW91dDsKKwl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaW5mbyA9IHsKIAkJLm9wdGlvbnMgPSBXRElPRl9LRUVQQUxJVkVQSU5HLAogCQkuZmlybXdhcmVfdmVyc2lvbiA9IDAsCkBAIC0xMjcsMTMgKzEyNywxMyBAQAogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFdESU9DX0dFVFNVUFBPUlQ6Ci0JCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgKilhcmcsICZpbmZvLCBzaXplb2YoaW5mbykpKQorCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpbmZvLCBzaXplb2YoaW5mbykpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWJyZWFrOwogCiAJY2FzZSBXRElPQ19HRVRTVEFUVVM6CiAJY2FzZSBXRElPQ19HRVRCT09UU1RBVFVTOgotCQlpZiAocHV0X3VzZXIod2R0X3N0YXR1cywgKGludCAqKWFyZykpCisJCWlmIChwdXRfdXNlcih3ZHRfc3RhdHVzLCAoaW50IF9fdXNlciAqKWFyZ3ApKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXdkdF9zdGF0dXMgJj0gfldESU9GX0tFRVBBTElWRVBJTkc7CiAJCWJyZWFrOwpAQCAtMTU0LDcgKzE1NCw3IEBACiAKIAljYXNlIFdESU9DX0dFVFRJTUVPVVQ6CiAJCXRpbWVvdXQgPSBtdjY0eDYwX3dkdF90aW1lb3V0ICogSFo7Ci0JCWlmIChwdXRfdXNlcih0aW1lb3V0LCAoaW50ICopYXJnKSkKKwkJaWYgKHB1dF91c2VyKHRpbWVvdXQsIChpbnQgX191c2VyICopYXJncCkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9wY3dkX3BjaS5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2RfcGNpLmMKaW5kZXggNWE4MGFkYi4uMGI4ZTQ5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2RfcGNpLmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2RfcGNpLmMKQEAgLTUwLDggKzUwLDggQEAKICNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIEZvciBpbmIvb3V0Yi8uLi4gKi8KIAogLyogTW9kdWxlIGFuZCB2ZXJzaW9uIGluZm9ybWF0aW9uICovCi0jZGVmaW5lIFdBVENIRE9HX1ZFUlNJT04gIjEuMDEiCi0jZGVmaW5lIFdBVENIRE9HX0RBVEUgIjAyIFNlcCAyMDA1IgorI2RlZmluZSBXQVRDSERPR19WRVJTSU9OICIxLjAyIgorI2RlZmluZSBXQVRDSERPR19EQVRFICIwMyBTZXAgMjAwNSIKICNkZWZpbmUgV0FUQ0hET0dfRFJJVkVSX05BTUUgIlBDSS1QQyBXYXRjaGRvZyIKICNkZWZpbmUgV0FUQ0hET0dfTkFNRSAicGN3ZF9wY2kiCiAjZGVmaW5lIFBGWCBXQVRDSERPR19OQU1FICI6ICIKQEAgLTcwLDE5ICs3MCwzMCBAQAogICogVGhlc2UgYXJlIHRoZSBkZWZpbmVzIHRoYXQgZGVzY3JpYmUgdGhlIGNvbnRyb2wgc3RhdHVzIGJpdHMgZm9yIHRoZQogICogUENJLVBDIFdhdGNoZG9nIGNhcmQuCiAgKi8KLSNkZWZpbmUgV0RfUENJX1dUUlAgICAgICAgICAgICAgMHgwMQkvKiBXYXRjaGRvZyBUcmlwIHN0YXR1cyAqLwotI2RlZmluZSBXRF9QQ0lfSFJCVCAgICAgICAgICAgICAweDAyCS8qIFdhdGNoZG9nIEhlYXJ0YmVhdCAqLwotI2RlZmluZSBXRF9QQ0lfVFRSUCAgICAgICAgICAgICAweDA0CS8qIFRlbXBlcmF0dXJlIFRyaXAgc3RhdHVzICovCisvKiBQb3J0IDEgOiBDb250cm9sIFN0YXR1cyAjMSAqLworI2RlZmluZSBXRF9QQ0lfV1RSUAkJMHgwMQkvKiBXYXRjaGRvZyBUcmlwIHN0YXR1cyAqLworI2RlZmluZSBXRF9QQ0lfSFJCVAkJMHgwMgkvKiBXYXRjaGRvZyBIZWFydGJlYXQgKi8KKyNkZWZpbmUgV0RfUENJX1RUUlAJCTB4MDQJLyogVGVtcGVyYXR1cmUgVHJpcCBzdGF0dXMgKi8KKyNkZWZpbmUgV0RfUENJX1JMMkEJCTB4MDgJLyogUmVsYXkgMiBBY3RpdmUgKi8KKyNkZWZpbmUgV0RfUENJX1JMMUEJCTB4MTAJLyogUmVsYXkgMSBBY3RpdmUgKi8KKyNkZWZpbmUgV0RfUENJX1IyRFMJCTB4NDAJLyogUmVsYXkgMiBEaXNhYmxlIFRlbXBlcmF0dXJlLXRyaXAvcmVzZXQgKi8KKyNkZWZpbmUgV0RfUENJX1JMWTIJCTB4ODAJLyogQWN0aXZhdGUgUmVsYXkgMiBvbiB0aGUgYm9hcmQgKi8KKy8qIFBvcnQgMiA6IENvbnRyb2wgU3RhdHVzICMyICovCisjZGVmaW5lIFdEX1BDSV9XRElTCQkweDEwCS8qIFdhdGNoZG9nIERpc2FibGUgKi8KKyNkZWZpbmUgV0RfUENJX0VOVFAJCTB4MjAJLyogRW5hYmxlIFRlbXBlcmF0dXJlIFRyaXAgUmVzZXQgKi8KKyNkZWZpbmUgV0RfUENJX1dSU1AJCTB4NDAJLyogV2F0Y2hkb2cgd3JvdGUgcmVzcG9uc2UgKi8KKyNkZWZpbmUgV0RfUENJX1BDTUQJCTB4ODAJLyogUEMgaGFzIHNlbnQgY29tbWFuZCAqLwogCiAvKiBhY2NvcmRpbmcgdG8gZG9jdW1lbnRhdGlvbiBtYXguIHRpbWUgdG8gcHJvY2VzcyBhIGNvbW1hbmQgZm9yIHRoZSBwY2kKICAqIHdhdGNoZG9nIGNhcmQgaXMgMTAwIG1zLCBzbyB3ZSBnaXZlIGl0IDE1MCBtcyB0byBkbyBpdCdzIGpvYiAqLwogI2RlZmluZSBQQ0lfQ09NTUFORF9USU1FT1VUCTE1MAogCiAvKiBXYXRjaGRvZydzIGludGVybmFsIGNvbW1hbmRzICovCi0jZGVmaW5lIENNRF9HRVRfU1RBVFVTCQkJMHgwNAotI2RlZmluZSBDTURfR0VUX0ZJUk1XQVJFX1ZFUlNJT04JMHgwOAotI2RlZmluZSBDTURfUkVBRF9XQVRDSERPR19USU1FT1VUCTB4MTgKLSNkZWZpbmUgQ01EX1dSSVRFX1dBVENIRE9HX1RJTUVPVVQJMHgxOQorI2RlZmluZSBDTURfR0VUX1NUQVRVUwkJCQkweDA0CisjZGVmaW5lIENNRF9HRVRfRklSTVdBUkVfVkVSU0lPTgkJMHgwOAorI2RlZmluZSBDTURfUkVBRF9XQVRDSERPR19USU1FT1VUCQkweDE4CisjZGVmaW5lIENNRF9XUklURV9XQVRDSERPR19USU1FT1VUCQkweDE5CisjZGVmaW5lIENNRF9HRVRfQ0xFQVJfUkVTRVRfQ09VTlQJCTB4ODQKIAogLyogV2UgY2FuIG9ubHkgdXNlIDEgY2FyZCBkdWUgdG8gdGhlIC9kZXYvd2F0Y2hkb2cgcmVzdHJpY3Rpb24gKi8KIHN0YXRpYyBpbnQgY2FyZHNfZm91bmQ7CkBAIC05MSwxNSArMTAyLDIyIEBACiBzdGF0aWMgaW50IHRlbXBfcGFuaWM7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpc19hY3RpdmU7CiBzdGF0aWMgY2hhciBleHBlY3RfcmVsZWFzZTsKLXN0YXRpYyBzdHJ1Y3QgewotCWludCBzdXBwb3J0c190ZW1wOwkvKiBXZXRoZXIgb3Igbm90IHRoZSBjYXJkIGhhcyBhIHRlbXBlcmF0dXJlIGRldmljZSAqLwotCWludCBib290X3N0YXR1czsJLyogVGhlIGNhcmQncyBib290IHN0YXR1cyAqLwotCXVuc2lnbmVkIGxvbmcgaW9fYWRkcjsJLyogVGhlIGNhcmRzIEkvTyBhZGRyZXNzICovCi0Jc3BpbmxvY2tfdCBpb19sb2NrOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2Oworc3RhdGljIHN0cnVjdCB7CQkJCS8qIHRoaXMgaXMgcHJpdmF0ZSBkYXRhIGZvciBlYWNoIFBDSS1QQyB3YXRjaGRvZyBjYXJkICovCisJaW50IHN1cHBvcnRzX3RlbXA7CQkvKiBXZXRoZXIgb3Igbm90IHRoZSBjYXJkIGhhcyBhIHRlbXBlcmF0dXJlIGRldmljZSAqLworCWludCBib290X3N0YXR1czsJCS8qIFRoZSBjYXJkJ3MgYm9vdCBzdGF0dXMgKi8KKwl1bnNpZ25lZCBsb25nIGlvX2FkZHI7CQkvKiBUaGUgY2FyZHMgSS9PIGFkZHJlc3MgKi8KKwlzcGlubG9ja190IGlvX2xvY2s7CQkvKiB0aGUgbG9jayBmb3IgaW8gb3BlcmF0aW9ucyAqLworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwkJLyogdGhlIFBDSS1kZXZpY2UgKi8KIH0gcGNpcGN3ZF9wcml2YXRlOwogCiAvKiBtb2R1bGUgcGFyYW1ldGVycyAqLworI2RlZmluZSBRVUlFVAkwCS8qIERlZmF1bHQgKi8KKyNkZWZpbmUgVkVSQk9TRQkxCS8qIFZlcmJvc2UgKi8KKyNkZWZpbmUgREVCVUcJMgkvKiBwcmludCBmYW5jeSBzdHVmZiB0b28gKi8KK3N0YXRpYyBpbnQgZGVidWcgPSBRVUlFVDsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbDogMD1RdWlldCwgMT1WZXJib3NlLCAyPURlYnVnIChkZWZhdWx0PTApIik7CisKICNkZWZpbmUgV0FUQ0hET0dfSEVBUlRCRUFUIDIJLyogMiBzZWMgZGVmYXVsdCBoZWFydGJlYXQgKi8KIHN0YXRpYyBpbnQgaGVhcnRiZWF0ID0gV0FUQ0hET0dfSEVBUlRCRUFUOwogbW9kdWxlX3BhcmFtKGhlYXJ0YmVhdCwgaW50LCAwKTsKQEAgLTExNyw2ICsxMzUsMTAgQEAKIHsKIAlpbnQgZ290X3Jlc3BvbnNlLCBjb3VudDsKIAorCWlmIChkZWJ1ZyA+PSBERUJVRykKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJzZW5kaW5nIGZvbGxvd2luZyBkYXRhIGNtZD0weCUwMnggbXNiPTB4JTAyeCBsc2I9MHglMDJ4XG4iLAorCQljbWQsICptc2IsICpsc2IpOworCiAJc3Bpbl9sb2NrKCZwY2lwY3dkX3ByaXZhdGUuaW9fbG9jayk7CiAJLyogSWYgYSBjb21tYW5kIHJlcXVpcmVzIGRhdGEgaXQgc2hvdWxkIGJlIHdyaXR0ZW4gZmlyc3QuCiAJICogRGF0YSBmb3IgY29tbWFuZHMgd2l0aCA4IGJpdHMgb2YgZGF0YSBzaG91bGQgYmUgd3JpdHRlbiB0byBwb3J0IDQuCkBAIC0xMzEsMTAgKzE1MywxOSBAQAogCS8qIHdhaXQgdGlsbCB0aGUgcGNpIGNhcmQgcHJvY2Vzc2VkIHRoZSBjb21tYW5kLCBzaWduYWxlZCBieQogCSAqIHRoZSBXUlNQIGJpdCBpbiBwb3J0IDIgYW5kIGdpdmUgaXQgYSBtYXguIHRpbWVvdXQgb2YKIAkgKiBQQ0lfQ09NTUFORF9USU1FT1VUIHRvIHByb2Nlc3MgKi8KLQlnb3RfcmVzcG9uc2UgPSBpbmJfcChwY2lwY3dkX3ByaXZhdGUuaW9fYWRkciArIDIpICYgMHg0MDsKKwlnb3RfcmVzcG9uc2UgPSBpbmJfcChwY2lwY3dkX3ByaXZhdGUuaW9fYWRkciArIDIpICYgV0RfUENJX1dSU1A7CiAJZm9yIChjb3VudCA9IDA7IChjb3VudCA8IFBDSV9DT01NQU5EX1RJTUVPVVQpICYmICghZ290X3Jlc3BvbnNlKTsgY291bnQrKykgewogCQltZGVsYXkoMSk7Ci0JCWdvdF9yZXNwb25zZSA9IGluYl9wKHBjaXBjd2RfcHJpdmF0ZS5pb19hZGRyICsgMikgJiAweDQwOworCQlnb3RfcmVzcG9uc2UgPSBpbmJfcChwY2lwY3dkX3ByaXZhdGUuaW9fYWRkciArIDIpICYgV0RfUENJX1dSU1A7CisJfQorCisJaWYgKGRlYnVnID49IERFQlVHKSB7CisJCWlmIChnb3RfcmVzcG9uc2UpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAidGltZSB0byBwcm9jZXNzIGNvbW1hbmQgd2FzOiAlZCBtc1xuIiwKKwkJCQljb3VudCk7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyBQRlggImNhcmQgZGlkIG5vdCByZXNwb25kIG9uIGNvbW1hbmQhXG4iKTsKKwkJfQogCX0KIAogCWlmIChnb3RfcmVzcG9uc2UpIHsKQEAgLTE0NCwxMiArMTc1LDY2IEBACiAKIAkJLyogY2xlYXIgV1JTUCBiaXQgKi8KIAkJaW5iX3AocGNpcGN3ZF9wcml2YXRlLmlvX2FkZHIgKyA2KTsKKworCQlpZiAoZGVidWcgPj0gREVCVUcpCisJCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInJlY2VpdmVkIGZvbGxvd2luZyBkYXRhIGZvciBjbWQ9MHglMDJ4OiBtc2I9MHglMDJ4IGxzYj0weCUwMnhcbiIsCisJCQkJY21kLCAqbXNiLCAqbHNiKTsKIAl9CisKIAlzcGluX3VubG9jaygmcGNpcGN3ZF9wcml2YXRlLmlvX2xvY2spOwogCiAJcmV0dXJuIGdvdF9yZXNwb25zZTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHBjaXBjd2RfY2hlY2tfdGVtcGVyYXR1cmVfc3VwcG9ydCh2b2lkKQoreworCWlmIChpbmJfcChwY2lwY3dkX3ByaXZhdGUuaW9fYWRkcikgIT0gMHhGMCkKKwkJcGNpcGN3ZF9wcml2YXRlLnN1cHBvcnRzX3RlbXAgPSAxOworfQorCitzdGF0aWMgaW50IHBjaXBjd2RfZ2V0X29wdGlvbl9zd2l0Y2hlcyh2b2lkKQoreworCWludCBvcHRpb25fc3dpdGNoZXM7CisKKwlvcHRpb25fc3dpdGNoZXMgPSBpbmJfcChwY2lwY3dkX3ByaXZhdGUuaW9fYWRkciArIDMpOworCXJldHVybiBvcHRpb25fc3dpdGNoZXM7Cit9CisKK3N0YXRpYyB2b2lkIHBjaXBjd2Rfc2hvd19jYXJkX2luZm8odm9pZCkKK3sKKwlpbnQgZ290X2Z3X3JldiwgZndfcmV2X21ham9yLCBmd19yZXZfbWlub3I7CisJY2hhciBmd192ZXJfc3RyWzIwXTsJCS8qIFRoZSBjYXJkcyBmaXJtd2FyZSB2ZXJzaW9uICovCisJaW50IG9wdGlvbl9zd2l0Y2hlczsKKworCWdvdF9md19yZXYgPSBzZW5kX2NvbW1hbmQoQ01EX0dFVF9GSVJNV0FSRV9WRVJTSU9OLCAmZndfcmV2X21ham9yLCAmZndfcmV2X21pbm9yKTsKKwlpZiAoZ290X2Z3X3JldikgeworCQlzcHJpbnRmKGZ3X3Zlcl9zdHIsICIldS4lMDJ1IiwgZndfcmV2X21ham9yLCBmd19yZXZfbWlub3IpOworCX0gZWxzZSB7CisJCXNwcmludGYoZndfdmVyX3N0ciwgIjxjYXJkIG5vIGFuc3dlcj4iKTsKKwl9CisKKwkvKiBHZXQgc3dpdGNoIHNldHRpbmdzICovCisJb3B0aW9uX3N3aXRjaGVzID0gcGNpcGN3ZF9nZXRfb3B0aW9uX3N3aXRjaGVzKCk7CisKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiRm91bmQgY2FyZCBhdCBwb3J0IDB4JTA0eCAoRmlybXdhcmU6ICVzKSAlcyB0ZW1wIG9wdGlvblxuIiwKKwkJKGludCkgcGNpcGN3ZF9wcml2YXRlLmlvX2FkZHIsIGZ3X3Zlcl9zdHIsCisJCShwY2lwY3dkX3ByaXZhdGUuc3VwcG9ydHNfdGVtcCA/ICJ3aXRoIiA6ICJ3aXRob3V0IikpOworCisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIk9wdGlvbiBzd2l0Y2hlcyAoMHglMDJ4KTogVGVtcGVyYXR1cmUgUmVzZXQgRW5hYmxlPSVzLCBQb3dlciBPbiBEZWxheT0lc1xuIiwKKwkJb3B0aW9uX3N3aXRjaGVzLAorCQkoKG9wdGlvbl9zd2l0Y2hlcyAmIDB4MTApID8gIk9OIiA6ICJPRkYiKSwKKwkJKChvcHRpb25fc3dpdGNoZXMgJiAweDA4KSA/ICJPTiIgOiAiT0ZGIikpOworCisJaWYgKHBjaXBjd2RfcHJpdmF0ZS5ib290X3N0YXR1cyAmIFdESU9GX0NBUkRSRVNFVCkKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlByZXZpb3VzIHJlc2V0IHdhcyBjYXVzZWQgYnkgdGhlIFdhdGNoZG9nIGNhcmRcbiIpOworCisJaWYgKHBjaXBjd2RfcHJpdmF0ZS5ib290X3N0YXR1cyAmIFdESU9GX09WRVJIRUFUKQorCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiQ2FyZCBzZW5zZWQgYSBDUFUgT3ZlcmhlYXRcbiIpOworCisJaWYgKHBjaXBjd2RfcHJpdmF0ZS5ib290X3N0YXR1cyA9PSAwKQorCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiTm8gcHJldmlvdXMgdHJpcCBkZXRlY3RlZCAtIENvbGQgYm9vdCBvciByZXNldFxuIik7Cit9CisKIHN0YXRpYyBpbnQgcGNpcGN3ZF9zdGFydCh2b2lkKQogewogCWludCBzdGF0X3JlZzsKQEAgLTE2MSwxMSArMjQ2LDE0IEBACiAJc3RhdF9yZWcgPSBpbmJfcChwY2lwY3dkX3ByaXZhdGUuaW9fYWRkciArIDIpOwogCXNwaW5fdW5sb2NrKCZwY2lwY3dkX3ByaXZhdGUuaW9fbG9jayk7CiAKLQlpZiAoc3RhdF9yZWcgJiAweDEwKSB7CisJaWYgKHN0YXRfcmVnICYgV0RfUENJX1dESVMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2FyZCB0aW1lciBub3QgZW5hYmxlZFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKKwlpZiAoZGVidWcgPj0gVkVSQk9TRSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJXYXRjaGRvZyBzdGFydGVkXG4iKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xODMsMTggKzI3MSwyNSBAQAogCXN0YXRfcmVnID0gaW5iX3AocGNpcGN3ZF9wcml2YXRlLmlvX2FkZHIgKyAyKTsKIAlzcGluX3VubG9jaygmcGNpcGN3ZF9wcml2YXRlLmlvX2xvY2spOwogCi0JaWYgKCEoc3RhdF9yZWcgJiAweDEwKSkgeworCWlmICghKHN0YXRfcmVnICYgV0RfUENJX1dESVMpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhcmQgZGlkIG5vdCBhY2tub3dsZWRnZSBkaXNhYmxlIGF0dGVtcHRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCisJaWYgKGRlYnVnID49IFZFUkJPU0UpCisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiV2F0Y2hkb2cgc3RvcHBlZFxuIik7CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwY2lwY3dkX2tlZXBhbGl2ZSh2b2lkKQogewogCS8qIFJlLXRyaWdnZXIgd2F0Y2hkb2cgYnkgd3JpdGluZyB0byBwb3J0IDAgKi8KLQlvdXRiX3AoMHg0MiwgcGNpcGN3ZF9wcml2YXRlLmlvX2FkZHIpOworCW91dGJfcCgweDQyLCBwY2lwY3dkX3ByaXZhdGUuaW9fYWRkcik7CS8qIHNlbmQgb3V0IGFueSBkYXRhICovCisKKwlpZiAoZGVidWcgPj0gREVCVUcpCisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiV2F0Y2hkb2cga2VlcGFsaXZlIHNpZ25hbCBzZW5kXG4iKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yMTAsMjkgKzMwNSw2NCBAQAogCXNlbmRfY29tbWFuZChDTURfV1JJVEVfV0FUQ0hET0dfVElNRU9VVCwgJnRfbXNiLCAmdF9sc2IpOwogCiAJaGVhcnRiZWF0ID0gdDsKKwlpZiAoZGVidWcgPj0gVkVSQk9TRSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJOZXcgaGVhcnRiZWF0OiAlZFxuIiwKKwkJICAgICAgIGhlYXJ0YmVhdCk7CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwY2lwY3dkX2dldF9zdGF0dXMoaW50ICpzdGF0dXMpCiB7Ci0JaW50IG5ld19zdGF0dXM7CisJaW50IGNvbnRyb2xfc3RhdHVzOwogCiAJKnN0YXR1cz0wOwotCW5ld19zdGF0dXMgPSBpbmJfcChwY2lwY3dkX3ByaXZhdGUuaW9fYWRkciArIDEpOwotCWlmIChuZXdfc3RhdHVzICYgV0RfUENJX1dUUlApCisJY29udHJvbF9zdGF0dXMgPSBpbmJfcChwY2lwY3dkX3ByaXZhdGUuaW9fYWRkciArIDEpOworCWlmIChjb250cm9sX3N0YXR1cyAmIFdEX1BDSV9XVFJQKQogCQkqc3RhdHVzIHw9IFdESU9GX0NBUkRSRVNFVDsKLQlpZiAobmV3X3N0YXR1cyAmIFdEX1BDSV9UVFJQKSB7CisJaWYgKGNvbnRyb2xfc3RhdHVzICYgV0RfUENJX1RUUlApIHsKIAkJKnN0YXR1cyB8PSBXRElPRl9PVkVSSEVBVDsKIAkJaWYgKHRlbXBfcGFuaWMpCiAJCQlwYW5pYyhQRlggIlRlbXBlcmF0dXJlIG92ZXJoZWF0IHRyaXAhXG4iKTsKIAl9CiAKKwlpZiAoZGVidWcgPj0gREVCVUcpCisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiQ29udHJvbCBTdGF0dXMgIzE6IDB4JTAyeFxuIiwKKwkJICAgICAgIGNvbnRyb2xfc3RhdHVzKTsKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHBjaXBjd2RfY2xlYXJfc3RhdHVzKHZvaWQpCiB7Ci0Jb3V0Yl9wKDB4MDEsIHBjaXBjd2RfcHJpdmF0ZS5pb19hZGRyICsgMSk7CisJaW50IGNvbnRyb2xfc3RhdHVzOworCWludCBtc2I7CisJaW50IHJlc2V0X2NvdW50ZXI7CisKKwlpZiAoZGVidWcgPj0gVkVSQk9TRSkKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImNsZWFyaW5nIHdhdGNoZG9nIHRyaXAgc3RhdHVzICYgTEVEXG4iKTsKKworCWNvbnRyb2xfc3RhdHVzID0gaW5iX3AocGNpcGN3ZF9wcml2YXRlLmlvX2FkZHIgKyAxKTsKKworCWlmIChkZWJ1ZyA+PSBERUJVRykgeworCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInN0YXR1cyB3YXM6IDB4JTAyeFxuIiwgY29udHJvbF9zdGF0dXMpOworCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInNlbmRpbmc6IDB4JTAyeFxuIiwKKwkJICAgICAgIChjb250cm9sX3N0YXR1cyAmIFdEX1BDSV9SMkRTKSB8IFdEX1BDSV9XVFJQKTsKKwl9CisKKwkvKiBjbGVhciB0cmlwIHN0YXR1cyAmIExFRCBhbmQga2VlcCBtb2RlIG9mIHJlbGF5IDIgKi8KKwlvdXRiX3AoKGNvbnRyb2xfc3RhdHVzICYgV0RfUENJX1IyRFMpIHwgV0RfUENJX1dUUlAsIHBjaXBjd2RfcHJpdmF0ZS5pb19hZGRyICsgMSk7CisKKwkvKiBjbGVhciByZXNldCBjb3VudGVyICovCisJbXNiPTA7CisJcmVzZXRfY291bnRlcj0weGZmOworCXNlbmRfY29tbWFuZChDTURfR0VUX0NMRUFSX1JFU0VUX0NPVU5ULCAmbXNiLCAmcmVzZXRfY291bnRlcik7CisKKwlpZiAoZGVidWcgPj0gREVCVUcpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJyZXNldCBjb3VudCB3YXM6IDB4JTAyeFxuIiwKKwkJICAgICAgIHJlc2V0X2NvdW50ZXIpOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC0yNDIsMTEgKzM3MiwxOCBAQAogCWlmICghcGNpcGN3ZF9wcml2YXRlLnN1cHBvcnRzX3RlbXApCiAJCXJldHVybiAtRU5PREVWOwogCisJKnRlbXBlcmF0dXJlID0gaW5iX3AocGNpcGN3ZF9wcml2YXRlLmlvX2FkZHIpOworCiAJLyoKIAkgKiBDb252ZXJ0IGNlbHNpdXMgdG8gZmFocmVuaGVpdCwgc2luY2UgdGhpcyB3YXMKIAkgKiB0aGUgZGVjaWRlZCAnc3RhbmRhcmQnIGZvciB0aGlzIHJldHVybiB2YWx1ZS4KIAkgKi8KLQkqdGVtcGVyYXR1cmUgPSAoKGluYl9wKHBjaXBjd2RfcHJpdmF0ZS5pb19hZGRyKSkgKiA5IC8gNSkgKyAzMjsKKwkqdGVtcGVyYXR1cmUgPSAoKnRlbXBlcmF0dXJlICogOSAvIDUpICsgMzI7CisKKwlpZiAoZGVidWcgPj0gREVCVUcpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJ0ZW1wZXJhdHVyZSBpczogJWQgRlxuIiwKKwkJICAgICAgICp0ZW1wZXJhdHVyZSk7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNTYsNyArMzkzLDcgQEAKICAqLwogCiBzdGF0aWMgc3NpemVfdCBwY2lwY3dkX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqZGF0YSwKLQkJCSAgICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKKwkJCSAgICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKQogewogCS8qIFNlZSBpZiB3ZSBnb3QgdGhlIG1hZ2ljIGNoYXJhY3RlciAnVicgYW5kIHJlbG9hZCB0aGUgdGltZXIgKi8KIAlpZiAobGVuKSB7CkBAIC0zODEsOCArNTE4LDExIEBACiBzdGF0aWMgaW50IHBjaXBjd2Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAkvKiAvZGV2L3dhdGNoZG9nIGNhbiBvbmx5IGJlIG9wZW5lZCBvbmNlICovCi0JaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJmlzX2FjdGl2ZSkpCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJmlzX2FjdGl2ZSkpIHsKKwkJaWYgKGRlYnVnID49IFZFUkJPU0UpCisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJBdHRlbXB0IHRvIG9wZW4gYWxyZWFkeSBvcGVuZWQgZGV2aWNlLlxuIik7CiAJCXJldHVybiAtRUJVU1k7CisJfQogCiAJLyogQWN0aXZhdGUgKi8KIAlwY2lwY3dkX3N0YXJ0KCk7CkBAIC00OTIsMTkgKzYzMiwxMCBAQAogICoJSW5pdCAmIGV4aXQgcm91dGluZXMKICAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfdGVtcGVyYXR1cmVfc3VwcG9ydCh2b2lkKQotewotCWlmIChpbmJfcChwY2lwY3dkX3ByaXZhdGUuaW9fYWRkcikgIT0gMHhGMCkKLQkJcGNpcGN3ZF9wcml2YXRlLnN1cHBvcnRzX3RlbXAgPSAxOwotfQotCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBwY2lwY3dkX2NhcmRfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlpbnQgcmV0ID0gLUVJTzsKLQlpbnQgZ290X2Z3X3JldiwgZndfcmV2X21ham9yLCBmd19yZXZfbWlub3I7Ci0JY2hhciBmd192ZXJfc3RyWzIwXTsKLQljaGFyIG9wdGlvbl9zd2l0Y2hlczsKIAogCWNhcmRzX2ZvdW5kKys7CiAJaWYgKGNhcmRzX2ZvdW5kID09IDEpCkBAIC01NDYsMzYgKzY3NywxMCBAQAogCXBjaXBjd2Rfc3RvcCgpOwogCiAJLyogQ2hlY2sgd2hldGhlciBvciBub3QgdGhlIGNhcmQgc3VwcG9ydHMgdGhlIHRlbXBlcmF0dXJlIGRldmljZSAqLwotCWNoZWNrX3RlbXBlcmF0dXJlX3N1cHBvcnQoKTsKKwlwY2lwY3dkX2NoZWNrX3RlbXBlcmF0dXJlX3N1cHBvcnQoKTsKIAotCS8qIEdldCB0aGUgRmlybXdhcmUgVmVyc2lvbiAqLwotCWdvdF9md19yZXYgPSBzZW5kX2NvbW1hbmQoQ01EX0dFVF9GSVJNV0FSRV9WRVJTSU9OLCAmZndfcmV2X21ham9yLCAmZndfcmV2X21pbm9yKTsKLQlpZiAoZ290X2Z3X3JldikgewotCQlzcHJpbnRmKGZ3X3Zlcl9zdHIsICIldS4lMDJ1IiwgZndfcmV2X21ham9yLCBmd19yZXZfbWlub3IpOwotCX0gZWxzZSB7Ci0JCXNwcmludGYoZndfdmVyX3N0ciwgIjxjYXJkIG5vIGFuc3dlcj4iKTsKLQl9Ci0KLQkvKiBHZXQgc3dpdGNoIHNldHRpbmdzICovCi0Jb3B0aW9uX3N3aXRjaGVzID0gaW5iX3AocGNpcGN3ZF9wcml2YXRlLmlvX2FkZHIgKyAzKTsKLQotCXByaW50ayhLRVJOX0lORk8gUEZYICJGb3VuZCBjYXJkIGF0IHBvcnQgMHglMDR4IChGaXJtd2FyZTogJXMpICVzIHRlbXAgb3B0aW9uXG4iLAotCQkoaW50KSBwY2lwY3dkX3ByaXZhdGUuaW9fYWRkciwgZndfdmVyX3N0ciwKLQkJKHBjaXBjd2RfcHJpdmF0ZS5zdXBwb3J0c190ZW1wID8gIndpdGgiIDogIndpdGhvdXQiKSk7Ci0KLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiT3B0aW9uIHN3aXRjaGVzICgweCUwMngpOiBUZW1wZXJhdHVyZSBSZXNldCBFbmFibGU9JXMsIFBvd2VyIE9uIERlbGF5PSVzXG4iLAotCQlvcHRpb25fc3dpdGNoZXMsCi0JCSgob3B0aW9uX3N3aXRjaGVzICYgMHgxMCkgPyAiT04iIDogIk9GRiIpLAotCQkoKG9wdGlvbl9zd2l0Y2hlcyAmIDB4MDgpID8gIk9OIiA6ICJPRkYiKSk7Ci0KLQlpZiAocGNpcGN3ZF9wcml2YXRlLmJvb3Rfc3RhdHVzICYgV0RJT0ZfQ0FSRFJFU0VUKQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiUHJldmlvdXMgcmVzZXQgd2FzIGNhdXNlZCBieSB0aGUgV2F0Y2hkb2cgY2FyZFxuIik7Ci0KLQlpZiAocGNpcGN3ZF9wcml2YXRlLmJvb3Rfc3RhdHVzICYgV0RJT0ZfT1ZFUkhFQVQpCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICJDYXJkIHNlbnNlZCBhIENQVSBPdmVyaGVhdFxuIik7Ci0KLQlpZiAocGNpcGN3ZF9wcml2YXRlLmJvb3Rfc3RhdHVzID09IDApCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICJObyBwcmV2aW91cyB0cmlwIGRldGVjdGVkIC0gQ29sZCBib290IG9yIHJlc2V0XG4iKTsKKwkvKiBTaG93IGluZm8gYWJvdXQgdGhlIGNhcmQgaXRzZWxmICovCisJcGNpcGN3ZF9zaG93X2NhcmRfaW5mbygpOwogCiAJLyogQ2hlY2sgdGhhdCB0aGUgaGVhcnRiZWF0IHZhbHVlIGlzIHdpdGhpbiBpdCdzIHJhbmdlIDsgaWYgbm90IHJlc2V0IHRvIHRoZSBkZWZhdWx0ICovCiAJaWYgKHBjaXBjd2Rfc2V0X2hlYXJ0YmVhdChoZWFydGJlYXQpKSB7CkBAIC02NTYsNyArNzYxLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgcGNpcGN3ZF9pbml0X21vZHVsZSh2b2lkKQogewotCXNwaW5fbG9ja19pbml0ICgmcGNpcGN3ZF9wcml2YXRlLmlvX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZwY2lwY3dkX3ByaXZhdGUuaW9fbG9jayk7CiAKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcGNpcGN3ZF9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jb25uZWN0b3IvY25fcXVldWUuYyBiL2RyaXZlcnMvY29ubmVjdG9yL2NuX3F1ZXVlLmMKaW5kZXggOTY2NjMyMTguLjlmMmYwMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY29ubmVjdG9yL2NuX3F1ZXVlLmMKKysrIGIvZHJpdmVycy9jb25uZWN0b3IvY25fcXVldWUuYwpAQCAtMzEsMTYgKzMxLDE5IEBACiAjaW5jbHVkZSA8bGludXgvY29ubmVjdG9yLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAotc3RhdGljIHZvaWQgY25fcXVldWVfd3JhcHBlcih2b2lkICpkYXRhKQordm9pZCBjbl9xdWV1ZV93cmFwcGVyKHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpjYnEgPSBkYXRhOworCXN0cnVjdCBjbl9jYWxsYmFja19kYXRhICpkID0gZGF0YTsKIAotCWNicS0+Y2ItPmNhbGxiYWNrKGNicS0+Y2ItPnByaXYpOwotCWNicS0+ZGVzdHJ1Y3RfZGF0YShjYnEtPmRkYXRhKTsKLQljYnEtPmRkYXRhID0gTlVMTDsKKwlkLT5jYWxsYmFjayhkLT5jYWxsYmFja19wcml2KTsKKworCWQtPmRlc3RydWN0X2RhdGEoZC0+ZGRhdGEpOworCWQtPmRkYXRhID0gTlVMTDsKKworCWtmcmVlKGQtPmZyZWUpOwogfQogCi1zdGF0aWMgc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpjbl9xdWV1ZV9hbGxvY19jYWxsYmFja19lbnRyeShzdHJ1Y3QgY25fY2FsbGJhY2sgKmNiKQorc3RhdGljIHN0cnVjdCBjbl9jYWxsYmFja19lbnRyeSAqY25fcXVldWVfYWxsb2NfY2FsbGJhY2tfZW50cnkoY2hhciAqbmFtZSwgc3RydWN0IGNiX2lkICppZCwgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICopKQogewogCXN0cnVjdCBjbl9jYWxsYmFja19lbnRyeSAqY2JxOwogCkBAIC01MCw4ICs1MywxMSBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQljYnEtPmNiID0gY2I7Ci0JSU5JVF9XT1JLKCZjYnEtPndvcmssICZjbl9xdWV1ZV93cmFwcGVyLCBjYnEpOworCXNucHJpbnRmKGNicS0+aWQubmFtZSwgc2l6ZW9mKGNicS0+aWQubmFtZSksICIlcyIsIG5hbWUpOworCW1lbWNweSgmY2JxLT5pZC5pZCwgaWQsIHNpemVvZihzdHJ1Y3QgY2JfaWQpKTsKKwljYnEtPmRhdGEuY2FsbGJhY2sgPSBjYWxsYmFjazsKKwkKKwlJTklUX1dPUksoJmNicS0+d29yaywgJmNuX3F1ZXVlX3dyYXBwZXIsICZjYnEtPmRhdGEpOwogCXJldHVybiBjYnE7CiB9CiAKQEAgLTY4LDEyICs3NCwxMiBAQAogCXJldHVybiAoKGkxLT5pZHggPT0gaTItPmlkeCkgJiYgKGkxLT52YWwgPT0gaTItPnZhbCkpOwogfQogCi1pbnQgY25fcXVldWVfYWRkX2NhbGxiYWNrKHN0cnVjdCBjbl9xdWV1ZV9kZXYgKmRldiwgc3RydWN0IGNuX2NhbGxiYWNrICpjYikKK2ludCBjbl9xdWV1ZV9hZGRfY2FsbGJhY2soc3RydWN0IGNuX3F1ZXVlX2RldiAqZGV2LCBjaGFyICpuYW1lLCBzdHJ1Y3QgY2JfaWQgKmlkLCB2b2lkICgqY2FsbGJhY2spKHZvaWQgKikpCiB7CiAJc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpjYnEsICpfX2NicTsKIAlpbnQgZm91bmQgPSAwOwogCi0JY2JxID0gY25fcXVldWVfYWxsb2NfY2FsbGJhY2tfZW50cnkoY2IpOworCWNicSA9IGNuX3F1ZXVlX2FsbG9jX2NhbGxiYWNrX2VudHJ5KG5hbWUsIGlkLCBjYWxsYmFjayk7CiAJaWYgKCFjYnEpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC04Miw3ICs4OCw3IEBACiAKIAlzcGluX2xvY2tfYmgoJmRldi0+cXVldWVfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShfX2NicSwgJmRldi0+cXVldWVfbGlzdCwgY2FsbGJhY2tfZW50cnkpIHsKLQkJaWYgKGNuX2NiX2VxdWFsKCZfX2NicS0+Y2ItPmlkLCAmY2ItPmlkKSkgeworCQlpZiAoY25fY2JfZXF1YWwoJl9fY2JxLT5pZC5pZCwgaWQpKSB7CiAJCQlmb3VuZCA9IDE7CiAJCQlicmVhazsKIAkJfQpAQCAtOTksNyArMTA1LDcgQEAKIAogCWNicS0+bmxzID0gZGV2LT5ubHM7CiAJY2JxLT5zZXEgPSAwOwotCWNicS0+Z3JvdXAgPSBjYnEtPmNiLT5pZC5pZHg7CisJY2JxLT5ncm91cCA9IGNicS0+aWQuaWQuaWR4OwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTEsNyArMTE3LDcgQEAKIAogCXNwaW5fbG9ja19iaCgmZGV2LT5xdWV1ZV9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2JxLCBuLCAmZGV2LT5xdWV1ZV9saXN0LCBjYWxsYmFja19lbnRyeSkgewotCQlpZiAoY25fY2JfZXF1YWwoJmNicS0+Y2ItPmlkLCBpZCkpIHsKKwkJaWYgKGNuX2NiX2VxdWFsKCZjYnEtPmlkLmlkLCBpZCkpIHsKIAkJCWxpc3RfZGVsKCZjYnEtPmNhbGxiYWNrX2VudHJ5KTsKIAkJCWZvdW5kID0gMTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jb25uZWN0b3IvY29ubmVjdG9yLmMgYi9kcml2ZXJzL2Nvbm5lY3Rvci9jb25uZWN0b3IuYwppbmRleCBhYWY2ZDQ2Li41MDU2NzdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nvbm5lY3Rvci9jb25uZWN0b3IuYworKysgYi9kcml2ZXJzL2Nvbm5lY3Rvci9jb25uZWN0b3IuYwpAQCAtNjksNyArNjksNyBAQAogICogYSBuZXcgbWVzc2FnZS4KICAqCiAgKi8KLWludCBjbl9uZXRsaW5rX3NlbmQoc3RydWN0IGNuX21zZyAqbXNnLCB1MzIgX19ncm91cCwgaW50IGdmcF9tYXNrKQoraW50IGNuX25ldGxpbmtfc2VuZChzdHJ1Y3QgY25fbXNnICptc2csIHUzMiBfX2dyb3VwLCBnZnBfdCBnZnBfbWFzaykKIHsKIAlzdHJ1Y3QgY25fY2FsbGJhY2tfZW50cnkgKl9fY2JxOwogCXVuc2lnbmVkIGludCBzaXplOwpAQCAtODQsNyArODQsNyBAQAogCQlzcGluX2xvY2tfYmgoJmRldi0+Y2JkZXYtPnF1ZXVlX2xvY2spOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KF9fY2JxLCAmZGV2LT5jYmRldi0+cXVldWVfbGlzdCwKIAkJCQkgICAgY2FsbGJhY2tfZW50cnkpIHsKLQkJCWlmIChjbl9jYl9lcXVhbCgmX19jYnEtPmNiLT5pZCwgJm1zZy0+aWQpKSB7CisJCQlpZiAoY25fY2JfZXF1YWwoJl9fY2JxLT5pZC5pZCwgJm1zZy0+aWQpKSB7CiAJCQkJZm91bmQgPSAxOwogCQkJCWdyb3VwID0gX19jYnEtPmdyb3VwOwogCQkJfQpAQCAtMTI3LDQyICsxMjcsNTYgQEAKIHsKIAlzdHJ1Y3QgY25fY2FsbGJhY2tfZW50cnkgKl9fY2JxOwogCXN0cnVjdCBjbl9kZXYgKmRldiA9ICZjZGV2OwotCWludCBmb3VuZCA9IDA7CisJaW50IGVyciA9IC1FTk9ERVY7CiAKIAlzcGluX2xvY2tfYmgoJmRldi0+Y2JkZXYtPnF1ZXVlX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoX19jYnEsICZkZXYtPmNiZGV2LT5xdWV1ZV9saXN0LCBjYWxsYmFja19lbnRyeSkgewotCQlpZiAoY25fY2JfZXF1YWwoJl9fY2JxLT5jYi0+aWQsICZtc2ctPmlkKSkgewotCQkJLyoKLQkJCSAqIExldCdzIHNjcmVhbSBpZiB0aGVyZSBpcyBzb21lIG1hZ2ljIGFuZCB0aGUKLQkJCSAqIGRhdGEgd2lsbCBhcnJpdmUgYXN5bmNocm9ub3VzbHkgaGVyZS4KLQkJCSAqIFtpLmUuIG5ldGxpbmsgbWVzc2FnZXMgd2lsbCBiZSBxdWV1ZWRdLgotCQkJICogQWZ0ZXIgdGhlIGZpcnN0IHdhcm5pbmcgSSB3aWxsIGZpeCBpdAotCQkJICogcXVpY2tseSwgYnV0IG5vdyBJIHRoaW5rIGl0IGlzCi0JCQkgKiBpbXBvc3NpYmxlLiAtLXpiciAoMjAwNF8wNF8yNykuCi0JCQkgKi8KKwkJaWYgKGNuX2NiX2VxdWFsKCZfX2NicS0+aWQuaWQsICZtc2ctPmlkKSkgewogCQkJaWYgKGxpa2VseSghdGVzdF9iaXQoMCwgJl9fY2JxLT53b3JrLnBlbmRpbmcpICYmCi0JCQkJCV9fY2JxLT5kZGF0YSA9PSBOVUxMKSkgewotCQkJCV9fY2JxLT5jYi0+cHJpdiA9IG1zZzsKKwkJCQkJX19jYnEtPmRhdGEuZGRhdGEgPT0gTlVMTCkpIHsKKwkJCQlfX2NicS0+ZGF0YS5jYWxsYmFja19wcml2ID0gbXNnOwogCi0JCQkJX19jYnEtPmRkYXRhID0gZGF0YTsKLQkJCQlfX2NicS0+ZGVzdHJ1Y3RfZGF0YSA9IGRlc3RydWN0X2RhdGE7CisJCQkJX19jYnEtPmRhdGEuZGRhdGEgPSBkYXRhOworCQkJCV9fY2JxLT5kYXRhLmRlc3RydWN0X2RhdGEgPSBkZXN0cnVjdF9kYXRhOwogCiAJCQkJaWYgKHF1ZXVlX3dvcmsoZGV2LT5jYmRldi0+Y25fcXVldWUsCiAJCQkJCQkmX19jYnEtPndvcmspKQotCQkJCQlmb3VuZCA9IDE7CisJCQkJCWVyciA9IDA7CiAJCQl9IGVsc2UgewotCQkJCXByaW50aygiJXM6IGNicS0+ZGF0YT0lcCwgIgotCQkJCSAgICAgICAid29yay0+cGVuZGluZz0lMDhseC5cbiIsCi0JCQkJICAgICAgIF9fZnVuY19fLCBfX2NicS0+ZGRhdGEsCi0JCQkJICAgICAgIF9fY2JxLT53b3JrLnBlbmRpbmcpOwotCQkJCVdBUk5fT04oMSk7CisJCQkJc3RydWN0IHdvcmtfc3RydWN0ICp3OworCQkJCXN0cnVjdCBjbl9jYWxsYmFja19kYXRhICpkOworCQkJCQorCQkJCXcgPSBremFsbG9jKHNpemVvZigqdykgKyBzaXplb2YoKmQpLCBHRlBfQVRPTUlDKTsKKwkJCQlpZiAodykgeworCQkJCQlkID0gKHN0cnVjdCBjbl9jYWxsYmFja19kYXRhICopKHcrMSk7CisKKwkJCQkJZC0+Y2FsbGJhY2tfcHJpdiA9IG1zZzsKKwkJCQkJZC0+Y2FsbGJhY2sgPSBfX2NicS0+ZGF0YS5jYWxsYmFjazsKKwkJCQkJZC0+ZGRhdGEgPSBkYXRhOworCQkJCQlkLT5kZXN0cnVjdF9kYXRhID0gZGVzdHJ1Y3RfZGF0YTsKKwkJCQkJZC0+ZnJlZSA9IHc7CisKKwkJCQkJSU5JVF9MSVNUX0hFQUQoJnctPmVudHJ5KTsKKwkJCQkJdy0+cGVuZGluZyA9IDA7CisJCQkJCXctPmZ1bmMgPSAmY25fcXVldWVfd3JhcHBlcjsKKwkJCQkJdy0+ZGF0YSA9IGQ7CisJCQkJCWluaXRfdGltZXIoJnctPnRpbWVyKTsKKwkJCQkJCisJCQkJCWlmIChxdWV1ZV93b3JrKGRldi0+Y2JkZXYtPmNuX3F1ZXVlLCB3KSkKKwkJCQkJCWVyciA9IDA7CisJCQkJCWVsc2UgeworCQkJCQkJa2ZyZWUodyk7CisJCQkJCQllcnIgPSAtRUlOVkFMOworCQkJCQl9CisJCQkJfSBlbHNlCisJCQkJCWVyciA9IC1FTk9NRU07CiAJCQl9CiAJCQlicmVhazsKIAkJfQogCX0KIAlzcGluX3VubG9ja19iaCgmZGV2LT5jYmRldi0+cXVldWVfbG9jayk7CiAKLQlyZXR1cm4gZm91bmQgPyAwIDogLUVOT0RFVjsKKwlyZXR1cm4gZXJyOwogfQogCiAvKgpAQCAtMjkxLDIyICszMDUsMTAgQEAKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBjbl9kZXYgKmRldiA9ICZjZGV2OwotCXN0cnVjdCBjbl9jYWxsYmFjayAqY2I7CiAKLQljYiA9IGt6YWxsb2Moc2l6ZW9mKCpjYiksIEdGUF9LRVJORUwpOwotCWlmICghY2IpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jc2NucHJpbnRmKGNiLT5uYW1lLCBzaXplb2YoY2ItPm5hbWUpLCAiJXMiLCBuYW1lKTsKLQotCW1lbWNweSgmY2ItPmlkLCBpZCwgc2l6ZW9mKGNiLT5pZCkpOwotCWNiLT5jYWxsYmFjayA9IGNhbGxiYWNrOwotCi0JZXJyID0gY25fcXVldWVfYWRkX2NhbGxiYWNrKGRldi0+Y2JkZXYsIGNiKTsKLQlpZiAoZXJyKSB7Ci0JCWtmcmVlKGNiKTsKKwllcnIgPSBjbl9xdWV1ZV9hZGRfY2FsbGJhY2soZGV2LT5jYmRldiwgbmFtZSwgaWQsIGNhbGxiYWNrKTsKKwlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwotCX0KIAogCWNuX25vdGlmeShpZCwgMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZGVsbF9yYnUuYyBiL2RyaXZlcnMvZmlybXdhcmUvZGVsbF9yYnUuYwppbmRleCAzYjg2NWYzLi40ZjRiYTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2RlbGxfcmJ1LmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9kZWxsX3JidS5jCkBAIC01MCw3ICs1MCw3IEBACiBNT0RVTEVfQVVUSE9SKCJBYmhheSBTYWx1bmtlIDxhYmhheV9zYWx1bmtlQGRlbGwuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIHVwZGF0aW5nIEJJT1MgaW1hZ2Ugb24gREVMTCBzeXN0ZW1zIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfVkVSU0lPTigiMS4wIik7CitNT0RVTEVfVkVSU0lPTigiMy4wIik7CiAKICNkZWZpbmUgQklPU19TQ0FOX0xJTUlUIDB4ZmZmZmZmZmYKICNkZWZpbmUgTUFYX0lNQUdFX0xFTkdUSCAxNgpAQCAtNjIsMTQgKzYyLDE2IEBACiAJaW50IGRtYV9hbGxvYzsKIAlzcGlubG9ja190IGxvY2s7CiAJdW5zaWduZWQgbG9uZyBwYWNrZXRfcmVhZF9jb3VudDsKLQl1bnNpZ25lZCBsb25nIHBhY2tldF93cml0ZV9jb3VudDsKIAl1bnNpZ25lZCBsb25nIG51bV9wYWNrZXRzOwogCXVuc2lnbmVkIGxvbmcgcGFja2V0c2l6ZTsKKwl1bnNpZ25lZCBsb25nIGltYWdlc2l6ZTsKKwlpbnQgZW50cnlfY3JlYXRlZDsKIH0gcmJ1X2RhdGE7CiAKLXN0YXRpYyBjaGFyIGltYWdlX3R5cGVbTUFYX0lNQUdFX0xFTkdUSF0gPSAibW9ubyI7Ci1tb2R1bGVfcGFyYW1fc3RyaW5nKGltYWdlX3R5cGUsIGltYWdlX3R5cGUsIHNpemVvZihpbWFnZV90eXBlKSwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGltYWdlX3R5cGUsICJCSU9TIGltYWdlIHR5cGUuIGNob29zZS0gbW9ubyBvciBwYWNrZXQiKTsKK3N0YXRpYyBjaGFyIGltYWdlX3R5cGVbTUFYX0lNQUdFX0xFTkdUSCArIDFdID0gIm1vbm8iOworbW9kdWxlX3BhcmFtX3N0cmluZyhpbWFnZV90eXBlLCBpbWFnZV90eXBlLCBzaXplb2YgKGltYWdlX3R5cGUpLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW1hZ2VfdHlwZSwKKwkiQklPUyBpbWFnZSB0eXBlLiBjaG9vc2UtIG1vbm8gb3IgcGFja2V0IG9yIGluaXQiKTsKIAogc3RydWN0IHBhY2tldF9kYXRhIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CkBAIC04Nyw1NSArODksMTMgQEAKIHN0YXRpYyB2b2lkIGluaXRfcGFja2V0X2hlYWQodm9pZCkKIHsKIAlJTklUX0xJU1RfSEVBRCgmcGFja2V0X2RhdGFfaGVhZC5saXN0KTsKLQlyYnVfZGF0YS5wYWNrZXRfd3JpdGVfY291bnQgPSAwOwogCXJidV9kYXRhLnBhY2tldF9yZWFkX2NvdW50ID0gMDsKIAlyYnVfZGF0YS5udW1fcGFja2V0cyA9IDA7CiAJcmJ1X2RhdGEucGFja2V0c2l6ZSA9IDA7CisJcmJ1X2RhdGEuaW1hZ2VzaXplID0gMDsKIH0KIAotc3RhdGljIGludCBmaWxsX2xhc3RfcGFja2V0KHZvaWQgKmRhdGEsIHNpemVfdCBsZW5ndGgpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcHRlbXBfbGlzdDsKLQlzdHJ1Y3QgcGFja2V0X2RhdGEgKnBhY2tldCA9IE5VTEw7Ci0JaW50IHBhY2tldF9jb3VudCA9IDA7Ci0KLQlwcl9kZWJ1ZygiZmlsbF9sYXN0X3BhY2tldDogZW50cnkgXG4iKTsKLQotCWlmICghcmJ1X2RhdGEubnVtX3BhY2tldHMpIHsKLQkJcHJfZGVidWcoImZpbGxfbGFzdF9wYWNrZXQ6IG51bV9wYWNrZXRzPTBcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlwYWNrZXRfY291bnQgPSByYnVfZGF0YS5udW1fcGFja2V0czsKLQotCXB0ZW1wX2xpc3QgPSAoJnBhY2tldF9kYXRhX2hlYWQubGlzdCktPnByZXY7Ci0KLQlwYWNrZXQgPSBsaXN0X2VudHJ5KHB0ZW1wX2xpc3QsIHN0cnVjdCBwYWNrZXRfZGF0YSwgbGlzdCk7Ci0KLQlpZiAoKHJidV9kYXRhLnBhY2tldF93cml0ZV9jb3VudCArIGxlbmd0aCkgPiByYnVfZGF0YS5wYWNrZXRzaXplKSB7Ci0JCXByX2RlYnVnKCJkZWxsX3JidTolczogcGFja2V0IHNpemUgZGF0YSAiCi0JCQkgIm92ZXJydW5cbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXByX2RlYnVnKCJmaWxsX2xhc3RfcGFja2V0IDogYnVmZmVyID0gJXBcbiIsIHBhY2tldC0+ZGF0YSk7Ci0KLQltZW1jcHkoKHBhY2tldC0+ZGF0YSArIHJidV9kYXRhLnBhY2tldF93cml0ZV9jb3VudCksIGRhdGEsIGxlbmd0aCk7Ci0KLQlpZiAoKHJidV9kYXRhLnBhY2tldF93cml0ZV9jb3VudCArIGxlbmd0aCkgPT0gcmJ1X2RhdGEucGFja2V0c2l6ZSkgewotCQkvKgotCQkgKiB0aGlzIHdhcyB0aGUgbGFzdCBkYXRhIGNodW5rIGluIHRoZSBwYWNrZXQKLQkJICogc28gcmVpbml0aWFsaXplIHRoZSBwYWNrZXQgZGF0YSBjb3VudGVyIHRvIHplcm8KLQkJICovCi0JCXJidV9kYXRhLnBhY2tldF93cml0ZV9jb3VudCA9IDA7Ci0JfSBlbHNlCi0JCXJidV9kYXRhLnBhY2tldF93cml0ZV9jb3VudCArPSBsZW5ndGg7Ci0KLQlwcl9kZWJ1ZygiZmlsbF9sYXN0X3BhY2tldDogZXhpdCBcbiIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGNyZWF0ZV9wYWNrZXQoc2l6ZV90IGxlbmd0aCkKK3N0YXRpYyBpbnQgY3JlYXRlX3BhY2tldCh2b2lkICpkYXRhLCBzaXplX3QgbGVuZ3RoKQogewogCXN0cnVjdCBwYWNrZXRfZGF0YSAqbmV3cGFja2V0OwogCWludCBvcmRlcm51bSA9IDA7CkBAIC0xNDYsMTIgKzEwNiwxNCBAQAogCQlwcl9kZWJ1ZygiY3JlYXRlX3BhY2tldDogcGFja2V0c2l6ZSBub3Qgc3BlY2lmaWVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCXNwaW5fdW5sb2NrKCZyYnVfZGF0YS5sb2NrKTsKKwluZXdwYWNrZXQgPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IHBhY2tldF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJc3Bpbl9sb2NrKCZyYnVfZGF0YS5sb2NrKTsKIAotCW5ld3BhY2tldCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwYWNrZXRfZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghbmV3cGFja2V0KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJkZWxsX3JidTolczogZmFpbGVkIHRvIGFsbG9jYXRlIG5ldyAiCi0JCSAgICAgICAicGFja2V0XG4iLCBfX0ZVTkNUSU9OX18pOworCQkJImRlbGxfcmJ1OiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgbmV3ICIKKwkJCSJwYWNrZXRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTYwLDE1ICsxMjIsMTcgQEAKIAkgKiB0aGVyZSBpcyBubyB1cHBlciBsaW1pdCBvbiBtZW1vcnkKIAkgKiBhZGRyZXNzIGZvciBwYWNrZXRpemVkIG1lY2hhbmlzbQogCSAqLwotCW5ld3BhY2tldC0+ZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLAotCQkJCQkJCSAgICBvcmRlcm51bSk7CisJc3Bpbl91bmxvY2soJnJidV9kYXRhLmxvY2spOworCW5ld3BhY2tldC0+ZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwKKwkJb3JkZXJudW0pOworCXNwaW5fbG9jaygmcmJ1X2RhdGEubG9jayk7CiAKIAlwcl9kZWJ1ZygiY3JlYXRlX3BhY2tldDogbmV3cGFja2V0ICVwXG4iLCBuZXdwYWNrZXQtPmRhdGEpOwogCiAJaWYgKCFuZXdwYWNrZXQtPmRhdGEpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImRlbGxfcmJ1OiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgbmV3ICIKLQkJICAgICAgICJwYWNrZXRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkiZGVsbF9yYnU6JXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBuZXcgIgorCQkJInBhY2tldFxuIiwgX19GVU5DVElPTl9fKTsKIAkJa2ZyZWUobmV3cGFja2V0KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtMTgxLDkgKzE0NSwxMSBAQAogCUlOSVRfTElTVF9IRUFEKCZuZXdwYWNrZXQtPmxpc3QpOwogCWxpc3RfYWRkX3RhaWwoJm5ld3BhY2tldC0+bGlzdCwgJnBhY2tldF9kYXRhX2hlYWQubGlzdCk7CiAJLyoKLQkgKiBwYWNrZXRzIGhhdmUgZml4ZWQgc2l6ZQorCSAqIHBhY2tldHMgbWF5IG5vdCBoYXZlIGZpeGVkIHNpemUKIAkgKi8KLQluZXdwYWNrZXQtPmxlbmd0aCA9IHJidV9kYXRhLnBhY2tldHNpemU7CisJbmV3cGFja2V0LT5sZW5ndGggPSBsZW5ndGg7CisKKwltZW1jcHkobmV3cGFja2V0LT5kYXRhLCBkYXRhLCBsZW5ndGgpOwogCiAJcHJfZGVidWcoImNyZWF0ZV9wYWNrZXQ6IGV4aXQgXG4iKTsKIApAQCAtMTkzLDIwICsxNTksNDMgQEAKIHN0YXRpYyBpbnQgcGFja2V0aXplX2RhdGEodm9pZCAqZGF0YSwgc2l6ZV90IGxlbmd0aCkKIHsKIAlpbnQgcmMgPSAwOwotCi0JaWYgKCFyYnVfZGF0YS5wYWNrZXRfd3JpdGVfY291bnQpIHsKLQkJaWYgKChyYyA9IGNyZWF0ZV9wYWNrZXQobGVuZ3RoKSkpCi0JCQlyZXR1cm4gcmM7CisJaW50IGRvbmUgPSAwOworCWludCBwYWNrZXRfbGVuZ3RoOworCXU4ICp0ZW1wOworCXU4ICplbmQgPSAodTggKikgZGF0YSArIGxlbmd0aDsKKwlwcl9kZWJ1ZygicGFja2V0aXplX2RhdGE6IGRhdGEgbGVuZ3RoICVkXG4iLCBsZW5ndGgpOworCWlmICghcmJ1X2RhdGEucGFja2V0c2l6ZSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiZGVsbF9yYnU6IHBhY2tldHNpemUgbm90IHNwZWNpZmllZFxuIik7CisJCXJldHVybiAtRUlPOwogCX0KLQlpZiAoKHJjID0gZmlsbF9sYXN0X3BhY2tldChkYXRhLCBsZW5ndGgpKSkKLQkJcmV0dXJuIHJjOworCisJdGVtcCA9ICh1OCAqKSBkYXRhOworCisJLyogcGFja2V0aXplIHRoZSBodW5rICovCisJd2hpbGUgKCFkb25lKSB7CisJCWlmICgodGVtcCArIHJidV9kYXRhLnBhY2tldHNpemUpIDwgZW5kKQorCQkJcGFja2V0X2xlbmd0aCA9IHJidV9kYXRhLnBhY2tldHNpemU7CisJCWVsc2UgeworCQkJLyogdGhpcyBpcyB0aGUgbGFzdCBwYWNrZXQgKi8KKwkJCXBhY2tldF9sZW5ndGggPSBlbmQgLSB0ZW1wOworCQkJZG9uZSA9IDE7CisJCX0KKworCQlpZiAoKHJjID0gY3JlYXRlX3BhY2tldCh0ZW1wLCBwYWNrZXRfbGVuZ3RoKSkpCisJCQlyZXR1cm4gcmM7CisKKwkJcHJfZGVidWcoIiVsdTolbHVcbiIsIHRlbXAsIChlbmQgLSB0ZW1wKSk7CisJCXRlbXAgKz0gcGFja2V0X2xlbmd0aDsKKwl9CisKKwlyYnVfZGF0YS5pbWFnZXNpemUgPSBsZW5ndGg7CiAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQKLWRvX3BhY2tldF9yZWFkKGNoYXIgKmRhdGEsIHN0cnVjdCBsaXN0X2hlYWQgKnB0ZW1wX2xpc3QsCi0JICAgICAgIGludCBsZW5ndGgsIGludCBieXRlc19yZWFkLCBpbnQgKmxpc3RfcmVhZF9jb3VudCkKK3N0YXRpYyBpbnQgZG9fcGFja2V0X3JlYWQoY2hhciAqZGF0YSwgc3RydWN0IGxpc3RfaGVhZCAqcHRlbXBfbGlzdCwKKwlpbnQgbGVuZ3RoLCBpbnQgYnl0ZXNfcmVhZCwgaW50ICpsaXN0X3JlYWRfY291bnQpCiB7CiAJdm9pZCAqcHRlbXBfYnVmOwogCXN0cnVjdCBwYWNrZXRfZGF0YSAqbmV3cGFja2V0ID0gTlVMTDsKQEAgLTI1OCw4ICsyNDcsNyBAQAogCXB0ZW1wX2xpc3QgPSAoJnBhY2tldF9kYXRhX2hlYWQubGlzdCktPm5leHQ7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KHB0ZW1wX2xpc3QpKSB7CiAJCWJ5dGVzX2NvcGllZCA9IGRvX3BhY2tldF9yZWFkKHBkZXN0LCBwdGVtcF9saXN0LAotCQkJCQkgICAgICByZW1haW5pbmdfYnl0ZXMsIGJ5dGVzX3JlYWQsCi0JCQkJCSAgICAgICZ0ZW1wX2NvdW50KTsKKwkJCXJlbWFpbmluZ19ieXRlcywgYnl0ZXNfcmVhZCwgJnRlbXBfY291bnQpOwogCQlyZW1haW5pbmdfYnl0ZXMgLT0gYnl0ZXNfY29waWVkOwogCQlieXRlc19yZWFkICs9IGJ5dGVzX2NvcGllZDsKIAkJcGRlc3QgKz0gYnl0ZXNfY29waWVkOwpAQCAtMjg3LDcgKzI3NSw3IEBACiAJcHRlbXBfbGlzdCA9ICgmcGFja2V0X2RhdGFfaGVhZC5saXN0KS0+bmV4dDsKIAl3aGlsZSAoIWxpc3RfZW1wdHkocHRlbXBfbGlzdCkpIHsKIAkJbmV3cGFja2V0ID0KLQkJICAgIGxpc3RfZW50cnkocHRlbXBfbGlzdCwgc3RydWN0IHBhY2tldF9kYXRhLCBsaXN0KTsKKwkJCWxpc3RfZW50cnkocHRlbXBfbGlzdCwgc3RydWN0IHBhY2tldF9kYXRhLCBsaXN0KTsKIAkJcG5leHRfbGlzdCA9IHB0ZW1wX2xpc3QtPm5leHQ7CiAJCWxpc3RfZGVsKHB0ZW1wX2xpc3QpOwogCQlwdGVtcF9saXN0ID0gcG5leHRfbGlzdDsKQEAgLTI5NiwxNCArMjg0LDEzIEBACiAJCSAqIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3RhbGUgUkJVIHBhY2tldHMgbGVmdCBpbiBtZW1vcnkKIAkJICovCiAJCW1lbXNldChuZXdwYWNrZXQtPmRhdGEsIDAsIHJidV9kYXRhLnBhY2tldHNpemUpOwotCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKW5ld3BhY2tldC0+ZGF0YSwKLQkJCSAgIG5ld3BhY2tldC0+b3JkZXJudW0pOworCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBuZXdwYWNrZXQtPmRhdGEsCisJCQluZXdwYWNrZXQtPm9yZGVybnVtKTsKIAkJa2ZyZWUobmV3cGFja2V0KTsKIAl9Ci0JcmJ1X2RhdGEucGFja2V0X3dyaXRlX2NvdW50ID0gMDsKIAlyYnVfZGF0YS5wYWNrZXRfcmVhZF9jb3VudCA9IDA7CiAJcmJ1X2RhdGEubnVtX3BhY2tldHMgPSAwOwotCXJidV9kYXRhLnBhY2tldHNpemUgPSAwOworCXJidV9kYXRhLmltYWdlc2l6ZSA9IDA7CiB9CiAKIC8qCkBAIC0zMTksMTQgKzMwNiwxMyBAQAogCSAqIEJJT1MgaW1hZ2UgY29waWVkIGluIG1lbW9yeS4KIAkgKi8KIAltZW1zZXQocmJ1X2RhdGEuaW1hZ2VfdXBkYXRlX2J1ZmZlciwgMCwKLQkgICAgICAgcmJ1X2RhdGEuaW1hZ2VfdXBkYXRlX2J1ZmZlcl9zaXplKTsKKwkJcmJ1X2RhdGEuaW1hZ2VfdXBkYXRlX2J1ZmZlcl9zaXplKTsKIAlpZiAocmJ1X2RhdGEuZG1hX2FsbG9jID09IDEpCiAJCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIHJidV9kYXRhLmJpb3NfaW1hZ2Vfc2l6ZSwKLQkJCQkgIHJidV9kYXRhLmltYWdlX3VwZGF0ZV9idWZmZXIsCi0JCQkJICBkZWxsX3JidV9kbWFhZGRyKTsKKwkJCXJidV9kYXRhLmltYWdlX3VwZGF0ZV9idWZmZXIsIGRlbGxfcmJ1X2RtYWFkZHIpOwogCWVsc2UKLQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylyYnVfZGF0YS5pbWFnZV91cGRhdGVfYnVmZmVyLAotCQkJICAgcmJ1X2RhdGEuaW1hZ2VfdXBkYXRlX29yZGVybnVtKTsKKwkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgcmJ1X2RhdGEuaW1hZ2VfdXBkYXRlX2J1ZmZlciwKKwkJCXJidV9kYXRhLmltYWdlX3VwZGF0ZV9vcmRlcm51bSk7CiAKIAkvKgogCSAqIFJlLWluaXRpYWxpemUgdGhlIHJidV9kYXRhIHZhcmlhYmxlcyBhZnRlciBhIGZyZWUKQEAgLTM2Niw3ICszNTIsNyBAQAogCQkgKi8KIAkJaWYgKChzaXplICE9IDApICYmIChyYnVfZGF0YS5pbWFnZV91cGRhdGVfYnVmZmVyID09IE5VTEwpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImRlbGxfcmJ1OiVzOiBjb3JydXB0aW9uICIKLQkJCSAgICAgICAiY2hlY2sgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJCSJjaGVjayBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQkvKgpAQCAtMzg1LDE3ICszNzEsMTYgQEAKIAogCW9yZGVybnVtID0gZ2V0X29yZGVyKHNpemUpOwogCWltYWdlX3VwZGF0ZV9idWZmZXIgPQotCSAgICAodW5zaWduZWQgY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgb3JkZXJudW0pOworCQkodW5zaWduZWQgY2hhciAqKSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIG9yZGVybnVtKTsKIAogCWltZ19idWZfcGh5c19hZGRyID0KLQkgICAgKHVuc2lnbmVkIGxvbmcpdmlydF90b19waHlzKGltYWdlX3VwZGF0ZV9idWZmZXIpOworCQkodW5zaWduZWQgbG9uZykgdmlydF90b19waHlzKGltYWdlX3VwZGF0ZV9idWZmZXIpOwogCiAJaWYgKGltZ19idWZfcGh5c19hZGRyID4gQklPU19TQ0FOX0xJTUlUKSB7Ci0JCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpaW1hZ2VfdXBkYXRlX2J1ZmZlciwgb3JkZXJudW0pOworCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBpbWFnZV91cGRhdGVfYnVmZmVyLCBvcmRlcm51bSk7CiAJCW9yZGVybnVtID0gLTE7CiAJCWltYWdlX3VwZGF0ZV9idWZmZXIgPSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgc2l6ZSwKLQkJCQkJCQkgJmRlbGxfcmJ1X2RtYWFkZHIsCi0JCQkJCQkJIEdGUF9LRVJORUwpOworCQkJJmRlbGxfcmJ1X2RtYWFkZHIsIEdGUF9LRVJORUwpOwogCQlkbWFfYWxsb2MgPSAxOwogCX0KIApAQCAtNDA1LDEzICszOTAsMTMgQEAKIAkJcmJ1X2RhdGEuaW1hZ2VfdXBkYXRlX2J1ZmZlciA9IGltYWdlX3VwZGF0ZV9idWZmZXI7CiAJCXJidV9kYXRhLmltYWdlX3VwZGF0ZV9idWZmZXJfc2l6ZSA9IHNpemU7CiAJCXJidV9kYXRhLmJpb3NfaW1hZ2Vfc2l6ZSA9Ci0JCSAgICByYnVfZGF0YS5pbWFnZV91cGRhdGVfYnVmZmVyX3NpemU7CisJCQlyYnVfZGF0YS5pbWFnZV91cGRhdGVfYnVmZmVyX3NpemU7CiAJCXJidV9kYXRhLmltYWdlX3VwZGF0ZV9vcmRlcm51bSA9IG9yZGVybnVtOwogCQlyYnVfZGF0YS5kbWFfYWxsb2MgPSBkbWFfYWxsb2M7CiAJCXJjID0gMDsKIAl9IGVsc2UgewogCQlwcl9kZWJ1ZygiTm90IGVub3VnaCBtZW1vcnkgZm9yIGltYWdlIHVwZGF0ZToiCi0JCQkgInNpemUgPSAlbGRcbiIsIHNpemUpOworCQkJInNpemUgPSAlbGRcbiIsIHNpemUpOwogCQlyYyA9IC1FTk9NRU07CiAJfQogCkBAIC00MjQsNyArNDA5LDYgQEAKIAlzaXplX3QgYnl0ZXNfbGVmdDsKIAlzaXplX3QgZGF0YV9sZW5ndGg7CiAJY2hhciAqcHRlbXBCdWYgPSBidWZmZXI7Ci0JdW5zaWduZWQgbG9uZyBpbWFnZXNpemU7CiAKIAkvKiBjaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBzb21ldGhpbmcgdG8gcmV0dXJuICovCiAJaWYgKHJidV9kYXRhLm51bV9wYWNrZXRzID09IDApIHsKQEAgLTQzMywyMiArNDE3LDIwIEBACiAJCWdvdG8gcmVhZF9yYnVfZGF0YV9leGl0OwogCX0KIAotCWltYWdlc2l6ZSA9IHJidV9kYXRhLm51bV9wYWNrZXRzICogcmJ1X2RhdGEucGFja2V0c2l6ZTsKLQotCWlmIChwb3MgPiBpbWFnZXNpemUpIHsKKwlpZiAocG9zID4gcmJ1X2RhdGEuaW1hZ2VzaXplKSB7CiAJCXJldHZhbCA9IDA7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImRlbGxfcmJ1OnJlYWRfcGFja2V0X2RhdGE6ICIKLQkJICAgICAgICJkYXRhIHVuZGVycnVuXG4iKTsKKwkJCSJkYXRhIHVuZGVycnVuXG4iKTsKIAkJZ290byByZWFkX3JidV9kYXRhX2V4aXQ7CiAJfQogCi0JYnl0ZXNfbGVmdCA9IGltYWdlc2l6ZSAtIHBvczsKKwlieXRlc19sZWZ0ID0gcmJ1X2RhdGEuaW1hZ2VzaXplIC0gcG9zOwogCWRhdGFfbGVuZ3RoID0gbWluKGJ5dGVzX2xlZnQsIGNvdW50KTsKIAogCWlmICgocmV0dmFsID0gcGFja2V0X3JlYWRfbGlzdChwdGVtcEJ1ZiwgJmRhdGFfbGVuZ3RoKSkgPCAwKQogCQlnb3RvIHJlYWRfcmJ1X2RhdGFfZXhpdDsKIAotCWlmICgocG9zICsgY291bnQpID4gaW1hZ2VzaXplKSB7CisJaWYgKChwb3MgKyBjb3VudCkgPiByYnVfZGF0YS5pbWFnZXNpemUpIHsKIAkJcmJ1X2RhdGEucGFja2V0X3JlYWRfY291bnQgPSAwOwogCQkvKiB0aGlzIHdhcyB0aGUgbGFzdCBjb3B5ICovCiAJCXJldHZhbCA9IGJ5dGVzX2xlZnQ7CkBAIC00NjgsMTEgKzQ1MCwxMSBAQAogCiAJLyogY2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgc29tZXRoaW5nIHRvIHJldHVybiAqLwogCWlmICgocmJ1X2RhdGEuaW1hZ2VfdXBkYXRlX2J1ZmZlciA9PSBOVUxMKSB8fAotCSAgICAocmJ1X2RhdGEuYmlvc19pbWFnZV9zaXplID09IDApKSB7CisJCShyYnVfZGF0YS5iaW9zX2ltYWdlX3NpemUgPT0gMCkpIHsKIAkJcHJfZGVidWcoInJlYWRfcmJ1X2RhdGFfbW9ubzogaW1hZ2VfdXBkYXRlX2J1ZmZlciAlcCAsIgotCQkJICJiaW9zX2ltYWdlX3NpemUgJWx1XG4iLAotCQkJIHJidV9kYXRhLmltYWdlX3VwZGF0ZV9idWZmZXIsCi0JCQkgcmJ1X2RhdGEuYmlvc19pbWFnZV9zaXplKTsKKwkJCSJiaW9zX2ltYWdlX3NpemUgJWx1XG4iLAorCQkJcmJ1X2RhdGEuaW1hZ2VfdXBkYXRlX2J1ZmZlciwKKwkJCXJidV9kYXRhLmJpb3NfaW1hZ2Vfc2l6ZSk7CiAJCXJldF9jb3VudCA9IC1FTk9NRU07CiAJCWdvdG8gcmVhZF9yYnVfZGF0YV9leGl0OwogCX0KQEAgLTQ5Nyw4ICs0NzksOCBAQAogCXJldHVybiByZXRfY291bnQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90Ci1yZWFkX3JidV9kYXRhKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBjaGFyICpidWZmZXIsIGxvZmZfdCBwb3MsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBzc2l6ZV90IHJlYWRfcmJ1X2RhdGEoc3RydWN0IGtvYmplY3QgKmtvYmosIGNoYXIgKmJ1ZmZlciwKKwlsb2ZmX3QgcG9zLCBzaXplX3QgY291bnQpCiB7CiAJc3NpemVfdCByZXRfY291bnQgPSAwOwogCkBAIC01MTUsOSArNDk3LDQ5IEBACiAJcmV0dXJuIHJldF9jb3VudDsKIH0KIAotc3RhdGljIHNzaXplX3QKLXJlYWRfcmJ1X2ltYWdlX3R5cGUoc3RydWN0IGtvYmplY3QgKmtvYmosIGNoYXIgKmJ1ZmZlciwgbG9mZl90IHBvcywKLQkJICAgIHNpemVfdCBjb3VudCkKK3N0YXRpYyB2b2lkIGNhbGxiYWNrZm5fcmJ1KGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKmNvbnRleHQpCit7CisJaW50IHJjID0gMDsKKworCWlmICghZncgfHwgIWZ3LT5zaXplKSB7CisJCXJidV9kYXRhLmVudHJ5X2NyZWF0ZWQgPSAwOworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrKCZyYnVfZGF0YS5sb2NrKTsKKwlpZiAoIXN0cmNtcChpbWFnZV90eXBlLCAibW9ubyIpKSB7CisJCWlmICghaW1nX3VwZGF0ZV9yZWFsbG9jKGZ3LT5zaXplKSkKKwkJCW1lbWNweShyYnVfZGF0YS5pbWFnZV91cGRhdGVfYnVmZmVyLAorCQkJCWZ3LT5kYXRhLCBmdy0+c2l6ZSk7CisJfSBlbHNlIGlmICghc3RyY21wKGltYWdlX3R5cGUsICJwYWNrZXQiKSkgeworCQkvKgorCQkgKiB3ZSBuZWVkIHRvIGZyZWUgcHJldmlvdXMgcGFja2V0cyBpZiBhCisJCSAqIG5ldyBodW5rIG9mIHBhY2tldHMgbmVlZHMgdG8gYmUgZG93bmxvYWRlZAorCQkgKi8KKwkJcGFja2V0X2VtcHR5X2xpc3QoKTsKKwkJaWYgKHBhY2tldGl6ZV9kYXRhKGZ3LT5kYXRhLCBmdy0+c2l6ZSkpCisJCQkvKiBJbmNhc2Ugc29tZXRoaW5nIGdvZXMgd3Jvbmcgd2hlbiB3ZSBhcmUKKwkJCSAqIGluIG1pZGRsZSBvZiBwYWNrZXRpemluZyB0aGUgZGF0YSwgd2UKKwkJCSAqIG5lZWQgdG8gZnJlZSB1cCB3aGF0ZXZlciBwYWNrZXRzIG1pZ2h0CisJCQkgKiBoYXZlIGJlZW4gY3JlYXRlZCBiZWZvcmUgd2UgcXVpdC4KKwkJCSAqLworCQkJcGFja2V0X2VtcHR5X2xpc3QoKTsKKwl9IGVsc2UKKwkJcHJfZGVidWcoImludmFsaWQgaW1hZ2UgdHlwZSBzcGVjaWZpZWQuXG4iKTsKKwlzcGluX3VubG9jaygmcmJ1X2RhdGEubG9jayk7CisKKwlyYyA9IHJlcXVlc3RfZmlybXdhcmVfbm93YWl0KFRISVNfTU9EVUxFLCBGV19BQ1RJT05fTk9IT1RQTFVHLAorCQkiZGVsbF9yYnUiLCAmcmJ1X2RldmljZS0+ZGV2LCAmY29udGV4dCwgY2FsbGJhY2tmbl9yYnUpOworCWlmIChyYykKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiZGVsbF9yYnU6JXMgcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQgZmFpbGVkIgorCQkJIiAlZFxuIiwgX19GVU5DVElPTl9fLCByYyk7CisJZWxzZQorCQlyYnVfZGF0YS5lbnRyeV9jcmVhdGVkID0gMTsKK30KKworc3RhdGljIHNzaXplX3QgcmVhZF9yYnVfaW1hZ2VfdHlwZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgY2hhciAqYnVmZmVyLAorCWxvZmZfdCBwb3MsIHNpemVfdCBjb3VudCkKIHsKIAlpbnQgc2l6ZSA9IDA7CiAJaWYgKCFwb3MpCkBAIC01MjUsMjcgKzU0Nyw5MCBAQAogCXJldHVybiBzaXplOwogfQogCi1zdGF0aWMgc3NpemVfdAotd3JpdGVfcmJ1X2ltYWdlX3R5cGUoc3RydWN0IGtvYmplY3QgKmtvYmosIGNoYXIgKmJ1ZmZlciwgbG9mZl90IHBvcywKLQkJICAgICBzaXplX3QgY291bnQpCitzdGF0aWMgc3NpemVfdCB3cml0ZV9yYnVfaW1hZ2VfdHlwZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgY2hhciAqYnVmZmVyLAorCWxvZmZfdCBwb3MsIHNpemVfdCBjb3VudCkKIHsKIAlpbnQgcmMgPSBjb3VudDsKKwlpbnQgcmVxX2Zpcm1fcmMgPSAwOworCWludCBpOwogCXNwaW5fbG9jaygmcmJ1X2RhdGEubG9jayk7CisJLyoKKwkgKiBGaW5kIHRoZSBmaXJzdCBuZXdsaW5lIG9yIHNwYWNlCisJICovCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpCisJCWlmIChidWZmZXJbaV0gPT0gJ1xuJyB8fCBidWZmZXJbaV0gPT0gJyAnKSB7CisJCQlidWZmZXJbaV0gPSAnXDAnOworCQkJYnJlYWs7CisJCX0KKwlpZiAoaSA9PSBjb3VudCkKKwkJYnVmZmVyW2NvdW50XSA9ICdcMCc7CiAKLQlpZiAoc3RybGVuKGJ1ZmZlcikgPCBNQVhfSU1BR0VfTEVOR1RIKQotCQlzc2NhbmYoYnVmZmVyLCAiJXMiLCBpbWFnZV90eXBlKTsKLQllbHNlCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgImRlbGxfcmJ1OiBpbWFnZV90eXBlIGlzIGludmFsaWQiCi0JCSAgICAgICAibWF4IGNoYXJzID0gJWQsIFxuIGluY29taW5nIHN0ci0tJXMtLSBcbiIsCi0JCSAgICAgICBNQVhfSU1BR0VfTEVOR1RILCBidWZmZXIpOworCWlmIChzdHJzdHIoYnVmZmVyLCAibW9ubyIpKQorCQlzdHJjcHkoaW1hZ2VfdHlwZSwgIm1vbm8iKTsKKwllbHNlIGlmIChzdHJzdHIoYnVmZmVyLCAicGFja2V0IikpCisJCXN0cmNweShpbWFnZV90eXBlLCAicGFja2V0Iik7CisJZWxzZSBpZiAoc3Ryc3RyKGJ1ZmZlciwgImluaXQiKSkgeworCQkvKgorCQkgKiBJZiBkdWUgdG8gdGhlIHVzZXIgZXJyb3IgdGhlIGRyaXZlciBnZXRzIGluIGEgYmFkCisJCSAqIHN0YXRlIHdoZXJlIGV2ZW4gdGhvdWdoIGl0IGlzIGxvYWRlZCAsIHRoZQorCQkgKiAvc3lzL2NsYXNzL2Zpcm13YXJlL2RlbGxfcmJ1IGVudHJpZXMgYXJlIG1pc3NpbmcuCisJCSAqIHRvIGNvdmVyIHRoaXMgc2l0dWF0aW9uIHRoZSB1c2VyIGNhbiByZWNyZWF0ZSBlbnRyaWVzCisJCSAqIGJ5IHdyaXRpbmcgaW5pdCB0byBpbWFnZV90eXBlLgorCQkgKi8KKwkJaWYgKCFyYnVfZGF0YS5lbnRyeV9jcmVhdGVkKSB7CisJCQlzcGluX3VubG9jaygmcmJ1X2RhdGEubG9jayk7CisJCQlyZXFfZmlybV9yYyA9IHJlcXVlc3RfZmlybXdhcmVfbm93YWl0KFRISVNfTU9EVUxFLAorCQkJCUZXX0FDVElPTl9OT0hPVFBMVUcsICJkZWxsX3JidSIsCisJCQkJJnJidV9kZXZpY2UtPmRldiwgJmNvbnRleHQsCisJCQkJY2FsbGJhY2tmbl9yYnUpOworCQkJaWYgKHJlcV9maXJtX3JjKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCSJkZWxsX3JidTolcyByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdCIKKwkJCQkJIiBmYWlsZWQgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmMpOworCQkJCXJjID0gLUVJTzsKKwkJCX0gZWxzZQorCQkJCXJidV9kYXRhLmVudHJ5X2NyZWF0ZWQgPSAxOworCisJCQlzcGluX2xvY2soJnJidV9kYXRhLmxvY2spOworCQl9CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiZGVsbF9yYnU6IGltYWdlX3R5cGUgaXMgaW52YWxpZFxuIik7CisJCXNwaW5fdW5sb2NrKCZyYnVfZGF0YS5sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJLyogd2UgbXVzdCBmcmVlIGFsbCBwcmV2aW91cyBhbGxvY2F0aW9ucyAqLwogCXBhY2tldF9lbXB0eV9saXN0KCk7CiAJaW1nX3VwZGF0ZV9mcmVlKCk7CisJc3Bpbl91bmxvY2soJnJidV9kYXRhLmxvY2spOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgc3NpemVfdCByZWFkX3JidV9wYWNrZXRfc2l6ZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgY2hhciAqYnVmZmVyLAorCWxvZmZfdCBwb3MsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgc2l6ZSA9IDA7CisJaWYgKCFwb3MpIHsKKwkJc3Bpbl9sb2NrKCZyYnVfZGF0YS5sb2NrKTsKKwkJc2l6ZSA9IHNwcmludGYoYnVmZmVyLCAiJWx1XG4iLCByYnVfZGF0YS5wYWNrZXRzaXplKTsKKwkJc3Bpbl91bmxvY2soJnJidV9kYXRhLmxvY2spOworCX0KKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIHNzaXplX3Qgd3JpdGVfcmJ1X3BhY2tldF9zaXplKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBjaGFyICpidWZmZXIsCisJbG9mZl90IHBvcywgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgdGVtcDsKKwlzcGluX2xvY2soJnJidV9kYXRhLmxvY2spOworCXBhY2tldF9lbXB0eV9saXN0KCk7CisJc3NjYW5mKGJ1ZmZlciwgIiVsdSIsICZ0ZW1wKTsKKwlpZiAodGVtcCA8IDB4ZmZmZmZmZmYpCisJCXJidV9kYXRhLnBhY2tldHNpemUgPSB0ZW1wOwogCiAJc3Bpbl91bmxvY2soJnJidV9kYXRhLmxvY2spOwotCXJldHVybiByYzsKLQorCXJldHVybiBjb3VudDsKIH0KIAogc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIHJidV9kYXRhX2F0dHIgPSB7CkBAIC01NTksMzggKzY0NCwxMSBAQAogCS53cml0ZSA9IHdyaXRlX3JidV9pbWFnZV90eXBlLAogfTsKIAotc3RhdGljIHZvaWQgY2FsbGJhY2tmbl9yYnUoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgdm9pZCAqY29udGV4dCkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFmdyB8fCAhZnctPnNpemUpCi0JCXJldHVybjsKLQotCXNwaW5fbG9jaygmcmJ1X2RhdGEubG9jayk7Ci0JaWYgKCFzdHJjbXAoaW1hZ2VfdHlwZSwgIm1vbm8iKSkgewotCQlpZiAoIWltZ191cGRhdGVfcmVhbGxvYyhmdy0+c2l6ZSkpCi0JCQltZW1jcHkocmJ1X2RhdGEuaW1hZ2VfdXBkYXRlX2J1ZmZlciwKLQkJCSAgICAgICBmdy0+ZGF0YSwgZnctPnNpemUpOwotCX0gZWxzZSBpZiAoIXN0cmNtcChpbWFnZV90eXBlLCAicGFja2V0IikpIHsKLQkJaWYgKCFyYnVfZGF0YS5wYWNrZXRzaXplKQotCQkJcmJ1X2RhdGEucGFja2V0c2l6ZSA9IGZ3LT5zaXplOwotCQllbHNlIGlmIChyYnVfZGF0YS5wYWNrZXRzaXplICE9IGZ3LT5zaXplKSB7Ci0JCQlwYWNrZXRfZW1wdHlfbGlzdCgpOwotCQkJcmJ1X2RhdGEucGFja2V0c2l6ZSA9IGZ3LT5zaXplOwotCQl9Ci0JCXBhY2tldGl6ZV9kYXRhKGZ3LT5kYXRhLCBmdy0+c2l6ZSk7Ci0JfSBlbHNlCi0JCXByX2RlYnVnKCJpbnZhbGlkIGltYWdlIHR5cGUgc3BlY2lmaWVkLlxuIik7Ci0Jc3Bpbl91bmxvY2soJnJidV9kYXRhLmxvY2spOwotCi0JcmMgPSByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdChUSElTX01PRFVMRSwgRldfQUNUSU9OX05PSE9UUExVRywKLQkJCQkgICAgICJkZWxsX3JidSIsICZyYnVfZGV2aWNlLT5kZXYsCi0JCQkJICAgICAmY29udGV4dCwgY2FsbGJhY2tmbl9yYnUpOwotCWlmIChyYykKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiZGVsbF9yYnU6JXMgcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQgZmFpbGVkIgotCQkgICAgICAgIiAlZFxuIiwgX19GVU5DVElPTl9fLCByYyk7Ci19CitzdGF0aWMgc3RydWN0IGJpbl9hdHRyaWJ1dGUgcmJ1X3BhY2tldF9zaXplX2F0dHIgPSB7CisJLmF0dHIgPSB7Lm5hbWUgPSAicGFja2V0X3NpemUiLC5vd25lciA9IFRISVNfTU9EVUxFLC5tb2RlID0gMDY0NH0sCisJLnJlYWQgPSByZWFkX3JidV9wYWNrZXRfc2l6ZSwKKwkud3JpdGUgPSB3cml0ZV9yYnVfcGFja2V0X3NpemUsCit9OwogCiBzdGF0aWMgaW50IF9faW5pdCBkY2RyYnVfaW5pdCh2b2lkKQogewpAQCAtNTk5LDIzICs2NTcsMjYgQEAKIAogCWluaXRfcGFja2V0X2hlYWQoKTsKIAlyYnVfZGV2aWNlID0KLQkgICAgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgiZGVsbF9yYnUiLCAtMSwgTlVMTCwgMCk7CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImRlbGxfcmJ1IiwgLTEsIE5VTEwsIDApOwogCWlmICghcmJ1X2RldmljZSkgewogCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJkZWxsX3JidTolczpwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlICIKLQkJICAgICAgICJmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkiZGVsbF9yYnU6JXM6cGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSAiCisJCQkiZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlzeXNmc19jcmVhdGVfYmluX2ZpbGUoJnJidV9kZXZpY2UtPmRldi5rb2JqLCAmcmJ1X2RhdGFfYXR0cik7CiAJc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZyYnVfZGV2aWNlLT5kZXYua29iaiwgJnJidV9pbWFnZV90eXBlX2F0dHIpOworCXN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmcmJ1X2RldmljZS0+ZGV2LmtvYmosCisJCSZyYnVfcGFja2V0X3NpemVfYXR0cik7CiAKIAlyYyA9IHJlcXVlc3RfZmlybXdhcmVfbm93YWl0KFRISVNfTU9EVUxFLCBGV19BQ1RJT05fTk9IT1RQTFVHLAotCQkJCSAgICAgImRlbGxfcmJ1IiwgJnJidV9kZXZpY2UtPmRldiwKLQkJCQkgICAgICZjb250ZXh0LCBjYWxsYmFja2ZuX3JidSk7CisJCSJkZWxsX3JidSIsICZyYnVfZGV2aWNlLT5kZXYsICZjb250ZXh0LCBjYWxsYmFja2ZuX3JidSk7CiAJaWYgKHJjKQogCQlwcmludGsoS0VSTl9FUlIgImRlbGxfcmJ1OiVzOnJlcXVlc3RfZmlybXdhcmVfbm93YWl0IgotCQkgICAgICAgIiBmYWlsZWQgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmMpOworCQkJIiBmYWlsZWQgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmMpOworCWVsc2UKKwkJcmJ1X2RhdGEuZW50cnlfY3JlYXRlZCA9IDE7CiAKIAlyZXR1cm4gcmM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwppbmRleCA3ZTcyZTkyLi5kYjM1OGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL0tjb25maWcKKysrIGIvZHJpdmVycy9od21vbi9LY29uZmlnCkBAIC00MTgsMTIgKzQxOCwxMSBAQAogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBJQk0gSGFyZCBEcml2ZSBBY3RpdmUgUHJvdGVjdGlvbgogCSAgU3lzdGVtIChoZGFwcyksIHdoaWNoIHByb3ZpZGVzIGFuIGFjY2VsZXJvbWV0ZXIgYW5kIG90aGVyIG1pc2MuIGRhdGEuCi0JICBTdXBwb3J0ZWQgbGFwdG9wcyBpbmNsdWRlIHRoZSBJQk0gVGhpbmtQYWQgVDQxLCBUNDIsIFQ0MywgYW5kIFI1MS4KLQkgIFRoZSBhY2NlbGVyb21ldGVyIGRhdGEgaXMgcmVhZGFibGUgdmlhIHN5c2ZzLgorCSAgVGhpbmtQYWRzIHN0YXJ0aW5nIHdpdGggdGhlIFI1MCwgVDQxLCBhbmQgWDQwIGFyZSBzdXBwb3J0ZWQuICBUaGUKKwkgIGFjY2VsZXJvbWV0ZXIgZGF0YSBpcyByZWFkYWJsZSB2aWEgc3lzZnMuCiAKLQkgIFRoaXMgZHJpdmVyIGFsc28gcHJvdmlkZXMgYW4gaW5wdXQgY2xhc3MgZGV2aWNlLCBhbGxvd2luZyB0aGUKLQkgIGxhcHRvcCB0byBhY3QgYXMgYSBwaW5iYWxsIG1hY2hpbmUtZXNxdWUgbW91c2UuICBUaGlzIGlzIG9mZiBieQotCSAgZGVmYXVsdCBidXQgZW5hYmxlZCB2aWEgc3lzZnMgb3IgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgIm1vdXNlZGV2Ii4KKwkgIFRoaXMgZHJpdmVyIGFsc28gcHJvdmlkZXMgYW4gYWJzb2x1dGUgaW5wdXQgY2xhc3MgZGV2aWNlLCBhbGxvd2luZworCSAgdGhlIGxhcHRvcCB0byBhY3QgYXMgYSBwaW5iYWxsIG1hY2hpbmUtZXNxdWUgam95c3RpY2suCiAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYW4gYXBwbGljYWJsZSBsYXB0b3AgYW5kIHdhbnQgdG8gZXhwZXJpZW5jZQogCSAgdGhlIGF3ZXNvbWUgcG93ZXIgb2YgaGRhcHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2hkYXBzLmMgYi9kcml2ZXJzL2h3bW9uL2hkYXBzLmMKaW5kZXggZWFlYmZjMS4uN2YwMTA3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9oZGFwcy5jCisrKyBiL2RyaXZlcnMvaHdtb24vaGRhcHMuYwpAQCAtNCwxMSArNCwxMSBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IFJvYmVydCBMb3ZlIDxybWxAbm92ZWxsLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwNSBKZXNwZXIgSnVobCA8amVzcGVyLmp1aGxAZ21haWwuY29tPgogICoKLSAqIFRoZSBIYXJkRGlzayBBY3RpdmUgUHJvdGVjdGlvbiBTeXN0ZW0gKGhkYXBzKSBpcyBwcmVzZW50IGluIHRoZSBJQk0gVGhpbmtQYWQKLSAqIFQ0MSwgVDQyLCBUNDMsIFI1MSwgYW5kIFg0MCwgYXQgbGVhc3QuICBJdCBwcm92aWRlcyBhIGJhc2ljIHR3by1heGlzCisgKiBUaGUgSGFyZERpc2sgQWN0aXZlIFByb3RlY3Rpb24gU3lzdGVtIChoZGFwcykgaXMgcHJlc2VudCBpbiBJQk0gVGhpbmtQYWRzCisgKiBzdGFydGluZyB3aXRoIHRoZSBSNDAsIFQ0MSwgYW5kIFg0MC4gIEl0IHByb3ZpZGVzIGEgYmFzaWMgdHdvLWF4aXMKICAqIGFjY2VsZXJvbWV0ZXIgYW5kIG90aGVyIGRhdGEsIHN1Y2ggYXMgdGhlIGRldmljZSdzIHRlbXBlcmF0dXJlLgogICoKLSAqIEJhc2VkIG9uIHRoZSBkb2N1bWVudCBieSBNYXJrIEEuIFNtaXRoIGF2YWlsYWJsZSBhdAorICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gdGhlIGRvY3VtZW50IGJ5IE1hcmsgQS4gU21pdGggYXZhaWxhYmxlIGF0CiAgKiBodHRwOi8vd3d3LmFsbWFkZW4uaWJtLmNvbS9jcy9wZW9wbGUvbWFya3NtaXRoL3RwYXBzLmh0bWwgYW5kIGEgbG90IG9mIHRyaWFsCiAgKiBhbmQgZXJyb3IuCiAgKgpAQCAtMzYsMTIgKzM2LDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2RlZmluZSBIREFQU19MT1dfUE9SVAkJMHgxNjAwCS8qIGZpcnN0IHBvcnQgdXNlZCBieSBoZGFwcyAqLwotI2RlZmluZSBIREFQU19OUl9QT1JUUwkJMHgzMAkvKiAweDE2MDAgLSAweDE2MmYgKi8KLQotI2RlZmluZSBTVEFURV9GUkVTSAkJMHg1MAkvKiBhY2NlbGVyb21ldGVyIGRhdGEgaXMgZnJlc2ggKi8KLQotI2RlZmluZSBSRUZSRVNIX0FTWU5DCQkweDAwCS8qIGRvIGFzeW5jaHJvbm91cyByZWZyZXNoICovCi0jZGVmaW5lIFJFRlJFU0hfU1lOQwkJMHgwMQkvKiBkbyBzeW5jaHJvbm91cyByZWZyZXNoICovCisjZGVmaW5lIEhEQVBTX05SX1BPUlRTCQkweDMwCS8qIG51bWJlciBvZiBwb3J0czogMHgxNjAwIC0gMHgxNjJmICovCiAKICNkZWZpbmUgSERBUFNfUE9SVF9TVEFURQkweDE2MTEJLyogZGV2aWNlIHN0YXRlICovCiAjZGVmaW5lIEhEQVBTX1BPUlRfWVBPUwkJMHgxNjEyCS8qIHktYXhpcyBwb3NpdGlvbiAqLwpAQCAtNTMsNyArNDgsNyBAQAogI2RlZmluZSBIREFQU19QT1JUX1VOS05PV04JMHgxNjFjCS8qIHdoYXQgaXMgdGhpcz8gKi8KICNkZWZpbmUgSERBUFNfUE9SVF9LTUFDVAkweDE2MWQJLyoga2V5Ym9hcmQgb3IgbW91c2UgYWN0aXZpdHkgKi8KIAotI2RlZmluZSBIREFQU19SRUFEX01BU0sJCTB4ZmYJLyogc29tZSByZWFkcyBoYXZlIHRoZSBsb3cgOCBiaXRzIHNldCAqLworI2RlZmluZSBTVEFURV9GUkVTSAkJMHg1MAkvKiBhY2NlbGVyb21ldGVyIGRhdGEgaXMgZnJlc2ggKi8KIAogI2RlZmluZSBLRVlCRF9NQVNLCQkweDIwCS8qIHNldCBpZiBrZXlib2FyZCBhY3Rpdml0eSAqLwogI2RlZmluZSBNT1VTRV9NQVNLCQkweDQwCS8qIHNldCBpZiBtb3VzZSBhY3Rpdml0eSAqLwpAQCAtNjMsMTIgKzU4LDExIEBACiAjZGVmaW5lIElOSVRfVElNRU9VVF9NU0VDUwk0MDAwCS8qIHdhaXQgdXAgdG8gNHMgZm9yIGRldmljZSBpbml0IC4uLiAqLwogI2RlZmluZSBJTklUX1dBSVRfTVNFQ1MJCTIwMAkvKiAuLi4gaW4gMjAwbXMgaW5jcmVtZW50cyAqLwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLXN0YXRpYyBzdHJ1Y3QgaW5wdXRfZGV2IGhkYXBzX2lkZXY7CisjZGVmaW5lIEhEQVBTX1BPTExfUEVSSU9ECShIWi8yMCkJLyogcG9sbCBmb3IgaW5wdXQgZXZlcnkgMS8yMHMgKi8KKyNkZWZpbmUgSERBUFNfSU5QVVRfRlVaWgk0CS8qIGlucHV0IGV2ZW50IHRocmVzaG9sZCAqLworCiBzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgaGRhcHNfdGltZXI7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGhkYXBzX21vdXNlZGV2X3RocmVzaG9sZCA9IDQ7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBoZGFwc19wb2xsX21zID0gNTA7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGhkYXBzX21vdXNlZGV2Oworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiBzdGF0aWMgdW5zaWduZWQgaW50IGhkYXBzX2ludmVydDsKIHN0YXRpYyB1OCBrbV9hY3Rpdml0eTsKIHN0YXRpYyBpbnQgcmVzdF94OwpAQCAtODEsMTQgKzc1LDE0IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdTggX19nZXRfbGF0Y2godTE2IHBvcnQpCiB7Ci0JcmV0dXJuIGluYihwb3J0KSAmIEhEQVBTX1JFQURfTUFTSzsKKwlyZXR1cm4gaW5iKHBvcnQpICYgMHhmZjsKIH0KIAogLyoKLSAqIF9fY2hlY2tfbGF0Y2ggLSBDaGVjayBhIHBvcnQgbGF0Y2ggZm9yIGEgZ2l2ZW4gdmFsdWUuICBDYWxsZXJzIG11c3QgaG9sZAotICogaGRhcHNfc2VtLiAgUmV0dXJucyB6ZXJvIGlmIHRoZSBwb3J0IGNvbnRhaW5zIHRoZSBnaXZlbiB2YWx1ZS4KKyAqIF9fY2hlY2tfbGF0Y2ggLSBDaGVjayBhIHBvcnQgbGF0Y2ggZm9yIGEgZ2l2ZW4gdmFsdWUuICBSZXR1cm5zIHplcm8gaWYgdGhlCisgKiBwb3J0IGNvbnRhaW5zIHRoZSBnaXZlbiB2YWx1ZS4gIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX3NlbS4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19jaGVja19sYXRjaCh1MTYgcG9ydCwgdTggdmFsKQorc3RhdGljIGlubGluZSBpbnQgX19jaGVja19sYXRjaCh1MTYgcG9ydCwgdTggdmFsKQogewogCWlmIChfX2dldF9sYXRjaChwb3J0KSA9PSB2YWwpCiAJCXJldHVybiAwOwpAQCAtOTksNyArOTMsNyBAQAogICogX193YWl0X2xhdGNoIC0gV2FpdCB1cCB0byAxMDB1cyBmb3IgYSBwb3J0IGxhdGNoIHRvIGdldCBhIGNlcnRhaW4gdmFsdWUsCiAgKiByZXR1cm5pbmcgemVybyBpZiB0aGUgdmFsdWUgaXMgb2J0YWluZWQuICBDYWxsZXJzIG11c3QgaG9sZCBoZGFwc19zZW0uCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgX193YWl0X2xhdGNoKHUxNiBwb3J0LCB1OCB2YWwpCitzdGF0aWMgaW50IF9fd2FpdF9sYXRjaCh1MTYgcG9ydCwgdTggdmFsKQogewogCXVuc2lnbmVkIGludCBpOwogCkBAIC0xMDksNTkgKzEwMyw0MiBAQAogCQl1ZGVsYXkoNSk7CiAJfQogCi0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIC1FSU87CiB9CiAKIC8qCi0gKiBfX2RldmljZV9yZWZyZXNoIC0gUmVxdWVzdCBhIHJlZnJlc2ggZnJvbSB0aGUgYWNjZWxlcm9tZXRlci4KLSAqCi0gKiBJZiBzeW5jIGlzIFJFRlJFU0hfU1lOQywgd2UgcGVyZm9ybSBhIHN5bmNocm9ub3VzIHJlZnJlc2ggYW5kIHdpbGwgd2FpdC4KLSAqIFJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsIGFuZCBub256ZXJvIG9uIGVycm9yLgotICoKLSAqIElmIHN5bmMgaXMgUkVGUkVTSF9BU1lOQywgd2UgbWVyZWx5IGtpY2sgb2ZmIGEgbmV3IHJlZnJlc2ggaWYgdGhlIGRldmljZSBpcwotICogbm90IHVwLXRvLWRhdGUuICBBbHdheXMgcmV0dXJucyB6ZXJvLgotICoKLSAqIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX3NlbS4KKyAqIF9fZGV2aWNlX3JlZnJlc2ggLSByZXF1ZXN0IGEgcmVmcmVzaCBmcm9tIHRoZSBhY2NlbGVyb21ldGVyLiAgRG9lcyBub3Qgd2FpdAorICogZm9yIHJlZnJlc2ggdG8gY29tcGxldGUuICBDYWxsZXJzIG11c3QgaG9sZCBoZGFwc19zZW0uCiAgKi8KLXN0YXRpYyBpbnQgX19kZXZpY2VfcmVmcmVzaCh1bnNpZ25lZCBpbnQgc3luYykKK3N0YXRpYyB2b2lkIF9fZGV2aWNlX3JlZnJlc2godm9pZCkKIHsKLQl1OCBzdGF0ZTsKKwl1ZGVsYXkoMjAwKTsKKwlpZiAoaW5iKDB4MTYwNCkgIT0gU1RBVEVfRlJFU0gpIHsKKwkJb3V0YigweDExLCAweDE2MTApOworCQlvdXRiKDB4MDEsIDB4MTYxZik7CisJfQorfQogCi0JdWRlbGF5KDEwMCk7Ci0KLQlzdGF0ZSA9IGluYigweDE2MDQpOwotCWlmIChzdGF0ZSA9PSBTVEFURV9GUkVTSCkKLQkJcmV0dXJuIDA7Ci0KLQlvdXRiKDB4MTEsIDB4MTYxMCk7Ci0Jb3V0YigweDAxLCAweDE2MWYpOwotCWlmIChzeW5jID09IFJFRlJFU0hfQVNZTkMpCi0JCXJldHVybiAwOwotCisvKgorICogX19kZXZpY2VfcmVmcmVzaF9zeW5jIC0gcmVxdWVzdCBhIHN5bmNocm9ub3VzIHJlZnJlc2ggZnJvbSB0aGUKKyAqIGFjY2VsZXJvbWV0ZXIuICBXZSB3YWl0IGZvciB0aGUgcmVmcmVzaCB0byBjb21wbGV0ZS4gIFJldHVybnMgemVybyBpZgorICogc3VjY2Vzc2Z1bCBhbmQgbm9uemVybyBvbiBlcnJvci4gIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX3NlbS4KKyAqLworc3RhdGljIGludCBfX2RldmljZV9yZWZyZXNoX3N5bmModm9pZCkKK3sKKwlfX2RldmljZV9yZWZyZXNoKCk7CiAJcmV0dXJuIF9fd2FpdF9sYXRjaCgweDE2MDQsIFNUQVRFX0ZSRVNIKTsKIH0KIAogLyoKLSAqIF9fZGV2aWNlX2NvbXBsZXRlIC0gSW5kaWNhdGUgdG8gdGhlIGFjY2VsZXJvbWV0ZXIgdGhhdCB3ZSBhcmUgZG9uZSByZWFkaW5nCisgKiBfX2RldmljZV9jb21wbGV0ZSAtIGluZGljYXRlIHRvIHRoZSBhY2NlbGVyb21ldGVyIHRoYXQgd2UgYXJlIGRvbmUgcmVhZGluZwogICogZGF0YSwgYW5kIHRoZW4gaW5pdGlhdGUgYW4gYXN5bmMgcmVmcmVzaC4gIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX3NlbS4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIF9fZGV2aWNlX2NvbXBsZXRlKHZvaWQpCiB7CiAJaW5iKDB4MTYxZik7CiAJaW5iKDB4MTYwNCk7Ci0JX19kZXZpY2VfcmVmcmVzaChSRUZSRVNIX0FTWU5DKTsKLX0KLQotc3RhdGljIGludCBfX2hkYXBzX3JlYWRiX29uZSh1bnNpZ25lZCBpbnQgcG9ydCwgdTggKnZhbCkKLXsKLQkvKiBkbyBhIHN5bmMgcmVmcmVzaCAtLSB3ZSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB3ZSByZWFkIGZyZXNoIGRhdGEgKi8KLQlpZiAoX19kZXZpY2VfcmVmcmVzaChSRUZSRVNIX1NZTkMpKQotCQlyZXR1cm4gLUVJTzsKLQotCSp2YWwgPSBpbmIocG9ydCk7Ci0JX19kZXZpY2VfY29tcGxldGUoKTsKLQotCXJldHVybiAwOworCV9fZGV2aWNlX3JlZnJlc2goKTsKIH0KIAogLyoKQEAgLTE3NCwxNyArMTUxLDI2IEBACiAJaW50IHJldDsKIAogCWRvd24oJmhkYXBzX3NlbSk7Ci0JcmV0ID0gX19oZGFwc19yZWFkYl9vbmUocG9ydCwgdmFsKTsKLQl1cCgmaGRhcHNfc2VtKTsKIAorCS8qIGRvIGEgc3luYyByZWZyZXNoIC0tIHdlIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHdlIHJlYWQgZnJlc2ggZGF0YSAqLworCXJldCA9IF9fZGV2aWNlX3JlZnJlc2hfc3luYygpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJKnZhbCA9IGluYihwb3J0KTsKKwlfX2RldmljZV9jb21wbGV0ZSgpOworCitvdXQ6CisJdXAoJmhkYXBzX3NlbSk7CiAJcmV0dXJuIHJldDsKIH0KIAorLyogX19oZGFwc19yZWFkX3BhaXIgLSBpbnRlcm5hbCBsb2NrbGVzcyBoZWxwZXIgZm9yIGhkYXBzX3JlYWRfcGFpcigpLiAqLwogc3RhdGljIGludCBfX2hkYXBzX3JlYWRfcGFpcih1bnNpZ25lZCBpbnQgcG9ydDEsIHVuc2lnbmVkIGludCBwb3J0MiwKIAkJCSAgICAgaW50ICp4LCBpbnQgKnkpCiB7CiAJLyogZG8gYSBzeW5jIHJlZnJlc2ggLS0gd2UgbmVlZCB0byBiZSBzdXJlIHRoYXQgd2UgcmVhZCBmcmVzaCBkYXRhICovCi0JaWYgKF9fZGV2aWNlX3JlZnJlc2goUkVGUkVTSF9TWU5DKSkKKwlpZiAoX19kZXZpY2VfcmVmcmVzaF9zeW5jKCkpCiAJCXJldHVybiAtRUlPOwogCiAJKnkgPSBpbncocG9ydDIpOwpAQCAtMjE3LDExICsyMDMsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKiBpbml0aWFsaXplIHRoZSBhY2NlbGVyb21ldGVyICovCisvKgorICogaGRhcHNfZGV2aWNlX2luaXQgLSBpbml0aWFsaXplIHRoZSBhY2NlbGVyb21ldGVyLiAgUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MKKyAqIGFuZCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuICBDYW4gc2xlZXAuCisgKi8KIHN0YXRpYyBpbnQgaGRhcHNfZGV2aWNlX2luaXQodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgdG90YWxfbXNlY3MgPSBJTklUX1RJTUVPVVRfTVNFQ1M7Ci0JaW50IHJldCA9IC1FTlhJTzsKKwlpbnQgdG90YWwsIHJldCA9IC1FTlhJTzsKIAogCWRvd24oJmhkYXBzX3NlbSk7CiAKQEAgLTIzMSw4ICsyMTksMTAgQEAKIAkJZ290byBvdXQ7CiAKIAkvKgotCSAqIFRoZSAweDAzIHZhbHVlIGFwcGVhcnMgdG8gb25seSB3b3JrIG9uIHNvbWUgdGhpbmtwYWRzLCBzdWNoIGFzIHRoZQotCSAqIFQ0MnAuICBPdGhlcnMgcmV0dXJuIDB4MDEuCisJICogTW9zdCBUaGlua1BhZHMgcmV0dXJuIDB4MDEuCisJICoKKwkgKiBPdGhlcnMtLW5hbWVseSB0aGUgUjUwcCwgVDQxcCwgYW5kIFQ0MnAtLXJldHVybiAweDAzLiAgVGhlc2UgbGFwdG9wcworCSAqIGhhdmUgImludmVydGVkIiBheGlzZXMuCiAJICoKIAkgKiBUaGUgMHgwMiB2YWx1ZSBvY2N1cnMgd2hlbiB0aGUgY2hpcCBoYXMgYmVlbiBwcmV2aW91c2x5IGluaXRpYWxpemVkLgogCSAqLwpAQCAtMjY3LDI0ICsyNTcsMjMgQEAKIAlvdXRiKDB4MDEsIDB4MTYxZik7CiAJaWYgKF9fd2FpdF9sYXRjaCgweDE2MWYsIDB4MDApKQogCQlnb3RvIG91dDsKLQlpZiAoX19kZXZpY2VfcmVmcmVzaChSRUZSRVNIX1NZTkMpKQorCWlmIChfX2RldmljZV9yZWZyZXNoX3N5bmMoKSkKIAkJZ290byBvdXQ7CiAJaWYgKF9fd2FpdF9sYXRjaCgweDE2MTEsIDB4MDApKQogCQlnb3RvIG91dDsKIAogCS8qIHdlIGhhdmUgZG9uZSBvdXIgZGFuY2UsIG5vdyBsZXQncyB3YWl0IGZvciB0aGUgYXBwbGF1c2UgKi8KLQl3aGlsZSAodG90YWxfbXNlY3MgPiAwKSB7Ci0JCXU4IGlnbm9yZWQ7CisJZm9yICh0b3RhbCA9IElOSVRfVElNRU9VVF9NU0VDUzsgdG90YWwgPiAwOyB0b3RhbCAtPSBJTklUX1dBSVRfTVNFQ1MpIHsKKwkJaW50IHgsIHk7CiAKIAkJLyogYSByZWFkIG9mIHRoZSBkZXZpY2UgaGVscHMgcHVzaCBpdCBpbnRvIGFjdGlvbiAqLwotCQlfX2hkYXBzX3JlYWRiX29uZShIREFQU19QT1JUX1VOS05PV04sICZpZ25vcmVkKTsKKwkJX19oZGFwc19yZWFkX3BhaXIoSERBUFNfUE9SVF9YUE9TLCBIREFQU19QT1JUX1lQT1MsICZ4LCAmeSk7CiAJCWlmICghX193YWl0X2xhdGNoKDB4MTYxMSwgMHgwMikpIHsKIAkJCXJldCA9IDA7CiAJCQlicmVhazsKIAkJfQogCiAJCW1zbGVlcChJTklUX1dBSVRfTVNFQ1MpOwotCQl0b3RhbF9tc2VjcyAtPSBJTklUX1dBSVRfTVNFQ1M7CiAJfQogCiBvdXQ6CkBAIC0yOTMsOTYgKzI4Miw2IEBACiB9CiAKIAotLyogSW5wdXQgY2xhc3Mgc3R1ZmYgKi8KLQotLyoKLSAqIGhkYXBzX2NhbGlicmF0ZSAtIFplcm8gb3V0IG91ciAicmVzdGluZyIgdmFsdWVzLiBDYWxsZXJzIG11c3QgaG9sZCBoZGFwc19zZW0uCi0gKi8KLXN0YXRpYyB2b2lkIGhkYXBzX2NhbGlicmF0ZSh2b2lkKQotewotCWludCB4LCB5OwotCi0JaWYgKF9faGRhcHNfcmVhZF9wYWlyKEhEQVBTX1BPUlRfWFBPUywgSERBUFNfUE9SVF9ZUE9TLCAmeCwgJnkpKQotCQlyZXR1cm47Ci0KLQlyZXN0X3ggPSB4OwotCXJlc3RfeSA9IHk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhkYXBzX21vdXNlZGV2X3BvbGwodW5zaWduZWQgbG9uZyB1bnVzZWQpCi17Ci0JaW50IHgsIHk7Ci0KLQkvKiBDYW5ub3Qgc2xlZXAuICBUcnkgbm9uYmxvY2tpbmdseS4gIElmIHdlIGZhaWwsIHRyeSBhZ2FpbiBsYXRlci4gKi8KLQlpZiAoZG93bl90cnlsb2NrKCZoZGFwc19zZW0pKSB7Ci0JCW1vZF90aW1lcigmaGRhcHNfdGltZXIsamlmZmllcyttc2Vjc190b19qaWZmaWVzKGhkYXBzX3BvbGxfbXMpKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChfX2hkYXBzX3JlYWRfcGFpcihIREFQU19QT1JUX1hQT1MsIEhEQVBTX1BPUlRfWVBPUywgJngsICZ5KSkKLQkJZ290byBvdXQ7Ci0KLQl4IC09IHJlc3RfeDsKLQl5IC09IHJlc3RfeTsKLQlpZiAoYWJzKHgpID4gaGRhcHNfbW91c2VkZXZfdGhyZXNob2xkKQotCQlpbnB1dF9yZXBvcnRfcmVsKCZoZGFwc19pZGV2LCBSRUxfWCwgeCk7Ci0JaWYgKGFicyh5KSA+IGhkYXBzX21vdXNlZGV2X3RocmVzaG9sZCkKLQkJaW5wdXRfcmVwb3J0X3JlbCgmaGRhcHNfaWRldiwgUkVMX1ksIHkpOwotCWlucHV0X3N5bmMoJmhkYXBzX2lkZXYpOwotCi0JbW9kX3RpbWVyKCZoZGFwc190aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoaGRhcHNfcG9sbF9tcykpOwotCi1vdXQ6Ci0JdXAoJmhkYXBzX3NlbSk7Ci19Ci0KLS8qCi0gKiBoZGFwc19tb3VzZWRldl9lbmFibGUgLSBlbmFibGUgdGhlIGlucHV0IGNsYXNzIGRldmljZS4gIENhbiBzbGVlcC4KLSAqLwotc3RhdGljIHZvaWQgaGRhcHNfbW91c2VkZXZfZW5hYmxlKHZvaWQpCi17Ci0JZG93bigmaGRhcHNfc2VtKTsKLQotCS8qIGNhbGlicmF0ZSB0aGUgZGV2aWNlIGJlZm9yZSBlbmFibGluZyAqLwotCWhkYXBzX2NhbGlicmF0ZSgpOwotCi0JLyogaW5pdGlhbGl6ZSB0aGUgaW5wdXQgY2xhc3MgKi8KLQlpbml0X2lucHV0X2RldigmaGRhcHNfaWRldik7Ci0JaGRhcHNfaWRldi5kZXYgPSAmcGRldi0+ZGV2OwotCWhkYXBzX2lkZXYuZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9SRUwpOwotCWhkYXBzX2lkZXYucmVsYml0WzBdID0gQklUKFJFTF9YKSB8IEJJVChSRUxfWSk7Ci0JaGRhcHNfaWRldi5rZXliaXRbTE9ORyhCVE5fTEVGVCldID0gQklUKEJUTl9MRUZUKTsKLQlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoJmhkYXBzX2lkZXYpOwotCi0JLyogc3RhcnQgdXAgb3VyIHRpbWVyICovCi0JaW5pdF90aW1lcigmaGRhcHNfdGltZXIpOwotCWhkYXBzX3RpbWVyLmZ1bmN0aW9uID0gaGRhcHNfbW91c2VkZXZfcG9sbDsKLQloZGFwc190aW1lci5leHBpcmVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoaGRhcHNfcG9sbF9tcyk7Ci0JYWRkX3RpbWVyKCZoZGFwc190aW1lcik7Ci0KLQloZGFwc19tb3VzZWRldiA9IDE7Ci0KLQl1cCgmaGRhcHNfc2VtKTsKLQotCXByaW50ayhLRVJOX0lORk8gImhkYXBzOiBpbnB1dCBkZXZpY2UgZW5hYmxlZC5cbiIpOwotfQotCi0vKgotICogaGRhcHNfbW91c2VkZXZfZGlzYWJsZSAtIGRpc2FibGUgdGhlIGlucHV0IGNsYXNzIGRldmljZS4gIENhbGxlciBtdXN0IGhvbGQKLSAqIGhkYXBzX3NlbS4KLSAqLwotc3RhdGljIHZvaWQgaGRhcHNfbW91c2VkZXZfZGlzYWJsZSh2b2lkKQotewotCWRvd24oJmhkYXBzX3NlbSk7Ci0JaWYgKGhkYXBzX21vdXNlZGV2KSB7Ci0JCWhkYXBzX21vdXNlZGV2ID0gMDsKLQkJZGVsX3RpbWVyX3N5bmMoJmhkYXBzX3RpbWVyKTsKLQkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoJmhkYXBzX2lkZXYpOwotCX0KLQl1cCgmaGRhcHNfc2VtKTsKLX0KLQotCiAvKiBEZXZpY2UgbW9kZWwgc3R1ZmYgKi8KIAogc3RhdGljIGludCBoZGFwc19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC00MTIsNiArMzExLDQ5IEBACiAJLnJlc3VtZSA9IGhkYXBzX3Jlc3VtZQogfTsKIAorLyogSW5wdXQgY2xhc3Mgc3R1ZmYgKi8KKworc3RhdGljIHN0cnVjdCBpbnB1dF9kZXYgaGRhcHNfaWRldiA9IHsKKwkubmFtZSA9ICJoZGFwcyIsCisJLmV2Yml0ID0geyBCSVQoRVZfQUJTKSB9LAorCS5hYnNiaXQgPSB7IEJJVChBQlNfWCkgfCBCSVQoQUJTX1kpIH0sCisJLmFic21pbiAgPSB7IFtBQlNfWF0gPSAtMjU2LCBbQUJTX1ldID0gLTI1NiB9LAorCS5hYnNtYXggID0geyBbQUJTX1hdID0gMjU2LCBbQUJTX1ldID0gMjU2IH0sCisJLmFic2Z1enogPSB7IFtBQlNfWF0gPSBIREFQU19JTlBVVF9GVVpaLCBbQUJTX1ldID0gSERBUFNfSU5QVVRfRlVaWiB9LAorCS5hYnNmbGF0ID0geyBbQUJTX1hdID0gSERBUFNfSU5QVVRfRlVaWiwgW0FCU19ZXSA9IEhEQVBTX0lOUFVUX0ZVWlogfSwKK307CisKKy8qCisgKiBoZGFwc19jYWxpYnJhdGUgLSBTZXQgb3VyICJyZXN0aW5nIiB2YWx1ZXMuICBDYWxsZXJzIG11c3QgaG9sZCBoZGFwc19zZW0uCisgKi8KK3N0YXRpYyB2b2lkIGhkYXBzX2NhbGlicmF0ZSh2b2lkKQoreworCV9faGRhcHNfcmVhZF9wYWlyKEhEQVBTX1BPUlRfWFBPUywgSERBUFNfUE9SVF9ZUE9TLCAmcmVzdF94LCAmcmVzdF95KTsKK30KKworc3RhdGljIHZvaWQgaGRhcHNfbW91c2VkZXZfcG9sbCh1bnNpZ25lZCBsb25nIHVudXNlZCkKK3sKKwlpbnQgeCwgeTsKKworCS8qIENhbm5vdCBzbGVlcC4gIFRyeSBub25ibG9ja2luZ2x5LiAgSWYgd2UgZmFpbCwgdHJ5IGFnYWluIGxhdGVyLiAqLworCWlmIChkb3duX3RyeWxvY2soJmhkYXBzX3NlbSkpIHsKKwkJbW9kX3RpbWVyKCZoZGFwc190aW1lcixqaWZmaWVzICsgSERBUFNfUE9MTF9QRVJJT0QpOworCQlyZXR1cm47CisJfQorCisJaWYgKF9faGRhcHNfcmVhZF9wYWlyKEhEQVBTX1BPUlRfWFBPUywgSERBUFNfUE9SVF9ZUE9TLCAmeCwgJnkpKQorCQlnb3RvIG91dDsKKworCWlucHV0X3JlcG9ydF9hYnMoJmhkYXBzX2lkZXYsIEFCU19YLCB4IC0gcmVzdF94KTsKKwlpbnB1dF9yZXBvcnRfYWJzKCZoZGFwc19pZGV2LCBBQlNfWSwgeSAtIHJlc3RfeSk7CisJaW5wdXRfc3luYygmaGRhcHNfaWRldik7CisKKwltb2RfdGltZXIoJmhkYXBzX3RpbWVyLCBqaWZmaWVzICsgSERBUFNfUE9MTF9QRVJJT0QpOworCitvdXQ6CisJdXAoJmhkYXBzX3NlbSk7Cit9CisKIAogLyogU3lzZnMgRmlsZXMgKi8KIApAQCAtNTE3LDY5ICs0NTksNiBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHNzaXplX3QgaGRhcHNfbW91c2VkZXZfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgaGRhcHNfbW91c2VkZXYpOwotfQotCi1zdGF0aWMgc3NpemVfdCBoZGFwc19tb3VzZWRldl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlpbnQgZW5hYmxlOwotCi0JaWYgKHNzY2FuZihidWYsICIlZCIsICZlbmFibGUpICE9IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGVuYWJsZSA9PSAxKQotCQloZGFwc19tb3VzZWRldl9lbmFibGUoKTsKLQllbHNlIGlmIChlbmFibGUgPT0gMCkKLQkJaGRhcHNfbW91c2VkZXZfZGlzYWJsZSgpOwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGhkYXBzX3BvbGxfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsIGhkYXBzX3BvbGxfbXMpOwotfQotCi1zdGF0aWMgc3NpemVfdCBoZGFwc19wb2xsX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQl1bnNpZ25lZCBpbnQgcG9sbDsKLQotCWlmIChzc2NhbmYoYnVmLCAiJXUiLCAmcG9sbCkgIT0gMSB8fCBwb2xsID09IDApCi0JCXJldHVybiAtRUlOVkFMOwotCWhkYXBzX3BvbGxfbXMgPSBwb2xsOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdCBoZGFwc190aHJlc2hvbGRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGhkYXBzX21vdXNlZGV2X3RocmVzaG9sZCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGhkYXBzX3RocmVzaG9sZF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXVuc2lnbmVkIGludCB0aHJlc2hvbGQ7Ci0KLQlpZiAoc3NjYW5mKGJ1ZiwgIiV1IiwgJnRocmVzaG9sZCkgIT0gMSB8fCB0aHJlc2hvbGQgPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaGRhcHNfbW91c2VkZXZfdGhyZXNob2xkID0gdGhyZXNob2xkOwotCi0JcmV0dXJuIGNvdW50OwotfQotCiBzdGF0aWMgREVWSUNFX0FUVFIocG9zaXRpb24sIDA0NDQsIGhkYXBzX3Bvc2l0aW9uX3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKHZhcmlhbmNlLCAwNDQ0LCBoZGFwc192YXJpYW5jZV9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMSwgMDQ0NCwgaGRhcHNfdGVtcDFfc2hvdywgTlVMTCk7CkBAIC01ODgsMTAgKzQ2Nyw2IEBACiBzdGF0aWMgREVWSUNFX0FUVFIobW91c2VfYWN0aXZpdHksIDA0NDQsIGhkYXBzX21vdXNlX2FjdGl2aXR5X3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGNhbGlicmF0ZSwgMDY0NCwgaGRhcHNfY2FsaWJyYXRlX3Nob3csaGRhcHNfY2FsaWJyYXRlX3N0b3JlKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihpbnZlcnQsIDA2NDQsIGhkYXBzX2ludmVydF9zaG93LCBoZGFwc19pbnZlcnRfc3RvcmUpOwotc3RhdGljIERFVklDRV9BVFRSKG1vdXNlZGV2LCAwNjQ0LCBoZGFwc19tb3VzZWRldl9zaG93LCBoZGFwc19tb3VzZWRldl9zdG9yZSk7Ci1zdGF0aWMgREVWSUNFX0FUVFIobW91c2VkZXZfcG9sbF9tcywgMDY0NCwgaGRhcHNfcG9sbF9zaG93LCBoZGFwc19wb2xsX3N0b3JlKTsKLXN0YXRpYyBERVZJQ0VfQVRUUihtb3VzZWRldl90aHJlc2hvbGQsIDA2NDQsIGhkYXBzX3RocmVzaG9sZF9zaG93LAotCQkgICBoZGFwc190aHJlc2hvbGRfc3RvcmUpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaGRhcHNfYXR0cmlidXRlc1tdID0gewogCSZkZXZfYXR0cl9wb3NpdGlvbi5hdHRyLApAQCAtNjAxLDkgKzQ3Niw2IEBACiAJJmRldl9hdHRyX2tleWJvYXJkX2FjdGl2aXR5LmF0dHIsCiAJJmRldl9hdHRyX21vdXNlX2FjdGl2aXR5LmF0dHIsCiAJJmRldl9hdHRyX2NhbGlicmF0ZS5hdHRyLAotCSZkZXZfYXR0cl9tb3VzZWRldi5hdHRyLAotCSZkZXZfYXR0cl9tb3VzZWRldl90aHJlc2hvbGQuYXR0ciwKLQkmZGV2X2F0dHJfbW91c2VkZXZfcG9sbF9tcy5hdHRyLAogCSZkZXZfYXR0cl9pbnZlcnQuYXR0ciwKIAlOVUxMLAogfTsKQEAgLTYxNSwyNCArNDg3LDE5IEBACiAKIC8qIE1vZHVsZSBzdHVmZiAqLwogCi0vKgotICogWFhYOiBXZSBzaG91bGQgYmUgYWJsZSB0byByZXR1cm4gbm9uemVybyBhbmQgaGFsdCB0aGUgZGV0ZWN0aW9uIHByb2Nlc3MuCi0gKiBCdXQgdGhlcmUgaXMgYSBidWcgaW4gZG1pX2NoZWNrX3N5c3RlbSgpIHdoZXJlIGEgbm9uemVybyByZXR1cm4gZnJvbSB0aGUKLSAqIGZpcnN0IG1hdGNoIHdpbGwgcmVzdWx0IGluIGEgcmV0dXJuIG9mIGZhaWx1cmUgZnJvbSBkbWlfY2hlY2tfc3lzdGVtKCkuCi0gKiBJIGZpeGVkIHRoaXM7IHRoZSBwYXRjaCBpcyBpbiAyLjYtbW0uICBPbmNlIGluIExpbnVzJ3MgdHJlZSB3ZSBjYW4gbWFrZQotICogaGRhcHNfZG1pX21hdGNoX2ludmVydCgpIHJldHVybiBoZGFwc19kbWlfbWF0Y2goKSwgd2hpY2ggaW4gdHVybiByZXR1cm5zIDEuCi0gKi8KKy8qIGhkYXBzX2RtaV9tYXRjaCAtIGZvdW5kIGEgbWF0Y2guICByZXR1cm4gb25lLCBzaG9ydC1jaXJjdWl0aW5nIHRoZSBodW50LiAqLwogc3RhdGljIGludCBoZGFwc19kbWlfbWF0Y2goc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKQogewogCXByaW50ayhLRVJOX0lORk8gImhkYXBzOiAlcyBkZXRlY3RlZC5cbiIsIGlkLT5pZGVudCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiAKKy8qIGhkYXBzX2RtaV9tYXRjaF9pbnZlcnQgLSBmb3VuZCBhbiBpbnZlcnRlZCBtYXRjaC4gKi8KIHN0YXRpYyBpbnQgaGRhcHNfZG1pX21hdGNoX2ludmVydChzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCiB7CiAJaGRhcHNfaW52ZXJ0ID0gMTsKIAlwcmludGsoS0VSTl9JTkZPICJoZGFwczogaW52ZXJ0aW5nIGF4aXMgcmVhZGluZ3MuXG4iKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gaGRhcHNfZG1pX21hdGNoKGlkKTsKIH0KIAogI2RlZmluZSBIREFQU19ETUlfTUFUQ0hfTk9STUFMKG1vZGVsKQl7CQlcCkBAIC02NjIsMTIgKzUyOSwxNSBAQAogCQlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJUaGlua1BhZCBSNTBwIiksCiAJCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIlRoaW5rUGFkIFI1MCIpLAogCQlIREFQU19ETUlfTUFUQ0hfTk9STUFMKCJUaGlua1BhZCBSNTEiKSwKKwkJSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgUjUyIiksCiAJCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIlRoaW5rUGFkIFQ0MXAiKSwKIAkJSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgVDQxIiksCiAJCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIlRoaW5rUGFkIFQ0MnAiKSwKIAkJSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgVDQyIiksCiAJCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIlRoaW5rUGFkIFQ0MyIpLAogCQlIREFQU19ETUlfTUFUQ0hfTk9STUFMKCJUaGlua1BhZCBYNDAiKSwKKwkJSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgWDQxIFRhYmxldCIpLAorCQlIREFQU19ETUlfTUFUQ0hfTk9STUFMKCJUaGlua1BhZCBYNDEiKSwKIAkJeyAuaWRlbnQgPSBOVUxMIH0KIAl9OwogCkBAIC02OTYsOCArNTY2LDE4IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXRfZGV2aWNlOwogCi0JaWYgKGhkYXBzX21vdXNlZGV2KQotCQloZGFwc19tb3VzZWRldl9lbmFibGUoKTsKKwkvKiBpbml0aWFsIGNhbGlicmF0ZSBmb3IgdGhlIGlucHV0IGRldmljZSAqLworCWhkYXBzX2NhbGlicmF0ZSgpOworCisJLyogaW5pdGlhbGl6ZSB0aGUgaW5wdXQgY2xhc3MgKi8KKwloZGFwc19pZGV2LmRldiA9ICZwZGV2LT5kZXY7CisJaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKCZoZGFwc19pZGV2KTsKKworCS8qIHN0YXJ0IHVwIG91ciB0aW1lciBmb3IgdGhlIGlucHV0IGRldmljZSAqLworCWluaXRfdGltZXIoJmhkYXBzX3RpbWVyKTsKKwloZGFwc190aW1lci5mdW5jdGlvbiA9IGhkYXBzX21vdXNlZGV2X3BvbGw7CisJaGRhcHNfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIREFQU19QT0xMX1BFUklPRDsKKwlhZGRfdGltZXIoJmhkYXBzX3RpbWVyKTsKIAogCXByaW50ayhLRVJOX0lORk8gImhkYXBzOiBkcml2ZXIgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiIpOwogCXJldHVybiAwOwpAQCAtNzE1LDggKzU5NSw4IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBoZGFwc19leGl0KHZvaWQpCiB7Ci0JaGRhcHNfbW91c2VkZXZfZGlzYWJsZSgpOwotCisJZGVsX3RpbWVyX3N5bmMoJmhkYXBzX3RpbWVyKTsKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSgmaGRhcHNfaWRldik7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJmhkYXBzX2F0dHJpYnV0ZV9ncm91cCk7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CiAJZHJpdmVyX3VucmVnaXN0ZXIoJmhkYXBzX2RyaXZlcik7CkBAIC03MjgsOSArNjA4LDYgQEAKIG1vZHVsZV9pbml0KGhkYXBzX2luaXQpOwogbW9kdWxlX2V4aXQoaGRhcHNfZXhpdCk7CiAKLW1vZHVsZV9wYXJhbV9uYW1lZChtb3VzZWRldiwgaGRhcHNfbW91c2VkZXYsIGJvb2wsIDApOwotTU9EVUxFX1BBUk1fREVTQyhtb3VzZWRldiwgImVuYWJsZSB0aGUgaW5wdXQgY2xhc3MgZGV2aWNlIik7Ci0KIG1vZHVsZV9wYXJhbV9uYW1lZChpbnZlcnQsIGhkYXBzX2ludmVydCwgYm9vbCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGludmVydCwgImludmVydCBkYXRhIGFsb25nIGVhY2ggYXhpcyIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCmluZGV4IDgzMzQ0OTYuLjNiYWRmZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCkBAIC0yNDUsNiArMjQ1LDE4IEBACiAJICBUaGlzIHN1cHBvcnQgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZSAKIAkgIHdpbGwgYmUgY2FsbGVkIGkyYy1rZXl3ZXN0LgogCitjb25maWcgSTJDX1BNQUNfU01VCisJdHJpc3RhdGUgIlBvd2VybWFjIFNNVSBJMkMgaW50ZXJmYWNlIgorCWRlcGVuZHMgb24gSTJDICYmIFBNQUNfU01VCisJaGVscAorCSAgVGhpcyBzdXBwb3J0cyB0aGUgdXNlIG9mIHRoZSBJMkMgaW50ZXJmYWNlIGluIHRoZSBTTVUKKwkgIGNoaXAgb24gcmVjZW50IEFwcGxlIG1hY2hpbmVzIGxpa2UgdGhlIGlNYWMgRzUuICBJdCBpcyB1c2VkCisJICBhbW9uZyBvdGhlcnMgYnkgdGhlIHRoZXJtYWwgY29udHJvbCBkcml2ZXIgZm9yIHRob3NlIG1hY2hpbmVzLgorCSAgU2F5IFkgaWYgeW91IGhhdmUgc3VjaCBhIG1hY2hpbmUuCisKKwkgIFRoaXMgc3VwcG9ydCBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBpMmMtcG1hYy1zbXUuCisKIGNvbmZpZyBJMkNfTVBDCiAJdHJpc3RhdGUgIk1QQzEwNy84MjR4Lzg1eHgvNTJ4eCIKIAlkZXBlbmRzIG9uIEkyQyAmJiBQUEMzMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlIGIvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCmluZGV4IDk4MGIzZTkuLmYxZGYwMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUKQEAgLTIwLDYgKzIwLDcgQEAKIG9iai0kKENPTkZJR19JMkNfSVhQMjAwMCkJKz0gaTJjLWl4cDIwMDAubwogb2JqLSQoQ09ORklHX0kyQ19JWFA0WFgpCSs9IGkyYy1peHA0eHgubwogb2JqLSQoQ09ORklHX0kyQ19LRVlXRVNUKQkrPSBpMmMta2V5d2VzdC5vCitvYmotJChDT05GSUdfSTJDX1BNQUNfU01VKQkrPSBpMmMtcG1hYy1zbXUubwogb2JqLSQoQ09ORklHX0kyQ19NUEMpCQkrPSBpMmMtbXBjLm8KIG9iai0kKENPTkZJR19JMkNfTVY2NFhYWCkJKz0gaTJjLW12NjR4eHgubwogb2JqLSQoQ09ORklHX0kyQ19ORk9SQ0UyKQkrPSBpMmMtbmZvcmNlMi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBtYWMtc211LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBtYWMtc211LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE5ZjU2NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG1hYy1zbXUuYwpAQCAtMCwwICsxLDMxNiBAQAorLyoKKyAgICBpMmMgU3VwcG9ydCBmb3IgQXBwbGUgU01VIENvbnRyb2xsZXIKKworICAgIENvcHlyaWdodCAoYykgMjAwNSBCZW5qYW1pbiBIZXJyZW5zY2htaWR0LCBJQk0gQ29ycC4KKyAgICAgICAgICAgICAgICAgICAgICAgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL29mX2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9zbXUuaD4KKworc3RhdGljIGludCBwcm9iZTsKKworTU9EVUxFX0FVVEhPUigiQmVuamFtaW4gSGVycmVuc2NobWlkdCA8YmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJMkMgZHJpdmVyIGZvciBBcHBsZSdzIFNNVSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworbW9kdWxlX3BhcmFtKHByb2JlLCBib29sLCAwKTsKKworCisvKiBQaHlzaWNhbCBpbnRlcmZhY2UgKi8KK3N0cnVjdCBzbXVfaWZhY2UKK3sKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIJYWRhcHRlcjsKKwlzdHJ1Y3QgY29tcGxldGlvbgljb21wbGV0ZTsKKwl1MzIJCQlidXNpZDsKK307CisKK3N0YXRpYyB2b2lkIHNtdV9pMmNfZG9uZShzdHJ1Y3Qgc211X2kyY19jbWQgKmNtZCwgdm9pZCAqbWlzYykKK3sKKwlzdHJ1Y3Qgc211X2lmYWNlCSppZmFjZSA9IG1pc2M7CisJY29tcGxldGUoJmlmYWNlLT5jb21wbGV0ZSk7Cit9CisKKy8qCisgKiBTTUJVUy10eXBlIHRyYW5zZmVyIGVudHJ5cG9pbnQKKyAqLworc3RhdGljIHMzMiBzbXVfc21idXNfeGZlcigJc3RydWN0IGkyY19hZGFwdGVyKglhZGFwLAorCQkJCXUxNgkJCWFkZHIsCisJCQkJdW5zaWduZWQgc2hvcnQJCWZsYWdzLAorCQkJCWNoYXIJCQlyZWFkX3dyaXRlLAorCQkJCXU4CQkJY29tbWFuZCwKKwkJCQlpbnQJCQlzaXplLAorCQkJCXVuaW9uIGkyY19zbWJ1c19kYXRhKglkYXRhKQoreworCXN0cnVjdCBzbXVfaWZhY2UJKmlmYWNlID0gaTJjX2dldF9hZGFwZGF0YShhZGFwKTsKKwlzdHJ1Y3Qgc211X2kyY19jbWQJY21kOworCWludAkJCXJjID0gMDsKKwlpbnQJCQlyZWFkID0gKHJlYWRfd3JpdGUgPT0gSTJDX1NNQlVTX1JFQUQpOworCisJY21kLmluZm8uYnVzID0gaWZhY2UtPmJ1c2lkOworCWNtZC5pbmZvLmRldmFkZHIgPSAoYWRkciA8PCAxKSB8IChyZWFkID8gMHgwMSA6IDB4MDApOworCisJLyogUHJlcGFyZSBkYXRhcyAmIHNlbGVjdCBtb2RlICovCisJc3dpdGNoIChzaXplKSB7CisgICAgICAgIGNhc2UgSTJDX1NNQlVTX1FVSUNLOgorCQljbWQuaW5mby50eXBlID0gU01VX0kyQ19UUkFOU0ZFUl9TSU1QTEU7CisJCWNtZC5pbmZvLmRhdGFsZW4gPSAwOworCSAgICAJYnJlYWs7CisgICAgICAgIGNhc2UgSTJDX1NNQlVTX0JZVEU6CisJCWNtZC5pbmZvLnR5cGUgPSBTTVVfSTJDX1RSQU5TRkVSX1NJTVBMRTsKKwkJY21kLmluZm8uZGF0YWxlbiA9IDE7CisJCWlmICghcmVhZCkKKwkJCWNtZC5pbmZvLmRhdGFbMF0gPSBkYXRhLT5ieXRlOworCSAgICAJYnJlYWs7CisgICAgICAgIGNhc2UgSTJDX1NNQlVTX0JZVEVfREFUQToKKwkJY21kLmluZm8udHlwZSA9IFNNVV9JMkNfVFJBTlNGRVJfU1REU1VCOworCQljbWQuaW5mby5kYXRhbGVuID0gMTsKKwkJY21kLmluZm8uc3VibGVuID0gMTsKKwkJY21kLmluZm8uc3ViYWRkclswXSA9IGNvbW1hbmQ7CisJCWNtZC5pbmZvLnN1YmFkZHJbMV0gPSAwOworCQljbWQuaW5mby5zdWJhZGRyWzJdID0gMDsKKwkJaWYgKCFyZWFkKQorCQkJY21kLmluZm8uZGF0YVswXSA9IGRhdGEtPmJ5dGU7CisJICAgIAlicmVhazsKKyAgICAgICAgY2FzZSBJMkNfU01CVVNfV09SRF9EQVRBOgorCQljbWQuaW5mby50eXBlID0gU01VX0kyQ19UUkFOU0ZFUl9TVERTVUI7CisJCWNtZC5pbmZvLmRhdGFsZW4gPSAyOworCQljbWQuaW5mby5zdWJsZW4gPSAxOworCQljbWQuaW5mby5zdWJhZGRyWzBdID0gY29tbWFuZDsKKwkJY21kLmluZm8uc3ViYWRkclsxXSA9IDA7CisJCWNtZC5pbmZvLnN1YmFkZHJbMl0gPSAwOworCQlpZiAoIXJlYWQpIHsKKwkJCWNtZC5pbmZvLmRhdGFbMF0gPSBkYXRhLT5ieXRlICYgMHhmZjsKKwkJCWNtZC5pbmZvLmRhdGFbMV0gPSAoZGF0YS0+Ynl0ZSA+PiA4KSAmIDB4ZmY7CisJCX0KKwkJYnJlYWs7CisJLyogTm90ZSB0aGF0IHRoZXNlIGFyZSBicm9rZW4gdnMuIHRoZSBleHBlY3RlZCBzbWJ1cyBBUEkgd2hlcmUKKwkgKiBvbiByZWFkcywgdGhlIGxlbmdodCBpcyBhY3R1YWxseSByZXR1cm5lZCBmcm9tIHRoZSBmdW5jdGlvbiwKKwkgKiBidXQgSSB0aGluayB0aGUgY3VycmVudCBBUEkgbWFrZXMgbm8gc2Vuc2UgYW5kIEkgZG9uJ3Qgd2FudAorCSAqIGFueSBkcml2ZXIgdGhhdCBJIGhhdmVuJ3QgdmVyaWZpZWQgZm9yIGNvcnJlY3RuZXNzIHRvIGdvCisJICogYW55d2hlcmUgbmVhciBhIHBtYWMgaTJjIGJ1cyBhbnl3YXkgLi4uCisJICovCisgICAgICAgIGNhc2UgSTJDX1NNQlVTX0JMT0NLX0RBVEE6CisJCWNtZC5pbmZvLnR5cGUgPSBTTVVfSTJDX1RSQU5TRkVSX1NURFNVQjsKKwkJY21kLmluZm8uZGF0YWxlbiA9IGRhdGEtPmJsb2NrWzBdICsgMTsKKwkJaWYgKGNtZC5pbmZvLmRhdGFsZW4gPiA2KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICghcmVhZCkKKwkJCW1lbWNweShjbWQuaW5mby5kYXRhLCBkYXRhLT5ibG9jaywgY21kLmluZm8uZGF0YWxlbik7CisJCWNtZC5pbmZvLnN1YmxlbiA9IDE7CisJCWNtZC5pbmZvLnN1YmFkZHJbMF0gPSBjb21tYW5kOworCQljbWQuaW5mby5zdWJhZGRyWzFdID0gMDsKKwkJY21kLmluZm8uc3ViYWRkclsyXSA9IDA7CisJCWJyZWFrOworCWNhc2UgSTJDX1NNQlVTX0kyQ19CTE9DS19EQVRBOgorCQljbWQuaW5mby50eXBlID0gU01VX0kyQ19UUkFOU0ZFUl9TVERTVUI7CisJCWNtZC5pbmZvLmRhdGFsZW4gPSBkYXRhLT5ibG9ja1swXTsKKwkJaWYgKGNtZC5pbmZvLmRhdGFsZW4gPiA3KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICghcmVhZCkKKwkJCW1lbWNweShjbWQuaW5mby5kYXRhLCAmZGF0YS0+YmxvY2tbMV0sCisJCQkgICAgICAgY21kLmluZm8uZGF0YWxlbik7CisJCWNtZC5pbmZvLnN1YmxlbiA9IDE7CisJCWNtZC5pbmZvLnN1YmFkZHJbMF0gPSBjb21tYW5kOworCQljbWQuaW5mby5zdWJhZGRyWzFdID0gMDsKKwkJY21kLmluZm8uc3ViYWRkclsyXSA9IDA7CisJCWJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisJICAgIAlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBUdXJuIGEgc3RhbmRhcmRzdWIgcmVhZCBpbnRvIGEgY29tYmluZWQgbW9kZSBhY2Nlc3MgKi8KKyAJaWYgKHJlYWRfd3JpdGUgPT0gSTJDX1NNQlVTX1JFQUQgJiYKKwkgICAgY21kLmluZm8udHlwZSA9PSBTTVVfSTJDX1RSQU5TRkVSX1NURFNVQikKKwkJY21kLmluZm8udHlwZSA9IFNNVV9JMkNfVFJBTlNGRVJfQ09NQklORUQ7CisKKwkvKiBGaW5pc2ggZmlsbGluZyBjb21tYW5kIGFuZCBzdWJtaXQgaXQgKi8KKwljbWQuZG9uZSA9IHNtdV9pMmNfZG9uZTsKKwljbWQubWlzYyA9IGlmYWNlOworCXJjID0gc211X3F1ZXVlX2kyYygmY21kKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisJd2FpdF9mb3JfY29tcGxldGlvbigmaWZhY2UtPmNvbXBsZXRlKTsKKwlyYyA9IGNtZC5zdGF0dXM7CisKKwlpZiAoIXJlYWQgfHwgcmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlzd2l0Y2ggKHNpemUpIHsKKyAgICAgICAgY2FzZSBJMkNfU01CVVNfQllURToKKyAgICAgICAgY2FzZSBJMkNfU01CVVNfQllURV9EQVRBOgorCQlkYXRhLT5ieXRlID0gY21kLmluZm8uZGF0YVswXTsKKwkgICAgCWJyZWFrOworICAgICAgICBjYXNlIEkyQ19TTUJVU19XT1JEX0RBVEE6CisJCWRhdGEtPndvcmQgPSAoKHUxNiljbWQuaW5mby5kYXRhWzFdKSA8PCA4OworCQlkYXRhLT53b3JkIHw9IGNtZC5pbmZvLmRhdGFbMF07CisJCWJyZWFrOworCS8qIE5vdGUgdGhhdCB0aGVzZSBhcmUgYnJva2VuIHZzLiB0aGUgZXhwZWN0ZWQgc21idXMgQVBJIHdoZXJlCisJICogb24gcmVhZHMsIHRoZSBsZW5naHQgaXMgYWN0dWFsbHkgcmV0dXJuZWQgZnJvbSB0aGUgZnVuY3Rpb24sCisJICogYnV0IEkgdGhpbmsgdGhlIGN1cnJlbnQgQVBJIG1ha2VzIG5vIHNlbnNlIGFuZCBJIGRvbid0IHdhbnQKKwkgKiBhbnkgZHJpdmVyIHRoYXQgSSBoYXZlbid0IHZlcmlmaWVkIGZvciBjb3JyZWN0bmVzcyB0byBnbworCSAqIGFueXdoZXJlIG5lYXIgYSBwbWFjIGkyYyBidXMgYW55d2F5IC4uLgorCSAqLworICAgICAgICBjYXNlIEkyQ19TTUJVU19CTE9DS19EQVRBOgorCWNhc2UgSTJDX1NNQlVTX0kyQ19CTE9DS19EQVRBOgorCQltZW1jcHkoJmRhdGEtPmJsb2NrWzBdLCBjbWQuaW5mby5kYXRhLCBjbWQuaW5mby5kYXRhbGVuKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdTMyCitzbXVfc21idXNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKiBhZGFwdGVyKQoreworCXJldHVybiBJMkNfRlVOQ19TTUJVU19RVUlDSyB8IEkyQ19GVU5DX1NNQlVTX0JZVEUgfAorCSAgICAgICBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEgfCBJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEEgfAorCSAgICAgICBJMkNfRlVOQ19TTUJVU19CTE9DS19EQVRBOworfQorCisvKiBGb3Igbm93LCB3ZSBvbmx5IGhhbmRsZSBjb21iaW5lZCBtb2RlIChzbWJ1cykgKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBzbXVfYWxnb3JpdGhtID0geworCS5zbWJ1c194ZmVyCT0gc211X3NtYnVzX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkJPSBzbXVfc21idXNfZnVuYywKK307CisKK3N0YXRpYyBpbnQgY3JlYXRlX2lmYWNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc211X2lmYWNlKiBpZmFjZTsKKwl1MzIgKnJlZywgYnVzaWQ7CisJaW50IHJjOworCisJcmVnID0gKHUzMiAqKWdldF9wcm9wZXJ0eShucCwgInJlZyIsIE5VTEwpOworCWlmIChyZWcgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImkyYy1wbWFjLXNtdTogY2FuJ3QgZmluZCBidXMgbnVtYmVyICFcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKwlidXNpZCA9ICpyZWc7CisKKwlpZmFjZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbXVfaWZhY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoaWZhY2UgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImkyYy1wbWFjLXNtdTogY2FuJ3QgYWxsb2NhdGUgaW50ZWZhY2UgIVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQoaWZhY2UsIDAsIHNpemVvZihzdHJ1Y3Qgc211X2lmYWNlKSk7CisJaW5pdF9jb21wbGV0aW9uKCZpZmFjZS0+Y29tcGxldGUpOworCWlmYWNlLT5idXNpZCA9IGJ1c2lkOworCisJZGV2X3NldF9kcnZkYXRhKGRldiwgaWZhY2UpOworCisJc3ByaW50ZihpZmFjZS0+YWRhcHRlci5uYW1lLCAic211LWkyYy0lMDJ4IiwgYnVzaWQpOworCWlmYWNlLT5hZGFwdGVyLmFsZ28gPSAmc211X2FsZ29yaXRobTsKKwlpZmFjZS0+YWRhcHRlci5hbGdvX2RhdGEgPSBOVUxMOworCWlmYWNlLT5hZGFwdGVyLmNsaWVudF9yZWdpc3RlciA9IE5VTEw7CisJaWZhY2UtPmFkYXB0ZXIuY2xpZW50X3VucmVnaXN0ZXIgPSBOVUxMOworCWkyY19zZXRfYWRhcGRhdGEoJmlmYWNlLT5hZGFwdGVyLCBpZmFjZSk7CisJaWZhY2UtPmFkYXB0ZXIuZGV2LnBhcmVudCA9IGRldjsKKworCXJjID0gaTJjX2FkZF9hZGFwdGVyKCZpZmFjZS0+YWRhcHRlcik7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaTJjLXBhbWMtc211LmM6IEFkYXB0ZXIgJXMgcmVnaXN0cmF0aW9uICIKKwkJICAgICAgICJmYWlsZWRcbiIsIGlmYWNlLT5hZGFwdGVyLm5hbWUpOworCQlpMmNfc2V0X2FkYXBkYXRhKCZpZmFjZS0+YWRhcHRlciwgTlVMTCk7CisJfQorCisJaWYgKHByb2JlKSB7CisJCXVuc2lnbmVkIGNoYXIgYWRkcjsKKwkJcHJpbnRrKCJQcm9iZTogIik7CisJCWZvciAoYWRkciA9IDB4MDA7IGFkZHIgPD0gMHg3ZjsgYWRkcisrKSB7CisJCQlpZiAoaTJjX3NtYnVzX3hmZXIoJmlmYWNlLT5hZGFwdGVyLGFkZHIsCisJCQkJCSAgIDAsMCwwLEkyQ19TTUJVU19RVUlDSyxOVUxMKSA+PSAwKQorCQkJCXByaW50aygiJTAyeCAiLCBhZGRyKTsKKwkJfQorCQlwcmludGsoIlxuIik7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiU01VIGkyYyBidXMgJXggcmVnaXN0ZXJlZFxuIiwgYnVzaWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlzcG9zZV9pZmFjZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNtdV9pZmFjZSAqaWZhY2UgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmM7CisKKwlyYyA9IGkyY19kZWxfYWRhcHRlcigmaWZhY2UtPmFkYXB0ZXIpOworCWkyY19zZXRfYWRhcGRhdGEoJmlmYWNlLT5hZGFwdGVyLCBOVUxMKTsKKwkvKiBXZSBhcmVuJ3QgdGhhdCBwcmVwYXJlZCB0byBkZWFsIHdpdGggdGhpcy4uLiAqLworCWlmIChyYykKKwkJcHJpbnRrKCJpMmMtcG1hYy1zbXUuYzogRmFpbGVkIHRvIHJlbW92ZSBidXMgJXMgIVxuIiwKKwkJICAgICAgIGlmYWNlLT5hZGFwdGVyLm5hbWUpOworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCWtmcmVlKGlmYWNlKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgY3JlYXRlX2lmYWNlX29mX3BsYXRmb3JtKHN0cnVjdCBvZl9kZXZpY2UqIGRldiwKKwkJCQkgICAgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCit7CisJcmV0dXJuIGNyZWF0ZV9pZmFjZShkZXYtPm5vZGUsICZkZXYtPmRldik7Cit9CisKKworc3RhdGljIGludCBkaXNwb3NlX2lmYWNlX29mX3BsYXRmb3JtKHN0cnVjdCBvZl9kZXZpY2UqIGRldikKK3sKKwlyZXR1cm4gZGlzcG9zZV9pZmFjZSgmZGV2LT5kZXYpOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGkyY19zbXVfbWF0Y2hbXSA9Cit7CisJeworCQkuY29tcGF0aWJsZQk9ICJzbXUtaTJjIiwKKwl9LAorCXt9LAorfTsKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIGkyY19zbXVfb2ZfcGxhdGZvcm1fZHJpdmVyID0KK3sKKwkubmFtZSAJCT0gImkyYy1zbXUiLAorCS5tYXRjaF90YWJsZQk9IGkyY19zbXVfbWF0Y2gsCisJLnByb2JlCQk9IGNyZWF0ZV9pZmFjZV9vZl9wbGF0Zm9ybSwKKwkucmVtb3ZlCQk9IGRpc3Bvc2VfaWZhY2Vfb2ZfcGxhdGZvcm0KK307CisKKworc3RhdGljIGludCBfX2luaXQgaTJjX3BtYWNfc211X2luaXQodm9pZCkKK3sKKwlvZl9yZWdpc3Rlcl9kcml2ZXIoJmkyY19zbXVfb2ZfcGxhdGZvcm1fZHJpdmVyKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQgaTJjX3BtYWNfc211X2NsZWFudXAodm9pZCkKK3sKKwlvZl91bnJlZ2lzdGVyX2RyaXZlcigmaTJjX3NtdV9vZl9wbGF0Zm9ybV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChpMmNfcG1hY19zbXVfaW5pdCk7Cittb2R1bGVfZXhpdChpMmNfcG1hY19zbXVfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW8uYyBiL2RyaXZlcnMvaWRlL2lkZS1pby5jCmluZGV4IDllOWNmMTQuLjUyNzVjYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1pby5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pby5jCkBAIC0xMTAxLDYgKzExMDEsNyBAQAogCWlkZV9od2lmX3QJKmh3aWY7CiAJc3RydWN0IHJlcXVlc3QJKnJxOwogCWlkZV9zdGFydHN0b3BfdAlzdGFydHN0b3A7CisJaW50ICAgICAgICAgICAgIGxvb3BzID0gMDsKIAogCS8qIGZvciBhdGFyaSBvbmx5OiBQT1NTSUJMWSBCUk9LRU4gSEVSRSg/KSAqLwogCWlkZV9nZXRfbG9jayhpZGVfaW50ciwgaHdncm91cCk7CkBAIC0xMTUzLDYgKzExNTQsNyBAQAogCQkJLyogbm8gbW9yZSB3b3JrIGZvciB0aGlzIGh3Z3JvdXAgKGZvciBub3cpICovCiAJCQlyZXR1cm47CiAJCX0KKwlhZ2FpbjoKIAkJaHdpZiA9IEhXSUYoZHJpdmUpOwogCQlpZiAoaHdncm91cC0+aHdpZi0+c2hhcmluZ19pcnEgJiYKIAkJICAgIGh3aWYgIT0gaHdncm91cC0+aHdpZiAmJgpAQCAtMTE5Miw4ICsxMTk0LDE0IEBACiAJCSAqIHRob3VnaC4gSSBob3BlIHRoYXQgZG9lc24ndCBoYXBwZW4gdG9vIG11Y2gsIGhvcGVmdWxseSBub3QKIAkJICogdW5sZXNzIHRoZSBzdWJkcml2ZXIgdHJpZ2dlcnMgc3VjaCBhIHRoaW5nIGluIGl0cyBvd24gUE0KIAkJICogc3RhdGUgbWFjaGluZS4KKwkJICoKKwkJICogV2UgY291bnQgaG93IG1hbnkgdGltZXMgd2UgbG9vcCBoZXJlIHRvIG1ha2Ugc3VyZSB3ZSBzZXJ2aWNlCisJCSAqIGFsbCBkcml2ZXMgaW4gdGhlIGh3Z3JvdXAgd2l0aG91dCBsb29waW5nIGZvciBldmVyCiAJCSAqLwogCQlpZiAoZHJpdmUtPmJsb2NrZWQgJiYgIWJsa19wbV9yZXF1ZXN0KHJxKSAmJiAhKHJxLT5mbGFncyAmIFJFUV9QUkVFTVBUKSkgeworCQkJZHJpdmUgPSBkcml2ZS0+bmV4dCA/IGRyaXZlLT5uZXh0IDogaHdncm91cC0+ZHJpdmU7CisJCQlpZiAobG9vcHMrKyA8IDQgJiYgIWJsa19xdWV1ZV9wbHVnZ2VkKGRyaXZlLT5xdWV1ZSkpCisJCQkJZ290byBhZ2FpbjsKIAkJCS8qIFdlIGNsZWFyIGJ1c3ksIHRoZXJlIHNob3VsZCBiZSBubyBwZW5kaW5nIEFUQSBjb21tYW5kIGF0IHRoaXMgcG9pbnQuICovCiAJCQlod2dyb3VwLT5idXN5ID0gMDsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXRhc2tmaWxlLmMgYi9kcml2ZXJzL2lkZS9pZGUtdGFza2ZpbGUuYwppbmRleCBkMDRmNjJhLi5hY2U4ZWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtdGFza2ZpbGUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtdGFza2ZpbGUuYwpAQCAtNTAwLDYgKzUwMCw3IEBACiAJfQogCiAJcnEuc3BlY2lhbCA9IGFyZ3M7CisJYXJncy0+cnEgPSAmcnE7CiAJcmV0dXJuIGlkZV9kb19kcml2ZV9jbWQoZHJpdmUsICZycSwgaWRlX3dhaXQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlLWNzLmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlLWNzLmMKaW5kZXggMGNjZjg1Zi4uYTM1YTU4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L2lkZS1jcy5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9pZGUtY3MuYwpAQCAtNDc3LDcgKzQ3Nyw3IEBACiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIklPIERBVEEiLCAiUENJREUiLCAweDU0N2U2NmRjLCAweDVjNWFiMTQ5KSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiSU8gREFUQSIsICJQQ0lERUlJIiwgMHg1NDdlNjZkYywgMHhiMzY2MjY3NCksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkxPT0tNRUVUIiwgIkNCSURFMiAgICAgICIsIDB4ZTM3YmUyYjUsIDB4ODY3MTA0M2IpLAotCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCIgIiwgIk5pbmphQVRBLSIsIDB4M2I2ZTIwYzgsIDB4ZWJlMGJkNzkpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDIoIk5pbmphQVRBLSIsIDB4ZWJlMGJkNzkpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJQQ01DSUEiLCAiQ0QtUk9NIiwgMHgyODFmMWM1ZCwgMHg2NjUzNjU5MSksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIlBDTUNJQSIsICJQblBJREUiLCAweDI4MWYxYzVkLCAweDBjNjk0NzI4KSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiU0hVVFRMRSBURUNITk9MT0dZIExURC4iLCAiUENDQVJELUlERS9BVEFQSSBBZGFwdGVyIiwgMHg0YTNmMGJhMCwgMHgzMjI1NjBlMSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2FtZHRwLmMgYi9kcml2ZXJzL2llZWUxMzk0L2FtZHRwLmMKaW5kZXggODRhZTAyNy4uZThlMjg1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9hbWR0cC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvYW1kdHAuYwpAQCAtMTI5Nyw0ICsxMjk3LDMgQEAKIAogbW9kdWxlX2luaXQoYW1kdHBfaW5pdF9tb2R1bGUpOwogbW9kdWxlX2V4aXQoYW1kdHBfZXhpdF9tb2R1bGUpOwotTU9EVUxFX0FMSUFTX0NIQVJERVYoSUVFRTEzOTRfTUFKT1IsIElFRUUxMzk0X01JTk9SX0JMT0NLX0FNRFRQICogMTYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9jc3IxMjEyLmggYi9kcml2ZXJzL2llZWUxMzk0L2NzcjEyMTIuaAppbmRleCBlNjczNDI2Li4yOGM1ZjRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2NzcjEyMTIuaAorKysgYi9kcml2ZXJzL2llZWUxMzk0L2NzcjEyMTIuaApAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvZHYxMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L2R2MTM5NC5jCmluZGV4IDQ1MzhiMDIuLmUzNDczMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvZHYxMzk0LmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9kdjEzOTQuYwpAQCAtMjY2MCw0ICsyNjYwLDMgQEAKIAogbW9kdWxlX2luaXQoZHYxMzk0X2luaXRfbW9kdWxlKTsKIG1vZHVsZV9leGl0KGR2MTM5NF9leGl0X21vZHVsZSk7Ci1NT0RVTEVfQUxJQVNfQ0hBUkRFVihJRUVFMTM5NF9NQUpPUiwgSUVFRTEzOTRfTUlOT1JfQkxPQ0tfRFYxMzk0ICogMTYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9ldGgxMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYwppbmRleCBjZDUzYzE3Li40ODAyYmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYwpAQCAtODksNyArODksNyBAQAogI2RlZmluZSBUUkFDRSgpIHByaW50ayhLRVJOX0VSUiAiJXM6JXNbJWRdIC0tLS0gVFJBQ0VcbiIsIGRyaXZlcl9uYW1lLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKQogCiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9Ci0JIiRSZXY6IDEyNjQgJCBCZW4gQ29sbGlucyA8YmNvbGxpbnNAZGViaWFuLm9yZz4iOworCSIkUmV2OiAxMzEyICQgQmVuIENvbGxpbnMgPGJjb2xsaW5zQGRlYmlhbi5vcmc+IjsKIAogc3RydWN0IGZyYWdtZW50X2luZm8gewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKQEAgLTIyMSw5ICsyMjEsNyBAQAogCWlmIChwcml2LT5iY19zdGF0ZSA9PSBFVEhFUjEzOTRfQkNfRVJST1IpIHsKIAkJLyogd2UnbGwgdHJ5IGFnYWluICovCiAJCXByaXYtPmlzbyA9IGhwc2JfaXNvX3JlY3ZfaW5pdChwcml2LT5ob3N0LAotCQkJCQkgICAgICAgRVRIRVIxMzk0X0dBU1BfQlVGRkVSUyAqIDIgKgotCQkJCQkgICAgICAgKDEgPDwgKHByaXYtPmhvc3QtPmNzci5tYXhfcmVjICsKLQkJCQkJCSAgICAgIDEpKSwKKwkJCQkJICAgICAgIEVUSEVSMTM5NF9JU09fQlVGX1NJWkUsCiAJCQkJCSAgICAgICBFVEhFUjEzOTRfR0FTUF9CVUZGRVJTLAogCQkJCQkgICAgICAgcHJpdi0+YnJvYWRjYXN0X2NoYW5uZWwsCiAJCQkJCSAgICAgICBIUFNCX0lTT19ETUFfUEFDS0VUX1BFUl9CVUZGRVIsCkBAIC02MzUsOCArNjMzLDggQEAKIAkgKiBiZSBjaGVja2VkIHdoZW4gdGhlIGV0aCBkZXZpY2UgaXMgb3BlbmVkLiAqLwogCXByaXYtPmJyb2FkY2FzdF9jaGFubmVsID0gaG9zdC0+Y3NyLmJyb2FkY2FzdF9jaGFubmVsICYgMHgzZjsKIAotCXByaXYtPmlzbyA9IGhwc2JfaXNvX3JlY3ZfaW5pdChob3N0LCAoRVRIRVIxMzk0X0dBU1BfQlVGRkVSUyAqIDIgKgotCQkJCQkgICAgICAoMSA8PCAoaG9zdC0+Y3NyLm1heF9yZWMgKyAxKSkpLAorCXByaXYtPmlzbyA9IGhwc2JfaXNvX3JlY3ZfaW5pdChob3N0LAorCQkJCSAgICAgICBFVEhFUjEzOTRfSVNPX0JVRl9TSVpFLAogCQkJCSAgICAgICBFVEhFUjEzOTRfR0FTUF9CVUZGRVJTLAogCQkJCSAgICAgICBwcml2LT5icm9hZGNhc3RfY2hhbm5lbCwKIAkJCQkgICAgICAgSFBTQl9JU09fRE1BX1BBQ0tFVF9QRVJfQlVGRkVSLApAQCAtMTc3MCw3ICsxNzY4LDcgQEAKIHN0YXRpYyB2b2lkIGV0aGVyMTM5NF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQogewogCXN0cmNweSAoaW5mby0+ZHJpdmVyLCBkcml2ZXJfbmFtZSk7Ci0Jc3RyY3B5IChpbmZvLT52ZXJzaW9uLCAiJFJldjogMTI2NCAkIik7CisJc3RyY3B5IChpbmZvLT52ZXJzaW9uLCAiJFJldjogMTMxMiAkIik7CiAJLyogRklYTUUgWFhYIHByb3ZpZGUgc2FuZSBidXNpbmZvICovCiAJc3RyY3B5IChpbmZvLT5idXNfaW5mbywgImllZWUxMzk0Iik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuaCBiL2RyaXZlcnMvaWVlZTEzOTQvZXRoMTM5NC5oCmluZGV4IGVkOGYxYzQuLmE3NzIxM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvZXRoMTM5NC5oCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvZXRoMTM5NC5oCkBAIC00NCw2ICs0NCwxMiBAQAogCiAjZGVmaW5lIEVUSEVSMTM5NF9HQVNQX0JVRkZFUlMgMTYKIAorLyogcmF3aXNvIGJ1ZmZlciBzaXplIC0gZHVlIHRvIGEgbGltaXRhdGlvbiBpbiByYXdpc28sIHdlIG11c3QgbGltaXQgZWFjaAorICogR0FTUCBidWZmZXIgdG8gYmUgbGVzcyB0aGFuIFBBR0VfU0laRS4gKi8KKyNkZWZpbmUgRVRIRVIxMzk0X0lTT19CVUZfU0laRQlFVEhFUjEzOTRfR0FTUF9CVUZGRVJTICogICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICAgbWluKCh1bnNpZ25lZCBpbnQpUEFHRV9TSVpFLCAgICAgICAgICAgICAgICAgXAorCQkJCSAgICAgICAyICogKDFVIDw8IChwcml2LT5ob3N0LT5jc3IubWF4X3JlYyArIDEpKSkKKwogLyogTm9kZSBzZXQgPT0gNjQgKi8KICNkZWZpbmUgTk9ERV9TRVQJCQkoQUxMX05PREVTICsgMSkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9ob3N0cy5jIGIvZHJpdmVycy9pZWVlMTM5NC9ob3N0cy5jCmluZGV4IGM1MDJjNmUuLmFlZWFlYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvaG9zdHMuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L2hvc3RzLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAKICNpbmNsdWRlICJjc3IxMjEyLmgiCiAjaW5jbHVkZSAiaWVlZTEzOTQuaCIKQEAgLTIxNyw3ICsyMTgsNyBAQAogCiAJLyogSUVFRSAxMzk0YS0yMDAwIHByb2hpYml0cyB1c2luZyB0aGUgc2FtZSBnZW5lcmF0aW9uIG51bWJlcgogCSAqIHR3aWNlIGluIGEgNjAgc2Vjb25kIHBlcmlvZC4gKi8KLQlpZiAoamlmZmllcyAtIGhvc3QtPmNzci5nZW5fdGltZXN0YW1wW25leHRfZ2VuXSA8IDYwICogSFopCisJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGhvc3QtPmNzci5nZW5fdGltZXN0YW1wW25leHRfZ2VuXSArIDYwICogSFopKQogCQkvKiBXYWl0IDYwIHNlY29uZHMgZnJvbSB0aGUgbGFzdCB0aW1lIHRoaXMgZ2VuZXJhdGlvbiBudW1iZXIgd2FzCiAJCSAqIHVzZWQuICovCiAJCXJlc2V0X2RlbGF5ID0gKDYwICogSFopICsgaG9zdC0+Y3NyLmdlbl90aW1lc3RhbXBbbmV4dF9nZW5dIC0gamlmZmllczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvaG9zdHMuaCBiL2RyaXZlcnMvaWVlZTEzOTQvaG9zdHMuaAppbmRleCA3MzllNzY4Li4zOGY0MjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2hvc3RzLmgKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9ob3N0cy5oCkBAIC0xMzUsMTcgKzEzNSwxNyBAQAogCiBlbnVtIHJlc2V0X3R5cGVzIHsKICAgICAgICAgLyogMTY2IG1pY3Jvc2Vjb25kIHJlc2V0IC0tIG9ubHkgdHlwZSBvZiByZXNldCBhdmFpbGFibGUgb24KLSAgICAgICAgICAgbm9uLTEzOTRhIGNhcGFibGUgSUVFRSAxMzk0IGNvbnRyb2xsZXJzICovCisgICAgICAgICAgIG5vbi0xMzk0YSBjYXBhYmxlIGNvbnRyb2xsZXJzICovCiAgICAgICAgIExPTkdfUkVTRVQsCiAKICAgICAgICAgLyogU2hvcnQgKGFyYml0cmF0ZWQpIHJlc2V0IC0tIG9ubHkgYXZhaWxhYmxlIG9uIDEzOTRhIGNhcGFibGUKLSAgICAgICAgICAgSUVFRSAxMzk0IGNhcGFibGUgY29udHJvbGxlcnMgKi8KKyAgICAgICAgICAgY29udHJvbGxlcnMgKi8KICAgICAgICAgU0hPUlRfUkVTRVQsCiAKLQkvKiBWYXJpYW50cywgdGhhdCBzZXQgZm9yY2Vfcm9vdCBiZWZvcmUgaXNzdWVpbmcgdGhlIGJ1cyByZXNldCAqLworCS8qIFZhcmlhbnRzIHRoYXQgc2V0IGZvcmNlX3Jvb3QgYmVmb3JlIGlzc3VlaW5nIHRoZSBidXMgcmVzZXQgKi8KIAlMT05HX1JFU0VUX0ZPUkNFX1JPT1QsIFNIT1JUX1JFU0VUX0ZPUkNFX1JPT1QsCiAKLQkvKiBWYXJpYW50cywgdGhhdCBjbGVhciBmb3JjZV9yb290IGJlZm9yZSBpc3N1ZWluZyB0aGUgYnVzIHJlc2V0ICovCisJLyogVmFyaWFudHMgdGhhdCBjbGVhciBmb3JjZV9yb290IGJlZm9yZSBpc3N1ZWluZyB0aGUgYnVzIHJlc2V0ICovCiAJTE9OR19SRVNFVF9OT19GT1JDRV9ST09ULCBTSE9SVF9SRVNFVF9OT19GT1JDRV9ST09UCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0X2NvcmUuYyBiL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTRfY29yZS5jCmluZGV4IGQ2MzM3NzAuLjMyYTFlMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTRfY29yZS5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTRfY29yZS5jCkBAIC03MCw3ICs3MCw3IEBACiBzdHJ1Y3QgY2xhc3MgKmhwc2JfcHJvdG9jb2xfY2xhc3M7CiAKICNpZmRlZiBDT05GSUdfSUVFRTEzOTRfVkVSQk9TRURFQlVHCi1zdGF0aWMgdm9pZCBkdW1wX3BhY2tldChjb25zdCBjaGFyICp0ZXh0LCBxdWFkbGV0X3QgKmRhdGEsIGludCBzaXplKQorc3RhdGljIHZvaWQgZHVtcF9wYWNrZXQoY29uc3QgY2hhciAqdGV4dCwgcXVhZGxldF90ICpkYXRhLCBpbnQgc2l6ZSwgaW50IHNwZWVkKQogewogCWludCBpOwogCkBAIC03OCwxMiArNzgsMTUgQEAKIAlzaXplID0gKHNpemUgPiA0ID8gNCA6IHNpemUpOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgImllZWUxMzk0OiAlcyIsIHRleHQpOworCWlmIChzcGVlZCA+IC0xICYmIHNwZWVkIDwgNikKKwkJcHJpbnRrKCIgYXQgJXMiLCBocHNiX3NwZWVkdG9fc3RyW3NwZWVkXSk7CisJcHJpbnRrKCI6Iik7CiAJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKIAkJcHJpbnRrKCIgJTA4eCIsIGRhdGFbaV0pOwogCXByaW50aygiXG4iKTsKIH0KICNlbHNlCi0jZGVmaW5lIGR1bXBfcGFja2V0KHgseSx6KQorI2RlZmluZSBkdW1wX3BhY2tldChhLGIsYyxkKQogI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGFib3J0X3JlcXVlc3RzKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QpOwpAQCAtNTQ0LDggKzU0Nyw3IEBACiAgICAgICAgICAgICAgICAgaWYgKHBhY2tldC0+ZGF0YV9zaXplKQogCQkJbWVtY3B5KCgodTgqKWRhdGEpICsgcGFja2V0LT5oZWFkZXJfc2l6ZSwgcGFja2V0LT5kYXRhLCBwYWNrZXQtPmRhdGFfc2l6ZSk7CiAKLSAgICAgICAgICAgICAgICBkdW1wX3BhY2tldCgic2VuZCBwYWNrZXQgbG9jYWw6IiwgcGFja2V0LT5oZWFkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0LT5oZWFkZXJfc2l6ZSk7CisgICAgICAgICAgICAgICAgZHVtcF9wYWNrZXQoInNlbmQgcGFja2V0IGxvY2FsIiwgcGFja2V0LT5oZWFkZXIsIHBhY2tldC0+aGVhZGVyX3NpemUsIC0xKTsKIAogICAgICAgICAgICAgICAgIGhwc2JfcGFja2V0X3NlbnQoaG9zdCwgcGFja2V0LCBwYWNrZXQtPmV4cGVjdF9yZXNwb25zZSA/IEFDS19QRU5ESU5HIDogQUNLX0NPTVBMRVRFKTsKICAgICAgICAgICAgICAgICBocHNiX3BhY2tldF9yZWNlaXZlZChob3N0LCBkYXRhLCBzaXplLCAwKTsKQEAgLTU2MSwyMSArNTYzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgTk9ERUlEX1RPX05PREUocGFja2V0LT5ub2RlX2lkKV07CiAgICAgICAgIH0KIAotI2lmZGVmIENPTkZJR19JRUVFMTM5NF9WRVJCT1NFREVCVUcKLSAgICAgICAgc3dpdGNoIChwYWNrZXQtPnNwZWVkX2NvZGUpIHsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgIGR1bXBfcGFja2V0KCJzZW5kIHBhY2tldCA0MDA6IiwgcGFja2V0LT5oZWFkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0LT5oZWFkZXJfc2l6ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICBkdW1wX3BhY2tldCgic2VuZCBwYWNrZXQgMjAwOiIsIHBhY2tldC0+aGVhZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tldC0+aGVhZGVyX3NpemUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGR1bXBfcGFja2V0KCJzZW5kIHBhY2tldCAxMDA6IiwgcGFja2V0LT5oZWFkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0LT5oZWFkZXJfc2l6ZSk7Ci0gICAgICAgIH0KLSNlbmRpZgorICAgICAgICBkdW1wX3BhY2tldCgic2VuZCBwYWNrZXQiLCBwYWNrZXQtPmhlYWRlciwgcGFja2V0LT5oZWFkZXJfc2l6ZSwgcGFja2V0LT5zcGVlZF9jb2RlKTsKIAogICAgICAgICByZXR1cm4gaG9zdC0+ZHJpdmVyLT50cmFuc21pdF9wYWNrZXQoaG9zdCwgcGFja2V0KTsKIH0KQEAgLTYzNiw3ICs2MjQsNyBAQAogCiAJaWYgKHBhY2tldCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgSFBTQl9ERUJVRygidW5zb2xpY2l0ZWQgcmVzcG9uc2UgcGFja2V0IHJlY2VpdmVkIC0gbm8gdGxhYmVsIG1hdGNoIik7Ci0gICAgICAgICAgICAgICAgZHVtcF9wYWNrZXQoImNvbnRlbnRzOiIsIGRhdGEsIDE2KTsKKyAgICAgICAgICAgICAgICBkdW1wX3BhY2tldCgiY29udGVudHMiLCBkYXRhLCAxNiwgLTEpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5wZW5kaW5nX3BhY2tldF9xdWV1ZS5sb2NrLCBmbGFncyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC02NzcsNyArNjY1LDcgQEAKICAgICAgICAgaWYgKCF0Y29kZV9tYXRjaCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5wZW5kaW5nX3BhY2tldF9xdWV1ZS5sb2NrLCBmbGFncyk7CiAgICAgICAgICAgICAgICAgSFBTQl9JTkZPKCJ1bnNvbGljaXRlZCByZXNwb25zZSBwYWNrZXQgcmVjZWl2ZWQgLSB0Y29kZSBtaXNtYXRjaCIpOwotICAgICAgICAgICAgICAgIGR1bXBfcGFja2V0KCJjb250ZW50czoiLCBkYXRhLCAxNik7CisgICAgICAgICAgICAgICAgZHVtcF9wYWNrZXQoImNvbnRlbnRzIiwgZGF0YSwgMTYsIC0xKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtOTE0LDcgKzkwMiw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgZHVtcF9wYWNrZXQoInJlY2VpdmVkIHBhY2tldDoiLCBkYXRhLCBzaXplKTsKKyAgICAgICAgZHVtcF9wYWNrZXQoInJlY2VpdmVkIHBhY2tldCIsIGRhdGEsIHNpemUsIC0xKTsKIAogICAgICAgICB0Y29kZSA9IChkYXRhWzBdID4+IDQpICYgMHhmOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuYyBiL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5jCmluZGV4IGIyMzMyMjUuLjM0N2VjZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5jCkBAIC02NCwxMCArNjQsMTAgQEAKIAlzdHJ1Y3Qgbm9kZW1ncl9jc3JfaW5mbyAqY2kgPSAoc3RydWN0IG5vZGVtZ3JfY3NyX2luZm8qKV9fY2k7CiAJaW50IGksIHJldCA9IDA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJZm9yIChpID0gMTsgOyBpKyspIHsKIAkJcmV0ID0gaHBzYl9yZWFkKGNpLT5ob3N0LCBjaS0+bm9kZWlkLCBjaS0+Z2VuZXJhdGlvbiwgYWRkciwKIAkJCQlidWZmZXIsIGxlbmd0aCk7Ci0JCWlmICghcmV0KQorCQlpZiAoIXJldCB8fCBpID09IDMpCiAJCQlicmVhazsKIAogCQlpZiAobXNsZWVwX2ludGVycnVwdGlibGUoMzM0KSkKQEAgLTE0MzgsOSArMTQzOCwxMyBAQAogCWlmIChob3N0LT5idXNtZ3JfaWQgPT0gMHhmZmZmICYmIGhvc3QtPm5vZGVfY291bnQgPiAxKQogCXsKIAkJdTE2IHJvb3Rfbm9kZSA9IGhvc3QtPm5vZGVfY291bnQgLSAxOwotCQlzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmUgPSBmaW5kX2VudHJ5X2J5X25vZGVpZChob3N0LCByb290X25vZGUgfCBMT0NBTF9CVVMpOwogCi0JCWlmIChuZSAmJiBuZS0+YnVzb3B0LmNtYykKKwkJLyogZ2V0IGN5Y2xlIG1hc3RlciBjYXBhYmlsaXR5IGZsYWcgZnJvbSByb290IG5vZGUgKi8KKwkJaWYgKGhvc3QtPmlzX2N5Y21zdCB8fAorCQkgICAgKCFocHNiX3JlYWQoaG9zdCwgTE9DQUxfQlVTIHwgcm9vdF9ub2RlLCBnZXRfaHBzYl9nZW5lcmF0aW9uKGhvc3QpLAorCQkJCShDU1JfUkVHSVNURVJfQkFTRSArIENTUl9DT05GSUdfUk9NICsgMiAqIHNpemVvZihxdWFkbGV0X3QpKSwKKwkJCQkmYmMsIHNpemVvZihxdWFkbGV0X3QpKSAmJgorCQkgICAgIGJlMzJfdG9fY3B1KGJjKSAmIDEgPDwgQ1NSX0NNQ19TSElGVCkpCiAJCQlocHNiX3NlbmRfcGh5X2NvbmZpZyhob3N0LCByb290X25vZGUsIC0xKTsKIAkJZWxzZSB7CiAJCQlIUFNCX0RFQlVHKCJUaGUgcm9vdCBub2RlIGlzIG5vdCBjeWNsZSBtYXN0ZXIgY2FwYWJsZTsgIgpAQCAtMTU1NywyNCArMTU2MSwxOSBAQAogCQkJfQogCQl9CiAKLQkJaWYgKCFub2RlbWdyX2NoZWNrX2lybV9jYXBhYmlsaXR5KGhvc3QsIHJlc2V0X2N5Y2xlcykpIHsKKwkJaWYgKCFub2RlbWdyX2NoZWNrX2lybV9jYXBhYmlsaXR5KGhvc3QsIHJlc2V0X2N5Y2xlcykgfHwKKwkJICAgICFub2RlbWdyX2RvX2lybV9kdXRpZXMoaG9zdCwgcmVzZXRfY3ljbGVzKSkgewogCQkJcmVzZXRfY3ljbGVzKys7CiAJCQl1cCgmbm9kZW1ncl9zZXJpYWxpemUpOwogCQkJY29udGludWU7CiAJCX0KKwkJcmVzZXRfY3ljbGVzID0gMDsKIAogCQkvKiBTY2FuIG91ciBub2RlcyB0byBnZXQgdGhlIGJ1cyBvcHRpb25zIGFuZCBjcmVhdGUgbm9kZQogCQkgKiBlbnRyaWVzLiBUaGlzIGRvZXMgbm90IGRvIHRoZSBzeXNmcyBzdHVmZiwgc2luY2UgdGhhdAogCQkgKiB3b3VsZCB0cmlnZ2VyIGhvdHBsdWcgY2FsbGJhY2tzIGFuZCBzdWNoLCB3aGljaCBpcyBhCiAJCSAqIGJhZCBpZGVhIGF0IHRoaXMgcG9pbnQuICovCiAJCW5vZGVtZ3Jfbm9kZV9zY2FuKGhpLCBnZW5lcmF0aW9uKTsKLQkJaWYgKCFub2RlbWdyX2RvX2lybV9kdXRpZXMoaG9zdCwgcmVzZXRfY3ljbGVzKSkgewotCQkJcmVzZXRfY3ljbGVzKys7Ci0JCQl1cCgmbm9kZW1ncl9zZXJpYWxpemUpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlyZXNldF9jeWNsZXMgPSAwOwogCiAJCS8qIFRoaXMgYWN0dWFsbHkgZG9lcyB0aGUgZnVsbCBwcm9iZSwgd2l0aCBzeXNmcwogCQkgKiByZWdpc3RyYXRpb24uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L29oY2kxMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L29oY2kxMzk0LmMKaW5kZXggMjcwMThjOC4uNGNmOWI4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9vaGNpMTM5NC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvb2hjaTEzOTQuYwpAQCAtMTYyLDcgKzE2Miw3IEBACiBwcmludGsobGV2ZWwgIiVzOiBmdy1ob3N0JWQ6ICIgZm10ICJcbiIgLCBPSENJMTM5NF9EUklWRVJfTkFNRSwgb2hjaS0+aG9zdC0+aWQgLCAjIyBhcmdzKQogCiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9Ci0JIiRSZXY6IDEyOTkgJCBCZW4gQ29sbGlucyA8YmNvbGxpbnNAZGViaWFuLm9yZz4iOworCSIkUmV2OiAxMzEzICQgQmVuIENvbGxpbnMgPGJjb2xsaW5zQGRlYmlhbi5vcmc+IjsKIAogLyogTW9kdWxlIFBhcmFtZXRlcnMgKi8KIHN0YXRpYyBpbnQgcGh5c19kbWEgPSAxOwpAQCAtMTA4NCw3ICsxMDg0LDcgQEAKIAkJCWluaXRpYWxpemVfZG1hX3Jjdl9jdHgoJm9oY2ktPmlyX2xlZ2FjeV9jb250ZXh0LCAxKTsKIAogCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKLQkJCQlQUklOVChLRVJOX0VSUiwgIklSIGxlZ2FjeSBhY3RpdmF0ZWQiKTsKKwkJCQlEQkdNU0coIklSIGxlZ2FjeSBhY3RpdmF0ZWQiKTsKIAkJfQogCiAgICAgICAgICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJm9oY2ktPklSX2NoYW5uZWxfbG9jaywgZmxhZ3MpOwpAQCAtMjI4Myw4ICsyMjgzLDkgQEAKIHsKIAlzdHJ1Y3Qgb2hjaTEzOTRfaXNvX3Rhc2tsZXQgKnQ7CiAJdW5zaWduZWQgbG9uZyBtYXNrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2soJm9oY2ktPmlzb190YXNrbGV0X2xpc3RfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm9oY2ktPmlzb190YXNrbGV0X2xpc3RfbG9jaywgZmxhZ3MpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmb2hjaS0+aXNvX3Rhc2tsZXRfbGlzdCwgbGluaykgewogCQltYXNrID0gMSA8PCB0LT5jb250ZXh0OwpAQCAtMjI5NSw4ICsyMjk2LDcgQEAKIAkJCXRhc2tsZXRfc2NoZWR1bGUoJnQtPnRhc2tsZXQpOwogCX0KIAotCXNwaW5fdW5sb2NrKCZvaGNpLT5pc29fdGFza2xldF9saXN0X2xvY2spOwotCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2hjaS0+aXNvX3Rhc2tsZXRfbGlzdF9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBvaGNpX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvcmF3MTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMKaW5kZXggYjRmYTE0Ny4uMDQ3MGY3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMKQEAgLTk4LDcgKzk4LDcgQEAKIAogc3RhdGljIHZvaWQgcXVldWVfY29tcGxldGVfY2Ioc3RydWN0IHBlbmRpbmdfcmVxdWVzdCAqcmVxKTsKIAotc3RhdGljIHN0cnVjdCBwZW5kaW5nX3JlcXVlc3QgKl9fYWxsb2NfcGVuZGluZ19yZXF1ZXN0KHVuc2lnbmVkIGludCBfX25vY2FzdCBmbGFncykKK3N0YXRpYyBzdHJ1Y3QgcGVuZGluZ19yZXF1ZXN0ICpfX2FsbG9jX3BlbmRpbmdfcmVxdWVzdChnZnBfdCBmbGFncykKIHsKIAlzdHJ1Y3QgcGVuZGluZ19yZXF1ZXN0ICpyZXE7CiAKQEAgLTQxMiw2ICs0MTIsNyBAQAogc3RhdGljIHNzaXplX3QgcmF3MTM5NF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqIGJ1ZmZlciwKIAkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqIG9mZnNldF9pc19pZ25vcmVkKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGZpbGVfaW5mbyAqZmkgPSAoc3RydWN0IGZpbGVfaW5mbyAqKWZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsaDsKIAlzdHJ1Y3QgcGVuZGluZ19yZXF1ZXN0ICpyZXE7CkBAIC00MzUsMTAgKzQzNiwxMCBAQAogCQl9CiAJfQogCi0Jc3Bpbl9sb2NrX2lycSgmZmktPnJlcWxpc3RzX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZmaS0+cmVxbGlzdHNfbG9jaywgZmxhZ3MpOwogCWxoID0gZmktPnJlcV9jb21wbGV0ZS5uZXh0OwogCWxpc3RfZGVsKGxoKTsKLQlzcGluX3VubG9ja19pcnEoJmZpLT5yZXFsaXN0c19sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmaS0+cmVxbGlzdHNfbG9jaywgZmxhZ3MpOwogCiAJcmVxID0gbGlzdF9lbnRyeShsaCwgc3RydWN0IHBlbmRpbmdfcmVxdWVzdCwgbGlzdCk7CiAKQEAgLTQ4Niw2ICs0ODcsNyBAQAogCiBzdGF0aWMgaW50IHN0YXRlX2luaXRpYWxpemVkKHN0cnVjdCBmaWxlX2luZm8gKmZpLCBzdHJ1Y3QgcGVuZGluZ19yZXF1ZXN0ICpyZXEpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgaG9zdF9pbmZvICpoaTsKIAlzdHJ1Y3QgcmF3MTM5NF9raG9zdF9saXN0ICpraGw7CiAKQEAgLTQ5OSw3ICs1MDEsNyBAQAogCiAJc3dpdGNoIChyZXEtPnJlcS50eXBlKSB7CiAJY2FzZSBSQVcxMzk0X1JFUV9MSVNUX0NBUkRTOgotCQlzcGluX2xvY2tfaXJxKCZob3N0X2luZm9fbG9jayk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0X2luZm9fbG9jaywgZmxhZ3MpOwogCQlraGwgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmF3MTM5NF9raG9zdF9saXN0KSAqIGhvc3RfY291bnQsCiAJCQkgICAgICBTTEFCX0FUT01JQyk7CiAKQEAgLTUxMyw3ICs1MTUsNyBAQAogCQkJCWtobCsrOwogCQkJfQogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycSgmaG9zdF9pbmZvX2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0X2luZm9fbG9jaywgZmxhZ3MpOwogCiAJCWlmIChraGwgIT0gTlVMTCkgewogCQkJcmVxLT5yZXEuZXJyb3IgPSBSQVcxMzk0X0VSUk9SX05PTkU7CkBAIC01MjgsNyArNTMwLDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFJBVzEzOTRfUkVRX1NFVF9DQVJEOgotCQlzcGluX2xvY2tfaXJxKCZob3N0X2luZm9fbG9jayk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0X2luZm9fbG9jaywgZmxhZ3MpOwogCQlpZiAocmVxLT5yZXEubWlzYyA8IGhvc3RfY291bnQpIHsKIAkJCWxpc3RfZm9yX2VhY2hfZW50cnkoaGksICZob3N0X2luZm9fbGlzdCwgbGlzdCkgewogCQkJCWlmICghcmVxLT5yZXEubWlzYy0tKQpAQCAtNTUwLDcgKzU1Miw3IEBACiAJCX0gZWxzZSB7CiAJCQlyZXEtPnJlcS5lcnJvciA9IFJBVzEzOTRfRVJST1JfSU5WQUxJRF9BUkc7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxKCZob3N0X2luZm9fbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3RfaW5mb19sb2NrLCBmbGFncyk7CiAKIAkJcmVxLT5yZXEubGVuZ3RoID0gMDsKIAkJYnJlYWs7CkBAIC01NjksNyArNTcxLDYgQEAKIHsKIAlpbnQgY2hhbm5lbCA9IHJlcS0+cmVxLm1pc2M7CiAKLQlzcGluX2xvY2tfaXJxKCZob3N0X2luZm9fbG9jayk7CiAJaWYgKChjaGFubmVsID4gNjMpIHx8IChjaGFubmVsIDwgLTY0KSkgewogCQlyZXEtPnJlcS5lcnJvciA9IFJBVzEzOTRfRVJST1JfSU5WQUxJRF9BUkc7CiAJfSBlbHNlIGlmIChjaGFubmVsID49IDApIHsKQEAgLTYwMSw3ICs2MDIsNiBAQAogCiAJcmVxLT5yZXEubGVuZ3RoID0gMDsKIAlxdWV1ZV9jb21wbGV0ZV9yZXEocmVxKTsKLQlzcGluX3VubG9ja19pcnEoJmhvc3RfaW5mb19sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgaGFuZGxlX2ZjcF9saXN0ZW4oc3RydWN0IGZpbGVfaW5mbyAqZmksIHN0cnVjdCBwZW5kaW5nX3JlcXVlc3QgKnJlcSkKQEAgLTYyNyw2ICs2MjcsNyBAQAogc3RhdGljIGludCBoYW5kbGVfYXN5bmNfcmVxdWVzdChzdHJ1Y3QgZmlsZV9pbmZvICpmaSwKIAkJCQlzdHJ1Y3QgcGVuZGluZ19yZXF1ZXN0ICpyZXEsIGludCBub2RlKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGhwc2JfcGFja2V0ICpwYWNrZXQgPSBOVUxMOwogCXU2NCBhZGRyID0gcmVxLT5yZXEuYWRkcmVzcyAmIDB4ZmZmZmZmZmZmZmZmVUxMOwogCkBAIC03NjEsOSArNzYyLDkgQEAKIAlocHNiX3NldF9wYWNrZXRfY29tcGxldGVfdGFzayhwYWNrZXQsCiAJCQkJICAgICAgKHZvaWQgKCopKHZvaWQgKikpcXVldWVfY29tcGxldGVfY2IsIHJlcSk7CiAKLQlzcGluX2xvY2tfaXJxKCZmaS0+cmVxbGlzdHNfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmZpLT5yZXFsaXN0c19sb2NrLCBmbGFncyk7CiAJbGlzdF9hZGRfdGFpbCgmcmVxLT5saXN0LCAmZmktPnJlcV9wZW5kaW5nKTsKLQlzcGluX3VubG9ja19pcnEoJmZpLT5yZXFsaXN0c19sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmaS0+cmVxbGlzdHNfbG9jaywgZmxhZ3MpOwogCiAJcGFja2V0LT5nZW5lcmF0aW9uID0gcmVxLT5yZXEuZ2VuZXJhdGlvbjsKIApAQCAtNzc5LDYgKzc4MCw3IEBACiBzdGF0aWMgaW50IGhhbmRsZV9pc29fc2VuZChzdHJ1Y3QgZmlsZV9pbmZvICpmaSwgc3RydWN0IHBlbmRpbmdfcmVxdWVzdCAqcmVxLAogCQkJICAgaW50IGNoYW5uZWwpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgaHBzYl9wYWNrZXQgKnBhY2tldDsKIAogCXBhY2tldCA9IGhwc2JfbWFrZV9pc29wYWNrZXQoZmktPmhvc3QsIHJlcS0+cmVxLmxlbmd0aCwgY2hhbm5lbCAmIDB4M2YsCkBAIC04MDQsOSArODA2LDkgQEAKIAkJCQkgICAgICAodm9pZCAoKikodm9pZCAqKSlxdWV1ZV9jb21wbGV0ZV9yZXEsCiAJCQkJICAgICAgcmVxKTsKIAotCXNwaW5fbG9ja19pcnEoJmZpLT5yZXFsaXN0c19sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZmktPnJlcWxpc3RzX2xvY2ssIGZsYWdzKTsKIAlsaXN0X2FkZF90YWlsKCZyZXEtPmxpc3QsICZmaS0+cmVxX3BlbmRpbmcpOwotCXNwaW5fdW5sb2NrX2lycSgmZmktPnJlcWxpc3RzX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZpLT5yZXFsaXN0c19sb2NrLCBmbGFncyk7CiAKIAkvKiBVcGRhdGUgdGhlIGdlbmVyYXRpb24gb2YgdGhlIHBhY2tldCBqdXN0IGJlZm9yZSBzZW5kaW5nLiAqLwogCXBhY2tldC0+Z2VuZXJhdGlvbiA9IHJlcS0+cmVxLmdlbmVyYXRpb247CkBAIC04MjEsNiArODIzLDcgQEAKIAogc3RhdGljIGludCBoYW5kbGVfYXN5bmNfc2VuZChzdHJ1Y3QgZmlsZV9pbmZvICpmaSwgc3RydWN0IHBlbmRpbmdfcmVxdWVzdCAqcmVxKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGhwc2JfcGFja2V0ICpwYWNrZXQ7CiAJaW50IGhlYWRlcl9sZW5ndGggPSByZXEtPnJlcS5taXNjICYgMHhmZmZmOwogCWludCBleHBlY3RfcmVzcG9uc2UgPSByZXEtPnJlcS5taXNjID4+IDE2OwpAQCAtODY3LDkgKzg3MCw5IEBACiAJaHBzYl9zZXRfcGFja2V0X2NvbXBsZXRlX3Rhc2socGFja2V0LAogCQkJCSAgICAgICh2b2lkICgqKSh2b2lkICopKXF1ZXVlX2NvbXBsZXRlX2NiLCByZXEpOwogCi0Jc3Bpbl9sb2NrX2lycSgmZmktPnJlcWxpc3RzX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZmaS0+cmVxbGlzdHNfbG9jaywgZmxhZ3MpOwogCWxpc3RfYWRkX3RhaWwoJnJlcS0+bGlzdCwgJmZpLT5yZXFfcGVuZGluZyk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZmaS0+cmVxbGlzdHNfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmktPnJlcWxpc3RzX2xvY2ssIGZsYWdzKTsKIAogCS8qIFVwZGF0ZSB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgcGFja2V0IGp1c3QgYmVmb3JlIHNlbmRpbmcuICovCiAJcGFja2V0LT5nZW5lcmF0aW9uID0gcmVxLT5yZXEuZ2VuZXJhdGlvbjsKQEAgLTg4NSw2ICs4ODgsNyBAQAogc3RhdGljIGludCBhcm1fcmVhZChzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0LCBpbnQgbm9kZWlkLCBxdWFkbGV0X3QgKiBidWZmZXIsCiAJCSAgICB1NjQgYWRkciwgc2l6ZV90IGxlbmd0aCwgdTE2IGZsYWdzKQogeworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CiAJc3RydWN0IHBlbmRpbmdfcmVxdWVzdCAqcmVxOwogCXN0cnVjdCBob3N0X2luZm8gKmhpOwogCXN0cnVjdCBmaWxlX2luZm8gKmZpID0gTlVMTDsKQEAgLTg5OSw3ICs5MDMsNyBAQAogCSAgICAgICAiYWRkcjogJTQuNHggJTguOHggbGVuZ3RoOiAlWnUiLCBub2RlaWQsCiAJICAgICAgICh1MTYpICgoYWRkciA+PiAzMikgJiAweEZGRkYpLCAodTMyKSAoYWRkciAmIDB4RkZGRkZGRkYpLAogCSAgICAgICBsZW5ndGgpOwotCXNwaW5fbG9jaygmaG9zdF9pbmZvX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0X2luZm9fbG9jaywgaXJxZmxhZ3MpOwogCWhpID0gZmluZF9ob3N0X2luZm8oaG9zdCk7CS8qIHNlYXJjaCBhZGRyZXNzLWVudHJ5ICovCiAJaWYgKGhpICE9IE5VTEwpIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShmaSwgJmhpLT5maWxlX2luZm9fbGlzdCwgbGlzdCkgewpAQCAtOTI0LDcgKzkyOCw3IEBACiAJaWYgKCFmb3VuZCkgewogCQlwcmludGsoS0VSTl9FUlIgInJhdzEzOTQ6IGFybV9yZWFkIEZBSUxFRCBhZGRyX2VudHJ5IG5vdCBmb3VuZCIKIAkJICAgICAgICIgLT4gcmNvZGVfYWRkcmVzc19lcnJvclxuIik7Ci0JCXNwaW5fdW5sb2NrKCZob3N0X2luZm9fbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3RfaW5mb19sb2NrLCBpcnFmbGFncyk7CiAJCXJldHVybiAoUkNPREVfQUREUkVTU19FUlJPUik7CiAJfSBlbHNlIHsKIAkJREJHTVNHKCJhcm1fcmVhZCBhZGRyX2VudHJ5IEZPVU5EIik7CkBAIC05NTQsNyArOTU4LDcgQEAKIAkJcmVxID0gX19hbGxvY19wZW5kaW5nX3JlcXVlc3QoU0xBQl9BVE9NSUMpOwogCQlpZiAoIXJlcSkgewogCQkJREJHTVNHKCJhcm1fcmVhZCAtPiByY29kZV9jb25mbGljdF9lcnJvciIpOwotCQkJc3Bpbl91bmxvY2soJmhvc3RfaW5mb19sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3RfaW5mb19sb2NrLCBpcnFmbGFncyk7CiAJCQlyZXR1cm4gKFJDT0RFX0NPTkZMSUNUX0VSUk9SKTsJLyogQSByZXNvdXJjZSBjb25mbGljdCB3YXMgZGV0ZWN0ZWQuCiAJCQkJCQkJICAgVGhlIHJlcXVlc3QgbWF5IGJlIHJldHJpZWQgKi8KIAkJfQpAQCAtOTc0LDcgKzk3OCw3IEBACiAJCWlmICghKHJlcS0+ZGF0YSkpIHsKIAkJCWZyZWVfcGVuZGluZ19yZXF1ZXN0KHJlcSk7CiAJCQlEQkdNU0coImFybV9yZWFkIC0+IHJjb2RlX2NvbmZsaWN0X2Vycm9yIik7Ci0JCQlzcGluX3VubG9jaygmaG9zdF9pbmZvX2xvY2spOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdF9pbmZvX2xvY2ssIGlycWZsYWdzKTsKIAkJCXJldHVybiAoUkNPREVfQ09ORkxJQ1RfRVJST1IpOwkvKiBBIHJlc291cmNlIGNvbmZsaWN0IHdhcyBkZXRlY3RlZC4KIAkJCQkJCQkgICBUaGUgcmVxdWVzdCBtYXkgYmUgcmV0cmllZCAqLwogCQl9CkBAIC0xMDMxLDEzICsxMDM1LDE0IEBACiAJCQkgICAgc2l6ZW9mKHN0cnVjdCBhcm1fcmVxdWVzdCkpOwogCQlxdWV1ZV9jb21wbGV0ZV9yZXEocmVxKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJmhvc3RfaW5mb19sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0X2luZm9fbG9jaywgaXJxZmxhZ3MpOwogCXJldHVybiAocmNvZGUpOwogfQogCiBzdGF0aWMgaW50IGFybV93cml0ZShzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0LCBpbnQgbm9kZWlkLCBpbnQgZGVzdGlkLAogCQkgICAgIHF1YWRsZXRfdCAqIGRhdGEsIHU2NCBhZGRyLCBzaXplX3QgbGVuZ3RoLCB1MTYgZmxhZ3MpCiB7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIAlzdHJ1Y3QgcGVuZGluZ19yZXF1ZXN0ICpyZXE7CiAJc3RydWN0IGhvc3RfaW5mbyAqaGk7CiAJc3RydWN0IGZpbGVfaW5mbyAqZmkgPSBOVUxMOwpAQCAtMTA1Miw3ICsxMDU3LDcgQEAKIAkgICAgICAgImFkZHI6ICU0LjR4ICU4Ljh4IGxlbmd0aDogJVp1Iiwgbm9kZWlkLAogCSAgICAgICAodTE2KSAoKGFkZHIgPj4gMzIpICYgMHhGRkZGKSwgKHUzMikgKGFkZHIgJiAweEZGRkZGRkZGKSwKIAkgICAgICAgbGVuZ3RoKTsKLQlzcGluX2xvY2soJmhvc3RfaW5mb19sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdF9pbmZvX2xvY2ssIGlycWZsYWdzKTsKIAloaSA9IGZpbmRfaG9zdF9pbmZvKGhvc3QpOwkvKiBzZWFyY2ggYWRkcmVzcy1lbnRyeSAqLwogCWlmIChoaSAhPSBOVUxMKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoZmksICZoaS0+ZmlsZV9pbmZvX2xpc3QsIGxpc3QpIHsKQEAgLTEwNzcsNyArMTA4Miw3IEBACiAJaWYgKCFmb3VuZCkgewogCQlwcmludGsoS0VSTl9FUlIgInJhdzEzOTQ6IGFybV93cml0ZSBGQUlMRUQgYWRkcl9lbnRyeSBub3QgZm91bmQiCiAJCSAgICAgICAiIC0+IHJjb2RlX2FkZHJlc3NfZXJyb3JcbiIpOwotCQlzcGluX3VubG9jaygmaG9zdF9pbmZvX2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0X2luZm9fbG9jaywgaXJxZmxhZ3MpOwogCQlyZXR1cm4gKFJDT0RFX0FERFJFU1NfRVJST1IpOwogCX0gZWxzZSB7CiAJCURCR01TRygiYXJtX3dyaXRlIGFkZHJfZW50cnkgRk9VTkQiKTsKQEAgLTExMDYsNyArMTExMSw3IEBACiAJCXJlcSA9IF9fYWxsb2NfcGVuZGluZ19yZXF1ZXN0KFNMQUJfQVRPTUlDKTsKIAkJaWYgKCFyZXEpIHsKIAkJCURCR01TRygiYXJtX3dyaXRlIC0+IHJjb2RlX2NvbmZsaWN0X2Vycm9yIik7Ci0JCQlzcGluX3VubG9jaygmaG9zdF9pbmZvX2xvY2spOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdF9pbmZvX2xvY2ssIGlycWZsYWdzKTsKIAkJCXJldHVybiAoUkNPREVfQ09ORkxJQ1RfRVJST1IpOwkvKiBBIHJlc291cmNlIGNvbmZsaWN0IHdhcyBkZXRlY3RlZC4KIAkJCQkJCQkgICBUaGUgcmVxdWVzdCBteSBiZSByZXRyaWVkICovCiAJCX0KQEAgLTExMTgsNyArMTEyMyw3IEBACiAJCWlmICghKHJlcS0+ZGF0YSkpIHsKIAkJCWZyZWVfcGVuZGluZ19yZXF1ZXN0KHJlcSk7CiAJCQlEQkdNU0coImFybV93cml0ZSAtPiByY29kZV9jb25mbGljdF9lcnJvciIpOwotCQkJc3Bpbl91bmxvY2soJmhvc3RfaW5mb19sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3RfaW5mb19sb2NrLCBpcnFmbGFncyk7CiAJCQlyZXR1cm4gKFJDT0RFX0NPTkZMSUNUX0VSUk9SKTsJLyogQSByZXNvdXJjZSBjb25mbGljdCB3YXMgZGV0ZWN0ZWQuCiAJCQkJCQkJICAgVGhlIHJlcXVlc3QgbWF5IGJlIHJldHJpZWQgKi8KIAkJfQpAQCAtMTE2NSw3ICsxMTcwLDcgQEAKIAkJCSAgICBzaXplb2Yoc3RydWN0IGFybV9yZXF1ZXN0KSk7CiAJCXF1ZXVlX2NvbXBsZXRlX3JlcShyZXEpOwogCX0KLQlzcGluX3VubG9jaygmaG9zdF9pbmZvX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3RfaW5mb19sb2NrLCBpcnFmbGFncyk7CiAJcmV0dXJuIChyY29kZSk7CiB9CiAKQEAgLTExNzMsNiArMTE3OCw3IEBACiAJCSAgICB1NjQgYWRkciwgcXVhZGxldF90IGRhdGEsIHF1YWRsZXRfdCBhcmcsIGludCBleHRfdGNvZGUsCiAJCSAgICB1MTYgZmxhZ3MpCiB7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIAlzdHJ1Y3QgcGVuZGluZ19yZXF1ZXN0ICpyZXE7CiAJc3RydWN0IGhvc3RfaW5mbyAqaGk7CiAJc3RydWN0IGZpbGVfaW5mbyAqZmkgPSBOVUxMOwpAQCAtMTE5OCw3ICsxMjA0LDcgQEAKIAkJICAgICAgICh1MzIpIChhZGRyICYgMHhGRkZGRkZGRiksIGV4dF90Y29kZSAmIDB4RkYsCiAJCSAgICAgICBiZTMyX3RvX2NwdShkYXRhKSwgYmUzMl90b19jcHUoYXJnKSk7CiAJfQotCXNwaW5fbG9jaygmaG9zdF9pbmZvX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0X2luZm9fbG9jaywgaXJxZmxhZ3MpOwogCWhpID0gZmluZF9ob3N0X2luZm8oaG9zdCk7CS8qIHNlYXJjaCBhZGRyZXNzLWVudHJ5ICovCiAJaWYgKGhpICE9IE5VTEwpIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShmaSwgJmhpLT5maWxlX2luZm9fbGlzdCwgbGlzdCkgewpAQCAtMTIyNCw3ICsxMjMwLDcgQEAKIAlpZiAoIWZvdW5kKSB7CiAJCXByaW50ayhLRVJOX0VSUiAicmF3MTM5NDogYXJtX2xvY2sgRkFJTEVEIGFkZHJfZW50cnkgbm90IGZvdW5kIgogCQkgICAgICAgIiAtPiByY29kZV9hZGRyZXNzX2Vycm9yXG4iKTsKLQkJc3Bpbl91bmxvY2soJmhvc3RfaW5mb19sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdF9pbmZvX2xvY2ssIGlycWZsYWdzKTsKIAkJcmV0dXJuIChSQ09ERV9BRERSRVNTX0VSUk9SKTsKIAl9IGVsc2UgewogCQlEQkdNU0coImFybV9sb2NrIGFkZHJfZW50cnkgRk9VTkQiKTsKQEAgLTEzMDcsNyArMTMxMyw3IEBACiAJCXJlcSA9IF9fYWxsb2NfcGVuZGluZ19yZXF1ZXN0KFNMQUJfQVRPTUlDKTsKIAkJaWYgKCFyZXEpIHsKIAkJCURCR01TRygiYXJtX2xvY2sgLT4gcmNvZGVfY29uZmxpY3RfZXJyb3IiKTsKLQkJCXNwaW5fdW5sb2NrKCZob3N0X2luZm9fbG9jayk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0X2luZm9fbG9jaywgaXJxZmxhZ3MpOwogCQkJcmV0dXJuIChSQ09ERV9DT05GTElDVF9FUlJPUik7CS8qIEEgcmVzb3VyY2UgY29uZmxpY3Qgd2FzIGRldGVjdGVkLgogCQkJCQkJCSAgIFRoZSByZXF1ZXN0IG1heSBiZSByZXRyaWVkICovCiAJCX0KQEAgLTEzMTYsNyArMTMyMiw3IEBACiAJCWlmICghKHJlcS0+ZGF0YSkpIHsKIAkJCWZyZWVfcGVuZGluZ19yZXF1ZXN0KHJlcSk7CiAJCQlEQkdNU0coImFybV9sb2NrIC0+IHJjb2RlX2NvbmZsaWN0X2Vycm9yIik7Ci0JCQlzcGluX3VubG9jaygmaG9zdF9pbmZvX2xvY2spOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdF9pbmZvX2xvY2ssIGlycWZsYWdzKTsKIAkJCXJldHVybiAoUkNPREVfQ09ORkxJQ1RfRVJST1IpOwkvKiBBIHJlc291cmNlIGNvbmZsaWN0IHdhcyBkZXRlY3RlZC4KIAkJCQkJCQkgICBUaGUgcmVxdWVzdCBtYXkgYmUgcmV0cmllZCAqLwogCQl9CkBAIC0xMzgyLDcgKzEzODgsNyBAQAogCQkJICAgIHNpemVvZihzdHJ1Y3QgYXJtX3Jlc3BvbnNlKSArIDIgKiBzaXplb2YoKnN0b3JlKSk7CiAJCXF1ZXVlX2NvbXBsZXRlX3JlcShyZXEpOwogCX0KLQlzcGluX3VubG9jaygmaG9zdF9pbmZvX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3RfaW5mb19sb2NrLCBpcnFmbGFncyk7CiAJcmV0dXJuIChyY29kZSk7CiB9CiAKQEAgLTEzOTAsNiArMTM5Niw3IEBACiAJCSAgICAgIHU2NCBhZGRyLCBvY3RsZXRfdCBkYXRhLCBvY3RsZXRfdCBhcmcsIGludCBleHRfdGNvZGUsCiAJCSAgICAgIHUxNiBmbGFncykKIHsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCXN0cnVjdCBwZW5kaW5nX3JlcXVlc3QgKnJlcTsKIAlzdHJ1Y3QgaG9zdF9pbmZvICpoaTsKIAlzdHJ1Y3QgZmlsZV9pbmZvICpmaSA9IE5VTEw7CkBAIC0xNDIyLDcgKzE0MjksNyBAQAogCQkgICAgICAgKHUzMikgKChiZTY0X3RvX2NwdShhcmcpID4+IDMyKSAmIDB4RkZGRkZGRkYpLAogCQkgICAgICAgKHUzMikgKGJlNjRfdG9fY3B1KGFyZykgJiAweEZGRkZGRkZGKSk7CiAJfQotCXNwaW5fbG9jaygmaG9zdF9pbmZvX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0X2luZm9fbG9jaywgaXJxZmxhZ3MpOwogCWhpID0gZmluZF9ob3N0X2luZm8oaG9zdCk7CS8qIHNlYXJjaCBhZGRyZXNzZW50cnkgaW4gZmlsZV9pbmZvJ3MgZm9yIGhvc3QgKi8KIAlpZiAoaGkgIT0gTlVMTCkgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZpLCAmaGktPmZpbGVfaW5mb19saXN0LCBsaXN0KSB7CkBAIC0xNDQ5LDcgKzE0NTYsNyBAQAogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICJyYXcxMzk0OiBhcm1fbG9jazY0IEZBSUxFRCBhZGRyX2VudHJ5IG5vdCBmb3VuZCIKIAkJICAgICAgICIgLT4gcmNvZGVfYWRkcmVzc19lcnJvclxuIik7Ci0JCXNwaW5fdW5sb2NrKCZob3N0X2luZm9fbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3RfaW5mb19sb2NrLCBpcnFmbGFncyk7CiAJCXJldHVybiAoUkNPREVfQUREUkVTU19FUlJPUik7CiAJfSBlbHNlIHsKIAkJREJHTVNHKCJhcm1fbG9jazY0IGFkZHJfZW50cnkgRk9VTkQiKTsKQEAgLTE1MzMsNyArMTU0MCw3IEBACiAJCURCR01TRygiYXJtX2xvY2s2NCAtPiBlbnRlcmluZyBub3RpZmljYXRpb24tc2VjdGlvbiIpOwogCQlyZXEgPSBfX2FsbG9jX3BlbmRpbmdfcmVxdWVzdChTTEFCX0FUT01JQyk7CiAJCWlmICghcmVxKSB7Ci0JCQlzcGluX3VubG9jaygmaG9zdF9pbmZvX2xvY2spOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdF9pbmZvX2xvY2ssIGlycWZsYWdzKTsKIAkJCURCR01TRygiYXJtX2xvY2s2NCAtPiByY29kZV9jb25mbGljdF9lcnJvciIpOwogCQkJcmV0dXJuIChSQ09ERV9DT05GTElDVF9FUlJPUik7CS8qIEEgcmVzb3VyY2UgY29uZmxpY3Qgd2FzIGRldGVjdGVkLgogCQkJCQkJCSAgIFRoZSByZXF1ZXN0IG1heSBiZSByZXRyaWVkICovCkBAIC0xNTQyLDcgKzE1NDksNyBAQAogCQlyZXEtPmRhdGEgPSBrbWFsbG9jKHNpemUsIFNMQUJfQVRPTUlDKTsKIAkJaWYgKCEocmVxLT5kYXRhKSkgewogCQkJZnJlZV9wZW5kaW5nX3JlcXVlc3QocmVxKTsKLQkJCXNwaW5fdW5sb2NrKCZob3N0X2luZm9fbG9jayk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0X2luZm9fbG9jaywgaXJxZmxhZ3MpOwogCQkJREJHTVNHKCJhcm1fbG9jazY0IC0+IHJjb2RlX2NvbmZsaWN0X2Vycm9yIik7CiAJCQlyZXR1cm4gKFJDT0RFX0NPTkZMSUNUX0VSUk9SKTsJLyogQSByZXNvdXJjZSBjb25mbGljdCB3YXMgZGV0ZWN0ZWQuCiAJCQkJCQkJICAgVGhlIHJlcXVlc3QgbWF5IGJlIHJldHJpZWQgKi8KQEAgLTE2MDksNyArMTYxNiw3IEBACiAJCQkgICAgc2l6ZW9mKHN0cnVjdCBhcm1fcmVzcG9uc2UpICsgMiAqIHNpemVvZigqc3RvcmUpKTsKIAkJcXVldWVfY29tcGxldGVfcmVxKHJlcSk7CiAJfQotCXNwaW5fdW5sb2NrKCZob3N0X2luZm9fbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdF9pbmZvX2xvY2ssIGlycWZsYWdzKTsKIAlyZXR1cm4gKHJjb2RlKTsKIH0KIApAQCAtMTk4MCw2ICsxOTg3LDcgQEAKIAlzdHJ1Y3QgaHBzYl9wYWNrZXQgKnBhY2tldCA9IE5VTEw7CiAJaW50IHJldHZhbCA9IDA7CiAJcXVhZGxldF90IGRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRhdGEgPSBiZTMyX3RvX2NwdSgodTMyKSByZXEtPnJlcS5zZW5kYik7CiAJREJHTVNHKCJ3cml0ZV9waHlwYWNrZXQgY2FsbGVkIC0gcXVhZGxldCAweCU4Ljh4ICIsIGRhdGEpOwpAQCAtMTk5MCw5ICsxOTk4LDkgQEAKIAlyZXEtPnBhY2tldCA9IHBhY2tldDsKIAlocHNiX3NldF9wYWNrZXRfY29tcGxldGVfdGFzayhwYWNrZXQsCiAJCQkJICAgICAgKHZvaWQgKCopKHZvaWQgKikpcXVldWVfY29tcGxldGVfY2IsIHJlcSk7Ci0Jc3Bpbl9sb2NrX2lycSgmZmktPnJlcWxpc3RzX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZmaS0+cmVxbGlzdHNfbG9jaywgZmxhZ3MpOwogCWxpc3RfYWRkX3RhaWwoJnJlcS0+bGlzdCwgJmZpLT5yZXFfcGVuZGluZyk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZmaS0+cmVxbGlzdHNfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmktPnJlcWxpc3RzX2xvY2ssIGZsYWdzKTsKIAlwYWNrZXQtPmdlbmVyYXRpb24gPSByZXEtPnJlcS5nZW5lcmF0aW9uOwogCXJldHZhbCA9IGhwc2Jfc2VuZF9wYWNrZXQocGFja2V0KTsKIAlEQkdNU0coIndyaXRlX3BoeXBhY2tldCBzZW5kX3BhY2tldCBjYWxsZWQgPT4gcmV0dmFsOiAlZCAiLCByZXR2YWwpOwpAQCAtMjY1OSwxNCArMjY2NywxNSBAQAogewogCXN0cnVjdCBmaWxlX2luZm8gKmZpID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGludCBtYXNrID0gUE9MTE9VVCB8IFBPTExXUk5PUk07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXBvbGxfd2FpdChmaWxlLCAmZmktPnBvbGxfd2FpdF9jb21wbGV0ZSwgcHQpOwogCi0Jc3Bpbl9sb2NrX2lycSgmZmktPnJlcWxpc3RzX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZmaS0+cmVxbGlzdHNfbG9jaywgZmxhZ3MpOwogCWlmICghbGlzdF9lbXB0eSgmZmktPnJlcV9jb21wbGV0ZSkpIHsKIAkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOwogCX0KLQlzcGluX3VubG9ja19pcnEoJmZpLT5yZXFsaXN0c19sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmaS0+cmVxbGlzdHNfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIG1hc2s7CiB9CkBAIC0yNzEwLDYgKzI3MTksNyBAQAogCXN0cnVjdCBhcm1fYWRkciAqYXJtX2FkZHIgPSBOVUxMOwogCWludCBhbm90aGVyX2hvc3Q7CiAJaW50IGNzcl9tb2QgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoZmktPmlzb19zdGF0ZSAhPSBSQVcxMzk0X0lTT19JTkFDVElWRSkKIAkJcmF3MTM5NF9pc29fc2h1dGRvd24oZmkpOwpAQCAtMjcyMCwxMyArMjczMCwxMSBAQAogCQl9CiAJfQogCi0Jc3Bpbl9sb2NrX2lycSgmaG9zdF9pbmZvX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0X2luZm9fbG9jaywgZmxhZ3MpOwogCWZpLT5saXN0ZW5fY2hhbm5lbHMgPSAwOwotCXNwaW5fdW5sb2NrX2lycSgmaG9zdF9pbmZvX2xvY2spOwogCiAJZmFpbCA9IDA7CiAJLyogc2V0IGFkZHJlc3MtZW50cmllcyBpbnZhbGlkICovCi0Jc3Bpbl9sb2NrX2lycSgmaG9zdF9pbmZvX2xvY2spOwogCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZmaS0+YWRkcl9saXN0KSkgewogCQlhbm90aGVyX2hvc3QgPSAwOwpAQCAtMjc3NywxNCArMjc4NSwxNCBAQAogCQl2ZnJlZShhZGRyLT5hZGRyX3NwYWNlX2J1ZmZlcik7CiAJCWtmcmVlKGFkZHIpOwogCX0JCQkvKiB3aGlsZSAqLwotCXNwaW5fdW5sb2NrX2lycSgmaG9zdF9pbmZvX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3RfaW5mb19sb2NrLCBmbGFncyk7CiAJaWYgKGZhaWwgPiAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAicmF3MTM5NDogZHVyaW5nIGFkZHJfbGlzdC1yZWxlYXNlICIKIAkJICAgICAgICJlcnJvcihzKSBvY2N1cnJlZCBcbiIpOwogCX0KIAogCXdoaWxlICghZG9uZSkgewotCQlzcGluX2xvY2tfaXJxKCZmaS0+cmVxbGlzdHNfbG9jayk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZmaS0+cmVxbGlzdHNfbG9jaywgZmxhZ3MpOwogCiAJCXdoaWxlICghbGlzdF9lbXB0eSgmZmktPnJlcV9jb21wbGV0ZSkpIHsKIAkJCWxoID0gZmktPnJlcV9jb21wbGV0ZS5uZXh0OwpAQCAtMjc5OCw3ICsyODA2LDcgQEAKIAkJaWYgKGxpc3RfZW1wdHkoJmZpLT5yZXFfcGVuZGluZykpCiAJCQlkb25lID0gMTsKIAotCQlzcGluX3VubG9ja19pcnEoJmZpLT5yZXFsaXN0c19sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmktPnJlcWxpc3RzX2xvY2ssIGZsYWdzKTsKIAogCQlpZiAoIWRvbmUpCiAJCQlkb3duX2ludGVycnVwdGlibGUoJmZpLT5jb21wbGV0ZV9zZW0pOwpAQCAtMjgyOCw5ICsyODM2LDkgQEAKIAkJICAgICBmaS0+aG9zdC0+aWQpOwogCiAJaWYgKGZpLT5zdGF0ZSA9PSBjb25uZWN0ZWQpIHsKLQkJc3Bpbl9sb2NrX2lycSgmaG9zdF9pbmZvX2xvY2spOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdF9pbmZvX2xvY2ssIGZsYWdzKTsKIAkJbGlzdF9kZWwoJmZpLT5saXN0KTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZob3N0X2luZm9fbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3RfaW5mb19sb2NrLCBmbGFncyk7CiAKIAkJcHV0X2RldmljZSgmZmktPmhvc3QtPmRldmljZSk7CiAJfQpAQCAtMjk1OCw0ICsyOTY2LDMgQEAKIG1vZHVsZV9pbml0KGluaXRfcmF3MTM5NCk7CiBtb2R1bGVfZXhpdChjbGVhbnVwX3JhdzEzOTQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FMSUFTX0NIQVJERVYoSUVFRTEzOTRfTUFKT1IsIElFRUUxMzk0X01JTk9SX0JMT0NLX1JBVzEzOTQgKiAxNik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L3NicDIuYyBiL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5jCmluZGV4IGRlODgyMTguLjEyY2VjN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5jCkBAIC05NywxNiArOTcsMTggQEAKICAqLwogc3RhdGljIGludCBtYXhfc3BlZWQgPSBJRUVFMTM5NF9TUEVFRF9NQVg7CiBtb2R1bGVfcGFyYW0obWF4X3NwZWVkLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhtYXhfc3BlZWQsICJGb3JjZSBtYXggc3BlZWQgKDMgPSA4MDBtYiwgMiA9IDQwMG1iIGRlZmF1bHQsIDEgPSAyMDBtYiwgMCA9IDEwMG1iKSIpOworTU9EVUxFX1BBUk1fREVTQyhtYXhfc3BlZWQsICJGb3JjZSBtYXggc3BlZWQgKDMgPSA4MDBtYiwgMiA9IDQwMG1iLCAxID0gMjAwbWIsIDAgPSAxMDBtYikiKTsKIAogLyoKICAqIFNldCBzZXJpYWxpemVfaW8gdG8gMSBpZiB5b3UnZCBsaWtlIG9ubHkgb25lIHNjc2kgY29tbWFuZCBzZW50CiAgKiBkb3duIHRvIHVzIGF0IGEgdGltZSAoZGVidWdnaW5nKS4gVGhpcyBtaWdodCBiZSBuZWNlc3NhcnkgZm9yIHZlcnkKICAqIGJhZGx5IGJlaGF2ZWQgc2JwMiBkZXZpY2VzLgorICoKKyAqIFRPRE86IE1ha2UgdGhpcyBjb25maWd1cmFibGUgcGVyIGRldmljZS4KICAqLwotc3RhdGljIGludCBzZXJpYWxpemVfaW87CitzdGF0aWMgaW50IHNlcmlhbGl6ZV9pbyA9IDE7CiBtb2R1bGVfcGFyYW0oc2VyaWFsaXplX2lvLCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhzZXJpYWxpemVfaW8sICJTZXJpYWxpemUgYWxsIEkvTyBjb21pbmcgZG93biBmcm9tIHRoZSBzY3NpIGRyaXZlcnMgKGRlZmF1bHQgPSAwKSIpOworTU9EVUxFX1BBUk1fREVTQyhzZXJpYWxpemVfaW8sICJTZXJpYWxpemUgSS9PIGNvbWluZyBmcm9tIHNjc2kgZHJpdmVycyAoZGVmYXVsdCA9IDEsIGZhc3RlciA9IDApIik7CiAKIC8qCiAgKiBCdW1wIHVwIG1heF9zZWN0b3JzIGlmIHlvdSdkIGxpa2UgdG8gc3VwcG9ydCB2ZXJ5IGxhcmdlIHNpemVkCkBAIC01OTYsNiArNTk4LDE0IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NzaV9pZC0+c2JwMl9jb21tYW5kX29yYl9sb2NrLCBmbGFncyk7CiB9CiAKKy8qCisgKiBJcyBzY3NpX2lkIHZhbGlkPyBJcyB0aGUgMTM5NCBub2RlIHN0aWxsIHByZXNlbnQ/CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNicDJ1dGlsX25vZGVfaXNfYXZhaWxhYmxlKHN0cnVjdCBzY3NpX2lkX2luc3RhbmNlX2RhdGEgKnNjc2lfaWQpCit7CisJcmV0dXJuIHNjc2lfaWQgJiYgc2NzaV9pZC0+bmUgJiYgIXNjc2lfaWQtPm5lLT5pbl9saW1ibzsKK30KKwogDAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC02MzEsMTEgKzY0MSwyMyBAQAogewogCXN0cnVjdCB1bml0X2RpcmVjdG9yeSAqdWQ7CiAJc3RydWN0IHNjc2lfaWRfaW5zdGFuY2VfZGF0YSAqc2NzaV9pZDsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CiAKIAlTQlAyX0RFQlVHKCJzYnAyX3JlbW92ZSIpOwogCiAJdWQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgdW5pdF9kaXJlY3RvcnksIGRldmljZSk7CiAJc2NzaV9pZCA9IHVkLT5kZXZpY2UuZHJpdmVyX2RhdGE7CisJaWYgKCFzY3NpX2lkKQorCQlyZXR1cm4gMDsKKworCS8qIFRyaWdnZXIgc2h1dGRvd24gZnVuY3Rpb25zIGluIHNjc2kncyBoaWdobGV2ZWwuICovCisJaWYgKHNjc2lfaWQtPnNjc2lfaG9zdCkKKwkJc2NzaV91bmJsb2NrX3JlcXVlc3RzKHNjc2lfaWQtPnNjc2lfaG9zdCk7CisJc2RldiA9IHNjc2lfaWQtPnNkZXY7CisJaWYgKHNkZXYpIHsKKwkJc2NzaV9pZC0+c2RldiA9IE5VTEw7CisJCXNjc2lfcmVtb3ZlX2RldmljZShzZGV2KTsKKwl9CiAKIAlzYnAyX2xvZ291dF9kZXZpY2Uoc2NzaV9pZCk7CiAJc2JwMl9yZW1vdmVfZGV2aWNlKHNjc2lfaWQpOwpAQCAtMjQ3MywzNyArMjQ5NSwyNiBAQAogCXN0cnVjdCBzY3NpX2lkX2luc3RhbmNlX2RhdGEgKnNjc2lfaWQgPQogCQkoc3RydWN0IHNjc2lfaWRfaW5zdGFuY2VfZGF0YSAqKVNDcG50LT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhWzBdOwogCXN0cnVjdCBzYnAyc2NzaV9ob3N0X2luZm8gKmhpOworCWludCByZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKIAogCVNCUDJfREVCVUcoInNicDJzY3NpX3F1ZXVlY29tbWFuZCIpOwogCi0JLyoKLQkgKiBJZiBzY3NpX2lkIGlzIG51bGwsIGl0IG1lYW5zIHRoZXJlIGlzIG5vIGRldmljZSBpbiB0aGlzIHNsb3QsCi0JICogc28gd2Ugc2hvdWxkIHJldHVybiBzZWxlY3Rpb24gdGltZW91dC4KLQkgKi8KLQlpZiAoIXNjc2lfaWQpIHsKLQkJU0NwbnQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwotCQlkb25lIChTQ3BudCk7Ci0JCXJldHVybiAwOwotCX0KKwlpZiAoIXNicDJ1dGlsX25vZGVfaXNfYXZhaWxhYmxlKHNjc2lfaWQpKQorCQlnb3RvIGRvbmU7CiAKIAloaSA9IHNjc2lfaWQtPmhpOwogCiAJaWYgKCFoaSkgewogCQlTQlAyX0VSUigic2JwMnNjc2lfaG9zdF9pbmZvIGlzIE5VTEwgLSB0aGlzIGlzIGJhZCEiKTsKLQkJU0NwbnQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwotCQlkb25lIChTQ3BudCk7Ci0JCXJldHVybigwKTsKKwkJZ290byBkb25lOwogCX0KIAogCS8qCiAJICogVW50aWwgd2UgaGFuZGxlIG11bHRpcGxlIGx1bnMsIGp1c3QgcmV0dXJuIHNlbGVjdGlvbiB0aW1lLW91dAogCSAqIHRvIGFueSBJTyBkaXJlY3RlZCBhdCBub24temVybyBMVU5zCiAJICovCi0JaWYgKFNDcG50LT5kZXZpY2UtPmx1bikgewotCQlTQ3BudC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7Ci0JCWRvbmUgKFNDcG50KTsKLQkJcmV0dXJuKDApOwotCX0KKwlpZiAoU0NwbnQtPmRldmljZS0+bHVuKQorCQlnb3RvIGRvbmU7CiAKIAkvKgogCSAqIENoZWNrIGZvciByZXF1ZXN0IHNlbnNlIGNvbW1hbmQsIGFuZCBoYW5kbGUgaXQgaGVyZQpAQCAtMjUxNCw3ICsyNTI1LDcgQEAKIAkJbWVtY3B5KFNDcG50LT5yZXF1ZXN0X2J1ZmZlciwgU0NwbnQtPnNlbnNlX2J1ZmZlciwgU0NwbnQtPnJlcXVlc3RfYnVmZmxlbik7CiAJCW1lbXNldChTQ3BudC0+c2Vuc2VfYnVmZmVyLCAwLCBzaXplb2YoU0NwbnQtPnNlbnNlX2J1ZmZlcikpOwogCQlzYnAyc2NzaV9jb21wbGV0ZV9jb21tYW5kKHNjc2lfaWQsIFNCUDJfU0NTSV9TVEFUVVNfR09PRCwgU0NwbnQsIGRvbmUpOwotCQlyZXR1cm4oMCk7CisJCXJldHVybiAwOwogCX0KIAogCS8qCkBAIC0yNTIyLDkgKzI1MzMsOCBAQAogCSAqLwogCWlmICghaHBzYl9ub2RlX2VudHJ5X3ZhbGlkKHNjc2lfaWQtPm5lKSkgewogCQlTQlAyX0VSUigiQnVzIHJlc2V0IGluIHByb2dyZXNzIC0gcmVqZWN0aW5nIGNvbW1hbmQiKTsKLQkJU0NwbnQtPnJlc3VsdCA9IERJRF9CVVNfQlVTWSA8PCAxNjsKLQkJZG9uZSAoU0NwbnQpOwotCQlyZXR1cm4oMCk7CisJCXJlc3VsdCA9IERJRF9CVVNfQlVTWSA8PCAxNjsKKwkJZ290byBkb25lOwogCX0KIAogCS8qCkBAIC0yNTM1LDggKzI1NDUsMTIgQEAKIAkJc2JwMnNjc2lfY29tcGxldGVfY29tbWFuZChzY3NpX2lkLCBTQlAyX1NDU0lfU1RBVFVTX1NFTEVDVElPTl9USU1FT1VULAogCQkJCQkgIFNDcG50LCBkb25lKTsKIAl9CisJcmV0dXJuIDA7CiAKLQlyZXR1cm4oMCk7Citkb25lOgorCVNDcG50LT5yZXN1bHQgPSByZXN1bHQ7CisJZG9uZShTQ3BudCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0yNjgzLDE0ICsyNjk3LDI3IEBACiB9CiAKIAotc3RhdGljIGludCBzYnAyc2NzaV9zbGF2ZV9jb25maWd1cmUgKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3N0YXRpYyBpbnQgc2JwMnNjc2lfc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCSgoc3RydWN0IHNjc2lfaWRfaW5zdGFuY2VfZGF0YSAqKXNkZXYtPmhvc3QtPmhvc3RkYXRhWzBdKS0+c2RldiA9IHNkZXY7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBzYnAyc2NzaV9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewogCWJsa19xdWV1ZV9kbWFfYWxpZ25tZW50KHNkZXYtPnJlcXVlc3RfcXVldWUsICg1MTIgLSAxKSk7Ci0KIAlyZXR1cm4gMDsKIH0KIAogCitzdGF0aWMgdm9pZCBzYnAyc2NzaV9zbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwkoKHN0cnVjdCBzY3NpX2lkX2luc3RhbmNlX2RhdGEgKilzZGV2LT5ob3N0LT5ob3N0ZGF0YVswXSktPnNkZXYgPSBOVUxMOworCXJldHVybjsKK30KKworCiAvKgogICogQ2FsbGVkIGJ5IHNjc2kgc3RhY2sgd2hlbiBzb21ldGhpbmcgaGFzIHJlYWxseSBnb25lIHdyb25nLiAgVXN1YWxseQogICogY2FsbGVkIHdoZW4gYSBjb21tYW5kIGhhcyB0aW1lZC1vdXQgZm9yIHNvbWUgcmVhc29uLgpAQCAtMjcwNSw3ICsyNzMyLDcgQEAKIAlTQlAyX0VSUigiYWJvcnRpbmcgc2JwMiBjb21tYW5kIik7CiAJc2NzaV9wcmludF9jb21tYW5kKFNDcG50KTsKIAotCWlmIChzY3NpX2lkKSB7CisJaWYgKHNicDJ1dGlsX25vZGVfaXNfYXZhaWxhYmxlKHNjc2lfaWQpKSB7CiAKIAkJLyoKIAkJICogUmlnaHQgbm93LCBqdXN0IHJldHVybiBhbnkgbWF0Y2hpbmcgY29tbWFuZCBzdHJ1Y3R1cmVzCkBAIC0yNzQyLDMxICsyNzY5LDI0IEBACiAvKgogICogQ2FsbGVkIGJ5IHNjc2kgc3RhY2sgd2hlbiBzb21ldGhpbmcgaGFzIHJlYWxseSBnb25lIHdyb25nLgogICovCi1zdGF0aWMgaW50IF9fc2JwMnNjc2lfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQpCitzdGF0aWMgaW50IHNicDJzY3NpX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50KQogewogCXN0cnVjdCBzY3NpX2lkX2luc3RhbmNlX2RhdGEgKnNjc2lfaWQgPQogCQkoc3RydWN0IHNjc2lfaWRfaW5zdGFuY2VfZGF0YSAqKVNDcG50LT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhWzBdOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlTQlAyX0VSUigicmVzZXQgcmVxdWVzdGVkIik7CiAKLQlpZiAoc2NzaV9pZCkgeworCXNwaW5fbG9ja19pcnFzYXZlKFNDcG50LT5kZXZpY2UtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCisJaWYgKHNicDJ1dGlsX25vZGVfaXNfYXZhaWxhYmxlKHNjc2lfaWQpKSB7CiAJCVNCUDJfRVJSKCJHZW5lcmF0aW5nIHNicDIgZmV0Y2ggYWdlbnQgcmVzZXQiKTsKIAkJc2JwMl9hZ2VudF9yZXNldChzY3NpX2lkLCAwKTsKIAl9CiAKLQlyZXR1cm4oU1VDQ0VTUyk7Ci19Ci0KLXN0YXRpYyBpbnQgc2JwMnNjc2lfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmM7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZShTQ3BudC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQlyYyA9IF9fc2JwMnNjc2lfcmVzZXQoU0NwbnQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoU0NwbnQtPmRldmljZS0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gcmM7CisJcmV0dXJuIFNVQ0NFU1M7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzYnAyc2NzaV9pbmZvIChzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0KQpAQCAtMjgxNyw3ICsyODM3LDkgQEAKIAkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgPQlzYnAyc2NzaV9yZXNldCwKIAkuZWhfYnVzX3Jlc2V0X2hhbmRsZXIgPQkJc2JwMnNjc2lfcmVzZXQsCiAJLmVoX2hvc3RfcmVzZXRfaGFuZGxlciA9CXNicDJzY3NpX3Jlc2V0LAorCS5zbGF2ZV9hbGxvYyA9CQkJc2JwMnNjc2lfc2xhdmVfYWxsb2MsCiAJLnNsYXZlX2NvbmZpZ3VyZSA9CQlzYnAyc2NzaV9zbGF2ZV9jb25maWd1cmUsCisJLnNsYXZlX2Rlc3Ryb3kgPQkJc2JwMnNjc2lfc2xhdmVfZGVzdHJveSwKIAkudGhpc19pZCA9CQkJLTEsCiAJLnNnX3RhYmxlc2l6ZSA9CQkJU0dfQUxMLAogCS51c2VfY2x1c3RlcmluZyA9CQlFTkFCTEVfQ0xVU1RFUklORywKQEAgLTI4MzcsNyArMjg1OSw4IEBACiAKIAkvKiBNb2R1bGUgbG9hZCBkZWJ1ZyBvcHRpb24gdG8gZm9yY2Ugb25lIGNvbW1hbmQgYXQgYSB0aW1lIChzZXJpYWxpemluZyBJL08pICovCiAJaWYgKHNlcmlhbGl6ZV9pbykgewotCQlTQlAyX0VSUigiRHJpdmVyIGZvcmNlZCB0byBzZXJpYWxpemUgSS9PIChzZXJpYWxpemVfaW8gPSAxKSIpOworCQlTQlAyX0lORk8oIkRyaXZlciBmb3JjZWQgdG8gc2VyaWFsaXplIEkvTyAoc2VyaWFsaXplX2lvPTEpIik7CisJCVNCUDJfSU5GTygiVHJ5IHNlcmlhbGl6ZV9pbz0wIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UiKTsKIAkJc2NzaV9kcml2ZXJfdGVtcGxhdGUuY2FuX3F1ZXVlID0gMTsKIAkJc2NzaV9kcml2ZXJfdGVtcGxhdGUuY21kX3Blcl9sdW4gPSAxOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvdmlkZW8xMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L3ZpZGVvMTM5NC5jCmluZGV4IDlkNmZhY2YuLjExYmU5YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvdmlkZW8xMzk0LmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC92aWRlbzEzOTQuYwpAQCAtMTU3MSw0ICsxNTcxLDMgQEAKIAogbW9kdWxlX2luaXQodmlkZW8xMzk0X2luaXRfbW9kdWxlKTsKIG1vZHVsZV9leGl0KHZpZGVvMTM5NF9leGl0X21vZHVsZSk7Ci1NT0RVTEVfQUxJQVNfQ0hBUkRFVihJRUVFMTM5NF9NQUpPUiwgSUVFRTEzOTRfTUlOT1JfQkxPQ0tfVklERU8xMzk0ICogMTYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYwppbmRleCBhNGE0ZDljLi5hMTRjYTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYwpAQCAtNzgzLDcgKzc4Myw3IEBACiAJCQkJCSAgICB1MzIgcmVtb3RlX3FwbiwgdTE2IHBrZXlfaW5kZXgsCiAJCQkJCSAgICBzdHJ1Y3QgaWJfYWggKmFoLCBpbnQgcm1wcF9hY3RpdmUsCiAJCQkJCSAgICBpbnQgaGRyX2xlbiwgaW50IGRhdGFfbGVuLAotCQkJCQkgICAgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrKQorCQkJCQkgICAgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJc3RydWN0IGliX21hZF9hZ2VudF9wcml2YXRlICptYWRfYWdlbnRfcHJpdjsKIAlzdHJ1Y3QgaWJfbWFkX3NlbmRfYnVmICpzZW5kX2J1ZjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9ybXBwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcm1wcC5jCmluZGV4IDJiZDhiMWMuLmUyMzgzNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9ybXBwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3JtcHAuYwpAQCAtNDEyLDggKzQxMiw4IEBACiAKIAloZHJfc2l6ZSA9IGRhdGFfb2Zmc2V0KHJtcHBfbWFkLT5tYWRfaGRyLm1nbXRfY2xhc3MpOwogCWRhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWJfcm1wcF9tYWQpIC0gaGRyX3NpemU7Ci0JcGFkID0gZGF0YV9zaXplIC0gYmUzMl90b19jcHUocm1wcF9tYWQtPnJtcHBfaGRyLnBheWxlbl9uZXd3aW4pOwotCWlmIChwYWQgPiBkYXRhX3NpemUgfHwgcGFkIDwgMCkKKwlwYWQgPSBJQl9NR01UX1JNUFBfREFUQSAtIGJlMzJfdG9fY3B1KHJtcHBfbWFkLT5ybXBwX2hkci5wYXlsZW5fbmV3d2luKTsKKwlpZiAocGFkID4gSUJfTUdNVF9STVBQX0RBVEEgfHwgcGFkIDwgMCkKIAkJcGFkID0gMDsKIAogCXJldHVybiBoZHJfc2l6ZSArIHJtcHBfcmVjdi0+c2VnX251bSAqIGRhdGFfc2l6ZSAtIHBhZDsKQEAgLTU4Myw2ICs1ODMsNyBAQAogewogCXN0cnVjdCBpYl9ybXBwX21hZCAqcm1wcF9tYWQ7CiAJaW50IHRpbWVvdXQ7CisJdTMyIHBheWxlbjsKIAogCXJtcHBfbWFkID0gKHN0cnVjdCBpYl9ybXBwX21hZCAqKW1hZF9zZW5kX3dyLT5zZW5kX3dyLndyLnVkLm1hZF9oZHI7CiAJaWJfc2V0X3JtcHBfZmxhZ3MoJnJtcHBfbWFkLT5ybXBwX2hkciwgSUJfTUdNVF9STVBQX0ZMQUdfQUNUSVZFKTsKQEAgLTU5MCwxMSArNTkxLDkgQEAKIAogCWlmIChtYWRfc2VuZF93ci0+c2VnX251bSA9PSAxKSB7CiAJCXJtcHBfbWFkLT5ybXBwX2hkci5ybXBwX3J0aW1lX2ZsYWdzIHw9IElCX01HTVRfUk1QUF9GTEFHX0ZJUlNUOwotCQlybXBwX21hZC0+cm1wcF9oZHIucGF5bGVuX25ld3dpbiA9Ci0JCQljcHVfdG9fYmUzMihtYWRfc2VuZF93ci0+dG90YWxfc2VnICoKLQkJCQkgICAgKHNpemVvZihzdHJ1Y3QgaWJfcm1wcF9tYWQpIC0KLQkJCQkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IGliX3JtcHBfbWFkLCBkYXRhKSkgLQotCQkJCSAgICBtYWRfc2VuZF93ci0+cGFkKTsKKwkJcGF5bGVuID0gbWFkX3NlbmRfd3ItPnRvdGFsX3NlZyAqIElCX01HTVRfUk1QUF9EQVRBIC0KKwkJCSBtYWRfc2VuZF93ci0+cGFkOworCQlybXBwX21hZC0+cm1wcF9oZHIucGF5bGVuX25ld3dpbiA9IGNwdV90b19iZTMyKHBheWxlbik7CiAJCW1hZF9zZW5kX3dyLT5zZ19saXN0WzBdLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaWJfcm1wcF9tYWQpOwogCX0gZWxzZSB7CiAJCW1hZF9zZW5kX3dyLT5zZW5kX3dyLm51bV9zZ2UgPSAyOwpAQCAtNjA4LDEwICs2MDcsOCBAQAogCiAJaWYgKG1hZF9zZW5kX3dyLT5zZWdfbnVtID09IG1hZF9zZW5kX3dyLT50b3RhbF9zZWcpIHsKIAkJcm1wcF9tYWQtPnJtcHBfaGRyLnJtcHBfcnRpbWVfZmxhZ3MgfD0gSUJfTUdNVF9STVBQX0ZMQUdfTEFTVDsKLQkJcm1wcF9tYWQtPnJtcHBfaGRyLnBheWxlbl9uZXd3aW4gPQotCQkJY3B1X3RvX2JlMzIoc2l6ZW9mKHN0cnVjdCBpYl9ybXBwX21hZCkgLQotCQkJCSAgICBvZmZzZXRvZihzdHJ1Y3QgaWJfcm1wcF9tYWQsIGRhdGEpIC0KLQkJCQkgICAgbWFkX3NlbmRfd3ItPnBhZCk7CisJCXBheWxlbiA9IElCX01HTVRfUk1QUF9EQVRBIC0gbWFkX3NlbmRfd3ItPnBhZDsKKwkJcm1wcF9tYWQtPnJtcHBfaGRyLnBheWxlbl9uZXd3aW4gPSBjcHVfdG9fYmUzMihwYXlsZW4pOwogCX0KIAogCS8qIDIgc2Vjb25kcyBmb3IgYW4gQUNLIHVudGlsIHdlIGNhbiBmaW5kIHRoZSBwYWNrZXQgbGlmZXRpbWUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jCmluZGV4IDc4ZGUyZGQuLjI2MjYxODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2FfcXVlcnkuYwpAQCAtNTc0LDcgKzU3NCw3IEBACiBpbnQgaWJfc2FfcGF0aF9yZWNfZ2V0KHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgdTggcG9ydF9udW0sCiAJCSAgICAgICBzdHJ1Y3QgaWJfc2FfcGF0aF9yZWMgKnJlYywKIAkJICAgICAgIGliX3NhX2NvbXBfbWFzayBjb21wX21hc2ssCi0JCSAgICAgICBpbnQgdGltZW91dF9tcywgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrLAorCQkgICAgICAgaW50IHRpbWVvdXRfbXMsIGdmcF90IGdmcF9tYXNrLAogCQkgICAgICAgdm9pZCAoKmNhbGxiYWNrKShpbnQgc3RhdHVzLAogCQkJCQlzdHJ1Y3QgaWJfc2FfcGF0aF9yZWMgKnJlc3AsCiAJCQkJCXZvaWQgKmNvbnRleHQpLApAQCAtNjc2LDcgKzY3Niw3IEBACiBpbnQgaWJfc2Ffc2VydmljZV9yZWNfcXVlcnkoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCB1OCBwb3J0X251bSwgdTggbWV0aG9kLAogCQkJICAgIHN0cnVjdCBpYl9zYV9zZXJ2aWNlX3JlYyAqcmVjLAogCQkJICAgIGliX3NhX2NvbXBfbWFzayBjb21wX21hc2ssCi0JCQkgICAgaW50IHRpbWVvdXRfbXMsIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaywKKwkJCSAgICBpbnQgdGltZW91dF9tcywgZ2ZwX3QgZ2ZwX21hc2ssCiAJCQkgICAgdm9pZCAoKmNhbGxiYWNrKShpbnQgc3RhdHVzLAogCQkJCQkgICAgIHN0cnVjdCBpYl9zYV9zZXJ2aWNlX3JlYyAqcmVzcCwKIAkJCQkJICAgICB2b2lkICpjb250ZXh0KSwKQEAgLTc1OSw3ICs3NTksNyBAQAogCQkJICAgICB1OCBtZXRob2QsCiAJCQkgICAgIHN0cnVjdCBpYl9zYV9tY21lbWJlcl9yZWMgKnJlYywKIAkJCSAgICAgaWJfc2FfY29tcF9tYXNrIGNvbXBfbWFzaywKLQkJCSAgICAgaW50IHRpbWVvdXRfbXMsIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaywKKwkJCSAgICAgaW50IHRpbWVvdXRfbXMsIGdmcF90IGdmcF9tYXNrLAogCQkJICAgICB2b2lkICgqY2FsbGJhY2spKGludCBzdGF0dXMsCiAJCQkJCSAgICAgIHN0cnVjdCBpYl9zYV9tY21lbWJlcl9yZWMgKnJlc3AsCiAJCQkJCSAgICAgIHZvaWQgKmNvbnRleHQpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VzZXJfbWFkLmMKaW5kZXggN2MyZjAzMC4uYTY0ZDZiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jCkBAIC0zMzQsMTAgKzMzNCwxMSBAQAogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gZXJyX2FoOwogCQl9Ci0JCS8qIFZhbGlkYXRlIHRoYXQgbWFuYWdlbWVudCBjbGFzcyBjYW4gc3VwcG9ydCBSTVBQICovCisKKwkJLyogVmFsaWRhdGUgdGhhdCB0aGUgbWFuYWdlbWVudCBjbGFzcyBjYW4gc3VwcG9ydCBSTVBQICovCiAJCWlmIChybXBwX21hZC0+bWFkX2hkci5tZ210X2NsYXNzID09IElCX01HTVRfQ0xBU1NfU1VCTl9BRE0pIHsKIAkJCWhkcl9sZW4gPSBvZmZzZXRvZihzdHJ1Y3QgaWJfc2FfbWFkLCBkYXRhKTsKLQkJCWRhdGFfbGVuID0gbGVuZ3RoOworCQkJZGF0YV9sZW4gPSBsZW5ndGggLSBoZHJfbGVuOwogCQl9IGVsc2UgaWYgKChybXBwX21hZC0+bWFkX2hkci5tZ210X2NsYXNzID49IElCX01HTVRfQ0xBU1NfVkVORE9SX1JBTkdFMl9TVEFSVCkgJiYKIAkJCSAgICAocm1wcF9tYWQtPm1hZF9oZHIubWdtdF9jbGFzcyA8PSBJQl9NR01UX0NMQVNTX1ZFTkRPUl9SQU5HRTJfRU5EKSkgewogCQkJCWhkcl9sZW4gPSBvZmZzZXRvZihzdHJ1Y3QgaWJfdmVuZG9yX21hZCwgZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnMuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJicy5oCmluZGV4IGIxODk3YmUuLmNjMTI0MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJicy5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJicy5oCkBAIC02OSw2ICs2OSw3IEBACiAKIHN0cnVjdCBpYl91dmVyYnNfZmlsZSB7CiAJc3RydWN0IGtyZWYJCQkJcmVmOworCXN0cnVjdCBzZW1hcGhvcmUJCQltdXRleDsKIAlzdHJ1Y3QgaWJfdXZlcmJzX2RldmljZQkJICAgICAgICpkZXZpY2U7CiAJc3RydWN0IGliX3Vjb250ZXh0CQkgICAgICAgKnVjb250ZXh0OwogCXN0cnVjdCBpYl9ldmVudF9oYW5kbGVyCQkJZXZlbnRfaGFuZGxlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19jbWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19jbWQuYwppbmRleCBlOTFlYmRlLi41NjI0NDUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfY21kLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX2NtZC5jCkBAIC03Niw4ICs3Niw5IEBACiAJc3RydWN0IGliX3V2ZXJic19nZXRfY29udGV4dF9yZXNwIHJlc3A7CiAJc3RydWN0IGliX3VkYXRhICAgICAgICAgICAgICAgICAgIHVkYXRhOwogCXN0cnVjdCBpYl9kZXZpY2UgICAgICAgICAgICAgICAgICppYmRldiA9IGZpbGUtPmRldmljZS0+aWJfZGV2OworCXN0cnVjdCBpYl91Y29udGV4dAkJICp1Y29udGV4dDsKIAlpbnQgaTsKLQlpbnQgcmV0ID0gaW5fbGVuOworCWludCByZXQ7CiAKIAlpZiAob3V0X2xlbiA8IHNpemVvZiByZXNwKQogCQlyZXR1cm4gLUVOT1NQQzsKQEAgLTg1LDQ1ICs4Niw1NiBAQAogCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBidWYsIHNpemVvZiBjbWQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAorCWRvd24oJmZpbGUtPm11dGV4KTsKKworCWlmIChmaWxlLT51Y29udGV4dCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisKIAlJTklUX1VEQVRBKCZ1ZGF0YSwgYnVmICsgc2l6ZW9mIGNtZCwKIAkJICAgKHVuc2lnbmVkIGxvbmcpIGNtZC5yZXNwb25zZSArIHNpemVvZiByZXNwLAogCQkgICBpbl9sZW4gLSBzaXplb2YgY21kLCBvdXRfbGVuIC0gc2l6ZW9mIHJlc3ApOwogCi0JZmlsZS0+dWNvbnRleHQgPSBpYmRldi0+YWxsb2NfdWNvbnRleHQoaWJkZXYsICZ1ZGF0YSk7Ci0JaWYgKElTX0VSUihmaWxlLT51Y29udGV4dCkpIHsKLQkJcmV0ID0gUFRSX0VSUihmaWxlLT51Y29udGV4dCk7Ci0JCWZpbGUtPnVjb250ZXh0ID0gTlVMTDsKLQkJcmV0dXJuIHJldDsKLQl9CisJdWNvbnRleHQgPSBpYmRldi0+YWxsb2NfdWNvbnRleHQoaWJkZXYsICZ1ZGF0YSk7CisJaWYgKElTX0VSUih1Y29udGV4dCkpCisJCXJldHVybiBQVFJfRVJSKGZpbGUtPnVjb250ZXh0KTsKIAotCWZpbGUtPnVjb250ZXh0LT5kZXZpY2UgPSBpYmRldjsKLQlJTklUX0xJU1RfSEVBRCgmZmlsZS0+dWNvbnRleHQtPnBkX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZmaWxlLT51Y29udGV4dC0+bXJfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmZpbGUtPnVjb250ZXh0LT5td19saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmZmlsZS0+dWNvbnRleHQtPmNxX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZmaWxlLT51Y29udGV4dC0+cXBfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmZpbGUtPnVjb250ZXh0LT5zcnFfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmZpbGUtPnVjb250ZXh0LT5haF9saXN0KTsKLQlzcGluX2xvY2tfaW5pdCgmZmlsZS0+dWNvbnRleHQtPmxvY2spOworCXVjb250ZXh0LT5kZXZpY2UgPSBpYmRldjsKKwlJTklUX0xJU1RfSEVBRCgmdWNvbnRleHQtPnBkX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZ1Y29udGV4dC0+bXJfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnVjb250ZXh0LT5td19saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmdWNvbnRleHQtPmNxX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZ1Y29udGV4dC0+cXBfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnVjb250ZXh0LT5zcnFfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnVjb250ZXh0LT5haF9saXN0KTsKIAogCXJlc3AuYXN5bmNfZmQgPSBmaWxlLT5hc3luY19maWxlLmZkOwogCWZvciAoaSA9IDA7IGkgPCBmaWxlLT5kZXZpY2UtPm51bV9jb21wOyArK2kpCiAJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopICh1bnNpZ25lZCBsb25nKSBjbWQuY3FfZmRfdGFiICsKIAkJCQkgaSAqIHNpemVvZiAoX191MzIpLAotCQkJCSAmZmlsZS0+Y29tcF9maWxlW2ldLmZkLCBzaXplb2YgKF9fdTMyKSkpCi0JCQlnb3RvIGVycjsKKwkJCQkgJmZpbGUtPmNvbXBfZmlsZVtpXS5mZCwgc2l6ZW9mIChfX3UzMikpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBlcnJfZnJlZTsKKwkJfQogCiAJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpIGNtZC5yZXNwb25zZSwKLQkJCSAmcmVzcCwgc2l6ZW9mIHJlc3ApKQotCQlnb3RvIGVycjsKKwkJCSAmcmVzcCwgc2l6ZW9mIHJlc3ApKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJZmlsZS0+dWNvbnRleHQgPSB1Y29udGV4dDsKKwl1cCgmZmlsZS0+bXV0ZXgpOwogCiAJcmV0dXJuIGluX2xlbjsKIAotZXJyOgotCWliZGV2LT5kZWFsbG9jX3Vjb250ZXh0KGZpbGUtPnVjb250ZXh0KTsKLQlmaWxlLT51Y29udGV4dCA9IE5VTEw7CitlcnJfZnJlZToKKwlpYmRldi0+ZGVhbGxvY191Y29udGV4dCh1Y29udGV4dCk7CiAKLQlyZXR1cm4gLUVGQVVMVDsKK2VycjoKKwl1cCgmZmlsZS0+bXV0ZXgpOworCXJldHVybiByZXQ7CiB9CiAKIHNzaXplX3QgaWJfdXZlcmJzX3F1ZXJ5X2RldmljZShzdHJ1Y3QgaWJfdXZlcmJzX2ZpbGUgKmZpbGUsCkBAIC0zNTIsOSArMzY0LDkgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycl9wZDsKIAotCXNwaW5fbG9ja19pcnEoJmZpbGUtPnVjb250ZXh0LT5sb2NrKTsKKwlkb3duKCZmaWxlLT5tdXRleCk7CiAJbGlzdF9hZGRfdGFpbCgmdW9iai0+bGlzdCwgJmZpbGUtPnVjb250ZXh0LT5wZF9saXN0KTsKLQlzcGluX3VubG9ja19pcnEoJmZpbGUtPnVjb250ZXh0LT5sb2NrKTsKKwl1cCgmZmlsZS0+bXV0ZXgpOwogCiAJbWVtc2V0KCZyZXNwLCAwLCBzaXplb2YgcmVzcCk7CiAJcmVzcC5wZF9oYW5kbGUgPSB1b2JqLT5pZDsKQEAgLTM2OCw5ICszODAsOSBAQAogCXJldHVybiBpbl9sZW47CiAKIGVycl9saXN0OgotIAlzcGluX2xvY2tfaXJxKCZmaWxlLT51Y29udGV4dC0+bG9jayk7CisgCWRvd24oJmZpbGUtPm11dGV4KTsKIAlsaXN0X2RlbCgmdW9iai0+bGlzdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZmaWxlLT51Y29udGV4dC0+bG9jayk7CisJdXAoJmZpbGUtPm11dGV4KTsKIAogCWRvd24oJmliX3V2ZXJic19pZHJfbXV0ZXgpOwogCWlkcl9yZW1vdmUoJmliX3V2ZXJic19wZF9pZHIsIHVvYmotPmlkKTsKQEAgLTQxMCw5ICs0MjIsOSBAQAogCiAJaWRyX3JlbW92ZSgmaWJfdXZlcmJzX3BkX2lkciwgY21kLnBkX2hhbmRsZSk7CiAKLQlzcGluX2xvY2tfaXJxKCZmaWxlLT51Y29udGV4dC0+bG9jayk7CisJZG93bigmZmlsZS0+bXV0ZXgpOwogCWxpc3RfZGVsKCZ1b2JqLT5saXN0KTsKLQlzcGluX3VubG9ja19pcnEoJmZpbGUtPnVjb250ZXh0LT5sb2NrKTsKKwl1cCgmZmlsZS0+bXV0ZXgpOwogCiAJa2ZyZWUodW9iaik7CiAKQEAgLTUxMiw5ICs1MjQsOSBAQAogCiAJcmVzcC5tcl9oYW5kbGUgPSBvYmotPnVvYmplY3QuaWQ7CiAKLQlzcGluX2xvY2tfaXJxKCZmaWxlLT51Y29udGV4dC0+bG9jayk7CisJZG93bigmZmlsZS0+bXV0ZXgpOwogCWxpc3RfYWRkX3RhaWwoJm9iai0+dW9iamVjdC5saXN0LCAmZmlsZS0+dWNvbnRleHQtPm1yX2xpc3QpOwotCXNwaW5fdW5sb2NrX2lycSgmZmlsZS0+dWNvbnRleHQtPmxvY2spOworCXVwKCZmaWxlLT5tdXRleCk7CiAKIAlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSAodW5zaWduZWQgbG9uZykgY21kLnJlc3BvbnNlLAogCQkJICZyZXNwLCBzaXplb2YgcmVzcCkpIHsKQEAgLTUyNyw5ICs1MzksOSBAQAogCXJldHVybiBpbl9sZW47CiAKIGVycl9saXN0OgotCXNwaW5fbG9ja19pcnEoJmZpbGUtPnVjb250ZXh0LT5sb2NrKTsKKwlkb3duKCZmaWxlLT5tdXRleCk7CiAJbGlzdF9kZWwoJm9iai0+dW9iamVjdC5saXN0KTsKLQlzcGluX3VubG9ja19pcnEoJmZpbGUtPnVjb250ZXh0LT5sb2NrKTsKKwl1cCgmZmlsZS0+bXV0ZXgpOwogCiBlcnJfdW5yZWc6CiAJaWJfZGVyZWdfbXIobXIpOwpAQCAtNTcwLDkgKzU4Miw5IEBACiAKIAlpZHJfcmVtb3ZlKCZpYl91dmVyYnNfbXJfaWRyLCBjbWQubXJfaGFuZGxlKTsKIAotCXNwaW5fbG9ja19pcnEoJmZpbGUtPnVjb250ZXh0LT5sb2NrKTsKKwlkb3duKCZmaWxlLT5tdXRleCk7CiAJbGlzdF9kZWwoJm1lbW9iai0+dW9iamVjdC5saXN0KTsKLQlzcGluX3VubG9ja19pcnEoJmZpbGUtPnVjb250ZXh0LT5sb2NrKTsKKwl1cCgmZmlsZS0+bXV0ZXgpOwogCiAJaWJfdW1lbV9yZWxlYXNlKGZpbGUtPmRldmljZS0+aWJfZGV2LCAmbWVtb2JqLT51bWVtKTsKIAlrZnJlZShtZW1vYmopOwpAQCAtNjQ3LDkgKzY1OSw5IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJfY3E7CiAKLQlzcGluX2xvY2tfaXJxKCZmaWxlLT51Y29udGV4dC0+bG9jayk7CisJZG93bigmZmlsZS0+bXV0ZXgpOwogCWxpc3RfYWRkX3RhaWwoJnVvYmotPnVvYmplY3QubGlzdCwgJmZpbGUtPnVjb250ZXh0LT5jcV9saXN0KTsKLQlzcGluX3VubG9ja19pcnEoJmZpbGUtPnVjb250ZXh0LT5sb2NrKTsKKwl1cCgmZmlsZS0+bXV0ZXgpOwogCiAJbWVtc2V0KCZyZXNwLCAwLCBzaXplb2YgcmVzcCk7CiAJcmVzcC5jcV9oYW5kbGUgPSB1b2JqLT51b2JqZWN0LmlkOwpAQCAtNjY0LDkgKzY3Niw5IEBACiAJcmV0dXJuIGluX2xlbjsKIAogZXJyX2xpc3Q6Ci0gCXNwaW5fbG9ja19pcnEoJmZpbGUtPnVjb250ZXh0LT5sb2NrKTsKKyAJZG93bigmZmlsZS0+bXV0ZXgpOwogCWxpc3RfZGVsKCZ1b2JqLT51b2JqZWN0Lmxpc3QpOwotCXNwaW5fdW5sb2NrX2lycSgmZmlsZS0+dWNvbnRleHQtPmxvY2spOworCXVwKCZmaWxlLT5tdXRleCk7CiAKIAlkb3duKCZpYl91dmVyYnNfaWRyX211dGV4KTsKIAlpZHJfcmVtb3ZlKCZpYl91dmVyYnNfY3FfaWRyLCB1b2JqLT51b2JqZWN0LmlkKTsKQEAgLTcxMiw5ICs3MjQsOSBAQAogCiAJaWRyX3JlbW92ZSgmaWJfdXZlcmJzX2NxX2lkciwgY21kLmNxX2hhbmRsZSk7CiAKLQlzcGluX2xvY2tfaXJxKCZmaWxlLT51Y29udGV4dC0+bG9jayk7CisJZG93bigmZmlsZS0+bXV0ZXgpOwogCWxpc3RfZGVsKCZ1b2JqLT51b2JqZWN0Lmxpc3QpOwotCXNwaW5fdW5sb2NrX2lycSgmZmlsZS0+dWNvbnRleHQtPmxvY2spOworCXVwKCZmaWxlLT5tdXRleCk7CiAKIAlzcGluX2xvY2tfaXJxKCZmaWxlLT5jb21wX2ZpbGVbMF0ubG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2dCwgdG1wLCAmdW9iai0+Y29tcF9saXN0LCBvYmpfbGlzdCkgewpAQCAtODQ3LDkgKzg1OSw5IEBACiAKIAlyZXNwLnFwX2hhbmRsZSA9IHVvYmotPnVvYmplY3QuaWQ7CiAKLQlzcGluX2xvY2tfaXJxKCZmaWxlLT51Y29udGV4dC0+bG9jayk7CisJZG93bigmZmlsZS0+bXV0ZXgpOwogCWxpc3RfYWRkX3RhaWwoJnVvYmotPnVvYmplY3QubGlzdCwgJmZpbGUtPnVjb250ZXh0LT5xcF9saXN0KTsKLQlzcGluX3VubG9ja19pcnEoJmZpbGUtPnVjb250ZXh0LT5sb2NrKTsKKwl1cCgmZmlsZS0+bXV0ZXgpOwogCiAJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpIGNtZC5yZXNwb25zZSwKIAkJCSAmcmVzcCwgc2l6ZW9mIHJlc3ApKSB7CkBAIC04NjIsOSArODc0LDkgQEAKIAlyZXR1cm4gaW5fbGVuOwogCiBlcnJfbGlzdDoKLQlzcGluX2xvY2tfaXJxKCZmaWxlLT51Y29udGV4dC0+bG9jayk7CisJZG93bigmZmlsZS0+bXV0ZXgpOwogCWxpc3RfZGVsKCZ1b2JqLT51b2JqZWN0Lmxpc3QpOwotCXNwaW5fdW5sb2NrX2lycSgmZmlsZS0+dWNvbnRleHQtPmxvY2spOworCXVwKCZmaWxlLT5tdXRleCk7CiAKIGVycl9kZXN0cm95OgogCWliX2Rlc3Ryb3lfcXAocXApOwpAQCAtOTg5LDkgKzEwMDEsOSBAQAogCiAJaWRyX3JlbW92ZSgmaWJfdXZlcmJzX3FwX2lkciwgY21kLnFwX2hhbmRsZSk7CiAKLQlzcGluX2xvY2tfaXJxKCZmaWxlLT51Y29udGV4dC0+bG9jayk7CisJZG93bigmZmlsZS0+bXV0ZXgpOwogCWxpc3RfZGVsKCZ1b2JqLT51b2JqZWN0Lmxpc3QpOwotCXNwaW5fdW5sb2NrX2lycSgmZmlsZS0+dWNvbnRleHQtPmxvY2spOworCXVwKCZmaWxlLT5tdXRleCk7CiAKIAlzcGluX2xvY2tfaXJxKCZmaWxlLT5hc3luY19maWxlLmxvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldnQsIHRtcCwgJnVvYmotPmV2ZW50X2xpc3QsIG9ial9saXN0KSB7CkBAIC0xMTM2LDkgKzExNDgsOSBAQAogCiAJcmVzcC5zcnFfaGFuZGxlID0gdW9iai0+dW9iamVjdC5pZDsKIAotCXNwaW5fbG9ja19pcnEoJmZpbGUtPnVjb250ZXh0LT5sb2NrKTsKKwlkb3duKCZmaWxlLT5tdXRleCk7CiAJbGlzdF9hZGRfdGFpbCgmdW9iai0+dW9iamVjdC5saXN0LCAmZmlsZS0+dWNvbnRleHQtPnNycV9saXN0KTsKLQlzcGluX3VubG9ja19pcnEoJmZpbGUtPnVjb250ZXh0LT5sb2NrKTsKKwl1cCgmZmlsZS0+bXV0ZXgpOwogCiAJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpIGNtZC5yZXNwb25zZSwKIAkJCSAmcmVzcCwgc2l6ZW9mIHJlc3ApKSB7CkBAIC0xMTUxLDkgKzExNjMsOSBAQAogCXJldHVybiBpbl9sZW47CiAKIGVycl9saXN0OgotCXNwaW5fbG9ja19pcnEoJmZpbGUtPnVjb250ZXh0LT5sb2NrKTsKKwlkb3duKCZmaWxlLT5tdXRleCk7CiAJbGlzdF9kZWwoJnVvYmotPnVvYmplY3QubGlzdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZmaWxlLT51Y29udGV4dC0+bG9jayk7CisJdXAoJmZpbGUtPm11dGV4KTsKIAogZXJyX2Rlc3Ryb3k6CiAJaWJfZGVzdHJveV9zcnEoc3JxKTsKQEAgLTEyMjcsOSArMTIzOSw5IEBACiAKIAlpZHJfcmVtb3ZlKCZpYl91dmVyYnNfc3JxX2lkciwgY21kLnNycV9oYW5kbGUpOwogCi0Jc3Bpbl9sb2NrX2lycSgmZmlsZS0+dWNvbnRleHQtPmxvY2spOworCWRvd24oJmZpbGUtPm11dGV4KTsKIAlsaXN0X2RlbCgmdW9iai0+dW9iamVjdC5saXN0KTsKLQlzcGluX3VubG9ja19pcnEoJmZpbGUtPnVjb250ZXh0LT5sb2NrKTsKKwl1cCgmZmlsZS0+bXV0ZXgpOwogCiAJc3Bpbl9sb2NrX2lycSgmZmlsZS0+YXN5bmNfZmlsZS5sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXZ0LCB0bXAsICZ1b2JqLT5ldmVudF9saXN0LCBvYmpfbGlzdCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMKaW5kZXggY2U1YmRiNy4uMTI1MTE4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jCkBAIC00NDgsNyArNDQ4LDkgQEAKIAlpZiAoaGRyLmluX3dvcmRzICogNCAhPSBjb3VudCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoaGRyLmNvbW1hbmQgPCAwIHx8IGhkci5jb21tYW5kID49IEFSUkFZX1NJWkUodXZlcmJzX2NtZF90YWJsZSkpCisJaWYgKGhkci5jb21tYW5kIDwgMAkJCQl8fAorCSAgICBoZHIuY29tbWFuZCA+PSBBUlJBWV9TSVpFKHV2ZXJic19jbWRfdGFibGUpIHx8CisJICAgICF1dmVyYnNfY21kX3RhYmxlW2hkci5jb21tYW5kXSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoIWZpbGUtPnVjb250ZXh0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCkBAIC00ODQsMjcgKzQ4NiwyOSBAQAogCWZpbGUgPSBrbWFsbG9jKHNpemVvZiAqZmlsZSArCiAJCSAgICAgICAoZGV2LT5udW1fY29tcCAtIDEpICogc2l6ZW9mIChzdHJ1Y3QgaWJfdXZlcmJzX2V2ZW50X2ZpbGUpLAogCQkgICAgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFmaWxlKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoIWZpbGUpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQogCiAJZmlsZS0+ZGV2aWNlID0gZGV2OwogCWtyZWZfaW5pdCgmZmlsZS0+cmVmKTsKKwlpbml0X01VVEVYKCZmaWxlLT5tdXRleCk7CiAKIAlmaWxlLT51Y29udGV4dCA9IE5VTEw7CiAKKwlrcmVmX2dldCgmZmlsZS0+cmVmKTsKIAlyZXQgPSBpYl91dmVyYnNfZXZlbnRfaW5pdCgmZmlsZS0+YXN5bmNfZmlsZSwgZmlsZSk7CiAJaWYgKHJldCkKLQkJZ290byBlcnI7CisJCWdvdG8gZXJyX2tyZWY7CiAKIAlmaWxlLT5hc3luY19maWxlLmlzX2FzeW5jID0gMTsKIAotCWtyZWZfZ2V0KCZmaWxlLT5yZWYpOwotCiAJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX2NvbXA7ICsraSkgeworCQlrcmVmX2dldCgmZmlsZS0+cmVmKTsKIAkJcmV0ID0gaWJfdXZlcmJzX2V2ZW50X2luaXQoJmZpbGUtPmNvbXBfZmlsZVtpXSwgZmlsZSk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycl9hc3luYzsKLQkJa3JlZl9nZXQoJmZpbGUtPnJlZik7CiAJCWZpbGUtPmNvbXBfZmlsZVtpXS5pc19hc3luYyA9IDA7CiAJfQogCkBAIC01MjQsOSArNTI4LDE2IEBACiAKIAlpYl91dmVyYnNfZXZlbnRfcmVsZWFzZSgmZmlsZS0+YXN5bmNfZmlsZSk7CiAKLWVycjoKK2Vycl9rcmVmOgorCS8qCisJICogT25lIGV4dHJhIGtyZWZfcHV0KCkgYmVjYXVzZSB3ZSB0b29rIGEgcmVmZXJlbmNlIGJlZm9yZSB0aGUKKwkgKiBldmVudCBmaWxlIGNyZWF0aW9uIHRoYXQgZmFpbGVkIGFuZCBnb3QgdXMgaGVyZS4KKwkgKi8KKwlrcmVmX3B1dCgmZmlsZS0+cmVmLCBpYl91dmVyYnNfcmVsZWFzZV9maWxlKTsKIAlrcmVmX3B1dCgmZmlsZS0+cmVmLCBpYl91dmVyYnNfcmVsZWFzZV9maWxlKTsKIAorZXJyOgorCW1vZHVsZV9wdXQoZGV2LT5pYl9kZXYtPm93bmVyKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmMKaW5kZXggY2M3NThhMi4uZjZhOGFjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NtZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuYwpAQCAtNjA1LDcgKzYwNSw3IEBACiAJCQllcnIgPSAtRUlOVkFMOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJZm9yIChpID0gMDsgaSA8IG10aGNhX2ljbV9zaXplKCZpdGVyKSAvICgxIDw8IGxnKTsgKytpLCArK25lbnQpIHsKKwkJZm9yIChpID0gMDsgaSA8IG10aGNhX2ljbV9zaXplKCZpdGVyKSAvICgxIDw8IGxnKTsgKytpKSB7CiAJCQlpZiAodmlydCAhPSAtMSkgewogCQkJCXBhZ2VzW25lbnQgKiAyXSA9IGNwdV90b19iZTY0KHZpcnQpOwogCQkJCXZpcnQgKz0gMSA8PCBsZzsKQEAgLTYxNiw3ICs2MTYsNyBAQAogCQkJdHMgKz0gMSA8PCAobGcgLSAxMCk7CiAJCQkrK3RjOwogCi0JCQlpZiAobmVudCA9PSBNVEhDQV9NQUlMQk9YX1NJWkUgLyAxNikgeworCQkJaWYgKCsrbmVudCA9PSBNVEhDQV9NQUlMQk9YX1NJWkUgLyAxNikgewogCQkJCWVyciA9IG10aGNhX2NtZChkZXYsIG1haWxib3gtPmRtYSwgbmVudCwgMCwgb3AsCiAJCQkJCQlDTURfVElNRV9DTEFTU19CLCBzdGF0dXMpOwogCQkJCWlmIChlcnIgfHwgKnN0YXR1cykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9lcS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2VxLmMKaW5kZXggMThmMDk4MS4uOGRmYWZkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2VxLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2VxLmMKQEAgLTM5NiwyMCArMzk2LDIxIEBACiAJCXdyaXRlbChkZXYtPmVxX3RhYmxlLmNscl9tYXNrLCBkZXYtPmVxX3RhYmxlLmNscl9pbnQpOwogCiAJZWNyID0gcmVhZGwoZGV2LT5lcV9yZWdzLnRhdm9yLmVjcl9iYXNlICsgNCk7Ci0JaWYgKGVjcikgewotCQl3cml0ZWwoZWNyLCBkZXYtPmVxX3JlZ3MudGF2b3IuZWNyX2Jhc2UgKwotCQkgICAgICAgTVRIQ0FfRUNSX0NMUl9CQVNFIC0gTVRIQ0FfRUNSX0JBU0UgKyA0KTsKKwlpZiAoIWVjcikKKwkJcmV0dXJuIElSUV9OT05FOwogCi0JCWZvciAoaSA9IDA7IGkgPCBNVEhDQV9OVU1fRVE7ICsraSkKLQkJCWlmIChlY3IgJiBkZXYtPmVxX3RhYmxlLmVxW2ldLmVxbl9tYXNrICYmCi0JCQkgICAgbXRoY2FfZXFfaW50KGRldiwgJmRldi0+ZXFfdGFibGUuZXFbaV0pKSB7CisJd3JpdGVsKGVjciwgZGV2LT5lcV9yZWdzLnRhdm9yLmVjcl9iYXNlICsKKwkgICAgICAgTVRIQ0FfRUNSX0NMUl9CQVNFIC0gTVRIQ0FfRUNSX0JBU0UgKyA0KTsKKworCWZvciAoaSA9IDA7IGkgPCBNVEhDQV9OVU1fRVE7ICsraSkKKwkJaWYgKGVjciAmIGRldi0+ZXFfdGFibGUuZXFbaV0uZXFuX21hc2spIHsKKwkJCWlmIChtdGhjYV9lcV9pbnQoZGV2LCAmZGV2LT5lcV90YWJsZS5lcVtpXSkpCiAJCQkJdGF2b3Jfc2V0X2VxX2NpKGRldiwgJmRldi0+ZXFfdGFibGUuZXFbaV0sCiAJCQkJCQlkZXYtPmVxX3RhYmxlLmVxW2ldLmNvbnNfaW5kZXgpOwotCQkJCXRhdm9yX2VxX3JlcV9ub3QoZGV2LCBkZXYtPmVxX3RhYmxlLmVxW2ldLmVxbik7Ci0JCQl9Ci0JfQorCQkJdGF2b3JfZXFfcmVxX25vdChkZXYsIGRldi0+ZXFfdGFibGUuZXFbaV0uZXFuKTsKKwkJfQogCi0JcmV0dXJuIElSUV9SRVRWQUwoZWNyKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBtdGhjYV90YXZvcl9tc2lfeF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZXFfcHRyLApAQCAtNDc2LDEyICs0NzcsOCBAQAogCWludCBpOwogCXU4IHN0YXR1czsKIAotCS8qIE1ha2Ugc3VyZSBFUSBzaXplIGlzIGFsaWduZWQgdG8gYSBwb3dlciBvZiAyIHNpemUuICovCi0JZm9yIChpID0gMTsgaSA8IG5lbnQ7IGkgPDw9IDEpCi0JCTsgLyogbm90aGluZyAqLwotCW5lbnQgPSBpOwotCi0JZXEtPmRldiA9IGRldjsKKwllcS0+ZGV2ICA9IGRldjsKKwllcS0+bmVudCA9IHJvdW5kdXBfcG93X29mX3R3byhtYXgobmVudCwgMikpOwogCiAJZXEtPnBhZ2VfbGlzdCA9IGttYWxsb2MobnBhZ2VzICogc2l6ZW9mICplcS0+cGFnZV9saXN0LAogCQkJCUdGUF9LRVJORUwpOwpAQCAtNTEyLDcgKzUwOSw3IEBACiAJCW1lbXNldChlcS0+cGFnZV9saXN0W2ldLmJ1ZiwgMCwgUEFHRV9TSVpFKTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgbmVudDsgKytpKQorCWZvciAoaSA9IDA7IGkgPCBlcS0+bmVudDsgKytpKQogCQlzZXRfZXFlX2h3KGdldF9lcWUoZXEsIGkpKTsKIAogCWVxLT5lcW4gPSBtdGhjYV9hbGxvYygmZGV2LT5lcV90YWJsZS5hbGxvYyk7CkBAIC01MjgsOCArNTI1LDYgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfZnJlZV9lcTsKIAotCWVxLT5uZW50ID0gbmVudDsKLQogCW1lbXNldChlcV9jb250ZXh0LCAwLCBzaXplb2YgKmVxX2NvbnRleHQpOwogCWVxX2NvbnRleHQtPmZsYWdzICAgICAgICAgICA9IGNwdV90b19iZTMyKE1USENBX0VRX1NUQVRVU19PSyAgIHwKIAkJCQkJCSAgTVRIQ0FfRVFfT1dORVJfSFcgICAgfApAQCAtNTM4LDcgKzUzMyw3IEBACiAJaWYgKG10aGNhX2lzX21lbWZyZWUoZGV2KSkKIAkJZXFfY29udGV4dC0+ZmxhZ3MgIHw9IGNwdV90b19iZTMyKE1USENBX0VRX1NUQVRFX0FSQkVMKTsKIAotCWVxX2NvbnRleHQtPmxvZ3NpemVfdXNycGFnZSA9IGNwdV90b19iZTMyKChmZnMobmVudCkgLSAxKSA8PCAyNCk7CisJZXFfY29udGV4dC0+bG9nc2l6ZV91c3JwYWdlID0gY3B1X3RvX2JlMzIoKGZmcyhlcS0+bmVudCkgLSAxKSA8PCAyNCk7CiAJaWYgKG10aGNhX2lzX21lbWZyZWUoZGV2KSkgewogCQllcV9jb250ZXh0LT5hcmJlbF9wZCA9IGNwdV90b19iZTMyKGRldi0+ZHJpdmVyX3BkLnBkX251bSk7CiAJfSBlbHNlIHsKQEAgLTU2OSw3ICs1NjQsNyBAQAogCWRldi0+ZXFfdGFibGUuYXJtX21hc2sgfD0gZXEtPmVxbl9tYXNrOwogCiAJbXRoY2FfZGJnKGRldiwgIkFsbG9jYXRlZCBFUSAlZCB3aXRoICVkIGVudHJpZXNcbiIsCi0JCSAgZXEtPmVxbiwgbmVudCk7CisJCSAgZXEtPmVxbiwgZXEtPm5lbnQpOwogCiAJcmV0dXJuIGVycjsKIApAQCAtODQyLDcgKzgzNyw3IEBACiAJCWRldi0+ZXFfdGFibGUuY2xyX21hc2sgPQogCQkJc3dhYjMyKDEgPDwgKGRldi0+ZXFfdGFibGUuaW50YV9waW4gJiAzMSkpOwogCQlkZXYtPmVxX3RhYmxlLmNscl9pbnQgID0gZGV2LT5jbHJfYmFzZSArCi0JCQkoZGV2LT5lcV90YWJsZS5pbnRhX3BpbiA8IDMxID8gNCA6IDApOworCQkJKGRldi0+ZXFfdGFibGUuaW50YV9waW4gPCAzMiA/IDQgOiAwKTsKIAl9CiAKIAlkZXYtPmVxX3RhYmxlLmFybV9tYXNrID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFpbi5jCmluZGV4IGZmYmNkNDAuLjIzYTNmNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21haW4uYwpAQCAtNTAzLDYgKzUwMywyNSBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyB2b2lkIG10aGNhX2ZyZWVfaWNtcyhzdHJ1Y3QgbXRoY2FfZGV2ICptZGV2KQoreworCXU4IHN0YXR1czsKKworCW10aGNhX2ZyZWVfaWNtX3RhYmxlKG1kZXYsIG1kZXYtPm1jZ190YWJsZS50YWJsZSk7CisJaWYgKG1kZXYtPm10aGNhX2ZsYWdzICYgTVRIQ0FfRkxBR19TUlEpCisJCW10aGNhX2ZyZWVfaWNtX3RhYmxlKG1kZXYsIG1kZXYtPnNycV90YWJsZS50YWJsZSk7CisJbXRoY2FfZnJlZV9pY21fdGFibGUobWRldiwgbWRldi0+Y3FfdGFibGUudGFibGUpOworCW10aGNhX2ZyZWVfaWNtX3RhYmxlKG1kZXYsIG1kZXYtPnFwX3RhYmxlLnJkYl90YWJsZSk7CisJbXRoY2FfZnJlZV9pY21fdGFibGUobWRldiwgbWRldi0+cXBfdGFibGUuZXFwX3RhYmxlKTsKKwltdGhjYV9mcmVlX2ljbV90YWJsZShtZGV2LCBtZGV2LT5xcF90YWJsZS5xcF90YWJsZSk7CisJbXRoY2FfZnJlZV9pY21fdGFibGUobWRldiwgbWRldi0+bXJfdGFibGUubXB0X3RhYmxlKTsKKwltdGhjYV9mcmVlX2ljbV90YWJsZShtZGV2LCBtZGV2LT5tcl90YWJsZS5tdHRfdGFibGUpOworCW10aGNhX3VubWFwX2VxX2ljbShtZGV2KTsKKworCW10aGNhX1VOTUFQX0lDTV9BVVgobWRldiwgJnN0YXR1cyk7CisJbXRoY2FfZnJlZV9pY20obWRldiwgbWRldi0+ZncuYXJiZWwuYXV4X2ljbSk7Cit9CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IG10aGNhX2luaXRfYXJiZWwoc3RydWN0IG10aGNhX2RldiAqbWRldikKIHsKIAlzdHJ1Y3QgbXRoY2FfZGV2X2xpbSAgICAgICAgZGV2X2xpbTsKQEAgLTU4MCwxOCArNTk5LDcgQEAKIAlyZXR1cm4gMDsKIAogZXJyX2ZyZWVfaWNtOgotCWlmIChtZGV2LT5tdGhjYV9mbGFncyAmIE1USENBX0ZMQUdfU1JRKQotCQltdGhjYV9mcmVlX2ljbV90YWJsZShtZGV2LCBtZGV2LT5zcnFfdGFibGUudGFibGUpOwotCW10aGNhX2ZyZWVfaWNtX3RhYmxlKG1kZXYsIG1kZXYtPmNxX3RhYmxlLnRhYmxlKTsKLQltdGhjYV9mcmVlX2ljbV90YWJsZShtZGV2LCBtZGV2LT5xcF90YWJsZS5yZGJfdGFibGUpOwotCW10aGNhX2ZyZWVfaWNtX3RhYmxlKG1kZXYsIG1kZXYtPnFwX3RhYmxlLmVxcF90YWJsZSk7Ci0JbXRoY2FfZnJlZV9pY21fdGFibGUobWRldiwgbWRldi0+cXBfdGFibGUucXBfdGFibGUpOwotCW10aGNhX2ZyZWVfaWNtX3RhYmxlKG1kZXYsIG1kZXYtPm1yX3RhYmxlLm1wdF90YWJsZSk7Ci0JbXRoY2FfZnJlZV9pY21fdGFibGUobWRldiwgbWRldi0+bXJfdGFibGUubXR0X3RhYmxlKTsKLQltdGhjYV91bm1hcF9lcV9pY20obWRldik7Ci0KLQltdGhjYV9VTk1BUF9JQ01fQVVYKG1kZXYsICZzdGF0dXMpOwotCW10aGNhX2ZyZWVfaWNtKG1kZXYsIG1kZXYtPmZ3LmFyYmVsLmF1eF9pY20pOworCW10aGNhX2ZyZWVfaWNtcyhtZGV2KTsKIAogZXJyX3N0b3BfZnc6CiAJbXRoY2FfVU5NQVBfRkEobWRldiwgJnN0YXR1cyk7CkBAIC02MTEsMTggKzYxOSw3IEBACiAJbXRoY2FfQ0xPU0VfSENBKG1kZXYsIDAsICZzdGF0dXMpOwogCiAJaWYgKG10aGNhX2lzX21lbWZyZWUobWRldikpIHsKLQkJaWYgKG1kZXYtPm10aGNhX2ZsYWdzICYgTVRIQ0FfRkxBR19TUlEpCi0JCQltdGhjYV9mcmVlX2ljbV90YWJsZShtZGV2LCBtZGV2LT5zcnFfdGFibGUudGFibGUpOwotCQltdGhjYV9mcmVlX2ljbV90YWJsZShtZGV2LCBtZGV2LT5jcV90YWJsZS50YWJsZSk7Ci0JCW10aGNhX2ZyZWVfaWNtX3RhYmxlKG1kZXYsIG1kZXYtPnFwX3RhYmxlLnJkYl90YWJsZSk7Ci0JCW10aGNhX2ZyZWVfaWNtX3RhYmxlKG1kZXYsIG1kZXYtPnFwX3RhYmxlLmVxcF90YWJsZSk7Ci0JCW10aGNhX2ZyZWVfaWNtX3RhYmxlKG1kZXYsIG1kZXYtPnFwX3RhYmxlLnFwX3RhYmxlKTsKLQkJbXRoY2FfZnJlZV9pY21fdGFibGUobWRldiwgbWRldi0+bXJfdGFibGUubXB0X3RhYmxlKTsKLQkJbXRoY2FfZnJlZV9pY21fdGFibGUobWRldiwgbWRldi0+bXJfdGFibGUubXR0X3RhYmxlKTsKLQkJbXRoY2FfdW5tYXBfZXFfaWNtKG1kZXYpOwotCi0JCW10aGNhX1VOTUFQX0lDTV9BVVgobWRldiwgJnN0YXR1cyk7Ci0JCW10aGNhX2ZyZWVfaWNtKG1kZXYsIG1kZXYtPmZ3LmFyYmVsLmF1eF9pY20pOworCQltdGhjYV9mcmVlX2ljbXMobWRldik7CiAKIAkJbXRoY2FfVU5NQVBfRkEobWRldiwgJnN0YXR1cyk7CiAJCW10aGNhX2ZyZWVfaWNtKG1kZXYsIG1kZXYtPmZ3LmFyYmVsLmZ3X2ljbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWVtZnJlZS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21lbWZyZWUuYwppbmRleCAxODI3NDAwLi43YmQ3YTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWVtZnJlZS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tZW1mcmVlLmMKQEAgLTI5MCw3ICsyOTAsNyBAQAogCWludCBpOwogCXU4IHN0YXR1czsKIAotCW51bV9pY20gPSBvYmpfc2l6ZSAqIG5vYmogLyBNVEhDQV9UQUJMRV9DSFVOS19TSVpFOworCW51bV9pY20gPSAob2JqX3NpemUgKiBub2JqICsgTVRIQ0FfVEFCTEVfQ0hVTktfU0laRSAtIDEpIC8gTVRIQ0FfVEFCTEVfQ0hVTktfU0laRTsKIAogCXRhYmxlID0ga21hbGxvYyhzaXplb2YgKnRhYmxlICsgbnVtX2ljbSAqIHNpemVvZiAqdGFibGUtPmljbSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0YWJsZSkKQEAgLTUyOSwxMiArNTI5LDI1IEBACiAJCQlnb3RvIGZvdW5kOwogCQl9CiAKKwlmb3IgKGkgPSBzdGFydDsgaSAhPSBlbmQ7IGkgKz0gZGlyKQorCQlpZiAoIWRldi0+ZGJfdGFiLT5wYWdlW2ldLmRiX3JlYykgeworCQkJcGFnZSA9IGRldi0+ZGJfdGFiLT5wYWdlICsgaTsKKwkJCWdvdG8gYWxsb2M7CisJCX0KKwogCWlmIChkZXYtPmRiX3RhYi0+bWF4X2dyb3VwMSA+PSBkZXYtPmRiX3RhYi0+bWluX2dyb3VwMiAtIDEpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQogCisJaWYgKGdyb3VwID09IDApCisJCSsrZGV2LT5kYl90YWItPm1heF9ncm91cDE7CisJZWxzZQorCQktLWRldi0+ZGJfdGFiLT5taW5fZ3JvdXAyOworCiAJcGFnZSA9IGRldi0+ZGJfdGFiLT5wYWdlICsgZW5kOworCithbGxvYzoKIAlwYWdlLT5kYl9yZWMgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmRldi0+cGRldi0+ZGV2LCA0MDk2LAogCQkJCQkgICZwYWdlLT5tYXBwaW5nLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBhZ2UtPmRiX3JlYykgewpAQCAtNTU0LDEwICs1NjcsNiBAQAogCX0KIAogCWJpdG1hcF96ZXJvKHBhZ2UtPnVzZWQsIE1USENBX0RCX1JFQ19QRVJfUEFHRSk7Ci0JaWYgKGdyb3VwID09IDApCi0JCSsrZGV2LT5kYl90YWItPm1heF9ncm91cDE7Ci0JZWxzZQotCQktLWRldi0+ZGJfdGFiLT5taW5fZ3JvdXAyOwogCiBmb3VuZDoKIAlqID0gZmluZF9maXJzdF96ZXJvX2JpdChwYWdlLT51c2VkLCBNVEhDQV9EQl9SRUNfUEVSX1BBR0UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuYwppbmRleCAxYzFjMmUyLi4zZjUzMTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuYwpAQCAtODQsNyArODQsNyBAQAogCXByb3BzLT52ZW5kb3JfaWQgICAgICAgICAgID0gYmUzMl90b19jcHVwKChfX2JlMzIgKikgKG91dF9tYWQtPmRhdGEgKyAzNikpICYKIAkJMHhmZmZmZmY7CiAJcHJvcHMtPnZlbmRvcl9wYXJ0X2lkICAgICAgPSBiZTE2X3RvX2NwdXAoKF9fYmUxNiAqKSAob3V0X21hZC0+ZGF0YSArIDMwKSk7Ci0JcHJvcHMtPmh3X3ZlciAgICAgICAgICAgICAgPSBiZTE2X3RvX2NwdXAoKF9fYmUxNiAqKSAob3V0X21hZC0+ZGF0YSArIDMyKSk7CisJcHJvcHMtPmh3X3ZlciAgICAgICAgICAgICAgPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKSAob3V0X21hZC0+ZGF0YSArIDMyKSk7CiAJbWVtY3B5KCZwcm9wcy0+c3lzX2ltYWdlX2d1aWQsIG91dF9tYWQtPmRhdGEgKyAgNCwgOCk7CiAJbWVtY3B5KCZwcm9wcy0+bm9kZV9ndWlkLCAgICAgIG91dF9tYWQtPmRhdGEgKyAxMiwgOCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKaW5kZXggYmNlZjA2Yi4uNWZhMDA2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKQEAgLTIyNyw3ICsyMjcsNiBAQAogCXdxLT5sYXN0X2NvbXAgPSB3cS0+bWF4IC0gMTsKIAl3cS0+aGVhZCAgICAgID0gMDsKIAl3cS0+dGFpbCAgICAgID0gMDsKLQl3cS0+bGFzdCAgICAgID0gTlVMTDsKIH0KIAogdm9pZCBtdGhjYV9xcF9ldmVudChzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHUzMiBxcG4sCkBAIC02ODcsNyArNjg2LDcgQEAKIAl9CiAKIAlpZiAoYXR0cl9tYXNrICYgSUJfUVBfVElNRU9VVCkgewotCQlxcF9jb250ZXh0LT5wcmlfcGF0aC5hY2t0byA9IGF0dHItPnRpbWVvdXQ7CisJCXFwX2NvbnRleHQtPnByaV9wYXRoLmFja3RvID0gYXR0ci0+dGltZW91dCA8PCAzOwogCQlxcF9wYXJhbS0+b3B0X3BhcmFtX21hc2sgfD0gY3B1X3RvX2JlMzIoTVRIQ0FfUVBfT1BUUEFSX0FDS19USU1FT1VUKTsKIAl9CiAKQEAgLTExMDMsNiArMTEwMiw5IEBACiAJCX0KIAl9CiAKKwlxcC0+c3EubGFzdCA9IGdldF9zZW5kX3dxZShxcCwgcXAtPnNxLm1heCAtIDEpOworCXFwLT5ycS5sYXN0ID0gZ2V0X3JlY3Zfd3FlKHFwLCBxcC0+cnEubWF4IC0gMSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTU4MywxNSArMTU4NSwxMyBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlpZiAocHJldl93cWUpIHsKLQkJCSgoc3RydWN0IG10aGNhX25leHRfc2VnICopIHByZXZfd3FlKS0+bmRhX29wID0KLQkJCQljcHVfdG9fYmUzMigoKGluZCA8PCBxcC0+c3Eud3FlX3NoaWZ0KSArCi0JCQkJCSAgICAgcXAtPnNlbmRfd3FlX29mZnNldCkgfAotCQkJCQkgICAgbXRoY2Ffb3Bjb2RlW3dyLT5vcGNvZGVdKTsKLQkJCXdtYigpOwotCQkJKChzdHJ1Y3QgbXRoY2FfbmV4dF9zZWcgKikgcHJldl93cWUpLT5lZV9uZHMgPQotCQkJCWNwdV90b19iZTMyKChzaXplMCA/IDAgOiBNVEhDQV9ORVhUX0RCRCkgfCBzaXplKTsKLQkJfQorCQkoKHN0cnVjdCBtdGhjYV9uZXh0X3NlZyAqKSBwcmV2X3dxZSktPm5kYV9vcCA9CisJCQljcHVfdG9fYmUzMigoKGluZCA8PCBxcC0+c3Eud3FlX3NoaWZ0KSArCisJCQkJICAgICBxcC0+c2VuZF93cWVfb2Zmc2V0KSB8CisJCQkJICAgIG10aGNhX29wY29kZVt3ci0+b3Bjb2RlXSk7CisJCXdtYigpOworCQkoKHN0cnVjdCBtdGhjYV9uZXh0X3NlZyAqKSBwcmV2X3dxZSktPmVlX25kcyA9CisJCQljcHVfdG9fYmUzMigoc2l6ZTAgPyAwIDogTVRIQ0FfTkVYVF9EQkQpIHwgc2l6ZSk7CiAKIAkJaWYgKCFzaXplMCkgewogCQkJc2l6ZTAgPSBzaXplOwpAQCAtMTY4OCwxMyArMTY4OCwxMSBAQAogCiAJCXFwLT53cmlkW2luZF0gPSB3ci0+d3JfaWQ7CiAKLQkJaWYgKGxpa2VseShwcmV2X3dxZSkpIHsKLQkJCSgoc3RydWN0IG10aGNhX25leHRfc2VnICopIHByZXZfd3FlKS0+bmRhX29wID0KLQkJCQljcHVfdG9fYmUzMigoaW5kIDw8IHFwLT5ycS53cWVfc2hpZnQpIHwgMSk7Ci0JCQl3bWIoKTsKLQkJCSgoc3RydWN0IG10aGNhX25leHRfc2VnICopIHByZXZfd3FlKS0+ZWVfbmRzID0KLQkJCQljcHVfdG9fYmUzMihNVEhDQV9ORVhUX0RCRCB8IHNpemUpOwotCQl9CisJCSgoc3RydWN0IG10aGNhX25leHRfc2VnICopIHByZXZfd3FlKS0+bmRhX29wID0KKwkJCWNwdV90b19iZTMyKChpbmQgPDwgcXAtPnJxLndxZV9zaGlmdCkgfCAxKTsKKwkJd21iKCk7CisJCSgoc3RydWN0IG10aGNhX25leHRfc2VnICopIHByZXZfd3FlKS0+ZWVfbmRzID0KKwkJCWNwdV90b19iZTMyKE1USENBX05FWFRfREJEIHwgc2l6ZSk7CiAKIAkJaWYgKCFzaXplMCkKIAkJCXNpemUwID0gc2l6ZTsKQEAgLTE5MDUsMTUgKzE5MDMsMTMgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJaWYgKGxpa2VseShwcmV2X3dxZSkpIHsKLQkJCSgoc3RydWN0IG10aGNhX25leHRfc2VnICopIHByZXZfd3FlKS0+bmRhX29wID0KLQkJCQljcHVfdG9fYmUzMigoKGluZCA8PCBxcC0+c3Eud3FlX3NoaWZ0KSArCi0JCQkJCSAgICAgcXAtPnNlbmRfd3FlX29mZnNldCkgfAotCQkJCQkgICAgbXRoY2Ffb3Bjb2RlW3dyLT5vcGNvZGVdKTsKLQkJCXdtYigpOwotCQkJKChzdHJ1Y3QgbXRoY2FfbmV4dF9zZWcgKikgcHJldl93cWUpLT5lZV9uZHMgPQotCQkJCWNwdV90b19iZTMyKE1USENBX05FWFRfREJEIHwgc2l6ZSk7Ci0JCX0KKwkJKChzdHJ1Y3QgbXRoY2FfbmV4dF9zZWcgKikgcHJldl93cWUpLT5uZGFfb3AgPQorCQkJY3B1X3RvX2JlMzIoKChpbmQgPDwgcXAtPnNxLndxZV9zaGlmdCkgKworCQkJCSAgICAgcXAtPnNlbmRfd3FlX29mZnNldCkgfAorCQkJCSAgICBtdGhjYV9vcGNvZGVbd3ItPm9wY29kZV0pOworCQl3bWIoKTsKKwkJKChzdHJ1Y3QgbXRoY2FfbmV4dF9zZWcgKikgcHJldl93cWUpLT5lZV9uZHMgPQorCQkJY3B1X3RvX2JlMzIoTVRIQ0FfTkVYVF9EQkQgfCBzaXplKTsKIAogCQlpZiAoIXNpemUwKSB7CiAJCQlzaXplMCA9IHNpemU7CkBAIC0yMTI3LDUgKzIxMjMsNiBAQAogCWZvciAoaSA9IDA7IGkgPCAyOyArK2kpCiAJCW10aGNhX0NPTkZfU1BFQ0lBTF9RUChkZXYsIGksIDAsICZzdGF0dXMpOwogCisJbXRoY2FfYXJyYXlfY2xlYW51cCgmZGV2LT5xcF90YWJsZS5xcCwgZGV2LT5saW1pdHMubnVtX3Fwcyk7CiAJbXRoY2FfYWxsb2NfY2xlYW51cCgmZGV2LT5xcF90YWJsZS5hbGxvYyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2Ffc3JxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2Ffc3JxLmMKaW5kZXggNzVjZDJkOC4uMTg5OThkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3NycS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9zcnEuYwpAQCAtMTcyLDYgKzE3Miw4IEBACiAJCQlzY2F0dGVyLT5sa2V5ID0gY3B1X3RvX2JlMzIoTVRIQ0FfSU5WQUxfTEtFWSk7CiAJfQogCisJc3JxLT5sYXN0ID0gZ2V0X3dxZShzcnEsIHNycS0+bWF4IC0gMSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTg5LDcgKzE5MSw2IEBACiAKIAlzcnEtPm1heCAgICAgID0gYXR0ci0+bWF4X3dyOwogCXNycS0+bWF4X2dzICAgPSBhdHRyLT5tYXhfc2dlOwotCXNycS0+bGFzdCAgICAgPSBOVUxMOwogCXNycS0+Y291bnRlciAgPSAwOwogCiAJaWYgKG10aGNhX2lzX21lbWZyZWUoZGV2KSkKQEAgLTQwOSw3ICs0MTAsNyBAQAogCQkJbXRoY2FfZXJyKGRldiwgIlNSUSAlMDZ4IGZ1bGxcbiIsIHNycS0+c3Jxbik7CiAJCQllcnIgPSAtRU5PTUVNOwogCQkJKmJhZF93ciA9IHdyOwotCQkJcmV0dXJuIG5yZXE7CisJCQlicmVhazsKIAkJfQogCiAJCXdxZSAgICAgICA9IGdldF93cWUoc3JxLCBpbmQpOwpAQCAtNDI3LDcgKzQyOCw3IEBACiAJCQllcnIgPSAtRUlOVkFMOwogCQkJKmJhZF93ciA9IHdyOwogCQkJc3JxLT5sYXN0ID0gcHJldl93cWU7Ci0JCQlyZXR1cm4gbnJlcTsKKwkJCWJyZWFrOwogCQl9CiAKIAkJZm9yIChpID0gMDsgaSA8IHdyLT5udW1fc2dlOyArK2kpIHsKQEAgLTQ0NiwyMCArNDQ3LDE2IEBACiAJCQkoKHN0cnVjdCBtdGhjYV9kYXRhX3NlZyAqKSB3cWUpLT5hZGRyID0gMDsKIAkJfQogCi0JCWlmIChsaWtlbHkocHJldl93cWUpKSB7Ci0JCQkoKHN0cnVjdCBtdGhjYV9uZXh0X3NlZyAqKSBwcmV2X3dxZSktPm5kYV9vcCA9Ci0JCQkJY3B1X3RvX2JlMzIoKGluZCA8PCBzcnEtPndxZV9zaGlmdCkgfCAxKTsKLQkJCXdtYigpOwotCQkJKChzdHJ1Y3QgbXRoY2FfbmV4dF9zZWcgKikgcHJldl93cWUpLT5lZV9uZHMgPQotCQkJCWNwdV90b19iZTMyKE1USENBX05FWFRfREJEKTsKLQkJfQorCQkoKHN0cnVjdCBtdGhjYV9uZXh0X3NlZyAqKSBwcmV2X3dxZSktPm5kYV9vcCA9CisJCQljcHVfdG9fYmUzMigoaW5kIDw8IHNycS0+d3FlX3NoaWZ0KSB8IDEpOworCQl3bWIoKTsKKwkJKChzdHJ1Y3QgbXRoY2FfbmV4dF9zZWcgKikgcHJldl93cWUpLT5lZV9uZHMgPQorCQkJY3B1X3RvX2JlMzIoTVRIQ0FfTkVYVF9EQkQpOwogCiAJCXNycS0+d3JpZFtpbmRdICA9IHdyLT53cl9pZDsKIAkJc3JxLT5maXJzdF9mcmVlID0gbmV4dF9pbmQ7CiAJfQogCi0JcmV0dXJuIG5yZXE7Ci0KIAlpZiAobGlrZWx5KG5yZXEpKSB7CiAJCV9fYmUzMiBkb29yYmVsbFsyXTsKIApAQCAtNTAzLDcgKzUwMCw3IEBACiAJCQltdGhjYV9lcnIoZGV2LCAiU1JRICUwNnggZnVsbFxuIiwgc3JxLT5zcnFuKTsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQkqYmFkX3dyID0gd3I7Ci0JCQlyZXR1cm4gbnJlcTsKKwkJCWJyZWFrOwogCQl9CiAKIAkJd3FlICAgICAgID0gZ2V0X3dxZShzcnEsIGluZCk7CkBAIC01MTksNyArNTE2LDcgQEAKIAkJaWYgKHVubGlrZWx5KHdyLT5udW1fc2dlID4gc3JxLT5tYXhfZ3MpKSB7CiAJCQllcnIgPSAtRUlOVkFMOwogCQkJKmJhZF93ciA9IHdyOwotCQkJcmV0dXJuIG5yZXE7CisJCQlicmVhazsKIAkJfQogCiAJCWZvciAoaSA9IDA7IGkgPCB3ci0+bnVtX3NnZTsgKytpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liLmggYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liLmgKaW5kZXggYmVhOTYwYi4uNGVhMWMxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWIuaApAQCAtMjU3LDcgKzI1Nyw3IEBACiAKIHZvaWQgaXBvaWJfbWNhc3RfcmVzdGFydF90YXNrKHZvaWQgKmRldl9wdHIpOwogaW50IGlwb2liX21jYXN0X3N0YXJ0X3RocmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLWludCBpcG9pYl9tY2FzdF9zdG9wX3RocmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2ludCBpcG9pYl9tY2FzdF9zdG9wX3RocmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZmx1c2gpOwogCiB2b2lkIGlwb2liX21jYXN0X2Rldl9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogdm9pZCBpcG9pYl9tY2FzdF9kZXZfZmx1c2goc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMKaW5kZXggZWYwZTM4OS4uZjc0NDAwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYwpAQCAtNDMyLDcgKzQzMiw3IEBACiAJCWZsdXNoX3dvcmtxdWV1ZShpcG9pYl93b3JrcXVldWUpOwogCX0KIAotCWlwb2liX21jYXN0X3N0b3BfdGhyZWFkKGRldik7CisJaXBvaWJfbWNhc3Rfc3RvcF90aHJlYWQoZGV2LCAxKTsKIAogCS8qCiAJICogRmx1c2ggdGhlIG11bHRpY2FzdCBncm91cHMgZmlyc3Qgc28gd2Ugc3RvcCBhbnkgbXVsdGljYXN0IGpvaW5zLiBUaGUKQEAgLTU5OSw3ICs1OTksNyBAQAogCiAJaXBvaWJfZGJnKHByaXYsICJjbGVhbmluZyB1cCBpYl9kZXZcbiIpOwogCi0JaXBvaWJfbWNhc3Rfc3RvcF90aHJlYWQoZGV2KTsKKwlpcG9pYl9tY2FzdF9zdG9wX3RocmVhZChkZXYsIDEpOwogCiAJLyogRGVsZXRlIHRoZSBicm9hZGNhc3QgYWRkcmVzcyBhbmQgdGhlIGxvY2FsIGFkZHJlc3MgKi8KIAlpcG9pYl9tY2FzdF9kZXZfZG93bihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYwppbmRleCA0OWQxMjBkLi42YzViZjA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYwpAQCAtNDc0LDcgKzQ3NCw3IEBACiAJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwogfQogCi1zdGF0aWMgdm9pZCBwYXRoX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgaXBvaWJfcGF0aF9sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihza2ItPmRldik7CiAKQEAgLTU2OSw3ICs1NjksNyBAQAogCiAJaWYgKHNrYi0+ZHN0ICYmIHNrYi0+ZHN0LT5uZWlnaGJvdXIpIHsKIAkJaWYgKHVubGlrZWx5KCEqdG9faXBvaWJfbmVpZ2goc2tiLT5kc3QtPm5laWdoYm91cikpKSB7Ci0JCQlwYXRoX2xvb2t1cChza2IsIGRldik7CisJCQlpcG9pYl9wYXRoX2xvb2t1cChza2IsIGRldik7CiAJCQlnb3RvIG91dDsKIAkJfQogCkBAIC0xMDA1LDYgKzEwMDUsNyBAQAogCiByZWdpc3Rlcl9mYWlsZWQ6CiAJaWJfdW5yZWdpc3Rlcl9ldmVudF9oYW5kbGVyKCZwcml2LT5ldmVudF9oYW5kbGVyKTsKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCiBldmVudF9mYWlsZWQ6CiAJaXBvaWJfZGV2X2NsZWFudXAocHJpdi0+ZGV2KTsKQEAgLTEwNTcsNiArMTA1OCw3IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdiwgdG1wLCBkZXZfbGlzdCwgbGlzdCkgewogCQlpYl91bnJlZ2lzdGVyX2V2ZW50X2hhbmRsZXIoJnByaXYtPmV2ZW50X2hhbmRsZXIpOworCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCiAJCXVucmVnaXN0ZXJfbmV0ZGV2KHByaXYtPmRldik7CiAJCWlwb2liX2Rldl9jbGVhbnVwKHByaXYtPmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYwppbmRleCBhY2E3YWVhLi4zNmNlMjk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMKQEAgLTE0NSw3ICsxNDUsNyBAQAogCiAJbWNhc3QtPmRldiA9IGRldjsKIAltY2FzdC0+Y3JlYXRlZCA9IGppZmZpZXM7Ci0JbWNhc3QtPmJhY2tvZmYgPSBIWjsKKwltY2FzdC0+YmFja29mZiA9IDE7CiAJbWNhc3QtPmxvZ2NvdW50ID0gMDsKIAogCUlOSVRfTElTVF9IRUFEKCZtY2FzdC0+bGlzdCk7CkBAIC0zOTYsNyArMzk2LDcgQEAKIAkJCUlQT0lCX0dJRF9BUkcobWNhc3QtPm1jbWVtYmVyLm1naWQpLCBzdGF0dXMpOwogCiAJaWYgKCFzdGF0dXMgJiYgIWlwb2liX21jYXN0X2pvaW5fZmluaXNoKG1jYXN0LCBtY21lbWJlcikpIHsKLQkJbWNhc3QtPmJhY2tvZmYgPSBIWjsKKwkJbWNhc3QtPmJhY2tvZmYgPSAxOwogCQlkb3duKCZtY2FzdF9tdXRleCk7CiAJCWlmICh0ZXN0X2JpdChJUE9JQl9NQ0FTVF9SVU4sICZwcml2LT5mbGFncykpCiAJCQlxdWV1ZV93b3JrKGlwb2liX3dvcmtxdWV1ZSwgJnByaXYtPm1jYXN0X3Rhc2spOwpAQCAtNDk2LDcgKzQ5Niw3IEBACiAJCWlmICh0ZXN0X2JpdChJUE9JQl9NQ0FTVF9SVU4sICZwcml2LT5mbGFncykpCiAJCQlxdWV1ZV9kZWxheWVkX3dvcmsoaXBvaWJfd29ya3F1ZXVlLAogCQkJCQkgICAmcHJpdi0+bWNhc3RfdGFzaywKLQkJCQkJICAgbWNhc3QtPmJhY2tvZmYpOworCQkJCQkgICBtY2FzdC0+YmFja29mZiAqIEhaKTsKIAkJdXAoJm1jYXN0X211dGV4KTsKIAl9IGVsc2UKIAkJbWNhc3QtPnF1ZXJ5X2lkID0gcmV0OwpAQCAtNTk4LDcgKzU5OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBpcG9pYl9tY2FzdF9zdG9wX3RocmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoraW50IGlwb2liX21jYXN0X3N0b3BfdGhyZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBmbHVzaCkKIHsKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBpcG9pYl9tY2FzdCAqbWNhc3Q7CkBAIC02MTAsNyArNjEwLDggQEAKIAljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5tY2FzdF90YXNrKTsKIAl1cCgmbWNhc3RfbXV0ZXgpOwogCi0JZmx1c2hfd29ya3F1ZXVlKGlwb2liX3dvcmtxdWV1ZSk7CisJaWYgKGZsdXNoKQorCQlmbHVzaF93b3JrcXVldWUoaXBvaWJfd29ya3F1ZXVlKTsKIAogCWlmIChwcml2LT5icm9hZGNhc3QgJiYgcHJpdi0+YnJvYWRjYXN0LT5xdWVyeSkgewogCQlpYl9zYV9jYW5jZWxfcXVlcnkocHJpdi0+YnJvYWRjYXN0LT5xdWVyeV9pZCwgcHJpdi0+YnJvYWRjYXN0LT5xdWVyeSk7CkBAIC04MzIsNyArODMzLDcgQEAKIAogCWlwb2liX2RiZ19tY2FzdChwcml2LCAicmVzdGFydGluZyBtdWx0aWNhc3QgdGFza1xuIik7CiAKLQlpcG9pYl9tY2FzdF9zdG9wX3RocmVhZChkZXYpOworCWlwb2liX21jYXN0X3N0b3BfdGhyZWFkKGRldiwgMCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2lucHV0LmMgYi9kcml2ZXJzL2lucHV0L2lucHV0LmMKaW5kZXggODg2MzZhMi4uMTRhZTU1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9pbnB1dC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwpAQCAtMzA4LDYgKzMwOCw3IEBACiAJCU1BVENIX0JJVChsZWRiaXQsIExFRF9NQVgpOwogCQlNQVRDSF9CSVQoc25kYml0LCBTTkRfTUFYKTsKIAkJTUFUQ0hfQklUKGZmYml0LCAgRkZfTUFYKTsKKwkJTUFUQ0hfQklUKHN3Yml0LCAgU1dfTUFYKTsKIAogCQlyZXR1cm4gaWQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCmluZGV4IDQ0NGY3NzUuLjU3MWE2ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcKQEAgLTkzLDcgKzkzLDcgQEAKIAogY29uZmlnIEtFWUJPQVJEX0xPQ09NTwogCXRyaXN0YXRlICJMb0NvTW8gS2V5Ym9hcmQgU3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNIQVJQX0xPQ09NTworCWRlcGVuZHMgb24gU0hBUlBfTE9DT01PICYmIElOUFVUX0tFWUJPQVJECiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHJ1bm5pbmcgTGludXggb24gYSBTaGFycCBaYXVydXMgQ29sbGllIG9yIFBvb2RsZSBiYXNlZCBQREEKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zcGl0emtiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zcGl0emtiZC5jCmluZGV4IDE3MTQwNDUuLjM0NGY0NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3BpdHprYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NwaXR6a2JkLmMKQEAgLTUzLDcgKzUzLDcgQEAKIAlLRVlfTEVGVENUUkwsIEtFWV8xLCBLRVlfMywgS0VZXzUsIEtFWV82LCBLRVlfNywgS0VZXzksIEtFWV8wLCBLRVlfQkFDS1NQQUNFLCBTUElUWl9LRVlfRVhPSywgU1BJVFpfS0VZX0VYQ0FOQ0VMLCAwLCAwLCAwLCAwLCAwLCAgLyogMS0xNiAqLwogCTAsIEtFWV8yLCBLRVlfNCwgS0VZX1IsIEtFWV9ZLCBLRVlfOCwgS0VZX0ksIEtFWV9PLCBLRVlfUCwgU1BJVFpfS0VZX0VYSk9HRE9XTiwgU1BJVFpfS0VZX0VYSk9HVVAsIDAsIDAsIDAsIDAsIDAsIC8qIDE3LTMyICovCiAJS0VZX1RBQiwgS0VZX1EsIEtFWV9FLCBLRVlfVCwgS0VZX0csIEtFWV9VLCBLRVlfSiwgS0VZX0ssIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzMtNDggKi8KLQlTUElUWl9LRVlfQ0FMRU5ERVIsIEtFWV9XLCBLRVlfUywgS0VZX0YsIEtFWV9WLCBLRVlfSCwgS0VZX00sIEtFWV9MLCAwLCAwLCBLRVlfUklHSFRTSElGVCwgMCwgMCwgMCwgMCwgMCwgICAgICAgICAvKiA0OS02NCAqLworCVNQSVRaX0tFWV9DQUxFTkRFUiwgS0VZX1csIEtFWV9TLCBLRVlfRiwgS0VZX1YsIEtFWV9ILCBLRVlfTSwgS0VZX0wsIDAsIEtFWV9SSUdIVFNISUZULCAwLCAwLCAwLCAwLCAwLCAwLCAgICAgICAgIC8qIDQ5LTY0ICovCiAJU1BJVFpfS0VZX0FERFJFU1MsIEtFWV9BLCBLRVlfRCwgS0VZX0MsIEtFWV9CLCBLRVlfTiwgS0VZX0RPVCwgMCwgS0VZX0VOVEVSLCBLRVlfTEVGVFNISUZULCAwLCAwLCAwLCAwLCAwLCAwLAkgIC8qIDY1LTgwICovCiAJU1BJVFpfS0VZX01BSUwsIEtFWV9aLCBLRVlfWCwgS0VZX01JTlVTLCBLRVlfU1BBQ0UsIEtFWV9DT01NQSwgMCwgS0VZX1VQLCAwLCAwLCBTUElUWl9LRVlfRk4sIDAsIDAsIDAsIDAsIDAsICAgICAgLyogODEtOTYgKi8KIAlLRVlfU1lTUlEsIFNQSVRaX0tFWV9KQVAxLCBTUElUWl9LRVlfSkFQMiwgU1BJVFpfS0VZX0NBTkNFTCwgU1BJVFpfS0VZX09LLCBTUElUWl9LRVlfTUVOVSwgS0VZX0xFRlQsIEtFWV9ET1dOLCBLRVlfUklHSFQsIDAsIDAsIDAsIDAsIDAsIDAsIDAgIC8qIDk3LTExMiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3VpbnB1dC5jIGIvZHJpdmVycy9pbnB1dC9taXNjL3VpbnB1dC5jCmluZGV4IGQ1YzViMzIuLjQwMTVhOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy91aW5wdXQuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvdWlucHV0LmMKQEAgLTkwLDExICs5MCwxMSBAQAogCiBzdGF0aWMgdm9pZCB1aW5wdXRfcmVxdWVzdF9kb25lKHN0cnVjdCB1aW5wdXRfZGV2aWNlICp1ZGV2LCBzdHJ1Y3QgdWlucHV0X3JlcXVlc3QgKnJlcXVlc3QpCiB7Ci0JY29tcGxldGUoJnJlcXVlc3QtPmRvbmUpOwotCiAJLyogTWFyayBzbG90IGFzIGF2YWlsYWJsZSAqLwogCXVkZXYtPnJlcXVlc3RzW3JlcXVlc3QtPmlkXSA9IE5VTEw7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ1ZGV2LT5yZXF1ZXN0c193YWl0cSk7CisKKwljb21wbGV0ZSgmcmVxdWVzdC0+ZG9uZSk7CiB9CiAKIHN0YXRpYyBpbnQgdWlucHV0X3JlcXVlc3Rfc3VibWl0KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IHVpbnB1dF9yZXF1ZXN0ICpyZXF1ZXN0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2RpdmVydC9kaXZlcnRfcHJvY2ZzLmMgYi9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2RpdmVydF9wcm9jZnMuYwppbmRleCBlMWYwZDg3Li4wYjBlYTI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2RpdmVydF9wcm9jZnMuYworKysgYi9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2RpdmVydF9wcm9jZnMuYwpAQCAtMjg3LDEyICsyODcsMTIgQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZyZF9xdWV1ZSk7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotCWlzZG5fcHJvY19lbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJpc2RuIiwgU19JRkRJUiB8IFNfSVJVR08gfCBTX0lYVUdPLCBwcm9jX25ldCk7CisJaXNkbl9wcm9jX2VudHJ5ID0gcHJvY19ta2RpcigibmV0L2lzZG4iLCBOVUxMKTsKIAlpZiAoIWlzZG5fcHJvY19lbnRyeSkKIAkJcmV0dXJuICgtMSk7CiAJaXNkbl9kaXZlcnRfZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiZGl2ZXJ0IiwgU19JRlJFRyB8IFNfSVJVR08sIGlzZG5fcHJvY19lbnRyeSk7CiAJaWYgKCFpc2RuX2RpdmVydF9lbnRyeSkgewotCQlyZW1vdmVfcHJvY19lbnRyeSgiaXNkbiIsIHByb2NfbmV0KTsKKwkJcmVtb3ZlX3Byb2NfZW50cnkoIm5ldC9pc2RuIiwgTlVMTCk7CiAJCXJldHVybiAoLTEpOwogCX0KIAlpc2RuX2RpdmVydF9lbnRyeS0+cHJvY19mb3BzID0gJmlzZG5fZm9wczsgCkBAIC0zMTIsNyArMzEyLDcgQEAKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJcmVtb3ZlX3Byb2NfZW50cnkoImRpdmVydCIsIGlzZG5fcHJvY19lbnRyeSk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoImlzZG4iLCBwcm9jX25ldCk7CisJcmVtb3ZlX3Byb2NfZW50cnkoIm5ldC9pc2RuIiwgTlVMTCk7CiAjZW5kaWYJLyogQ09ORklHX1BST0NfRlMgKi8KIAogCXJldHVybiAoMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YV9kaWRkLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YV9kaWRkLmMKaW5kZXggN2ZkZjhhZS4uMjcyMDRmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFfZGlkZC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhX2RpZGQuYwpAQCAtMzAsOCArMzAsNiBAQAogc3RhdGljIGNoYXIgKkRSSVZFUkxOQU1FID0gImRpdmFkaWRkIjsKIGNoYXIgKkRSSVZFUlJFTEVBU0VfRElERCA9ICIyLjAiOwogCi1zdGF0aWMgY2hhciAqbWFpbl9wcm9jX2RpciA9ICJlaWNvbiI7Ci0KIE1PRFVMRV9ERVNDUklQVElPTigiRElERCB0YWJsZSBkcml2ZXIgZm9yIGRpdmEgZHJpdmVycyIpOwogTU9EVUxFX0FVVEhPUigiQ3l0cm9uaWNzICYgTWVsd2FyZSwgRWljb24gTmV0d29ya3MiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJFaWNvbiBkaXZhIGRyaXZlcnMiKTsKQEAgLTg5LDcgKzg3LDcgQEAKIAogc3RhdGljIGludCBESVZBX0lOSVRfRlVOQ1RJT04gY3JlYXRlX3Byb2Modm9pZCkKIHsKLQlwcm9jX25ldF9laWNvbiA9IGNyZWF0ZV9wcm9jX2VudHJ5KG1haW5fcHJvY19kaXIsIFNfSUZESVIsIHByb2NfbmV0KTsKKwlwcm9jX25ldF9laWNvbiA9IHByb2NfbWtkaXIoIm5ldC9laWNvbiIsIE5VTEwpOwogCiAJaWYgKHByb2NfbmV0X2VpY29uKSB7CiAJCWlmICgocHJvY19kaWRkID0KQEAgLTEwNSw3ICsxMDMsNyBAQAogc3RhdGljIHZvaWQgRElWQV9FWElUX0ZVTkNUSU9OIHJlbW92ZV9wcm9jKHZvaWQpCiB7CiAJcmVtb3ZlX3Byb2NfZW50cnkoRFJJVkVSTE5BTUUsIHByb2NfbmV0X2VpY29uKTsKLQlyZW1vdmVfcHJvY19lbnRyeShtYWluX3Byb2NfZGlyLCBwcm9jX25ldCk7CisJcmVtb3ZlX3Byb2NfZW50cnkoIm5ldC9laWNvbiIsIE5VTEwpOwogfQogCiBzdGF0aWMgaW50IERJVkFfSU5JVF9GVU5DVElPTiBkaXZhZGlkZF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YXNwcm9jLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YXNwcm9jLmMKaW5kZXggYjY0MzU1OC4uYzEyZWZhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFzcHJvYy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc3Byb2MuYwpAQCAtMzgxLDcgKzM4MSw3IEBACiAJY2hhciB0bXBbMTZdOwogCiAJc3ByaW50Zih0bXAsICIlcyVkIiwgYWRhcHRlcl9kaXJfbmFtZSwgYS0+Y29udHJvbGxlcik7Ci0JaWYgKCEoZGUgPSBjcmVhdGVfcHJvY19lbnRyeSh0bXAsIFNfSUZESVIsIHByb2NfbmV0X2VpY29uKSkpCisJaWYgKCEoZGUgPSBwcm9jX21rZGlyKHRtcCwgcHJvY19uZXRfZWljb24pKSkKIAkJcmV0dXJuICgwKTsKIAlhLT5wcm9jX2FkYXB0ZXJfZGlyID0gKHZvaWQgKikgZGU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jCmluZGV4IDgzMzdiMGYuLjQ4NjZmYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYwpAQCAtNjEsNiArNjEsNyBAQAogCXtQQ0lfVkVORE9SX0lEX0RJR0ksIFBDSV9ERVZJQ0VfSURfRElHSV9ERl9NX0UsIkRpZ2kgSW50ZXJuYXRpb25hbCIsICJEaWdpIERhdGFGaXJlIE1pY3JvIFYgKEV1cm9wZSkifSwKIAl7UENJX1ZFTkRPUl9JRF9ESUdJLCBQQ0lfREVWSUNFX0lEX0RJR0lfREZfTV9JT00yX0EsIkRpZ2kgSW50ZXJuYXRpb25hbCIsICJEaWdpIERhdGFGaXJlIE1pY3JvIFYgSU9NMiAoTm9ydGggQW1lcmljYSkifSwKIAl7UENJX1ZFTkRPUl9JRF9ESUdJLCBQQ0lfREVWSUNFX0lEX0RJR0lfREZfTV9BLCJEaWdpIEludGVybmF0aW9uYWwiLCAiRGlnaSBEYXRhRmlyZSBNaWNybyBWIChOb3J0aCBBbWVyaWNhKSJ9LAorCXtQQ0lfVkVORE9SX0lEX1NJVEVDT00sIFBDSV9ERVZJQ0VfSURfU0lURUNPTV9EQzEwNVYyLCAiU2l0ZWNvbSBFdXJvcGUiLCAiREMtMTA1IElTRE4gUENJIn0sCiAJezAsIDAsIE5VTEwsIE5VTEx9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MS5oIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MS5oCmluZGV4IDBmZGE1YzguLjlmZmFhZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODEuaAorKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxLmgKQEAgLTQ2NiwxMCArNDY2LDEwIEBACiAjZGVmaW5lIF9fZGVidWdfdmFyaWFibGUgc3Q1NDgxX2RlYnVnCiAjaW5jbHVkZSAiaGlzYXhfZGVidWcuaCIKIAotI2lmZGVmIENPTkZJR19ISVNBWF9ERUJVRwotCiBleHRlcm4gaW50IHN0NTQ4MV9kZWJ1ZzsKIAorI2lmZGVmIENPTkZJR19ISVNBWF9ERUJVRworCiAjZGVmaW5lIERCR19JU09fUEFDS0VUKGxldmVsLHVyYikgXAogICBpZiAobGV2ZWwgJiBfX2RlYnVnX3ZhcmlhYmxlKSBkdW1wX2lzb19wYWNrZXQoX19GVU5DVElPTl9fLHVyYikKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9iLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX2IuYwppbmRleCAyZmNkMDkzLi42NTc4MTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX2IuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX2IuYwpAQCAtMTcyLDE0ICsxNzIsMTggQEAKIAl0ZXN0X2FuZF9jbGVhcl9iaXQoYnVmX25yLCAmYl9vdXQtPmJ1c3kpOwogCiAJaWYgKHVubGlrZWx5KHVyYi0+c3RhdHVzIDwgMCkpIHsKLQkJaWYgKHVyYi0+c3RhdHVzICE9IC1FTk9FTlQgJiYgdXJiLT5zdGF0dXMgIT0gLUVTSFVURE9XTikgewotCQkJV0FSTigidXJiIHN0YXR1cyAlZCIsdXJiLT5zdGF0dXMpOwotCQkJaWYgKGJfb3V0LT5idXN5ID09IDApIHsKLQkJCQlzdDU0ODFfdXNiX3BpcGVfcmVzZXQoYWRhcHRlciwgKGJjcy0+Y2hhbm5lbCsxKSoyIHwgVVNCX0RJUl9PVVQsIE5VTEwsIE5VTEwpOwotCQkJfQotCQl9IGVsc2UgewotCQkJREJHKDEsInVyYiBraWxsZWQiKTsgCi0JCQlyZXR1cm47IC8vIEdpdmUgdXAKKwkJc3dpdGNoICh1cmItPnN0YXR1cykgeworCQkJY2FzZSAtRU5PRU5UOgorCQkJY2FzZSAtRVNIVVRET1dOOgorCQkJY2FzZSAtRUNPTk5SRVNFVDoKKwkJCQlEQkcoNCwidXJiIGtpbGxlZCBzdGF0dXMgJWQiLCB1cmItPnN0YXR1cyk7CisJCQkJcmV0dXJuOyAvLyBHaXZlIHVwCisJCQlkZWZhdWx0OiAKKwkJCQlXQVJOKCJ1cmIgc3RhdHVzICVkIix1cmItPnN0YXR1cyk7CisJCQkJaWYgKGJfb3V0LT5idXN5ID09IDApIHsKKwkJCQkJc3Q1NDgxX3VzYl9waXBlX3Jlc2V0KGFkYXB0ZXIsIChiY3MtPmNoYW5uZWwrMSkqMiB8IFVTQl9ESVJfT1VULCBOVUxMLCBOVUxMKTsKKwkJCQl9CisJCQkJYnJlYWs7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfZC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9kLmMKaW5kZXggMDcxYjFkMy4uOTQxZjcwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9kLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9kLmMKQEAgLTM4MiwxNiArMzgyLDIwIEBACiAJdGVzdF9hbmRfY2xlYXJfYml0KGJ1Zl9uciwgJmRfb3V0LT5idXN5KTsKIAogCWlmICh1bmxpa2VseSh1cmItPnN0YXR1cyA8IDApKSB7Ci0JCWlmICh1cmItPnN0YXR1cyAhPSAtRU5PRU5UICYmIHVyYi0+c3RhdHVzICE9IC1FU0hVVERPV04pIHsKLQkJCVdBUk4oInVyYiBzdGF0dXMgJWQiLHVyYi0+c3RhdHVzKTsKLQkJCWlmIChkX291dC0+YnVzeSA9PSAwKSB7Ci0JCQkJc3Q1NDgxX3VzYl9waXBlX3Jlc2V0KGFkYXB0ZXIsIEVQX0RfT1VUIHwgVVNCX0RJUl9PVVQsIGZpZm9fcmVzZXRlZCwgYWRhcHRlcik7Ci0JCQl9Ci0JCQlyZXR1cm47Ci0JCX0gZWxzZSB7Ci0JCQlEQkcoMSwidXJiIGtpbGxlZCIpOyAKLQkJCXJldHVybjsgLy8gR2l2ZSB1cAorCQlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJCQljYXNlIC1FTk9FTlQ6CisJCQljYXNlIC1FU0hVVERPV046CisJCQljYXNlIC1FQ09OTlJFU0VUOgorCQkJCURCRygxLCJ1cmIga2lsbGVkIHN0YXR1cyAlZCIsIHVyYi0+c3RhdHVzKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6IAorCQkJCVdBUk4oInVyYiBzdGF0dXMgJWQiLHVyYi0+c3RhdHVzKTsKKwkJCQlpZiAoZF9vdXQtPmJ1c3kgPT0gMCkgeworCQkJCQlzdDU0ODFfdXNiX3BpcGVfcmVzZXQoYWRhcHRlciwgRVBfRF9PVVQgfCBVU0JfRElSX09VVCwgZmlmb19yZXNldGVkLCBhZGFwdGVyKTsKKwkJCQl9CisJCQkJYnJlYWs7CiAJCX0KKwkJcmV0dXJuOyAvLyBHaXZlIHVwCiAJfQogCiAJRnNtRXZlbnQoJmFkYXB0ZXItPmRfb3V0LmZzbSwgRVZfRE9VVF9DT01QTEVURSwgKHZvaWQgKikgYnVmX25yKTsKQEAgLTcwOSwxNCArNzEzLDE0IEBACiAKIAlhZGFwdGVyLT5sMW0uZnNtID0gJmwxZnNtOwogCWFkYXB0ZXItPmwxbS5zdGF0ZSA9IFNUX0wxX0YzOwotCWFkYXB0ZXItPmwxbS5kZWJ1ZyA9IDE7CisJYWRhcHRlci0+bDFtLmRlYnVnID0gc3Q1NDgxX2RlYnVnICYgMHgxMDA7CiAJYWRhcHRlci0+bDFtLnVzZXJkYXRhID0gYWRhcHRlcjsKIAlhZGFwdGVyLT5sMW0ucHJpbnRkZWJ1ZyA9IGwxbV9kZWJ1ZzsKIAlGc21Jbml0VGltZXIoJmFkYXB0ZXItPmwxbSwgJmFkYXB0ZXItPnRpbWVyKTsKIAogCWFkYXB0ZXItPmRfb3V0LmZzbS5mc20gPSAmZG91dF9mc207CiAJYWRhcHRlci0+ZF9vdXQuZnNtLnN0YXRlID0gU1RfRE9VVF9OT05FOwotCWFkYXB0ZXItPmRfb3V0LmZzbS5kZWJ1ZyA9IDE7CisJYWRhcHRlci0+ZF9vdXQuZnNtLmRlYnVnID0gc3Q1NDgxX2RlYnVnICYgMHgxMDA7CiAJYWRhcHRlci0+ZF9vdXQuZnNtLnVzZXJkYXRhID0gYWRhcHRlcjsKIAlhZGFwdGVyLT5kX291dC5mc20ucHJpbnRkZWJ1ZyA9IGRvdXRfZGVidWc7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfaW5pdC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9pbml0LmMKaW5kZXggN2FhODEwZC4uMmNmNWQxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9pbml0LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9pbml0LmMKQEAgLTQzLDEwICs0MywxMCBAQAogbW9kdWxlX3BhcmFtKG51bWJlcl9vZl9sZWRzLCBpbnQsIDApOwogCiAjaWZkZWYgQ09ORklHX0hJU0FYX0RFQlVHCi1zdGF0aWMgaW50IGRlYnVnID0gMHgxOworc3RhdGljIGludCBkZWJ1ZyA9IDA7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7Ci1pbnQgc3Q1NDgxX2RlYnVnOwogI2VuZGlmCitpbnQgc3Q1NDgxX2RlYnVnOwogCiBzdGF0aWMgTElTVF9IRUFEKGFkYXB0ZXJfbGlzdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfdXNiLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX3VzYi5jCmluZGV4IGFiNjIyMjMuLjg5ZmJlYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfdXNiLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV91c2IuYwpAQCAtMTMyLDExICsxMzIsMTUgQEAKIAlzdHJ1Y3QgY3RybF9tc2cgKmN0cmxfbXNnOwogCQogCWlmICh1bmxpa2VseSh1cmItPnN0YXR1cyA8IDApKSB7Ci0JCWlmICh1cmItPnN0YXR1cyAhPSAtRU5PRU5UICYmIHVyYi0+c3RhdHVzICE9IC1FU0hVVERPV04pIHsKLQkJCVdBUk4oInVyYiBzdGF0dXMgJWQiLHVyYi0+c3RhdHVzKTsKLQkJfSBlbHNlIHsKLQkJCURCRygxLCJ1cmIga2lsbGVkIik7Ci0JCQlyZXR1cm47IC8vIEdpdmUgdXAKKwkJc3dpdGNoICh1cmItPnN0YXR1cykgeworCQkJY2FzZSAtRU5PRU5UOgorCQkJY2FzZSAtRVNIVVRET1dOOgorCQkJY2FzZSAtRUNPTk5SRVNFVDoKKwkJCQlEQkcoMSwidXJiIGtpbGxlZCBzdGF0dXMgJWQiLCB1cmItPnN0YXR1cyk7CisJCQkJcmV0dXJuOyAvLyBHaXZlIHVwCisJCQlkZWZhdWx0OiAKKwkJCQlXQVJOKCJ1cmIgc3RhdHVzICVkIix1cmItPnN0YXR1cyk7CisJCQkJYnJlYWs7CiAJCX0KIAl9CiAKQEAgLTE4NCwyMiArMTg4LDIyIEBACiAJaW50IHN0YXR1czsKIAogCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKLQljYXNlIDA6Ci0JCS8qIHN1Y2Nlc3MgKi8KLQkJYnJlYWs7Ci0JY2FzZSAtRUNPTk5SRVNFVDoKLQljYXNlIC1FTk9FTlQ6Ci0JY2FzZSAtRVNIVVRET1dOOgotCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLwotCQlEQkcoMSwgInVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIHVyYi0+c3RhdHVzKTsKLQkJcmV0dXJuOwotCWRlZmF1bHQ6Ci0JCVdBUk4oIm5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCB1cmItPnN0YXR1cyk7Ci0JCWdvdG8gZXhpdDsKKwkJY2FzZSAwOgorCQkJLyogc3VjY2VzcyAqLworCQkJYnJlYWs7CisJCWNhc2UgLUVDT05OUkVTRVQ6CisJCWNhc2UgLUVOT0VOVDoKKwkJY2FzZSAtRVNIVVRET1dOOgorCQkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJCURCRygyLCAidXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgdXJiLT5zdGF0dXMpOworCQkJcmV0dXJuOworCQlkZWZhdWx0OgorCQkJV0FSTigibm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIHVyYi0+c3RhdHVzKTsKKwkJCWdvdG8gZXhpdDsKIAl9CiAKIAkKLQlEQkdfUEFDS0VUKDEsIGRhdGEsIElOVF9QS1RfU0laRSk7CisJREJHX1BBQ0tFVCgyLCBkYXRhLCBJTlRfUEtUX1NJWkUpOwogCQkKIAlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID09IDApIHsKIAkJZ290byBleGl0OwpAQCAtMjUwLDcgKzI1NCw3IEBACiAJc3RydWN0IHVyYiAqdXJiOwogCXU4ICpidWY7CiAJCi0JREJHKDEsIiIpOworCURCRygyLCIiKTsKIAkKIAlpZiAoKHN0YXR1cyA9IHVzYl9yZXNldF9jb25maWd1cmF0aW9uIChkZXYpKSA8IDApIHsKIAkJV0FSTigicmVzZXRfY29uZmlndXJhdGlvbiBmYWlsZWQsc3RhdHVzPSVkIixzdGF0dXMpOwpAQCAtMzMwLDE1ICszMzQsMTcgQEAKIAlEQkcoMSwiIik7CiAKIAkvLyBTdG9wIGFuZCBmcmVlIENvbnRyb2wgYW5kIEludGVycnVwdCBVUkJzCi0JdXNiX3VubGlua191cmIoY3RybC0+dXJiKTsKKwl1c2Jfa2lsbF91cmIoY3RybC0+dXJiKTsKIAlpZiAoY3RybC0+dXJiLT50cmFuc2Zlcl9idWZmZXIpCiAJCWtmcmVlKGN0cmwtPnVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKIAl1c2JfZnJlZV91cmIoY3RybC0+dXJiKTsKKwljdHJsLT51cmIgPSBOVUxMOwogCi0JdXNiX3VubGlua191cmIoaW50ci0+dXJiKTsKKwl1c2Jfa2lsbF91cmIoaW50ci0+dXJiKTsKIAlpZiAoaW50ci0+dXJiLT50cmFuc2Zlcl9idWZmZXIpCiAJCWtmcmVlKGludHItPnVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKIAl1c2JfZnJlZV91cmIoaW50ci0+dXJiKTsKKwljdHJsLT51cmIgPSBOVUxMOwogfQogCiAvKgpAQCAtNDA2LDYgKzQxMiw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJnVyYi0+bG9jayk7CiAJdXJiLT5kZXY9ZGV2OwogCXVyYi0+cGlwZT1waXBlOworCXVyYi0+aW50ZXJ2YWwgPSAxOwogCXVyYi0+dHJhbnNmZXJfYnVmZmVyPWJ1ZjsKIAl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gbnVtX3BhY2tldHM7CiAJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoPW51bV9wYWNrZXRzKnBhY2tldF9zaXplOwpAQCAtNDUyLDcgKzQ1OSw5IEBACiAJCWlmICh1cmJbal0pIHsKIAkJCWlmICh1cmJbal0tPnRyYW5zZmVyX2J1ZmZlcikKIAkJCQlrZnJlZSh1cmJbal0tPnRyYW5zZmVyX2J1ZmZlcik7CisJCQl1cmJbal0tPnRyYW5zZmVyX2J1ZmZlciA9IE5VTEw7CiAJCQl1c2JfZnJlZV91cmIodXJiW2pdKTsKKwkJCXVyYltqXSA9IE5VTEw7CiAJCX0KIAl9CiAJcmV0dXJuIHJldHZhbDsKQEAgLTQ2MywxMCArNDcyLDExIEBACiAJaW50IGo7CiAKIAlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7Ci0JCXVzYl91bmxpbmtfdXJiKHVyYltqXSk7CisJCXVzYl9raWxsX3VyYih1cmJbal0pOwogCQlpZiAodXJiW2pdLT50cmFuc2Zlcl9idWZmZXIpCiAJCQlrZnJlZSh1cmJbal0tPnRyYW5zZmVyX2J1ZmZlcik7CQkJCiAJCXVzYl9mcmVlX3VyYih1cmJbal0pOworCQl1cmJbal0gPSBOVUxMOwogCX0KIH0KIApAQCAtNDg1LDExICs0OTUsMTUgQEAKIAlpbnQgbGVuLCBjb3VudCwgc3RhdHVzOwogCiAJaWYgKHVubGlrZWx5KHVyYi0+c3RhdHVzIDwgMCkpIHsKLQkJaWYgKHVyYi0+c3RhdHVzICE9IC1FTk9FTlQgJiYgdXJiLT5zdGF0dXMgIT0gLUVTSFVURE9XTikgewotCQkJV0FSTigidXJiIHN0YXR1cyAlZCIsdXJiLT5zdGF0dXMpOwotCQl9IGVsc2UgewotCQkJREJHKDEsInVyYiBraWxsZWQiKTsKLQkJCXJldHVybjsgLy8gR2l2ZSB1cAorCQlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJCQljYXNlIC1FTk9FTlQ6CisJCQljYXNlIC1FU0hVVERPV046CisJCQljYXNlIC1FQ09OTlJFU0VUOgorCQkJCURCRygxLCJ1cmIga2lsbGVkIHN0YXR1cyAlZCIsIHVyYi0+c3RhdHVzKTsKKwkJCQlyZXR1cm47IC8vIEdpdmUgdXAKKwkJCWRlZmF1bHQ6IAorCQkJCVdBUk4oInVyYiBzdGF0dXMgJWQiLHVyYi0+c3RhdHVzKTsKKwkJCQlicmVhazsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Njb25mLmMgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2NvbmYuYwppbmRleCA1ZGE1MDdlLi42Mzk1ODJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2NvbmYuYworKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2NvbmYuYwpAQCAtMzk0LDcgKzM5NCw3IEBACiAJaHlzZG5fY2FyZCAqY2FyZDsKIAl1Y2hhciBjb25mX25hbWVbMjBdOwogCi0JaHlzZG5fcHJvY19lbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KFBST0NfU1VCRElSX05BTUUsIFNfSUZESVIgfCBTX0lSVUdPIHwgU19JWFVHTywgcHJvY19uZXQpOworCWh5c2RuX3Byb2NfZW50cnkgPSBwcm9jX21rZGlyKFBST0NfU1VCRElSX05BTUUsIHByb2NfbmV0KTsKIAlpZiAoIWh5c2RuX3Byb2NfZW50cnkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJIWVNETjogdW5hYmxlIHRvIGNyZWF0ZSBoeXNkbiBzdWJkaXJcbiIpOwogCQlyZXR1cm4gKC0xKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3NtdS5jIGIvZHJpdmVycy9tYWNpbnRvc2gvc211LmMKaW5kZXggZmI1MzU3My4uOWIzODY3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvc211LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvc211LmMKQEAgLTgsMjEgKzgsMTUgQEAKICAqLwogCiAvKgotICogRm9yIG5vdywgdGhpcyBkcml2ZXIgaW5jbHVkZXM6Ci0gKiAtIFJUQyBnZXQgJiBzZXQKLSAqIC0gcmVib290ICYgc2h1dGRvd24gY29tbWFuZHMKLSAqIGFsbCBzeW5jaHJvbm91cyB3aXRoIElSUSBkaXNhYmxlZCAodWdoKQotICoKICAqIFRPRE86Ci0gKiAgIHJld29yayBpbiBhIHdheSB0aGUgUE1VIGRyaXZlciB3b3JrcywgdGhhdCBpcyBhc3luY2hyb25vdXMKLSAqICAgd2l0aCBhIHF1ZXVlIG9mIGNvbW1hbmRzLiBJJ2xsIGRvIHRoYXQgYXMgc29vbiBhcyBJIGhhdmUgYW4KLSAqICAgU01VIGJhc2VkIG1hY2hpbmUgYXQgaGFuZC4gU29tZSBtb3JlIGNsZWFudXAgaXMgbmVlZGVkIHRvbywKLSAqICAgbGlrZSBtYXliZSBmaXR0aW5nIGl0IGludG8gYSBwbGF0Zm9ybSBkZXZpY2UsIGV0Yy4uLgotICogICBBbHNvIGNoZWNrIHdoYXQncyB1cCB3aXRoIGNhY2hlIGNvaGVyZW5jeSwgYW5kIGlmIHdlIHJlYWxseQotICogICBjYW4ndCBkbyBiZXR0ZXIgdGhhbiBmbHVzaGluZyB0aGUgY2FjaGUsIG1heWJlIGJ1aWxkIGEgdGFibGUKLSAqICAgb2YgY29tbWFuZCBsZW4vcmVwbHkgbGVuIGxpa2UgdGhlIFBNVSBkcml2ZXIgdG8gb25seSBmbHVzaAotICogICB3aGF0IGlzIGFjdHVhbGx5IG5lY2Vzc2FyeS4KLSAqICAgLS1CZW5ILgorICogIC0gbWF5YmUgYWRkIHRpbWVvdXQgdG8gY29tbWFuZHMgPworICogIC0gYmxvY2tpbmcgdmVyc2lvbiBvZiB0aW1lIGZ1bmN0aW9ucworICogIC0gcG9sbGluZyB2ZXJzaW9uIG9mIGkyYyBjb21tYW5kcyAoaW5jbHVkaW5nIHRpbWVyIHRoYXQgd29ya3Mgd2l0aAorICogICAgaW50ZXJydXRwcyBvZmYpCisgKiAgLSBtYXliZSBhdm9pZCBzb21lIGRhdGEgY29waWVzIHdpdGggaTJjIGJ5IGRpcmVjdGx5IHVzaW5nIHRoZSBzbXUgY21kCisgKiAgICBidWZmZXIgYW5kIGEgbG93ZXIgbGV2ZWwgaW50ZXJuYWwgaW50ZXJmYWNlCisgKiAgLSB1bmRlcnN0YW5kIFNNVSAtPiBDUFUgZXZlbnRzIGFuZCBpbXBsZW1lbnQgcmVjZXB0aW9uIG9mIHRoZW0gdmlhCisgKiAgICB0aGUgdXNlcmxhbmQgaW50ZXJmYWNlCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtMzYsNiArMzAsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTQ1LDggKzQ0LDEzIEBACiAjaW5jbHVkZSA8YXNtL3NtdS5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9hYnNfYWRkci5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL29mX2RldmljZS5oPgogCi0jZGVmaW5lIERFQlVHX1NNVSAxCisjZGVmaW5lIFZFUlNJT04gIjAuNiIKKyNkZWZpbmUgQVVUSE9SICAiKGMpIDIwMDUgQmVuamFtaW4gSGVycmVuc2NobWlkdCwgSUJNIENvcnAuIgorCisjdW5kZWYgREVCVUdfU01VCiAKICNpZmRlZiBERUJVR19TTVUKICNkZWZpbmUgRFBSSU5USyhmbXQsIGFyZ3MuLi4pIGRvIHsgcHJpbnRrKEtFUk5fREVCVUcgZm10ICwgIyNhcmdzKTsgfSB3aGlsZSAoMCkKQEAgLTU3LDIwICs2MSwzMCBAQAogLyoKICAqIFRoaXMgaXMgdGhlIGNvbW1hbmQgYnVmZmVyIHBhc3NlZCB0byB0aGUgU01VIGhhcmR3YXJlCiAgKi8KKyNkZWZpbmUgU01VX01BWF9EQVRBCTI1NAorCiBzdHJ1Y3Qgc211X2NtZF9idWYgewogCXU4IGNtZDsKIAl1OCBsZW5ndGg7Ci0JdTggZGF0YVsweDBGRkVdOworCXU4IGRhdGFbU01VX01BWF9EQVRBXTsKIH07CiAKIHN0cnVjdCBzbXVfZGV2aWNlIHsKIAlzcGlubG9ja190CQlsb2NrOwogCXN0cnVjdCBkZXZpY2Vfbm9kZQkqb2Zfbm9kZTsKLQlpbnQJCQlkYl9hY2s7CQkvKiBkb29yYmVsbCBhY2sgR1BJTyAqLwotCWludAkJCWRiX3JlcTsJCS8qIGRvb3JiZWxsIHJlcSBHUElPICovCisJc3RydWN0IG9mX2RldmljZQkqb2ZfZGV2OworCWludAkJCWRvb3JiZWxsOwkvKiBkb29yYmVsbCBncGlvICovCiAJdTMyIF9faW9tZW0JCSpkYl9idWY7CS8qIGRvb3JiZWxsIGJ1ZmZlciAqLworCWludAkJCWRiX2lycTsKKwlpbnQJCQltc2c7CisJaW50CQkJbXNnX2lycTsKIAlzdHJ1Y3Qgc211X2NtZF9idWYJKmNtZF9idWY7CS8qIGNvbW1hbmQgYnVmZmVyIHZpcnR1YWwgKi8KIAl1MzIJCQljbWRfYnVmX2FiczsJLyogY29tbWFuZCBidWZmZXIgYWJzb2x1dGUgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWNtZF9saXN0OworCXN0cnVjdCBzbXVfY21kCQkqY21kX2N1cjsJLyogcGVuZGluZyBjb21tYW5kICovCisJc3RydWN0IGxpc3RfaGVhZAljbWRfaTJjX2xpc3Q7CisJc3RydWN0IHNtdV9pMmNfY21kCSpjbWRfaTJjX2N1cjsJLyogcGVuZGluZyBpMmMgY29tbWFuZCAqLworCXN0cnVjdCB0aW1lcl9saXN0CWkyY190aW1lcjsKIH07CiAKIC8qCkBAIC03OSwxMTMgKzkzLDI0NSBAQAogICovCiBzdGF0aWMgc3RydWN0IHNtdV9kZXZpY2UJKnNtdTsKIAorCiAvKgotICogU01VIGxvdyBsZXZlbCBjb21tdW5pY2F0aW9uIHN0dWZmCisgKiBTTVUgZHJpdmVyIGxvdyBsZXZlbCBzdHVmZgogICovCi1zdGF0aWMgaW5saW5lIGludCBzbXVfY21kX3N0YXQoc3RydWN0IHNtdV9jbWRfYnVmICpjbWRfYnVmLCB1OCBjbWRfYWNrKQotewotCXJtYigpOwotCXJldHVybiBjbWRfYnVmLT5jbWQgPT0gY21kX2FjayAmJiBjbWRfYnVmLT5sZW5ndGggIT0gMDsKLX0KIAotc3RhdGljIGlubGluZSB1OCBzbXVfc2F2ZV9hY2tfY21kKHN0cnVjdCBzbXVfY21kX2J1ZiAqY21kX2J1ZikKK3N0YXRpYyB2b2lkIHNtdV9zdGFydF9jbWQodm9pZCkKIHsKLQlyZXR1cm4gKH5jbWRfYnVmLT5jbWQpICYgMHhmZjsKLX0KKwl1bnNpZ25lZCBsb25nIGZhZGRyLCBmZW5kOworCXN0cnVjdCBzbXVfY21kICpjbWQ7CiAKLXN0YXRpYyB2b2lkIHNtdV9zZW5kX2NtZChzdHJ1Y3Qgc211X2RldmljZSAqZGV2KQotewotCS8qIFNNVSBjb21tYW5kIGJ1ZiBpcyBjdXJyZW50bHkgY2FjaGVhYmxlLCB3ZSBuZWVkIGEgcGh5c2ljYWwKLQkgKiBhZGRyZXNzLiBUaGlzIGlzbid0IGV4YWN0bHkgYSBETUEgbWFwcGluZyBoZXJlLCBJIHN1c3BlY3QKKwlpZiAobGlzdF9lbXB0eSgmc211LT5jbWRfbGlzdCkpCisJCXJldHVybjsKKworCS8qIEZldGNoIGZpcnN0IGNvbW1hbmQgaW4gcXVldWUgKi8KKwljbWQgPSBsaXN0X2VudHJ5KHNtdS0+Y21kX2xpc3QubmV4dCwgc3RydWN0IHNtdV9jbWQsIGxpbmspOworCXNtdS0+Y21kX2N1ciA9IGNtZDsKKwlsaXN0X2RlbCgmY21kLT5saW5rKTsKKworCURQUklOVEsoIlNNVTogc3RhcnRpbmcgY21kICV4LCAlZCBieXRlcyBkYXRhXG4iLCBjbWQtPmNtZCwKKwkJY21kLT5kYXRhX2xlbik7CisJRFBSSU5USygiU01VOiBkYXRhIGJ1ZmZlcjogJTAyeCAlMDJ4ICUwMnggJTAyeCAuLi5cbiIsCisJCSgodTggKiljbWQtPmRhdGFfYnVmKVswXSwgKCh1OCAqKWNtZC0+ZGF0YV9idWYpWzFdLAorCQkoKHU4ICopY21kLT5kYXRhX2J1ZilbMl0sICgodTggKiljbWQtPmRhdGFfYnVmKVszXSk7CisKKwkvKiBGaWxsIHRoZSBTTVUgY29tbWFuZCBidWZmZXIgKi8KKwlzbXUtPmNtZF9idWYtPmNtZCA9IGNtZC0+Y21kOworCXNtdS0+Y21kX2J1Zi0+bGVuZ3RoID0gY21kLT5kYXRhX2xlbjsKKwltZW1jcHkoc211LT5jbWRfYnVmLT5kYXRhLCBjbWQtPmRhdGFfYnVmLCBjbWQtPmRhdGFfbGVuKTsKKworCS8qIEZsdXNoIGNvbW1hbmQgYW5kIGRhdGEgdG8gUkFNICovCisJZmFkZHIgPSAodW5zaWduZWQgbG9uZylzbXUtPmNtZF9idWY7CisJZmVuZCA9IGZhZGRyICsgc211LT5jbWRfYnVmLT5sZW5ndGggKyAyOworCWZsdXNoX2ludmFsX2RjYWNoZV9yYW5nZShmYWRkciwgZmVuZCk7CisKKwkvKiBUaGlzIGlzbid0IGV4YWN0bHkgYSBETUEgbWFwcGluZyBoZXJlLCBJIHN1c3BlY3QKIAkgKiB0aGUgU01VIGlzIGFjdHVhbGx5IGNvbW11bmljYXRpbmcgd2l0aCB1cyB2aWEgaTJjIHRvIHRoZQogCSAqIG5vcnRoYnJpZGdlIG9yIHRoZSBDUFUgdG8gYWNjZXNzIFJBTS4KIAkgKi8KLQl3cml0ZWwoZGV2LT5jbWRfYnVmX2FicywgZGV2LT5kYl9idWYpOworCXdyaXRlbChzbXUtPmNtZF9idWZfYWJzLCBzbXUtPmRiX2J1Zik7CiAKIAkvKiBSaW5nIHRoZSBTTVUgZG9vcmJlbGwgKi8KLQlwbWFjX2RvX2ZlYXR1cmVfY2FsbChQTUFDX0ZUUl9XUklURV9HUElPLCBOVUxMLCBkZXYtPmRiX3JlcSwgNCk7Ci0JcG1hY19kb19mZWF0dXJlX2NhbGwoUE1BQ19GVFJfUkVBRF9HUElPLCBOVUxMLCBkZXYtPmRiX3JlcSwgNCk7CisJcG1hY19kb19mZWF0dXJlX2NhbGwoUE1BQ19GVFJfV1JJVEVfR1BJTywgTlVMTCwgc211LT5kb29yYmVsbCwgNCk7CiB9CiAKLXN0YXRpYyBpbnQgc211X2NtZF9kb25lKHN0cnVjdCBzbXVfZGV2aWNlICpkZXYpCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzbXVfZGJfaW50cihpbnQgaXJxLCB2b2lkICphcmcsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXVuc2lnbmVkIGxvbmcgd2FpdCA9IDA7Ci0JaW50IGdwaW87CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc211X2NtZCAqY21kOworCXZvaWQgKCpkb25lKShzdHJ1Y3Qgc211X2NtZCAqY21kLCB2b2lkICptaXNjKSA9IE5VTEw7CisJdm9pZCAqbWlzYyA9IE5VTEw7CisJdTggZ3BpbzsKKwlpbnQgcmMgPSAwOwogCi0JLyogQ2hlY2sgdGhlIFNNVSBkb29yYmVsbCAqLwotCWRvICB7Ci0JCWdwaW8gPSBwbWFjX2RvX2ZlYXR1cmVfY2FsbChQTUFDX0ZUUl9SRUFEX0dQSU8sCi0JCQkJCSAgICBOVUxMLCBkZXYtPmRiX2Fjayk7Ci0JCWlmICgoZ3BpbyAmIDcpID09IDcpCi0JCQlyZXR1cm4gMDsKLQkJdWRlbGF5KDEwMCk7Ci0JfSB3aGlsZSgrK3dhaXQgPCAxMDAwMCk7CisJLyogU01VIGNvbXBsZXRlZCB0aGUgY29tbWFuZCwgd2VsbCwgd2UgaG9wZSwgbGV0J3MgbWFrZSBzdXJlCisJICogb2YgaXQKKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmc211LT5sb2NrLCBmbGFncyk7CiAKLQlwcmludGsoS0VSTl9FUlIgIlNNVSB0aW1lb3V0ICFcbiIpOwotCXJldHVybiAtRU5YSU87CisJZ3BpbyA9IHBtYWNfZG9fZmVhdHVyZV9jYWxsKFBNQUNfRlRSX1JFQURfR1BJTywgTlVMTCwgc211LT5kb29yYmVsbCk7CisJaWYgKChncGlvICYgNykgIT0gNykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbXUtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCWNtZCA9IHNtdS0+Y21kX2N1cjsKKwlzbXUtPmNtZF9jdXIgPSBOVUxMOworCWlmIChjbWQgPT0gTlVMTCkKKwkJZ290byBiYWlsOworCisJaWYgKHJjID09IDApIHsKKwkJdW5zaWduZWQgbG9uZyBmYWRkcjsKKwkJaW50IHJlcGx5X2xlbjsKKwkJdTggYWNrOworCisJCS8qIENQVSBtaWdodCBoYXZlIGJyb3VnaHQgYmFjayB0aGUgY2FjaGUgbGluZSwgc28gd2UgbmVlZAorCQkgKiB0byBmbHVzaCBhZ2FpbiBiZWZvcmUgcGVla2luZyBhdCB0aGUgU01VIHJlc3BvbnNlLiBXZQorCQkgKiBmbHVzaCB0aGUgZW50aXJlIGJ1ZmZlciBmb3Igbm93IGFzIHdlIGhhdmVuJ3QgcmVhZCB0aGUKKwkJICogcmVwbHkgbGVuZ2h0IChpdCdzIG9ubHkgMiBjYWNoZSBsaW5lcyBhbnl3YXkpCisJCSAqLworCQlmYWRkciA9ICh1bnNpZ25lZCBsb25nKXNtdS0+Y21kX2J1ZjsKKwkJZmx1c2hfaW52YWxfZGNhY2hlX3JhbmdlKGZhZGRyLCBmYWRkciArIDI1Nik7CisKKwkJLyogTm93IGNoZWNrIGFjayAqLworCQlhY2sgPSAofmNtZC0+Y21kKSAmIDB4ZmY7CisJCWlmIChhY2sgIT0gc211LT5jbWRfYnVmLT5jbWQpIHsKKwkJCURQUklOVEsoIlNNVTogaW5jb3JyZWN0IGFjaywgd2FudCAleCBnb3QgJXhcbiIsCisJCQkJYWNrLCBzbXUtPmNtZF9idWYtPmNtZCk7CisJCQlyYyA9IC1FSU87CisJCX0KKwkJcmVwbHlfbGVuID0gcmMgPT0gMCA/IHNtdS0+Y21kX2J1Zi0+bGVuZ3RoIDogMDsKKwkJRFBSSU5USygiU01VOiByZXBseSBsZW46ICVkXG4iLCByZXBseV9sZW4pOworCQlpZiAocmVwbHlfbGVuID4gY21kLT5yZXBseV9sZW4pIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNNVTogcmVwbHkgYnVmZmVyIHRvbyBzbWFsbCwiCisJCQkgICAgICAgImdvdCAlZCBieXRlcyBmb3IgYSAlZCBieXRlcyBidWZmZXJcbiIsCisJCQkgICAgICAgcmVwbHlfbGVuLCBjbWQtPnJlcGx5X2xlbik7CisJCQlyZXBseV9sZW4gPSBjbWQtPnJlcGx5X2xlbjsKKwkJfQorCQljbWQtPnJlcGx5X2xlbiA9IHJlcGx5X2xlbjsKKwkJaWYgKGNtZC0+cmVwbHlfYnVmICYmIHJlcGx5X2xlbikKKwkJCW1lbWNweShjbWQtPnJlcGx5X2J1Ziwgc211LT5jbWRfYnVmLT5kYXRhLCByZXBseV9sZW4pOworCX0KKworCS8qIE5vdyBjb21wbGV0ZSB0aGUgY29tbWFuZC4gV3JpdGUgc3RhdHVzIGxhc3QgaW4gb3JkZXIgYXMgd2UgbG9zdAorCSAqIG93bmVyc2hpcCBvZiB0aGUgY29tbWFuZCBzdHJ1Y3R1cmUgYXMgc29vbiBhcyBpdCdzIG5vIGxvbmdlciAtMQorCSAqLworCWRvbmUgPSBjbWQtPmRvbmU7CisJbWlzYyA9IGNtZC0+bWlzYzsKKwltYigpOworCWNtZC0+c3RhdHVzID0gcmM7CisgYmFpbDoKKwkvKiBTdGFydCBuZXh0IGNvbW1hbmQgaWYgYW55ICovCisJc211X3N0YXJ0X2NtZCgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtdS0+bG9jaywgZmxhZ3MpOworCisJLyogQ2FsbCBjb21tYW5kIGNvbXBsZXRpb24gaGFuZGxlciBpZiBhbnkgKi8KKwlpZiAoZG9uZSkKKwkJZG9uZShjbWQsIG1pc2MpOworCisJLyogSXQncyBhbiBlZGdlIGludGVycnVwdCwgbm90aGluZyB0byBkbyAqLworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBzbXVfZG9fY21kKHN0cnVjdCBzbXVfZGV2aWNlICpkZXYpCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzbXVfbXNnX2ludHIoaW50IGlycSwgdm9pZCAqYXJnLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlpbnQgcmM7Ci0JdTggY21kX2FjazsKKwkvKiBJIGRvbid0IHF1aXRlIGtub3cgd2hhdCB0byBkbyB3aXRoIHRoaXMgb25lLCB3ZSBzZWVtIHRvIG5ldmVyCisJICogcmVjZWl2ZSBpdCwgc28gSSBzdXNwZWN0IHdlIGhhdmUgdG8gYXJtIGl0IHNvbWV3YXkgaW4gdGhlIFNNVQorCSAqIHRvIHN0YXJ0IGdldHRpbmcgZXZlbnRzIHRoYXQgd2F5LgorCSAqLwogCi0JRFBSSU5USygiU01VIGRvX2NtZCAlMDJ4IGxlbj0lZCAlMDJ4XG4iLAotCQlkZXYtPmNtZF9idWYtPmNtZCwgZGV2LT5jbWRfYnVmLT5sZW5ndGgsCi0JCWRldi0+Y21kX2J1Zi0+ZGF0YVswXSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiU01VOiBtZXNzYWdlIGludGVycnVwdCAhXG4iKTsKIAotCWNtZF9hY2sgPSBzbXVfc2F2ZV9hY2tfY21kKGRldi0+Y21kX2J1Zik7Ci0KLQkvKiBDbGVhciBjbWRfYnVmIGNhY2hlIGxpbmVzICovCi0JZmx1c2hfaW52YWxfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWRldi0+Y21kX2J1ZiwKLQkJCQkgKCh1bnNpZ25lZCBsb25nKWRldi0+Y21kX2J1ZikgKwotCQkJCSBzaXplb2Yoc3RydWN0IHNtdV9jbWRfYnVmKSk7Ci0Jc211X3NlbmRfY21kKGRldik7Ci0JcmMgPSBzbXVfY21kX2RvbmUoZGV2KTsKLQlpZiAocmMgPT0gMCkKLQkJcmMgPSBzbXVfY21kX3N0YXQoZGV2LT5jbWRfYnVmLCBjbWRfYWNrKSA/IDAgOiAtMTsKLQotCURQUklOVEsoIlNNVSBkb19jbWQgJTAyeCBsZW49JWQgJTAyeCA9PiAlZCAoJTAyeClcbiIsCi0JCWRldi0+Y21kX2J1Zi0+Y21kLCBkZXYtPmNtZF9idWYtPmxlbmd0aCwKLQkJZGV2LT5jbWRfYnVmLT5kYXRhWzBdLCByYywgY21kX2Fjayk7Ci0KLQlyZXR1cm4gcmM7CisJLyogSXQncyBhbiBlZGdlIGludGVycnVwdCwgbm90aGluZyB0byBkbyAqLworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAorCisvKgorICogUXVldWVkIGNvbW1hbmQgbWFuYWdlbWVudC4KKyAqCisgKi8KKworaW50IHNtdV9xdWV1ZV9jbWQoc3RydWN0IHNtdV9jbWQgKmNtZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHNtdSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoY21kLT5kYXRhX2xlbiA+IFNNVV9NQVhfREFUQSB8fAorCSAgICBjbWQtPnJlcGx5X2xlbiA+IFNNVV9NQVhfREFUQSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljbWQtPnN0YXR1cyA9IDE7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnNtdS0+bG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmNtZC0+bGluaywgJnNtdS0+Y21kX2xpc3QpOworCWlmIChzbXUtPmNtZF9jdXIgPT0gTlVMTCkKKwkJc211X3N0YXJ0X2NtZCgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtdS0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHNtdV9xdWV1ZV9jbWQpOworCisKK2ludCBzbXVfcXVldWVfc2ltcGxlKHN0cnVjdCBzbXVfc2ltcGxlX2NtZCAqc2NtZCwgdTggY29tbWFuZCwKKwkJICAgICB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sCisJCSAgICAgdm9pZCAoKmRvbmUpKHN0cnVjdCBzbXVfY21kICpjbWQsIHZvaWQgKm1pc2MpLAorCQkgICAgIHZvaWQgKm1pc2MsIC4uLikKK3sKKwlzdHJ1Y3Qgc211X2NtZCAqY21kID0gJnNjbWQtPmNtZDsKKwl2YV9saXN0IGxpc3Q7CisJaW50IGk7CisKKwlpZiAoZGF0YV9sZW4gPiBzaXplb2Yoc2NtZC0+YnVmZmVyKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1zZXQoc2NtZCwgMCwgc2l6ZW9mKCpzY21kKSk7CisJY21kLT5jbWQgPSBjb21tYW5kOworCWNtZC0+ZGF0YV9sZW4gPSBkYXRhX2xlbjsKKwljbWQtPmRhdGFfYnVmID0gc2NtZC0+YnVmZmVyOworCWNtZC0+cmVwbHlfbGVuID0gc2l6ZW9mKHNjbWQtPmJ1ZmZlcik7CisJY21kLT5yZXBseV9idWYgPSBzY21kLT5idWZmZXI7CisJY21kLT5kb25lID0gZG9uZTsKKwljbWQtPm1pc2MgPSBtaXNjOworCisJdmFfc3RhcnQobGlzdCwgbWlzYyk7CisJZm9yIChpID0gMDsgaSA8IGRhdGFfbGVuOyArK2kpCisJCXNjbWQtPmJ1ZmZlcltpXSA9ICh1OCl2YV9hcmcobGlzdCwgaW50KTsKKwl2YV9lbmQobGlzdCk7CisKKwlyZXR1cm4gc211X3F1ZXVlX2NtZChjbWQpOworfQorRVhQT1JUX1NZTUJPTChzbXVfcXVldWVfc2ltcGxlKTsKKworCit2b2lkIHNtdV9wb2xsKHZvaWQpCit7CisJdTggZ3BpbzsKKworCWlmIChzbXUgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZ3BpbyA9IHBtYWNfZG9fZmVhdHVyZV9jYWxsKFBNQUNfRlRSX1JFQURfR1BJTywgTlVMTCwgc211LT5kb29yYmVsbCk7CisJaWYgKChncGlvICYgNykgPT0gNykKKwkJc211X2RiX2ludHIoc211LT5kYl9pcnEsIHNtdSwgTlVMTCk7Cit9CitFWFBPUlRfU1lNQk9MKHNtdV9wb2xsKTsKKworCit2b2lkIHNtdV9kb25lX2NvbXBsZXRlKHN0cnVjdCBzbXVfY21kICpjbWQsIHZvaWQgKm1pc2MpCit7CisJc3RydWN0IGNvbXBsZXRpb24gKmNvbXAgPSBtaXNjOworCisJY29tcGxldGUoY29tcCk7Cit9CitFWFBPUlRfU1lNQk9MKHNtdV9kb25lX2NvbXBsZXRlKTsKKworCit2b2lkIHNtdV9zcGlud2FpdF9jbWQoc3RydWN0IHNtdV9jbWQgKmNtZCkKK3sKKwl3aGlsZShjbWQtPnN0YXR1cyA9PSAxKQorCQlzbXVfcG9sbCgpOworfQorRVhQT1JUX1NZTUJPTChzbXVfc3BpbndhaXRfY21kKTsKKworCiAvKiBSVEMgbG93IGxldmVsIGNvbW1hbmRzICovCiBzdGF0aWMgaW5saW5lIGludCBiY2QyaGV4IChpbnQgbikKIHsKIAlyZXR1cm4gKCgobiAmIDB4ZjApID4+IDQpICogMTApICsgKG4gJiAweGYpOwogfQogCisKIHN0YXRpYyBpbmxpbmUgaW50IGhleDJiY2QgKGludCBuKQogewogCXJldHVybiAoKG4gLyAxMCkgPDwgNCkgKyAobiAlIDEwKTsKIH0KIAotI2lmIDAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzbXVfZmlsbF9zZXRfcHdydXBfdGltZXJfY21kKHN0cnVjdCBzbXVfY21kX2J1ZiAqY21kX2J1ZikKLXsKLQljbWRfYnVmLT5jbWQgPSAweDhlOwotCWNtZF9idWYtPmxlbmd0aCA9IDg7Ci0JY21kX2J1Zi0+ZGF0YVswXSA9IDB4MDA7Ci0JbWVtc2V0KGNtZF9idWYtPmRhdGEgKyAxLCAwLCA3KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNtdV9maWxsX2dldF9wd3J1cF90aW1lcl9jbWQoc3RydWN0IHNtdV9jbWRfYnVmICpjbWRfYnVmKQotewotCWNtZF9idWYtPmNtZCA9IDB4OGU7Ci0JY21kX2J1Zi0+bGVuZ3RoID0gMTsKLQljbWRfYnVmLT5kYXRhWzBdID0gMHgwMTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNtdV9maWxsX2Rpc19wd3J1cF90aW1lcl9jbWQoc3RydWN0IHNtdV9jbWRfYnVmICpjbWRfYnVmKQotewotCWNtZF9idWYtPmNtZCA9IDB4OGU7Ci0JY21kX2J1Zi0+bGVuZ3RoID0gMTsKLQljbWRfYnVmLT5kYXRhWzBdID0gMHgwMjsKLX0KLSNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgc211X2ZpbGxfc2V0X3J0Y19jbWQoc3RydWN0IHNtdV9jbWRfYnVmICpjbWRfYnVmLAogCQkJCQlzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUpCkBAIC0yMDIsMTAwICszNDgsOTYgQEAKIAljbWRfYnVmLT5kYXRhWzddID0gaGV4MmJjZCh0aW1lLT50bV95ZWFyIC0gMTAwKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNtdV9maWxsX2dldF9ydGNfY21kKHN0cnVjdCBzbXVfY21kX2J1ZiAqY21kX2J1ZikKLXsKLQljbWRfYnVmLT5jbWQgPSAweDhlOwotCWNtZF9idWYtPmxlbmd0aCA9IDE7Ci0JY21kX2J1Zi0+ZGF0YVswXSA9IDB4ODE7Ci19CiAKLXN0YXRpYyB2b2lkIHNtdV9wYXJzZV9nZXRfcnRjX3JlcGx5KHN0cnVjdCBzbXVfY21kX2J1ZiAqY21kX2J1ZiwKLQkJCQkgICAgc3RydWN0IHJ0Y190aW1lICp0aW1lKQoraW50IHNtdV9nZXRfcnRjX3RpbWUoc3RydWN0IHJ0Y190aW1lICp0aW1lLCBpbnQgc3BpbndhaXQpCiB7Ci0JdGltZS0+dG1fc2VjID0gYmNkMmhleChjbWRfYnVmLT5kYXRhWzBdKTsKLQl0aW1lLT50bV9taW4gPSBiY2QyaGV4KGNtZF9idWYtPmRhdGFbMV0pOwotCXRpbWUtPnRtX2hvdXIgPSBiY2QyaGV4KGNtZF9idWYtPmRhdGFbMl0pOwotCXRpbWUtPnRtX3dkYXkgPSBiY2QyaGV4KGNtZF9idWYtPmRhdGFbM10pOwotCXRpbWUtPnRtX21kYXkgPSBiY2QyaGV4KGNtZF9idWYtPmRhdGFbNF0pOwotCXRpbWUtPnRtX21vbiA9IGJjZDJoZXgoY21kX2J1Zi0+ZGF0YVs1XSkgLSAxOwotCXRpbWUtPnRtX3llYXIgPSBiY2QyaGV4KGNtZF9idWYtPmRhdGFbNl0pICsgMTAwOwotfQotCi1pbnQgc211X2dldF9ydGNfdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc211X3NpbXBsZV9jbWQgY21kOwogCWludCByYzsKIAogCWlmIChzbXUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAltZW1zZXQodGltZSwgMCwgc2l6ZW9mKHN0cnVjdCBydGNfdGltZSkpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZzbXUtPmxvY2ssIGZsYWdzKTsKLQlzbXVfZmlsbF9nZXRfcnRjX2NtZChzbXUtPmNtZF9idWYpOwotCXJjID0gc211X2RvX2NtZChzbXUpOwotCWlmIChyYyA9PSAwKQotCQlzbXVfcGFyc2VfZ2V0X3J0Y19yZXBseShzbXUtPmNtZF9idWYsIHRpbWUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtdS0+bG9jaywgZmxhZ3MpOworCXJjID0gc211X3F1ZXVlX3NpbXBsZSgmY21kLCBTTVVfQ01EX1JUQ19DT01NQU5ELCAxLCBOVUxMLCBOVUxMLAorCQkJICAgICAgU01VX0NNRF9SVENfR0VUX0RBVEVUSU1FKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwlzbXVfc3BpbndhaXRfc2ltcGxlKCZjbWQpOwogCi0JcmV0dXJuIHJjOworCXRpbWUtPnRtX3NlYyA9IGJjZDJoZXgoY21kLmJ1ZmZlclswXSk7CisJdGltZS0+dG1fbWluID0gYmNkMmhleChjbWQuYnVmZmVyWzFdKTsKKwl0aW1lLT50bV9ob3VyID0gYmNkMmhleChjbWQuYnVmZmVyWzJdKTsKKwl0aW1lLT50bV93ZGF5ID0gYmNkMmhleChjbWQuYnVmZmVyWzNdKTsKKwl0aW1lLT50bV9tZGF5ID0gYmNkMmhleChjbWQuYnVmZmVyWzRdKTsKKwl0aW1lLT50bV9tb24gPSBiY2QyaGV4KGNtZC5idWZmZXJbNV0pIC0gMTsKKwl0aW1lLT50bV95ZWFyID0gYmNkMmhleChjbWQuYnVmZmVyWzZdKSArIDEwMDsKKworCXJldHVybiAwOwogfQogCi1pbnQgc211X3NldF9ydGNfdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUpCisKK2ludCBzbXVfc2V0X3J0Y190aW1lKHN0cnVjdCBydGNfdGltZSAqdGltZSwgaW50IHNwaW53YWl0KQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHNtdV9zaW1wbGVfY21kIGNtZDsKIAlpbnQgcmM7CiAKIAlpZiAoc211ID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNtdS0+bG9jaywgZmxhZ3MpOwotCXNtdV9maWxsX3NldF9ydGNfY21kKHNtdS0+Y21kX2J1ZiwgdGltZSk7Ci0JcmMgPSBzbXVfZG9fY21kKHNtdSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc211LT5sb2NrLCBmbGFncyk7CisJcmMgPSBzbXVfcXVldWVfc2ltcGxlKCZjbWQsIFNNVV9DTURfUlRDX0NPTU1BTkQsIDgsIE5VTEwsIE5VTEwsCisJCQkgICAgICBTTVVfQ01EX1JUQ19TRVRfREFURVRJTUUsCisJCQkgICAgICBoZXgyYmNkKHRpbWUtPnRtX3NlYyksCisJCQkgICAgICBoZXgyYmNkKHRpbWUtPnRtX21pbiksCisJCQkgICAgICBoZXgyYmNkKHRpbWUtPnRtX2hvdXIpLAorCQkJICAgICAgdGltZS0+dG1fd2RheSwKKwkJCSAgICAgIGhleDJiY2QodGltZS0+dG1fbWRheSksCisJCQkgICAgICBoZXgyYmNkKHRpbWUtPnRtX21vbikgKyAxLAorCQkJICAgICAgaGV4MmJjZCh0aW1lLT50bV95ZWFyIC0gMTAwKSk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJc211X3NwaW53YWl0X3NpbXBsZSgmY21kKTsKIAotCXJldHVybiByYzsKKwlyZXR1cm4gMDsKIH0KIAorCiB2b2lkIHNtdV9zaHV0ZG93bih2b2lkKQogewotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSAiU0hVVERPV04iOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHNtdV9zaW1wbGVfY21kIGNtZDsKIAogCWlmIChzbXUgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNtdS0+bG9jaywgZmxhZ3MpOwotCXNtdS0+Y21kX2J1Zi0+Y21kID0gMHhhYTsKLQlzbXUtPmNtZF9idWYtPmxlbmd0aCA9IHN0cmxlbihjb21tYW5kKTsKLQlzdHJjcHkoc211LT5jbWRfYnVmLT5kYXRhLCBjb21tYW5kKTsKLQlzbXVfZG9fY21kKHNtdSk7CisJaWYgKHNtdV9xdWV1ZV9zaW1wbGUoJmNtZCwgU01VX0NNRF9QT1dFUl9DT01NQU5ELCA5LCBOVUxMLCBOVUxMLAorCQkJICAgICAnUycsICdIJywgJ1UnLCAnVCcsICdEJywgJ08nLCAnVycsICdOJywgMCkpCisJCXJldHVybjsKKwlzbXVfc3BpbndhaXRfc2ltcGxlKCZjbWQpOwogCWZvciAoOzspCiAJCTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbXUtPmxvY2ssIGZsYWdzKTsKIH0KIAorCiB2b2lkIHNtdV9yZXN0YXJ0KHZvaWQpCiB7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqY29tbWFuZCA9ICJSRVNUQVJUIjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzbXVfc2ltcGxlX2NtZCBjbWQ7CiAKIAlpZiAoc211ID09IE5VTEwpCiAJCXJldHVybjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZzbXUtPmxvY2ssIGZsYWdzKTsKLQlzbXUtPmNtZF9idWYtPmNtZCA9IDB4YWE7Ci0Jc211LT5jbWRfYnVmLT5sZW5ndGggPSBzdHJsZW4oY29tbWFuZCk7Ci0Jc3RyY3B5KHNtdS0+Y21kX2J1Zi0+ZGF0YSwgY29tbWFuZCk7Ci0Jc211X2RvX2NtZChzbXUpOworCWlmIChzbXVfcXVldWVfc2ltcGxlKCZjbWQsIFNNVV9DTURfUE9XRVJfQ09NTUFORCwgOCwgTlVMTCwgTlVMTCwKKwkJCSAgICAgJ1InLCAnRScsICdTJywgJ1QnLCAnQScsICdSJywgJ1QnLCAwKSkKKwkJcmV0dXJuOworCXNtdV9zcGlud2FpdF9zaW1wbGUoJmNtZCk7CiAJZm9yICg7OykKIAkJOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtdS0+bG9jaywgZmxhZ3MpOwogfQogCisKIGludCBzbXVfcHJlc2VudCh2b2lkKQogewogCXJldHVybiBzbXUgIT0gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0woc211X3ByZXNlbnQpOwogCiAKIGludCBzbXVfaW5pdCAodm9pZCkKQEAgLTMwNyw2ICs0NDksOCBAQAogICAgICAgICBpZiAobnAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlwcmludGsoS0VSTl9JTkZPICJTTVUgZHJpdmVyICVzICVzXG4iLCBWRVJTSU9OLCBBVVRIT1IpOworCiAJaWYgKHNtdV9jbWRidWZfYWJzID09IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJTTVU6IENvbW1hbmQgYnVmZmVyIG5vdCBhbGxvY2F0ZWQgIVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzE4LDcgKzQ2MiwxMyBAQAogCW1lbXNldChzbXUsIDAsIHNpemVvZigqc211KSk7CiAKIAlzcGluX2xvY2tfaW5pdCgmc211LT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmc211LT5jbWRfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnNtdS0+Y21kX2kyY19saXN0KTsKIAlzbXUtPm9mX25vZGUgPSBucDsKKwlzbXUtPmRiX2lycSA9IE5PX0lSUTsKKwlzbXUtPm1zZ19pcnEgPSBOT19JUlE7CisJaW5pdF90aW1lcigmc211LT5pMmNfdGltZXIpOworCiAJLyogc211X2NtZGJ1Zl9hYnMgaXMgaW4gdGhlIGxvdyAyRyBvZiBSQU0sIGNhbiBiZSBjb252ZXJ0ZWQgdG8gYQogCSAqIDMyIGJpdHMgdmFsdWUgc2FmZWx5CiAJICovCkBAIC0zMzEsOCArNDgxLDggQEAKIAkJZ290byBmYWlsOwogCX0KIAlkYXRhID0gKHUzMiAqKWdldF9wcm9wZXJ0eShucCwgInJlZyIsIE5VTEwpOwotCW9mX25vZGVfcHV0KG5wKTsKIAlpZiAoZGF0YSA9PSBOVUxMKSB7CisJCW9mX25vZGVfcHV0KG5wKTsKIAkJcHJpbnRrKEtFUk5fRVJSICJTTVU6IENhbid0IGZpbmQgZG9vcmJlbGwgR1BJTyBhZGRyZXNzICFcbiIpOwogCQlnb3RvIGZhaWw7CiAJfQpAQCAtMzQxLDggKzQ5MSwzMSBAQAogCSAqIGFuZCBhY2suIEdQSU9zIGFyZSBhdCAweDUwLCBiZXN0IHdvdWxkIGJlIHRvIGZpbmQgdGhhdCBvdXQKIAkgKiBpbiB0aGUgZGV2aWNlLXRyZWUgdGhvdWdoLgogCSAqLwotCXNtdS0+ZGJfcmVxID0gMHg1MCArICpkYXRhOwotCXNtdS0+ZGJfYWNrID0gMHg1MCArICpkYXRhOworCXNtdS0+ZG9vcmJlbGwgPSAqZGF0YTsKKwlpZiAoc211LT5kb29yYmVsbCA8IDB4NTApCisJCXNtdS0+ZG9vcmJlbGwgKz0gMHg1MDsKKwlpZiAobnAtPm5faW50cnMgPiAwKQorCQlzbXUtPmRiX2lycSA9IG5wLT5pbnRyc1swXS5saW5lOworCisJb2Zfbm9kZV9wdXQobnApOworCisJLyogTm93IGxvb2sgZm9yIHRoZSBzbXUtaW50ZXJydXB0IEdQSU8gKi8KKwlkbyB7CisJCW5wID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgInNtdS1pbnRlcnJ1cHQiKTsKKwkJaWYgKG5wID09IE5VTEwpCisJCQlicmVhazsKKwkJZGF0YSA9ICh1MzIgKilnZXRfcHJvcGVydHkobnAsICJyZWciLCBOVUxMKTsKKwkJaWYgKGRhdGEgPT0gTlVMTCkgeworCQkJb2Zfbm9kZV9wdXQobnApOworCQkJYnJlYWs7CisJCX0KKwkJc211LT5tc2cgPSAqZGF0YTsKKwkJaWYgKHNtdS0+bXNnIDwgMHg1MCkKKwkJCXNtdS0+bXNnICs9IDB4NTA7CisJCWlmIChucC0+bl9pbnRycyA+IDApCisJCQlzbXUtPm1zZ19pcnEgPSBucC0+aW50cnNbMF0ubGluZTsKKwkJb2Zfbm9kZV9wdXQobnApOworCX0gd2hpbGUoMCk7CiAKIAkvKiBEb29yYmVsbCBidWZmZXIgaXMgY3VycmVudGx5IGhhcmQtY29kZWQsIEkgZGlkbid0IGZpbmQgYSBwcm9wZXIKIAkgKiBkZXZpY2UtdHJlZSBlbnRyeSBnaXZpbmcgdGhlIGFkZHJlc3MuIEJlc3Qgd291bGQgcHJvYmFibHkgdG8gdXNlCkBAIC0zNjIsMyArNTM1LDU4NCBAQAogCXJldHVybiAtRU5YSU87CiAKIH0KKworCitzdGF0aWMgaW50IHNtdV9sYXRlX2luaXQodm9pZCkKK3sKKwlpZiAoIXNtdSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFRyeSB0byByZXF1ZXN0IHRoZSBpbnRlcnJ1cHRzCisJICovCisKKwlpZiAoc211LT5kYl9pcnEgIT0gTk9fSVJRKSB7CisJCWlmIChyZXF1ZXN0X2lycShzbXUtPmRiX2lycSwgc211X2RiX2ludHIsCisJCQkJU0FfU0hJUlEsICJTTVUgZG9vcmJlbGwiLCBzbXUpIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU01VOiBjYW4ndCAiCisJCQkgICAgICAgInJlcXVlc3QgaW50ZXJydXB0ICVkXG4iLAorCQkJICAgICAgIHNtdS0+ZGJfaXJxKTsKKwkJCXNtdS0+ZGJfaXJxID0gTk9fSVJROworCQl9CisJfQorCisJaWYgKHNtdS0+bXNnX2lycSAhPSBOT19JUlEpIHsKKwkJaWYgKHJlcXVlc3RfaXJxKHNtdS0+bXNnX2lycSwgc211X21zZ19pbnRyLAorCQkJCVNBX1NISVJRLCAiU01VIG1lc3NhZ2UiLCBzbXUpIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU01VOiBjYW4ndCAiCisJCQkgICAgICAgInJlcXVlc3QgaW50ZXJydXB0ICVkXG4iLAorCQkJICAgICAgIHNtdS0+bXNnX2lycSk7CisJCQlzbXUtPm1zZ19pcnEgPSBOT19JUlE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwoc211X2xhdGVfaW5pdCk7CisKKy8qCisgKiBzeXNmcyB2aXNpYmlsaXR5CisgKi8KKworc3RhdGljIHZvaWQgc211X2V4cG9zZV9jaGlsZHModm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisKKwlmb3IgKG5wID0gTlVMTDsgKG5wID0gb2ZfZ2V0X25leHRfY2hpbGQoc211LT5vZl9ub2RlLCBucCkpICE9IE5VTEw7KSB7CisJCWlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgInNtdS1pMmMiKSkgeworCQkJY2hhciBuYW1lWzMyXTsKKwkJCXUzMiAqcmVnID0gKHUzMiAqKWdldF9wcm9wZXJ0eShucCwgInJlZyIsIE5VTEwpOworCisJCQlpZiAocmVnID09IE5VTEwpCisJCQkJY29udGludWU7CisJCQlzcHJpbnRmKG5hbWUsICJzbXUtaTJjLSUwMngiLCAqcmVnKTsKKwkJCW9mX3BsYXRmb3JtX2RldmljZV9jcmVhdGUobnAsIG5hbWUsICZzbXUtPm9mX2Rldi0+ZGV2KTsKKwkJfQorCX0KKworfQorCitzdGF0aWMgREVDTEFSRV9XT1JLKHNtdV9leHBvc2VfY2hpbGRzX3dvcmssIHNtdV9leHBvc2VfY2hpbGRzLCBOVUxMKTsKKworc3RhdGljIGludCBzbXVfcGxhdGZvcm1fcHJvYmUoc3RydWN0IG9mX2RldmljZSogZGV2LAorCQkJICAgICAgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCit7CisJaWYgKCFzbXUpCisJCXJldHVybiAtRU5PREVWOworCXNtdS0+b2ZfZGV2ID0gZGV2OworCisJLyoKKwkgKiBPaywgd2UgYXJlIG1hdGNoZWQsIG5vdyBleHBvc2UgYWxsIGkyYyBidXNzZXMuIFdlIGhhdmUgdG8gZGVmZXIKKwkgKiB0aGF0IHVuZm9ydHVuYXRlbHkgb3IgaXQgd291bGQgZGVhZGxvY2sgaW5zaWRlIHRoZSBkZXZpY2UgbW9kZWwKKwkgKi8KKwlzY2hlZHVsZV93b3JrKCZzbXVfZXhwb3NlX2NoaWxkc193b3JrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBzbXVfcGxhdGZvcm1fbWF0Y2hbXSA9Cit7CisJeworCQkudHlwZQkJPSAic211IiwKKwl9LAorCXt9LAorfTsKKworc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgc211X29mX3BsYXRmb3JtX2RyaXZlciA9Cit7CisJLm5hbWUgCQk9ICJzbXUiLAorCS5tYXRjaF90YWJsZQk9IHNtdV9wbGF0Zm9ybV9tYXRjaCwKKwkucHJvYmUJCT0gc211X3BsYXRmb3JtX3Byb2JlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc211X2luaXRfc3lzZnModm9pZCkKK3sKKwlpbnQgcmM7CisKKwkvKgorCSAqIER1ZSB0byBzeXNmcyBib2dvc2l0eSwgYSBzeXNkZXYgaXMgbm90IGEgcmVhbCBkZXZpY2UsIHNvCisJICogd2Ugc2hvdWxkIGluIGZhY3QgY3JlYXRlIGJvdGggaWYgd2Ugd2FudCBzeXNkZXYgc2VtYW50aWNzCisJICogZm9yIHBvd2VyIG1hbmFnZW1lbnQuCisJICogRm9yIG5vdywgd2UgZG9uJ3QgcG93ZXIgbWFuYWdlIG1hY2hpbmVzIHdpdGggYW4gU01VIGNoaXAsCisJICogSSdtIGEgYml0IHRvbyBmYXIgZnJvbSBmaWd1cmluZyBvdXQgaG93IHRoYXQgd29ya3Mgd2l0aCB0aG9zZQorCSAqIG5ldyBjaGlwc2V0cywgYnV0IHRoYXQgd2lsbCBjb21lIGJhY2sgYW5kIGJpdGUgdXMKKwkgKi8KKwlyYyA9IG9mX3JlZ2lzdGVyX2RyaXZlcigmc211X29mX3BsYXRmb3JtX2RyaXZlcik7CisJcmV0dXJuIDA7Cit9CisKK2RldmljZV9pbml0Y2FsbChzbXVfaW5pdF9zeXNmcyk7CisKK3N0cnVjdCBvZl9kZXZpY2UgKnNtdV9nZXRfb2ZkZXYodm9pZCkKK3sKKwlpZiAoIXNtdSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIHNtdS0+b2ZfZGV2OworfQorCitFWFBPUlRfU1lNQk9MX0dQTChzbXVfZ2V0X29mZGV2KTsKKworLyoKKyAqIGkyYyBpbnRlcmZhY2UKKyAqLworCitzdGF0aWMgdm9pZCBzbXVfaTJjX2NvbXBsZXRlX2NvbW1hbmQoc3RydWN0IHNtdV9pMmNfY21kICpjbWQsIGludCBmYWlsKQoreworCXZvaWQgKCpkb25lKShzdHJ1Y3Qgc211X2kyY19jbWQgKmNtZCwgdm9pZCAqbWlzYykgPSBjbWQtPmRvbmU7CisJdm9pZCAqbWlzYyA9IGNtZC0+bWlzYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogQ2hlY2sgZm9yIHJlYWQgY2FzZSAqLworCWlmICghZmFpbCAmJiBjbWQtPnJlYWQpIHsKKwkJaWYgKGNtZC0+cGRhdGFbMF0gPCAxKQorCQkJZmFpbCA9IDE7CisJCWVsc2UKKwkJCW1lbWNweShjbWQtPmluZm8uZGF0YSwgJmNtZC0+cGRhdGFbMV0sCisJCQkgICAgICAgY21kLT5pbmZvLmRhdGFsZW4pOworCX0KKworCURQUklOVEsoIlNNVTogY29tcGxldGluZywgc3VjY2VzczogJWRcbiIsICFmYWlsKTsKKworCS8qIFVwZGF0ZSBzdGF0dXMgYW5kIG1hcmsgbm8gcGVuZGluZyBpMmMgY29tbWFuZCB3aXRoIGxvY2sKKwkgKiBoZWxkIHNvIG5vYm9keSBjb21lcyBpbiB3aGlsZSB3ZSBkZXF1ZXVlIGFuIGV2ZW50dWFsCisJICogcGVuZGluZyBuZXh0IGkyYyBjb21tYW5kCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNtdS0+bG9jaywgZmxhZ3MpOworCXNtdS0+Y21kX2kyY19jdXIgPSBOVUxMOworCXdtYigpOworCWNtZC0+c3RhdHVzID0gZmFpbCA/IC1FSU8gOiAwOworCisJLyogSXMgdGhlcmUgYW5vdGhlciBpMmMgY29tbWFuZCB3YWl0aW5nID8gKi8KKwlpZiAoIWxpc3RfZW1wdHkoJnNtdS0+Y21kX2kyY19saXN0KSkgeworCQlzdHJ1Y3Qgc211X2kyY19jbWQgKm5ld2NtZDsKKworCQkvKiBGZXRjaCBpdCwgbmV3IGN1cnJlbnQsIHJlbW92ZSBmcm9tIGxpc3QgKi8KKwkJbmV3Y21kID0gbGlzdF9lbnRyeShzbXUtPmNtZF9pMmNfbGlzdC5uZXh0LAorCQkJCSAgICBzdHJ1Y3Qgc211X2kyY19jbWQsIGxpbmspOworCQlzbXUtPmNtZF9pMmNfY3VyID0gbmV3Y21kOworCQlsaXN0X2RlbCgmY21kLT5saW5rKTsKKworCQkvKiBRdWV1ZSB3aXRoIGxvdyBsZXZlbCBzbXUgKi8KKwkJbGlzdF9hZGRfdGFpbCgmY21kLT5zY21kLmxpbmssICZzbXUtPmNtZF9saXN0KTsKKwkJaWYgKHNtdS0+Y21kX2N1ciA9PSBOVUxMKQorCQkJc211X3N0YXJ0X2NtZCgpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbXUtPmxvY2ssIGZsYWdzKTsKKworCS8qIENhbGwgY29tbWFuZCBjb21wbGV0aW9uIGhhbmRsZXIgaWYgYW55ICovCisJaWYgKGRvbmUpCisJCWRvbmUoY21kLCBtaXNjKTsKKworfQorCisKK3N0YXRpYyB2b2lkIHNtdV9pMmNfcmV0cnkodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBzbXVfaTJjX2NtZAkqY21kID0gKHN0cnVjdCBzbXVfaTJjX2NtZCAqKWRhdGE7CisKKwlEUFJJTlRLKCJTTVU6IGkyYyBmYWlsdXJlLCByZXF1ZXVpbmcuLi5cbiIpOworCisJLyogcmVxdWV1ZSBjb21tYW5kIHNpbXBseSBieSByZXNldHRpbmcgcmVwbHlfbGVuICovCisJY21kLT5wZGF0YVswXSA9IDB4ZmY7CisJY21kLT5zY21kLnJlcGx5X2xlbiA9IDB4MTA7CisJc211X3F1ZXVlX2NtZCgmY21kLT5zY21kKTsKK30KKworCitzdGF0aWMgdm9pZCBzbXVfaTJjX2xvd19jb21wbGV0aW9uKHN0cnVjdCBzbXVfY21kICpzY21kLCB2b2lkICptaXNjKQoreworCXN0cnVjdCBzbXVfaTJjX2NtZAkqY21kID0gbWlzYzsKKwlpbnQJCQlmYWlsID0gMDsKKworCURQUklOVEsoIlNNVTogaTJjIGNvbXBsLiBzdGFnZT0lZCBzdGF0dXM9JXggcGRhdGFbMF09JXggcmxlbjogJXhcbiIsCisJCWNtZC0+c3RhZ2UsIHNjbWQtPnN0YXR1cywgY21kLT5wZGF0YVswXSwgc2NtZC0+cmVwbHlfbGVuKTsKKworCS8qIENoZWNrIGZvciBwb3NzaWJsZSBzdGF0dXMgKi8KKwlpZiAoc2NtZC0+c3RhdHVzIDwgMCkKKwkJZmFpbCA9IDE7CisJZWxzZSBpZiAoY21kLT5yZWFkKSB7CisJCWlmIChjbWQtPnN0YWdlID09IDApCisJCQlmYWlsID0gY21kLT5wZGF0YVswXSAhPSAwOworCQllbHNlCisJCQlmYWlsID0gY21kLT5wZGF0YVswXSA+PSAweDgwOworCX0gZWxzZSB7CisJCWZhaWwgPSBjbWQtPnBkYXRhWzBdICE9IDA7CisJfQorCisJLyogSGFuZGxlIGZhaWx1cmVzIGJ5IHJlcXVldWluZyBjb21tYW5kLCBhZnRlciA1bXMgaW50ZXJ2YWwKKwkgKi8KKwlpZiAoZmFpbCAmJiAtLWNtZC0+cmV0cmllcyA+IDApIHsKKwkJRFBSSU5USygiU01VOiBpMmMgZmFpbHVyZSwgc3RhcnRpbmcgdGltZXIuLi5cbiIpOworCQlzbXUtPmkyY190aW1lci5mdW5jdGlvbiA9IHNtdV9pMmNfcmV0cnk7CisJCXNtdS0+aTJjX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZyljbWQ7CisJCXNtdS0+aTJjX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1KTsKKwkJYWRkX3RpbWVyKCZzbXUtPmkyY190aW1lcik7CisJCXJldHVybjsKKwl9CisKKwkvKiBJZiBmYWlsdXJlIG9yIHN0YWdlIDEsIGNvbW1hbmQgaXMgY29tcGxldGUgKi8KKwlpZiAoZmFpbCB8fCBjbWQtPnN0YWdlICE9IDApIHsKKwkJc211X2kyY19jb21wbGV0ZV9jb21tYW5kKGNtZCwgZmFpbCk7CisJCXJldHVybjsKKwl9CisKKwlEUFJJTlRLKCJTTVU6IGdvaW5nIHRvIHN0YWdlIDFcbiIpOworCisJLyogT2ssIGluaXRpYWwgY29tbWFuZCBjb21wbGV0ZSwgbm93IHBvbGwgc3RhdHVzICovCisJc2NtZC0+cmVwbHlfYnVmID0gY21kLT5wZGF0YTsKKwlzY21kLT5yZXBseV9sZW4gPSAweDEwOworCXNjbWQtPmRhdGFfYnVmID0gY21kLT5wZGF0YTsKKwlzY21kLT5kYXRhX2xlbiA9IDE7CisJY21kLT5wZGF0YVswXSA9IDA7CisJY21kLT5zdGFnZSA9IDE7CisJY21kLT5yZXRyaWVzID0gMjA7CisJc211X3F1ZXVlX2NtZChzY21kKTsKK30KKworCitpbnQgc211X3F1ZXVlX2kyYyhzdHJ1Y3Qgc211X2kyY19jbWQgKmNtZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHNtdSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIEZpbGwgbW9zdCBmaWVsZHMgb2Ygc2NtZCAqLworCWNtZC0+c2NtZC5jbWQgPSBTTVVfQ01EX0kyQ19DT01NQU5EOworCWNtZC0+c2NtZC5kb25lID0gc211X2kyY19sb3dfY29tcGxldGlvbjsKKwljbWQtPnNjbWQubWlzYyA9IGNtZDsKKwljbWQtPnNjbWQucmVwbHlfYnVmID0gY21kLT5wZGF0YTsKKwljbWQtPnNjbWQucmVwbHlfbGVuID0gMHgxMDsKKwljbWQtPnNjbWQuZGF0YV9idWYgPSAodTggKikoY2hhciAqKSZjbWQtPmluZm87CisJY21kLT5zY21kLnN0YXR1cyA9IDE7CisJY21kLT5zdGFnZSA9IDA7CisJY21kLT5wZGF0YVswXSA9IDB4ZmY7CisJY21kLT5yZXRyaWVzID0gMjA7CisJY21kLT5zdGF0dXMgPSAxOworCisJLyogQ2hlY2sgdHJhbnNmZXIgdHlwZSwgc2FuaXRpemUgc29tZSAiaW5mbyIgZmllbGRzCisJICogYmFzZWQgb24gdHJhbnNmZXIgdHlwZSBhbmQgZG8gbW9yZSBjaGVja2luZworCSAqLworCWNtZC0+aW5mby5jYWRkciA9IGNtZC0+aW5mby5kZXZhZGRyOworCWNtZC0+cmVhZCA9IGNtZC0+aW5mby5kZXZhZGRyICYgMHgwMTsKKwlzd2l0Y2goY21kLT5pbmZvLnR5cGUpIHsKKwljYXNlIFNNVV9JMkNfVFJBTlNGRVJfU0lNUExFOgorCQltZW1zZXQoJmNtZC0+aW5mby5zdWJsZW4sIDAsIDQpOworCQlicmVhazsKKwljYXNlIFNNVV9JMkNfVFJBTlNGRVJfQ09NQklORUQ6CisJCWNtZC0+aW5mby5kZXZhZGRyICY9IDB4ZmU7CisJY2FzZSBTTVVfSTJDX1RSQU5TRkVSX1NURFNVQjoKKwkJaWYgKGNtZC0+aW5mby5zdWJsZW4gPiAzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEZpbmlzaCBzZXR0aW5nIHVwIGNvbW1hbmQgYmFzZWQgb24gdHJhbnNmZXIgZGlyZWN0aW9uCisJICovCisJaWYgKGNtZC0+cmVhZCkgeworCQlpZiAoY21kLT5pbmZvLmRhdGFsZW4gPiBTTVVfSTJDX1JFQURfTUFYKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW1lbXNldChjbWQtPmluZm8uZGF0YSwgMHhmZiwgY21kLT5pbmZvLmRhdGFsZW4pOworCQljbWQtPnNjbWQuZGF0YV9sZW4gPSA5OworCX0gZWxzZSB7CisJCWlmIChjbWQtPmluZm8uZGF0YWxlbiA+IFNNVV9JMkNfV1JJVEVfTUFYKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWNtZC0+c2NtZC5kYXRhX2xlbiA9IDkgKyBjbWQtPmluZm8uZGF0YWxlbjsKKwl9CisKKwlEUFJJTlRLKCJTTVU6IGkyYyBlbnF1ZXVpbmcgY29tbWFuZFxuIik7CisJRFBSSU5USygiU01VOiAgICVzLCBsZW49JWQgYnVzPSV4IGFkZHI9JXggc3ViMD0leCB0eXBlPSV4XG4iLAorCQljbWQtPnJlYWQgPyAicmVhZCIgOiAid3JpdGUiLCBjbWQtPmluZm8uZGF0YWxlbiwKKwkJY21kLT5pbmZvLmJ1cywgY21kLT5pbmZvLmNhZGRyLAorCQljbWQtPmluZm8uc3ViYWRkclswXSwgY21kLT5pbmZvLnR5cGUpOworCisKKwkvKiBFbnF1ZXVlIGNvbW1hbmQgaW4gaTJjIGxpc3QsIGFuZCBpZiBlbXB0eSwgZW5xdWV1ZSBhbHNvIGluCisJICogbWFpbiBjb21tYW5kIGxpc3QKKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmc211LT5sb2NrLCBmbGFncyk7CisJaWYgKHNtdS0+Y21kX2kyY19jdXIgPT0gTlVMTCkgeworCQlzbXUtPmNtZF9pMmNfY3VyID0gY21kOworCQlsaXN0X2FkZF90YWlsKCZjbWQtPnNjbWQubGluaywgJnNtdS0+Y21kX2xpc3QpOworCQlpZiAoc211LT5jbWRfY3VyID09IE5VTEwpCisJCQlzbXVfc3RhcnRfY21kKCk7CisJfSBlbHNlCisJCWxpc3RfYWRkX3RhaWwoJmNtZC0+bGluaywgJnNtdS0+Y21kX2kyY19saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbXUtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisKKworLyoKKyAqIFVzZXJsYW5kIGRyaXZlciBpbnRlcmZhY2UKKyAqLworCisKK3N0YXRpYyBMSVNUX0hFQUQoc211X2NsaXN0KTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soc211X2NsaXN0X2xvY2spOworCitlbnVtIHNtdV9maWxlX21vZGUgeworCXNtdV9maWxlX2NvbW1hbmRzLAorCXNtdV9maWxlX2V2ZW50cywKKwlzbXVfZmlsZV9jbG9zaW5nCit9OworCitzdHJ1Y3Qgc211X3ByaXZhdGUKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJZW51bSBzbXVfZmlsZV9tb2RlCW1vZGU7CisJaW50CQkJYnVzeTsKKwlzdHJ1Y3Qgc211X2NtZAkJY21kOworCXNwaW5sb2NrX3QJCWxvY2s7CisJd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdDsKKwl1OAkJCWJ1ZmZlcltTTVVfTUFYX0RBVEFdOworfTsKKworCitzdGF0aWMgaW50IHNtdV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBzbXVfcHJpdmF0ZSAqcHA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXBwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNtdV9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBwID09IDApCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChwcCwgMCwgc2l6ZW9mKHN0cnVjdCBzbXVfcHJpdmF0ZSkpOworCXNwaW5fbG9ja19pbml0KCZwcC0+bG9jayk7CisJcHAtPm1vZGUgPSBzbXVfZmlsZV9jb21tYW5kczsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcC0+d2FpdCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc211X2NsaXN0X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZCgmcHAtPmxpc3QsICZzbXVfY2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtdV9jbGlzdF9sb2NrLCBmbGFncyk7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gcHA7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBzbXVfdXNlcl9jbWRfZG9uZShzdHJ1Y3Qgc211X2NtZCAqY21kLCB2b2lkICptaXNjKQoreworCXN0cnVjdCBzbXVfcHJpdmF0ZSAqcHAgPSBtaXNjOworCisJd2FrZV91cF9hbGwoJnBwLT53YWl0KTsKK30KKworCitzdGF0aWMgc3NpemVfdCBzbXVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHNtdV9wcml2YXRlICpwcCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzbXVfdXNlcl9jbWRfaGRyIGhkcjsKKwlpbnQgcmMgPSAwOworCisJaWYgKHBwLT5idXN5KQorCQlyZXR1cm4gLUVCVVNZOworCWVsc2UgaWYgKGNvcHlfZnJvbV91c2VyKCZoZHIsIGJ1Ziwgc2l6ZW9mKGhkcikpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwllbHNlIGlmIChoZHIuY21kdHlwZSA9PSBTTVVfQ01EVFlQRV9XQU5UU19FVkVOVFMpIHsKKwkJcHAtPm1vZGUgPSBzbXVfZmlsZV9ldmVudHM7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoaGRyLmNtZHR5cGUgIT0gU01VX0NNRFRZUEVfU01VKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllbHNlIGlmIChwcC0+bW9kZSAhPSBzbXVfZmlsZV9jb21tYW5kcykKKwkJcmV0dXJuIC1FQkFERkQ7CisJZWxzZSBpZiAoaGRyLmRhdGFfbGVuID4gU01VX01BWF9EQVRBKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcC0+bG9jaywgZmxhZ3MpOworCWlmIChwcC0+YnVzeSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcC0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlwcC0+YnVzeSA9IDE7CisJcHAtPmNtZC5zdGF0dXMgPSAxOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBwLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoY29weV9mcm9tX3VzZXIocHAtPmJ1ZmZlciwgYnVmICsgc2l6ZW9mKGhkciksIGhkci5kYXRhX2xlbikpIHsKKwkJcHAtPmJ1c3kgPSAwOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlwcC0+Y21kLmNtZCA9IGhkci5jbWQ7CisJcHAtPmNtZC5kYXRhX2xlbiA9IGhkci5kYXRhX2xlbjsKKwlwcC0+Y21kLnJlcGx5X2xlbiA9IFNNVV9NQVhfREFUQTsKKwlwcC0+Y21kLmRhdGFfYnVmID0gcHAtPmJ1ZmZlcjsKKwlwcC0+Y21kLnJlcGx5X2J1ZiA9IHBwLT5idWZmZXI7CisJcHAtPmNtZC5kb25lID0gc211X3VzZXJfY21kX2RvbmU7CisJcHAtPmNtZC5taXNjID0gcHA7CisJcmMgPSBzbXVfcXVldWVfY21kKCZwcC0+Y21kKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisJcmV0dXJuIGNvdW50OworfQorCisKK3N0YXRpYyBzc2l6ZV90IHNtdV9yZWFkX2NvbW1hbmQoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzbXVfcHJpdmF0ZSAqcHAsCisJCQkJY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCXN0cnVjdCBzbXVfdXNlcl9yZXBseV9oZHIgaGRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHNpemUsIHJjID0gMDsKKworCWlmICghcHAtPmJ1c3kpCisJCXJldHVybiAwOworCWlmIChjb3VudCA8IHNpemVvZihzdHJ1Y3Qgc211X3VzZXJfcmVwbHlfaGRyKSkKKwkJcmV0dXJuIC1FT1ZFUkZMT1c7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBwLT5sb2NrLCBmbGFncyk7CisJaWYgKHBwLT5jbWQuc3RhdHVzID09IDEpIHsKKwkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQorCQkJcmV0dXJuIC1FQUdBSU47CisJCWFkZF93YWl0X3F1ZXVlKCZwcC0+d2FpdCwgJndhaXQpOworCQlmb3IgKDs7KSB7CisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJcmMgPSAwOworCQkJaWYgKHBwLT5jbWQuc3RhdHVzICE9IDEpCisJCQkJYnJlYWs7CisJCQlyYyA9IC1FUkVTVEFSVFNZUzsKKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCQlicmVhazsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBwLT5sb2NrLCBmbGFncyk7CisJCQlzY2hlZHVsZSgpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBwLT5sb2NrLCBmbGFncyk7CisJCX0KKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkJcmVtb3ZlX3dhaXRfcXVldWUoJnBwLT53YWl0LCAmd2FpdCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBwLT5sb2NrLCBmbGFncyk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJaWYgKHBwLT5jbWQuc3RhdHVzICE9IDApCisJCXBwLT5jbWQucmVwbHlfbGVuID0gMDsKKwlzaXplID0gc2l6ZW9mKGhkcikgKyBwcC0+Y21kLnJlcGx5X2xlbjsKKwlpZiAoY291bnQgPCBzaXplKQorCQlzaXplID0gY291bnQ7CisJcmMgPSBzaXplOworCWhkci5zdGF0dXMgPSBwcC0+Y21kLnN0YXR1czsKKwloZHIucmVwbHlfbGVuID0gcHAtPmNtZC5yZXBseV9sZW47CisJaWYgKGNvcHlfdG9fdXNlcihidWYsICZoZHIsIHNpemVvZihoZHIpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJc2l6ZSAtPSBzaXplb2YoaGRyKTsKKwlpZiAoc2l6ZSAmJiBjb3B5X3RvX3VzZXIoYnVmICsgc2l6ZW9mKGhkciksIHBwLT5idWZmZXIsIHNpemUpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlwcC0+YnVzeSA9IDA7CisKKwlyZXR1cm4gcmM7Cit9CisKKworc3RhdGljIHNzaXplX3Qgc211X3JlYWRfZXZlbnRzKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc211X3ByaXZhdGUgKnBwLAorCQkJICAgICAgIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwkvKiBOb3QgaW1wbGVtZW50ZWQgKi8KKwltc2xlZXBfaW50ZXJydXB0aWJsZSgxMDAwKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgc3NpemVfdCBzbXVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBzbXVfcHJpdmF0ZSAqcHAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpZiAocHAtPm1vZGUgPT0gc211X2ZpbGVfY29tbWFuZHMpCisJCXJldHVybiBzbXVfcmVhZF9jb21tYW5kKGZpbGUsIHBwLCBidWYsIGNvdW50KTsKKwlpZiAocHAtPm1vZGUgPT0gc211X2ZpbGVfZXZlbnRzKQorCQlyZXR1cm4gc211X3JlYWRfZXZlbnRzKGZpbGUsIHBwLCBidWYsIGNvdW50KTsKKworCXJldHVybiAtRUJBREZEOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHNtdV9mcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwlzdHJ1Y3Qgc211X3ByaXZhdGUgKnBwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCBtYXNrID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHBwID09IDApCisJCXJldHVybiAwOworCisJaWYgKHBwLT5tb2RlID09IHNtdV9maWxlX2NvbW1hbmRzKSB7CisJCXBvbGxfd2FpdChmaWxlLCAmcHAtPndhaXQsIHdhaXQpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcC0+bG9jaywgZmxhZ3MpOworCQlpZiAocHAtPmJ1c3kgJiYgcHAtPmNtZC5zdGF0dXMgIT0gMSkKKwkJCW1hc2sgfD0gUE9MTElOOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcC0+bG9jaywgZmxhZ3MpOworCX0gaWYgKHBwLT5tb2RlID09IHNtdV9maWxlX2V2ZW50cykgeworCQkvKiBOb3QgeWV0IGltcGxlbWVudGVkICovCisJfQorCXJldHVybiBtYXNrOworfQorCitzdGF0aWMgaW50IHNtdV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBzbXVfcHJpdmF0ZSAqcHAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgYnVzeTsKKworCWlmIChwcCA9PSAwKQorCQlyZXR1cm4gMDsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisKKwkvKiBNYXJrIGZpbGUgYXMgY2xvc2luZyB0byBhdm9pZCByYWNlcyB3aXRoIG5ldyByZXF1ZXN0ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBwLT5sb2NrLCBmbGFncyk7CisJcHAtPm1vZGUgPSBzbXVfZmlsZV9jbG9zaW5nOworCWJ1c3kgPSBwcC0+YnVzeTsKKworCS8qIFdhaXQgZm9yIGFueSBwZW5kaW5nIHJlcXVlc3QgdG8gY29tcGxldGUgKi8KKwlpZiAoYnVzeSAmJiBwcC0+Y21kLnN0YXR1cyA9PSAxKSB7CisJCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCisJCWFkZF93YWl0X3F1ZXVlKCZwcC0+d2FpdCwgJndhaXQpOworCQlmb3IgKDs7KSB7CisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCQlpZiAocHAtPmNtZC5zdGF0dXMgIT0gMSkKKwkJCQlicmVhazsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcC0+bG9jaywgZmxhZ3MpOworCQkJc2NoZWR1bGUoKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBwLT5sb2NrLCBmbGFncyk7CisJCX0KKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkJcmVtb3ZlX3dhaXRfcXVldWUoJnBwLT53YWl0LCAmd2FpdCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBwLT5sb2NrLCBmbGFncyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc211X2NsaXN0X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmcHAtPmxpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtdV9jbGlzdF9sb2NrLCBmbGFncyk7CisJa2ZyZWUocHApOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc211X2RldmljZV9mb3BzIF9fcG1hY2RhdGEgPSB7CisJLmxsc2VlawkJPSBub19sbHNlZWssCisJLnJlYWQJCT0gc211X3JlYWQsCisJLndyaXRlCQk9IHNtdV93cml0ZSwKKwkucG9sbAkJPSBzbXVfZnBvbGwsCisJLm9wZW4JCT0gc211X29wZW4sCisJLnJlbGVhc2UJPSBzbXVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBwbXVfZGV2aWNlIF9fcG1hY2RhdGEgPSB7CisJTUlTQ19EWU5BTUlDX01JTk9SLCAic211IiwgJnNtdV9kZXZpY2VfZm9wcworfTsKKworc3RhdGljIGludCBzbXVfZGV2aWNlX2luaXQodm9pZCkKK3sKKwlpZiAoIXNtdSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKG1pc2NfcmVnaXN0ZXIoJnBtdV9kZXZpY2UpIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJ2aWEtcG11OiBjYW5ub3QgcmVnaXN0ZXIgbWlzYyBkZXZpY2UuXG4iKTsKKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbChzbXVfZGV2aWNlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jCmluZGV4IGM5Y2ExMTEuLmYzODY5NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYworKysgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMKQEAgLTU5OSw3ICs1OTksNyBAQAogCQlzZW5zb3JfbG9jYXRpb25bMl0gPSAiPyI7CiAJfQogCi0Jb2ZfZGV2ID0gb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShucCwgInRlbXBlcmF0dXJlcyIpOworCW9mX2RldiA9IG9mX3BsYXRmb3JtX2RldmljZV9jcmVhdGUobnAsICJ0ZW1wZXJhdHVyZXMiLCBOVUxMKTsKIAkKIAlpZiAob2ZfZGV2ID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCByZWdpc3RlciB0ZW1wZXJhdHVyZXMgZGV2aWNlICFcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5jCmluZGV4IDcwM2UzMTk3Li5jYzUwN2NlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5jCkBAIC0yMDUxLDcgKzIwNTEsNyBAQAogCQkJICAgIHJldHVybiAtRU5PREVWOwogCQl9CiAJfQotCW9mX2RldiA9IG9mX3BsYXRmb3JtX2RldmljZV9jcmVhdGUobnAsICJ0ZW1wZXJhdHVyZSIpOworCW9mX2RldiA9IG9mX3BsYXRmb3JtX2RldmljZV9jcmVhdGUobnAsICJ0ZW1wZXJhdHVyZSIsIE5VTEwpOwogCWlmIChvZl9kZXYgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IHJlZ2lzdGVyIEZDVSBwbGF0Zm9ybSBkZXZpY2UgIVxuIik7CiAJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fd2luZHR1bm5lbC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fd2luZHR1bm5lbC5jCmluZGV4IGNiYjcyZWIuLjZhYWExZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3dpbmR0dW5uZWwuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV93aW5kdHVubmVsLmMKQEAgLTUwNCw3ICs1MDQsNyBAQAogCX0KIAlpZiggIShucD1vZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAiZmFuIikpICkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JeC5vZl9kZXYgPSBvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKCBucCwgInRlbXBlcmF0dXJlIiApOworCXgub2ZfZGV2ID0gb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShucCwgInRlbXBlcmF0dXJlIiwgTlVMTCk7CiAJb2Zfbm9kZV9wdXQoIG5wICk7CiAKIAlpZiggIXgub2ZfZGV2ICkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1jcnlwdC5jIGIvZHJpdmVycy9tZC9kbS1jcnlwdC5jCmluZGV4IGI4MmJjMzEuLmI2MTQ4ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tY3J5cHQuYworKysgYi9kcml2ZXJzL21kL2RtLWNyeXB0LmMKQEAgLTk2LDcgKzk2LDcgQEAKIC8qCiAgKiBNZW1wb29sIGFsbG9jIGFuZCBmcmVlIGZ1bmN0aW9ucyBmb3IgdGhlIHBhZ2UKICAqLwotc3RhdGljIHZvaWQgKm1lbXBvb2xfYWxsb2NfcGFnZSh1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX21hc2ssIHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCAqbWVtcG9vbF9hbGxvY19wYWdlKGdmcF90IGdmcF9tYXNrLCB2b2lkICpkYXRhKQogewogCXJldHVybiBhbGxvY19wYWdlKGdmcF9tYXNrKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0taW8uYyBiL2RyaXZlcnMvbWQvZG0taW8uYwppbmRleCA5ZGUwMDAxLi40ODA5YjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWlvLmMKKysrIGIvZHJpdmVycy9tZC9kbS1pby5jCkBAIC0zMiw3ICszMiw3IEBACiBzdGF0aWMgdW5zaWduZWQgX251bV9pb3M7CiBzdGF0aWMgbWVtcG9vbF90ICpfaW9fcG9vbDsKIAotc3RhdGljIHZvaWQgKmFsbG9jX2lvKHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaywgdm9pZCAqcG9vbF9kYXRhKQorc3RhdGljIHZvaWQgKmFsbG9jX2lvKGdmcF90IGdmcF9tYXNrLCB2b2lkICpwb29sX2RhdGEpCiB7CiAJcmV0dXJuIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbyksIGdmcF9tYXNrKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0taW9jdGwuYyBiL2RyaXZlcnMvbWQvZG0taW9jdGwuYwppbmRleCAyMDBhMDY4Li41NGVjNzM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZC9kbS1pb2N0bC5jCkBAIC0yMzAsMTEgKzIzMCwyMCBAQAogCiBzdGF0aWMgdm9pZCBfX2hhc2hfcmVtb3ZlKHN0cnVjdCBoYXNoX2NlbGwgKmhjKQogeworCXN0cnVjdCBkbV90YWJsZSAqdGFibGU7CisKIAkvKiByZW1vdmUgZnJvbSB0aGUgZGV2IGhhc2ggKi8KIAlsaXN0X2RlbCgmaGMtPnV1aWRfbGlzdCk7CiAJbGlzdF9kZWwoJmhjLT5uYW1lX2xpc3QpOwogCXVucmVnaXN0ZXJfd2l0aF9kZXZmcyhoYyk7CiAJZG1fc2V0X21kcHRyKGhjLT5tZCwgTlVMTCk7CisKKwl0YWJsZSA9IGRtX2dldF90YWJsZShoYy0+bWQpOworCWlmICh0YWJsZSkgeworCQlkbV90YWJsZV9ldmVudCh0YWJsZSk7CisJCWRtX3RhYmxlX3B1dCh0YWJsZSk7CisJfQorCiAJZG1fcHV0KGhjLT5tZCk7CiAJaWYgKGhjLT5uZXdfbWFwKQogCQlkbV90YWJsZV9wdXQoaGMtPm5ld19tYXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1tcGF0aC5jIGIvZHJpdmVycy9tZC9kbS1tcGF0aC5jCmluZGV4IDc4NTgwNmIuLmY5YjdiMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tbXBhdGguYworKysgYi9kcml2ZXJzL21kL2RtLW1wYXRoLmMKQEAgLTMyOSwxMyArMzI5LDE3IEBACiAvKgogICogSWYgd2UgcnVuIG91dCBvZiB1c2FibGUgcGF0aHMsIHNob3VsZCB3ZSBxdWV1ZSBJL08gb3IgZXJyb3IgaXQ/CiAgKi8KLXN0YXRpYyBpbnQgcXVldWVfaWZfbm9fcGF0aChzdHJ1Y3QgbXVsdGlwYXRoICptLCB1bnNpZ25lZCBxdWV1ZV9pZl9ub19wYXRoKQorc3RhdGljIGludCBxdWV1ZV9pZl9ub19wYXRoKHN0cnVjdCBtdWx0aXBhdGggKm0sIHVuc2lnbmVkIHF1ZXVlX2lmX25vX3BhdGgsCisJCQkgICAgdW5zaWduZWQgc2F2ZV9vbGRfdmFsdWUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtLT5sb2NrLCBmbGFncyk7CiAKLQltLT5zYXZlZF9xdWV1ZV9pZl9ub19wYXRoID0gbS0+cXVldWVfaWZfbm9fcGF0aDsKKwlpZiAoc2F2ZV9vbGRfdmFsdWUpCisJCW0tPnNhdmVkX3F1ZXVlX2lmX25vX3BhdGggPSBtLT5xdWV1ZV9pZl9ub19wYXRoOworCWVsc2UKKwkJbS0+c2F2ZWRfcXVldWVfaWZfbm9fcGF0aCA9IHF1ZXVlX2lmX25vX3BhdGg7CiAJbS0+cXVldWVfaWZfbm9fcGF0aCA9IHF1ZXVlX2lmX25vX3BhdGg7CiAJaWYgKCFtLT5xdWV1ZV9pZl9ub19wYXRoICYmIG0tPnF1ZXVlX3NpemUpCiAJCXF1ZXVlX3dvcmsoa211bHRpcGF0aGQsICZtLT5wcm9jZXNzX3F1ZXVlZF9pb3MpOwpAQCAtNjc3LDcgKzY4MSw3IEBACiAJCXJldHVybiAwOwogCiAJaWYgKCFzdHJuaWNtcChzaGlmdChhcyksIE1FU0dfU1RSKCJxdWV1ZV9pZl9ub19wYXRoIikpKQotCQlyZXR1cm4gcXVldWVfaWZfbm9fcGF0aChtLCAxKTsKKwkJcmV0dXJuIHF1ZXVlX2lmX25vX3BhdGgobSwgMSwgMCk7CiAJZWxzZSB7CiAJCXRpLT5lcnJvciA9ICJVbnJlY29nbmlzZWQgbXVsdGlwYXRoIGZlYXR1cmUgcmVxdWVzdCI7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTA3Nyw3ICsxMDgxLDcgQEAKIHsKIAlzdHJ1Y3QgbXVsdGlwYXRoICptID0gKHN0cnVjdCBtdWx0aXBhdGggKikgdGktPnByaXZhdGU7CiAKLQlxdWV1ZV9pZl9ub19wYXRoKG0sIDApOworCXF1ZXVlX2lmX25vX3BhdGgobSwgMCwgMSk7CiB9CiAKIC8qCkBAIC0xMjIyLDkgKzEyMjYsOSBAQAogCiAJaWYgKGFyZ2MgPT0gMSkgewogCQlpZiAoIXN0cm5pY21wKGFyZ3ZbMF0sIE1FU0dfU1RSKCJxdWV1ZV9pZl9ub19wYXRoIikpKQotCQkJcmV0dXJuIHF1ZXVlX2lmX25vX3BhdGgobSwgMSk7CisJCQlyZXR1cm4gcXVldWVfaWZfbm9fcGF0aChtLCAxLCAwKTsKIAkJZWxzZSBpZiAoIXN0cm5pY21wKGFyZ3ZbMF0sIE1FU0dfU1RSKCJmYWlsX2lmX25vX3BhdGgiKSkpCi0JCQlyZXR1cm4gcXVldWVfaWZfbm9fcGF0aChtLCAwKTsKKwkJCXJldHVybiBxdWV1ZV9pZl9ub19wYXRoKG0sIDAsIDApOwogCX0KIAogCWlmIChhcmdjICE9IDIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXJhaWQxLmMgYi9kcml2ZXJzL21kL2RtLXJhaWQxLmMKaW5kZXggODYzMjgyNS4uMjM3NTcwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1yYWlkMS5jCisrKyBiL2RyaXZlcnMvbWQvZG0tcmFpZDEuYwpAQCAtMTIyLDcgKzEyMiw3IEBACiAvKiBGSVhNRSBtb3ZlIHRoaXMgKi8KIHN0YXRpYyB2b2lkIHF1ZXVlX2JpbyhzdHJ1Y3QgbWlycm9yX3NldCAqbXMsIHN0cnVjdCBiaW8gKmJpbywgaW50IHJ3KTsKIAotc3RhdGljIHZvaWQgKnJlZ2lvbl9hbGxvYyh1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX21hc2ssIHZvaWQgKnBvb2xfZGF0YSkKK3N0YXRpYyB2b2lkICpyZWdpb25fYWxsb2MoZ2ZwX3QgZ2ZwX21hc2ssIHZvaWQgKnBvb2xfZGF0YSkKIHsKIAlyZXR1cm4ga21hbGxvYyhzaXplb2Yoc3RydWN0IHJlZ2lvbiksIGdmcF9tYXNrKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuYwppbmRleCAyODk3ZGY5Li4yYThhNTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmMKKysrIGIvZHJpdmVycy9tZC9tZC5jCkBAIC0zMDYzLDYgKzMwNjMsNyBAQAogCSAqIG1hbnkgZGlydHkgUkFJRDUgYmxvY2tzLgogCSAqLwogCisJYWxsb3dfc2lnbmFsKFNJR0tJTEwpOwogCWNvbXBsZXRlKHRocmVhZC0+ZXZlbnQpOwogCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiAJCXZvaWQgKCpydW4pKG1kZGV2X3QgKik7CkBAIC0zMTExLDcgKzMxMTIsNyBAQAogCXRocmVhZC0+bWRkZXYgPSBtZGRldjsKIAl0aHJlYWQtPm5hbWUgPSBuYW1lOwogCXRocmVhZC0+dGltZW91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOwotCXRocmVhZC0+dHNrID0ga3RocmVhZF9ydW4obWRfdGhyZWFkLCB0aHJlYWQsIG1kbmFtZSh0aHJlYWQtPm1kZGV2KSk7CisJdGhyZWFkLT50c2sgPSBrdGhyZWFkX3J1bihtZF90aHJlYWQsIHRocmVhZCwgbmFtZSwgbWRuYW1lKHRocmVhZC0+bWRkZXYpKTsKIAlpZiAoSVNfRVJSKHRocmVhZC0+dHNrKSkgewogCQlrZnJlZSh0aHJlYWQpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTM1NjcsOCArMzU2OCwxMCBAQAogCQltZGRldi0+Y3Vycl9yZXN5bmMgPSAyOwogCiAJdHJ5X2FnYWluOgotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpIHx8CisJCSAgICBrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKIAkJCWZsdXNoX3NpZ25hbHMoY3VycmVudCk7CisJCQlzZXRfYml0KE1EX1JFQ09WRVJZX0lOVFIsICZtZGRldi0+cmVjb3ZlcnkpOwogCQkJZ290byBza2lwOwogCQl9CiAJCUlURVJBVEVfTURERVYobWRkZXYyLHRtcCkgewpAQCAtMzU4OCw4ICszNTkxLDkgQEAKIAkJCQkJICovCiAJCQkJCWNvbnRpbnVlOwogCQkJCXByZXBhcmVfdG9fd2FpdCgmcmVzeW5jX3dhaXQsICZ3cSwgVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJCQlpZiAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpCi0JCQkJICAgICYmIG1kZGV2Mi0+Y3Vycl9yZXN5bmMgPj0gbWRkZXYtPmN1cnJfcmVzeW5jKSB7CisJCQkJaWYgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSAmJgorCQkJCSAgICAha3RocmVhZF9zaG91bGRfc3RvcCgpICYmCisJCQkJICAgIG1kZGV2Mi0+Y3Vycl9yZXN5bmMgPj0gbWRkZXYtPmN1cnJfcmVzeW5jKSB7CiAJCQkJCXByaW50ayhLRVJOX0lORk8gIm1kOiBkZWxheWluZyByZXN5bmMgb2YgJXMiCiAJCQkJCSAgICAgICAiIHVudGlsICVzIGhhcyBmaW5pc2hlZCByZXN5bmMgKHRoZXkiCiAJCQkJCSAgICAgICAiIHNoYXJlIG9uZSBvciBtb3JlIHBoeXNpY2FsIHVuaXRzKVxuIiwKQEAgLTM2OTUsNyArMzY5OSw3IEBACiAJCX0KIAogCi0JCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgfHwga3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiAJCQkvKgogCQkJICogZ290IGEgc2lnbmFsLCBleGl0LgogCQkJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL211bHRpcGF0aC5jIGIvZHJpdmVycy9tZC9tdWx0aXBhdGguYwppbmRleCAyODYzNDIzLi4xMTUxYzNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL211bHRpcGF0aC5jCisrKyBiL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKQEAgLTM4LDcgKzM4LDcgQEAKIHN0YXRpYyBtZGtfcGVyc29uYWxpdHlfdCBtdWx0aXBhdGhfcGVyc29uYWxpdHk7CiAKIAotc3RhdGljIHZvaWQgKm1wX3Bvb2xfYWxsb2ModW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9mbGFncywgdm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkICptcF9wb29sX2FsbG9jKGdmcF90IGdmcF9mbGFncywgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgbXVsdGlwYXRoX2JoICptcGI7CiAJbXBiID0ga21hbGxvYyhzaXplb2YoKm1wYiksIGdmcF9mbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxLmMgYi9kcml2ZXJzL21kL3JhaWQxLmMKaW5kZXggYTkzY2E0Ny4uMGUxZjE0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEuYwpAQCAtNTIsNyArNTIsNyBAQAogc3RhdGljIHZvaWQgdW5wbHVnX3NsYXZlcyhtZGRldl90ICptZGRldik7CiAKIAotc3RhdGljIHZvaWQgKiByMWJpb19wb29sX2FsbG9jKHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfZmxhZ3MsIHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCAqIHIxYmlvX3Bvb2xfYWxsb2MoZ2ZwX3QgZ2ZwX2ZsYWdzLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBwb29sX2luZm8gKnBpID0gZGF0YTsKIAlyMWJpb190ICpyMV9iaW87CkBAIC03OSw3ICs3OSw3IEBACiAjZGVmaW5lIFJFU1lOQ19QQUdFUyAoKFJFU1lOQ19CTE9DS19TSVpFICsgUEFHRV9TSVpFLTEpIC8gUEFHRV9TSVpFKQogI2RlZmluZSBSRVNZTkNfV0lORE9XICgyMDQ4KjEwMjQpCiAKLXN0YXRpYyB2b2lkICogcjFidWZfcG9vbF9hbGxvYyh1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX2ZsYWdzLCB2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgKiByMWJ1Zl9wb29sX2FsbG9jKGdmcF90IGdmcF9mbGFncywgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgcG9vbF9pbmZvICpwaSA9IGRhdGE7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuYwppbmRleCA1YmQxZTllLi4yOGRkMDI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogc3RhdGljIHZvaWQgdW5wbHVnX3NsYXZlcyhtZGRldl90ICptZGRldik7CiAKLXN0YXRpYyB2b2lkICogcjEwYmlvX3Bvb2xfYWxsb2ModW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9mbGFncywgdm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkICogcjEwYmlvX3Bvb2xfYWxsb2MoZ2ZwX3QgZ2ZwX2ZsYWdzLCB2b2lkICpkYXRhKQogewogCWNvbmZfdCAqY29uZiA9IGRhdGE7CiAJcjEwYmlvX3QgKnIxMF9iaW87CkBAIC04MSw3ICs4MSw3IEBACiAgKiBvbmUgZm9yIHdyaXRlICh3ZSByZWNvdmVyIG9ubHkgb25lIGRyaXZlIHBlciByMTBidWYpCiAgKgogICovCi1zdGF0aWMgdm9pZCAqIHIxMGJ1Zl9wb29sX2FsbG9jKHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfZmxhZ3MsIHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCAqIHIxMGJ1Zl9wb29sX2FsbG9jKGdmcF90IGdmcF9mbGFncywgdm9pZCAqZGF0YSkKIHsKIAljb25mX3QgKmNvbmYgPSBkYXRhOwogCXN0cnVjdCBwYWdlICpwYWdlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNi5oIGIvZHJpdmVycy9tZC9yYWlkNi5oCmluZGV4IGY4MGVlNjMuLjMxY2JlZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDYuaAorKysgYi9kcml2ZXJzL21kL3JhaWQ2LmgKQEAgLTY5LDkgKzY5LDEzIEBACiAjZGVmaW5lIF9faW5pdAogI2RlZmluZSBfX2V4aXQKICNkZWZpbmUgX19hdHRyaWJ1dGVfY29uc3RfXyBfX2F0dHJpYnV0ZV9fKChjb25zdCkpCisjZGVmaW5lIG5vaW5saW5lIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKIAogI2RlZmluZSBwcmVlbXB0X2VuYWJsZSgpCiAjZGVmaW5lIHByZWVtcHRfZGlzYWJsZSgpCisjZGVmaW5lIGNwdV9oYXNfZmVhdHVyZSh4KSAxCisjZGVmaW5lIGVuYWJsZV9rZXJuZWxfYWx0aXZlYygpCisjZGVmaW5lIGRpc2FibGVfa2VybmVsX2FsdGl2ZWMoKQogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2YWxnb3MuYyBiL2RyaXZlcnMvbWQvcmFpZDZhbGdvcy5jCmluZGV4IGFjZjM4NmYuLjUxYzYzYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDZhbGdvcy5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDZhbGdvcy5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSAicmFpZDYuaCIKICNpZm5kZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KICNlbmRpZgogCiBzdHJ1Y3QgcmFpZDZfY2FsbHMgcmFpZDZfY2FsbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDZhbHRpdmVjLnVjIGIvZHJpdmVycy9tZC9yYWlkNmFsdGl2ZWMudWMKaW5kZXggMWRlOGYwMy4uYjlhZmQzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNmFsdGl2ZWMudWMKKysrIGIvZHJpdmVycy9tZC9yYWlkNmFsdGl2ZWMudWMKQEAgLTI3LDE2ICsyNywyMCBAQAogI2lmZGVmIENPTkZJR19BTFRJVkVDCiAKICNpbmNsdWRlIDxhbHRpdmVjLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgorI2lmZGVmIF9fS0VSTkVMX18KKyMgaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorIyBpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KKyNlbmRpZgogCiAvKgotICogVGhpcyBpcyB0aGUgQyBkYXRhIHR5cGUgdG8gdXNlCisgKiBUaGlzIGlzIHRoZSBDIGRhdGEgdHlwZSB0byB1c2UuICBXZSB1c2UgYSB2ZWN0b3Igb2YKKyAqIHNpZ25lZCBjaGFyIHNvIHZlY19jbXBndCgpIHdpbGwgZ2VuZXJhdGUgdGhlIHJpZ2h0CisgKiBpbnN0cnVjdGlvbi4KICAqLwogCi10eXBlZGVmIHZlY3RvciB1bnNpZ25lZCBjaGFyIHVuYXRpdmVfdDsKK3R5cGVkZWYgdmVjdG9yIHNpZ25lZCBjaGFyIHVuYXRpdmVfdDsKIAotI2RlZmluZSBOQllURVMoeCkgKCh2ZWN0b3IgdW5zaWduZWQgY2hhcikge3gseCx4LHgsIHgseCx4LHgsIHgseCx4LHgsIHgseCx4LHh9KQorI2RlZmluZSBOQllURVMoeCkgKCh2ZWN0b3Igc2lnbmVkIGNoYXIpIHt4LHgseCx4LCB4LHgseCx4LCB4LHgseCx4LCB4LHgseCx4fSkKICNkZWZpbmUgTlNJWkUJc2l6ZW9mKHVuYXRpdmVfdCkKIAogLyoKQEAgLTEwOCw3ICsxMTIsMTEgQEAKIGludCByYWlkNl9oYXZlX2FsdGl2ZWModm9pZCkKIHsKIAkvKiBUaGlzIGFzc3VtZXMgZWl0aGVyIGFsbCBDUFVzIGhhdmUgQWx0aXZlYyBvciBub25lIGRvZXMgKi8KKyMgaWZkZWYgX19LRVJORUxfXwogCXJldHVybiBjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9BTFRJVkVDKTsKKyMgZWxzZQorCXJldHVybiAxOworIyBlbmRpZgogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDZ0ZXN0L01ha2VmaWxlIGIvZHJpdmVycy9tZC9yYWlkNnRlc3QvTWFrZWZpbGUKaW5kZXggNTU3ODA2Ny4uNzhlMDM5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNnRlc3QvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZC9yYWlkNnRlc3QvTWFrZWZpbGUKQEAgLTgsNiArOCw4IEBACiBDRkxBR1MJID0gLUkuLiAtZyAkKE9QVEZMQUdTKQogTEQJID0gbGQKIFBFUkwJID0gcGVybAorQVIJID0gYXIKK1JBTkxJQgkgPSByYW5saWIKIAogLmMubzoKIAkkKENDKSAkKENGTEFHUykgLWMgLW8gJEAgJDwKQEAgLTE4LDE4ICsyMCwzMyBAQAogJS51YzogLi4vJS51YwogCWNwIC1mICQ8ICRACiAKLWFsbDoJcmFpZDYubyByYWlkNnRlc3QKK2FsbDoJcmFpZDYuYSByYWlkNnRlc3QKIAotcmFpZDYubzogcmFpZDZpbnQxLm8gcmFpZDZpbnQyLm8gcmFpZDZpbnQ0Lm8gcmFpZDZpbnQ4Lm8gcmFpZDZpbnQxNi5vIFwKK3JhaWQ2LmE6IHJhaWQ2aW50MS5vIHJhaWQ2aW50Mi5vIHJhaWQ2aW50NC5vIHJhaWQ2aW50OC5vIHJhaWQ2aW50MTYubyBcCiAJIHJhaWQ2aW50MzIubyBcCiAJIHJhaWQ2bW14Lm8gcmFpZDZzc2UxLm8gcmFpZDZzc2UyLm8gXAorCSByYWlkNmFsdGl2ZWMxLm8gcmFpZDZhbHRpdmVjMi5vIHJhaWQ2YWx0aXZlYzQubyByYWlkNmFsdGl2ZWM4Lm8gXAogCSByYWlkNnJlY292Lm8gcmFpZDZhbGdvcy5vIFwKIAkgcmFpZDZ0YWJsZXMubwotCSQoTEQpIC1yIC1vICRAICReCisJIHJtIC1mICRACisJICQoQVIpIGNxICRAICReCisJICQoUkFOTElCKSAkQAogCi1yYWlkNnRlc3Q6IHJhaWQ2Lm8gdGVzdC5jCityYWlkNnRlc3Q6IHRlc3QuYyByYWlkNi5hCiAJJChDQykgJChDRkxBR1MpIC1vIHJhaWQ2dGVzdCAkXgogCityYWlkNmFsdGl2ZWMxLmM6IHJhaWQ2YWx0aXZlYy51YyAuLi91bnJvbGwucGwKKwkkKFBFUkwpIC4uL3Vucm9sbC5wbCAxIDwgcmFpZDZhbHRpdmVjLnVjID4gJEAKKworcmFpZDZhbHRpdmVjMi5jOiByYWlkNmFsdGl2ZWMudWMgLi4vdW5yb2xsLnBsCisJJChQRVJMKSAuLi91bnJvbGwucGwgMiA8IHJhaWQ2YWx0aXZlYy51YyA+ICRACisKK3JhaWQ2YWx0aXZlYzQuYzogcmFpZDZhbHRpdmVjLnVjIC4uL3Vucm9sbC5wbAorCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDQgPCByYWlkNmFsdGl2ZWMudWMgPiAkQAorCityYWlkNmFsdGl2ZWM4LmM6IHJhaWQ2YWx0aXZlYy51YyAuLi91bnJvbGwucGwKKwkkKFBFUkwpIC4uL3Vucm9sbC5wbCA4IDwgcmFpZDZhbHRpdmVjLnVjID4gJEAKKwogcmFpZDZpbnQxLmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5wbAogCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDEgPCByYWlkNmludC51YyA+ICRACiAKQEAgLTUyLDcgKzY5LDcgQEAKIAkuL21rdGFibGVzID4gcmFpZDZ0YWJsZXMuYwogCiBjbGVhbjoKLQlybSAtZiAqLm8gbWt0YWJsZXMgbWt0YWJsZXMuYyByYWlkNmludC51YyByYWlkNiouYyByYWlkNnRlc3QKKwlybSAtZiAqLm8gKi5hIG1rdGFibGVzIG1rdGFibGVzLmMgcmFpZDZpbnQudWMgcmFpZDYqLmMgcmFpZDZ0ZXN0CiAKIHNwb3RsZXNzOiBjbGVhbgogCXJtIC1mICp+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwMjEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDAyMS5jCmluZGV4IDg3ZDVmNGQuLmVhZjEzMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDAyMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDAyMS5jCkBAIC0xMDAsOCArMTAwLDggQEAKIAogCXJldCA9IGkyY190cmFuc2ZlciAoc3RhdGUtPmkyYywgbXNnLCAyKTsKIAlpZiAocmV0ICE9IDIpCi0JCXByaW50aygiRFZCOiBUREExMDAyMSglZCk6ICVzOiByZWFkcmVnIGVycm9yIChyZXQgPT0gJWkpXG4iLAotCQkJCXN0YXRlLT5mcm9udGVuZC5kdmItPm51bSwgX19GVU5DVElPTl9fLCByZXQpOworCQlwcmludGsoIkRWQjogVERBMTAwMjE6ICVzOiByZWFkcmVnIGVycm9yIChyZXQgPT0gJWkpXG4iLAorCQkJCV9fRlVOQ1RJT05fXywgcmV0KTsKIAlyZXR1cm4gYjFbMF07CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYwppbmRleCAwMjI5MTNkLi45YjA0MDYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWNhZGV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jCkBAIC01NDMsNyArNTQzLDcgQEAKIAogCWZvcihpPTA7aTw4O2krKykgewogCSAgICAgICAgaW89aW92YWxzW2ldOwotCSAgICAgICAgaWYocmVxdWVzdF9yZWdpb24oaW8sMiwgImNhZGV0LXByb2JlIik+PTApIHsKKwkJaWYgKHJlcXVlc3RfcmVnaW9uKGlvLCAyLCAiY2FkZXQtcHJvYmUiKSkgewogCQkgICAgICAgIGNhZGV0X3NldGZyZXEoMTQxMCk7CiAJCQlpZihjYWRldF9nZXRmcmVxKCk9PTE0MTApIHsKIAkJCQlyZWxlYXNlX3JlZ2lvbihpbywgMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKaW5kZXggOTM1NzAzNS4uYmJiOTg5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwpAQCAtMjYyLDcgKzI2Miw2IEBACiAJZGVwZW5kcyBvbiBWSURFT19TQUE3MTM0ICYmIERWQl9DT1JFCiAJc2VsZWN0IFZJREVPX0JVRl9EVkIKIAlzZWxlY3QgRFZCX01UMzUyCi0Jc2VsZWN0IERWQl9DWDIyNzAyCiAJc2VsZWN0IERWQl9UREExMDA0WAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBEVkIgY2FyZHMgYmFzZWQgb24gdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1jYXJkcy5jCmluZGV4IDE5MDk3N2EuLjA4ODFhMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1jYXJkcy5jCkBAIC0yMzkzLDEyICsyMzkzLDEyIEBACiAJLnR1bmVyICAgICAgICAgID0gMCwKIAkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9MR19URFZTX0gwNjJGLAogCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkudmlkZW9faW5wdXRzICAgPSAyLAorCS52aWRlb19pbnB1dHMgICA9IDMsCiAJLmF1ZGlvX2lucHV0cyAgID0gMSwKIAkuc3ZocyAgICAgICAgICAgPSAyLAotCS5tdXhzZWwJCT0geyAyLCAzIH0sCisJLm11eHNlbAkJPSB7IDIsIDMsIDEgfSwKIAkuZ3Bpb21hc2sgICAgICAgPSAweDAwZTAwMDA3LAotCS5hdWRpb211eCAgICAgICA9IHsgMHgwMDQwMDAwNSwgMCwgMCwgMCwgMCwgMCB9LAorCS5hdWRpb211eCAgICAgICA9IHsgMHgwMDQwMDAwNSwgMCwgMHgwMDAwMDAwMSwgMCwgMHgwMGMwMDAwNywgMCB9LAogCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkubm9fdGRhNzQzMiAgICAgPSAxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWRyaXZlci5jCmluZGV4IGE1NjQzMjEuLmMwNjJhMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtZHJpdmVyLmMKQEAgLTc2MywyMSArNzYzLDIxIEBACiAgICAgICAgICAgICAgICAgLyogbm8gUExMIG5lZWRlZCAqLwogICAgICAgICAgICAgICAgIGlmIChidHYtPnBsbC5wbGxfY3VycmVudCA9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQl2cHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiBQTEwgY2FuIHNsZWVwLCB1c2luZyBYVEFMICglZCkuXG4iLAotCQkJYnR2LT5jLm5yLGJ0di0+cGxsLnBsbF9pZnJlcSk7CisJCWJ0dHZfcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiBQTEwgY2FuIHNsZWVwLCB1c2luZyBYVEFMICglZCkuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYnR2LT5jLm5yLGJ0di0+cGxsLnBsbF9pZnJlcSk7CiAgICAgICAgICAgICAgICAgYnR3cml0ZSgweDAwLEJUODQ4X1RHQ1RSTCk7CiAgICAgICAgICAgICAgICAgYnR3cml0ZSgweDAwLEJUODQ4X1BMTF9YQ0kpOwogICAgICAgICAgICAgICAgIGJ0di0+cGxsLnBsbF9jdXJyZW50ID0gMDsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotCXZwcmludGsoS0VSTl9JTkZPICJidHR2JWQ6IFBMTDogJWQgPT4gJWQgIixidHYtPmMubnIsCi0JCWJ0di0+cGxsLnBsbF9pZnJlcSwgYnR2LT5wbGwucGxsX29mcmVxKTsKKwlidHR2X3ByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogUExMOiAlZCA9PiAlZCAiLGJ0di0+Yy5uciwKKyAgICAgICAgICAgICAgICAgICBidHYtPnBsbC5wbGxfaWZyZXEsIGJ0di0+cGxsLnBsbF9vZnJlcSk7CiAJc2V0X3BsbF9mcmVxKGJ0diwgYnR2LT5wbGwucGxsX2lmcmVxLCBidHYtPnBsbC5wbGxfb2ZyZXEpOwogCiAgICAgICAgIGZvciAoaT0wOyBpPDEwOyBpKyspIHsKIAkJLyogIExldCBvdGhlciBwZW9wbGUgcnVuIHdoaWxlIHRoZSBQTEwgc3RhYmlsaXplcyAqLwotCQl2cHJpbnRrKCIuIik7CisJCWJ0dHZfcHJpbnRrKCIuIik7CiAJCW1zbGVlcCgxMCk7CiAKICAgICAgICAgICAgICAgICBpZiAoYnRyZWFkKEJUODQ4X0RTVEFUVVMpICYgQlQ4NDhfRFNUQVRVU19QTE9DSykgewpAQCAtNzg1LDEyICs3ODUsMTIgQEAKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgYnR3cml0ZSgweDA4LEJUODQ4X1RHQ1RSTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBidHYtPnBsbC5wbGxfY3VycmVudCA9IGJ0di0+cGxsLnBsbF9vZnJlcTsKLQkJCXZwcmludGsoIiBva1xuIik7CisJCQlidHR2X3ByaW50aygiIG9rXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgYnR2LT5wbGwucGxsX2N1cnJlbnQgPSAtMTsKLQl2cHJpbnRrKCJmYWlsZWRcbiIpOworCWJ0dHZfcHJpbnRrKCJmYWlsZWRcbiIpOwogICAgICAgICByZXR1cm47CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0dnAuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0dnAuaAppbmRleCA5YjBiN2NhLi43YTMxMmY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHZwLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idHR2cC5oCkBAIC0yMjEsNyArMjIxLDcgQEAKIGV4dGVybiBpbnQgaW5pdF9idHR2X2kyYyhzdHJ1Y3QgYnR0diAqYnR2KTsKIGV4dGVybiBpbnQgZmluaV9idHR2X2kyYyhzdHJ1Y3QgYnR0diAqYnR2KTsKIAotI2RlZmluZSB2cHJpbnRrICBpZiAoYnR0dl92ZXJib3NlKSBwcmludGsKKyNkZWZpbmUgYnR0dl9wcmludGsgaWYgKGJ0dHZfdmVyYm9zZSkgcHJpbnRrCiAjZGVmaW5lIGRwcmludGsgIGlmIChidHR2X2RlYnVnID49IDEpIHByaW50awogI2RlZmluZSBkMnByaW50ayBpZiAoYnR0dl9kZWJ1ZyA+PSAyKSBwcmludGsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYwppbmRleCA4YzA4YjdmLi5iN2VjOWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYwpAQCAtMTM5Nyw3ICsxMzk3LDcgQEAKIAogc3RhdGljIHZvaWQgcHJvY19jcGlhX2NyZWF0ZSh2b2lkKQogewotCWNwaWFfcHJvY19yb290ID0gY3JlYXRlX3Byb2NfZW50cnkoImNwaWEiLCBTX0lGRElSLCBOVUxMKTsKKwljcGlhX3Byb2Nfcm9vdCA9IHByb2NfbWtkaXIoImNwaWEiLCBOVUxMKTsKIAogCWlmIChjcGlhX3Byb2Nfcm9vdCkKIAkJY3BpYV9wcm9jX3Jvb3QtPm93bmVyID0gVEhJU19NT0RVTEU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Jkcy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9yZHMuaAppbmRleCAzMDMzN2QwLi4wZDMwZWI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Jkcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcmRzLmgKQEAgLTMxLDcgKzMxLDcgQEAKIHN0cnVjdCByZHNfY29tbWFuZCB7CiAJdW5zaWduZWQgaW50ICBibG9ja19jb3VudDsKIAlpbnQgICAgICAgICAgIHJlc3VsdDsKLQl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJdW5zaWduZWQgY2hhciBfX3VzZXIgKmJ1ZmZlcjsKIAlzdHJ1Y3QgZmlsZSAgICppbnN0YW5jZTsKIAlwb2xsX3RhYmxlICAgICpldmVudF9saXN0OwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNjU4OC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE2NTg4LmMKaW5kZXggMWE2NTdhNy4uNzJiNzBlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE2NTg4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE2NTg4LmMKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgYmxvY2tfdG9fdXNlcl9idWYoc3RydWN0IHNhYTY1ODggKnMsIHVuc2lnbmVkIGNoYXIgKnVzZXJfYnVmKQorc3RhdGljIGludCBibG9ja190b191c2VyX2J1ZihzdHJ1Y3Qgc2FhNjU4OCAqcywgdW5zaWduZWQgY2hhciBfX3VzZXIgKnVzZXJfYnVmKQogewogCWludCBpOwogCkBAIC0xOTEsNyArMTkxLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JdW5zaWduZWQgY2hhciAqYnVmX3B0ciA9IGEtPmJ1ZmZlcjsJLyogVGhpcyBpcyBhIHVzZXIgc3BhY2UgYnVmZmVyISAqLworCXVuc2lnbmVkIGNoYXIgX191c2VyICpidWZfcHRyID0gYS0+YnVmZmVyOwogCXVuc2lnbmVkIGludCBpOwogCXVuc2lnbmVkIGludCByZF9ibG9ja3M7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdnB4MzIyMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92cHgzMjIwLmMKaW5kZXggNDQzN2JkZS4uMTM3YjU4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92cHgzMjIwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92cHgzMjIwLmMKQEAgLTIwMyw3ICsyMDMsNyBAQAogCTB4OGMsIDY0MCwJCS8qIEhvcml6b250YWwgbGVuZ3RoICovCiAJMHg4ZCwgNjQwLAkJLyogTnVtYmVyIG9mIHBpeGVscyAqLwogCTB4OGYsIDB4YzAwLAkJLyogRGlzYWJsZSB3aW5kb3cgMiAqLwotCTB4ZjAsIDB4MTczLAkJLyogMTMuNSBNSHogdHJhbnNwb3J0LCBGb3JjZWQKKwkweGYwLCAweDczLAkJLyogMTMuNSBNSHogdHJhbnNwb3J0LCBGb3JjZWQKIAkJCQkgKiBtb2RlLCBsYXRjaCB3aW5kb3dzICovCiAJMHhmMiwgMHgxMywJCS8qIE5UU0MgTSwgY29tcG9zaXRlIGlucHV0ICovCiAJMHhlNywgMHgxZTEsCQkvKiBFbmFibGUgdmVydGljYWwgc3RhbmRhcmQKQEAgLTIxMiwzOCArMjEyLDM2IEBACiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBpbml0X3BhbFtdID0gewogCTB4ODgsIDIzLAkJLyogV2luZG93IDEgdmVydGljYWwgYmVnaW4gKi8KLQkweDg5LCAyODggKyAxNiwJCS8qIFZlcnRpY2FsIGxpbmVzIGluICgxNiBsaW5lcworCTB4ODksIDI4OCwJCS8qIFZlcnRpY2FsIGxpbmVzIGluICgxNiBsaW5lcwogCQkJCSAqIHNraXBwZWQgYnkgdGhlIFZGRSkgKi8KLQkweDhhLCAyODggKyAxNiwJCS8qIFZlcnRpY2FsIGxpbmVzIG91dCAoMTYgbGluZXMKKwkweDhhLCAyODgsCQkvKiBWZXJ0aWNhbCBsaW5lcyBvdXQgKDE2IGxpbmVzCiAJCQkJICogc2tpcHBlZCBieSB0aGUgVkZFKSAqLwogCTB4OGIsIDE2LAkJLyogSG9yaXpvbnRhbCBiZWdpbiAqLwogCTB4OGMsIDc2OCwJCS8qIEhvcml6b250YWwgbGVuZ3RoICovCiAJMHg4ZCwgNzg0LCAJCS8qIE51bWJlciBvZiBwaXhlbHMKIAkJCQkgKiBNdXN0IGJlID49IEhvcml6b250YWwgYmVnaW4gKyBIb3Jpem9udGFsIGxlbmd0aCAqLwogCTB4OGYsIDB4YzAwLAkJLyogRGlzYWJsZSB3aW5kb3cgMiAqLwotCTB4ZjAsIDB4MTc3LAkJLyogMTMuNSBNSHogdHJhbnNwb3J0LCBGb3JjZWQKKwkweGYwLCAweDc3LAkJLyogMTMuNSBNSHogdHJhbnNwb3J0LCBGb3JjZWQKIAkJCQkgKiBtb2RlLCBsYXRjaCB3aW5kb3dzICovCiAJMHhmMiwgMHgzZDEsCQkvKiBQQUwgQixHLEgsSSwgY29tcG9zaXRlIGlucHV0ICovCi0JMHhlNywgMHgyNjEsCQkvKiBQQUwvU0VDQU0gc2V0IHRvIDI4OCArIDE2IGxpbmVzIAotCQkJCSAqIGNoYW5nZSB0byAweDI0MSBmb3IgMjg4IGxpbmVzICovCisJMHhlNywgMHgyNDEsCQkvKiBQQUwvU0VDQU0gc2V0IHRvIDI4OCBsaW5lcyAqLwogfTsKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGluaXRfc2VjYW1bXSA9IHsKLQkweDg4LCAyMyAgLSAxNiwJCS8qIFdpbmRvdyAxIHZlcnRpY2FsIGJlZ2luICovCi0JMHg4OSwgMjg4ICsgMTYsCQkvKiBWZXJ0aWNhbCBsaW5lcyBpbiAoMTYgbGluZXMKKwkweDg4LCAyMywJCS8qIFdpbmRvdyAxIHZlcnRpY2FsIGJlZ2luICovCisJMHg4OSwgMjg4LAkJLyogVmVydGljYWwgbGluZXMgaW4gKDE2IGxpbmVzCiAJCQkJICogc2tpcHBlZCBieSB0aGUgVkZFKSAqLwotCTB4OGEsIDI4OCArIDE2LAkJLyogVmVydGljYWwgbGluZXMgb3V0ICgxNiBsaW5lcworCTB4OGEsIDI4OCwJCS8qIFZlcnRpY2FsIGxpbmVzIG91dCAoMTYgbGluZXMKIAkJCQkgKiBza2lwcGVkIGJ5IHRoZSBWRkUpICovCiAJMHg4YiwgMTYsCQkvKiBIb3Jpem9udGFsIGJlZ2luICovCiAJMHg4YywgNzY4LAkJLyogSG9yaXpvbnRhbCBsZW5ndGggKi8KIAkweDhkLCA3ODQsCQkvKiBOdW1iZXIgb2YgcGl4ZWxzCiAJCQkJICogTXVzdCBiZSA+PSBIb3Jpem9udGFsIGJlZ2luICsgSG9yaXpvbnRhbCBsZW5ndGggKi8KIAkweDhmLCAweGMwMCwJCS8qIERpc2FibGUgd2luZG93IDIgKi8KLQkweGYwLCAweDE3NywJCS8qIDEzLjUgTUh6IHRyYW5zcG9ydCwgRm9yY2VkCisJMHhmMCwgMHg3NywJCS8qIDEzLjUgTUh6IHRyYW5zcG9ydCwgRm9yY2VkCiAJCQkJICogbW9kZSwgbGF0Y2ggd2luZG93cyAqLwogCTB4ZjIsIDB4M2Q1LAkJLyogU0VDQU0sIGNvbXBvc2l0ZSBpbnB1dCAqLwotCTB4ZTcsIDB4MjYxLAkJLyogUEFML1NFQ0FNIHNldCB0byAyODggKyAxNiBsaW5lcyAKLQkJCQkgKiBjaGFuZ2UgdG8gMHgyNDEgZm9yIDI4OCBsaW5lcyAqLworCTB4ZTcsIDB4MjQxLAkJLyogUEFML1NFQ0FNIHNldCB0byAyODggbGluZXMgKi8KIH07CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGluaXRfY29tbW9uW10gPSB7CkBAIC00MTAsNiArNDA4LDEyIEBACiAJY2FzZSBERUNPREVSX1NFVF9OT1JNOgogCXsKIAkJaW50ICppYXJnID0gYXJnLCBkYXRhOworCQlpbnQgdGVtcF9pbnB1dDsKKworCQkvKiBIZXJlIHdlIGJhY2sgdXAgdGhlIGlucHV0IHNlbGVjdGlvbiBiZWNhdXNlIGl0IGdldHMKKwkJICAgb3ZlcndyaXR0ZW4gd2hlbiB3ZSBmaWxsIHRoZSByZWdpc3RlcnMgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICBjaG9vc2VuIHZpZGVvIG5vcm0gKi8KKwkJdGVtcF9pbnB1dCA9IHZweDMyMjBfZnBfcmVhZChjbGllbnQsIDB4ZjIpOwogCiAJCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6IERFQ09ERVJfU0VUX05PUk0gJWRcbiIsCiAJCQlJMkNfTkFNRShjbGllbnQpLCAqaWFyZyk7CkBAIC00NDksNiArNDUzLDEwIEBACiAKIAkJfQogCQlkZWNvZGVyLT5ub3JtID0gKmlhcmc7CisKKwkJLyogQW5kIGhlcmUgd2Ugc2V0IHRoZSBiYWNrZWQgdXAgdmlkZW8gaW5wdXQgYWdhaW4gKi8KKwkJdnB4MzIyMF9mcF93cml0ZShjbGllbnQsIDB4ZjIsIHRlbXBfaW5wdXQgfCAweDAwMTApOworCQl1ZGVsYXkoMTApOwogCX0KIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vS2NvbmZpZyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vS2NvbmZpZwppbmRleCAzM2YyMDlhLi4xODgzZDIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL0tjb25maWcKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9LY29uZmlnCkBAIC0zNSw2ICszNSwyMyBAQAogCSAgTFNJRkM5MjlYCiAJICBMU0lGQzkyOVhMCiAKK2NvbmZpZyBGVVNJT05fU0FTCisJdHJpc3RhdGUgIkZ1c2lvbiBNUFQgU2NzaUhvc3QgZHJpdmVycyBmb3IgU0FTIgorCWRlcGVuZHMgb24gUENJICYmIFNDU0kKKyAJc2VsZWN0IEZVU0lPTgorCXNlbGVjdCBTQ1NJX1NBU19BVFRSUworCS0tLWhlbHAtLS0KKwkgIFNDU0kgSE9TVCBzdXBwb3J0IGZvciBhIFNBUyBob3N0IGFkYXB0ZXJzLgorCisJICBMaXN0IG9mIHN1cHBvcnRlZCBjb250cm9sbGVyczoKKworCSAgTFNJU0FTMTA2NAorCSAgTFNJU0FTMTA2NgorCSAgTFNJU0FTMTA2OAorCSAgTFNJU0FTMTA2NEUKKwkgIExTSVNBUzEwNjZFCisJICBMU0lTQVMxMDY4RQorCiBjb25maWcgRlVTSU9OX01BWF9TR0UKIAlpbnQgIk1heGltdW0gbnVtYmVyIG9mIHNjYXR0ZXIgZ2F0aGVyIGVudHJpZXMgKDE2IC0gMTI4KSIKIAlkZXBlbmRzIG9uIEZVU0lPTgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9NYWtlZmlsZSBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vTWFrZWZpbGUKaW5kZXggMWQyZjlkYi4uOGEyZTI2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL01ha2VmaWxlCkBAIC0zNCw1ICszNCw2IEBACiAKIG9iai0kKENPTkZJR19GVVNJT05fU1BJKQkrPSBtcHRiYXNlLm8gbXB0c2NzaWgubyBtcHRzcGkubwogb2JqLSQoQ09ORklHX0ZVU0lPTl9GQykJCSs9IG1wdGJhc2UubyBtcHRzY3NpaC5vIG1wdGZjLm8KK29iai0kKENPTkZJR19GVVNJT05fU0FTKQkrPSBtcHRiYXNlLm8gbXB0c2NzaWgubyBtcHRzYXMubwogb2JqLSQoQ09ORklHX0ZVU0lPTl9DVEwpCSs9IG1wdGN0bC5vCiBvYmotJChDT05GSUdfRlVTSU9OX0xBTikJKz0gbXB0bGFuLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMKaW5kZXggZjUxN2QwNi4uNzkwYTI5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMKQEAgLTEzNSwxMyArMTM1LDEyIEBACiAKIHN0YXRpYyB2b2lkCU1wdERpc3BsYXlJb2NDYXBhYmlsaXRpZXMoTVBUX0FEQVBURVIgKmlvYyk7CiBzdGF0aWMgaW50CU1ha2VJb2NSZWFkeShNUFRfQURBUFRFUiAqaW9jLCBpbnQgZm9yY2UsIGludCBzbGVlcEZsYWcpOwotLy9zdGF0aWMgdTMyCW1wdF9HZXRJb2NTdGF0ZShNUFRfQURBUFRFUiAqaW9jLCBpbnQgY29va2VkKTsKIHN0YXRpYyBpbnQJR2V0SW9jRmFjdHMoTVBUX0FEQVBURVIgKmlvYywgaW50IHNsZWVwRmxhZywgaW50IHJlYXNvbik7CiBzdGF0aWMgaW50CUdldFBvcnRGYWN0cyhNUFRfQURBUFRFUiAqaW9jLCBpbnQgcG9ydG51bSwgaW50IHNsZWVwRmxhZyk7CiBzdGF0aWMgaW50CVNlbmRJb2NJbml0KE1QVF9BREFQVEVSICppb2MsIGludCBzbGVlcEZsYWcpOwogc3RhdGljIGludAlTZW5kUG9ydEVuYWJsZShNUFRfQURBUFRFUiAqaW9jLCBpbnQgcG9ydG51bSwgaW50IHNsZWVwRmxhZyk7CiBzdGF0aWMgaW50CW1wdF9kb191cGxvYWQoTVBUX0FEQVBURVIgKmlvYywgaW50IHNsZWVwRmxhZyk7Ci1zdGF0aWMgaW50CW1wdF9kb3dubG9hZGJvb3QoTVBUX0FEQVBURVIgKmlvYywgaW50IHNsZWVwRmxhZyk7CitzdGF0aWMgaW50CW1wdF9kb3dubG9hZGJvb3QoTVBUX0FEQVBURVIgKmlvYywgTXBpRndIZWFkZXJfdCAqcEZ3SGVhZGVyLCBpbnQgc2xlZXBGbGFnKTsKIHN0YXRpYyBpbnQJbXB0X2RpYWdfcmVzZXQoTVBUX0FEQVBURVIgKmlvYywgaW50IGlnbm9yZSwgaW50IHNsZWVwRmxhZyk7CiBzdGF0aWMgaW50CUtpY2tTdGFydChNUFRfQURBUFRFUiAqaW9jLCBpbnQgaWdub3JlLCBpbnQgc2xlZXBGbGFnKTsKIHN0YXRpYyBpbnQJU2VuZElvY1Jlc2V0KE1QVF9BREFQVEVSICppb2MsIHU4IHJlc2V0X3R5cGUsIGludCBzbGVlcEZsYWcpOwpAQCAtMTUyLDYgKzE1MSw3IEBACiBzdGF0aWMgaW50CUdldExhbkNvbmZpZ1BhZ2VzKE1QVF9BREFQVEVSICppb2MpOwogc3RhdGljIGludAlHZXRGY1BvcnRQYWdlMChNUFRfQURBUFRFUiAqaW9jLCBpbnQgcG9ydG51bSk7CiBzdGF0aWMgaW50CUdldElvVW5pdFBhZ2UyKE1QVF9BREFQVEVSICppb2MpOworaW50CQltcHRiYXNlX3Nhc19wZXJzaXN0X29wZXJhdGlvbihNUFRfQURBUFRFUiAqaW9jLCB1OCBwZXJzaXN0X29wY29kZSk7CiBzdGF0aWMgaW50CW1wdF9HZXRTY3NpUG9ydFNldHRpbmdzKE1QVF9BREFQVEVSICppb2MsIGludCBwb3J0bnVtKTsKIHN0YXRpYyBpbnQJbXB0X3JlYWRTY3NpRGV2aWNlUGFnZUhlYWRlcnMoTVBUX0FEQVBURVIgKmlvYywgaW50IHBvcnRudW0pOwogc3RhdGljIHZvaWQgCW1wdF9yZWFkX2lvY19wZ18xKE1QVF9BREFQVEVSICppb2MpOwpAQCAtMTU5LDYgKzE1OSw4IEBACiBzdGF0aWMgdm9pZAltcHRfdGltZXJfZXhwaXJlZCh1bnNpZ25lZCBsb25nIGRhdGEpOwogc3RhdGljIGludAlTZW5kRXZlbnROb3RpZmljYXRpb24oTVBUX0FEQVBURVIgKmlvYywgdTggRXZTd2l0Y2gpOwogc3RhdGljIGludAlTZW5kRXZlbnRBY2soTVBUX0FEQVBURVIgKmlvYywgRXZlbnROb3RpZmljYXRpb25SZXBseV90ICpldm5wKTsKK3N0YXRpYyBpbnQJbXB0X2hvc3RfcGFnZV9hY2Nlc3NfY29udHJvbChNUFRfQURBUFRFUiAqaW9jLCB1OCBhY2Nlc3NfY29udHJvbF92YWx1ZSwgaW50IHNsZWVwRmxhZyk7CitzdGF0aWMgaW50CW1wdF9ob3N0X3BhZ2VfYWxsb2MoTVBUX0FEQVBURVIgKmlvYywgcElPQ0luaXRfdCBpb2NfaW5pdCk7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogc3RhdGljIGludAlwcm9jbXB0X3N1bW1hcnlfcmVhZChjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LApAQCAtMTc1LDYgKzE3Nyw3IEBACiBzdGF0aWMgdm9pZAltcHRfc3BfaW9jX2luZm8oTVBUX0FEQVBURVIgKmlvYywgdTMyIGlvY19zdGF0dXMsIE1QVF9GUkFNRV9IRFIgKm1mKTsKIHN0YXRpYyB2b2lkCW1wdF9mY19sb2dfaW5mbyhNUFRfQURBUFRFUiAqaW9jLCB1MzIgbG9nX2luZm8pOwogc3RhdGljIHZvaWQJbXB0X3NwX2xvZ19pbmZvKE1QVF9BREFQVEVSICppb2MsIHUzMiBsb2dfaW5mbyk7CitzdGF0aWMgdm9pZAltcHRfc2FzX2xvZ19pbmZvKE1QVF9BREFQVEVSICppb2MsIHUzMiBsb2dfaW5mbyk7CiAKIC8qIG1vZHVsZSBlbnRyeSBwb2ludCAqLwogc3RhdGljIGludCAgX19pbml0ICAgIGZ1c2lvbl9pbml0ICAodm9pZCk7CkBAIC0yMDYsNiArMjA5LDE0NCBAQAogCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBQQ0lfQ09NTUFORCwgY29tbWFuZF9yZWcpOwogfQogCisvKgorICogIFByb2Nlc3MgdHVyYm8gKGNvbnRleHQpIHJlcGx5Li4uCisgKi8KK3N0YXRpYyB2b2lkCittcHRfdHVyYm9fcmVwbHkoTVBUX0FEQVBURVIgKmlvYywgdTMyIHBhKQoreworCU1QVF9GUkFNRV9IRFIgKm1mID0gTlVMTDsKKwlNUFRfRlJBTUVfSERSICptciA9IE5VTEw7CisJaW50IHJlcV9pZHggPSAwOworCWludCBjYl9pZHg7CisKKwlkbWZwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgIkdvdCBUVVJCTyByZXBseSByZXFfaWR4PSUwOHhcbiIsCisJCQkJaW9jLT5uYW1lLCBwYSkpOworCisJc3dpdGNoIChwYSA+PiBNUElfQ09OVEVYVF9SRVBMWV9UWVBFX1NISUZUKSB7CisJY2FzZSBNUElfQ09OVEVYVF9SRVBMWV9UWVBFX1NDU0lfSU5JVDoKKwkJcmVxX2lkeCA9IHBhICYgMHgwMDAwRkZGRjsKKwkJY2JfaWR4ID0gKHBhICYgMHgwMEZGMDAwMCkgPj4gMTY7CisJCW1mID0gTVBUX0lOREVYXzJfTUZQVFIoaW9jLCByZXFfaWR4KTsKKwkJYnJlYWs7CisJY2FzZSBNUElfQ09OVEVYVF9SRVBMWV9UWVBFX0xBTjoKKwkJY2JfaWR4ID0gbXB0X2xhbl9pbmRleDsKKwkJLyoKKwkJICogIEJsaW5kIHNldCBvZiBtZiB0byBOVUxMIGhlcmUgd2FzIGZhdGFsCisJCSAqICBhZnRlciBsYW5fcmVwbHkgc2F5cyAiZnJlZW1lIgorCQkgKiAgRml4IHNvcnQgb2YgY29tYmluZWQgd2l0aCBhbiBvcHRpbWl6YXRpb24gaGVyZTsKKwkJICogIGFkZGVkIGV4cGxpY2l0IGNoZWNrIGZvciBjYXNlIHdoZXJlIGxhbl9yZXBseQorCQkgKiAgd2FzIGp1c3QgcmV0dXJuaW5nIDEgYW5kIGRvaW5nIG5vdGhpbmcgZWxzZS4KKwkJICogIEZvciB0aGlzIGNhc2Ugc2tpcCB0aGUgY2FsbGJhY2ssIGJ1dCBzZXQgdXAKKwkJICogIHByb3BlciBtZiB2YWx1ZSBmaXJzdCBoZXJlOi0pCisJCSAqLworCQlpZiAoKHBhICYgMHg1ODAwMDAwMCkgPT0gMHg1ODAwMDAwMCkgeworCQkJcmVxX2lkeCA9IHBhICYgMHgwMDAwRkZGRjsKKwkJCW1mID0gTVBUX0lOREVYXzJfTUZQVFIoaW9jLCByZXFfaWR4KTsKKwkJCW1wdF9mcmVlX21zZ19mcmFtZShpb2MsIG1mKTsKKwkJCW1iKCk7CisJCQlyZXR1cm47CisJCQlicmVhazsKKwkJfQorCQltciA9IChNUFRfRlJBTUVfSERSICopIENBU1RfVTMyX1RPX1BUUihwYSk7CisJCWJyZWFrOworCWNhc2UgTVBJX0NPTlRFWFRfUkVQTFlfVFlQRV9TQ1NJX1RBUkdFVDoKKwkJY2JfaWR4ID0gbXB0X3N0bV9pbmRleDsKKwkJbXIgPSAoTVBUX0ZSQU1FX0hEUiAqKSBDQVNUX1UzMl9UT19QVFIocGEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljYl9pZHggPSAwOworCQlCVUcoKTsKKwl9CisKKwkvKiAgQ2hlY2sgZm9yICh2YWxpZCkgSU8gY2FsbGJhY2shICAqLworCWlmIChjYl9pZHggPCAxIHx8IGNiX2lkeCA+PSBNUFRfTUFYX1BST1RPQ09MX0RSSVZFUlMgfHwKKwkJCU1wdENhbGxiYWNrc1tjYl9pZHhdID09IE5VTEwpIHsKKwkJcHJpbnRrKE1ZSU9DX3NfV0FSTl9GTVQgIiVzOiBJbnZhbGlkIGNiX2lkeCAoJWQpIVxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIGlvYy0+bmFtZSwgY2JfaWR4KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKE1wdENhbGxiYWNrc1tjYl9pZHhdKGlvYywgbWYsIG1yKSkKKwkJbXB0X2ZyZWVfbXNnX2ZyYW1lKGlvYywgbWYpOworIG91dDoKKwltYigpOworfQorCitzdGF0aWMgdm9pZAorbXB0X3JlcGx5KE1QVF9BREFQVEVSICppb2MsIHUzMiBwYSkKK3sKKwlNUFRfRlJBTUVfSERSCSptZjsKKwlNUFRfRlJBTUVfSERSCSptcjsKKwlpbnQJCSByZXFfaWR4OworCWludAkJIGNiX2lkeDsKKwlpbnQJCSBmcmVlbWU7CisKKwl1MzIgcmVwbHlfZG1hX2xvdzsKKwl1MTYgaW9jX3N0YXQ7CisKKwkvKiBub24tVFVSQk8gcmVwbHkhICBIbW1tLCBzb21ldGhpbmcgbWF5IGJlIHVwLi4uCisJICogIE5ld2VzdCB0dXJibyByZXBseSBtZWNoYW5pc207IGdldCBhZGRyZXNzCisJICogIHZpYSBsZWZ0IHNoaWZ0IDEgKGdldCByaWQgb2YgTVBJX0FERFJFU1NfUkVQTFlfQV9CSVQpIQorCSAqLworCisJLyogTWFwIERNQSBhZGRyZXNzIG9mIHJlcGx5IGhlYWRlciB0byBjcHUgYWRkcmVzcy4KKwkgKiBwYSBpcyAzMiBiaXRzIC0gYnV0IHRoZSBkbWEgYWRkcmVzcyBtYXkgYmUgMzIgb3IgNjQgYml0cworCSAqIGdldCBvZmZzZXQgYmFzZWQgb25seSBvbmx5IHRoZSBsb3cgYWRkcmVzc2VzCisJICovCisKKwlyZXBseV9kbWFfbG93ID0gKHBhIDw8PSAxKTsKKwltciA9IChNUFRfRlJBTUVfSERSICopKCh1OCAqKWlvYy0+cmVwbHlfZnJhbWVzICsKKwkJCSAocmVwbHlfZG1hX2xvdyAtIGlvYy0+cmVwbHlfZnJhbWVzX2xvd19kbWEpKTsKKworCXJlcV9pZHggPSBsZTE2X3RvX2NwdShtci0+dS5mcmFtZS5od2hkci5tc2djdHh1LmZsZC5yZXFfaWR4KTsKKwljYl9pZHggPSBtci0+dS5mcmFtZS5od2hkci5tc2djdHh1LmZsZC5jYl9pZHg7CisJbWYgPSBNUFRfSU5ERVhfMl9NRlBUUihpb2MsIHJlcV9pZHgpOworCisJZG1mcHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJHb3Qgbm9uLVRVUkJPIHJlcGx5PSVwIHJlcV9pZHg9JXggY2JfaWR4PSV4IEZ1bmN0aW9uPSV4XG4iLAorCQkJaW9jLT5uYW1lLCBtciwgcmVxX2lkeCwgY2JfaWR4LCBtci0+dS5oZHIuRnVuY3Rpb24pKTsKKwlEQkdfRFVNUF9SRVBMWV9GUkFNRShtcikKKworCSAvKiAgQ2hlY2svbG9nIElPQyBsb2cgaW5mbworCSAqLworCWlvY19zdGF0ID0gbGUxNl90b19jcHUobXItPnUucmVwbHkuSU9DU3RhdHVzKTsKKwlpZiAoaW9jX3N0YXQgJiBNUElfSU9DU1RBVFVTX0ZMQUdfTE9HX0lORk9fQVZBSUxBQkxFKSB7CisJCXUzMgkgbG9nX2luZm8gPSBsZTMyX3RvX2NwdShtci0+dS5yZXBseS5JT0NMb2dJbmZvKTsKKwkJaWYgKGlvYy0+YnVzX3R5cGUgPT0gRkMpCisJCQltcHRfZmNfbG9nX2luZm8oaW9jLCBsb2dfaW5mbyk7CisJCWVsc2UgaWYgKGlvYy0+YnVzX3R5cGUgPT0gU0NTSSkKKwkJCW1wdF9zcF9sb2dfaW5mbyhpb2MsIGxvZ19pbmZvKTsKKwkJZWxzZSBpZiAoaW9jLT5idXNfdHlwZSA9PSBTQVMpCisJCQltcHRfc2FzX2xvZ19pbmZvKGlvYywgbG9nX2luZm8pOworCX0KKwlpZiAoaW9jX3N0YXQgJiBNUElfSU9DU1RBVFVTX01BU0spIHsKKwkJaWYgKGlvYy0+YnVzX3R5cGUgPT0gU0NTSSAmJgorCQkgICAgY2JfaWR4ICE9IG1wdF9zdG1faW5kZXggJiYKKwkJICAgIGNiX2lkeCAhPSBtcHRfbGFuX2luZGV4KQorCQkJbXB0X3NwX2lvY19pbmZvKGlvYywgKHUzMilpb2Nfc3RhdCwgbWYpOworCX0KKworCisJLyogIENoZWNrIGZvciAodmFsaWQpIElPIGNhbGxiYWNrISAgKi8KKwlpZiAoY2JfaWR4IDwgMSB8fCBjYl9pZHggPj0gTVBUX01BWF9QUk9UT0NPTF9EUklWRVJTIHx8CisJCQlNcHRDYWxsYmFja3NbY2JfaWR4XSA9PSBOVUxMKSB7CisJCXByaW50ayhNWUlPQ19zX1dBUk5fRk1UICIlczogSW52YWxpZCBjYl9pZHggKCVkKSFcbiIsCisJCQkJX19GVU5DVElPTl9fLCBpb2MtPm5hbWUsIGNiX2lkeCk7CisJCWZyZWVtZSA9IDA7CisJCWdvdG8gb3V0OworCX0KKworCWZyZWVtZSA9IE1wdENhbGxiYWNrc1tjYl9pZHhdKGlvYywgbWYsIG1yKTsKKworIG91dDoKKwkvKiAgRmx1c2ggKG5vbi1UVVJCTykgcmVwbHkgd2l0aCBhIFdSSVRFISAgKi8KKwlDSElQUkVHX1dSSVRFMzIoJmlvYy0+Y2hpcC0+UmVwbHlGaWZvLCBwYSk7CisKKwlpZiAoZnJlZW1lKQorCQltcHRfZnJlZV9tc2dfZnJhbWUoaW9jLCBtZik7CisJbWIoKTsKK30KKwogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwogLyoKICAqCW1wdF9pbnRlcnJ1cHQgLSBNUFQgYWRhcHRlciAoSU9DKSBzcGVjaWZpYyBpbnRlcnJ1cHQgaGFuZGxlci4KQEAgLTIyNywxNjQgKzM2OCwyMSBAQAogc3RhdGljIGlycXJldHVybl90CiBtcHRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmJ1c19pZCwgc3RydWN0IHB0X3JlZ3MgKnIpCiB7Ci0JTVBUX0FEQVBURVIJKmlvYzsKLQlNUFRfRlJBTUVfSERSCSptZjsKLQlNUFRfRlJBTUVfSERSCSptcjsKLQl1MzIJCSBwYTsKLQlpbnQJCSByZXFfaWR4OwotCWludAkJIGNiX2lkeDsKLQlpbnQJCSB0eXBlOwotCWludAkJIGZyZWVtZTsKLQotCWlvYyA9IChNUFRfQURBUFRFUiAqKWJ1c19pZDsKKwlNUFRfQURBUFRFUiAqaW9jID0gYnVzX2lkOworCXUzMiBwYTsKIAogCS8qCiAJICogIERyYWluIHRoZSByZXBseSBGSUZPIQotCSAqCi0JICogTk9URVM6IEkndmUgc2VlbiB1cCB0byAxMCByZXBsaWVzIHByb2Nlc3NlZCBpbiB0aGlzIGxvb3AsIHNvIGZhci4uLgotCSAqIFVwZGF0ZTogSSd2ZSBzZWVuIHVwIHRvIDkxODIgcmVwbGllcyBwcm9jZXNzZWQgaW4gdGhpcyBsb29wISA/PwotCSAqIFVwZGF0ZTogTGltaXQgb3Vyc2VsdmVzIHRvIHByb2Nlc3NpbmcgbWF4IG9mIE4gcmVwbGllcwotCSAqCShib3R0b20gb2YgbG9vcCkuCiAJICovCiAJd2hpbGUgKDEpIHsKLQotCQlpZiAoKHBhID0gQ0hJUFJFR19SRUFEMzJfZG1hc3luYygmaW9jLT5jaGlwLT5SZXBseUZpZm8pKSA9PSAweEZGRkZGRkZGKQorCQlwYSA9IENISVBSRUdfUkVBRDMyX2RtYXN5bmMoJmlvYy0+Y2hpcC0+UmVwbHlGaWZvKTsKKwkJaWYgKHBhID09IDB4RkZGRkZGRkYpCiAJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0KLQkJY2JfaWR4ID0gMDsKLQkJZnJlZW1lID0gMDsKLQotCQkvKgotCQkgKiAgQ2hlY2sgZm9yIG5vbi1UVVJCTyByZXBseSEKLQkJICovCi0JCWlmIChwYSAmIE1QSV9BRERSRVNTX1JFUExZX0FfQklUKSB7Ci0JCQl1MzIgcmVwbHlfZG1hX2xvdzsKLQkJCXUxNiBpb2Nfc3RhdDsKLQotCQkJLyogbm9uLVRVUkJPIHJlcGx5ISAgSG1tbSwgc29tZXRoaW5nIG1heSBiZSB1cC4uLgotCQkJICogIE5ld2VzdCB0dXJibyByZXBseSBtZWNoYW5pc207IGdldCBhZGRyZXNzCi0JCQkgKiAgdmlhIGxlZnQgc2hpZnQgMSAoZ2V0IHJpZCBvZiBNUElfQUREUkVTU19SRVBMWV9BX0JJVCkhCi0JCQkgKi8KLQotCQkJLyogTWFwIERNQSBhZGRyZXNzIG9mIHJlcGx5IGhlYWRlciB0byBjcHUgYWRkcmVzcy4KLQkJCSAqIHBhIGlzIDMyIGJpdHMgLSBidXQgdGhlIGRtYSBhZGRyZXNzIG1heSBiZSAzMiBvciA2NCBiaXRzCi0JCQkgKiBnZXQgb2Zmc2V0IGJhc2VkIG9ubHkgb25seSB0aGUgbG93IGFkZHJlc3NlcwotCQkJICovCi0JCQlyZXBseV9kbWFfbG93ID0gKHBhID0gKHBhIDw8IDEpKTsKLQkJCW1yID0gKE1QVF9GUkFNRV9IRFIgKikoKHU4ICopaW9jLT5yZXBseV9mcmFtZXMgKwotCQkJCQkgKHJlcGx5X2RtYV9sb3cgLSBpb2MtPnJlcGx5X2ZyYW1lc19sb3dfZG1hKSk7Ci0KLQkJCXJlcV9pZHggPSBsZTE2X3RvX2NwdShtci0+dS5mcmFtZS5od2hkci5tc2djdHh1LmZsZC5yZXFfaWR4KTsKLQkJCWNiX2lkeCA9IG1yLT51LmZyYW1lLmh3aGRyLm1zZ2N0eHUuZmxkLmNiX2lkeDsKLQkJCW1mID0gTVBUX0lOREVYXzJfTUZQVFIoaW9jLCByZXFfaWR4KTsKLQotCQkJZG1mcHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJHb3Qgbm9uLVRVUkJPIHJlcGx5PSVwIHJlcV9pZHg9JXggY2JfaWR4PSV4IEZ1bmN0aW9uPSV4XG4iLAotCQkJCQlpb2MtPm5hbWUsIG1yLCByZXFfaWR4LCBjYl9pZHgsIG1yLT51Lmhkci5GdW5jdGlvbikpOwotCQkJREJHX0RVTVBfUkVQTFlfRlJBTUUobXIpCi0KLQkJCSAvKiAgQ2hlY2svbG9nIElPQyBsb2cgaW5mbwotCQkJICovCi0JCQlpb2Nfc3RhdCA9IGxlMTZfdG9fY3B1KG1yLT51LnJlcGx5LklPQ1N0YXR1cyk7Ci0JCQlpZiAoaW9jX3N0YXQgJiBNUElfSU9DU1RBVFVTX0ZMQUdfTE9HX0lORk9fQVZBSUxBQkxFKSB7Ci0JCQkJdTMyCSBsb2dfaW5mbyA9IGxlMzJfdG9fY3B1KG1yLT51LnJlcGx5LklPQ0xvZ0luZm8pOwotCQkJCWlmIChpb2MtPmJ1c190eXBlID09IEZDKQotCQkJCQltcHRfZmNfbG9nX2luZm8oaW9jLCBsb2dfaW5mbyk7Ci0JCQkJZWxzZSBpZiAoaW9jLT5idXNfdHlwZSA9PSBTQ1NJKQotCQkJCQltcHRfc3BfbG9nX2luZm8oaW9jLCBsb2dfaW5mbyk7Ci0JCQl9Ci0JCQlpZiAoaW9jX3N0YXQgJiBNUElfSU9DU1RBVFVTX01BU0spIHsKLQkJCQlpZiAoaW9jLT5idXNfdHlwZSA9PSBTQ1NJKQotCQkJCQltcHRfc3BfaW9jX2luZm8oaW9jLCAodTMyKWlvY19zdGF0LCBtZik7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogIFByb2Nlc3MgdHVyYm8gKGNvbnRleHQpIHJlcGx5Li4uCi0JCQkgKi8KLQkJCWRtZnByaW50aygoTVlJT0Nfc19JTkZPX0ZNVCAiR290IFRVUkJPIHJlcGx5IHJlcV9pZHg9JTA4eFxuIiwgaW9jLT5uYW1lLCBwYSkpOwotCQkJdHlwZSA9IChwYSA+PiBNUElfQ09OVEVYVF9SRVBMWV9UWVBFX1NISUZUKTsKLQkJCWlmICh0eXBlID09IE1QSV9DT05URVhUX1JFUExZX1RZUEVfU0NTSV9UQVJHRVQpIHsKLQkJCQljYl9pZHggPSBtcHRfc3RtX2luZGV4OwotCQkJCW1mID0gTlVMTDsKLQkJCQltciA9IChNUFRfRlJBTUVfSERSICopIENBU1RfVTMyX1RPX1BUUihwYSk7Ci0JCQl9IGVsc2UgaWYgKHR5cGUgPT0gTVBJX0NPTlRFWFRfUkVQTFlfVFlQRV9MQU4pIHsKLQkJCQljYl9pZHggPSBtcHRfbGFuX2luZGV4OwotCQkJCSAvKiAgQmxpbmQgc2V0IG9mIG1mIHRvIE5VTEwgaGVyZSB3YXMgZmF0YWwKLQkJCQkgKiAgYWZ0ZXIgbGFuX3JlcGx5IHNheXMgImZyZWVtZSIKLQkJCQkgKiAgRml4IHNvcnQgb2YgY29tYmluZWQgd2l0aCBhbiBvcHRpbWl6YXRpb24gaGVyZTsKLQkJCQkgKiAgYWRkZWQgZXhwbGljaXQgY2hlY2sgZm9yIGNhc2Ugd2hlcmUgbGFuX3JlcGx5Ci0JCQkJICogIHdhcyBqdXN0IHJldHVybmluZyAxIGFuZCBkb2luZyBub3RoaW5nIGVsc2UuCi0JCQkJICogIEZvciB0aGlzIGNhc2Ugc2tpcCB0aGUgY2FsbGJhY2ssIGJ1dCBzZXQgdXAKLQkJCQkgKiAgcHJvcGVyIG1mIHZhbHVlIGZpcnN0IGhlcmU6LSkKLQkJCQkgKi8KLQkJCQlpZiAoKHBhICYgMHg1ODAwMDAwMCkgPT0gMHg1ODAwMDAwMCkgewotCQkJCQlyZXFfaWR4ID0gcGEgJiAweDAwMDBGRkZGOwotCQkJCQltZiA9IE1QVF9JTkRFWF8yX01GUFRSKGlvYywgcmVxX2lkeCk7Ci0JCQkJCWZyZWVtZSA9IDE7Ci0JCQkJCS8qCi0JCQkJCSAqICBJTVBPUlRBTlQhICBJbnZhbGlkYXRlIHRoZSBjYWxsYmFjayEKLQkJCQkJICovCi0JCQkJCWNiX2lkeCA9IDA7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJbWYgPSBOVUxMOwotCQkJCX0KLQkJCQltciA9IChNUFRfRlJBTUVfSERSICopIENBU1RfVTMyX1RPX1BUUihwYSk7Ci0JCQl9IGVsc2UgewotCQkJCXJlcV9pZHggPSBwYSAmIDB4MDAwMEZGRkY7Ci0JCQkJY2JfaWR4ID0gKHBhICYgMHgwMEZGMDAwMCkgPj4gMTY7Ci0JCQkJbWYgPSBNUFRfSU5ERVhfMl9NRlBUUihpb2MsIHJlcV9pZHgpOwotCQkJCW1yID0gTlVMTDsKLQkJCX0KLQkJCXBhID0gMDsJCQkJCS8qIE5vIHJlcGx5IGZsdXNoISAqLwotCQl9Ci0KLSNpZmRlZiBNUFRfREVCVUdfSVJRCi0JCWlmIChpb2MtPmJ1c190eXBlID09IFNDU0kpIHsKLQkJCS8qIFZlcmlmeSBtZiwgbXIgYXJlIHJlYXNvbmFibGUuCi0JCQkgKi8KLQkJCWlmICgobWYpICYmICgobWYgPj0gTVBUX0lOREVYXzJfTUZQVFIoaW9jLCBpb2MtPnJlcV9kZXB0aCkpCi0JCQkJfHwgKG1mIDwgaW9jLT5yZXFfZnJhbWVzKSkgKSB7Ci0JCQkJcHJpbnRrKE1ZSU9DX3NfV0FSTl9GTVQKLQkJCQkJIm1wdF9pbnRlcnJ1cHQ6IEludmFsaWQgbWYgKCVwKSFcbiIsIGlvYy0+bmFtZSwgKHZvaWQgKiltZik7Ci0JCQkJY2JfaWR4ID0gMDsKLQkJCQlwYSA9IDA7Ci0JCQkJZnJlZW1lID0gMDsKLQkJCX0KLQkJCWlmICgocGEpICYmIChtcikgJiYgKChtciA+PSBNUFRfSU5ERVhfMl9SRlBUUihpb2MsIGlvYy0+cmVxX2RlcHRoKSkKLQkJCQl8fCAobXIgPCBpb2MtPnJlcGx5X2ZyYW1lcykpICkgewotCQkJCXByaW50ayhNWUlPQ19zX1dBUk5fRk1UCi0JCQkJCSJtcHRfaW50ZXJydXB0OiBJbnZhbGlkIHJmICglcCkhXG4iLCBpb2MtPm5hbWUsICh2b2lkICopbXIpOwotCQkJCWNiX2lkeCA9IDA7Ci0JCQkJcGEgPSAwOwotCQkJCWZyZWVtZSA9IDA7Ci0JCQl9Ci0JCQlpZiAoY2JfaWR4ID4gKE1QVF9NQVhfUFJPVE9DT0xfRFJJVkVSUy0xKSkgewotCQkJCXByaW50ayhNWUlPQ19zX1dBUk5fRk1UCi0JCQkJCSJtcHRfaW50ZXJydXB0OiBJbnZhbGlkIGNiX2lkeCAoJWQpIVxuIiwgaW9jLT5uYW1lLCBjYl9pZHgpOwotCQkJCWNiX2lkeCA9IDA7Ci0JCQkJcGEgPSAwOwotCQkJCWZyZWVtZSA9IDA7Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCi0JCS8qICBDaGVjayBmb3IgKHZhbGlkKSBJTyBjYWxsYmFjayEgICovCi0JCWlmIChjYl9pZHgpIHsKLQkJCS8qICBEbyB0aGUgY2FsbGJhY2shICAqLwotCQkJZnJlZW1lID0gKCooTXB0Q2FsbGJhY2tzW2NiX2lkeF0pKShpb2MsIG1mLCBtcik7Ci0JCX0KLQotCQlpZiAocGEpIHsKLQkJCS8qICBGbHVzaCAobm9uLVRVUkJPKSByZXBseSB3aXRoIGEgV1JJVEUhICAqLwotCQkJQ0hJUFJFR19XUklURTMyKCZpb2MtPmNoaXAtPlJlcGx5RmlmbywgcGEpOwotCQl9Ci0KLQkJaWYgKGZyZWVtZSkgewotCQkJLyogIFB1dCBSZXF1ZXN0IGJhY2sgb24gRnJlZVEhICAqLwotCQkJbXB0X2ZyZWVfbXNnX2ZyYW1lKGlvYywgbWYpOwotCQl9Ci0KLQkJbWIoKTsKLQl9CS8qIGRyYWluIHJlcGx5IEZJRk8gKi8KKwkJZWxzZSBpZiAocGEgJiBNUElfQUREUkVTU19SRVBMWV9BX0JJVCkKKwkJCW1wdF9yZXBseShpb2MsIHBhKTsKKwkJZWxzZQorCQkJbXB0X3R1cmJvX3JlcGx5KGlvYywgcGEpOworCX0KIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTUwOSw2ICs1MDcsMTQgQEAKIAkJCXBDZmctPndhaXRfZG9uZSA9IDE7CiAJCQl3YWtlX3VwKCZtcHRfd2FpdHEpOwogCQl9CisJfSBlbHNlIGlmIChmdW5jID09IE1QSV9GVU5DVElPTl9TQVNfSU9fVU5JVF9DT05UUk9MKSB7CisJCS8qIHdlIHNob3VsZCBiZSBhbHdheXMgZ2V0dGluZyBhIHJlcGx5IGZyYW1lICovCisJCW1lbWNweShpb2MtPnBlcnNpc3RfcmVwbHlfZnJhbWUsIHJlcGx5LAorCQkgICAgbWluKE1QVF9ERUZBVUxUX0ZSQU1FX1NJWkUsCisJCSAgICA0KnJlcGx5LT51LnJlcGx5Lk1zZ0xlbmd0aCkpOworCQlkZWxfdGltZXIoJmlvYy0+cGVyc2lzdF90aW1lcik7CisJCWlvYy0+cGVyc2lzdF93YWl0X2RvbmUgPSAxOworCQl3YWtlX3VwKCZtcHRfd2FpdHEpOwogCX0gZWxzZSB7CiAJCXByaW50ayhNWUlPQ19zX0VSUl9GTVQgIlVuZXhwZWN0ZWQgbXNnIGZ1bmN0aW9uICg9JTAyWGgpIHJlcGx5IHJlY2VpdmVkIVxuIiwKIAkJCQlpb2MtPm5hbWUsIGZ1bmMpOwpAQCAtNzUwLDYgKzc1Niw3IEBACiAJCW1mID0gbGlzdF9lbnRyeShpb2MtPkZyZWVRLm5leHQsIE1QVF9GUkFNRV9IRFIsCiAJCQkJdS5mcmFtZS5saW5rYWdlLmxpc3QpOwogCQlsaXN0X2RlbCgmbWYtPnUuZnJhbWUubGlua2FnZS5saXN0KTsKKwkJbWYtPnUuZnJhbWUubGlua2FnZS5hcmcxID0gMDsKIAkJbWYtPnUuZnJhbWUuaHdoZHIubXNnY3R4dS5mbGQuY2JfaWR4ID0gaGFuZGxlOwkvKiBieXRlICovCiAJCXJlcV9vZmZzZXQgPSAodTggKiltZiAtICh1OCAqKWlvYy0+cmVxX2ZyYW1lczsKIAkJCQkJCQkJLyogdTE2ISAqLwpAQCAtODQ1LDYgKzg1Miw3IEBACiAKIAkvKiAgUHV0IFJlcXVlc3QgYmFjayBvbiBGcmVlUSEgICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+RnJlZVFsb2NrLCBmbGFncyk7CisJbWYtPnUuZnJhbWUubGlua2FnZS5hcmcxID0gMHhkZWFkYmVhZjsgLyogc2lnbmF0dXJlIHRvIGtub3cgaWYgdGhpcyBtZiBpcyBmcmVlZCAqLwogCWxpc3RfYWRkX3RhaWwoJm1mLT51LmZyYW1lLmxpbmthZ2UubGlzdCwgJmlvYy0+RnJlZVEpOwogI2lmZGVmIE1GQ05UCiAJaW9jLT5tZmNudC0tOwpAQCAtOTcxLDEyICs5NzksMTIzIEBACiAKIAkvKiBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGRvb3JiZWxscyAqLwogCUNISVBSRUdfV1JJVEUzMigmaW9jLT5jaGlwLT5JbnRTdGF0dXMsIDApOwotCQorCiAJcmV0dXJuIHI7CiB9CiAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KIC8qKgorICogbXB0X2hvc3RfcGFnZV9hY2Nlc3NfY29udHJvbCAtIHByb3ZpZGVzIG1lY2hhbmlzbSBmb3IgdGhlIGhvc3QKKyAqIGRyaXZlciB0byBjb250cm9sIHRoZSBJT0MncyBIb3N0IFBhZ2UgQnVmZmVyIGFjY2Vzcy4KKyAqIEBpb2M6IFBvaW50ZXIgdG8gTVBUIGFkYXB0ZXIgc3RydWN0dXJlCisgKiBAYWNjZXNzX2NvbnRyb2xfdmFsdWU6IGRlZmluZSBiaXRzIGJlbG93CisgKgorICogQWNjZXNzIENvbnRyb2wgVmFsdWUgLSBiaXRzWzE1OjEyXQorICogMGggUmVzZXJ2ZWQKKyAqIDFoIEVuYWJsZSBBY2Nlc3MgeyBNUElfREJfSFBCQUNfRU5BQkxFX0FDQ0VTUyB9CisgKiAyaCBEaXNhYmxlIEFjY2VzcyB7IE1QSV9EQl9IUEJBQ19ESVNBQkxFX0FDQ0VTUyB9CisgKiAzaCBGcmVlIEJ1ZmZlciB7IE1QSV9EQl9IUEJBQ19GUkVFX0JVRkZFUiB9CisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworCitzdGF0aWMgaW50CittcHRfaG9zdF9wYWdlX2FjY2Vzc19jb250cm9sKE1QVF9BREFQVEVSICppb2MsIHU4IGFjY2Vzc19jb250cm9sX3ZhbHVlLCBpbnQgc2xlZXBGbGFnKQoreworCWludAkgciA9IDA7CisKKwkvKiByZXR1cm4gaWYgaW4gdXNlICovCisJaWYgKENISVBSRUdfUkVBRDMyKCZpb2MtPmNoaXAtPkRvb3JiZWxsKQorCSAgICAmIE1QSV9ET09SQkVMTF9BQ1RJVkUpCisJICAgIHJldHVybiAtMTsKKworCUNISVBSRUdfV1JJVEUzMigmaW9jLT5jaGlwLT5JbnRTdGF0dXMsIDApOworCisJQ0hJUFJFR19XUklURTMyKCZpb2MtPmNoaXAtPkRvb3JiZWxsLAorCQkoKE1QSV9GVU5DVElPTl9IT1NUX1BBR0VCVUZfQUNDRVNTX0NPTlRST0wKKwkJIDw8TVBJX0RPT1JCRUxMX0ZVTkNUSU9OX1NISUZUKSB8CisJCSAoYWNjZXNzX2NvbnRyb2xfdmFsdWU8PDEyKSkpOworCisJLyogV2FpdCBmb3IgSU9DIHRvIGNsZWFyIERvb3JiZWxsIFN0YXR1cyBiaXQgKi8KKwlpZiAoKHIgPSBXYWl0Rm9yRG9vcmJlbGxBY2soaW9jLCA1LCBzbGVlcEZsYWcpKSA8IDApIHsKKwkJcmV0dXJuIC0yOworCX1lbHNlCisJCXJldHVybiAwOworfQorCisvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCisvKioKKyAqCW1wdF9ob3N0X3BhZ2VfYWxsb2MgLSBhbGxvY2F0ZSBzeXN0ZW0gbWVtb3J5IGZvciB0aGUgZncKKyAqCUlmIHdlIGFscmVhZHkgYWxsb2NhdGVkIG1lbW9yeSBpbiBwYXN0LCB0aGVuIHJlc2VuZCB0aGUgc2FtZSBwb2ludGVyLgorICoJaW9jQDogUG9pbnRlciB0byBwb2ludGVyIHRvIElPQyBhZGFwdGVyCisgKglpb2NfaW5pdEA6IFBvaW50ZXIgdG8gaW9jIGluaXQgY29uZmlnIHBhZ2UKKyAqCisgKglSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitzdGF0aWMgaW50CittcHRfaG9zdF9wYWdlX2FsbG9jKE1QVF9BREFQVEVSICppb2MsIHBJT0NJbml0X3QgaW9jX2luaXQpCit7CisJY2hhcgkqcHNnZTsKKwlpbnQJZmxhZ3NfbGVuZ3RoOworCXUzMglob3N0X3BhZ2VfYnVmZmVyX3N6PTA7CisKKwlpZighaW9jLT5Ib3N0UGFnZUJ1ZmZlcikgeworCisJCWhvc3RfcGFnZV9idWZmZXJfc3ogPQorCQkgICAgbGUzMl90b19jcHUoaW9jLT5mYWN0cy5Ib3N0UGFnZUJ1ZmZlclNHRS5GbGFnc0xlbmd0aCkgJiAweEZGRkZGRjsKKworCQlpZighaG9zdF9wYWdlX2J1ZmZlcl9zeikKKwkJCXJldHVybiAwOyAvKiBmdyBkb2Vzbid0IG5lZWQgYW55IGhvc3QgYnVmZmVycyAqLworCisJCS8qIHNwaW4gdGlsbCB3ZSBnZXQgZW5vdWdoIG1lbW9yeSAqLworCQl3aGlsZShob3N0X3BhZ2VfYnVmZmVyX3N6ID4gMCkgeworCisJCQlpZigoaW9jLT5Ib3N0UGFnZUJ1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KAorCQkJICAgIGlvYy0+cGNpZGV2LAorCQkJICAgIGhvc3RfcGFnZV9idWZmZXJfc3osCisJCQkgICAgJmlvYy0+SG9zdFBhZ2VCdWZmZXJfZG1hKSkgIT0gTlVMTCkgeworCisJCQkJZGluaXRwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQKKwkJCQkgICAgImhvc3RfcGFnZV9idWZmZXIgQCAlcCwgZG1hIEAgJXgsIHN6PSVkIGJ5dGVzXG4iLAorCQkJCSAgICBpb2MtPm5hbWUsCisJCQkJICAgIGlvYy0+SG9zdFBhZ2VCdWZmZXIsCisJCQkJICAgIGlvYy0+SG9zdFBhZ2VCdWZmZXJfZG1hLAorCQkJCSAgICBob3N0X3BhZ2VfYnVmZmVyX3N6KSk7CisJCQkJaW9jLT5hbGxvY190b3RhbCArPSBob3N0X3BhZ2VfYnVmZmVyX3N6OworCQkJCWlvYy0+SG9zdFBhZ2VCdWZmZXJfc3ogPSBob3N0X3BhZ2VfYnVmZmVyX3N6OworCQkJCWJyZWFrOworCQkJfQorCisJCQlob3N0X3BhZ2VfYnVmZmVyX3N6IC09ICg0KjEwMjQpOworCQl9CisJfQorCisJaWYoIWlvYy0+SG9zdFBhZ2VCdWZmZXIpIHsKKwkJcHJpbnRrKE1ZSU9DX3NfRVJSX0ZNVAorCQkgICAgIkZhaWxlZCB0byBhbGxvYyBtZW1vcnkgZm9yIGhvc3RfcGFnZV9idWZmZXIhXG4iLAorCQkgICAgaW9jLT5uYW1lKTsKKwkJcmV0dXJuIC05OTk7CisJfQorCisJcHNnZSA9IChjaGFyICopJmlvY19pbml0LT5Ib3N0UGFnZUJ1ZmZlclNHRTsKKwlmbGFnc19sZW5ndGggPSBNUElfU0dFX0ZMQUdTX1NJTVBMRV9FTEVNRU5UIHwKKwkgICAgTVBJX1NHRV9GTEFHU19TWVNURU1fQUREUkVTUyB8CisJICAgIE1QSV9TR0VfRkxBR1NfMzJfQklUX0FERFJFU1NJTkcgfAorCSAgICBNUElfU0dFX0ZMQUdTX0hPU1RfVE9fSU9DIHwKKwkgICAgTVBJX1NHRV9GTEFHU19FTkRfT0ZfQlVGRkVSOworCWlmIChzaXplb2YoZG1hX2FkZHJfdCkgPT0gc2l6ZW9mKHU2NCkpIHsKKwkgICAgZmxhZ3NfbGVuZ3RoIHw9IE1QSV9TR0VfRkxBR1NfNjRfQklUX0FERFJFU1NJTkc7CisJfQorCWZsYWdzX2xlbmd0aCA9IGZsYWdzX2xlbmd0aCA8PCBNUElfU0dFX0ZMQUdTX1NISUZUOworCWZsYWdzX2xlbmd0aCB8PSBpb2MtPkhvc3RQYWdlQnVmZmVyX3N6OworCW1wdF9hZGRfc2dlKHBzZ2UsIGZsYWdzX2xlbmd0aCwgaW9jLT5Ib3N0UGFnZUJ1ZmZlcl9kbWEpOworCWlvYy0+ZmFjdHMuSG9zdFBhZ2VCdWZmZXJTR0UgPSBpb2NfaW5pdC0+SG9zdFBhZ2VCdWZmZXJTR0U7CisKK3JldHVybiAwOworfQorCisvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCisvKioKICAqCW1wdF92ZXJpZnlfYWRhcHRlciAtIEdpdmVuIGEgdW5pcXVlIElPQyBpZGVudGlmaWVyLCBzZXQgcG9pbnRlciB0bwogICoJdGhlIGFzc29jaWF0ZWQgTVBUIGFkYXB0ZXIgc3RydWN0dXJlLgogICoJQGlvY2lkOiBJT0MgdW5pcXVlIGlkZW50aWZpZXIgKGludGVnZXIpCkBAIC0xMDg0LDcgKzEyMDMsNyBAQAogCiAJLyogSW5pdGlsaXplIFNDU0kgQ29uZmlnIERhdGEgc3RydWN0dXJlCiAJICovCi0JbWVtc2V0KCZpb2MtPnNwaV9kYXRhLCAwLCBzaXplb2YoU2NzaUNmZ0RhdGEpKTsKKwltZW1zZXQoJmlvYy0+c3BpX2RhdGEsIDAsIHNpemVvZihTcGlDZmdEYXRhKSk7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBydW5uaW5nIGNvbmZpZ1EgaGVhZC4KIAkgKi8KQEAgLTEyMTMsNiArMTMzMiwzMyBAQAogCQlpb2MtPnByb2RfbmFtZSA9ICJMU0k1M0MxMDM1IjsKIAkJaW9jLT5idXNfdHlwZSA9IFNDU0k7CiAJfQorCWVsc2UgaWYgKHBkZXYtPmRldmljZSA9PSBNUElfTUFOVUZBQ1RQQUdFX0RFVklEX1NBUzEwNjQpIHsKKwkJaW9jLT5wcm9kX25hbWUgPSAiTFNJU0FTMTA2NCI7CisJCWlvYy0+YnVzX3R5cGUgPSBTQVM7CisJCWlvYy0+ZXJyYXRhX2ZsYWdfMTA2NCA9IDE7CisJfQorCWVsc2UgaWYgKHBkZXYtPmRldmljZSA9PSBNUElfTUFOVUZBQ1RQQUdFX0RFVklEX1NBUzEwNjYpIHsKKwkJaW9jLT5wcm9kX25hbWUgPSAiTFNJU0FTMTA2NiI7CisJCWlvYy0+YnVzX3R5cGUgPSBTQVM7CisJCWlvYy0+ZXJyYXRhX2ZsYWdfMTA2NCA9IDE7CisJfQorCWVsc2UgaWYgKHBkZXYtPmRldmljZSA9PSBNUElfTUFOVUZBQ1RQQUdFX0RFVklEX1NBUzEwNjgpIHsKKwkJaW9jLT5wcm9kX25hbWUgPSAiTFNJU0FTMTA2OCI7CisJCWlvYy0+YnVzX3R5cGUgPSBTQVM7CisJCWlvYy0+ZXJyYXRhX2ZsYWdfMTA2NCA9IDE7CisJfQorCWVsc2UgaWYgKHBkZXYtPmRldmljZSA9PSBNUElfTUFOVUZBQ1RQQUdFX0RFVklEX1NBUzEwNjRFKSB7CisJCWlvYy0+cHJvZF9uYW1lID0gIkxTSVNBUzEwNjRFIjsKKwkJaW9jLT5idXNfdHlwZSA9IFNBUzsKKwl9CisJZWxzZSBpZiAocGRldi0+ZGV2aWNlID09IE1QSV9NQU5VRkFDVFBBR0VfREVWSURfU0FTMTA2NkUpIHsKKwkJaW9jLT5wcm9kX25hbWUgPSAiTFNJU0FTMTA2NkUiOworCQlpb2MtPmJ1c190eXBlID0gU0FTOworCX0KKwllbHNlIGlmIChwZGV2LT5kZXZpY2UgPT0gTVBJX01BTlVGQUNUUEFHRV9ERVZJRF9TQVMxMDY4RSkgeworCQlpb2MtPnByb2RfbmFtZSA9ICJMU0lTQVMxMDY4RSI7CisJCWlvYy0+YnVzX3R5cGUgPSBTQVM7CisJfQogCiAJaWYgKGlvYy0+ZXJyYXRhX2ZsYWdfMTA2NCkKIAkJcGNpX2Rpc2FibGVfaW9fYWNjZXNzKHBkZXYpOwpAQCAtMTYwNCw4ICsxNzUwLDIzIEBACiAJCQkgKi8KIAkJCWlmIChyZXQgPT0gMCkgewogCQkJCXJjID0gbXB0X2RvX3VwbG9hZChpb2MsIHNsZWVwRmxhZyk7Ci0JCQkJaWYgKHJjICE9IDApCisJCQkJaWYgKHJjID09IDApIHsKKwkJCQkJaWYgKGlvYy0+YWx0X2lvYyAmJiBpb2MtPmFsdF9pb2MtPmNhY2hlZF9mdykgeworCQkJCQkJLyoKKwkJCQkJCSAqIE1haW50YWluIG9ubHkgb25lIHBvaW50ZXIgdG8gRlcgbWVtb3J5CisJCQkJCQkgKiBzbyB0aGVyZSB3aWxsIG5vdCBiZSB0d28gYXR0ZW1wdCB0bworCQkJCQkJICogZG93bmxvYWRib290IG9uYm9hcmQgZHVhbCBmdW5jdGlvbgorCQkJCQkJICogY2hpcHMgKG1wdF9hZGFwdGVyX2Rpc2FibGUsCisJCQkJCQkgKiBtcHRfZGlhZ19yZXNldCkKKwkJCQkJCSAqLworCQkJCQkJaW9jLT5jYWNoZWRfZncgPSBOVUxMOworCQkJCQkJZGRscHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICI6IG1wdF91cGxvYWQ6ICBhbHRfJXMgaGFzIGNhY2hlZF9mdz0lcCBcbiIsCisJCQkJCQkJaW9jLT5uYW1lLCBpb2MtPmFsdF9pb2MtPm5hbWUsIGlvYy0+YWx0X2lvYy0+Y2FjaGVkX2Z3KSk7CisJCQkJCX0KKwkJCQl9IGVsc2UgewogCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HIE1ZTkFNICI6IGZpcm13YXJlIHVwbG9hZCBmYWlsdXJlIVxuIik7CisJCQkJCXJldCA9IC01OworCQkJCX0KIAkJCX0KIAkJfQogCX0KQEAgLTE2NDAsNyArMTgwMSwyMiBAQAogCSAqCWFuZCB3ZSB0cnkgR2V0TGFuQ29uZmlnUGFnZXMgYWdhaW4uLi4KIAkgKi8KIAlpZiAoKHJldCA9PSAwKSAmJiAocmVhc29uID09IE1QVF9IT1NURVZFTlRfSU9DX0JSSU5HVVApKSB7Ci0JCWlmIChpb2MtPmJ1c190eXBlID09IEZDKSB7CisJCWlmIChpb2MtPmJ1c190eXBlID09IFNBUykgeworCisJCQkvKiBjbGVhciBwZXJzaXN0ZW5jeSB0YWJsZSAqLworCQkJaWYoaW9jLT5mYWN0cy5JT0NFeGNlcHRpb25zICYKKwkJCSAgICBNUElfSU9DRkFDVFNfRVhDRVBUX1BFUlNJU1RFTlRfVEFCTEVfRlVMTCkgeworCQkJCXJldCA9IG1wdGJhc2Vfc2FzX3BlcnNpc3Rfb3BlcmF0aW9uKGlvYywKKwkJCQkgICAgTVBJX1NBU19PUF9DTEVBUl9OT1RfUFJFU0VOVCk7CisJCQkJaWYocmV0ICE9IDApCisJCQkJCXJldHVybiAtMTsKKwkJCX0KKworCQkJLyogRmluZCBJTSB2b2x1bWVzCisJCQkgKi8KKwkJCW1wdF9maW5kSW1Wb2x1bWVzKGlvYyk7CisKKwkJfSBlbHNlIGlmIChpb2MtPmJ1c190eXBlID09IEZDKSB7CiAJCQkvKgogCQkJICogIFByZS1mZXRjaCBGQyBwb3J0IFdXTiBhbmQgc3R1ZmYuLi4KIAkJCSAqICAoRkNQb3J0UGFnZTBfdCBzdHVmZikKQEAgLTE3ODMsNyArMTk1OSw3IEBACiAKIAlpZiAoaW9jLT5jYWNoZWRfZncgIT0gTlVMTCkgewogCQlkZGxwcmludGsoKEtFUk5fSU5GTyBNWU5BTSAiOiBtcHRfYWRhcHRlcl9kaXNhYmxlOiBQdXNoaW5nIEZXIG9udG8gYWRhcHRlclxuIikpOwotCQlpZiAoKHJldCA9IG1wdF9kb3dubG9hZGJvb3QoaW9jLCBOT19TTEVFUCkpIDwgMCkgeworCQlpZiAoKHJldCA9IG1wdF9kb3dubG9hZGJvb3QoaW9jLCAoTXBpRndIZWFkZXJfdCAqKWlvYy0+Y2FjaGVkX2Z3LCBOT19TTEVFUCkpIDwgMCkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyBNWU5BTQogCQkJCSI6IGZpcm13YXJlIGRvd25sb2FkYm9vdCBmYWlsdXJlICglZCkhXG4iLCByZXQpOwogCQl9CkBAIC0xODMxLDkgKzIwMDcsOSBAQAogCX0KIAogCWtmcmVlKGlvYy0+c3BpX2RhdGEubnZyYW0pOwotCWtmcmVlKGlvYy0+c3BpX2RhdGEucElvY1BnMyk7CisJa2ZyZWUoaW9jLT5yYWlkX2RhdGEucElvY1BnMyk7CiAJaW9jLT5zcGlfZGF0YS5udnJhbSA9IE5VTEw7Ci0JaW9jLT5zcGlfZGF0YS5wSW9jUGczID0gTlVMTDsKKwlpb2MtPnJhaWRfZGF0YS5wSW9jUGczID0gTlVMTDsKIAogCWlmIChpb2MtPnNwaV9kYXRhLnBJb2NQZzQgIT0gTlVMTCkgewogCQlzeiA9IGlvYy0+c3BpX2RhdGEuSW9jUGc0U3o7CkBAIC0xODUyLDYgKzIwMjgsMjMgQEAKIAogCWtmcmVlKGlvYy0+Q2hhaW5Ub0NoYWluKTsKIAlpb2MtPkNoYWluVG9DaGFpbiA9IE5VTEw7CisKKwlpZiAoaW9jLT5Ib3N0UGFnZUJ1ZmZlciAhPSBOVUxMKSB7CisJCWlmKChyZXQgPSBtcHRfaG9zdF9wYWdlX2FjY2Vzc19jb250cm9sKGlvYywKKwkJICAgIE1QSV9EQl9IUEJBQ19GUkVFX0JVRkZFUiwgTk9fU0xFRVApKSAhPSAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgTVlOQU0KKwkJCSAgICI6ICVzOiBob3N0IHBhZ2UgYnVmZmVycyBmcmVlIGZhaWxlZCAoJWQpIVxuIiwKKwkJCSAgICBfX0ZVTkNUSU9OX18sIHJldCk7CisJCX0KKwkJZGV4aXRwcmludGsoKEtFUk5fSU5GTyBNWU5BTSAiOiAlcyBIb3N0UGFnZUJ1ZmZlciBmcmVlICBAICVwLCBzej0lZCBieXRlc1xuIiwKKwkJIAlpb2MtPm5hbWUsIGlvYy0+SG9zdFBhZ2VCdWZmZXIsIGlvYy0+SG9zdFBhZ2VCdWZmZXJfc3opKTsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChpb2MtPnBjaWRldiwgaW9jLT5Ib3N0UGFnZUJ1ZmZlcl9zeiwKKwkJCQlpb2MtPkhvc3RQYWdlQnVmZmVyLAorCQkJCWlvYy0+SG9zdFBhZ2VCdWZmZXJfZG1hKTsKKwkJaW9jLT5Ib3N0UGFnZUJ1ZmZlciA9IE5VTEw7CisJCWlvYy0+SG9zdFBhZ2VCdWZmZXJfc3ogPSAwOworCQlpb2MtPmFsbG9jX3RvdGFsIC09IGlvYy0+SG9zdFBhZ2VCdWZmZXJfc3o7CisJfQogfQogCiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCkBAIC0yMDM0LDcgKzIyMjcsNyBAQAogCSAqICBMb29wIGhlcmUgd2FpdGluZyBmb3IgSU9DIHRvIGNvbWUgUkVBRFkuCiAJICovCiAJaWkgPSAwOwotCWNudGRuID0gKChzbGVlcEZsYWcgPT0gQ0FOX1NMRUVQKSA/IEhaIDogMTAwMCkgKiAxNTsJLyogMTUgc2Vjb25kcyAqLworCWNudGRuID0gKChzbGVlcEZsYWcgPT0gQ0FOX1NMRUVQKSA/IEhaIDogMTAwMCkgKiA1OwkvKiA1IHNlY29uZHMgKi8KIAogCXdoaWxlICgoaW9jX3N0YXRlID0gbXB0X0dldElvY1N0YXRlKGlvYywgMSkpICE9IE1QSV9JT0NfU1RBVEVfUkVBRFkpIHsKIAkJaWYgKGlvY19zdGF0ZSA9PSBNUElfSU9DX1NUQVRFX09QRVJBVElPTkFMKSB7CkBAIC0yMjEyLDYgKzI0MDUsNyBAQAogCQkJCWxlMzJfdG9fY3B1KGZhY3RzLT5DdXJyZW50U2Vuc2VCdWZmZXJIaWdoQWRkcik7CiAJCWZhY3RzLT5DdXJSZXBseUZyYW1lU2l6ZSA9CiAJCQkJbGUxNl90b19jcHUoZmFjdHMtPkN1clJlcGx5RnJhbWVTaXplKTsKKwkJZmFjdHMtPklPQ0NhcGFiaWxpdGllcyA9IGxlMzJfdG9fY3B1KGZhY3RzLT5JT0NDYXBhYmlsaXRpZXMpOwogCiAJCS8qCiAJCSAqIEhhbmRsZSBORVcgKCEpIElPQ0ZhY3RzUmVwbHkgZmllbGRzIGluIE1QSS0xLjAxLnh4CkBAIC0yMzgzLDEzICsyNTc3LDI1IEBACiAJZGRscHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJ1cGxvYWRfZncgJWQgZmFjdHMuRmxhZ3M9JXhcbiIsCiAJCSAgIGlvYy0+bmFtZSwgaW9jLT51cGxvYWRfZncsIGlvYy0+ZmFjdHMuRmxhZ3MpKTsKIAotCWlmIChpb2MtPmJ1c190eXBlID09IEZDKQorCWlmKGlvYy0+YnVzX3R5cGUgPT0gU0FTKQorCQlpb2NfaW5pdC5NYXhEZXZpY2VzID0gaW9jLT5mYWN0cy5NYXhEZXZpY2VzOworCWVsc2UgaWYoaW9jLT5idXNfdHlwZSA9PSBGQykKIAkJaW9jX2luaXQuTWF4RGV2aWNlcyA9IE1QVF9NQVhfRkNfREVWSUNFUzsKIAllbHNlCiAJCWlvY19pbml0Lk1heERldmljZXMgPSBNUFRfTUFYX1NDU0lfREVWSUNFUzsKLQkKIAlpb2NfaW5pdC5NYXhCdXNlcyA9IE1QVF9NQVhfQlVTOworCWRpbml0cHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJmYWN0cy5Nc2dWZXJzaW9uPSV4XG4iLAorCQkgICBpb2MtPm5hbWUsIGlvYy0+ZmFjdHMuTXNnVmVyc2lvbikpOworCWlmIChpb2MtPmZhY3RzLk1zZ1ZlcnNpb24gPj0gTVBJX1ZFUlNJT05fMDFfMDUpIHsKKwkJLy8gc2V0IE1zZ1ZlcnNpb24gYW5kIEhlYWRlclZlcnNpb24gaG9zdCBkcml2ZXIgd2FzIGJ1aWx0IHdpdGgKKwkJaW9jX2luaXQuTXNnVmVyc2lvbiA9IGNwdV90b19sZTE2KE1QSV9WRVJTSU9OKTsKKwkgICAgICAgIGlvY19pbml0LkhlYWRlclZlcnNpb24gPSBjcHVfdG9fbGUxNihNUElfSEVBREVSX1ZFUlNJT04pOwogCisJCWlmIChpb2MtPmZhY3RzLkZsYWdzICYgTVBJX0lPQ0ZBQ1RTX0ZMQUdTX0hPU1RfUEFHRV9CVUZGRVJfUEVSU0lTVEVOVCkgeworCQkJaW9jX2luaXQuSG9zdFBhZ2VCdWZmZXJTR0UgPSBpb2MtPmZhY3RzLkhvc3RQYWdlQnVmZmVyU0dFOworCQl9IGVsc2UgaWYobXB0X2hvc3RfcGFnZV9hbGxvYyhpb2MsICZpb2NfaW5pdCkpCisJCQlyZXR1cm4gLTk5OworCX0KIAlpb2NfaW5pdC5SZXBseUZyYW1lU2l6ZSA9IGNwdV90b19sZTE2KGlvYy0+cmVwbHlfc3opOwkvKiBpbiBCWVRFUyAqLwogCiAJaWYgKHNpemVvZihkbWFfYWRkcl90KSA9PSBzaXplb2YodTY0KSkgewpAQCAtMjQwMywxNyArMjYwOSwyMSBAQAogCQlpb2NfaW5pdC5Ib3N0TWZhSGlnaEFkZHIgPSBjcHVfdG9fbGUzMigwKTsKIAkJaW9jX2luaXQuU2Vuc2VCdWZmZXJIaWdoQWRkciA9IGNwdV90b19sZTMyKDApOwogCX0KLQkJCisKIAlpb2MtPmZhY3RzLkN1cnJlbnRIb3N0TWZhSGlnaEFkZHIgPSBpb2NfaW5pdC5Ib3N0TWZhSGlnaEFkZHI7CiAJaW9jLT5mYWN0cy5DdXJyZW50U2Vuc2VCdWZmZXJIaWdoQWRkciA9IGlvY19pbml0LlNlbnNlQnVmZmVySGlnaEFkZHI7CisJaW9jLT5mYWN0cy5NYXhEZXZpY2VzID0gaW9jX2luaXQuTWF4RGV2aWNlczsKKwlpb2MtPmZhY3RzLk1heEJ1c2VzID0gaW9jX2luaXQuTWF4QnVzZXM7CiAKIAlkaHNwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgIlNlbmRpbmcgSU9DSW5pdCAocmVxIEAgJXApXG4iLAogCQkJaW9jLT5uYW1lLCAmaW9jX2luaXQpKTsKIAogCXIgPSBtcHRfaGFuZHNoYWtlX3JlcV9yZXBseV93YWl0KGlvYywgc2l6ZW9mKElPQ0luaXRfdCksICh1MzIqKSZpb2NfaW5pdCwKIAkJCQlzaXplb2YoTVBJRGVmYXVsdFJlcGx5X3QpLCAodTE2KikmaW5pdF9yZXBseSwgMTAgLypzZWNvbmRzKi8sIHNsZWVwRmxhZyk7Ci0JaWYgKHIgIT0gMCkKKwlpZiAociAhPSAwKSB7CisJCXByaW50ayhNWUlPQ19zX0VSUl9GTVQgIlNlbmRpbmcgSU9DSW5pdCBmYWlsZWQoJWQpIVxuIixpb2MtPm5hbWUsIHIpOwogCQlyZXR1cm4gcjsKKwl9CiAKIAkvKiBObyBuZWVkIHRvIGJ5dGUgc3dhcCB0aGUgbXVsdGlieXRlIGZpZWxkcyBpbiB0aGUgcmVwbHkKIAkgKiBzaW5jZSB3ZSBkb24ndCBldmVuIGxvb2sgYXQgaXQncyBjb250ZW50cy4KQEAgLTI0NzIsNyArMjY4Miw3IEBACiB7CiAJUG9ydEVuYWJsZV90CQkgcG9ydF9lbmFibGU7CiAJTVBJRGVmYXVsdFJlcGx5X3QJIHJlcGx5X2J1ZjsKLQlpbnQJIGlpOworCWludAkgcmM7CiAJaW50CSByZXFfc3o7CiAJaW50CSByZXBseV9zejsKIApAQCAtMjQ5NCwyMiArMjcwNCwxNSBAQAogCiAJLyogUkFJRCBGVyBtYXkgdGFrZSBhIGxvbmcgdGltZSB0byBlbmFibGUKIAkgKi8KLQlpZiAoaW9jLT5idXNfdHlwZSA9PSBGQykgewotCQlpaSA9IG1wdF9oYW5kc2hha2VfcmVxX3JlcGx5X3dhaXQoaW9jLCByZXFfc3osICh1MzIqKSZwb3J0X2VuYWJsZSwKLQkJCQlyZXBseV9zeiwgKHUxNiopJnJlcGx5X2J1ZiwgNjUgLypzZWNvbmRzKi8sIHNsZWVwRmxhZyk7Ci0JfSBlbHNlIHsKLQkJaWkgPSBtcHRfaGFuZHNoYWtlX3JlcV9yZXBseV93YWl0KGlvYywgcmVxX3N6LCAodTMyKikmcG9ydF9lbmFibGUsCisJaWYgKCAoaW9jLT5mYWN0cy5Qcm9kdWN0SUQgJiBNUElfRldfSEVBREVSX1BJRF9QUk9EX01BU0spCisJCQk+IE1QSV9GV19IRUFERVJfUElEX1BST0RfVEFSR0VUX1NDU0kgKSB7CisJCXJjID0gbXB0X2hhbmRzaGFrZV9yZXFfcmVwbHlfd2FpdChpb2MsIHJlcV9zeiwgKHUzMiopJnBvcnRfZW5hYmxlLAogCQkJCXJlcGx5X3N6LCAodTE2KikmcmVwbHlfYnVmLCAzMDAgLypzZWNvbmRzKi8sIHNsZWVwRmxhZyk7CisJfSBlbHNlIHsKKwkJcmMgPSBtcHRfaGFuZHNoYWtlX3JlcV9yZXBseV93YWl0KGlvYywgcmVxX3N6LCAodTMyKikmcG9ydF9lbmFibGUsCisJCQkJcmVwbHlfc3osICh1MTYqKSZyZXBseV9idWYsIDMwIC8qc2Vjb25kcyovLCBzbGVlcEZsYWcpOwogCX0KLQotCWlmIChpaSAhPSAwKQotCQlyZXR1cm4gaWk7Ci0KLQkvKiBXZSBkbyBub3QgZXZlbiBsb29rIGF0IHRoZSByZXBseSwgc28gd2UgbmVlZCBub3QKLQkgKiBzd2FwIHRoZSBtdWx0aS1ieXRlIGZpZWxkcy4KLQkgKi8KLQotCXJldHVybiAwOworCXJldHVybiByYzsKIH0KIAogLyoKQEAgLTI2NjYsOSArMjg2OSw4IEBACiAgKgkJPDAgZm9yIGZ3IHVwbG9hZCBmYWlsdXJlLgogICovCiBzdGF0aWMgaW50Ci1tcHRfZG93bmxvYWRib290KE1QVF9BREFQVEVSICppb2MsIGludCBzbGVlcEZsYWcpCittcHRfZG93bmxvYWRib290KE1QVF9BREFQVEVSICppb2MsIE1waUZ3SGVhZGVyX3QgKnBGd0hlYWRlciwgaW50IHNsZWVwRmxhZykKIHsKLQlNcGlGd0hlYWRlcl90CQkqcEZ3SGVhZGVyOwogCU1waUV4dEltYWdlSGVhZGVyX3QJKnBFeHRJbWFnZTsKIAl1MzIJCQkgZndTaXplOwogCXUzMgkJCSBkaWFnMHZhbDsKQEAgLTI2NzksMTggKzI4ODEsOCBAQAogCXUzMgkJCSBsb2FkX2FkZHI7CiAJdTMyIAkJCSBpb2Nfc3RhdGU9MDsKIAotCWRkbHByaW50aygoTVlJT0Nfc19JTkZPX0ZNVCAiZG93bmxvYWRib290OiBmdyBzaXplIDB4JXgsIGlvYyBGVyBQdHIgJXBcbiIsCi0JCQkJaW9jLT5uYW1lLCBpb2MtPmZhY3RzLkZXSW1hZ2VTaXplLCBpb2MtPmNhY2hlZF9mdykpOwotCi0JaWYgKCBpb2MtPmZhY3RzLkZXSW1hZ2VTaXplID09IDAgKQotCQlyZXR1cm4gLTE7Ci0KLQlpZiAoaW9jLT5jYWNoZWRfZncgPT0gTlVMTCkKLQkJcmV0dXJuIC0yOwotCi0JLyogcHJldmVudCBhIHNlY29uZCBkb3dubG9hZGJvb3QgYW5kIG1lbW9yeSBmcmVlIHdpdGggYWx0X2lvYyAqLwotCWlmIChpb2MtPmFsdF9pb2MgJiYgaW9jLT5hbHRfaW9jLT5jYWNoZWRfZncpCi0JCWlvYy0+YWx0X2lvYy0+Y2FjaGVkX2Z3ID0gTlVMTDsKKwlkZGxwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgImRvd25sb2FkYm9vdDogZncgc2l6ZSAweCV4ICglZCksIEZXIFB0ciAlcFxuIiwKKwkJCQlpb2MtPm5hbWUsIHBGd0hlYWRlci0+SW1hZ2VTaXplLCBwRndIZWFkZXItPkltYWdlU2l6ZSwgcEZ3SGVhZGVyKSk7CiAKIAlDSElQUkVHX1dSSVRFMzIoJmlvYy0+Y2hpcC0+V3JpdGVTZXF1ZW5jZSwgMHhGRik7CiAJQ0hJUFJFR19XUklURTMyKCZpb2MtPmNoaXAtPldyaXRlU2VxdWVuY2UsIE1QSV9XUlNFUV8xU1RfS0VZX1ZBTFVFKTsKQEAgLTI3MTgsMTYgKzI5MTAsMTcgQEAKIAkJCQlpb2MtPm5hbWUsIGNvdW50KSk7CiAJCQlicmVhazsKIAkJfQotCQkvKiB3YWl0IDEgc2VjICovCisJCS8qIHdhaXQgLjEgc2VjICovCiAJCWlmIChzbGVlcEZsYWcgPT0gQ0FOX1NMRUVQKSB7Ci0JCQltc2xlZXBfaW50ZXJydXB0aWJsZSAoMTAwMCk7CisJCQltc2xlZXBfaW50ZXJydXB0aWJsZSAoMTAwKTsKIAkJfSBlbHNlIHsKLQkJCW1kZWxheSAoMTAwMCk7CisJCQltZGVsYXkgKDEwMCk7CiAJCX0KIAl9CiAKIAlpZiAoIGNvdW50ID09IDMwICkgewotCQlkZGxwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgImRvd25sb2FkYm9vdCBmYWlsZWQhIFVuYWJsZSB0byBSRVNFVF9BREFQVEVSIGRpYWcwdmFsPSV4XG4iLAorCQlkZGxwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgImRvd25sb2FkYm9vdCBmYWlsZWQhICIKKwkJIlVuYWJsZSB0byBnZXQgTVBJX0RJQUdfRFJXRSBtb2RlLCBkaWFnMHZhbD0leFxuIiwKIAkJaW9jLT5uYW1lLCBkaWFnMHZhbCkpOwogCQlyZXR1cm4gLTM7CiAJfQpAQCAtMjc0Miw3ICsyOTM1LDYgQEAKIAkvKiBTZXQgdGhlIERpYWdSd0VuIGFuZCBEaXNhYmxlIEFSTSBiaXRzICovCiAJQ0hJUFJFR19XUklURTMyKCZpb2MtPmNoaXAtPkRpYWdub3N0aWMsIChNUElfRElBR19SV19FTkFCTEUgfCBNUElfRElBR19ESVNBQkxFX0FSTSkpOwogCi0JcEZ3SGVhZGVyID0gKE1waUZ3SGVhZGVyX3QgKikgaW9jLT5jYWNoZWRfZnc7CiAJZndTaXplID0gKHBGd0hlYWRlci0+SW1hZ2VTaXplICsgMykvNDsKIAlwdHJGdyA9ICh1MzIgKikgcEZ3SGVhZGVyOwogCkBAIC0yNzkyLDE5ICsyOTg0LDM4IEBACiAJLyogQ2xlYXIgdGhlIGludGVybmFsIGZsYXNoIGJhZCBiaXQgLSBhdXRvaW5jcmVtZW50aW5nIHJlZ2lzdGVyLAogCSAqIHNvIG11c3QgZG8gdHdvIHdyaXRlcy4KIAkgKi8KLQlDSElQUkVHX1BJT19XUklURTMyKCZpb2MtPnBpb19jaGlwLT5EaWFnUndBZGRyZXNzLCAweDNGMDAwMDAwKTsKLQlkaWFnUndEYXRhID0gQ0hJUFJFR19QSU9fUkVBRDMyKCZpb2MtPnBpb19jaGlwLT5EaWFnUndEYXRhKTsKLQlkaWFnUndEYXRhIHw9IDB4NDAwMDAwMDsKLQlDSElQUkVHX1BJT19XUklURTMyKCZpb2MtPnBpb19jaGlwLT5EaWFnUndBZGRyZXNzLCAweDNGMDAwMDAwKTsKLQlDSElQUkVHX1BJT19XUklURTMyKCZpb2MtPnBpb19jaGlwLT5EaWFnUndEYXRhLCBkaWFnUndEYXRhKTsKKwlpZiAoaW9jLT5idXNfdHlwZSA9PSBTQ1NJKSB7CisJCS8qCisJCSAqIDEwMzAgYW5kIDEwMzUgSC9XIGVycmF0YSwgd29ya2Fyb3VuZCB0byBhY2Nlc3MKKwkJICogdGhlIENsZWFyRmxhc2hCYWRTaWduYXR1cmVCaXQKKwkJICovCisJCUNISVBSRUdfUElPX1dSSVRFMzIoJmlvYy0+cGlvX2NoaXAtPkRpYWdSd0FkZHJlc3MsIDB4M0YwMDAwMDApOworCQlkaWFnUndEYXRhID0gQ0hJUFJFR19QSU9fUkVBRDMyKCZpb2MtPnBpb19jaGlwLT5EaWFnUndEYXRhKTsKKwkJZGlhZ1J3RGF0YSB8PSAweDQwMDAwMDAwOworCQlDSElQUkVHX1BJT19XUklURTMyKCZpb2MtPnBpb19jaGlwLT5EaWFnUndBZGRyZXNzLCAweDNGMDAwMDAwKTsKKwkJQ0hJUFJFR19QSU9fV1JJVEUzMigmaW9jLT5waW9fY2hpcC0+RGlhZ1J3RGF0YSwgZGlhZ1J3RGF0YSk7CisKKwl9IGVsc2UgLyogaWYoKGlvYy0+YnVzX3R5cGUgPT0gU0FTKSB8fCAoaW9jLT5idXNfdHlwZSA9PSBGQykpICovIHsKKwkJZGlhZzB2YWwgPSBDSElQUkVHX1JFQUQzMigmaW9jLT5jaGlwLT5EaWFnbm9zdGljKTsKKwkJQ0hJUFJFR19XUklURTMyKCZpb2MtPmNoaXAtPkRpYWdub3N0aWMsIGRpYWcwdmFsIHwKKwkJICAgIE1QSV9ESUFHX0NMRUFSX0ZMQVNIX0JBRF9TSUcpOworCisJCS8qIHdhaXQgMSBtc2VjICovCisJCWlmIChzbGVlcEZsYWcgPT0gQ0FOX1NMRUVQKSB7CisJCQltc2xlZXBfaW50ZXJydXB0aWJsZSAoMSk7CisJCX0gZWxzZSB7CisJCQltZGVsYXkgKDEpOworCQl9CisJfQogCiAJaWYgKGlvYy0+ZXJyYXRhX2ZsYWdfMTA2NCkKIAkJcGNpX2Rpc2FibGVfaW9fYWNjZXNzKGlvYy0+cGNpZGV2KTsKIAogCWRpYWcwdmFsID0gQ0hJUFJFR19SRUFEMzIoJmlvYy0+Y2hpcC0+RGlhZ25vc3RpYyk7Ci0JZGRscHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJkb3dubG9hZGJvb3QgZGlhZzB2YWw9JXgsIHR1cm5pbmcgb2ZmIFBSRVZFTlRfSU9DX0JPT1QsIERJU0FCTEVfQVJNXG4iLAorCWRkbHByaW50aygoTVlJT0Nfc19JTkZPX0ZNVCAiZG93bmxvYWRib290IGRpYWcwdmFsPSV4LCAiCisJCSJ0dXJuaW5nIG9mZiBQUkVWRU5UX0lPQ19CT09ULCBESVNBQkxFX0FSTSwgUldfRU5BQkxFXG4iLAogCQlpb2MtPm5hbWUsIGRpYWcwdmFsKSk7Ci0JZGlhZzB2YWwgJj0gfihNUElfRElBR19QUkVWRU5UX0lPQ19CT09UIHwgTVBJX0RJQUdfRElTQUJMRV9BUk0pOworCWRpYWcwdmFsICY9IH4oTVBJX0RJQUdfUFJFVkVOVF9JT0NfQk9PVCB8IE1QSV9ESUFHX0RJU0FCTEVfQVJNIHwgTVBJX0RJQUdfUldfRU5BQkxFKTsKIAlkZGxwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgImRvd25sb2FkYm9vdCBub3cgZGlhZzB2YWw9JXhcbiIsCiAJCWlvYy0+bmFtZSwgZGlhZzB2YWwpKTsKIAlDSElQUkVHX1dSSVRFMzIoJmlvYy0+Y2hpcC0+RGlhZ25vc3RpYywgZGlhZzB2YWwpOwpAQCAtMjgxMiwxMCArMzAyMywyMyBAQAogCS8qIFdyaXRlIDB4RkYgdG8gcmVzZXQgdGhlIHNlcXVlbmNlciAqLwogCUNISVBSRUdfV1JJVEUzMigmaW9jLT5jaGlwLT5Xcml0ZVNlcXVlbmNlLCAweEZGKTsKIAorCWlmIChpb2MtPmJ1c190eXBlID09IFNBUykgeworCQlpb2Nfc3RhdGUgPSBtcHRfR2V0SW9jU3RhdGUoaW9jLCAwKTsKKwkJaWYgKCAoR2V0SW9jRmFjdHMoaW9jLCBzbGVlcEZsYWcsCisJCQkJTVBUX0hPU1RFVkVOVF9JT0NfQlJJTkdVUCkpICE9IDAgKSB7CisJCQlkZGxwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgIkdldElvY0ZhY3RzIGZhaWxlZDogSW9jU3RhdGU9JXhcbiIsCisJCQkJCWlvYy0+bmFtZSwgaW9jX3N0YXRlKSk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCX0KKwogCWZvciAoY291bnQ9MDsgY291bnQ8SFoqMjA7IGNvdW50KyspIHsKIAkJaWYgKChpb2Nfc3RhdGUgPSBtcHRfR2V0SW9jU3RhdGUoaW9jLCAwKSkgJiBNUElfSU9DX1NUQVRFX1JFQURZKSB7CiAJCQlkZGxwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgImRvd25sb2FkYm9vdCBzdWNjZXNzZnVsISAoY291bnQ9JWQpIElvY1N0YXRlPSV4XG4iLAogCQkJCQlpb2MtPm5hbWUsIGNvdW50LCBpb2Nfc3RhdGUpKTsKKwkJCWlmIChpb2MtPmJ1c190eXBlID09IFNBUykgeworCQkJCXJldHVybiAwOworCQkJfQogCQkJaWYgKChTZW5kSW9jSW5pdChpb2MsIHNsZWVwRmxhZykpICE9IDApIHsKIAkJCQlkZGxwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgImRvd25sb2FkYm9vdDogU2VuZElvY0luaXQgZmFpbGVkXG4iLAogCQkJCQlpb2MtPm5hbWUpKTsKQEAgLTMwNDksMTIgKzMyNzMsMTMgQEAKIAogCQkJCS8qIHdhaXQgMSBzZWMgKi8KIAkJCQlpZiAoc2xlZXBGbGFnID09IENBTl9TTEVFUCkgewotCQkJCQlzc2xlZXAoMSk7CisJCQkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlICgxMDAwKTsKIAkJCQl9IGVsc2UgewogCQkJCQltZGVsYXkgKDEwMDApOwogCQkJCX0KIAkJCX0KLQkJCWlmICgoY291bnQgPSBtcHRfZG93bmxvYWRib290KGlvYywgc2xlZXBGbGFnKSkgPCAwKSB7CisJCQlpZiAoKGNvdW50ID0gbXB0X2Rvd25sb2FkYm9vdChpb2MsCisJCQkJKE1waUZ3SGVhZGVyX3QgKilpb2MtPmNhY2hlZF9mdywgc2xlZXBGbGFnKSkgPCAwKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyBNWU5BTQogCQkJCQkiOiBmaXJtd2FyZSBkb3dubG9hZGJvb3QgZmFpbHVyZSAoJWQpIVxuIiwgY291bnQpOwogCQkJfQpAQCAtMzYzNyw3ICszODYyLDcgQEAKIAlpbnQgY291bnQgPSAwOwogCXUzMiBpbnRzdGF0PTA7CiAKLQljbnRkbiA9ICgoc2xlZXBGbGFnID09IENBTl9TTEVFUCkgPyBIWiA6IDEwMDApICogaG93bG9uZzsKKwljbnRkbiA9IDEwMDAgKiBob3dsb25nOwogCiAJaWYgKHNsZWVwRmxhZyA9PSBDQU5fU0xFRVApIHsKIAkJd2hpbGUgKC0tY250ZG4pIHsKQEAgLTM2ODcsNyArMzkxMiw3IEBACiAJaW50IGNvdW50ID0gMDsKIAl1MzIgaW50c3RhdD0wOwogCi0JY250ZG4gPSAoKHNsZWVwRmxhZyA9PSBDQU5fU0xFRVApID8gSFogOiAxMDAwKSAqIGhvd2xvbmc7CisJY250ZG4gPSAxMDAwICogaG93bG9uZzsKIAlpZiAoc2xlZXBGbGFnID09IENBTl9TTEVFUCkgewogCQl3aGlsZSAoLS1jbnRkbikgewogCQkJaW50c3RhdCA9IENISVBSRUdfUkVBRDMyKCZpb2MtPmNoaXAtPkludFN0YXR1cyk7CkBAIC00MDAxLDYgKzQyMjYsODUgQEAKIAogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwogLyoKKyAqCW1wdGJhc2Vfc2FzX3BlcnNpc3Rfb3BlcmF0aW9uIC0gUGVyZm9ybSBvcGVyYXRpb24gb24gU0FTIFBlcnNpdGVudCBUYWJsZQorICoJQGlvYzogUG9pbnRlciB0byBNUFRfQURBUFRFUiBzdHJ1Y3R1cmUKKyAqCUBzYXNfYWRkcmVzczogNjRiaXQgU0FTIEFkZHJlc3MgZm9yIG9wZXJhdGlvbi4KKyAqCUB0YXJnZXRfaWQ6IHNwZWNpZmllZCB0YXJnZXQgZm9yIG9wZXJhdGlvbgorICoJQGJ1czogc3BlY2lmaWVkIGJ1cyBmb3Igb3BlcmF0aW9uCisgKglAcGVyc2lzdF9vcGNvZGU6IHNlZSBiZWxvdworICoKKyAqCU1QSV9TQVNfT1BfQ0xFQVJfTk9UX1BSRVNFTlQgLSBGcmVlIGFsbCBwZXJzaXN0IFRhcmdldElEIG1hcHBpbmdzIGZvcgorICoJCWRldmljZXMgbm90IGN1cnJlbnRseSBwcmVzZW50LgorICoJTVBJX1NBU19PUF9DTEVBUl9BTExfUEVSU0lTVEVOVCAtIENsZWFyIGFsIHBlcnNpc3QgVGFyZ2V0SUQgbWFwcGluZ3MKKyAqCisgKglOT1RFOiBEb24ndCB1c2Ugbm90IHRoaXMgZnVuY3Rpb24gZHVyaW5nIGludGVycnVwdCB0aW1lLgorICoKKyAqCVJldHVybnM6IDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGVycm9yCisgKi8KKworLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLworaW50CittcHRiYXNlX3Nhc19wZXJzaXN0X29wZXJhdGlvbihNUFRfQURBUFRFUiAqaW9jLCB1OCBwZXJzaXN0X29wY29kZSkKK3sKKwlTYXNJb1VuaXRDb250cm9sUmVxdWVzdF90CSpzYXNJb1VuaXRDbnRyUmVxOworCVNhc0lvVW5pdENvbnRyb2xSZXBseV90CQkqc2FzSW9Vbml0Q250clJlcGx5OworCU1QVF9GUkFNRV9IRFIJCQkqbWYgPSBOVUxMOworCU1QSUhlYWRlcl90CQkJKm1waV9oZHI7CisKKworCS8qIGluc3VyZSBnYXJiYWdlIGlzIG5vdCBzZW50IHRvIGZ3ICovCisJc3dpdGNoKHBlcnNpc3Rfb3Bjb2RlKSB7CisKKwljYXNlIE1QSV9TQVNfT1BfQ0xFQVJfTk9UX1BSRVNFTlQ6CisJY2FzZSBNUElfU0FTX09QX0NMRUFSX0FMTF9QRVJTSVNURU5UOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwkJYnJlYWs7CisJfQorCisJcHJpbnRrKCIlczogcGVyc2lzdF9vcGNvZGU9JXhcbiIsX19GVU5DVElPTl9fLCBwZXJzaXN0X29wY29kZSk7CisKKwkvKiBHZXQgYSBNRiBmb3IgdGhpcyBjb21tYW5kLgorCSAqLworCWlmICgobWYgPSBtcHRfZ2V0X21zZ19mcmFtZShtcHRfYmFzZV9pbmRleCwgaW9jKSkgPT0gTlVMTCkgeworCQlwcmludGsoIiVzOiBubyBtc2cgZnJhbWVzIVxuIixfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLTE7CisgICAgICAgIH0KKworCW1waV9oZHIgPSAoTVBJSGVhZGVyX3QgKikgbWY7CisJc2FzSW9Vbml0Q250clJlcSA9IChTYXNJb1VuaXRDb250cm9sUmVxdWVzdF90ICopbWY7CisJbWVtc2V0KHNhc0lvVW5pdENudHJSZXEsMCxzaXplb2YoU2FzSW9Vbml0Q29udHJvbFJlcXVlc3RfdCkpOworCXNhc0lvVW5pdENudHJSZXEtPkZ1bmN0aW9uID0gTVBJX0ZVTkNUSU9OX1NBU19JT19VTklUX0NPTlRST0w7CisJc2FzSW9Vbml0Q250clJlcS0+TXNnQ29udGV4dCA9IG1waV9oZHItPk1zZ0NvbnRleHQ7CisJc2FzSW9Vbml0Q250clJlcS0+T3BlcmF0aW9uID0gcGVyc2lzdF9vcGNvZGU7CisKKwlpbml0X3RpbWVyKCZpb2MtPnBlcnNpc3RfdGltZXIpOworCWlvYy0+cGVyc2lzdF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGlvYzsKKwlpb2MtPnBlcnNpc3RfdGltZXIuZnVuY3Rpb24gPSBtcHRfdGltZXJfZXhwaXJlZDsKKwlpb2MtPnBlcnNpc3RfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWioxMCAvKiAxMCBzZWMgKi87CisJaW9jLT5wZXJzaXN0X3dhaXRfZG9uZT0wOworCWFkZF90aW1lcigmaW9jLT5wZXJzaXN0X3RpbWVyKTsKKwltcHRfcHV0X21zZ19mcmFtZShtcHRfYmFzZV9pbmRleCwgaW9jLCBtZik7CisJd2FpdF9ldmVudChtcHRfd2FpdHEsIGlvYy0+cGVyc2lzdF93YWl0X2RvbmUpOworCisJc2FzSW9Vbml0Q250clJlcGx5ID0KKwkgICAgKFNhc0lvVW5pdENvbnRyb2xSZXBseV90ICopaW9jLT5wZXJzaXN0X3JlcGx5X2ZyYW1lOworCWlmIChsZTE2X3RvX2NwdShzYXNJb1VuaXRDbnRyUmVwbHktPklPQ1N0YXR1cykgIT0gTVBJX0lPQ1NUQVRVU19TVUNDRVNTKSB7CisJCXByaW50aygiJXM6IElPQ1N0YXR1cz0weCVYIElPQ0xvZ0luZm89MHglWFxuIiwKKwkJICAgIF9fRlVOQ1RJT05fXywKKwkJICAgIHNhc0lvVW5pdENudHJSZXBseS0+SU9DU3RhdHVzLAorCQkgICAgc2FzSW9Vbml0Q250clJlcGx5LT5JT0NMb2dJbmZvKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXByaW50aygiJXM6IHN1Y2Nlc3NcbiIsX19GVU5DVElPTl9fKTsKKwlyZXR1cm4gMDsKK30KKworLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLworLyoKICAqCUdldElvVW5pdFBhZ2UyIC0gUmV0cmlldmUgQklPUyB2ZXJzaW9uIGFuZCBib290IG9yZGVyIGluZm9ybWF0aW9uLgogICoJQGlvYzogUG9pbnRlciB0byBNUFRfQURBUFRFUiBzdHJ1Y3R1cmUKICAqCkBAIC00MzQwLDEwICs0NjQ0LDEwIEBACiAJaWYgKG1wdF9jb25maWcoaW9jLCAmY2ZnKSAhPSAwKQogCQlnb3RvIGRvbmVfYW5kX2ZyZWU7CiAKLQlpZiAoIChtZW0gPSAodTggKilpb2MtPnNwaV9kYXRhLnBJb2NQZzIpID09IE5VTEwgKSB7CisJaWYgKCAobWVtID0gKHU4ICopaW9jLT5yYWlkX2RhdGEucElvY1BnMikgPT0gTlVMTCApIHsKIAkJbWVtID0ga21hbGxvYyhpb2NwYWdlMnN6LCBHRlBfQVRPTUlDKTsKIAkJaWYgKG1lbSkgewotCQkJaW9jLT5zcGlfZGF0YS5wSW9jUGcyID0gKElPQ1BhZ2UyX3QgKikgbWVtOworCQkJaW9jLT5yYWlkX2RhdGEucElvY1BnMiA9IChJT0NQYWdlMl90ICopIG1lbTsKIAkJfSBlbHNlIHsKIAkJCWdvdG8gZG9uZV9hbmRfZnJlZTsKIAkJfQpAQCAtNDM2MCw3ICs0NjY0LDcgQEAKIAkJLyogQXQgbGVhc3QgMSBSQUlEIFZvbHVtZQogCQkgKi8KIAkJcElvY1J2ID0gcElvYzItPlJhaWRWb2x1bWU7Ci0JCWlvYy0+c3BpX2RhdGEuaXNSYWlkID0gMDsKKwkJaW9jLT5yYWlkX2RhdGEuaXNSYWlkID0gMDsKIAkJZm9yIChqaiA9IDA7IGpqIDwgblZvbHM7IGpqKyssIHBJb2NSdisrKSB7CiAJCQl2aWQgPSBwSW9jUnYtPlZvbHVtZUlEOwogCQkJdmJ1cyA9IHBJb2NSdi0+Vm9sdW1lQnVzOwpAQCAtNDM2OSw3ICs0NjczLDcgQEAKIAkJCS8qIGZpbmQgdGhlIG1hdGNoCiAJCQkgKi8KIAkJCWlmICh2YnVzID09IDApIHsKLQkJCQlpb2MtPnNwaV9kYXRhLmlzUmFpZCB8PSAoMSA8PCB2aWQpOworCQkJCWlvYy0+cmFpZF9kYXRhLmlzUmFpZCB8PSAoMSA8PCB2aWQpOwogCQkJfSBlbHNlIHsKIAkJCQkvKiBFcnJvciEgQWx3YXlzIGJ1cyAwCiAJCQkJICovCkBAIC00NDA0LDggKzQ3MDgsOCBAQAogCiAJLyogRnJlZSB0aGUgb2xkIHBhZ2UKIAkgKi8KLQlrZnJlZShpb2MtPnNwaV9kYXRhLnBJb2NQZzMpOwotCWlvYy0+c3BpX2RhdGEucElvY1BnMyA9IE5VTEw7CisJa2ZyZWUoaW9jLT5yYWlkX2RhdGEucElvY1BnMyk7CisJaW9jLT5yYWlkX2RhdGEucElvY1BnMyA9IE5VTEw7CiAKIAkvKiBUaGVyZSBpcyBhdCBsZWFzdCBvbmUgcGh5c2ljYWwgZGlzay4KIAkgKiBSZWFkIGFuZCBzYXZlIElPQyBQYWdlIDMKQEAgLTQ0NDIsNyArNDc0Niw3IEBACiAJCW1lbSA9IGttYWxsb2MoaW9jcGFnZTNzeiwgR0ZQX0FUT01JQyk7CiAJCWlmIChtZW0pIHsKIAkJCW1lbWNweShtZW0sICh1OCAqKXBJb2MzLCBpb2NwYWdlM3N6KTsKLQkJCWlvYy0+c3BpX2RhdGEucElvY1BnMyA9IChJT0NQYWdlM190ICopIG1lbTsKKwkJCWlvYy0+cmFpZF9kYXRhLnBJb2NQZzMgPSAoSU9DUGFnZTNfdCAqKSBtZW07CiAJCX0KIAl9CiAKQEAgLTUzNjYsOCArNTY3MCw4IEBACiB9CiAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KLXN0YXRpYyBjaGFyICoKLUV2ZW50RGVzY3JpcHRpb25TdHIodTggZXZlbnQsIHUzMiBldkRhdGEwKQorc3RhdGljIHZvaWQKK0V2ZW50RGVzY3JpcHRpb25TdHIodTggZXZlbnQsIHUzMiBldkRhdGEwLCBjaGFyICpldlN0cikKIHsKIAljaGFyICpkczsKIApAQCAtNTQyMCw4ICs1NzI0LDk1IEBACiAJCQlkcyA9ICJFdmVudHMoT0ZGKSBDaGFuZ2UiOwogCQlicmVhazsKIAljYXNlIE1QSV9FVkVOVF9JTlRFR1JBVEVEX1JBSUQ6Ci0JCWRzID0gIkludGVncmF0ZWQgUmFpZCI7CisJeworCQl1OCBSZWFzb25Db2RlID0gKHU4KShldkRhdGEwID4+IDE2KTsKKwkJc3dpdGNoIChSZWFzb25Db2RlKSB7CisJCWNhc2UgTVBJX0VWRU5UX1JBSURfUkNfVk9MVU1FX0NSRUFURUQgOgorCQkJZHMgPSAiSW50ZWdyYXRlZCBSYWlkOiBWb2x1bWUgQ3JlYXRlZCI7CisJCQlicmVhazsKKwkJY2FzZSBNUElfRVZFTlRfUkFJRF9SQ19WT0xVTUVfREVMRVRFRCA6CisJCQlkcyA9ICJJbnRlZ3JhdGVkIFJhaWQ6IFZvbHVtZSBEZWxldGVkIjsKKwkJCWJyZWFrOworCQljYXNlIE1QSV9FVkVOVF9SQUlEX1JDX1ZPTFVNRV9TRVRUSU5HU19DSEFOR0VEIDoKKwkJCWRzID0gIkludGVncmF0ZWQgUmFpZDogVm9sdW1lIFNldHRpbmdzIENoYW5nZWQiOworCQkJYnJlYWs7CisJCWNhc2UgTVBJX0VWRU5UX1JBSURfUkNfVk9MVU1FX1NUQVRVU19DSEFOR0VEIDoKKwkJCWRzID0gIkludGVncmF0ZWQgUmFpZDogVm9sdW1lIFN0YXR1cyBDaGFuZ2VkIjsKKwkJCWJyZWFrOworCQljYXNlIE1QSV9FVkVOVF9SQUlEX1JDX1ZPTFVNRV9QSFlTRElTS19DSEFOR0VEIDoKKwkJCWRzID0gIkludGVncmF0ZWQgUmFpZDogVm9sdW1lIFBoeXNkaXNrIENoYW5nZWQiOworCQkJYnJlYWs7CisJCWNhc2UgTVBJX0VWRU5UX1JBSURfUkNfUEhZU0RJU0tfQ1JFQVRFRCA6CisJCQlkcyA9ICJJbnRlZ3JhdGVkIFJhaWQ6IFBoeXNkaXNrIENyZWF0ZWQiOworCQkJYnJlYWs7CisJCWNhc2UgTVBJX0VWRU5UX1JBSURfUkNfUEhZU0RJU0tfREVMRVRFRCA6CisJCQlkcyA9ICJJbnRlZ3JhdGVkIFJhaWQ6IFBoeXNkaXNrIERlbGV0ZWQiOworCQkJYnJlYWs7CisJCWNhc2UgTVBJX0VWRU5UX1JBSURfUkNfUEhZU0RJU0tfU0VUVElOR1NfQ0hBTkdFRCA6CisJCQlkcyA9ICJJbnRlZ3JhdGVkIFJhaWQ6IFBoeXNkaXNrIFNldHRpbmdzIENoYW5nZWQiOworCQkJYnJlYWs7CisJCWNhc2UgTVBJX0VWRU5UX1JBSURfUkNfUEhZU0RJU0tfU1RBVFVTX0NIQU5HRUQgOgorCQkJZHMgPSAiSW50ZWdyYXRlZCBSYWlkOiBQaHlzZGlzayBTdGF0dXMgQ2hhbmdlZCI7CisJCQlicmVhazsKKwkJY2FzZSBNUElfRVZFTlRfUkFJRF9SQ19ET01BSU5fVkFMX05FRURFRCA6CisJCQlkcyA9ICJJbnRlZ3JhdGVkIFJhaWQ6IERvbWFpbiBWYWxpZGF0aW9uIE5lZWRlZCI7CisJCQlicmVhazsKKwkJY2FzZSBNUElfRVZFTlRfUkFJRF9SQ19TTUFSVF9EQVRBIDoKKwkJCWRzID0gIkludGVncmF0ZWQgUmFpZDsgU21hcnQgRGF0YSI7CisJCQlicmVhazsKKwkJY2FzZSBNUElfRVZFTlRfUkFJRF9SQ19SRVBMQUNFX0FDVElPTl9TVEFSVEVEIDoKKwkJCWRzID0gIkludGVncmF0ZWQgUmFpZDogUmVwbGFjZSBBY3Rpb24gU3RhcnRlZCI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRzID0gIkludGVncmF0ZWQgUmFpZCI7CiAJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIE1QSV9FVkVOVF9TQ1NJX0RFVklDRV9TVEFUVVNfQ0hBTkdFOgorCQlkcyA9ICJTQ1NJIERldmljZSBTdGF0dXMgQ2hhbmdlIjsKKwkJYnJlYWs7CisJY2FzZSBNUElfRVZFTlRfU0FTX0RFVklDRV9TVEFUVVNfQ0hBTkdFOgorCXsKKwkJdTggUmVhc29uQ29kZSA9ICh1OCkoZXZEYXRhMCA+PiAxNik7CisJCXN3aXRjaCAoUmVhc29uQ29kZSkgeworCQljYXNlIE1QSV9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQURERUQ6CisJCQlkcyA9ICJTQVMgRGV2aWNlIFN0YXR1cyBDaGFuZ2U6IEFkZGVkIjsKKwkJCWJyZWFrOworCQljYXNlIE1QSV9FVkVOVF9TQVNfREVWX1NUQVRfUkNfTk9UX1JFU1BPTkRJTkc6CisJCQlkcyA9ICJTQVMgRGV2aWNlIFN0YXR1cyBDaGFuZ2U6IERlbGV0ZWQiOworCQkJYnJlYWs7CisJCWNhc2UgTVBJX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19TTUFSVF9EQVRBOgorCQkJZHMgPSAiU0FTIERldmljZSBTdGF0dXMgQ2hhbmdlOiBTTUFSVCBEYXRhIjsKKwkJCWJyZWFrOworCQljYXNlIE1QSV9FVkVOVF9TQVNfREVWX1NUQVRfUkNfTk9fUEVSU0lTVF9BRERFRDoKKwkJCWRzID0gIlNBUyBEZXZpY2UgU3RhdHVzIENoYW5nZTogTm8gUGVyc2lzdGFuY3kgQWRkZWQiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkcyA9ICJTQVMgRGV2aWNlIFN0YXR1cyBDaGFuZ2U6IFVua25vd24iOworCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBNUElfRVZFTlRfT05fQlVTX1RJTUVSX0VYUElSRUQ6CisJCWRzID0gIkJ1cyBUaW1lciBFeHBpcmVkIjsKKwkJYnJlYWs7CisJY2FzZSBNUElfRVZFTlRfUVVFVUVfRlVMTDoKKwkJZHMgPSAiUXVldWUgRnVsbCI7CisJCWJyZWFrOworCWNhc2UgTVBJX0VWRU5UX1NBU19TRVM6CisJCWRzID0gIlNBUyBTRVMgRXZlbnQiOworCQlicmVhazsKKwljYXNlIE1QSV9FVkVOVF9QRVJTSVNURU5UX1RBQkxFX0ZVTEw6CisJCWRzID0gIlBlcnNpc3RlbnQgVGFibGUgRnVsbCI7CisJCWJyZWFrOworCWNhc2UgTVBJX0VWRU5UX1NBU19QSFlfTElOS19TVEFUVVM6CisJCWRzID0gIlNBUyBQSFkgTGluayBTdGF0dXMiOworCQlicmVhazsKKwljYXNlIE1QSV9FVkVOVF9TQVNfRElTQ09WRVJZX0VSUk9SOgorCQlkcyA9ICJTQVMgRGlzY292ZXJ5IEVycm9yIjsKKwkJYnJlYWs7CisKIAkvKgogCSAqICBNUFQgYmFzZSAiY3VzdG9tIiBldmVudHMgbWF5IGJlIGFkZGVkIGhlcmUuLi4KIAkgKi8KQEAgLTU0MjksNyArNTgyMCw3IEBACiAJCWRzID0gIlVua25vd24iOwogCQlicmVhazsKIAl9Ci0JcmV0dXJuIGRzOworCXN0cmNweShldlN0cixkcyk7CiB9CiAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KQEAgLTU0NTEsNyArNTg0Miw3IEBACiAJaW50IGlpOwogCWludCByID0gMDsKIAlpbnQgaGFuZGxlcnMgPSAwOwotCWNoYXIgKmV2U3RyOworCWNoYXIgZXZTdHJbMTAwXTsKIAl1OCBldmVudDsKIAogCS8qCkBAIC01NDY0LDcgKzU4NTUsNyBAQAogCQlldkRhdGEwID0gbGUzMl90b19jcHUocEV2ZW50UmVwbHktPkRhdGFbMF0pOwogCX0KIAotCWV2U3RyID0gRXZlbnREZXNjcmlwdGlvblN0cihldmVudCwgZXZEYXRhMCk7CisJRXZlbnREZXNjcmlwdGlvblN0cihldmVudCwgZXZEYXRhMCwgZXZTdHIpOwogCWRldnRwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgIk1QVCBldmVudCAoJXM9JTAyWGgpIGRldGVjdGVkIVxuIiwKIAkJCWlvYy0+bmFtZSwKIAkJCWV2U3RyLApAQCAtNTQ4MSwyMCArNTg3Miw2IEBACiAJICogIERvIGdlbmVyYWwgLyBiYXNlIGRyaXZlciBldmVudCBwcm9jZXNzaW5nCiAJICovCiAJc3dpdGNoKGV2ZW50KSB7Ci0JY2FzZSBNUElfRVZFTlRfTk9ORToJCQkvKiAwMCAqLwotCWNhc2UgTVBJX0VWRU5UX0xPR19EQVRBOgkJLyogMDEgKi8KLQljYXNlIE1QSV9FVkVOVF9TVEFURV9DSEFOR0U6CQkvKiAwMiAqLwotCWNhc2UgTVBJX0VWRU5UX1VOSVRfQVRURU5USU9OOgkJLyogMDMgKi8KLQljYXNlIE1QSV9FVkVOVF9JT0NfQlVTX1JFU0VUOgkJLyogMDQgKi8KLQljYXNlIE1QSV9FVkVOVF9FWFRfQlVTX1JFU0VUOgkJLyogMDUgKi8KLQljYXNlIE1QSV9FVkVOVF9SRVNDQU46CQkJLyogMDYgKi8KLQljYXNlIE1QSV9FVkVOVF9MSU5LX1NUQVRVU19DSEFOR0U6CS8qIDA3ICovCi0JY2FzZSBNUElfRVZFTlRfTE9PUF9TVEFURV9DSEFOR0U6CS8qIDA4ICovCi0JY2FzZSBNUElfRVZFTlRfTE9HT1VUOgkJCS8qIDA5ICovCi0JY2FzZSBNUElfRVZFTlRfSU5URUdSQVRFRF9SQUlEOgkJLyogMEIgKi8KLQljYXNlIE1QSV9FVkVOVF9TQ1NJX0RFVklDRV9TVEFUVVNfQ0hBTkdFOgkvKiAwQyAqLwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwogCWNhc2UgTVBJX0VWRU5UX0VWRU5UX0NIQU5HRToJCS8qIDBBICovCiAJCWlmIChldkRhdGFMZW4pIHsKIAkJCXU4IGV2U3RhdGUgPSBldkRhdGEwICYgMHhGRjsKQEAgLTU1MDcsNiArNTg4NCw4IEBACiAJCQl9CiAJCX0KIAkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCiAJLyoKQEAgLTU2NTMsNiArNjAzMiwxMTEgQEAKIAlwcmludGsoTVlJT0Nfc19JTkZPX0ZNVCAiTG9nSW5mbygweCUwOHgpOiBGL1c6ICVzXG4iLCBpb2MtPm5hbWUsIGxvZ19pbmZvLCBkZXNjKTsKIH0KIAorLyogc3RyaW5ncyBmb3Igc2FzIGxvZ2luZm8gKi8KKwlzdGF0aWMgY2hhciAqb3JpZ2luYXRvcl9zdHJbXSA9IHsKKwkJIklPUCIsCQkJCQkJLyogMDBoICovCisJCSJQTCIsCQkJCQkJLyogMDFoICovCisJCSJJUiIJCQkJCQkvKiAwMmggKi8KKwl9OworCXN0YXRpYyBjaGFyICppb3BfY29kZV9zdHJbXSA9IHsKKwkJTlVMTCwJCQkJCQkvKiAwMGggKi8KKwkJIkludmFsaWQgU0FTIEFkZHJlc3MiLAkJCQkvKiAwMWggKi8KKwkJTlVMTCwJCQkJCQkvKiAwMmggKi8KKwkJIkludmFsaWQgUGFnZSIsCQkJCQkvKiAwM2ggKi8KKwkJTlVMTCwJCQkJCQkvKiAwNGggKi8KKwkJIlRhc2sgVGVybWluYXRlZCIJCQkJLyogMDVoICovCisJfTsKKwlzdGF0aWMgY2hhciAqcGxfY29kZV9zdHJbXSA9IHsKKwkJTlVMTCwJCQkJCQkvKiAwMGggKi8KKwkJIk9wZW4gRmFpbHVyZSIsCQkJCQkvKiAwMWggKi8KKwkJIkludmFsaWQgU2NhdHRlciBHYXRoZXIgTGlzdCIsCQkJLyogMDJoICovCisJCSJXcm9uZyBSZWxhdGl2ZSBPZmZzZXQgb3IgRnJhbWUgTGVuZ3RoIiwJLyogMDNoICovCisJCSJGcmFtZSBUcmFuc2ZlciBFcnJvciIsCQkJCS8qIDA0aCAqLworCQkiVHJhbnNtaXQgRnJhbWUgQ29ubmVjdGVkIExvdyIsCQkJLyogMDVoICovCisJCSJTQVRBIE5vbi1OQ1EgUlcgRXJyb3IgQml0IFNldCIsCQkvKiAwNmggKi8KKwkJIlNBVEEgUmVhZCBMb2cgUmVjZWl2ZSBEYXRhIEVycm9yIiwJCS8qIDA3aCAqLworCQkiU0FUQSBOQ1EgRmFpbCBBbGwgQ29tbWFuZHMgQWZ0ZXIgRXJyb3IiLAkvKiAwOGggKi8KKwkJIlNBVEEgRXJyb3IgaW4gUmVjZWl2ZSBTZXQgRGV2aWNlIEJpdCBGSVMiLAkvKiAwOWggKi8KKwkJIlJlY2VpdmUgRnJhbWUgSW52YWxpZCBNZXNzYWdlIiwJCS8qIDBBaCAqLworCQkiUmVjZWl2ZSBDb250ZXh0IE1lc3NhZ2UgVmFsaWQgRXJyb3IiLAkJLyogMEJoICovCisJCSJSZWNlaXZlIEZyYW1lIEN1cnJlbnQgRnJhbWUgRXJyb3IiLAkJLyogMENoICovCisJCSJTQVRBIExpbmsgRG93biIsCQkJCS8qIDBEaCAqLworCQkiRGlzY292ZXJ5IFNBVEEgSW5pdCBXIElPUyIsCQkJLyogMEVoICovCisJCSJDb25maWcgSW52YWxpZCBQYWdlIiwJCQkJLyogMEZoICovCisJCSJEaXNjb3ZlcnkgU0FUQSBJbml0IFRpbWVvdXQiLAkJCS8qIDEwaCAqLworCQkiUmVzZXQiLAkJCQkJLyogMTFoICovCisJCSJBYm9ydCIsCQkJCQkvKiAxMmggKi8KKwkJIklPIE5vdCBZZXQgRXhlY3V0ZWQiLAkJCQkvKiAxM2ggKi8KKwkJIklPIEV4ZWN1dGVkIiwJCQkJCS8qIDE0aCAqLworCQlOVUxMLAkJCQkJCS8qIDE1aCAqLworCQlOVUxMLAkJCQkJCS8qIDE2aCAqLworCQlOVUxMLAkJCQkJCS8qIDE3aCAqLworCQlOVUxMLAkJCQkJCS8qIDE4aCAqLworCQlOVUxMLAkJCQkJCS8qIDE5aCAqLworCQlOVUxMLAkJCQkJCS8qIDFBaCAqLworCQlOVUxMLAkJCQkJCS8qIDFCaCAqLworCQlOVUxMLAkJCQkJCS8qIDFDaCAqLworCQlOVUxMLAkJCQkJCS8qIDFEaCAqLworCQlOVUxMLAkJCQkJCS8qIDFFaCAqLworCQlOVUxMLAkJCQkJCS8qIDFGaCAqLworCQkiRW5jbG9zdXJlIE1hbmFnZW1lbnQiCQkJCS8qIDIwaCAqLworCX07CisKKy8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KKy8qCisgKgltcHRfc2FzX2xvZ19pbmZvIC0gTG9nIGluZm9ybWF0aW9uIHJldHVybmVkIGZyb20gU0FTIElPQy4KKyAqCUBpb2M6IFBvaW50ZXIgdG8gTVBUX0FEQVBURVIgc3RydWN0dXJlCisgKglAbG9nX2luZm86IFUzMiBMb2dJbmZvIHJlcGx5IHdvcmQgZnJvbSB0aGUgSU9DCisgKgorICoJUmVmZXIgdG8gbHNpL21waV9sb2dfc2FzLmguCisgKi8KK3N0YXRpYyB2b2lkCittcHRfc2FzX2xvZ19pbmZvKE1QVF9BREFQVEVSICppb2MsIHUzMiBsb2dfaW5mbykKK3sKK3VuaW9uIGxvZ2luZm9fdHlwZSB7CisJdTMyCWxvZ2luZm87CisJc3RydWN0IHsKKwkJdTMyCXN1YmNvZGU6MTY7CisJCXUzMgljb2RlOjg7CisJCXUzMglvcmlnaW5hdG9yOjQ7CisJCXUzMglidXNfdHlwZTo0OworCX1kdzsKK307CisJdW5pb24gbG9naW5mb190eXBlIHNhc19sb2dpbmZvOworCWNoYXIgKmNvZGVfZGVzYyA9IE5VTEw7CisKKwlzYXNfbG9naW5mby5sb2dpbmZvID0gbG9nX2luZm87CisJaWYgKChzYXNfbG9naW5mby5kdy5idXNfdHlwZSAhPSAzIC8qU0FTKi8pICYmCisJICAgIChzYXNfbG9naW5mby5kdy5vcmlnaW5hdG9yIDwgc2l6ZW9mKG9yaWdpbmF0b3Jfc3RyKS9zaXplb2YoY2hhciopKSkKKwkJcmV0dXJuOworCWlmICgoc2FzX2xvZ2luZm8uZHcub3JpZ2luYXRvciA9PSAwIC8qSU9QKi8pICYmCisJICAgIChzYXNfbG9naW5mby5kdy5jb2RlIDwgc2l6ZW9mKGlvcF9jb2RlX3N0cikvc2l6ZW9mKGNoYXIqKSkpIHsKKwkJY29kZV9kZXNjID0gaW9wX2NvZGVfc3RyW3Nhc19sb2dpbmZvLmR3LmNvZGVdOworCX1lbHNlIGlmICgoc2FzX2xvZ2luZm8uZHcub3JpZ2luYXRvciA9PSAxIC8qUEwqLykgJiYKKwkgICAgKHNhc19sb2dpbmZvLmR3LmNvZGUgPCBzaXplb2YocGxfY29kZV9zdHIpL3NpemVvZihjaGFyKikgKSkgeworCQljb2RlX2Rlc2MgPSBwbF9jb2RlX3N0cltzYXNfbG9naW5mby5kdy5jb2RlXTsKKwl9CisKKwlpZiAoY29kZV9kZXNjICE9IE5VTEwpCisJCXByaW50ayhNWUlPQ19zX0lORk9fRk1UCisJCQkiTG9nSW5mbygweCUwOHgpOiBPcmlnaW5hdG9yPXslc30sIENvZGU9eyVzfSwiCisJCQkiIFN1YkNvZGUoMHglMDR4KVxuIiwKKwkJCWlvYy0+bmFtZSwKKwkJCWxvZ19pbmZvLAorCQkJb3JpZ2luYXRvcl9zdHJbc2FzX2xvZ2luZm8uZHcub3JpZ2luYXRvcl0sCisJCQljb2RlX2Rlc2MsCisJCQlzYXNfbG9naW5mby5kdy5zdWJjb2RlKTsKKwllbHNlCisJCXByaW50ayhNWUlPQ19zX0lORk9fRk1UCisJCQkiTG9nSW5mbygweCUwOHgpOiBPcmlnaW5hdG9yPXslc30sIENvZGU9KDB4JTAyeCksIgorCQkJIiBTdWJDb2RlKDB4JTA0eClcbiIsCisJCQlpb2MtPm5hbWUsCisJCQlsb2dfaW5mbywKKwkJCW9yaWdpbmF0b3Jfc3RyW3Nhc19sb2dpbmZvLmR3Lm9yaWdpbmF0b3JdLAorCQkJc2FzX2xvZ2luZm8uZHcuY29kZSwKKwkJCXNhc19sb2dpbmZvLmR3LnN1YmNvZGUpOworfQorCiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCiAvKgogICoJbXB0X3NwX2lvY19pbmZvIC0gSU9DIGluZm9ybWF0aW9uIHJldHVybmVkIGZyb20gU0NTSSBQYXJhbGxlbCBJT0MuCkBAIC01ODE0LDYgKzYyOTgsNyBAQAogRVhQT1JUX1NZTUJPTChtcHRfcmVhZF9pb2NfcGdfMyk7CiBFWFBPUlRfU1lNQk9MKG1wdF9hbGxvY19md19tZW1vcnkpOwogRVhQT1JUX1NZTUJPTChtcHRfZnJlZV9md19tZW1vcnkpOworRVhQT1JUX1NZTUJPTChtcHRiYXNlX3Nhc19wZXJzaXN0X29wZXJhdGlvbik7CiAKIAogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmggYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaAppbmRleCBmNDgyN2Q5Li43NTEwNTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaAorKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaApAQCAtNjUsNiArNjUsNyBAQAogI2luY2x1ZGUgImxzaS9tcGlfZmMuaCIJCS8qIEZpYnJlIENoYW5uZWwgKGxvd2xldmVsKSBzdXBwb3J0ICovCiAjaW5jbHVkZSAibHNpL21waV90YXJnLmgiCS8qIFNDU0kvRkNQIFRhcmdldCBwcm90Y29sIHN1cHBvcnQgKi8KICNpbmNsdWRlICJsc2kvbXBpX3Rvb2wuaCIJLyogVG9vbHMgc3VwcG9ydCAqLworI2luY2x1ZGUgImxzaS9tcGlfc2FzLmgiCS8qIFNBUyBzdXBwb3J0ICovCiAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KIApAQCAtNzYsOCArNzcsOCBAQAogI2RlZmluZSBDT1BZUklHSFQJIkNvcHlyaWdodCAoYykgMTk5OS0yMDA1ICIgTU9EVUxFQVVUSE9SCiAjZW5kaWYKIAotI2RlZmluZSBNUFRfTElOVVhfVkVSU0lPTl9DT01NT04JIjMuMDMuMDIiCi0jZGVmaW5lIE1QVF9MSU5VWF9QQUNLQUdFX05BTUUJCSJAKCMpbXB0bGludXgtMy4wMy4wMiIKKyNkZWZpbmUgTVBUX0xJTlVYX1ZFUlNJT05fQ09NTU9OCSIzLjAzLjAzIgorI2RlZmluZSBNUFRfTElOVVhfUEFDS0FHRV9OQU1FCQkiQCgjKW1wdGxpbnV4LTMuMDMuMDMiCiAjZGVmaW5lIFdIQVRfTUFHSUNfU1RSSU5HCQkiQCIgIigiICIjIiAiKSIKIAogI2RlZmluZSBzaG93X21wdG1vZF92ZXIocyx2ZXIpICBcCkBAIC00MjMsNyArNDI0LDcgQEAKIC8qCiAgKiAgRXZlbnQgU3RydWN0dXJlIGFuZCBkZWZpbmUKICAqLwotI2RlZmluZSBNUFRDVExfRVZFTlRfTE9HX1NJWkUJCSgweDAwMDAwMDBBKQorI2RlZmluZSBNUFRDVExfRVZFTlRfTE9HX1NJWkUJCSgweDAwMDAwMDAzMikKIHR5cGVkZWYgc3RydWN0IF9tcHRfaW9jdGxfZXZlbnRzIHsKIAl1MzIJZXZlbnQ7CQkvKiBTcGVjaWZpZWQgYnkgZGVmaW5lIGFib3ZlICovCiAJdTMyCWV2ZW50Q29udGV4dDsJLyogSW5kZXggb3IgY291bnRlciAqLwpAQCAtNDUxLDE2ICs0NTIsMTMgQEAKICNkZWZpbmUgTVBUX1NDU0lDRkdfQUxMX0lEUwkJMHgwMgkvKiBXcml0ZVNEUDEgdG8gYWxsIElEUyAqLwogLyogI2RlZmluZSBNUFRfU0NTSUNGR19CTEtfTkVHTwkJMHgxMAkgICBXcml0ZVNEUDEgd2l0aCBXRFRSIGFuZCBTRFRSIGRpc2FibGVkICovCiAKLXR5cGVkZWYJc3RydWN0IF9TY3NpQ2ZnRGF0YSB7Cit0eXBlZGVmCXN0cnVjdCBfU3BpQ2ZnRGF0YSB7CiAJdTMyCQkgUG9ydEZsYWdzOwogCWludAkJKm52cmFtOwkJCS8qIHRhYmxlIG9mIGRldmljZSBOVlJBTSB2YWx1ZXMgKi8KLQlJT0NQYWdlMl90CSpwSW9jUGcyOwkJLyogdGFibGUgb2YgUmFpZCBWb2x1bWVzICovCi0JSU9DUGFnZTNfdAkqcElvY1BnMzsJCS8qIHRhYmxlIG9mIHBoeXNpY2FsIGRpc2tzICovCiAJSU9DUGFnZTRfdAkqcElvY1BnNDsJCS8qIFNFUCBkZXZpY2VzIGFkZHJlc3NpbmcgKi8KIAlkbWFfYWRkcl90CSBJb2NQZzRfZG1hOwkJLyogUGh5cyBBZGRyIG9mIElPQ1BhZ2U0IGRhdGEgKi8KIAlpbnQJCSBJb2NQZzRTejsJCS8qIElPQ1BhZ2U0IHNpemUgKi8KIAl1OAkJIGR2U3RhdHVzW01QVF9NQVhfU0NTSV9ERVZJQ0VTXTsKLQlpbnQJCSBpc1JhaWQ7CQkvKiBiaXQgZmllbGQsIDEgaWYgUkFJRCAqLwogCXU4CQkgbWluU3luY0ZhY3RvcjsJCS8qIDB4RkYgaWYgYXN5bmMgKi8KIAl1OAkJIG1heFN5bmNPZmZzZXQ7CQkvKiAwIGlmIGFzeW5jICovCiAJdTgJCSBtYXhCdXNXaWR0aDsJCS8qIDAgaWYgbmFycm93LCAxIGlmIHdpZGUgKi8KQEAgLTQ3MiwxMCArNDcwLDI4IEBACiAJdTgJCSBkdlNjaGVkdWxlZDsJCS8qIDEgaWYgc2NoZWR1bGVkICovCiAJdTgJCSBmb3JjZUR2OwkJLyogMSB0byBmb3JjZSBEViBzY2hlZHVsaW5nICovCiAJdTgJCSBub1FhczsJCQkvKiBEaXNhYmxlIFFBUyBmb3IgdGhpcyBhZGFwdGVyICovCi0JdTgJCSBTYWZfVGU7CQkvKiAxIHRvIGZvcmNlIGFsbCBQcm9jZXNzb3JzIGFzIFNBRi1URSBpZiBJbnF1aXJ5IGRhdGEgbGVuZ3RoIGlzIHRvbyBzaG9ydCB0byBjaGVjayBmb3IgU0FGLVRFICovCisJdTgJCSBTYWZfVGU7CQkvKiAxIHRvIGZvcmNlIGFsbCBQcm9jZXNzb3JzIGFzCisJCQkJCQkgKiBTQUYtVEUgaWYgSW5xdWlyeSBkYXRhIGxlbmd0aAorCQkJCQkJICogaXMgdG9vIHNob3J0IHRvIGNoZWNrIGZvciBTQUYtVEUKKwkJCQkJCSAqLwogCXU4CQkgbXB0X2R2OwkJLyogY29tbWFuZCBsaW5lIG9wdGlvbjogZW5oYW5jZWQ9MSwgYmFzaWM9MCAqLworCXU4CQkgYnVzX3Jlc2V0OwkJLyogMSB0byBhbGxvdyBidXMgcmVzZXQgKi8KIAl1OAkJIHJzdmRbMV07Ci19IFNjc2lDZmdEYXRhOworfVNwaUNmZ0RhdGE7CisKK3R5cGVkZWYJc3RydWN0IF9TYXNDZmdEYXRhIHsKKwl1OAkJIHB0Q2xlYXI7CQkvKiAxIHRvIGF1dG9tYXRpY2FsbHkgY2xlYXIgdGhlCisJCQkJCQkgKiBwZXJzaXN0ZW50IHRhYmxlLgorCQkJCQkJICogMCB0byBkaXNhYmxlCisJCQkJCQkgKiBhdXRvbWF0aWMgY2xlYXJpbmcuCisJCQkJCQkgKi8KK31TYXNDZmdEYXRhOworCit0eXBlZGVmCXN0cnVjdCBfUmFpZENmZ0RhdGEgeworCUlPQ1BhZ2UyX3QJKnBJb2NQZzI7CQkvKiB0YWJsZSBvZiBSYWlkIFZvbHVtZXMgKi8KKwlJT0NQYWdlM190CSpwSW9jUGczOwkJLyogdGFibGUgb2YgcGh5c2ljYWwgZGlza3MgKi8KKwlpbnQJCSBpc1JhaWQ7CQkvKiBiaXQgZmllbGQsIDEgaWYgUkFJRCAqLworfVJhaWRDZmdEYXRhOwogCiAvKgogICogIEFkYXB0ZXIgU3RydWN0dXJlIC0gcGNpX2RldiBzcGVjaWZpYy4gTWF4aW11bTogTVBUX01BWF9BREFQVEVSUwpAQCAtNTMwLDExICs1NDYsMTYgQEAKIAl1OAkJCSpzZW5zZV9idWZfcG9vbDsKIAlkbWFfYWRkcl90CQkgc2Vuc2VfYnVmX3Bvb2xfZG1hOwogCXUzMgkJCSBzZW5zZV9idWZfbG93X2RtYTsKKwl1OAkJCSpIb3N0UGFnZUJ1ZmZlcjsgLyogU0FTIC0gaG9zdCBwYWdlIGJ1ZmZlciBzdXBwb3J0ICovCisJdTMyCQkJSG9zdFBhZ2VCdWZmZXJfc3o7CisJZG1hX2FkZHJfdAkJSG9zdFBhZ2VCdWZmZXJfZG1hOwogCWludAkJCSBtdHJyX3JlZzsKIAlzdHJ1Y3QgcGNpX2RldgkJKnBjaWRldjsJLyogc3RydWN0IHBjaV9kZXYgcG9pbnRlciAqLwogCXU4CQkJX19pb21lbSAqbWVtbWFwOwkvKiBtbWFwIGFkZHJlc3MgKi8KIAlzdHJ1Y3QgU2NzaV9Ib3N0CSpzaDsJCS8qIFNjc2kgSG9zdCBwb2ludGVyICovCi0JU2NzaUNmZ0RhdGEJCXNwaV9kYXRhOwkvKiBTY3NpIGNvbmZpZy4gZGF0YSAqLworCVNwaUNmZ0RhdGEJCXNwaV9kYXRhOwkvKiBTY3NpIGNvbmZpZy4gZGF0YSAqLworCVJhaWRDZmdEYXRhCQlyYWlkX2RhdGE7CS8qIFJhaWQgY29uZmlnLiBkYXRhICovCisJU2FzQ2ZnRGF0YQkJc2FzX2RhdGE7CS8qIFNhcyBjb25maWcuIGRhdGEgKi8KIAlNUFRfSU9DVEwJCSppb2N0bDsJCS8qIGlvY3RsIGRhdGEgcG9pbnRlciAqLwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeQkqaW9jX2RlbnRyeTsKIAlzdHJ1Y3QgX01QVF9BREFQVEVSCSphbHRfaW9jOwkvKiBwdHIgdG8gOTI5IGJvdW5kIGFkYXB0ZXIgcG9ydCAqLwpAQCAtNTU0LDMxICs1NzUsMzUgQEAKICNlbHNlCiAJdTMyCQkJIG1mY250OwogI2VuZGlmCi0JdTMyCQkJIE5CX2Zvcl82NF9ieXRlX2ZyYW1lOyAgICAgICAKKwl1MzIJCQkgTkJfZm9yXzY0X2J5dGVfZnJhbWU7CiAJdTMyCQkJIGhzX3JlcVtNUFRfTUFYX0ZSQU1FX1NJWkUvc2l6ZW9mKHUzMildOwogCXUxNgkJCSBoc19yZXBseVtNUFRfTUFYX0ZSQU1FX1NJWkUvc2l6ZW9mKHUxNildOwogCUlPQ0ZhY3RzUmVwbHlfdAkJIGZhY3RzOwogCVBvcnRGYWN0c1JlcGx5X3QJIHBmYWN0c1syXTsKIAlGQ1BvcnRQYWdlMF90CQkgZmNfcG9ydF9wYWdlMFsyXTsKKwlzdHJ1Y3QgdGltZXJfbGlzdAkgcGVyc2lzdF90aW1lcjsJLyogcGVyc2lzdCB0YWJsZSB0aW1lciAqLworCWludAkJCSBwZXJzaXN0X3dhaXRfZG9uZTsgLyogcGVyc2lzdCBjb21wbGV0aW9uIGZsYWcgKi8KKwl1OAkJCSBwZXJzaXN0X3JlcGx5X2ZyYW1lW01QVF9ERUZBVUxUX0ZSQU1FX1NJWkVdOyAvKiBwZXJzaXN0IHJlcGx5ICovCiAJTEFOUGFnZTBfdAkJIGxhbl9jbmZnX3BhZ2UwOwogCUxBTlBhZ2UxX3QJCSBsYW5fY25mZ19wYWdlMTsKLQkvKiAgCisJLyoKIAkgKiBEZXNjcmlwdGlvbjogZXJyYXRhX2ZsYWdfMTA2NAogCSAqIElmIGEgUENJWCByZWFkIG9jY3VycyB3aXRoaW4gMSBvciAyIGN5Y2xlcyBhZnRlciB0aGUgY2hpcCByZWNlaXZlcwogCSAqIGEgc3BsaXQgY29tcGxldGlvbiBmb3IgYSByZWFkIGRhdGEsIGFuIGludGVybmFsIGFkZHJlc3MgcG9pbnRlciBpbmNvcnJlY3RseQogCSAqIGluY3JlbWVudHMgYnkgMzIgYnl0ZXMKIAkgKi8KLQlpbnQJCQkgZXJyYXRhX2ZsYWdfMTA2NDsJCisJaW50CQkJIGVycmF0YV9mbGFnXzEwNjQ7CiAJdTgJCQkgRmlyc3RXaG9Jbml0OwogCXU4CQkJIHVwbG9hZF9mdzsJLyogSWYgc2V0LCBkbyBhIGZ3IHVwbG9hZCAqLwogCXU4CQkJIHJlbG9hZF9mdzsJLyogRm9yY2UgYSBGVyBSZWxvYWQgb24gbmV4dCByZXNldCAqLwotCXU4CQkJIE5CU2hpZnRGYWN0b3I7ICAvKiBOQiBTaGlmdCBGYWN0b3IgYmFzZWQgb24gQmxvY2sgU2l6ZSAoRmFjdHMpICAqLyAgICAgCisJdTgJCQkgTkJTaGlmdEZhY3RvcjsgIC8qIE5CIFNoaWZ0IEZhY3RvciBiYXNlZCBvbiBCbG9jayBTaXplIChGYWN0cykgICovCiAJdTgJCQkgcGFkMVs0XTsKIAlpbnQJCQkgRG9uZUN0eDsKIAlpbnQJCQkgVGFza0N0eDsKIAlpbnQJCQkgSW50ZXJuYWxDdHg7Ci0Jc3RydWN0IGxpc3RfaGVhZAkgbGlzdDsgCisJc3RydWN0IGxpc3RfaGVhZAkgbGlzdDsKIAlzdHJ1Y3QgbmV0X2RldmljZQkqbmV0ZGV2OworCXN0cnVjdCBsaXN0X2hlYWQJIHNhc190b3BvbG9neTsKIH0gTVBUX0FEQVBURVI7CiAKIC8qCkBAIC05NjQsNiArOTg5LDcgQEAKIGV4dGVybiB2b2lkCSBtcHRfZnJlZV9md19tZW1vcnkoTVBUX0FEQVBURVIgKmlvYyk7CiBleHRlcm4gaW50CSBtcHRfZmluZEltVm9sdW1lcyhNUFRfQURBUFRFUiAqaW9jKTsKIGV4dGVybiBpbnQJIG1wdF9yZWFkX2lvY19wZ18zKE1QVF9BREFQVEVSICppb2MpOworZXh0ZXJuIGludAkgbXB0YmFzZV9zYXNfcGVyc2lzdF9vcGVyYXRpb24oTVBUX0FEQVBURVIgKmlvYywgdTggcGVyc2lzdF9vcGNvZGUpOwogCiAvKgogICogIFB1YmxpYyBkYXRhIGRlY2wncy4uLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmMKaW5kZXggNzU3N2MyNC4uY2IyZDU5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGN0bC5jCkBAIC0xMzI2LDcgKzEzMjYsNyBAQAogCQkgKi8KIAkJaWYgKGhkICYmIGhkLT5UYXJnZXRzKSB7CiAJCQltcHRfZmluZEltVm9sdW1lcyhpb2MpOwotCQkJcElvYzIgPSBpb2MtPnNwaV9kYXRhLnBJb2NQZzI7CisJCQlwSW9jMiA9IGlvYy0+cmFpZF9kYXRhLnBJb2NQZzI7CiAJCQlmb3IgKCBpZCA9IDA7IGlkIDw9IG1heF9pZDsgKSB7CiAJCQkJaWYgKCBwSW9jMiAmJiBwSW9jMi0+TnVtQWN0aXZlVm9sdW1lcyApIHsKIAkJCQkJaWYgKCBpZCA9PSBwSW9jMi0+UmFpZFZvbHVtZVswXS5Wb2x1bWVJRCApIHsKQEAgLTEzNDgsNyArMTM0OCw3IEBACiAJCQkJCQktLW1heFdvcmRzTGVmdDsKIAkJCQkJCWdvdG8gbmV4dF9pZDsKIAkJCQkJfSBlbHNlIHsKLQkJCQkJCXBJb2MzID0gaW9jLT5zcGlfZGF0YS5wSW9jUGczOworCQkJCQkJcElvYzMgPSBpb2MtPnJhaWRfZGF0YS5wSW9jUGczOwogICAgICAgICAgICAgCQkJCQlmb3IgKCBqaiA9IDA7IGpqIDwgcElvYzMtPk51bVBoeXNEaXNrczsgamorKyApIHsKICAgICAgICAgICAgICAgICAgICAgCQkJCQlpZiAoIHBJb2MzLT5QaHlzRGlza1tqal0uUGh5c0Rpc2tJRCA9PSBpZCApCiAJCQkJCQkJCWdvdG8gbmV4dF9pZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0ZmMuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0ZmMuYwppbmRleCAxMzc3MWFiLi5hNjI4YmU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGZjLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRmYy5jCkBAIC0xODksNyArMTg5LDcgQEAKIAkJcHJpbnRrKE1ZSU9DX3NfV0FSTl9GTVQKIAkJCSJTa2lwcGluZyBpb2M9JXAgYmVjYXVzZSBTQ1NJIEluaXRpYXRvciBtb2RlIGlzIE5PVCBlbmFibGVkIVxuIiwKIAkJCWlvYy0+bmFtZSwgaW9jKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiAwOwogCX0KIAogCXNoID0gc2NzaV9ob3N0X2FsbG9jKCZtcHRmY19kcml2ZXJfdGVtcGxhdGUsIHNpemVvZihNUFRfU0NTSV9IT1NUKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGxhbi5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRsYW4uYwppbmRleCA1Mjc5NGJlLi5lZDNjODkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGxhbi5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0bGFuLmMKQEAgLTMxMiw3ICszMTIsMTIgQEAKIG1wdF9sYW5faW9jX3Jlc2V0KE1QVF9BREFQVEVSICppb2MsIGludCByZXNldF9waGFzZSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW9jLT5uZXRkZXY7Ci0Jc3RydWN0IG1wdF9sYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG1wdF9sYW5fcHJpdiAqcHJpdjsKKworCWlmIChkZXYgPT0gTlVMTCkKKwkJcmV0dXJuKDEpOworCWVsc2UKKwkJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKIAlkbHByaW50aygoS0VSTl9JTkZPIE1ZTkFNICI6IElPQyAlc19yZXNldCByb3V0ZWQgdG8gTEFOIGRyaXZlciFcbiIsCiAJCQlyZXNldF9waGFzZT09TVBUX0lPQ19TRVRVUF9SRVNFVCA/ICJzZXR1cCIgOiAoCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGUxOWE4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYwpAQCAtMCwwICsxLDEyMzkgQEAKKy8qCisgKiAgbGludXgvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYworICogICAgICBGb3IgdXNlIHdpdGggTFNJIExvZ2ljIFBDSSBjaGlwL2FkYXB0ZXIocykKKyAqICAgICAgcnVubmluZyBMU0kgTG9naWMgRnVzaW9uIE1QVCAoTWVzc2FnZSBQYXNzaW5nIFRlY2hub2xvZ3kpIGZpcm13YXJlLgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNSBMU0kgTG9naWMgQ29ycG9yYXRpb24KKyAqICAobWFpbHRvOm1wdF9saW51eF9kZXZlbG9wZXJAbHNpbC5jb20pCisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IERlbGwKKyAqLworLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLworLyoKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIE5PIFdBUlJBTlRZCisgICAgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SCisgICAgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQKKyAgICBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorICAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMKKyAgICBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kCisgICAgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzCisgICAgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgICAgdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwKKyAgICBwcm9ncmFtcyBvciBlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4KKworICAgIERJU0NMQUlNRVIgT0YgTElBQklMSVRZCisgICAgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkKKyAgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAgICBEQU1BR0VTIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORAorICAgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICAgIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKKyAgICBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQKKyAgICBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKy8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfc2FzLmg+CisKKyNpbmNsdWRlICJtcHRiYXNlLmgiCisjaW5jbHVkZSAibXB0c2NzaWguaCIKKworCisjZGVmaW5lIG15X05BTUUJCSJGdXNpb24gTVBUIFNBUyBIb3N0IGRyaXZlciIKKyNkZWZpbmUgbXlfVkVSU0lPTglNUFRfTElOVVhfVkVSU0lPTl9DT01NT04KKyNkZWZpbmUgTVlOQU0JCSJtcHRzYXMiCisKK01PRFVMRV9BVVRIT1IoTU9EVUxFQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihteV9OQU1FKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCBtcHRfcHFfZmlsdGVyOworbW9kdWxlX3BhcmFtKG1wdF9wcV9maWx0ZXIsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG1wdF9wcV9maWx0ZXIsCisJCSJFbmFibGUgcGVyaXBoZXJhbCBxdWFsaWZpZXIgZmlsdGVyOiBlbmFibGU9MSAgIgorCQkiKGRlZmF1bHQ9MCkiKTsKKworc3RhdGljIGludCBtcHRfcHRfY2xlYXI7Cittb2R1bGVfcGFyYW0obXB0X3B0X2NsZWFyLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtcHRfcHRfY2xlYXIsCisJCSJDbGVhciBwZXJzaXN0ZW5jeSB0YWJsZTogZW5hYmxlPTEgICIKKwkJIihkZWZhdWx0PU1QVFNDU0lIX1BUX0NMRUFSPTApIik7CisKK3N0YXRpYyBpbnQJbXB0c2FzRG9uZUN0eCA9IC0xOworc3RhdGljIGludAltcHRzYXNUYXNrQ3R4ID0gLTE7CitzdGF0aWMgaW50CW1wdHNhc0ludGVybmFsQ3R4ID0gLTE7IC8qIFVzZWQgb25seSBmb3IgaW50ZXJuYWwgY29tbWFuZHMgKi8KKworCisvKgorICogU0FTIHRvcG9sb2d5IHN0cnVjdHVyZXMKKyAqCisgKiBUaGUgTVBUIEZ1c2lvbiBmaXJtd2FyZSBpbnRlcmZhY2Ugc3ByZWFkcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAqIFNBUyB0b3BvbG9neSBvdmVyIG1hbnkgbWFudWZhY3R1cmUgcGFnZXMsIHRodXMgd2UgbmVlZCBzb21lIGRhdGEKKyAqIHN0cnVjdHVyZSB0byBjb2xsZWN0IGl0IGFuZCBwcm9jZXNzIGl0IGZvciB0aGUgU0FTIHRyYW5zcG9ydCBjbGFzcy4KKyAqLworCitzdHJ1Y3QgbXB0c2FzX2RldmluZm8geworCXUxNgloYW5kbGU7CQkvKiB1bmlxdWUgaWQgdG8gYWRkcmVzcyB0aGlzIGRldmljZSAqLworCXU4CXBoeV9pZDsJCS8qIHBoeSBudW1iZXIgb2YgcGFyZW50IGRldmljZSAqLworCXU4CXBvcnRfaWQ7CS8qIHNhcyBwaHlzaWNhbCBwb3J0IHRoaXMgZGV2aWNlCisJCQkJICAgaXMgYXNzb2MnZCB3aXRoICovCisJdTgJdGFyZ2V0OwkJLyogbG9naWNhbCB0YXJnZXQgaWQgb2YgdGhpcyBkZXZpY2UgKi8KKwl1OAlidXM7CQkvKiBsb2dpY2FsIGJ1cyBudW1iZXIgb2YgdGhpcyBkZXZpY2UgKi8KKwl1NjQJc2FzX2FkZHJlc3M7ICAgIC8qIFdXTiBvZiB0aGlzIGRldmljZSwKKwkJCQkgICBTQVRBIGlzIGFzc2lnbmVkIGJ5IEhCQSxleHBhbmRlciAqLworCXUzMglkZXZpY2VfaW5mbzsJLyogYml0ZmllbGQgZGV0YWlsZWQgaW5mbyBhYm91dCB0aGlzIGRldmljZSAqLworfTsKKworc3RydWN0IG1wdHNhc19waHlpbmZvIHsKKwl1OAlwaHlfaWQ7IAkJLyogcGh5IGluZGV4ICovCisJdTgJcG9ydF9pZDsgCQkvKiBwb3J0IG51bWJlciB0aGlzIHBoeSBpcyBwYXJ0IG9mICovCisJdTgJbmVnb3RpYXRlZF9saW5rX3JhdGU7CS8qIG5lZ28nZCBsaW5rIHJhdGUgZm9yIHRoaXMgcGh5ICovCisJdTgJaHdfbGlua19yYXRlOyAJCS8qIGhhcmR3YXJlIG1heC9taW4gcGh5cyBsaW5rIHJhdGUgKi8KKwl1OAlwcm9ncmFtbWVkX2xpbmtfcmF0ZTsJLyogcHJvZ3JhbW1lZCBtYXgvbWluIHBoeSBsaW5rIHJhdGUgKi8KKwlzdHJ1Y3QgbXB0c2FzX2RldmluZm8gaWRlbnRpZnk7CS8qIHBvaW50IHRvIHBoeSBkZXZpY2UgaW5mbyAqLworCXN0cnVjdCBtcHRzYXNfZGV2aW5mbyBhdHRhY2hlZDsJLyogcG9pbnQgdG8gYXR0YWNoZWQgZGV2aWNlIGluZm8gKi8KKwlzdHJ1Y3Qgc2FzX3JwaHkgKnJwaHk7Cit9OworCitzdHJ1Y3QgbXB0c2FzX3BvcnRpbmZvIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJdTE2CQloYW5kbGU7CQkvKiB1bmlxdWUgaWQgdG8gYWRkcmVzcyB0aGlzICovCisJdTgJCW51bV9waHlzOwkvKiBudW1iZXIgb2YgcGh5cyAqLworCXN0cnVjdCBtcHRzYXNfcGh5aW5mbyAqcGh5X2luZm87Cit9OworCisvKgorICogVGhpcyBpcyBwcmV0dHkgdWdseS4gIFdlIHdpbGwgYmUgYWJsZSB0byBzZXJpb3VzbHkgY2xlYW4gaXQgdXAKKyAqIG9uY2UgdGhlIERWIGNvZGUgaW4gbXB0c2NzaWggZ29lcyBhd2F5IGFuZCB3ZSBjYW4gcHJvcGVybHkKKyAqIGltcGxlbWVudCAtPnRhcmdldF9hbGxvYy4KKyAqLworc3RhdGljIGludAorbXB0c2FzX3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBTY3NpX0hvc3QJKmhvc3QgPSBkZXZpY2UtPmhvc3Q7CisJTVBUX1NDU0lfSE9TVAkJKmhkID0gKE1QVF9TQ1NJX0hPU1QgKilob3N0LT5ob3N0ZGF0YTsKKwlzdHJ1Y3Qgc2FzX3JwaHkJCSpycGh5OworCXN0cnVjdCBtcHRzYXNfcG9ydGluZm8JKnA7CisJVmlydERldmljZQkJKnZkZXY7CisJdWludAkJCXRhcmdldCA9IGRldmljZS0+aWQ7CisJaW50IGk7CisKKwlpZiAoKHZkZXYgPSBoZC0+VGFyZ2V0c1t0YXJnZXRdKSAhPSBOVUxMKQorCQlnb3RvIG91dDsKKworCXZkZXYgPSBrbWFsbG9jKHNpemVvZihWaXJ0RGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2ZGV2KSB7CisJCXByaW50ayhNWUlPQ19zX0VSUl9GTVQgInNsYXZlX2FsbG9jIGttYWxsb2MoJXpkKSBGQUlMRUQhXG4iLAorCQkJCWhkLT5pb2MtPm5hbWUsIHNpemVvZihWaXJ0RGV2aWNlKSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldCh2ZGV2LCAwLCBzaXplb2YoVmlydERldmljZSkpOworCXZkZXYtPnRmbGFncyA9IE1QVF9UQVJHRVRfRkxBR1NfUV9ZRVN8TVBUX1RBUkdFVF9GTEFHU19WQUxJRF9JTlFVSVJZOworCXZkZXYtPmlvY19pZCA9IGhkLT5pb2MtPmlkOworCisJcnBoeSA9IGRldl90b19ycGh5KGRldmljZS0+c2Rldl90YXJnZXQtPmRldi5wYXJlbnQpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmhkLT5pb2MtPnNhc190b3BvbG9neSwgbGlzdCkgeworCQlmb3IgKGkgPSAwOyBpIDwgcC0+bnVtX3BoeXM7IGkrKykgeworCQkJaWYgKHAtPnBoeV9pbmZvW2ldLmF0dGFjaGVkLnNhc19hZGRyZXNzID09CisJCQkJCXJwaHktPmlkZW50aWZ5LnNhc19hZGRyZXNzKSB7CisJCQkJdmRldi0+dGFyZ2V0X2lkID0KKwkJCQkJcC0+cGh5X2luZm9baV0uYXR0YWNoZWQudGFyZ2V0OworCQkJCXZkZXYtPmJ1c19pZCA9IHAtPnBoeV9pbmZvW2ldLmF0dGFjaGVkLmJ1czsKKwkJCQloZC0+VGFyZ2V0c1tkZXZpY2UtPmlkXSA9IHZkZXY7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKwl9CisKKwlwcmludGsoIk5vIG1hdGNoaW5nIFNBUyBkZXZpY2UgZm91bmQhIVxuIik7CisJa2ZyZWUodmRldik7CisJcmV0dXJuIC1FTk9ERVY7CisKKyBvdXQ6CisJdmRldi0+bnVtX2x1bnMrKzsKKwlkZXZpY2UtPmhvc3RkYXRhID0gdmRldjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgbXB0c2FzX2RyaXZlcl90ZW1wbGF0ZSA9IHsKKwkucHJvY19uYW1lCQkJPSAibXB0c2FzIiwKKwkucHJvY19pbmZvCQkJPSBtcHRzY3NpaF9wcm9jX2luZm8sCisJLm5hbWUJCQkJPSAiTVBUIFNQSSBIb3N0IiwKKwkuaW5mbwkJCQk9IG1wdHNjc2loX2luZm8sCisJLnF1ZXVlY29tbWFuZAkJCT0gbXB0c2NzaWhfcWNtZCwKKwkuc2xhdmVfYWxsb2MJCQk9IG1wdHNhc19zbGF2ZV9hbGxvYywKKwkuc2xhdmVfY29uZmlndXJlCQk9IG1wdHNjc2loX3NsYXZlX2NvbmZpZ3VyZSwKKwkuc2xhdmVfZGVzdHJveQkJCT0gbXB0c2NzaWhfc2xhdmVfZGVzdHJveSwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoIAkJPSBtcHRzY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmVoX2Fib3J0X2hhbmRsZXIJCT0gbXB0c2NzaWhfYWJvcnQsCisJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyCT0gbXB0c2NzaWhfZGV2X3Jlc2V0LAorCS5laF9idXNfcmVzZXRfaGFuZGxlcgkJPSBtcHRzY3NpaF9idXNfcmVzZXQsCisJLmVoX2hvc3RfcmVzZXRfaGFuZGxlcgkJPSBtcHRzY3NpaF9ob3N0X3Jlc2V0LAorCS5iaW9zX3BhcmFtCQkJPSBtcHRzY3NpaF9iaW9zX3BhcmFtLAorCS5jYW5fcXVldWUJCQk9IE1QVF9GQ19DQU5fUVVFVUUsCisJLnRoaXNfaWQJCQk9IC0xLAorCS5zZ190YWJsZXNpemUJCQk9IE1QVF9TQ1NJX1NHX0RFUFRILAorCS5tYXhfc2VjdG9ycwkJCT0gODE5MiwKKwkuY21kX3Blcl9sdW4JCQk9IDcsCisJLnVzZV9jbHVzdGVyaW5nCQkJPSBFTkFCTEVfQ0xVU1RFUklORywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2FzX2Z1bmN0aW9uX3RlbXBsYXRlIG1wdHNhc190cmFuc3BvcnRfZnVuY3Rpb25zID0geworfTsKKworc3RhdGljIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqbXB0c2FzX3RyYW5zcG9ydF90ZW1wbGF0ZTsKKworI2lmZGVmIFNBU0RFQlVHCitzdGF0aWMgdm9pZCBtcHRzYXNfcHJpbnRfcGh5X2RhdGEoTVBJX1NBU19JT19VTklUMF9QSFlfREFUQSAqcGh5X2RhdGEpCit7CisJcHJpbnRrKCItLS0tIElPIFVOSVQgUEFHRSAwIC0tLS0tLS0tLS0tLVxuIik7CisJcHJpbnRrKCJIYW5kbGU9MHglWFxuIiwKKwkJbGUxNl90b19jcHUocGh5X2RhdGEtPkF0dGFjaGVkRGV2aWNlSGFuZGxlKSk7CisJcHJpbnRrKCJDb250cm9sbGVyIEhhbmRsZT0weCVYXG4iLAorCQlsZTE2X3RvX2NwdShwaHlfZGF0YS0+Q29udHJvbGxlckRldkhhbmRsZSkpOworCXByaW50aygiUG9ydD0weCVYXG4iLCBwaHlfZGF0YS0+UG9ydCk7CisJcHJpbnRrKCJQb3J0IEZsYWdzPTB4JVhcbiIsIHBoeV9kYXRhLT5Qb3J0RmxhZ3MpOworCXByaW50aygiUEhZIEZsYWdzPTB4JVhcbiIsIHBoeV9kYXRhLT5QaHlGbGFncyk7CisJcHJpbnRrKCJOZWdvdGlhdGVkIExpbmsgUmF0ZT0weCVYXG4iLCBwaHlfZGF0YS0+TmVnb3RpYXRlZExpbmtSYXRlKTsKKwlwcmludGsoIkNvbnRyb2xsZXIgUEhZIERldmljZSBJbmZvPTB4JVhcbiIsCisJCWxlMzJfdG9fY3B1KHBoeV9kYXRhLT5Db250cm9sbGVyUGh5RGV2aWNlSW5mbykpOworCXByaW50aygiRGlzY292ZXJ5U3RhdHVzPTB4JVhcbiIsCisJCWxlMzJfdG9fY3B1KHBoeV9kYXRhLT5EaXNjb3ZlcnlTdGF0dXMpKTsKKwlwcmludGsoIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIG1wdHNhc19wcmludF9waHlfcGcwKFNhc1BoeVBhZ2UwX3QgKnBnMCkKK3sKKwlfX2xlNjQgc2FzX2FkZHJlc3M7CisKKwltZW1jcHkoJnNhc19hZGRyZXNzLCAmcGcwLT5TQVNBZGRyZXNzLCBzaXplb2YoX19sZTY0KSk7CisKKwlwcmludGsoIi0tLS0gU0FTIFBIWSBQQUdFIDAgLS0tLS0tLS0tLS0tXG4iKTsKKwlwcmludGsoIkF0dGFjaGVkIERldmljZSBIYW5kbGU9MHglWFxuIiwKKwkJCWxlMTZfdG9fY3B1KHBnMC0+QXR0YWNoZWREZXZIYW5kbGUpKTsKKwlwcmludGsoIlNBUyBBZGRyZXNzPTB4JWxsWFxuIiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUoc2FzX2FkZHJlc3MpKTsKKwlwcmludGsoIkF0dGFjaGVkIFBIWSBJZGVudGlmaWVyPTB4JVhcbiIsIHBnMC0+QXR0YWNoZWRQaHlJZGVudGlmaWVyKTsKKwlwcmludGsoIkF0dGFjaGVkIERldmljZSBJbmZvPTB4JVhcbiIsCisJCQlsZTMyX3RvX2NwdShwZzAtPkF0dGFjaGVkRGV2aWNlSW5mbykpOworCXByaW50aygiUHJvZ3JhbW1lZCBMaW5rIFJhdGU9MHglWFxuIiwgcGcwLT5Qcm9ncmFtbWVkTGlua1JhdGUpOworCXByaW50aygiQ2hhbmdlIENvdW50PTB4JVhcbiIsIHBnMC0+Q2hhbmdlQ291bnQpOworCXByaW50aygiUEhZIEluZm89MHglWFxuIiwgbGUzMl90b19jcHUocGcwLT5QaHlJbmZvKSk7CisJcHJpbnRrKCJcbiIpOworfQorCitzdGF0aWMgdm9pZCBtcHRzYXNfcHJpbnRfZGV2aWNlX3BnMChTYXNEZXZpY2VQYWdlMF90ICpwZzApCit7CisJX19sZTY0IHNhc19hZGRyZXNzOworCisJbWVtY3B5KCZzYXNfYWRkcmVzcywgJnBnMC0+U0FTQWRkcmVzcywgc2l6ZW9mKF9fbGU2NCkpOworCisJcHJpbnRrKCItLS0tIFNBUyBERVZJQ0UgUEFHRSAwIC0tLS0tLS0tLVxuIik7CisJcHJpbnRrKCJIYW5kbGU9MHglWFxuIiAsbGUxNl90b19jcHUocGcwLT5EZXZIYW5kbGUpKTsKKwlwcmludGsoIkVuY2xvc3VyZSBIYW5kbGU9MHglWFxuIiwgbGUxNl90b19jcHUocGcwLT5FbmNsb3N1cmVIYW5kbGUpKTsKKwlwcmludGsoIlNsb3Q9MHglWFxuIiwgbGUxNl90b19jcHUocGcwLT5TbG90KSk7CisJcHJpbnRrKCJTQVMgQWRkcmVzcz0weCVsbFhcbiIsIGxlNjRfdG9fY3B1KHNhc19hZGRyZXNzKSk7CisJcHJpbnRrKCJUYXJnZXQgSUQ9MHglWFxuIiwgcGcwLT5UYXJnZXRJRCk7CisJcHJpbnRrKCJCdXM9MHglWFxuIiwgcGcwLT5CdXMpOworCXByaW50aygiUGFyZW50IFBoeSBOdW09MHglWFxuIiwgcGcwLT5QaHlOdW0pOworCXByaW50aygiQWNjZXNzIFN0YXR1cz0weCVYXG4iLCBsZTE2X3RvX2NwdShwZzAtPkFjY2Vzc1N0YXR1cykpOworCXByaW50aygiRGV2aWNlIEluZm89MHglWFxuIiwgbGUzMl90b19jcHUocGcwLT5EZXZpY2VJbmZvKSk7CisJcHJpbnRrKCJGbGFncz0weCVYXG4iLCBsZTE2X3RvX2NwdShwZzAtPkZsYWdzKSk7CisJcHJpbnRrKCJQaHlzaWNhbCBQb3J0PTB4JVhcbiIsIHBnMC0+UGh5c2ljYWxQb3J0KTsKKwlwcmludGsoIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIG1wdHNhc19wcmludF9leHBhbmRlcl9wZzEoU2FzRXhwYW5kZXJQYWdlMV90ICpwZzEpCit7CisJcHJpbnRrKCItLS0tIFNBUyBFWFBBTkRFUiBQQUdFIDEgLS0tLS0tLS0tLS0tXG4iKTsKKworCXByaW50aygiUGh5c2ljYWwgUG9ydD0weCVYXG4iLCBwZzEtPlBoeXNpY2FsUG9ydCk7CisJcHJpbnRrKCJQSFkgSWRlbnRpZmllcj0weCVYXG4iLCBwZzEtPlBoeUlkZW50aWZpZXIpOworCXByaW50aygiTmVnb3RpYXRlZCBMaW5rIFJhdGU9MHglWFxuIiwgcGcxLT5OZWdvdGlhdGVkTGlua1JhdGUpOworCXByaW50aygiUHJvZ3JhbW1lZCBMaW5rIFJhdGU9MHglWFxuIiwgcGcxLT5Qcm9ncmFtbWVkTGlua1JhdGUpOworCXByaW50aygiSGFyZHdhcmUgTGluayBSYXRlPTB4JVhcbiIsIHBnMS0+SHdMaW5rUmF0ZSk7CisJcHJpbnRrKCJPd25lciBEZXZpY2UgSGFuZGxlPTB4JVhcbiIsCisJCQlsZTE2X3RvX2NwdShwZzEtPk93bmVyRGV2SGFuZGxlKSk7CisJcHJpbnRrKCJBdHRhY2hlZCBEZXZpY2UgSGFuZGxlPTB4JVhcbiIsCisJCQlsZTE2X3RvX2NwdShwZzEtPkF0dGFjaGVkRGV2SGFuZGxlKSk7Cit9CisjZWxzZQorI2RlZmluZSBtcHRzYXNfcHJpbnRfcGh5X2RhdGEocGh5X2RhdGEpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIG1wdHNhc19wcmludF9waHlfcGcwKHBnMCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbXB0c2FzX3ByaW50X2RldmljZV9wZzAocGcwKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBtcHRzYXNfcHJpbnRfZXhwYW5kZXJfcGcxKHBnMSkJCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCitzdGF0aWMgaW50CittcHRzYXNfc2FzX2lvX3VuaXRfcGcwKE1QVF9BREFQVEVSICppb2MsIHN0cnVjdCBtcHRzYXNfcG9ydGluZm8gKnBvcnRfaW5mbykKK3sKKwlDb25maWdFeHRlbmRlZFBhZ2VIZWFkZXJfdCBoZHI7CisJQ09ORklHUEFSTVMgY2ZnOworCVNhc0lPVW5pdFBhZ2UwX3QgKmJ1ZmZlcjsKKwlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CisJaW50IGVycm9yLCBpOworCisJaGRyLlBhZ2VWZXJzaW9uID0gTVBJX1NBU0lPVU5JVFBBR0UwX1BBR0VWRVJTSU9OOworCWhkci5FeHRQYWdlTGVuZ3RoID0gMDsKKwloZHIuUGFnZU51bWJlciA9IDA7CisJaGRyLlJlc2VydmVkMSA9IDA7CisJaGRyLlJlc2VydmVkMiA9IDA7CisJaGRyLlBhZ2VUeXBlID0gTVBJX0NPTkZJR19QQUdFVFlQRV9FWFRFTkRFRDsKKwloZHIuRXh0UGFnZVR5cGUgPSBNUElfQ09ORklHX0VYVFBBR0VUWVBFX1NBU19JT19VTklUOworCisJY2ZnLmNmZ2hkci5laGRyID0gJmhkcjsKKwljZmcucGh5c0FkZHIgPSAtMTsKKwljZmcucGFnZUFkZHIgPSAwOworCWNmZy5hY3Rpb24gPSBNUElfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKKwljZmcuZGlyID0gMDsJLyogcmVhZCAqLworCWNmZy50aW1lb3V0ID0gMTA7CisKKwllcnJvciA9IG1wdF9jb25maWcoaW9jLCAmY2ZnKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0OworCWlmICghaGRyLkV4dFBhZ2VMZW5ndGgpIHsKKwkJZXJyb3IgPSAtRU5YSU87CisJCWdvdG8gb3V0OworCX0KKworCWJ1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGlvYy0+cGNpZGV2LCBoZHIuRXh0UGFnZUxlbmd0aCAqIDQsCisJCQkJCSAgICAmZG1hX2hhbmRsZSk7CisJaWYgKCFidWZmZXIpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwljZmcucGh5c0FkZHIgPSBkbWFfaGFuZGxlOworCWNmZy5hY3Rpb24gPSBNUElfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKKworCWVycm9yID0gbXB0X2NvbmZpZyhpb2MsICZjZmcpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfZnJlZV9jb25zaXN0ZW50OworCisJcG9ydF9pbmZvLT5udW1fcGh5cyA9IGJ1ZmZlci0+TnVtUGh5czsKKwlwb3J0X2luZm8tPnBoeV9pbmZvID0ga2NhbGxvYyhwb3J0X2luZm8tPm51bV9waHlzLAorCQlzaXplb2Yoc3RydWN0IG1wdHNhc19waHlpbmZvKSxHRlBfS0VSTkVMKTsKKwlpZiAoIXBvcnRfaW5mby0+cGh5X2luZm8pIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlX2NvbnNpc3RlbnQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHBvcnRfaW5mby0+bnVtX3BoeXM7IGkrKykgeworCQltcHRzYXNfcHJpbnRfcGh5X2RhdGEoJmJ1ZmZlci0+UGh5RGF0YVtpXSk7CisJCXBvcnRfaW5mby0+cGh5X2luZm9baV0ucGh5X2lkID0gaTsKKwkJcG9ydF9pbmZvLT5waHlfaW5mb1tpXS5wb3J0X2lkID0KKwkJICAgIGJ1ZmZlci0+UGh5RGF0YVtpXS5Qb3J0OworCQlwb3J0X2luZm8tPnBoeV9pbmZvW2ldLm5lZ290aWF0ZWRfbGlua19yYXRlID0KKwkJICAgIGJ1ZmZlci0+UGh5RGF0YVtpXS5OZWdvdGlhdGVkTGlua1JhdGU7CisJfQorCisgb3V0X2ZyZWVfY29uc2lzdGVudDoKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGlvYy0+cGNpZGV2LCBoZHIuRXh0UGFnZUxlbmd0aCAqIDQsCisJCQkgICAgYnVmZmVyLCBkbWFfaGFuZGxlKTsKKyBvdXQ6CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50CittcHRzYXNfc2FzX3BoeV9wZzAoTVBUX0FEQVBURVIgKmlvYywgc3RydWN0IG1wdHNhc19waHlpbmZvICpwaHlfaW5mbywKKwkJdTMyIGZvcm0sIHUzMiBmb3JtX3NwZWNpZmljKQoreworCUNvbmZpZ0V4dGVuZGVkUGFnZUhlYWRlcl90IGhkcjsKKwlDT05GSUdQQVJNUyBjZmc7CisJU2FzUGh5UGFnZTBfdCAqYnVmZmVyOworCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKKwlpbnQgZXJyb3I7CisKKwloZHIuUGFnZVZlcnNpb24gPSBNUElfU0FTUEhZMF9QQUdFVkVSU0lPTjsKKwloZHIuRXh0UGFnZUxlbmd0aCA9IDA7CisJaGRyLlBhZ2VOdW1iZXIgPSAwOworCWhkci5SZXNlcnZlZDEgPSAwOworCWhkci5SZXNlcnZlZDIgPSAwOworCWhkci5QYWdlVHlwZSA9IE1QSV9DT05GSUdfUEFHRVRZUEVfRVhURU5ERUQ7CisJaGRyLkV4dFBhZ2VUeXBlID0gTVBJX0NPTkZJR19FWFRQQUdFVFlQRV9TQVNfUEhZOworCisJY2ZnLmNmZ2hkci5laGRyID0gJmhkcjsKKwljZmcuZGlyID0gMDsJLyogcmVhZCAqLworCWNmZy50aW1lb3V0ID0gMTA7CisKKwkvKiBHZXQgUGh5IFBnIDAgZm9yIGVhY2ggUGh5LiAqLworCWNmZy5waHlzQWRkciA9IC0xOworCWNmZy5wYWdlQWRkciA9IGZvcm0gKyBmb3JtX3NwZWNpZmljOworCWNmZy5hY3Rpb24gPSBNUElfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKKworCWVycm9yID0gbXB0X2NvbmZpZyhpb2MsICZjZmcpOworCWlmIChlcnJvcikKKwkJZ290byBvdXQ7CisKKwlpZiAoIWhkci5FeHRQYWdlTGVuZ3RoKSB7CisJCWVycm9yID0gLUVOWElPOworCQlnb3RvIG91dDsKKwl9CisKKwlidWZmZXIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChpb2MtPnBjaWRldiwgaGRyLkV4dFBhZ2VMZW5ndGggKiA0LAorCQkJCSAgICAgICZkbWFfaGFuZGxlKTsKKwlpZiAoIWJ1ZmZlcikgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWNmZy5waHlzQWRkciA9IGRtYV9oYW5kbGU7CisJY2ZnLmFjdGlvbiA9IE1QSV9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOworCisJZXJyb3IgPSBtcHRfY29uZmlnKGlvYywgJmNmZyk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9mcmVlX2NvbnNpc3RlbnQ7CisKKwltcHRzYXNfcHJpbnRfcGh5X3BnMChidWZmZXIpOworCisJcGh5X2luZm8tPmh3X2xpbmtfcmF0ZSA9IGJ1ZmZlci0+SHdMaW5rUmF0ZTsKKwlwaHlfaW5mby0+cHJvZ3JhbW1lZF9saW5rX3JhdGUgPSBidWZmZXItPlByb2dyYW1tZWRMaW5rUmF0ZTsKKwlwaHlfaW5mby0+aWRlbnRpZnkuaGFuZGxlID0gbGUxNl90b19jcHUoYnVmZmVyLT5Pd25lckRldkhhbmRsZSk7CisJcGh5X2luZm8tPmF0dGFjaGVkLmhhbmRsZSA9IGxlMTZfdG9fY3B1KGJ1ZmZlci0+QXR0YWNoZWREZXZIYW5kbGUpOworCisgb3V0X2ZyZWVfY29uc2lzdGVudDoKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGlvYy0+cGNpZGV2LCBoZHIuRXh0UGFnZUxlbmd0aCAqIDQsCisJCQkgICAgYnVmZmVyLCBkbWFfaGFuZGxlKTsKKyBvdXQ6CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50CittcHRzYXNfc2FzX2RldmljZV9wZzAoTVBUX0FEQVBURVIgKmlvYywgc3RydWN0IG1wdHNhc19kZXZpbmZvICpkZXZpY2VfaW5mbywKKwkJdTMyIGZvcm0sIHUzMiBmb3JtX3NwZWNpZmljKQoreworCUNvbmZpZ0V4dGVuZGVkUGFnZUhlYWRlcl90IGhkcjsKKwlDT05GSUdQQVJNUyBjZmc7CisJU2FzRGV2aWNlUGFnZTBfdCAqYnVmZmVyOworCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKKwlfX2xlNjQgc2FzX2FkZHJlc3M7CisJaW50IGVycm9yOworCisJaGRyLlBhZ2VWZXJzaW9uID0gTVBJX1NBU0RFVklDRTBfUEFHRVZFUlNJT047CisJaGRyLkV4dFBhZ2VMZW5ndGggPSAwOworCWhkci5QYWdlTnVtYmVyID0gMDsKKwloZHIuUmVzZXJ2ZWQxID0gMDsKKwloZHIuUmVzZXJ2ZWQyID0gMDsKKwloZHIuUGFnZVR5cGUgPSBNUElfQ09ORklHX1BBR0VUWVBFX0VYVEVOREVEOworCWhkci5FeHRQYWdlVHlwZSA9IE1QSV9DT05GSUdfRVhUUEFHRVRZUEVfU0FTX0RFVklDRTsKKworCWNmZy5jZmdoZHIuZWhkciA9ICZoZHI7CisJY2ZnLnBhZ2VBZGRyID0gZm9ybSArIGZvcm1fc3BlY2lmaWM7CisJY2ZnLnBoeXNBZGRyID0gLTE7CisJY2ZnLmFjdGlvbiA9IE1QSV9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOworCWNmZy5kaXIgPSAwOwkvKiByZWFkICovCisJY2ZnLnRpbWVvdXQgPSAxMDsKKworCWVycm9yID0gbXB0X2NvbmZpZyhpb2MsICZjZmcpOworCWlmIChlcnJvcikKKwkJZ290byBvdXQ7CisJaWYgKCFoZHIuRXh0UGFnZUxlbmd0aCkgeworCQllcnJvciA9IC1FTlhJTzsKKwkJZ290byBvdXQ7CisJfQorCisJYnVmZmVyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaW9jLT5wY2lkZXYsIGhkci5FeHRQYWdlTGVuZ3RoICogNCwKKwkJCQkgICAgICAmZG1hX2hhbmRsZSk7CisJaWYgKCFidWZmZXIpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwljZmcucGh5c0FkZHIgPSBkbWFfaGFuZGxlOworCWNmZy5hY3Rpb24gPSBNUElfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKKworCWVycm9yID0gbXB0X2NvbmZpZyhpb2MsICZjZmcpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfZnJlZV9jb25zaXN0ZW50OworCisJbXB0c2FzX3ByaW50X2RldmljZV9wZzAoYnVmZmVyKTsKKworCWRldmljZV9pbmZvLT5oYW5kbGUgPSBsZTE2X3RvX2NwdShidWZmZXItPkRldkhhbmRsZSk7CisJZGV2aWNlX2luZm8tPnBoeV9pZCA9IGJ1ZmZlci0+UGh5TnVtOworCWRldmljZV9pbmZvLT5wb3J0X2lkID0gYnVmZmVyLT5QaHlzaWNhbFBvcnQ7CisJZGV2aWNlX2luZm8tPnRhcmdldCA9IGJ1ZmZlci0+VGFyZ2V0SUQ7CisJZGV2aWNlX2luZm8tPmJ1cyA9IGJ1ZmZlci0+QnVzOworCW1lbWNweSgmc2FzX2FkZHJlc3MsICZidWZmZXItPlNBU0FkZHJlc3MsIHNpemVvZihfX2xlNjQpKTsKKwlkZXZpY2VfaW5mby0+c2FzX2FkZHJlc3MgPSBsZTY0X3RvX2NwdShzYXNfYWRkcmVzcyk7CisJZGV2aWNlX2luZm8tPmRldmljZV9pbmZvID0KKwkgICAgbGUzMl90b19jcHUoYnVmZmVyLT5EZXZpY2VJbmZvKTsKKworIG91dF9mcmVlX2NvbnNpc3RlbnQ6CisJcGNpX2ZyZWVfY29uc2lzdGVudChpb2MtPnBjaWRldiwgaGRyLkV4dFBhZ2VMZW5ndGggKiA0LAorCQkJICAgIGJ1ZmZlciwgZG1hX2hhbmRsZSk7Cisgb3V0OgorCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludAorbXB0c2FzX3Nhc19leHBhbmRlcl9wZzAoTVBUX0FEQVBURVIgKmlvYywgc3RydWN0IG1wdHNhc19wb3J0aW5mbyAqcG9ydF9pbmZvLAorCQl1MzIgZm9ybSwgdTMyIGZvcm1fc3BlY2lmaWMpCit7CisJQ29uZmlnRXh0ZW5kZWRQYWdlSGVhZGVyX3QgaGRyOworCUNPTkZJR1BBUk1TIGNmZzsKKwlTYXNFeHBhbmRlclBhZ2UwX3QgKmJ1ZmZlcjsKKwlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CisJaW50IGVycm9yOworCisJaGRyLlBhZ2VWZXJzaW9uID0gTVBJX1NBU0VYUEFOREVSMF9QQUdFVkVSU0lPTjsKKwloZHIuRXh0UGFnZUxlbmd0aCA9IDA7CisJaGRyLlBhZ2VOdW1iZXIgPSAwOworCWhkci5SZXNlcnZlZDEgPSAwOworCWhkci5SZXNlcnZlZDIgPSAwOworCWhkci5QYWdlVHlwZSA9IE1QSV9DT05GSUdfUEFHRVRZUEVfRVhURU5ERUQ7CisJaGRyLkV4dFBhZ2VUeXBlID0gTVBJX0NPTkZJR19FWFRQQUdFVFlQRV9TQVNfRVhQQU5ERVI7CisKKwljZmcuY2ZnaGRyLmVoZHIgPSAmaGRyOworCWNmZy5waHlzQWRkciA9IC0xOworCWNmZy5wYWdlQWRkciA9IGZvcm0gKyBmb3JtX3NwZWNpZmljOworCWNmZy5hY3Rpb24gPSBNUElfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKKwljZmcuZGlyID0gMDsJLyogcmVhZCAqLworCWNmZy50aW1lb3V0ID0gMTA7CisKKwllcnJvciA9IG1wdF9jb25maWcoaW9jLCAmY2ZnKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0OworCisJaWYgKCFoZHIuRXh0UGFnZUxlbmd0aCkgeworCQllcnJvciA9IC1FTlhJTzsKKwkJZ290byBvdXQ7CisJfQorCisJYnVmZmVyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaW9jLT5wY2lkZXYsIGhkci5FeHRQYWdlTGVuZ3RoICogNCwKKwkJCQkgICAgICAmZG1hX2hhbmRsZSk7CisJaWYgKCFidWZmZXIpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwljZmcucGh5c0FkZHIgPSBkbWFfaGFuZGxlOworCWNmZy5hY3Rpb24gPSBNUElfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKKworCWVycm9yID0gbXB0X2NvbmZpZyhpb2MsICZjZmcpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfZnJlZV9jb25zaXN0ZW50OworCisJLyogc2F2ZSBjb25maWcgZGF0YSAqLworCXBvcnRfaW5mby0+bnVtX3BoeXMgPSBidWZmZXItPk51bVBoeXM7CisJcG9ydF9pbmZvLT5oYW5kbGUgPSBsZTE2X3RvX2NwdShidWZmZXItPkRldkhhbmRsZSk7CisJcG9ydF9pbmZvLT5waHlfaW5mbyA9IGtjYWxsb2MocG9ydF9pbmZvLT5udW1fcGh5cywKKwkJc2l6ZW9mKHN0cnVjdCBtcHRzYXNfcGh5aW5mbyksR0ZQX0tFUk5FTCk7CisJaWYgKCFwb3J0X2luZm8tPnBoeV9pbmZvKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZV9jb25zaXN0ZW50OworCX0KKworIG91dF9mcmVlX2NvbnNpc3RlbnQ6CisJcGNpX2ZyZWVfY29uc2lzdGVudChpb2MtPnBjaWRldiwgaGRyLkV4dFBhZ2VMZW5ndGggKiA0LAorCQkJICAgIGJ1ZmZlciwgZG1hX2hhbmRsZSk7Cisgb3V0OgorCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludAorbXB0c2FzX3Nhc19leHBhbmRlcl9wZzEoTVBUX0FEQVBURVIgKmlvYywgc3RydWN0IG1wdHNhc19waHlpbmZvICpwaHlfaW5mbywKKwkJdTMyIGZvcm0sIHUzMiBmb3JtX3NwZWNpZmljKQoreworCUNvbmZpZ0V4dGVuZGVkUGFnZUhlYWRlcl90IGhkcjsKKwlDT05GSUdQQVJNUyBjZmc7CisJU2FzRXhwYW5kZXJQYWdlMV90ICpidWZmZXI7CisJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOworCWludCBlcnJvcjsKKworCWhkci5QYWdlVmVyc2lvbiA9IE1QSV9TQVNFWFBBTkRFUjBfUEFHRVZFUlNJT047CisJaGRyLkV4dFBhZ2VMZW5ndGggPSAwOworCWhkci5QYWdlTnVtYmVyID0gMTsKKwloZHIuUmVzZXJ2ZWQxID0gMDsKKwloZHIuUmVzZXJ2ZWQyID0gMDsKKwloZHIuUGFnZVR5cGUgPSBNUElfQ09ORklHX1BBR0VUWVBFX0VYVEVOREVEOworCWhkci5FeHRQYWdlVHlwZSA9IE1QSV9DT05GSUdfRVhUUEFHRVRZUEVfU0FTX0VYUEFOREVSOworCisJY2ZnLmNmZ2hkci5laGRyID0gJmhkcjsKKwljZmcucGh5c0FkZHIgPSAtMTsKKwljZmcucGFnZUFkZHIgPSBmb3JtICsgZm9ybV9zcGVjaWZpYzsKKwljZmcuYWN0aW9uID0gTVBJX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CisJY2ZnLmRpciA9IDA7CS8qIHJlYWQgKi8KKwljZmcudGltZW91dCA9IDEwOworCisJZXJyb3IgPSBtcHRfY29uZmlnKGlvYywgJmNmZyk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dDsKKworCWlmICghaGRyLkV4dFBhZ2VMZW5ndGgpIHsKKwkJZXJyb3IgPSAtRU5YSU87CisJCWdvdG8gb3V0OworCX0KKworCWJ1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGlvYy0+cGNpZGV2LCBoZHIuRXh0UGFnZUxlbmd0aCAqIDQsCisJCQkJICAgICAgJmRtYV9oYW5kbGUpOworCWlmICghYnVmZmVyKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJY2ZnLnBoeXNBZGRyID0gZG1hX2hhbmRsZTsKKwljZmcuYWN0aW9uID0gTVBJX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7CisKKwllcnJvciA9IG1wdF9jb25maWcoaW9jLCAmY2ZnKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X2ZyZWVfY29uc2lzdGVudDsKKworCisJbXB0c2FzX3ByaW50X2V4cGFuZGVyX3BnMShidWZmZXIpOworCisJLyogc2F2ZSBjb25maWcgZGF0YSAqLworCXBoeV9pbmZvLT5waHlfaWQgPSBidWZmZXItPlBoeUlkZW50aWZpZXI7CisJcGh5X2luZm8tPnBvcnRfaWQgPSBidWZmZXItPlBoeXNpY2FsUG9ydDsKKwlwaHlfaW5mby0+bmVnb3RpYXRlZF9saW5rX3JhdGUgPSBidWZmZXItPk5lZ290aWF0ZWRMaW5rUmF0ZTsKKwlwaHlfaW5mby0+cHJvZ3JhbW1lZF9saW5rX3JhdGUgPSBidWZmZXItPlByb2dyYW1tZWRMaW5rUmF0ZTsKKwlwaHlfaW5mby0+aHdfbGlua19yYXRlID0gYnVmZmVyLT5Id0xpbmtSYXRlOworCXBoeV9pbmZvLT5pZGVudGlmeS5oYW5kbGUgPSBsZTE2X3RvX2NwdShidWZmZXItPk93bmVyRGV2SGFuZGxlKTsKKwlwaHlfaW5mby0+YXR0YWNoZWQuaGFuZGxlID0gbGUxNl90b19jcHUoYnVmZmVyLT5BdHRhY2hlZERldkhhbmRsZSk7CisKKworIG91dF9mcmVlX2NvbnNpc3RlbnQ6CisJcGNpX2ZyZWVfY29uc2lzdGVudChpb2MtPnBjaWRldiwgaGRyLkV4dFBhZ2VMZW5ndGggKiA0LAorCQkJICAgIGJ1ZmZlciwgZG1hX2hhbmRsZSk7Cisgb3V0OgorCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHZvaWQKK21wdHNhc19wYXJzZV9kZXZpY2VfaW5mbyhzdHJ1Y3Qgc2FzX2lkZW50aWZ5ICppZGVudGlmeSwKKwkJc3RydWN0IG1wdHNhc19kZXZpbmZvICpkZXZpY2VfaW5mbykKK3sKKwl1MTYgcHJvdG9jb2xzOworCisJaWRlbnRpZnktPnNhc19hZGRyZXNzID0gZGV2aWNlX2luZm8tPnNhc19hZGRyZXNzOworCWlkZW50aWZ5LT5waHlfaWRlbnRpZmllciA9IGRldmljZV9pbmZvLT5waHlfaWQ7CisKKwkvKgorCSAqIEZpbGwgaW4gUGh5IEluaXRpYXRvciBQb3J0IFByb3RvY29sLgorCSAqIEJpdHMgNjozLCBtb3JlIHRoYW4gb25lIGJpdCBjYW4gYmUgc2V0LCBmYWxsIHRocm91Z2ggY2FzZXMuCisJICovCisJcHJvdG9jb2xzID0gZGV2aWNlX2luZm8tPmRldmljZV9pbmZvICYgMHg3ODsKKwlpZGVudGlmeS0+aW5pdGlhdG9yX3BvcnRfcHJvdG9jb2xzID0gMDsKKwlpZiAocHJvdG9jb2xzICYgTVBJX1NBU19ERVZJQ0VfSU5GT19TU1BfSU5JVElBVE9SKQorCQlpZGVudGlmeS0+aW5pdGlhdG9yX3BvcnRfcHJvdG9jb2xzIHw9IFNBU19QUk9UT0NPTF9TU1A7CisJaWYgKHByb3RvY29scyAmIE1QSV9TQVNfREVWSUNFX0lORk9fU1RQX0lOSVRJQVRPUikKKwkJaWRlbnRpZnktPmluaXRpYXRvcl9wb3J0X3Byb3RvY29scyB8PSBTQVNfUFJPVE9DT0xfU1RQOworCWlmIChwcm90b2NvbHMgJiBNUElfU0FTX0RFVklDRV9JTkZPX1NNUF9JTklUSUFUT1IpCisJCWlkZW50aWZ5LT5pbml0aWF0b3JfcG9ydF9wcm90b2NvbHMgfD0gU0FTX1BST1RPQ09MX1NNUDsKKwlpZiAocHJvdG9jb2xzICYgTVBJX1NBU19ERVZJQ0VfSU5GT19TQVRBX0hPU1QpCisJCWlkZW50aWZ5LT5pbml0aWF0b3JfcG9ydF9wcm90b2NvbHMgfD0gU0FTX1BST1RPQ09MX1NBVEE7CisKKwkvKgorCSAqIEZpbGwgaW4gUGh5IFRhcmdldCBQb3J0IFByb3RvY29sLgorCSAqIEJpdHMgMTA6NywgbW9yZSB0aGFuIG9uZSBiaXQgY2FuIGJlIHNldCwgZmFsbCB0aHJvdWdoIGNhc2VzLgorCSAqLworCXByb3RvY29scyA9IGRldmljZV9pbmZvLT5kZXZpY2VfaW5mbyAmIDB4NzgwOworCWlkZW50aWZ5LT50YXJnZXRfcG9ydF9wcm90b2NvbHMgPSAwOworCWlmIChwcm90b2NvbHMgJiBNUElfU0FTX0RFVklDRV9JTkZPX1NTUF9UQVJHRVQpCisJCWlkZW50aWZ5LT50YXJnZXRfcG9ydF9wcm90b2NvbHMgfD0gU0FTX1BST1RPQ09MX1NTUDsKKwlpZiAocHJvdG9jb2xzICYgTVBJX1NBU19ERVZJQ0VfSU5GT19TVFBfVEFSR0VUKQorCQlpZGVudGlmeS0+dGFyZ2V0X3BvcnRfcHJvdG9jb2xzIHw9IFNBU19QUk9UT0NPTF9TVFA7CisJaWYgKHByb3RvY29scyAmIE1QSV9TQVNfREVWSUNFX0lORk9fU01QX1RBUkdFVCkKKwkJaWRlbnRpZnktPnRhcmdldF9wb3J0X3Byb3RvY29scyB8PSBTQVNfUFJPVE9DT0xfU01QOworCWlmIChwcm90b2NvbHMgJiBNUElfU0FTX0RFVklDRV9JTkZPX1NBVEFfREVWSUNFKQorCQlpZGVudGlmeS0+dGFyZ2V0X3BvcnRfcHJvdG9jb2xzIHw9IFNBU19QUk9UT0NPTF9TQVRBOworCisJLyoKKwkgKiBGaWxsIGluIEF0dGFjaGVkIGRldmljZSB0eXBlLgorCSAqLworCXN3aXRjaCAoZGV2aWNlX2luZm8tPmRldmljZV9pbmZvICYKKwkJCU1QSV9TQVNfREVWSUNFX0lORk9fTUFTS19ERVZJQ0VfVFlQRSkgeworCWNhc2UgTVBJX1NBU19ERVZJQ0VfSU5GT19OT19ERVZJQ0U6CisJCWlkZW50aWZ5LT5kZXZpY2VfdHlwZSA9IFNBU19QSFlfVU5VU0VEOworCQlicmVhazsKKwljYXNlIE1QSV9TQVNfREVWSUNFX0lORk9fRU5EX0RFVklDRToKKwkJaWRlbnRpZnktPmRldmljZV90eXBlID0gU0FTX0VORF9ERVZJQ0U7CisJCWJyZWFrOworCWNhc2UgTVBJX1NBU19ERVZJQ0VfSU5GT19FREdFX0VYUEFOREVSOgorCQlpZGVudGlmeS0+ZGV2aWNlX3R5cGUgPSBTQVNfRURHRV9FWFBBTkRFUl9ERVZJQ0U7CisJCWJyZWFrOworCWNhc2UgTVBJX1NBU19ERVZJQ0VfSU5GT19GQU5PVVRfRVhQQU5ERVI6CisJCWlkZW50aWZ5LT5kZXZpY2VfdHlwZSA9IFNBU19GQU5PVVRfRVhQQU5ERVJfREVWSUNFOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbXB0c2FzX3Byb2JlX29uZV9waHkoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgbXB0c2FzX3BoeWluZm8gKnBoeV9pbmZvLCBpbnQgaW5kZXgpCit7CisJc3RydWN0IHNhc19waHkgKnBvcnQ7CisJaW50IGVycm9yOworCisJcG9ydCA9IHNhc19waHlfYWxsb2MoZGV2LCBpbmRleCk7CisJaWYgKCFwb3J0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBvcnQtPnBvcnRfaWRlbnRpZmllciA9IHBoeV9pbmZvLT5wb3J0X2lkOworCW1wdHNhc19wYXJzZV9kZXZpY2VfaW5mbygmcG9ydC0+aWRlbnRpZnksICZwaHlfaW5mby0+aWRlbnRpZnkpOworCisJLyoKKwkgKiBTZXQgTmVnb3RpYXRlZCBsaW5rIHJhdGUuCisJICovCisJc3dpdGNoIChwaHlfaW5mby0+bmVnb3RpYXRlZF9saW5rX3JhdGUpIHsKKwljYXNlIE1QSV9TQVNfSU9VTklUMF9SQVRFX1BIWV9ESVNBQkxFRDoKKwkJcG9ydC0+bmVnb3RpYXRlZF9saW5rcmF0ZSA9IFNBU19QSFlfRElTQUJMRUQ7CisJCWJyZWFrOworCWNhc2UgTVBJX1NBU19JT1VOSVQwX1JBVEVfRkFJTEVEX1NQRUVEX05FR09USUFUSU9OOgorCQlwb3J0LT5uZWdvdGlhdGVkX2xpbmtyYXRlID0gU0FTX0xJTktfUkFURV9GQUlMRUQ7CisJCWJyZWFrOworCWNhc2UgTVBJX1NBU19JT1VOSVQwX1JBVEVfMV81OgorCQlwb3J0LT5uZWdvdGlhdGVkX2xpbmtyYXRlID0gU0FTX0xJTktfUkFURV8xXzVfR0JQUzsKKwkJYnJlYWs7CisJY2FzZSBNUElfU0FTX0lPVU5JVDBfUkFURV8zXzA6CisJCXBvcnQtPm5lZ290aWF0ZWRfbGlua3JhdGUgPSBTQVNfTElOS19SQVRFXzNfMF9HQlBTOworCQlicmVhazsKKwljYXNlIE1QSV9TQVNfSU9VTklUMF9SQVRFX1NBVEFfT09CX0NPTVBMRVRFOgorCWNhc2UgTVBJX1NBU19JT1VOSVQwX1JBVEVfVU5LTk9XTjoKKwlkZWZhdWx0OgorCQlwb3J0LT5uZWdvdGlhdGVkX2xpbmtyYXRlID0gU0FTX0xJTktfUkFURV9VTktOT1dOOworCQlicmVhazsKKwl9CisKKwkvKgorCSAqIFNldCBNYXggaGFyZHdhcmUgbGluayByYXRlLgorCSAqLworCXN3aXRjaCAocGh5X2luZm8tPmh3X2xpbmtfcmF0ZSAmIE1QSV9TQVNfUEhZMF9QUkFURV9NQVhfUkFURV9NQVNLKSB7CisJY2FzZSBNUElfU0FTX1BIWTBfSFdSQVRFX01BWF9SQVRFXzFfNToKKwkJcG9ydC0+bWF4aW11bV9saW5rcmF0ZV9odyA9IFNBU19MSU5LX1JBVEVfMV81X0dCUFM7CisJCWJyZWFrOworCWNhc2UgTVBJX1NBU19QSFkwX1BSQVRFX01BWF9SQVRFXzNfMDoKKwkJcG9ydC0+bWF4aW11bV9saW5rcmF0ZV9odyA9IFNBU19MSU5LX1JBVEVfM18wX0dCUFM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCS8qCisJICogU2V0IE1heCBwcm9ncmFtbWVkIGxpbmsgcmF0ZS4KKwkgKi8KKwlzd2l0Y2ggKHBoeV9pbmZvLT5wcm9ncmFtbWVkX2xpbmtfcmF0ZSAmCisJCQlNUElfU0FTX1BIWTBfUFJBVEVfTUFYX1JBVEVfTUFTSykgeworCWNhc2UgTVBJX1NBU19QSFkwX1BSQVRFX01BWF9SQVRFXzFfNToKKwkJcG9ydC0+bWF4aW11bV9saW5rcmF0ZSA9IFNBU19MSU5LX1JBVEVfMV81X0dCUFM7CisJCWJyZWFrOworCWNhc2UgTVBJX1NBU19QSFkwX1BSQVRFX01BWF9SQVRFXzNfMDoKKwkJcG9ydC0+bWF4aW11bV9saW5rcmF0ZSA9IFNBU19MSU5LX1JBVEVfM18wX0dCUFM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCS8qCisJICogU2V0IE1pbiBoYXJkd2FyZSBsaW5rIHJhdGUuCisJICovCisJc3dpdGNoIChwaHlfaW5mby0+aHdfbGlua19yYXRlICYgTVBJX1NBU19QSFkwX0hXUkFURV9NSU5fUkFURV9NQVNLKSB7CisJY2FzZSBNUElfU0FTX1BIWTBfSFdSQVRFX01JTl9SQVRFXzFfNToKKwkJcG9ydC0+bWluaW11bV9saW5rcmF0ZV9odyA9IFNBU19MSU5LX1JBVEVfMV81X0dCUFM7CisJCWJyZWFrOworCWNhc2UgTVBJX1NBU19QSFkwX1BSQVRFX01JTl9SQVRFXzNfMDoKKwkJcG9ydC0+bWluaW11bV9saW5rcmF0ZV9odyA9IFNBU19MSU5LX1JBVEVfM18wX0dCUFM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCS8qCisJICogU2V0IE1pbiBwcm9ncmFtbWVkIGxpbmsgcmF0ZS4KKwkgKi8KKwlzd2l0Y2ggKHBoeV9pbmZvLT5wcm9ncmFtbWVkX2xpbmtfcmF0ZSAmCisJCQlNUElfU0FTX1BIWTBfUFJBVEVfTUlOX1JBVEVfTUFTSykgeworCWNhc2UgTVBJX1NBU19QSFkwX1BSQVRFX01JTl9SQVRFXzFfNToKKwkJcG9ydC0+bWluaW11bV9saW5rcmF0ZSA9IFNBU19MSU5LX1JBVEVfMV81X0dCUFM7CisJCWJyZWFrOworCWNhc2UgTVBJX1NBU19QSFkwX1BSQVRFX01JTl9SQVRFXzNfMDoKKwkJcG9ydC0+bWluaW11bV9saW5rcmF0ZSA9IFNBU19MSU5LX1JBVEVfM18wX0dCUFM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWVycm9yID0gc2FzX3BoeV9hZGQocG9ydCk7CisJaWYgKGVycm9yKSB7CisJCXNhc19waHlfZnJlZShwb3J0KTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCWlmIChwaHlfaW5mby0+YXR0YWNoZWQuaGFuZGxlKSB7CisJCXN0cnVjdCBzYXNfcnBoeSAqcnBoeTsKKworCQlycGh5ID0gc2FzX3JwaHlfYWxsb2MocG9ydCk7CisJCWlmICghcnBoeSkKKwkJCXJldHVybiAwOyAvKiBub24tZmF0YWw6IGFuIHJwaHkgY2FuIGJlIGFkZGVkIGxhdGVyICovCisKKwkJbXB0c2FzX3BhcnNlX2RldmljZV9pbmZvKCZycGh5LT5pZGVudGlmeSwgJnBoeV9pbmZvLT5hdHRhY2hlZCk7CisJCWVycm9yID0gc2FzX3JwaHlfYWRkKHJwaHkpOworCQlpZiAoZXJyb3IpIHsKKwkJCXNhc19ycGh5X2ZyZWUocnBoeSk7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKworCQlwaHlfaW5mby0+cnBoeSA9IHJwaHk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK21wdHNhc19wcm9iZV9oYmFfcGh5cyhNUFRfQURBUFRFUiAqaW9jLCBpbnQgKmluZGV4KQoreworCXN0cnVjdCBtcHRzYXNfcG9ydGluZm8gKnBvcnRfaW5mbzsKKwl1MzIgaGFuZGxlID0gMHhGRkZGOworCWludCBlcnJvciA9IC1FTk9NRU0sIGk7CisKKwlwb3J0X2luZm8gPSBrbWFsbG9jKHNpemVvZigqcG9ydF9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwb3J0X2luZm8pCisJCWdvdG8gb3V0OworCW1lbXNldChwb3J0X2luZm8sIDAsIHNpemVvZigqcG9ydF9pbmZvKSk7CisKKwllcnJvciA9IG1wdHNhc19zYXNfaW9fdW5pdF9wZzAoaW9jLCBwb3J0X2luZm8pOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfZnJlZV9wb3J0X2luZm87CisKKwlsaXN0X2FkZF90YWlsKCZwb3J0X2luZm8tPmxpc3QsICZpb2MtPnNhc190b3BvbG9neSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcG9ydF9pbmZvLT5udW1fcGh5czsgaSsrKSB7CisJCW1wdHNhc19zYXNfcGh5X3BnMChpb2MsICZwb3J0X2luZm8tPnBoeV9pbmZvW2ldLAorCQkJKE1QSV9TQVNfUEhZX1BHQURfRk9STV9QSFlfTlVNQkVSIDw8CisJCQkgTVBJX1NBU19QSFlfUEdBRF9GT1JNX1NISUZUKSwgaSk7CisKKwkJbXB0c2FzX3Nhc19kZXZpY2VfcGcwKGlvYywgJnBvcnRfaW5mby0+cGh5X2luZm9baV0uaWRlbnRpZnksCisJCQkoTVBJX1NBU19ERVZJQ0VfUEdBRF9GT1JNX0dFVF9ORVhUX0hBTkRMRSA8PAorCQkJIE1QSV9TQVNfREVWSUNFX1BHQURfRk9STV9TSElGVCksIGhhbmRsZSk7CisJCXBvcnRfaW5mby0+cGh5X2luZm9baV0uaWRlbnRpZnkucGh5X2lkID0KKwkJICAgIHBvcnRfaW5mby0+cGh5X2luZm9baV0ucGh5X2lkOworCQloYW5kbGUgPSBwb3J0X2luZm8tPnBoeV9pbmZvW2ldLmlkZW50aWZ5LmhhbmRsZTsKKworCQlpZiAocG9ydF9pbmZvLT5waHlfaW5mb1tpXS5hdHRhY2hlZC5oYW5kbGUpIHsKKwkJCW1wdHNhc19zYXNfZGV2aWNlX3BnMChpb2MsCisJCQkJJnBvcnRfaW5mby0+cGh5X2luZm9baV0uYXR0YWNoZWQsCisJCQkJKE1QSV9TQVNfREVWSUNFX1BHQURfRk9STV9IQU5ETEUgPDwKKwkJCQkgTVBJX1NBU19ERVZJQ0VfUEdBRF9GT1JNX1NISUZUKSwKKwkJCQlwb3J0X2luZm8tPnBoeV9pbmZvW2ldLmF0dGFjaGVkLmhhbmRsZSk7CisJCX0KKworCQltcHRzYXNfcHJvYmVfb25lX3BoeSgmaW9jLT5zaC0+c2hvc3RfZ2VuZGV2LAorCQkJCSAgICAgJnBvcnRfaW5mby0+cGh5X2luZm9baV0sICppbmRleCk7CisJCSgqaW5kZXgpKys7CisJfQorCisJcmV0dXJuIDA7CisKKyBvdXRfZnJlZV9wb3J0X2luZm86CisJa2ZyZWUocG9ydF9pbmZvKTsKKyBvdXQ6CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50CittcHRzYXNfcHJvYmVfZXhwYW5kZXJfcGh5cyhNUFRfQURBUFRFUiAqaW9jLCB1MzIgKmhhbmRsZSwgaW50ICppbmRleCkKK3sKKwlzdHJ1Y3QgbXB0c2FzX3BvcnRpbmZvICpwb3J0X2luZm8sICpwOworCWludCBlcnJvciA9IC1FTk9NRU0sIGksIGo7CisKKwlwb3J0X2luZm8gPSBrbWFsbG9jKHNpemVvZigqcG9ydF9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwb3J0X2luZm8pCisJCWdvdG8gb3V0OworCW1lbXNldChwb3J0X2luZm8sIDAsIHNpemVvZigqcG9ydF9pbmZvKSk7CisKKwllcnJvciA9IG1wdHNhc19zYXNfZXhwYW5kZXJfcGcwKGlvYywgcG9ydF9pbmZvLAorCQkoTVBJX1NBU19FWFBBTkRfUEdBRF9GT1JNX0dFVF9ORVhUX0hBTkRMRSA8PAorCQkgTVBJX1NBU19FWFBBTkRfUEdBRF9GT1JNX1NISUZUKSwgKmhhbmRsZSk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9mcmVlX3BvcnRfaW5mbzsKKworCSpoYW5kbGUgPSBwb3J0X2luZm8tPmhhbmRsZTsKKworCWxpc3RfYWRkX3RhaWwoJnBvcnRfaW5mby0+bGlzdCwgJmlvYy0+c2FzX3RvcG9sb2d5KTsKKwlmb3IgKGkgPSAwOyBpIDwgcG9ydF9pbmZvLT5udW1fcGh5czsgaSsrKSB7CisJCXN0cnVjdCBkZXZpY2UgKnBhcmVudDsKKworCQltcHRzYXNfc2FzX2V4cGFuZGVyX3BnMShpb2MsICZwb3J0X2luZm8tPnBoeV9pbmZvW2ldLAorCQkJKE1QSV9TQVNfRVhQQU5EX1BHQURfRk9STV9IQU5ETEVfUEhZX05VTSA8PAorCQkJIE1QSV9TQVNfRVhQQU5EX1BHQURfRk9STV9TSElGVCksIChpIDw8IDE2KSArICpoYW5kbGUpOworCisJCWlmIChwb3J0X2luZm8tPnBoeV9pbmZvW2ldLmlkZW50aWZ5LmhhbmRsZSkgeworCQkJbXB0c2FzX3Nhc19kZXZpY2VfcGcwKGlvYywKKwkJCQkmcG9ydF9pbmZvLT5waHlfaW5mb1tpXS5pZGVudGlmeSwKKwkJCQkoTVBJX1NBU19ERVZJQ0VfUEdBRF9GT1JNX0hBTkRMRSA8PAorCQkJCSBNUElfU0FTX0RFVklDRV9QR0FEX0ZPUk1fU0hJRlQpLAorCQkJCXBvcnRfaW5mby0+cGh5X2luZm9baV0uaWRlbnRpZnkuaGFuZGxlKTsKKwkJCXBvcnRfaW5mby0+cGh5X2luZm9baV0uaWRlbnRpZnkucGh5X2lkID0KKwkJCSAgICBwb3J0X2luZm8tPnBoeV9pbmZvW2ldLnBoeV9pZDsKKwkJfQorCisJCWlmIChwb3J0X2luZm8tPnBoeV9pbmZvW2ldLmF0dGFjaGVkLmhhbmRsZSkgeworCQkJbXB0c2FzX3Nhc19kZXZpY2VfcGcwKGlvYywKKwkJCQkmcG9ydF9pbmZvLT5waHlfaW5mb1tpXS5hdHRhY2hlZCwKKwkJCQkoTVBJX1NBU19ERVZJQ0VfUEdBRF9GT1JNX0hBTkRMRSA8PAorCQkJCSBNUElfU0FTX0RFVklDRV9QR0FEX0ZPUk1fU0hJRlQpLAorCQkJCXBvcnRfaW5mby0+cGh5X2luZm9baV0uYXR0YWNoZWQuaGFuZGxlKTsKKwkJfQorCisJCS8qCisJCSAqIElmIHdlIGZpbmQgYSBwYXJlbnQgcG9ydCBoYW5kbGUgdGhpcyBleHBhbmRlciBpcworCQkgKiBhdHRhY2hlZCB0byBhbm90aGVyIGV4cGFuZGVyLCBlbHNlIGl0IGhhbmdzIG9mIHRoZQorCQkgKiBIQkEgcGh5cy4KKwkJICovCisJCXBhcmVudCA9ICZpb2MtPnNoLT5zaG9zdF9nZW5kZXY7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmlvYy0+c2FzX3RvcG9sb2d5LCBsaXN0KSB7CisJCQlmb3IgKGogPSAwOyBqIDwgcC0+bnVtX3BoeXM7IGorKykgeworCQkJCWlmIChwb3J0X2luZm8tPnBoeV9pbmZvW2ldLmlkZW50aWZ5LmhhbmRsZSA9PQorCQkJCQkJcC0+cGh5X2luZm9bal0uYXR0YWNoZWQuaGFuZGxlKQorCQkJCQlwYXJlbnQgPSAmcC0+cGh5X2luZm9bal0ucnBoeS0+ZGV2OworCQkJfQorCQl9CisKKwkJbXB0c2FzX3Byb2JlX29uZV9waHkocGFyZW50LCAmcG9ydF9pbmZvLT5waHlfaW5mb1tpXSwgKmluZGV4KTsKKwkJKCppbmRleCkrKzsKKwl9CisKKwlyZXR1cm4gMDsKKworIG91dF9mcmVlX3BvcnRfaW5mbzoKKwlrZnJlZShwb3J0X2luZm8pOworIG91dDoKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkCittcHRzYXNfc2Nhbl9zYXNfdG9wb2xvZ3koTVBUX0FEQVBURVIgKmlvYykKK3sKKwl1MzIgaGFuZGxlID0gMHhGRkZGOworCWludCBpbmRleCA9IDA7CisKKwltcHRzYXNfcHJvYmVfaGJhX3BoeXMoaW9jLCAmaW5kZXgpOworCXdoaWxlICghbXB0c2FzX3Byb2JlX2V4cGFuZGVyX3BoeXMoaW9jLCAmaGFuZGxlLCAmaW5kZXgpKQorCQk7Cit9CisKK3N0YXRpYyBpbnQKK21wdHNhc19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBTY3NpX0hvc3QJKnNoOworCU1QVF9TQ1NJX0hPU1QJCSpoZDsKKwlNUFRfQURBUFRFUiAJCSppb2M7CisJdW5zaWduZWQgbG9uZwkJIGZsYWdzOworCWludAkJCSBzeiwgaWk7CisJaW50CQkJIG51bVNHRSA9IDA7CisJaW50CQkJIHNjYWxlOworCWludAkJCSBpb2NfY2FwOworCXU4CQkJKm1lbTsKKwlpbnQJCQllcnJvcj0wOworCWludAkJCXI7CisKKwlyID0gbXB0X2F0dGFjaChwZGV2LGlkKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlpb2MgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaW9jLT5Eb25lQ3R4ID0gbXB0c2FzRG9uZUN0eDsKKwlpb2MtPlRhc2tDdHggPSBtcHRzYXNUYXNrQ3R4OworCWlvYy0+SW50ZXJuYWxDdHggPSBtcHRzYXNJbnRlcm5hbEN0eDsKKworCS8qICBBZGRlZCBzYW5pdHkgY2hlY2sgb24gcmVhZGluZXNzIG9mIHRoZSBNUFQgYWRhcHRlci4KKwkgKi8KKwlpZiAoaW9jLT5sYXN0X3N0YXRlICE9IE1QSV9JT0NfU1RBVEVfT1BFUkFUSU9OQUwpIHsKKwkJcHJpbnRrKE1ZSU9DX3NfV0FSTl9GTVQKKwkJICAiU2tpcHBpbmcgYmVjYXVzZSBpdCdzIG5vdCBvcGVyYXRpb25hbCFcbiIsCisJCSAgaW9jLT5uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCFpb2MtPmFjdGl2ZSkgeworCQlwcmludGsoTVlJT0Nfc19XQVJOX0ZNVCAiU2tpcHBpbmcgYmVjYXVzZSBpdCdzIGRpc2FibGVkIVxuIiwKKwkJICBpb2MtPm5hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiAgU2FuaXR5IGNoZWNrIC0gZW5zdXJlIGF0IGxlYXN0IDEgcG9ydCBpcyBJTklUSUFUT1IgY2FwYWJsZQorCSAqLworCWlvY19jYXAgPSAwOworCWZvciAoaWkgPSAwOyBpaSA8IGlvYy0+ZmFjdHMuTnVtYmVyT2ZQb3J0czsgaWkrKykgeworCQlpZiAoaW9jLT5wZmFjdHNbaWldLlByb3RvY29sRmxhZ3MgJgorCQkJCU1QSV9QT1JURkFDVFNfUFJPVE9DT0xfSU5JVElBVE9SKQorCQkJaW9jX2NhcCsrOworCX0KKworCWlmICghaW9jX2NhcCkgeworCQlwcmludGsoTVlJT0Nfc19XQVJOX0ZNVAorCQkJIlNraXBwaW5nIGlvYz0lcCBiZWNhdXNlIFNDU0kgSW5pdGlhdG9yIG1vZGUgIgorCQkJImlzIE5PVCBlbmFibGVkIVxuIiwgaW9jLT5uYW1lLCBpb2MpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzaCA9IHNjc2lfaG9zdF9hbGxvYygmbXB0c2FzX2RyaXZlcl90ZW1wbGF0ZSwgc2l6ZW9mKE1QVF9TQ1NJX0hPU1QpKTsKKwlpZiAoIXNoKSB7CisJCXByaW50ayhNWUlPQ19zX1dBUk5fRk1UCisJCQkiVW5hYmxlIHRvIHJlZ2lzdGVyIGNvbnRyb2xsZXIgd2l0aCBTQ1NJIHN1YnN5c3RlbVxuIiwKKwkJCWlvYy0+bmFtZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5GcmVlUWxvY2ssIGZsYWdzKTsKKworCS8qIEF0dGFjaCB0aGUgU0NTSSBIb3N0IHRvIHRoZSBJT0Mgc3RydWN0dXJlCisJICovCisJaW9jLT5zaCA9IHNoOworCisJc2gtPmlvX3BvcnQgPSAwOworCXNoLT5uX2lvX3BvcnQgPSAwOworCXNoLT5pcnEgPSAwOworCisJLyogc2V0IDE2IGJ5dGUgY2RiJ3MgKi8KKwlzaC0+bWF4X2NtZF9sZW4gPSAxNjsKKworCXNoLT5tYXhfaWQgPSBpb2MtPnBmYWN0cy0+TWF4RGV2aWNlcyArIDE7CisKKwlzaC0+dHJhbnNwb3J0dCA9IG1wdHNhc190cmFuc3BvcnRfdGVtcGxhdGU7CisKKwlzaC0+bWF4X2x1biA9IE1QVF9MQVNUX0xVTiArIDE7CisJc2gtPm1heF9jaGFubmVsID0gMDsKKwlzaC0+dGhpc19pZCA9IGlvYy0+cGZhY3RzWzBdLlBvcnRTQ1NJSUQ7CisKKwkvKiBSZXF1aXJlZCBlbnRyeS4KKwkgKi8KKwlzaC0+dW5pcXVlX2lkID0gaW9jLT5pZDsKKworCUlOSVRfTElTVF9IRUFEKCZpb2MtPnNhc190b3BvbG9neSk7CisKKwkvKiBWZXJpZnkgdGhhdCB3ZSB3b24ndCBleGNlZWQgdGhlIG1heGltdW0KKwkgKiBudW1iZXIgb2YgY2hhaW4gYnVmZmVycworCSAqIFdlIGNhbiBvcHRpbWl6ZTogIFpaID0gcmVxX3N6L3NpemVvZihTR0UpCisJICogRm9yIDMyYml0IFNHRSdzOgorCSAqICBudW1TR0UgPSAxICsgKFpaLTEpKihtYXhDaGFpbiAtMSkgKyBaWgorCSAqICAgICAgICAgICAgICAgKyAocmVxX3N6IC0gNjQpL3NpemVvZihTR0UpCisJICogQSBzbGlnaHRseSBkaWZmZXJlbnQgYWxnb3JpdGhtIGlzIHJlcXVpcmVkIGZvcgorCSAqIDY0Yml0IFNHRXMuCisJICovCisJc2NhbGUgPSBpb2MtPnJlcV9zei8oc2l6ZW9mKGRtYV9hZGRyX3QpICsgc2l6ZW9mKHUzMikpOworCWlmIChzaXplb2YoZG1hX2FkZHJfdCkgPT0gc2l6ZW9mKHU2NCkpIHsKKwkJbnVtU0dFID0gKHNjYWxlIC0gMSkgKgorCQkgIChpb2MtPmZhY3RzLk1heENoYWluRGVwdGgtMSkgKyBzY2FsZSArCisJCSAgKGlvYy0+cmVxX3N6IC0gNjApIC8gKHNpemVvZihkbWFfYWRkcl90KSArCisJCSAgc2l6ZW9mKHUzMikpOworCX0gZWxzZSB7CisJCW51bVNHRSA9IDEgKyAoc2NhbGUgLSAxKSAqCisJCSAgKGlvYy0+ZmFjdHMuTWF4Q2hhaW5EZXB0aC0xKSArIHNjYWxlICsKKwkJICAoaW9jLT5yZXFfc3ogLSA2NCkgLyAoc2l6ZW9mKGRtYV9hZGRyX3QpICsKKwkJICBzaXplb2YodTMyKSk7CisJfQorCisJaWYgKG51bVNHRSA8IHNoLT5zZ190YWJsZXNpemUpIHsKKwkJLyogUmVzZXQgdGhpcyB2YWx1ZSAqLworCQlkcHJpbnRrKChNWUlPQ19zX0lORk9fRk1UCisJCSAgIlJlc2V0dGluZyBzZ190YWJsZXNpemUgdG8gJWQgZnJvbSAlZFxuIiwKKwkJICBpb2MtPm5hbWUsIG51bVNHRSwgc2gtPnNnX3RhYmxlc2l6ZSkpOworCQlzaC0+c2dfdGFibGVzaXplID0gbnVtU0dFOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+RnJlZVFsb2NrLCBmbGFncyk7CisKKwloZCA9IChNUFRfU0NTSV9IT1NUICopIHNoLT5ob3N0ZGF0YTsKKwloZC0+aW9jID0gaW9jOworCisJLyogU0NTSSBuZWVkcyBzY3NpX2NtbmQgbG9va3VwIHRhYmxlIQorCSAqICh3aXRoIHNpemUgZXF1YWwgdG8gcmVxX2RlcHRoKlB0clN6ISkKKwkgKi8KKwlzeiA9IGlvYy0+cmVxX2RlcHRoICogc2l6ZW9mKHZvaWQgKik7CisJbWVtID0ga21hbGxvYyhzeiwgR0ZQX0FUT01JQyk7CisJaWYgKG1lbSA9PSBOVUxMKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBtcHRzYXNfcHJvYmVfZmFpbGVkOworCX0KKworCW1lbXNldChtZW0sIDAsIHN6KTsKKwloZC0+U2NzaUxvb2t1cCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICoqKSBtZW07CisKKwlkcHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJTY3NpTG9va3VwIEAgJXAsIHN6PSVkXG4iLAorCQkgaW9jLT5uYW1lLCBoZC0+U2NzaUxvb2t1cCwgc3opKTsKKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGRldmljZSBzdHJ1Y3R1cmVzLgorCSAqIEEgbm9uLU51bGwgcG9pbnRlciBhdCBhbiBvZmZzZXQKKwkgKiBpbmRpY2F0ZXMgYSBkZXZpY2UgZXhpc3RzLgorCSAqIG1heF9pZCA9IDEgKyBtYXhpbXVtIGlkIChob3N0cy5oKQorCSAqLworCXN6ID0gc2gtPm1heF9pZCAqIHNpemVvZih2b2lkICopOworCW1lbSA9IGttYWxsb2Moc3osIEdGUF9BVE9NSUMpOworCWlmIChtZW0gPT0gTlVMTCkgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gbXB0c2FzX3Byb2JlX2ZhaWxlZDsKKwl9CisKKwltZW1zZXQobWVtLCAwLCBzeik7CisJaGQtPlRhcmdldHMgPSAoVmlydERldmljZSAqKikgbWVtOworCisJZHByaW50aygoS0VSTl9JTkZPCisJICAiICBUYXJnZXRzIEAgJXAsIHN6PSVkXG4iLCBoZC0+VGFyZ2V0cywgc3opKTsKKworCS8qIENsZWFyIHRoZSBUTSBmbGFncworCSAqLworCWhkLT50bVBlbmRpbmcgPSAwOworCWhkLT50bVN0YXRlID0gVE1fU1RBVEVfTk9ORTsKKwloZC0+cmVzZXRQZW5kaW5nID0gMDsKKwloZC0+YWJvcnRTQ3BudCA9IE5VTEw7CisKKwkvKiBDbGVhciB0aGUgcG9pbnRlciB1c2VkIHRvIHN0b3JlCisJICogc2luZ2xlLXRocmVhZGVkIGNvbW1hbmRzLCBpLmUuLCB0aG9zZQorCSAqIGlzc3VlZCBkdXJpbmcgYSBidXMgc2NhbiwgZHYgYW5kCisJICogY29uZmlndXJhdGlvbiBwYWdlcy4KKwkgKi8KKwloZC0+Y21kUHRyID0gTlVMTDsKKworCS8qIEluaXRpYWxpemUgdGhpcyBTQ1NJIEhvc3RzJyB0aW1lcnMKKwkgKiBUbyB1c2UsIHNldCB0aGUgdGltZXIgZXhwaXJlcyBmaWVsZAorCSAqIGFuZCBhZGRfdGltZXIKKwkgKi8KKwlpbml0X3RpbWVyKCZoZC0+dGltZXIpOworCWhkLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGhkOworCWhkLT50aW1lci5mdW5jdGlvbiA9IG1wdHNjc2loX3RpbWVyX2V4cGlyZWQ7CisKKwloZC0+bXB0X3BxX2ZpbHRlciA9IG1wdF9wcV9maWx0ZXI7CisJaW9jLT5zYXNfZGF0YS5wdENsZWFyID0gbXB0X3B0X2NsZWFyOworCisJaWYgKGlvYy0+c2FzX2RhdGEucHRDbGVhcj09MSkgeworCQltcHRiYXNlX3Nhc19wZXJzaXN0X29wZXJhdGlvbigKKwkJICAgIGlvYywgTVBJX1NBU19PUF9DTEVBUl9BTExfUEVSU0lTVEVOVCk7CisJfQorCisJZGR2cHJpbnRrKChNWUlPQ19zX0lORk9fRk1UCisJCSJtcHRfcHFfZmlsdGVyICV4IG1wdF9wcV9maWx0ZXIgJXhcbiIsCisJCWlvYy0+bmFtZSwKKwkJbXB0X3BxX2ZpbHRlciwKKwkJbXB0X3BxX2ZpbHRlcikpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmaGQtPnNjYW5kdl93YWl0cSk7CisJaGQtPnNjYW5kdl93YWl0X2RvbmUgPSAwOworCWhkLT5sYXN0X3F1ZXVlX2Z1bGwgPSAwOworCisJZXJyb3IgPSBzY3NpX2FkZF9ob3N0KHNoLCAmaW9jLT5wY2lkZXYtPmRldik7CisJaWYgKGVycm9yKSB7CisJCWRwcmludGsoKEtFUk5fRVJSIE1ZTkFNCisJCSAgInNjc2lfYWRkX2hvc3QgZmFpbGVkXG4iKSk7CisJCWdvdG8gbXB0c2FzX3Byb2JlX2ZhaWxlZDsKKwl9CisKKwltcHRzYXNfc2Nhbl9zYXNfdG9wb2xvZ3koaW9jKTsKKworCXJldHVybiAwOworCittcHRzYXNfcHJvYmVfZmFpbGVkOgorCisJbXB0c2NzaWhfcmVtb3ZlKHBkZXYpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IG1wdHNhc19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJTVBUX0FEQVBURVIgKmlvYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbXB0c2FzX3BvcnRpbmZvICpwLCAqbjsKKworCXNhc19yZW1vdmVfaG9zdChpb2MtPnNoKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCAmaW9jLT5zYXNfdG9wb2xvZ3ksIGxpc3QpIHsKKwkJbGlzdF9kZWwoJnAtPmxpc3QpOworCQlrZnJlZShwKTsKKwl9CisKKwltcHRzY3NpaF9yZW1vdmUocGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtcHRzYXNfcGNpX3RhYmxlW10gPSB7CisJeyBQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA2NCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAorCXsgUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNjYsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKKwl7IFBDSV9WRU5ET1JfSURfTFNJX0xPR0lDLCBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDY4LAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCisJeyBQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA2NEUsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKKwl7IFBDSV9WRU5ET1JfSURfTFNJX0xPR0lDLCBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDY2RSwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAorCXsgUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNjhFLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCisJezB9CS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG1wdHNhc19wY2lfdGFibGUpOworCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtcHRzYXNfZHJpdmVyID0geworCS5uYW1lCQk9ICJtcHRzYXMiLAorCS5pZF90YWJsZQk9IG1wdHNhc19wY2lfdGFibGUsCisJLnByb2JlCQk9IG1wdHNhc19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1wdHNhc19yZW1vdmUpLAorCS5zaHV0ZG93bgk9IG1wdHNjc2loX3NodXRkb3duLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kCT0gbXB0c2NzaWhfc3VzcGVuZCwKKwkucmVzdW1lCQk9IG1wdHNjc2loX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBfX2luaXQKK21wdHNhc19pbml0KHZvaWQpCit7CisJc2hvd19tcHRtb2RfdmVyKG15X05BTUUsIG15X1ZFUlNJT04pOworCisJbXB0c2FzX3RyYW5zcG9ydF90ZW1wbGF0ZSA9CisJICAgIHNhc19hdHRhY2hfdHJhbnNwb3J0KCZtcHRzYXNfdHJhbnNwb3J0X2Z1bmN0aW9ucyk7CisJaWYgKCFtcHRzYXNfdHJhbnNwb3J0X3RlbXBsYXRlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW1wdHNhc0RvbmVDdHggPSBtcHRfcmVnaXN0ZXIobXB0c2NzaWhfaW9fZG9uZSwgTVBUU0FTX0RSSVZFUik7CisJbXB0c2FzVGFza0N0eCA9IG1wdF9yZWdpc3RlcihtcHRzY3NpaF90YXNrbWdtdF9jb21wbGV0ZSwgTVBUU0FTX0RSSVZFUik7CisJbXB0c2FzSW50ZXJuYWxDdHggPQorCQltcHRfcmVnaXN0ZXIobXB0c2NzaWhfc2NhbmR2X2NvbXBsZXRlLCBNUFRTQVNfRFJJVkVSKTsKKworCWlmIChtcHRfZXZlbnRfcmVnaXN0ZXIobXB0c2FzRG9uZUN0eCwgbXB0c2NzaWhfZXZlbnRfcHJvY2VzcykgPT0gMCkgeworCQlkZXZ0cHJpbnRrKChLRVJOX0lORk8gTVlOQU0KKwkJICAiOiBSZWdpc3RlcmVkIGZvciBJT0MgZXZlbnQgbm90aWZpY2F0aW9uc1xuIikpOworCX0KKworCWlmIChtcHRfcmVzZXRfcmVnaXN0ZXIobXB0c2FzRG9uZUN0eCwgbXB0c2NzaWhfaW9jX3Jlc2V0KSA9PSAwKSB7CisJCWRwcmludGsoKEtFUk5fSU5GTyBNWU5BTQorCQkgICI6IFJlZ2lzdGVyZWQgZm9yIElPQyByZXNldCBub3RpZmljYXRpb25zXG4iKSk7CisJfQorCisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJm1wdHNhc19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQKK21wdHNhc19leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZtcHRzYXNfZHJpdmVyKTsKKwlzYXNfcmVsZWFzZV90cmFuc3BvcnQobXB0c2FzX3RyYW5zcG9ydF90ZW1wbGF0ZSk7CisKKwltcHRfcmVzZXRfZGVyZWdpc3RlcihtcHRzYXNEb25lQ3R4KTsKKwltcHRfZXZlbnRfZGVyZWdpc3RlcihtcHRzYXNEb25lQ3R4KTsKKworCW1wdF9kZXJlZ2lzdGVyKG1wdHNhc0ludGVybmFsQ3R4KTsKKwltcHRfZGVyZWdpc3RlcihtcHRzYXNUYXNrQ3R4KTsKKwltcHRfZGVyZWdpc3RlcihtcHRzYXNEb25lQ3R4KTsKK30KKworbW9kdWxlX2luaXQobXB0c2FzX2luaXQpOworbW9kdWxlX2V4aXQobXB0c2FzX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCmluZGV4IDRhMDAzZGMuLjVjYjA3ZWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX3RjcS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kYmcuaD4KIAogI2luY2x1ZGUgIm1wdGJhc2UuaCIKICNpbmNsdWRlICJtcHRzY3NpaC5oIgpAQCAtOTMsOCArOTQsOSBAQAogCiAjZGVmaW5lIE1QVF9JQ0ZMQUdfQlVGX0NBUAkweDAxCS8qIFJlYWRCdWZmZXIgUmVhZCBDYXBhY2l0eSBmb3JtYXQgKi8KICNkZWZpbmUgTVBUX0lDRkxBR19FQ0hPCQkweDAyCS8qIFJlYWRCdWZmZXIgRWNobyBidWZmZXIgZm9ybWF0ICovCi0jZGVmaW5lIE1QVF9JQ0ZMQUdfUEhZU19ESVNLCTB4MDQJLyogQW55IFNDU0kgSU8gYnV0IGRvIFBoeXMgRGlzayBGb3JtYXQgKi8KLSNkZWZpbmUgTVBUX0lDRkxBR19UQUdHRURfQ01ECTB4MDgJLyogRG8gdGFnZ2VkIElPICovCisjZGVmaW5lIE1QVF9JQ0ZMQUdfRUJPUwkJMHgwNAkvKiBSZWFkQnVmZmVyIEVjaG8gYnVmZmVyIGhhcyBFQk9TICovCisjZGVmaW5lIE1QVF9JQ0ZMQUdfUEhZU19ESVNLCTB4MDgJLyogQW55IFNDU0kgSU8gYnV0IGRvIFBoeXMgRGlzayBGb3JtYXQgKi8KKyNkZWZpbmUgTVBUX0lDRkxBR19UQUdHRURfQ01ECTB4MTAJLyogRG8gdGFnZ2VkIElPICovCiAjZGVmaW5lIE1QVF9JQ0ZMQUdfRElEX1JFU0VUCTB4MjAJLyogQnVzIFJlc2V0IG9jY3VycmVkIHdpdGggdGhpcyBjb21tYW5kICovCiAjZGVmaW5lIE1QVF9JQ0ZMQUdfUkVTRVJWRUQJMHg0MAkvKiBSZXNlcnZlZCBoYXMgYmVlbiBpc3N1ZWQgKi8KIApAQCAtMTU5LDYgKzE2MSw4IEBACiBzdGF0aWMgaW50CW1wdHNjc2loX2RvX2NtZChNUFRfU0NTSV9IT1NUICpoZCwgSU5URVJOQUxfQ01EICppb2NtZCk7CiBzdGF0aWMgaW50CW1wdHNjc2loX3N5bmNocm9uaXplX2NhY2hlKE1QVF9TQ1NJX0hPU1QgKmhkLCBpbnQgcG9ydG51bSk7CiAKK3N0YXRpYyBzdHJ1Y3Qgd29ya19zdHJ1Y3QgICBtcHRzY3NpaF9wZXJzaXN0VGFzazsKKwogI2lmZGVmIE1QVFNDU0lIX0VOQUJMRV9ET01BSU5fVkFMSURBVElPTgogc3RhdGljIGludAltcHRzY3NpaF9kb19yYWlkKE1QVF9TQ1NJX0hPU1QgKmhkLCB1OCBhY3Rpb24sIElOVEVSTkFMX0NNRCAqaW8pOwogc3RhdGljIHZvaWQJbXB0c2NzaWhfZG9tYWluVmFsaWRhdGlvbih2b2lkICpoZCk7CkBAIC0xNjcsNiArMTcxLDcgQEAKIHN0YXRpYyBpbnQJbXB0c2NzaWhfZG9EdihNUFRfU0NTSV9IT1NUICpoZCwgaW50IGNoYW5uZWwsIGludCB0YXJnZXQpOwogc3RhdGljIHZvaWQJbXB0c2NzaWhfZHZfcGFybXMoTVBUX1NDU0lfSE9TVCAqaGQsIERWUEFSQU1FVEVSUyAqZHYsdm9pZCAqcFBhZ2UpOwogc3RhdGljIHZvaWQJbXB0c2NzaWhfZmlsbGJ1ZihjaGFyICpidWZmZXIsIGludCBzaXplLCBpbnQgaW5kZXgsIGludCB3aWR0aCk7CitzdGF0aWMgdm9pZAltcHRzY3NpaF9zZXRfZHZmbGFnc19yYWlkKE1QVF9TQ1NJX0hPU1QgKmhkLCBpbnQgaWQpOwogI2VuZGlmCiAKIHZvaWQgCQltcHRzY3NpaF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKik7CkBAIC02MDYsMTEgKzYxMSwyNCBAQAogCQl4ZmVyX2NudCA9IGxlMzJfdG9fY3B1KHBTY3NpUmVwbHktPlRyYW5zZmVyQ291bnQpOwogCQlzYy0+cmVzaWQgPSBzYy0+cmVxdWVzdF9idWZmbGVuIC0geGZlcl9jbnQ7CiAKKwkJLyoKKwkJICogIGlmIHdlIGdldCBhIGRhdGEgdW5kZXJydW4gaW5kaWNhdGlvbiwgeWV0IG5vIGRhdGEgd2FzCisJCSAqICB0cmFuc2ZlcnJlZCBhbmQgdGhlIFNDU0kgc3RhdHVzIGluZGljYXRlcyB0aGF0IHRoZQorCQkgKiAgY29tbWFuZCB3YXMgbmV2ZXIgc3RhcnRlZCwgY2hhbmdlIHRoZSBkYXRhIHVuZGVycnVuCisJCSAqICB0byBzdWNjZXNzCisJCSAqLworCQlpZiAoc3RhdHVzID09IE1QSV9JT0NTVEFUVVNfU0NTSV9EQVRBX1VOREVSUlVOICYmIHhmZXJfY250ID09IDAgJiYKKwkJICAgIChzY3NpX3N0YXR1cyA9PSBNUElfU0NTSV9TVEFUVVNfQlVTWSB8fAorCQkgICAgIHNjc2lfc3RhdHVzID09IE1QSV9TQ1NJX1NUQVRVU19SRVNFUlZBVElPTl9DT05GTElDVCB8fAorCQkgICAgIHNjc2lfc3RhdHVzID09IE1QSV9TQ1NJX1NUQVRVU19UQVNLX1NFVF9GVUxMKSkgeworCQkJc3RhdHVzID0gTVBJX0lPQ1NUQVRVU19TVUNDRVNTOworCQl9CisKIAkJZHJlcGx5cHJpbnRrKChLRVJOX05PVElDRSAiUmVwbHkgaGE9JWQgaWQ9JWQgbHVuPSVkOlxuIgogCQkJIklPQ1N0YXR1cz0lMDR4aCBTQ1NJU3RhdGU9JTAyeGggU0NTSVN0YXR1cz0lMDJ4aFxuIgogCQkJInJlc2lkPSVkIGJ1ZmZsZW49JWQgeGZlcl9jbnQ9JWRcbiIsCiAJCQlpb2MtPmlkLCBwU2NzaVJlcS0+VGFyZ2V0SUQsIHBTY3NpUmVxLT5MVU5bMV0sCi0JCQlzdGF0dXMsIHNjc2lfc3RhdGUsIHNjc2lfc3RhdHVzLCBzYy0+cmVzaWQsIAorCQkJc3RhdHVzLCBzY3NpX3N0YXRlLCBzY3NpX3N0YXR1cywgc2MtPnJlc2lkLAogCQkJc2MtPnJlcXVlc3RfYnVmZmxlbiwgeGZlcl9jbnQpKTsKIAogCQlpZiAoc2NzaV9zdGF0ZSAmIE1QSV9TQ1NJX1NUQVRFX0FVVE9TRU5TRV9WQUxJRCkKQEAgLTYxOSw4ICs2MzcsMTEgQEAKIAkJLyoKIAkJICogIExvb2sgZm9yICsgZHVtcCBGQ1AgUmVzcG9uc2VJbmZvW10hCiAJCSAqLwotCQlpZiAoc2NzaV9zdGF0ZSAmIE1QSV9TQ1NJX1NUQVRFX1JFU1BPTlNFX0lORk9fVkFMSUQpIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAiICBGQ1BfUmVzcG9uc2VJbmZvPSUwOHhoXG4iLAorCQlpZiAoc2NzaV9zdGF0ZSAmIE1QSV9TQ1NJX1NUQVRFX1JFU1BPTlNFX0lORk9fVkFMSUQgJiYKKwkJICAgIHBTY3NpUmVwbHktPlJlc3BvbnNlSW5mbykgeworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJoYT0lZCBpZD0lZCBsdW49JWQ6ICIKKwkJCSJGQ1BfUmVzcG9uc2VJbmZvPSUwOHhoXG4iLAorCQkJaW9jLT5pZCwgcFNjc2lSZXEtPlRhcmdldElELCBwU2NzaVJlcS0+TFVOWzFdLAogCQkJbGUzMl90b19jcHUocFNjc2lSZXBseS0+UmVzcG9uc2VJbmZvKSk7CiAJCX0KIApAQCAtNjYxLDIzICs2ODIsMTMgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgTVBJX0lPQ1NUQVRVU19TQ1NJX1JFU0lEVUFMX01JU01BVENIOgkvKiAweDAwNDkgKi8KLQkJCWlmICggeGZlcl9jbnQgPj0gc2MtPnVuZGVyZmxvdyApIHsKLQkJCQkvKiBTdWZmaWNpZW50IGRhdGEgdHJhbnNmZXIgb2NjdXJyZWQgKi8KKwkJCXNjLT5yZXNpZCA9IHNjLT5yZXF1ZXN0X2J1ZmZsZW4gLSB4ZmVyX2NudDsKKwkJCWlmKCh4ZmVyX2NudD09MCl8fChzYy0+dW5kZXJmbG93ID4geGZlcl9jbnQpKQorCQkJCXNjLT5yZXN1bHQ9RElEX1NPRlRfRVJST1IgPDwgMTY7CisJCQllbHNlIC8qIFN1ZmZpY2llbnQgZGF0YSB0cmFuc2ZlciBvY2N1cnJlZCAqLwogCQkJCXNjLT5yZXN1bHQgPSAoRElEX09LIDw8IDE2KSB8IHNjc2lfc3RhdHVzOwotCQkJfSBlbHNlIGlmICggeGZlcl9jbnQgPT0gMCApIHsKLQkJCQkvKiBBIENSQyBFcnJvciBjYXVzZXMgdGhpcyBjb25kaXRpb247IHJldHJ5ICovCi0JCQkJc2MtPnJlc3VsdCA9IChEUklWRVJfU0VOU0UgPDwgMjQpIHwgKERJRF9PSyA8PCAxNikgfAotCQkJCQkoQ0hFQ0tfQ09ORElUSU9OIDw8IDEpOwotCQkJCXNjLT5zZW5zZV9idWZmZXJbMF0gPSAweDcwOwotCQkJCXNjLT5zZW5zZV9idWZmZXJbMl0gPSBOT19TRU5TRTsKLQkJCQlzYy0+c2Vuc2VfYnVmZmVyWzEyXSA9IDA7Ci0JCQkJc2MtPnNlbnNlX2J1ZmZlclsxM10gPSAwOwotCQkJfSBlbHNlIHsKLQkJCQlzYy0+cmVzdWx0ID0gRElEX1NPRlRfRVJST1IgPDwgMTY7Ci0JCQl9Ci0JCQlkcmVwbHlwcmludGsoKEtFUk5fTk9USUNFCi0JCQkgICAgIlJFU0lEVUFMX01JU01BVENIOiByZXN1bHQ9JXggb24gaWQ9JWRcbiIsCi0JCQkgICAgc2MtPnJlc3VsdCwgc2MtPmRldmljZS0+aWQpKTsKKwkJCWRyZXBseXByaW50aygoS0VSTl9OT1RJQ0UgCisJCQkgICAgIlJFU0lEVUFMX01JU01BVENIOiByZXN1bHQ9JXggb24gaWQ9JWRcbiIsIHNjLT5yZXN1bHQsIHNjLT5kZXZpY2UtPmlkKSk7CiAJCQlicmVhazsKIAogCQljYXNlIE1QSV9JT0NTVEFUVVNfU0NTSV9EQVRBX1VOREVSUlVOOgkJLyogMHgwMDQ1ICovCkBAIC02OTIsNyArNzAzLDEwIEBACiAJCQkJOwogCQkJfSBlbHNlIHsKIAkJCQlpZiAoeGZlcl9jbnQgPCBzYy0+dW5kZXJmbG93KSB7Ci0JCQkJCXNjLT5yZXN1bHQgPSBESURfU09GVF9FUlJPUiA8PCAxNjsKKwkJCQkJaWYgKHNjc2lfc3RhdHVzID09IFNBTV9TVEFUX0JVU1kpCisJCQkJCQlzYy0+cmVzdWx0ID0gU0FNX1NUQVRfQlVTWTsKKwkJCQkJZWxzZQorCQkJCQkJc2MtPnJlc3VsdCA9IERJRF9TT0ZUX0VSUk9SIDw8IDE2OwogCQkJCX0KIAkJCQlpZiAoc2NzaV9zdGF0ZSAmIChNUElfU0NTSV9TVEFURV9BVVRPU0VOU0VfRkFJTEVEIHwgTVBJX1NDU0lfU1RBVEVfTk9fU0NTSV9TVEFUVVMpKSB7CiAJCQkJCS8qIFdoYXQgdG8gZG8/CkBAIC03MTcsOCArNzMxLDEwIEBACiAKIAkJY2FzZSBNUElfSU9DU1RBVFVTX1NDU0lfUkVDT1ZFUkVEX0VSUk9SOgkvKiAweDAwNDAgKi8KIAkJY2FzZSBNUElfSU9DU1RBVFVTX1NVQ0NFU1M6CQkJLyogMHgwMDAwICovCi0JCQlzY3NpX3N0YXR1cyA9IHBTY3NpUmVwbHktPlNDU0lTdGF0dXM7Ci0JCQlzYy0+cmVzdWx0ID0gKERJRF9PSyA8PCAxNikgfCBzY3NpX3N0YXR1czsKKwkJCWlmIChzY3NpX3N0YXR1cyA9PSBNUElfU0NTSV9TVEFUVVNfQlVTWSkKKwkJCQlzYy0+cmVzdWx0ID0gKERJRF9CVVNfQlVTWSA8PCAxNikgfCBzY3NpX3N0YXR1czsKKwkJCWVsc2UKKwkJCQlzYy0+cmVzdWx0ID0gKERJRF9PSyA8PCAxNikgfCBzY3NpX3N0YXR1czsKIAkJCWlmIChzY3NpX3N0YXRlID09IDApIHsKIAkJCQk7CiAJCQl9IGVsc2UgaWYgKHNjc2lfc3RhdGUgJiBNUElfU0NTSV9TVEFURV9BVVRPU0VOU0VfVkFMSUQpIHsKQEAgLTg5MCwxMiArOTA2LDEzIEBACiAJU0NTSUlPUmVxdWVzdF90CSptZiA9IE5VTEw7CiAJaW50CQkgaWk7CiAJaW50CQkgbWF4ID0gaGQtPmlvYy0+cmVxX2RlcHRoOworCXN0cnVjdCBzY3NpX2NtbmQgKnNjOwogCiAJZHNwcmludGsoKEtFUk5fSU5GTyBNWU5BTSAiOiBzZWFyY2hfcnVubmluZyB0YXJnZXQgJWQgbHVuICVkIG1heCAlZFxuIiwKIAkJCXRhcmdldCwgbHVuLCBtYXgpKTsKIAogCWZvciAoaWk9MDsgaWkgPCBtYXg7IGlpKyspIHsKLQkJaWYgKGhkLT5TY3NpTG9va3VwW2lpXSAhPSBOVUxMKSB7CisJCWlmICgoc2MgPSBoZC0+U2NzaUxvb2t1cFtpaV0pICE9IE5VTEwpIHsKIAogCQkJbWYgPSAoU0NTSUlPUmVxdWVzdF90ICopTVBUX0lOREVYXzJfTUZQVFIoaGQtPmlvYywgaWkpOwogCkBAIC05MTAsOSArOTI3LDIyIEBACiAJCQloZC0+U2NzaUxvb2t1cFtpaV0gPSBOVUxMOwogCQkJbXB0c2NzaWhfZnJlZUNoYWluQnVmZmVycyhoZC0+aW9jLCBpaSk7CiAJCQltcHRfZnJlZV9tc2dfZnJhbWUoaGQtPmlvYywgKE1QVF9GUkFNRV9IRFIgKiltZik7CisJCQlpZiAoc2MtPnVzZV9zZykgeworCQkJCXBjaV91bm1hcF9zZyhoZC0+aW9jLT5wY2lkZXYsCisJCQkJKHN0cnVjdCBzY2F0dGVybGlzdCAqKSBzYy0+cmVxdWVzdF9idWZmZXIsCisJCQkJCXNjLT51c2Vfc2csCisJCQkJCXNjLT5zY19kYXRhX2RpcmVjdGlvbik7CisJCQl9IGVsc2UgaWYgKHNjLT5yZXF1ZXN0X2J1ZmZsZW4pIHsKKwkJCQlwY2lfdW5tYXBfc2luZ2xlKGhkLT5pb2MtPnBjaWRldiwKKwkJCQkJc2MtPlNDcC5kbWFfaGFuZGxlLAorCQkJCQlzYy0+cmVxdWVzdF9idWZmbGVuLAorCQkJCQlzYy0+c2NfZGF0YV9kaXJlY3Rpb24pOworCQkJfQorCQkJc2MtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOworCQkJc2MtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OworCQkJc2MtPnNjc2lfZG9uZShzYyk7CiAJCX0KIAl9Ci0KIAlyZXR1cm47CiB9CiAKQEAgLTk2Nyw4ICs5OTcsMTAgQEAKIAl1bnNpZ25lZCBsb25nCSAJZmxhZ3M7CiAJaW50IHN6MTsKIAotCWlmKCFob3N0KQorCWlmKCFob3N0KSB7CisJCW1wdF9kZXRhY2gocGRldik7CiAJCXJldHVybjsKKwl9CiAKIAlzY3NpX3JlbW92ZV9ob3N0KGhvc3QpOwogCkBAIC0xMjU2LDggKzEyODgsNyBAQAogCU1QVF9TQ1NJX0hPU1QJCSpoZDsKIAlNUFRfRlJBTUVfSERSCQkqbWY7CiAJU0NTSUlPUmVxdWVzdF90CQkqcFNjc2lSZXE7Ci0JVmlydERldmljZQkJKnBUYXJnZXQ7Ci0JaW50CSB0YXJnZXQ7CisJVmlydERldmljZQkJKnBUYXJnZXQgPSBTQ3BudC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAlpbnQJIGx1bjsKIAl1MzIJIGRhdGFsZW47CiAJdTMyCSBzY3NpY3RsOwpAQCAtMTI2NywxMiArMTI5OCw5IEBACiAJaW50CSBpaTsKIAogCWhkID0gKE1QVF9TQ1NJX0hPU1QgKikgU0NwbnQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7Ci0JdGFyZ2V0ID0gU0NwbnQtPmRldmljZS0+aWQ7CiAJbHVuID0gU0NwbnQtPmRldmljZS0+bHVuOwogCVNDcG50LT5zY3NpX2RvbmUgPSBkb25lOwogCi0JcFRhcmdldCA9IGhkLT5UYXJnZXRzW3RhcmdldF07Ci0KIAlkbWZwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgInFjbWQ6IFNDcG50PSVwLCBkb25lKCk9JXBcbiIsCiAJCQkoaGQgJiYgaGQtPmlvYykgPyBoZC0+aW9jLT5uYW1lIDogImlvYz8iLCBTQ3BudCwgZG9uZSkpOwogCkBAIC0xMzE1LDcgKzEzNDMsNyBAQAogCS8qIERlZmF1bHQgdG8gdW50YWdnZWQuIE9uY2UgYSB0YXJnZXQgc3RydWN0dXJlIGhhcyBiZWVuIGFsbG9jYXRlZCwKIAkgKiB1c2UgdGhlIElucXVpcnkgZGF0YSB0byBkZXRlcm1pbmUgaWYgZGV2aWNlIHN1cHBvcnRzIHRhZ2dlZC4KIAkgKi8KLQlpZiAoICAgcFRhcmdldAorCWlmIChwVGFyZ2V0CiAJICAgICYmIChwVGFyZ2V0LT50ZmxhZ3MgJiBNUFRfVEFSR0VUX0ZMQUdTX1FfWUVTKQogCSAgICAmJiAoU0NwbnQtPmRldmljZS0+dGFnZ2VkX3N1cHBvcnRlZCkpIHsKIAkJc2NzaWN0bCA9IHNjc2lkaXIgfCBNUElfU0NTSUlPX0NPTlRST0xfU0lNUExFUTsKQEAgLTEzMjUsOCArMTM1Myw4IEBACiAKIAkvKiBVc2UgdGhlIGFib3ZlIGluZm9ybWF0aW9uIHRvIHNldCB1cCB0aGUgbWVzc2FnZSBmcmFtZQogCSAqLwotCXBTY3NpUmVxLT5UYXJnZXRJRCA9ICh1OCkgdGFyZ2V0OwotCXBTY3NpUmVxLT5CdXMgPSAodTgpIFNDcG50LT5kZXZpY2UtPmNoYW5uZWw7CisJcFNjc2lSZXEtPlRhcmdldElEID0gKHU4KSBwVGFyZ2V0LT50YXJnZXRfaWQ7CisJcFNjc2lSZXEtPkJ1cyA9IHBUYXJnZXQtPmJ1c19pZDsKIAlwU2NzaVJlcS0+Q2hhaW5PZmZzZXQgPSAwOwogCXBTY3NpUmVxLT5GdW5jdGlvbiA9IE1QSV9GVU5DVElPTl9TQ1NJX0lPX1JFUVVFU1Q7CiAJcFNjc2lSZXEtPkNEQkxlbmd0aCA9IFNDcG50LT5jbWRfbGVuOwpAQCAtMTM3OCw3ICsxNDA2LDcgQEAKIAogI2lmZGVmIE1QVFNDU0lIX0VOQUJMRV9ET01BSU5fVkFMSURBVElPTgogCWlmIChoZC0+aW9jLT5idXNfdHlwZSA9PSBTQ1NJKSB7Ci0JCWludCBkdlN0YXR1cyA9IGhkLT5pb2MtPnNwaV9kYXRhLmR2U3RhdHVzW3RhcmdldF07CisJCWludCBkdlN0YXR1cyA9IGhkLT5pb2MtPnNwaV9kYXRhLmR2U3RhdHVzW3BUYXJnZXQtPnRhcmdldF9pZF07CiAJCWludCBpc3N1ZUNtZCA9IDE7CiAKIAkJaWYgKGR2U3RhdHVzIHx8IGhkLT5pb2MtPnNwaV9kYXRhLmZvcmNlRHYpIHsKQEAgLTE0MjYsNiArMTQ1NCw3IEBACiAJcmV0dXJuIDA7CiAKICBmYWlsOgorCWhkLT5TY3NpTG9va3VwW215X2lkeF0gPSBOVUxMOwogCW1wdHNjc2loX2ZyZWVDaGFpbkJ1ZmZlcnMoaGQtPmlvYywgbXlfaWR4KTsKIAltcHRfZnJlZV9tc2dfZnJhbWUoaGQtPmlvYywgbWYpOwogCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwpAQCAtMTcxMywyNCArMTc0MiwyMyBAQAogCU1QVF9GUkFNRV9IRFIJKm1mOwogCXUzMgkJIGN0eDJhYm9ydDsKIAlpbnQJCSBzY3BudF9pZHg7CisJaW50CQkgcmV0dmFsOwogCiAJLyogSWYgd2UgY2FuJ3QgbG9jYXRlIG91ciBob3N0IGFkYXB0ZXIgc3RydWN0dXJlLCByZXR1cm4gRkFJTEVEIHN0YXR1cy4KIAkgKi8KIAlpZiAoKGhkID0gKE1QVF9TQ1NJX0hPU1QgKikgU0NwbnQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGEpID09IE5VTEwpIHsKIAkJU0NwbnQtPnJlc3VsdCA9IERJRF9SRVNFVCA8PCAxNjsKIAkJU0NwbnQtPnNjc2lfZG9uZShTQ3BudCk7Ci0JCWRmYWlscHJpbnRrKChLRVJOX1dBUk5JTkcgTVlOQU0gIjogbXB0c2NzaWhfYWJvcnQ6ICIKKwkJZGZhaWxwcmludGsoKEtFUk5fSU5GTyBNWU5BTSAiOiBtcHRzY3NpaF9hYm9ydDogIgogCQkJICAgIkNhbid0IGxvY2F0ZSBob3N0ISAoc2M9JXApXG4iLAogCQkJICAgU0NwbnQpKTsKIAkJcmV0dXJuIEZBSUxFRDsKIAl9CiAKIAlpb2MgPSBoZC0+aW9jOwotCWlmIChoZC0+cmVzZXRQZW5kaW5nKQorCWlmIChoZC0+cmVzZXRQZW5kaW5nKSB7CiAJCXJldHVybiBGQUlMRUQ7Ci0KLQlwcmludGsoS0VSTl9XQVJOSU5HIE1ZTkFNICI6ICVzOiA+PiBBdHRlbXB0aW5nIHRhc2sgYWJvcnQhIChzYz0lcClcbiIsCi0JICAgICAgIGhkLT5pb2MtPm5hbWUsIFNDcG50KTsKKwl9CiAKIAlpZiAoaGQtPnRpbWVvdXRzIDwgLTEpCiAJCWhkLT50aW1lb3V0cysrOwpAQCAtMTczOCwxNiArMTc2NiwyMCBAQAogCS8qIEZpbmQgdGhpcyBjb21tYW5kCiAJICovCiAJaWYgKChzY3BudF9pZHggPSBTQ1BOVF9UT19MT09LVVBfSURYKFNDcG50KSkgPCAwKSB7Ci0JCS8qIENtZCBub3QgZm91bmQgaW4gU2NzaUxvb2t1cC4gCisJCS8qIENtZCBub3QgZm91bmQgaW4gU2NzaUxvb2t1cC4KIAkJICogRG8gT1MgY2FsbGJhY2suCiAJCSAqLwogCQlTQ3BudC0+cmVzdWx0ID0gRElEX1JFU0VUIDw8IDE2OwotCQlkdG1wcmludGsoKEtFUk5fV0FSTklORyBNWU5BTSAiOiAlczogbXB0c2NzaWhfYWJvcnQ6ICIKKwkJZHRtcHJpbnRrKChLRVJOX0lORk8gTVlOQU0gIjogJXM6IG1wdHNjc2loX2Fib3J0OiAiCiAJCQkgICAiQ29tbWFuZCBub3QgaW4gdGhlIGFjdGl2ZSBsaXN0ISAoc2M9JXApXG4iLAogCQkJICAgaGQtPmlvYy0+bmFtZSwgU0NwbnQpKTsKIAkJcmV0dXJuIFNVQ0NFU1M7CiAJfQogCisJcHJpbnRrKEtFUk5fV0FSTklORyBNWU5BTSAiOiAlczogYXR0ZW1wdGluZyB0YXNrIGFib3J0ISAoc2M9JXApXG4iLAorCSAgICAgICBoZC0+aW9jLT5uYW1lLCBTQ3BudCk7CisJc2NzaV9wcmludF9jb21tYW5kKFNDcG50KTsKKwogCS8qIE1vc3QgaW1wb3J0YW50ISAgU2V0IFRhc2tNc2dDb250ZXh0IHRvIFNDcG50J3MgTXNnQ29udGV4dCEKIAkgKiAodGhlIElPIHRvIGJlIEFCT1JUJ2QpCiAJICoKQEAgLTE3NjAsMzggKzE3OTIsMjIgQEAKIAogCWhkLT5hYm9ydFNDcG50ID0gU0NwbnQ7CiAKLQlpZiAobXB0c2NzaWhfVE1IYW5kbGVyKGhkLCBNUElfU0NTSVRBU0tNR01UX1RBU0tUWVBFX0FCT1JUX1RBU0ssCisJcmV0dmFsID0gbXB0c2NzaWhfVE1IYW5kbGVyKGhkLCBNUElfU0NTSVRBU0tNR01UX1RBU0tUWVBFX0FCT1JUX1RBU0ssCiAJCVNDcG50LT5kZXZpY2UtPmNoYW5uZWwsIFNDcG50LT5kZXZpY2UtPmlkLCBTQ3BudC0+ZGV2aWNlLT5sdW4sCi0JCWN0eDJhYm9ydCwgMiAvKiAyIHNlY29uZCB0aW1lb3V0ICovKQotCQk8IDApIHsKKwkJY3R4MmFib3J0LCAyIC8qIDIgc2Vjb25kIHRpbWVvdXQgKi8pOwogCi0JCS8qIFRoZSBUTSByZXF1ZXN0IGZhaWxlZCBhbmQgdGhlIHN1YnNlcXVlbnQgRlctcmVsb2FkIGZhaWxlZCEKLQkJICogRmF0YWwgZXJyb3IgY2FzZS4KLQkJICovCi0JCXByaW50ayhNWUlPQ19zX1dBUk5fRk1UICJFcnJvciBpc3N1aW5nIGFib3J0IHRhc2shIChzYz0lcClcbiIsCi0JCSAgICAgICBoZC0+aW9jLT5uYW1lLCBTQ3BudCk7CisJcHJpbnRrIChLRVJOX1dBUk5JTkcgTVlOQU0gIjogJXM6IHRhc2sgYWJvcnQ6ICVzIChzYz0lcClcbiIsCisJCWhkLT5pb2MtPm5hbWUsCisJCSgocmV0dmFsID09IDApID8gIlNVQ0NFU1MiIDogIkZBSUxFRCIgKSwgU0NwbnQpOwogCi0JCS8qIFdlIG11c3QgY2xlYXIgb3VyIHBlbmRpbmcgZmxhZyBiZWZvcmUgY2xlYXJpbmcgb3VyIHN0YXRlLgotCQkgKi8KKwlpZiAocmV0dmFsID09IDApCisJCXJldHVybiBTVUNDRVNTOworCisJaWYocmV0dmFsICE9IEZBSUxFRCApIHsKIAkJaGQtPnRtUGVuZGluZyA9IDA7CiAJCWhkLT50bVN0YXRlID0gVE1fU1RBVEVfTk9ORTsKLQotCQkvKiBVbm1hcCB0aGUgRE1BIGJ1ZmZlcnMsIGlmIGFueS4gKi8KLQkJaWYgKFNDcG50LT51c2Vfc2cpIHsKLQkJCXBjaV91bm1hcF9zZyhpb2MtPnBjaWRldiwgKHN0cnVjdCBzY2F0dGVybGlzdCAqKSBTQ3BudC0+cmVxdWVzdF9idWZmZXIsCi0JCQkJICAgIFNDcG50LT51c2Vfc2csIFNDcG50LT5zY19kYXRhX2RpcmVjdGlvbik7Ci0JCX0gZWxzZSBpZiAoU0NwbnQtPnJlcXVlc3RfYnVmZmxlbikgewotCQkJcGNpX3VubWFwX3NpbmdsZShpb2MtPnBjaWRldiwgU0NwbnQtPlNDcC5kbWFfaGFuZGxlLAotCQkJCVNDcG50LT5yZXF1ZXN0X2J1ZmZsZW4sIFNDcG50LT5zY19kYXRhX2RpcmVjdGlvbik7Ci0JCX0KLQkJaGQtPlNjc2lMb29rdXBbc2NwbnRfaWR4XSA9IE5VTEw7Ci0JCVNDcG50LT5yZXN1bHQgPSBESURfUkVTRVQgPDwgMTY7Ci0JCVNDcG50LT5zY3NpX2RvbmUoU0NwbnQpOwkJLyogSXNzdWUgdGhlIGNvbW1hbmQgY2FsbGJhY2sgKi8KLQkJbXB0c2NzaWhfZnJlZUNoYWluQnVmZmVycyhpb2MsIHNjcG50X2lkeCk7Ci0JCW1wdF9mcmVlX21zZ19mcmFtZShpb2MsIG1mKTsKLQkJcmV0dXJuIEZBSUxFRDsKIAl9Ci0JcmV0dXJuIFNVQ0NFU1M7CisJcmV0dXJuIEZBSUxFRDsKIH0KIAogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwpAQCAtMTgwNywxMSArMTgyMywxMiBAQAogbXB0c2NzaWhfZGV2X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKiBTQ3BudCkKIHsKIAlNUFRfU0NTSV9IT1NUCSpoZDsKKwlpbnQJCSByZXR2YWw7CiAKIAkvKiBJZiB3ZSBjYW4ndCBsb2NhdGUgb3VyIGhvc3QgYWRhcHRlciBzdHJ1Y3R1cmUsIHJldHVybiBGQUlMRUQgc3RhdHVzLgogCSAqLwogCWlmICgoaGQgPSAoTVBUX1NDU0lfSE9TVCAqKSBTQ3BudC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YSkgPT0gTlVMTCl7Ci0JCWR0bXByaW50aygoS0VSTl9XQVJOSU5HIE1ZTkFNICI6IG1wdHNjc2loX2Rldl9yZXNldDogIgorCQlkdG1wcmludGsoKEtFUk5fSU5GTyBNWU5BTSAiOiBtcHRzY3NpaF9kZXZfcmVzZXQ6ICIKIAkJCSAgICJDYW4ndCBsb2NhdGUgaG9zdCEgKHNjPSVwKVxuIiwKIAkJCSAgIFNDcG50KSk7CiAJCXJldHVybiBGQUlMRUQ7CkBAIC0xODIwLDI0ICsxODM3LDI2IEBACiAJaWYgKGhkLT5yZXNldFBlbmRpbmcpCiAJCXJldHVybiBGQUlMRUQ7CiAKLQlwcmludGsoS0VSTl9XQVJOSU5HIE1ZTkFNICI6ICVzOiA+PiBBdHRlbXB0aW5nIHRhcmdldCByZXNldCEgKHNjPSVwKVxuIiwKKwlwcmludGsoS0VSTl9XQVJOSU5HIE1ZTkFNICI6ICVzOiBhdHRlbXB0aW5nIHRhcmdldCByZXNldCEgKHNjPSVwKVxuIiwKIAkgICAgICAgaGQtPmlvYy0+bmFtZSwgU0NwbnQpOworCXNjc2lfcHJpbnRfY29tbWFuZChTQ3BudCk7CiAKLQlpZiAobXB0c2NzaWhfVE1IYW5kbGVyKGhkLCBNUElfU0NTSVRBU0tNR01UX1RBU0tUWVBFX1RBUkdFVF9SRVNFVCwKKwlyZXR2YWwgPSBtcHRzY3NpaF9UTUhhbmRsZXIoaGQsIE1QSV9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfVEFSR0VUX1JFU0VULAogCQlTQ3BudC0+ZGV2aWNlLT5jaGFubmVsLCBTQ3BudC0+ZGV2aWNlLT5pZCwKLQkJMCwgMCwgNSAvKiA1IHNlY29uZCB0aW1lb3V0ICovKQotCQk8IDApewotCQkvKiBUaGUgVE0gcmVxdWVzdCBmYWlsZWQgYW5kIHRoZSBzdWJzZXF1ZW50IEZXLXJlbG9hZCBmYWlsZWQhCi0JCSAqIEZhdGFsIGVycm9yIGNhc2UuCi0JCSAqLwotCQlwcmludGsoTVlJT0Nfc19XQVJOX0ZNVCAiRXJyb3IgcHJvY2Vzc2luZyBUYXNrTWdtdCByZXF1ZXN0IChzYz0lcClcbiIsCi0JCSAJCWhkLT5pb2MtPm5hbWUsIFNDcG50KTsKKwkJMCwgMCwgNSAvKiA1IHNlY29uZCB0aW1lb3V0ICovKTsKKworCXByaW50ayAoS0VSTl9XQVJOSU5HIE1ZTkFNICI6ICVzOiB0YXJnZXQgcmVzZXQ6ICVzIChzYz0lcClcbiIsCisJCWhkLT5pb2MtPm5hbWUsCisJCSgocmV0dmFsID09IDApID8gIlNVQ0NFU1MiIDogIkZBSUxFRCIgKSwgU0NwbnQpOworCisJaWYgKHJldHZhbCA9PSAwKQorCQlyZXR1cm4gU1VDQ0VTUzsKKworCWlmKHJldHZhbCAhPSBGQUlMRUQgKSB7CiAJCWhkLT50bVBlbmRpbmcgPSAwOwogCQloZC0+dG1TdGF0ZSA9IFRNX1NUQVRFX05PTkU7Ci0JCXJldHVybiBGQUlMRUQ7CiAJfQotCi0JcmV0dXJuIFNVQ0NFU1M7CisJcmV0dXJuIEZBSUxFRDsKIH0KIAogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwpAQCAtMTg1Myw0MSArMTg3MiwzOSBAQAogbXB0c2NzaWhfYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKiBTQ3BudCkKIHsKIAlNUFRfU0NTSV9IT1NUCSpoZDsKLQlzcGlubG9ja190CSpob3N0X2xvY2sgPSBTQ3BudC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2s7CisJaW50CQkgcmV0dmFsOwogCiAJLyogSWYgd2UgY2FuJ3QgbG9jYXRlIG91ciBob3N0IGFkYXB0ZXIgc3RydWN0dXJlLCByZXR1cm4gRkFJTEVEIHN0YXR1cy4KIAkgKi8KIAlpZiAoKGhkID0gKE1QVF9TQ1NJX0hPU1QgKikgU0NwbnQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGEpID09IE5VTEwpewotCQlkdG1wcmludGsoKEtFUk5fV0FSTklORyBNWU5BTSAiOiBtcHRzY3NpaF9idXNfcmVzZXQ6ICIKKwkJZHRtcHJpbnRrKChLRVJOX0lORk8gTVlOQU0gIjogbXB0c2NzaWhfYnVzX3Jlc2V0OiAiCiAJCQkgICAiQ2FuJ3QgbG9jYXRlIGhvc3QhIChzYz0lcClcbiIsCiAJCQkgICBTQ3BudCApICk7CiAJCXJldHVybiBGQUlMRUQ7CiAJfQogCi0JcHJpbnRrKEtFUk5fV0FSTklORyBNWU5BTSAiOiAlczogPj4gQXR0ZW1wdGluZyBidXMgcmVzZXQhIChzYz0lcClcbiIsCisJcHJpbnRrKEtFUk5fV0FSTklORyBNWU5BTSAiOiAlczogYXR0ZW1wdGluZyBidXMgcmVzZXQhIChzYz0lcClcbiIsCiAJICAgICAgIGhkLT5pb2MtPm5hbWUsIFNDcG50KTsKKwlzY3NpX3ByaW50X2NvbW1hbmQoU0NwbnQpOwogCiAJaWYgKGhkLT50aW1lb3V0cyA8IC0xKQogCQloZC0+dGltZW91dHMrKzsKIAotCS8qIFdlIGFyZSBub3cgcmVhZHkgdG8gZXhlY3V0ZSB0aGUgdGFzayBtYW5hZ2VtZW50IHJlcXVlc3QuICovCi0JaWYgKG1wdHNjc2loX1RNSGFuZGxlcihoZCwgTVBJX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9SRVNFVF9CVVMsCi0JCVNDcG50LT5kZXZpY2UtPmNoYW5uZWwsIDAsIDAsIDAsIDUgLyogNSBzZWNvbmQgdGltZW91dCAqLykKLQkgICAgPCAwKXsKKwlyZXR2YWwgPSBtcHRzY3NpaF9UTUhhbmRsZXIoaGQsIE1QSV9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfUkVTRVRfQlVTLAorCQlTQ3BudC0+ZGV2aWNlLT5jaGFubmVsLCAwLCAwLCAwLCA1IC8qIDUgc2Vjb25kIHRpbWVvdXQgKi8pOwogCi0JCS8qIFRoZSBUTSByZXF1ZXN0IGZhaWxlZCBhbmQgdGhlIHN1YnNlcXVlbnQgRlctcmVsb2FkIGZhaWxlZCEKLQkJICogRmF0YWwgZXJyb3IgY2FzZS4KLQkJICovCi0JCXByaW50ayhNWUlPQ19zX1dBUk5fRk1UCi0JCSAgICAgICAiRXJyb3IgcHJvY2Vzc2luZyBUYXNrTWdtdCByZXF1ZXN0IChzYz0lcClcbiIsCi0JCSAgICAgICBoZC0+aW9jLT5uYW1lLCBTQ3BudCk7CisJcHJpbnRrIChLRVJOX1dBUk5JTkcgTVlOQU0gIjogJXM6IGJ1cyByZXNldDogJXMgKHNjPSVwKVxuIiwKKwkJaGQtPmlvYy0+bmFtZSwKKwkJKChyZXR2YWwgPT0gMCkgPyAiU1VDQ0VTUyIgOiAiRkFJTEVEIiApLCBTQ3BudCk7CisKKwlpZiAocmV0dmFsID09IDApCisJCXJldHVybiBTVUNDRVNTOworCisJaWYocmV0dmFsICE9IEZBSUxFRCApIHsKIAkJaGQtPnRtUGVuZGluZyA9IDA7CiAJCWhkLT50bVN0YXRlID0gVE1fU1RBVEVfTk9ORTsKLQkJc3Bpbl9sb2NrX2lycShob3N0X2xvY2spOwotCQlyZXR1cm4gRkFJTEVEOwogCX0KLQotCXJldHVybiBTVUNDRVNTOworCXJldHVybiBGQUlMRUQ7CiB9CiAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KQEAgLTIxNjksNyArMjE4Niw3IEBACiAJdmRldi0+cmFpZFZvbHVtZSA9IDA7CiAJaGQtPlRhcmdldHNbZGV2aWNlLT5pZF0gPSB2ZGV2OwogCWlmIChoZC0+aW9jLT5idXNfdHlwZSA9PSBTQ1NJKSB7Ci0JCWlmIChoZC0+aW9jLT5zcGlfZGF0YS5pc1JhaWQgJiAoMSA8PCBkZXZpY2UtPmlkKSkgeworCQlpZiAoaGQtPmlvYy0+cmFpZF9kYXRhLmlzUmFpZCAmICgxIDw8IGRldmljZS0+aWQpKSB7CiAJCQl2ZGV2LT5yYWlkVm9sdW1lID0gMTsKIAkJCWRkdnRwcmludGsoKEtFUk5fSU5GTwogCQkJICAgICJSQUlEIFZvbHVtZSBAIGlkICVkXG4iLCBkZXZpY2UtPmlkKSk7CkBAIC0yMTgwLDIyICsyMTk3LDcgQEAKIAogIG91dDoKIAl2ZGV2LT5udW1fbHVucysrOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IAotbXB0c2NzaWhfaXNfcmFpZF92b2x1bWUoTVBUX1NDU0lfSE9TVCAqaGQsIHVpbnQgaWQpCi17Ci0JaW50IGk7Ci0KLQlpZiAoIWhkLT5pb2MtPnNwaV9kYXRhLmlzUmFpZCB8fCAhaGQtPmlvYy0+c3BpX2RhdGEucElvY1BnMykKLQkJcmV0dXJuIDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgaGQtPmlvYy0+c3BpX2RhdGEucElvY1BnMy0+TnVtUGh5c0Rpc2tzOyBpKyspIHsKLQkJaWYgKGlkID09IGhkLT5pb2MtPnNwaV9kYXRhLnBJb2NQZzMtPlBoeXNEaXNrW2ldLlBoeXNEaXNrSUQpCi0JCQlyZXR1cm4gMTsKLQl9Ci0KKwlkZXZpY2UtPmhvc3RkYXRhID0gdmRldjsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjIyNiw3ICsyMjI4LDcgQEAKIAloZC0+VGFyZ2V0c1t0YXJnZXRdID0gTlVMTDsKIAogCWlmIChoZC0+aW9jLT5idXNfdHlwZSA9PSBTQ1NJKSB7Ci0JCWlmIChtcHRzY3NpaF9pc19yYWlkX3ZvbHVtZShoZCwgdGFyZ2V0KSkgeworCQlpZiAobXB0c2NzaWhfaXNfcGh5c19kaXNrKGhkLT5pb2MsIHRhcmdldCkpIHsKIAkJCWhkLT5pb2MtPnNwaV9kYXRhLmZvcmNlRHYgfD0gTVBUX1NDU0lDRkdfUkVMT0FEX0lPQ19QRzM7CiAJCX0gZWxzZSB7CiAJCQloZC0+aW9jLT5zcGlfZGF0YS5kdlN0YXR1c1t0YXJnZXRdID0KQEAgLTI0MzksNiArMjQ0MSw3IEBACiB7CiAJTVBUX1NDU0lfSE9TVAkqaGQ7CiAJdW5zaWduZWQgbG9uZwkgZmxhZ3M7CisJaW50IAkJaWk7CiAKIAlkdG1wcmludGsoKEtFUk5fV0FSTklORyBNWU5BTQogCQkJIjogSU9DICVzX3Jlc2V0IHJvdXRlZCB0byBTQ1NJIGhvc3QgZHJpdmVyIVxuIiwKQEAgLTI0OTYsMTEgKzI0OTksOCBAQAogCiAJCS8qIFNjc2lMb29rdXAgaW5pdGlhbGl6YXRpb24KIAkJICovCi0JCXsKLQkJCWludCBpaTsKLQkJCWZvciAoaWk9MDsgaWkgPCBoZC0+aW9jLT5yZXFfZGVwdGg7IGlpKyspCi0JCQkJaGQtPlNjc2lMb29rdXBbaWldID0gTlVMTDsKLQkJfQorCQlmb3IgKGlpPTA7IGlpIDwgaGQtPmlvYy0+cmVxX2RlcHRoOyBpaSsrKQorCQkJaGQtPlNjc2lMb29rdXBbaWldID0gTlVMTDsKIAogCQkvKiAyLiBDaGFpbiBCdWZmZXIgaW5pdGlhbGl6YXRpb24KIAkJICovCkBAIC0yNTQ5LDYgKzI1NDksMTYgQEAKIH0KIAogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLworLyogd29yayBxdWV1ZSB0aHJlYWQgdG8gY2xlYXIgdGhlIHBlcnNpdGVuY3kgdGFibGUgKi8KK3N0YXRpYyB2b2lkCittcHRzY3NpaF9zYXNfcGVyc2lzdF9jbGVhcl90YWJsZSh2b2lkICogYXJnKQoreworCU1QVF9BREFQVEVSICppb2MgPSAoTVBUX0FEQVBURVIgKilhcmc7CisKKwltcHRiYXNlX3Nhc19wZXJzaXN0X29wZXJhdGlvbihpb2MsIE1QSV9TQVNfT1BfQ0xFQVJfTk9UX1BSRVNFTlQpOworfQorCisvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCiBpbnQKIG1wdHNjc2loX2V2ZW50X3Byb2Nlc3MoTVBUX0FEQVBURVIgKmlvYywgRXZlbnROb3RpZmljYXRpb25SZXBseV90ICpwRXZSZXBseSkKIHsKQEAgLTI1NTgsMTggKzI1NjgsMTggQEAKIAlkZXZ0cHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJNUFQgZXZlbnQgKD0lMDJYaCkgcm91dGVkIHRvIFNDU0kgaG9zdCBkcml2ZXIhXG4iLAogCQkJaW9jLT5uYW1lLCBldmVudCkpOwogCisJaWYgKGlvYy0+c2ggPT0gTlVMTCB8fAorCQkoKGhkID0gKE1QVF9TQ1NJX0hPU1QgKilpb2MtPnNoLT5ob3N0ZGF0YSkgPT0gTlVMTCkpCisJCXJldHVybiAxOworCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgTVBJX0VWRU5UX1VOSVRfQVRURU5USU9OOgkJCS8qIDAzICovCiAJCS8qIEZJWE1FISAqLwogCQlicmVhazsKIAljYXNlIE1QSV9FVkVOVF9JT0NfQlVTX1JFU0VUOgkJCS8qIDA0ICovCiAJY2FzZSBNUElfRVZFTlRfRVhUX0JVU19SRVNFVDoJCQkvKiAwNSAqLwotCQloZCA9IE5VTEw7Ci0JCWlmIChpb2MtPnNoKSB7Ci0JCQloZCA9IChNUFRfU0NTSV9IT1NUICopIGlvYy0+c2gtPmhvc3RkYXRhOwotCQkJaWYgKGhkICYmIChpb2MtPmJ1c190eXBlID09IFNDU0kpICYmIChoZC0+c29mdF9yZXNldHMgPCAtMSkpCi0JCQkJaGQtPnNvZnRfcmVzZXRzKys7Ci0JCX0KKwkJaWYgKGhkICYmIChpb2MtPmJ1c190eXBlID09IFNDU0kpICYmIChoZC0+c29mdF9yZXNldHMgPCAtMSkpCisJCQloZC0+c29mdF9yZXNldHMrKzsKIAkJYnJlYWs7CiAJY2FzZSBNUElfRVZFTlRfTE9HT1VUOgkJCQkvKiAwOSAqLwogCQkvKiBGSVhNRSEgKi8KQEAgLTI1ODgsNjkgKzI1OTgsMjQgQEAKIAkJYnJlYWs7CiAKIAljYXNlIE1QSV9FVkVOVF9JTlRFR1JBVEVEX1JBSUQ6CQkJLyogMEIgKi8KKwl7CisJCXBNcGlFdmVudERhdGFSYWlkX3QgcFJhaWRFdmVudERhdGEgPQorCQkgICAgKHBNcGlFdmVudERhdGFSYWlkX3QpIHBFdlJlcGx5LT5EYXRhOwogI2lmZGVmIE1QVFNDU0lIX0VOQUJMRV9ET01BSU5fVkFMSURBVElPTgotCQkvKiBuZWdvTnZyYW0gc2V0IHRvIDAgaWYgRFYgZW5hYmxlZCBhbmQgdG8gVVNFX05WUkFNIGlmCi0JCSAqIGlmIERWIGRpc2FibGVkLiBOZWVkIHRvIGNoZWNrIGZvciB0YXJnZXQgbW9kZS4KLQkJICovCi0JCWhkID0gTlVMTDsKLQkJaWYgKGlvYy0+c2gpCi0JCQloZCA9IChNUFRfU0NTSV9IT1NUICopIGlvYy0+c2gtPmhvc3RkYXRhOwotCi0JCWlmIChoZCAmJiAoaW9jLT5idXNfdHlwZSA9PSBTQ1NJKSAmJiAoaGQtPm5lZ29OdnJhbSA9PSAwKSkgewotCQkJU2NzaUNmZ0RhdGEJKnBTcGk7Ci0JCQlJb2MzUGh5c0Rpc2tfdAkqcFBEaXNrOwotCQkJaW50CQkgbnVtUERpc2s7Ci0JCQl1OAkJIHJlYXNvbjsKLQkJCXU4CQkgcGh5c0Rpc2tOdW07Ci0KLQkJCXJlYXNvbiA9IChsZTMyX3RvX2NwdShwRXZSZXBseS0+RGF0YVswXSkgJiAweDAwRkYwMDAwKSA+PiAxNjsKLQkJCWlmIChyZWFzb24gPT0gTVBJX0VWRU5UX1JBSURfUkNfRE9NQUlOX1ZBTF9ORUVERUQpIHsKLQkJCQkvKiBOZXcgb3IgcmVwbGFjZWQgZGlzay4KLQkJCQkgKiBTZXQgRFYgZmxhZyBhbmQgc2NoZWR1bGUgRFYuCi0JCQkJICovCi0JCQkJcFNwaSA9ICZpb2MtPnNwaV9kYXRhOwotCQkJCXBoeXNEaXNrTnVtID0gKGxlMzJfdG9fY3B1KHBFdlJlcGx5LT5EYXRhWzBdKSAmIDB4RkYwMDAwMDApID4+IDI0OwotCQkJCWRkdnRwcmludGsoKCJEViByZXF1ZXN0ZWQgZm9yIHBoeXMgZGlzayBpZCAlZFxuIiwgcGh5c0Rpc2tOdW0pKTsKLQkJCQlpZiAocFNwaS0+cElvY1BnMykgewotCQkJCQlwUERpc2sgPSAgcFNwaS0+cElvY1BnMy0+UGh5c0Rpc2s7Ci0JCQkJCW51bVBEaXNrID1wU3BpLT5wSW9jUGczLT5OdW1QaHlzRGlza3M7Ci0KLQkJCQkJd2hpbGUgKG51bVBEaXNrKSB7Ci0JCQkJCQlpZiAocGh5c0Rpc2tOdW0gPT0gcFBEaXNrLT5QaHlzRGlza051bSkgewotCQkJCQkJCXBTcGktPmR2U3RhdHVzW3BQRGlzay0+UGh5c0Rpc2tJRF0gPSAoTVBUX1NDU0lDRkdfTkVFRF9EViB8IE1QVF9TQ1NJQ0ZHX0RWX05PVF9ET05FKTsKLQkJCQkJCQlwU3BpLT5mb3JjZUR2ID0gTVBUX1NDU0lDRkdfTkVFRF9EVjsKLQkJCQkJCQlkZHZ0cHJpbnRrKCgiTkVFRF9EViBzZXQgZm9yIHBoeXMgZGlzayBpZCAlZFxuIiwgcFBEaXNrLT5QaHlzRGlza0lEKSk7Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCQl9Ci0JCQkJCQlwUERpc2srKzsKLQkJCQkJCW51bVBEaXNrLS07Ci0JCQkJCX0KLQotCQkJCQlpZiAobnVtUERpc2sgPT0gMCkgewotCQkJCQkJLyogVGhlIHBoeXNpY2FsIGRpc2sgdGhhdCBuZWVkcyBEViB3YXMgbm90IGZvdW5kCi0JCQkJCQkgKiBpbiB0aGUgc3RvcmVkIElPQyBQYWdlIDMuIFRoZSBkcml2ZXIgbXVzdCByZWxvYWQKLQkJCQkJCSAqIHRoaXMgcGFnZS4gRFYgcm91dGluZSB3aWxsIHNldCB0aGUgTkVFRF9EViBmbGFnIGZvcgotCQkJCQkJICogYWxsIHBoeXMgZGlza3MgdGhhdCBoYXZlIERWX05PVF9ET05FIHNldC4KLQkJCQkJCSAqLwotCQkJCQkJcFNwaS0+Zm9yY2VEdiA9IE1QVF9TQ1NJQ0ZHX05FRURfRFYgfCBNUFRfU0NTSUNGR19SRUxPQURfSU9DX1BHMzsKLQkJCQkJCWRkdnRwcmludGsoKCJwaHlzIGRpc2sgJWQgbm90IGZvdW5kLiBTZXR0aW5nIHJlbG9hZCBJT0MgUGczIEZsYWdcbiIsIHBoeXNEaXNrTnVtKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KKwkJLyogRG9tYWluIFZhbGlkYXRpb24gTmVlZGVkICovCisJCWlmIChpb2MtPmJ1c190eXBlID09IFNDU0kgJiYKKwkJICAgIHBSYWlkRXZlbnREYXRhLT5SZWFzb25Db2RlID09CisJCSAgICBNUElfRVZFTlRfUkFJRF9SQ19ET01BSU5fVkFMX05FRURFRCkKKwkJCW1wdHNjc2loX3NldF9kdmZsYWdzX3JhaWQoaGQsIHBSYWlkRXZlbnREYXRhLT5QaHlzRGlza051bSk7CiAjZW5kaWYKKwkJYnJlYWs7CisJfQogCi0jaWYgZGVmaW5lZChNUFRfREVCVUdfRFYpIHx8IGRlZmluZWQoTVBUX0RFQlVHX0RWX1RJTlkpCi0JCXByaW50aygiUmFpZCBFdmVudCBSRjogIik7Ci0JCXsKLQkJCXUzMiAqbSA9ICh1MzIgKilwRXZSZXBseTsKLQkJCWludCBpaTsKLQkJCWludCBuID0gKGludClwRXZSZXBseS0+TXNnTGVuZ3RoOwotCQkJZm9yIChpaT02OyBpaSA8IG47IGlpKyspCi0JCQkJcHJpbnRrKCIgJTA4eCIsIGxlMzJfdG9fY3B1KG1baWldKSk7Ci0JCQlwcmludGsoIlxuIik7Ci0JCX0KLSNlbmRpZgorCS8qIFBlcnNpc3RlbnQgdGFibGUgaXMgZnVsbC4gKi8KKwljYXNlIE1QSV9FVkVOVF9QRVJTSVNURU5UX1RBQkxFX0ZVTEw6CisJCUlOSVRfV09SSygmbXB0c2NzaWhfcGVyc2lzdFRhc2ssCisJCSAgICBtcHRzY3NpaF9zYXNfcGVyc2lzdF9jbGVhcl90YWJsZSwodm9pZCAqKWlvYyk7CisJCXNjaGVkdWxlX3dvcmsoJm1wdHNjc2loX3BlcnNpc3RUYXNrKTsKIAkJYnJlYWs7CiAKIAljYXNlIE1QSV9FVkVOVF9OT05FOgkJCQkvKiAwMCAqLwpAQCAtMjY4Nyw3ICsyNjUyLDcgQEAKIHsKIAlpbnQJCWluZGV4ZWRfbHVuLCBsdW5faW5kZXg7CiAJVmlydERldmljZQkqdmRldjsKLQlTY3NpQ2ZnRGF0YQkqcFNwaTsKKwlTcGlDZmdEYXRhCSpwU3BpOwogCWNoYXIJCWRhdGFfNTY7CiAKIAlkaW5pdHByaW50aygoTVlJT0Nfc19JTkZPX0ZNVCAiaW5pdFRhcmdldCBidXM9JWQgaWQ9JWQgbHVuPSVkIGhkPSVwXG4iLApAQCAtMjc5NCw3ICsyNzU5LDcgQEAKIHN0YXRpYyB2b2lkCiBtcHRzY3NpaF9zZXRUYXJnZXROZWdvUGFybXMoTVBUX1NDU0lfSE9TVCAqaGQsIFZpcnREZXZpY2UgKnRhcmdldCwgY2hhciBieXRlNTYpCiB7Ci0JU2NzaUNmZ0RhdGEgKnBzcGlfZGF0YSA9ICZoZC0+aW9jLT5zcGlfZGF0YTsKKwlTcGlDZmdEYXRhICpwc3BpX2RhdGEgPSAmaGQtPmlvYy0+c3BpX2RhdGE7CiAJaW50ICBpZCA9IChpbnQpIHRhcmdldC0+dGFyZ2V0X2lkOwogCWludCAgbnZyYW07CiAJVmlydERldmljZQkqdmRldjsKQEAgLTI5NzMsMTEgKzI5MzgsMTMgQEAKIHN0YXRpYyB2b2lkCiBtcHRzY3NpaF9zZXRfZHZmbGFncyhNUFRfU0NTSV9IT1NUICpoZCwgU0NTSUlPUmVxdWVzdF90ICpwUmVxKQogeworCU1QVF9BREFQVEVSCSppb2MgPSBoZC0+aW9jOwogCXU4IGNtZDsKLQlTY3NpQ2ZnRGF0YSAqcFNwaTsKKwlTcGlDZmdEYXRhCSpwU3BpOwogCi0JZGR2dHByaW50aygoIiBzZXRfZHZmbGFnczogaWQ9JWQgbHVuPSVkIG5lZ29OdnJhbT0leCBjbWQ9JXhcbiIsIAotCQlwUmVxLT5UYXJnZXRJRCwgcFJlcS0+TFVOWzFdLCBoZC0+bmVnb052cmFtLCBwUmVxLT5DREJbMF0pKTsKKwlkZHZ0cHJpbnRrKChNWUlPQ19zX05PVEVfRk1UCisJCSIgc2V0X2R2ZmxhZ3M6IGlkPSVkIGx1bj0lZCBuZWdvTnZyYW09JXggY21kPSV4XG4iLAorCQloZC0+aW9jLT5uYW1lLCBwUmVxLT5UYXJnZXRJRCwgcFJlcS0+TFVOWzFdLCBoZC0+bmVnb052cmFtLCBwUmVxLT5DREJbMF0pKTsKIAogCWlmICgocFJlcS0+TFVOWzFdICE9IDApIHx8IChoZC0+bmVnb052cmFtICE9IDApKQogCQlyZXR1cm47CkBAIC0yOTg1LDEyICsyOTUyLDEyIEBACiAJY21kID0gcFJlcS0+Q0RCWzBdOwogCiAJaWYgKChjbWQgPT0gUkVBRF9DQVBBQ0lUWSkgfHwgKGNtZCA9PSBNT0RFX1NFTlNFKSkgewotCQlwU3BpID0gJmhkLT5pb2MtPnNwaV9kYXRhOwotCQlpZiAoKHBTcGktPmlzUmFpZCAmICgxIDw8IHBSZXEtPlRhcmdldElEKSkgJiYgcFNwaS0+cElvY1BnMykgeworCQlwU3BpID0gJmlvYy0+c3BpX2RhdGE7CisJCWlmICgoaW9jLT5yYWlkX2RhdGEuaXNSYWlkICYgKDEgPDwgcFJlcS0+VGFyZ2V0SUQpKSAmJiBpb2MtPnJhaWRfZGF0YS5wSW9jUGczKSB7CiAJCQkvKiBTZXQgTkVFRF9EViBmb3IgYWxsIGhpZGRlbiBkaXNrcwogCQkJICovCi0JCQlJb2MzUGh5c0Rpc2tfdCAqcFBEaXNrID0gIHBTcGktPnBJb2NQZzMtPlBoeXNEaXNrOwotCQkJaW50CQludW1QRGlzayA9IHBTcGktPnBJb2NQZzMtPk51bVBoeXNEaXNrczsKKwkJCUlvYzNQaHlzRGlza190ICpwUERpc2sgPSAgaW9jLT5yYWlkX2RhdGEucElvY1BnMy0+UGh5c0Rpc2s7CisJCQlpbnQJCW51bVBEaXNrID0gaW9jLT5yYWlkX2RhdGEucElvY1BnMy0+TnVtUGh5c0Rpc2tzOwogCiAJCQl3aGlsZSAobnVtUERpc2spIHsKIAkJCQlwU3BpLT5kdlN0YXR1c1twUERpc2stPlBoeXNEaXNrSURdIHw9IE1QVF9TQ1NJQ0ZHX05FRURfRFY7CkBAIC0zMDA0LDYgKzI5NzEsNTAgQEAKIAl9CiB9CiAKKy8qIG1wdHNjc2loX3JhaWRfc2V0X2R2X2ZsYWdzKCkKKyAqCisgKiBOZXcgb3IgcmVwbGFjZWQgZGlzay4gU2V0IERWIGZsYWcgYW5kIHNjaGVkdWxlIERWLgorICovCitzdGF0aWMgdm9pZAorbXB0c2NzaWhfc2V0X2R2ZmxhZ3NfcmFpZChNUFRfU0NTSV9IT1NUICpoZCwgaW50IGlkKQoreworCU1QVF9BREFQVEVSCSppb2MgPSBoZC0+aW9jOworCVNwaUNmZ0RhdGEJKnBTcGkgPSAmaW9jLT5zcGlfZGF0YTsKKwlJb2MzUGh5c0Rpc2tfdAkqcFBEaXNrOworCWludAkJIG51bVBEaXNrOworCisJaWYgKGhkLT5uZWdvTnZyYW0gIT0gMCkKKwkJcmV0dXJuOworCisJZGR2dHByaW50aygoIkRWIHJlcXVlc3RlZCBmb3IgcGh5cyBkaXNrIGlkICVkXG4iLCBpZCkpOworCWlmIChpb2MtPnJhaWRfZGF0YS5wSW9jUGczKSB7CisJCXBQRGlzayA9ICBpb2MtPnJhaWRfZGF0YS5wSW9jUGczLT5QaHlzRGlzazsKKwkJbnVtUERpc2sgPSBpb2MtPnJhaWRfZGF0YS5wSW9jUGczLT5OdW1QaHlzRGlza3M7CisJCXdoaWxlIChudW1QRGlzaykgeworCQkJaWYgKGlkID09IHBQRGlzay0+UGh5c0Rpc2tOdW0pIHsKKwkJCQlwU3BpLT5kdlN0YXR1c1twUERpc2stPlBoeXNEaXNrSURdID0KKwkJCQkgICAgKE1QVF9TQ1NJQ0ZHX05FRURfRFYgfCBNUFRfU0NTSUNGR19EVl9OT1RfRE9ORSk7CisJCQkJcFNwaS0+Zm9yY2VEdiA9IE1QVF9TQ1NJQ0ZHX05FRURfRFY7CisJCQkJZGR2dHByaW50aygoIk5FRURfRFYgc2V0IGZvciBwaHlzIGRpc2sgaWQgJWRcbiIsCisJCQkJICAgIHBQRGlzay0+UGh5c0Rpc2tJRCkpOworCQkJCWJyZWFrOworCQkJfQorCQkJcFBEaXNrKys7CisJCQludW1QRGlzay0tOworCQl9CisKKwkJaWYgKG51bVBEaXNrID09IDApIHsKKwkJCS8qIFRoZSBwaHlzaWNhbCBkaXNrIHRoYXQgbmVlZHMgRFYgd2FzIG5vdCBmb3VuZAorCQkJICogaW4gdGhlIHN0b3JlZCBJT0MgUGFnZSAzLiBUaGUgZHJpdmVyIG11c3QgcmVsb2FkCisJCQkgKiB0aGlzIHBhZ2UuIERWIHJvdXRpbmUgd2lsbCBzZXQgdGhlIE5FRURfRFYgZmxhZyBmb3IKKwkJCSAqIGFsbCBwaHlzIGRpc2tzIHRoYXQgaGF2ZSBEVl9OT1RfRE9ORSBzZXQuCisJCQkgKi8KKwkJCXBTcGktPmZvcmNlRHYgPSBNUFRfU0NTSUNGR19ORUVEX0RWIHwgTVBUX1NDU0lDRkdfUkVMT0FEX0lPQ19QRzM7CisJCQlkZHZ0cHJpbnRrKCgicGh5cyBkaXNrICVkIG5vdCBmb3VuZC4gU2V0dGluZyByZWxvYWQgSU9DIFBnMyBGbGFnXG4iLGlkKSk7CisJCX0KKwl9Cit9CisKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KIC8qCiAgKiBJZiBubyBUYXJnZXQsIGJ1cyByZXNldCBvbiAxc3QgSS9PLiBTZXQgdGhlIGZsYWcgdG8KQEAgLTMwOTEsNyArMzEwMiw3IEBACiAJTVBUX0FEQVBURVIJCSppb2MgPSBoZC0+aW9jOwogCUNvbmZpZ190CQkqcFJlcTsKIAlTQ1NJRGV2aWNlUGFnZTFfdAkqcERhdGE7Ci0JVmlydERldmljZQkJKnBUYXJnZXQ7CisJVmlydERldmljZQkJKnBUYXJnZXQ9TlVMTDsKIAlNUFRfRlJBTUVfSERSCQkqbWY7CiAJZG1hX2FkZHJfdAkJIGRhdGFEbWE7CiAJdTE2CQkJIHJlcV9pZHg7CkBAIC0zMTkwLDcgKzMyMDEsNyBAQAogI2VuZGlmCiAKIAkJaWYgKGZsYWdzICYgTVBUX1NDU0lDRkdfQkxLX05FR08pCi0JCQluZWdvRmxhZ3MgPSBNUFRfVEFSR0VUX05PX05FR09fV0lERSB8IE1QVF9UQVJHRVRfTk9fTkVHT19TWU5DOworCQkJbmVnb0ZsYWdzIHw9IE1QVF9UQVJHRVRfTk9fTkVHT19XSURFIHwgTVBUX1RBUkdFVF9OT19ORUdPX1NZTkM7CiAKIAkJbXB0c2NzaWhfc2V0RGV2aWNlUGFnZTFGbGFncyh3aWR0aCwgZmFjdG9yLCBvZmZzZXQsCiAJCQkJCSZyZXF1ZXN0ZWQsICZjb25maWd1cmF0aW9uLCBuZWdvRmxhZ3MpOwpAQCAtNDAxMSw3ICs0MDIyLDcgQEAKIAogCQkvKiBJZiB0YXJnZXQgUHRyIE5VTEwgb3IgaWYgdGhpcyB0YXJnZXQgaXMgTk9UIGEgZGlzaywgc2tpcC4KIAkJICovCi0JCWlmICgocFRhcmdldCkgJiYgKHBUYXJnZXQtPnRmbGFncyAmIE1QVF9UQVJHRVRfRkxBR1NfUV9ZRVMpKXsKKwkJaWYgKChwVGFyZ2V0KSAmJiAocFRhcmdldC0+aW5xX2RhdGFbMF0gPT0gVFlQRV9ESVNLKSl7CiAJCQlmb3IgKGx1bj0wOyBsdW4gPD0gTVBUX0xBU1RfTFVOOyBsdW4rKykgewogCQkJCS8qIElmIExVTiBwcmVzZW50LCBpc3N1ZSB0aGUgY29tbWFuZAogCQkJCSAqLwpAQCAtNDEwNiw5ICs0MTE3LDkgQEAKIAogCQkJaWYgKChpb2MtPnNwaV9kYXRhLmZvcmNlRHYgJiBNUFRfU0NTSUNGR19SRUxPQURfSU9DX1BHMykgIT0gMCkgewogCQkJCW1wdF9yZWFkX2lvY19wZ18zKGlvYyk7Ci0JCQkJaWYgKGlvYy0+c3BpX2RhdGEucElvY1BnMykgewotCQkJCQlJb2MzUGh5c0Rpc2tfdCAqcFBEaXNrID0gaW9jLT5zcGlfZGF0YS5wSW9jUGczLT5QaHlzRGlzazsKLQkJCQkJaW50CQludW1QRGlzayA9IGlvYy0+c3BpX2RhdGEucElvY1BnMy0+TnVtUGh5c0Rpc2tzOworCQkJCWlmIChpb2MtPnJhaWRfZGF0YS5wSW9jUGczKSB7CisJCQkJCUlvYzNQaHlzRGlza190ICpwUERpc2sgPSBpb2MtPnJhaWRfZGF0YS5wSW9jUGczLT5QaHlzRGlzazsKKwkJCQkJaW50CQludW1QRGlzayA9IGlvYy0+cmFpZF9kYXRhLnBJb2NQZzMtPk51bVBoeXNEaXNrczsKIAogCQkJCQl3aGlsZSAobnVtUERpc2spIHsKIAkJCQkJCWlmIChpb2MtPnNwaV9kYXRhLmR2U3RhdHVzW3BQRGlzay0+UGh5c0Rpc2tJRF0gJiBNUFRfU0NTSUNGR19EVl9OT1RfRE9ORSkKQEAgLTQxNDcsNyArNDE1OCw3IEBACiAJCQkJCWlzUGh5c0Rpc2sgPSBtcHRzY3NpaF9pc19waHlzX2Rpc2soaW9jLCBpZCk7CiAJCQkJCWlmIChpc1BoeXNEaXNrKSB7CiAJCQkJCQlmb3IgKGlpPTA7IGlpIDwgTVBUX01BWF9TQ1NJX0RFVklDRVM7IGlpKyspIHsKLQkJCQkJCQlpZiAoaGQtPmlvYy0+c3BpX2RhdGEuaXNSYWlkICYgKDEgPDwgaWkpKSB7CisJCQkJCQkJaWYgKGhkLT5pb2MtPnJhaWRfZGF0YS5pc1JhaWQgJiAoMSA8PCBpaSkpIHsKIAkJCQkJCQkJaGQtPmlvYy0+c3BpX2RhdGEuZHZTdGF0dXNbaWldIHw9IE1QVF9TQ1NJQ0ZHX0RWX1BFTkRJTkc7CiAJCQkJCQkJfQogCQkJCQkJfQpAQCAtNDE2Niw3ICs0MTc3LDcgQEAKIAogCQkJCQlpZiAoaXNQaHlzRGlzaykgewogCQkJCQkJZm9yIChpaT0wOyBpaSA8IE1QVF9NQVhfU0NTSV9ERVZJQ0VTOyBpaSsrKSB7Ci0JCQkJCQkJaWYgKGhkLT5pb2MtPnNwaV9kYXRhLmlzUmFpZCAmICgxIDw8IGlpKSkgeworCQkJCQkJCWlmIChoZC0+aW9jLT5yYWlkX2RhdGEuaXNSYWlkICYgKDEgPDwgaWkpKSB7CiAJCQkJCQkJCWhkLT5pb2MtPnNwaV9kYXRhLmR2U3RhdHVzW2lpXSAmPSB+TVBUX1NDU0lDRkdfRFZfUEVORElORzsKIAkJCQkJCQl9CiAJCQkJCQl9CkBAIC00MTg4LDIxICs0MTk5LDIxIEBACiAKIC8qIFNlYXJjaCBJT0MgcGFnZSAzIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGhpZGRlbiBwaHlzaWNhbCBkaXNrCiAgKi8KLXN0YXRpYyBpbnQgCisvKiBTZWFyY2ggSU9DIHBhZ2UgMyB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBoaWRkZW4gcGh5c2ljYWwgZGlzaworICovCitzdGF0aWMgaW50CiBtcHRzY3NpaF9pc19waHlzX2Rpc2soTVBUX0FEQVBURVIgKmlvYywgaW50IGlkKQogewotCWlmIChpb2MtPnNwaV9kYXRhLnBJb2NQZzMpIHsKLQkJSW9jM1BoeXNEaXNrX3QgKnBQRGlzayA9ICBpb2MtPnNwaV9kYXRhLnBJb2NQZzMtPlBoeXNEaXNrOwotCQlpbnQJCW51bVBEaXNrID0gaW9jLT5zcGlfZGF0YS5wSW9jUGczLT5OdW1QaHlzRGlza3M7CisJaW50IGk7CiAKLQkJd2hpbGUgKG51bVBEaXNrKSB7Ci0JCQlpZiAocFBEaXNrLT5QaHlzRGlza0lEID09IGlkKSB7Ci0JCQkJcmV0dXJuIDE7Ci0JCQl9Ci0JCQlwUERpc2srKzsKLQkJCW51bVBEaXNrLS07Ci0JCX0KKwlpZiAoIWlvYy0+cmFpZF9kYXRhLmlzUmFpZCB8fCAhaW9jLT5yYWlkX2RhdGEucElvY1BnMykKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW9jLT5yYWlkX2RhdGEucElvY1BnMy0+TnVtUGh5c0Rpc2tzOyBpKyspIHsKKwkJaWYgKGlkID09IGlvYy0+cmFpZF9kYXRhLnBJb2NQZzMtPlBoeXNEaXNrW2ldLlBoeXNEaXNrSUQpCisJCQlyZXR1cm4gMTsKIAl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDQwOCw3ICs0NDE5LDcgQEAKIAkvKiBTa2lwIHRoaXMgSUQ/IFNldCBjZmcuY2ZnaGRyLmhkciB0byBmb3JjZSBjb25maWcgcGFnZSB3cml0ZQogCSAqLwogCXsKLQkJU2NzaUNmZ0RhdGEgKnBzcGlfZGF0YSA9ICZoZC0+aW9jLT5zcGlfZGF0YTsKKwkJU3BpQ2ZnRGF0YSAqcHNwaV9kYXRhID0gJmhkLT5pb2MtPnNwaV9kYXRhOwogCQlpZiAocHNwaV9kYXRhLT5udnJhbSAmJiAocHNwaV9kYXRhLT5udnJhbVtpZF0gIT0gTVBUX0hPU1RfTlZSQU1fSU5WQUxJRCkpIHsKIAkJCS8qIFNldCB0aGUgZmFjdG9yIGZyb20gbnZyYW0gKi8KIAkJCW5mYWN0b3IgPSAocHNwaV9kYXRhLT5udnJhbVtpZF0gJiBNUFRfTlZSQU1fU1lOQ19NQVNLKSA+PiA4OwpAQCAtNDQzOCwxMSArNDQ0OSwxMSBAQAogCX0KIAogCS8qIEZpbmlzaCBpb2NtZCBpbml0aXRpYWxpemF0aW9uIC0gaGlkZGVuIG9yIHZpc2libGUgZGlzaz8gKi8KLQlpZiAoaW9jLT5zcGlfZGF0YS5wSW9jUGczKSB7CisJaWYgKGlvYy0+cmFpZF9kYXRhLnBJb2NQZzMpIHsKIAkJLyogU2VhcmNoIElPQyBwYWdlIDMgZm9yIG1hdGNoaW5nIGlkCiAJCSAqLwotCQlJb2MzUGh5c0Rpc2tfdCAqcFBEaXNrID0gIGlvYy0+c3BpX2RhdGEucElvY1BnMy0+UGh5c0Rpc2s7Ci0JCWludAkJbnVtUERpc2sgPSBpb2MtPnNwaV9kYXRhLnBJb2NQZzMtPk51bVBoeXNEaXNrczsKKwkJSW9jM1BoeXNEaXNrX3QgKnBQRGlzayA9ICBpb2MtPnJhaWRfZGF0YS5wSW9jUGczLT5QaHlzRGlzazsKKwkJaW50CQludW1QRGlzayA9IGlvYy0+cmFpZF9kYXRhLnBJb2NQZzMtPk51bVBoeXNEaXNrczsKIAogCQl3aGlsZSAobnVtUERpc2spIHsKIAkJCWlmIChwUERpc2stPlBoeXNEaXNrSUQgPT0gaWQpIHsKQEAgLTQ0NjYsNyArNDQ3Nyw3IEBACiAJLyogUkFJRCBWb2x1bWUgSUQncyBtYXkgZG91YmxlIGZvciBhIHBoeXNpY2FsIGRldmljZS4gSWYgUkFJRCBidXQKIAkgKiBub3QgYSBwaHlzaWNhbCBJRCBhcyB3ZWxsLCBza2lwIERWLgogCSAqLwotCWlmICgoaGQtPmlvYy0+c3BpX2RhdGEuaXNSYWlkICYgKDEgPDwgaWQpKSAmJiAhKGlvY21kLmZsYWdzICYgTVBUX0lDRkxBR19QSFlTX0RJU0spKQorCWlmICgoaGQtPmlvYy0+cmFpZF9kYXRhLmlzUmFpZCAmICgxIDw8IGlkKSkgJiYgIShpb2NtZC5mbGFncyAmIE1QVF9JQ0ZMQUdfUEhZU19ESVNLKSkKIAkJZ290byB0YXJnZXRfZG9uZTsKIAogCkBAIC00ODE1LDYgKzQ4MjYsOCBAQAogCQkJCQlub3REb25lID0gMDsKIAkJCQkJaWYgKGlvY21kLmZsYWdzICYgTVBUX0lDRkxBR19FQ0hPKSB7CiAJCQkJCQlidWZzaXplID0gICgocGJ1ZjFbMl0gJiAweDFGKSA8PDgpIHwgcGJ1ZjFbM107CisJCQkJCQlpZiAocGJ1ZjFbMF0gJiAweDAxKQorCQkJCQkJCWlvY21kLmZsYWdzIHw9IE1QVF9JQ0ZMQUdfRUJPUzsKIAkJCQkJfSBlbHNlIHsKIAkJCQkJCWJ1ZnNpemUgPSAgcGJ1ZjFbMV08PDE2IHwgcGJ1ZjFbMl08PDggfCBwYnVmMVszXTsKIAkJCQkJfQpAQCAtNDkxMSw2ICs0OTI0LDkgQEAKIAkJfQogCQlpb2NtZC5mbGFncyAmPSB+TVBUX0lDRkxBR19ESURfUkVTRVQ7CiAKKwkJaWYgKGlvY21kLmZsYWdzICYgTVBUX0lDRkxBR19FQk9TKQorCQkJZ290byBza2lwX1Jlc2VydmU7CisKIAkJcmVwZWF0ID0gNTsKIAkJd2hpbGUgKHJlcGVhdCAmJiAoIShpb2NtZC5mbGFncyAmIE1QVF9JQ0ZMQUdfUkVTRVJWRUQpKSkgewogCQkJaW9jbWQuY21kID0gUkVTRVJWRTsKQEAgLTQ5NTQsNiArNDk3MCw3IEBACiAJCQl9CiAJCX0KIAorc2tpcF9SZXNlcnZlOgogCQltcHRzY3NpaF9maWxsYnVmKHBidWYxLCBzeiwgcGF0dCwgMSk7CiAJCWlvY21kLmNtZCA9IFdSSVRFX0JVRkZFUjsKIAkJaW9jbWQuZGF0YV9kbWEgPSBidWYxX2RtYTsKQEAgLTUxOTgsMTEgKzUyMTUsMTIgQEAKIAkJICogSWYgbm90IGFuIExWRCBidXMsIHRoZSBhZGFwdGVyIG1pblN5bmNGYWN0b3IgaGFzIGJlZW4KIAkJICogYWxyZWFkeSB0aHJvdHRsZWQgYmFjay4KIAkJICovCisJCW5lZ29GbGFncyA9IGhkLT5pb2MtPnNwaV9kYXRhLm5vUWFzOwogCQlpZiAoKGhkLT5UYXJnZXRzKSYmKChwVGFyZ2V0ID0gaGQtPlRhcmdldHNbKGludClpZF0pICE9IE5VTEwpICYmICFwVGFyZ2V0LT5yYWlkVm9sdW1lKSB7CiAJCQl3aWR0aCA9IHBUYXJnZXQtPm1heFdpZHRoOwogCQkJb2Zmc2V0ID0gcFRhcmdldC0+bWF4T2Zmc2V0OwogCQkJZmFjdG9yID0gcFRhcmdldC0+bWluU3luY0ZhY3RvcjsKLQkJCW5lZ29GbGFncyA9IHBUYXJnZXQtPm5lZ29GbGFnczsKKwkJCW5lZ29GbGFncyB8PSBwVGFyZ2V0LT5uZWdvRmxhZ3M7CiAJCX0gZWxzZSB7CiAJCQlpZiAoaGQtPmlvYy0+c3BpX2RhdGEubnZyYW0gJiYgKGhkLT5pb2MtPnNwaV9kYXRhLm52cmFtW2lkXSAhPSBNUFRfSE9TVF9OVlJBTV9JTlZBTElEKSkgewogCQkJCWRhdGEgPSBoZC0+aW9jLT5zcGlfZGF0YS5udnJhbVtpZF07CkBAIC01MjIzLDcgKzUyNDEsNiBAQAogCQkJfQogCiAJCQkvKiBTZXQgdGhlIG5lZ290aWF0aW9uIGZsYWdzICovCi0JCQluZWdvRmxhZ3MgPSBoZC0+aW9jLT5zcGlfZGF0YS5ub1FhczsKIAkJCWlmICghd2lkdGgpCiAJCQkJbmVnb0ZsYWdzIHw9IE1QVF9UQVJHRVRfTk9fTkVHT19XSURFOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmggYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmgKaW5kZXggNTFjMDI1NS4uOTcxZmRhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5oCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgbGludXgvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpLmgKKyAqICBsaW51eC9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmgKICAqICAgICAgSGlnaCBwZXJmb3JtYW5jZSBTQ1NJIC8gRmlicmUgQ2hhbm5lbCBTQ1NJIEhvc3QgZGV2aWNlIGRyaXZlci4KICAqICAgICAgRm9yIHVzZSB3aXRoIFBDSSBjaGlwL2FkYXB0ZXIocyk6CiAgKiAgICAgICAgICBMU0lGQzl4eC9MU0k0MDl4eCBGaWJyZSBDaGFubmVsCkBAIC01Myw4ICs1Myw4IEBACiAgKglTQ1NJIFB1YmxpYyBzdHVmZi4uLgogICovCiAKLSNkZWZpbmUgTVBUX1NDU0lfQ01EX1BFUl9ERVZfSElHSAkzMQotI2RlZmluZSBNUFRfU0NTSV9DTURfUEVSX0RFVl9MT1cJNworI2RlZmluZSBNUFRfU0NTSV9DTURfUEVSX0RFVl9ISUdICTY0CisjZGVmaW5lIE1QVF9TQ1NJX0NNRF9QRVJfREVWX0xPVwkzMgogCiAjZGVmaW5lIE1QVF9TQ1NJX0NNRF9QRVJfTFVOCQk3CiAKQEAgLTc3LDYgKzc3LDcgQEAKICNkZWZpbmUgTVBUU0NTSUhfTUFYX1dJRFRIICAgICAgICAgICAgICAxCiAjZGVmaW5lIE1QVFNDU0lIX01JTl9TWU5DICAgICAgICAgICAgICAgMHgwOAogI2RlZmluZSBNUFRTQ1NJSF9TQUZfVEUgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTVBUU0NTSUhfUFRfQ0xFQVIgICAgICAgICAgICAgICAwCiAKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNwaS5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzcGkuYwppbmRleCA1ODdkMTI3Li41YzBlMzA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNwaS5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c3BpLmMKQEAgLTE5OSw3ICsxOTksNyBAQAogCQlwcmludGsoTVlJT0Nfc19XQVJOX0ZNVAogCQkJIlNraXBwaW5nIGlvYz0lcCBiZWNhdXNlIFNDU0kgSW5pdGlhdG9yIG1vZGUgaXMgTk9UIGVuYWJsZWQhXG4iLAogCQkJaW9jLT5uYW1lLCBpb2MpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIDA7CiAJfQogCiAJc2ggPSBzY3NpX2hvc3RfYWxsb2MoJm1wdHNwaV9kcml2ZXJfdGVtcGxhdGUsIHNpemVvZihNUFRfU0NTSV9IT1NUKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2NvbmZpZy1vc20uYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vY29uZmlnLW9zbS5jCmluZGV4IGFmMzJhYjQuLjEwNDMyZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vY29uZmlnLW9zbS5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vY29uZmlnLW9zbS5jCkBAIC01Niw4ICs1NiwxMSBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KICNpZmRlZiBDT05GSUdfSTJPX0NPTkZJR19PTERfSU9DVEwKLQlpZiAoaTJvX2NvbmZpZ19vbGRfaW5pdCgpKQorCWlmIChpMm9fY29uZmlnX29sZF9pbml0KCkpIHsKKwkJb3NtX2Vycigib2xkIGNvbmZpZyBoYW5kbGVyIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7CiAJCWkyb19kcml2ZXJfdW5yZWdpc3RlcigmaTJvX2NvbmZpZ19kcml2ZXIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KICNlbmRpZgogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC91Y2IxeDAwLWNvcmUuYyBiL2RyaXZlcnMvbWZkL3VjYjF4MDAtY29yZS5jCmluZGV4IDEwZjZjZTEuLmUzMzVkNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3VjYjF4MDAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3VjYjF4MDAtY29yZS5jCkBAIC00NTcsNiArNDU3LDE3IEBACiAJcmV0dXJuIHByb2JlX2lycV9vZmYobWFzayk7CiB9CiAKK3N0YXRpYyB2b2lkIHVjYjF4MDBfcmVsZWFzZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVjYjF4MDAgKnVjYiA9IGNsYXNzZGV2X3RvX3VjYjF4MDAoZGV2KTsKKwlrZnJlZSh1Y2IpOworfQorCitzdGF0aWMgc3RydWN0IGNsYXNzIHVjYjF4MDBfY2xhc3MgPSB7CisJLm5hbWUJCT0gInVjYjF4MDAiLAorCS5yZWxlYXNlCT0gdWNiMXgwMF9yZWxlYXNlLAorfTsKKwogc3RhdGljIGludCB1Y2IxeDAwX3Byb2JlKHN0cnVjdCBtY3AgKm1jcCkKIHsKIAlzdHJ1Y3QgdWNiMXgwMCAqdWNiOwpAQCAtNTQ2LDE3ICs1NTcsNiBAQAogCWNsYXNzX2RldmljZV91bnJlZ2lzdGVyKCZ1Y2ItPmNkZXYpOwogfQogCi1zdGF0aWMgdm9pZCB1Y2IxeDAwX3JlbGVhc2Uoc3RydWN0IGNsYXNzX2RldmljZSAqZGV2KQotewotCXN0cnVjdCB1Y2IxeDAwICp1Y2IgPSBjbGFzc2Rldl90b191Y2IxeDAwKGRldik7Ci0Ja2ZyZWUodWNiKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGFzcyB1Y2IxeDAwX2NsYXNzID0gewotCS5uYW1lCQk9ICJ1Y2IxeDAwIiwKLQkucmVsZWFzZQk9IHVjYjF4MDBfcmVsZWFzZSwKLX07Ci0KIGludCB1Y2IxeDAwX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdWNiMXgwMF9kcml2ZXIgKmRydikKIHsKIAlzdHJ1Y3QgdWNiMXgwMCAqdWNiOwpAQCAtNjQyLDggKzY0Miw2IEBACiBtb2R1bGVfaW5pdCh1Y2IxeDAwX2luaXQpOwogbW9kdWxlX2V4aXQodWNiMXgwMF9leGl0KTsKIAotRVhQT1JUX1NZTUJPTCh1Y2IxeDAwX2NsYXNzKTsKLQogRVhQT1JUX1NZTUJPTCh1Y2IxeDAwX2lvX3NldF9kaXIpOwogRVhQT1JUX1NZTUJPTCh1Y2IxeDAwX2lvX3dyaXRlKTsKIEVYUE9SVF9TWU1CT0wodWNiMXgwMF9pb19yZWFkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3VjYjF4MDAtdHMuYyBiL2RyaXZlcnMvbWZkL3VjYjF4MDAtdHMuYwppbmRleCBhODUxZDY1Li5hMjYwZjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC91Y2IxeDAwLXRzLmMKKysrIGIvZHJpdmVycy9tZmQvdWNiMXgwMC10cy5jCkBAIC00OCw4ICs0OCw4IEBACiAJdTE2CQkJeF9yZXM7CiAJdTE2CQkJeV9yZXM7CiAKLQlpbnQJCQlyZXN0YXJ0OjE7Ci0JaW50CQkJYWRjc3luYzoxOworCXVuc2lnbmVkIGludAkJcmVzdGFydDoxOworCXVuc2lnbmVkIGludAkJYWRjc3luYzoxOwogfTsKIAogc3RhdGljIGludCBhZGNzeW5jOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdWNiMXgwMC5oIGIvZHJpdmVycy9tZmQvdWNiMXgwMC5oCmluZGV4IDZiNjMyNjQuLjljOWE2NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3VjYjF4MDAuaAorKysgYi9kcml2ZXJzL21mZC91Y2IxeDAwLmgKQEAgLTEwNiw4ICsxMDYsNiBAQAogCXZvaWQgKCpmbikoaW50LCB2b2lkICopOwogfTsKIAotZXh0ZXJuIHN0cnVjdCBjbGFzcyB1Y2IxeDAwX2NsYXNzOwotCiBzdHJ1Y3QgdWNiMXgwMCB7CiAJc3BpbmxvY2tfdAkJbG9jazsKIAlzdHJ1Y3QgbWNwCQkqbWNwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2NlY2MuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jZWNjLmMKaW5kZXggOWEwODdjMS4uMjRmNjcwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2NlY2MuYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL2RvY2VjYy5jCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9kb2MyMDAwLmg+CiAKLSNkZWZpbmUgREVCVUcgMAorI2RlZmluZSBERUJVR19FQ0MgMAogLyogbmVlZCB0byB1bmRlZiBpdCAoZnJvbSBhc20vdGVybWJpdHMuaCkgKi8KICN1bmRlZiBCMAogCkBAIC0yNDksNyArMjQ5LDcgQEAKIAkgIGxhbWJkYVtqXSBePSBBbHBoYV90b1ttb2Rubih1ICsgdG1wKV07CiAgICAgICB9CiAgICAgfQotI2lmIERFQlVHID49IDEKKyNpZiBERUJVR19FQ0MgPj0gMQogICAgIC8qIFRlc3QgY29kZSB0aGF0IHZlcmlmaWVzIHRoZSBlcmFzdXJlIGxvY2F0b3IgcG9seW5vbWlhbCBqdXN0IGNvbnN0cnVjdGVkCiAgICAgICAgTmVlZGVkIG9ubHkgZm9yIGRlY29kZXIgZGVidWdnaW5nLiAqLwogICAgIApAQCAtMjc2LDcgKzI3Niw3IEBACiAgICAgICBjb3VudCA9IC0xOwogICAgICAgZ290byBmaW5pc2g7CiAgICAgfQotI2lmIERFQlVHID49IDIKKyNpZiBERUJVR19FQ0MgPj0gMgogICAgIHByaW50ZigiXG4gRXJhc3VyZSBwb3NpdGlvbnMgYXMgZGV0ZXJtaW5lZCBieSByb290cyBvZiBFcmFzIExvYyBQb2x5OlxuIik7CiAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgICBwcmludGYoIiVkICIsIGxvY1tpXSk7CkBAIC00MDksNyArNDA5LDcgQEAKIAlkZW4gXj0gQWxwaGFfdG9bbW9kbm4obGFtYmRhW2krMV0gKyBpICogcm9vdFtqXSldOwogICAgIH0KICAgICBpZiAoZGVuID09IDApIHsKLSNpZiBERUJVRyA+PSAxCisjaWYgREVCVUdfRUNDID49IDEKICAgICAgIHByaW50ZigiXG4gRVJST1I6IGRlbm9taW5hdG9yID0gMFxuIik7CiAjZW5kaWYKICAgICAgIC8qIENvbnZlcnQgdG8gZHVhbC0gYmFzaXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvYmFzdC1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9iYXN0LWZsYXNoLmMKaW5kZXggMGM0NTQ2NC4uMGJhMGZmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9iYXN0LWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9iYXN0LWZsYXNoLmMKQEAgLTM5LDcgKzM5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogCiAjaW5jbHVkZSA8YXNtL2FyY2gvbWFwLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2l4cDIwMDAuYyBiL2RyaXZlcnMvbXRkL21hcHMvaXhwMjAwMC5jCmluZGV4IDNlOTRiNjEuLmE5Zjg2YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvaXhwMjAwMC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvaXhwMjAwMC5jCkBAIC0zMCw3ICszMCw2IEBACiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAKICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvaXhwNHh4LmMgYi9kcml2ZXJzL210ZC9tYXBzL2l4cDR4eC5jCmluZGV4IDVhZmU2NjAuLjNmY2MzMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvaXhwNHh4LmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9peHA0eHguYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KIAogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgpAQCAtMjU0LDYgKzI1Myw2IEBACiBtb2R1bGVfZXhpdChpeHA0eHhfZmxhc2hfZXhpdCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTVREIG1hcCBkcml2ZXIgZm9yIEludGVsIElYUDR4eCBzeXN0ZW1zIikKK01PRFVMRV9ERVNDUklQVElPTigiTVREIG1hcCBkcml2ZXIgZm9yIEludGVsIElYUDR4eCBzeXN0ZW1zIik7CiBNT0RVTEVfQVVUSE9SKCJEZWVwYWsgU2F4ZW5hIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvb21hcF9ub3IuYyBiL2RyaXZlcnMvbXRkL21hcHMvb21hcF9ub3IuYwppbmRleCA4Y2M3MTQwLi5iMTdiY2E2IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL29tYXBfbm9yLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9vbWFwX25vci5jCkBAIC00Miw3ICs0Miw2IEBACiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvdGMuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvc2ExMTAwLWZsYXNoLmMKaW5kZXggNTIzODU3MC4uOGRjYWEzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3NhMTEwMC1mbGFzaC5jCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvY29uY2F0Lmg+CiAKLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3NoYXJwc2wtZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvc2hhcnBzbC1mbGFzaC5jCmluZGV4IGQxNWRhNmYuLmI3ZjA5M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvc2hhcnBzbC1mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvc2hhcnBzbC1mbGFzaC5jCkBAIC04Miw3ICs4Miw3IEBACiAJfSBlbHNlIGlmIChtYWNoaW5lX2lzX3Rvc2EoKSkgewogCQlzaGFycHNsX3BhcnRpdGlvbnNbMF0uc2l6ZT0weDAwNmEwMDAwOwogCQlzaGFycHNsX3BhcnRpdGlvbnNbMF0ub2Zmc2V0PTB4MDAxNjAwMDA7Ci0JfSBlbHNlIGlmIChtYWNoaW5lX2lzX3NwaXR6KCkpIHsKKwl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfc3BpdHooKSB8fCBtYWNoaW5lX2lzX2FraXRhKCkgfHwgbWFjaGluZV9pc19ib3J6b2koKSkgewogCQlzaGFycHNsX3BhcnRpdGlvbnNbMF0uc2l6ZT0weDAwNmIwMDAwOwogCQlzaGFycHNsX3BhcnRpdGlvbnNbMF0ub2Zmc2V0PTB4MDAxNDAwMDA7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvczNjMjQxMC5jIGIvZHJpdmVycy9tdGQvbmFuZC9zM2MyNDEwLmMKaW5kZXggODkxZTNhMS4uYjQ3ZWJjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9zM2MyNDEwLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9zM2MyNDEwLmMKQEAgLTU4LDcgKzU4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2xvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtbmFuZC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9zaGFycHNsLmMgYi9kcml2ZXJzL210ZC9uYW5kL3NoYXJwc2wuYwppbmRleCA5ODUzYjg3Li44OGI1YjViIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3NoYXJwc2wuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3NoYXJwc2wuYwpAQCAtMjIxLDEwICsyMjEsMTYgQEAKIAkJCXNoYXJwc2xfcGFydGl0aW9uX2luZm9bMV0uc2l6ZT0yNSAqIDEwMjQgKiAxMDI0OwogCQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfaHVza3koKSkgewogCQkJc2hhcnBzbF9wYXJ0aXRpb25faW5mb1sxXS5zaXplPTUzICogMTAyNCAqIDEwMjQ7Ci0JCX0gCQkKKwkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX3NwaXR6KCkpIHsKKwkJCXNoYXJwc2xfcGFydGl0aW9uX2luZm9bMV0uc2l6ZT01ICogMTAyNCAqIDEwMjQ7CisJCX0gZWxzZSBpZiAobWFjaGluZV9pc19ha2l0YSgpKSB7CisJCQlzaGFycHNsX3BhcnRpdGlvbl9pbmZvWzFdLnNpemU9NTggKiAxMDI0ICogMTAyNDsKKwkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2JvcnpvaSgpKSB7CisJCQlzaGFycHNsX3BhcnRpdGlvbl9pbmZvWzFdLnNpemU9MzIgKiAxMDI0ICogMTAyNDsKKwkJfQogCX0KIAotCWlmIChtYWNoaW5lX2lzX2h1c2t5KCkpIHsKKwlpZiAobWFjaGluZV9pc19odXNreSgpIHx8IG1hY2hpbmVfaXNfYm9yem9pKCkpIHsKIAkJLyogTmVlZCB0byB1c2Ugc21hbGwgZXJhc2VibG9jayBzaXplIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCiAJCXNoYXJwc2xfbXRkLT5mbGFncyB8PSBNVERfTk9fVklSVEJMT0NLUzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC84MTM5Y3AuYyBiL2RyaXZlcnMvbmV0LzgxMzljcC5jCmluZGV4IDM0YjgwZGUuLmJjNTM3NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgxMzljcC5jCisrKyBiL2RyaXZlcnMvbmV0LzgxMzljcC5jCkBAIC0zNTMsOCArMzUzLDYgQEAKIAogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIG5ldF9zdGF0czsKIAlzdHJ1Y3QgY3BfZXh0cmFfc3RhdHMJY3Bfc3RhdHM7Ci0Jc3RydWN0IGNwX2RtYV9zdGF0cwkqbmljX3N0YXRzOwotCWRtYV9hZGRyX3QJCW5pY19zdGF0c19kbWE7CiAKIAl1bnNpZ25lZAkJcnhfdGFpbAkJX19fX2NhY2hlbGluZV9hbGlnbmVkOwogCXN0cnVjdCBjcF9kZXNjCQkqcnhfcmluZzsKQEAgLTExNDMsMTAgKzExNDEsNiBAQAogCWNwLT5yeF9yaW5nID0gbWVtOwogCWNwLT50eF9yaW5nID0gJmNwLT5yeF9yaW5nW0NQX1JYX1JJTkdfU0laRV07CiAKLQltZW0gKz0gKENQX1JJTkdfQllURVMgLSBDUF9TVEFUU19TSVpFKTsKLQljcC0+bmljX3N0YXRzID0gbWVtOwotCWNwLT5uaWNfc3RhdHNfZG1hID0gY3AtPnJpbmdfZG1hICsgKENQX1JJTkdfQllURVMgLSBDUF9TVEFUU19TSVpFKTsKLQogCXJldHVybiBjcF9pbml0X3JpbmdzKGNwKTsKIH0KIApAQCAtMTE4Nyw3ICsxMTgxLDYgQEAKIAlwY2lfZnJlZV9jb25zaXN0ZW50KGNwLT5wZGV2LCBDUF9SSU5HX0JZVEVTLCBjcC0+cnhfcmluZywgY3AtPnJpbmdfZG1hKTsKIAljcC0+cnhfcmluZyA9IE5VTEw7CiAJY3AtPnR4X3JpbmcgPSBOVUxMOwotCWNwLT5uaWNfc3RhdHMgPSBOVUxMOwogfQogCiBzdGF0aWMgaW50IGNwX29wZW4gKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0xNTE2LDEzICsxNTA5LDE3IEBACiAJCQkJICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqZXN0YXRzLCB1NjQgKnRtcF9zdGF0cykKIHsKIAlzdHJ1Y3QgY3BfcHJpdmF0ZSAqY3AgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBjcF9kbWFfc3RhdHMgKm5pY19zdGF0czsKKwlkbWFfYWRkcl90IGRtYTsKIAlpbnQgaTsKIAotCW1lbXNldChjcC0+bmljX3N0YXRzLCAwLCBzaXplb2Yoc3RydWN0IGNwX2RtYV9zdGF0cykpOworCW5pY19zdGF0cyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGNwLT5wZGV2LCBzaXplb2YoKm5pY19zdGF0cyksICZkbWEpOworCWlmICghbmljX3N0YXRzKQorCQlyZXR1cm47CiAKIAkvKiBiZWdpbiBOSUMgc3RhdGlzdGljcyBkdW1wICovCi0JY3B3MzIoU3RhdHNBZGRyICsgNCwgKGNwLT5uaWNfc3RhdHNfZG1hID4+IDE2KSA+PiAxNik7Ci0JY3B3MzIoU3RhdHNBZGRyLCAoY3AtPm5pY19zdGF0c19kbWEgJiAweGZmZmZmZmZmKSB8IER1bXBTdGF0cyk7CisJY3B3MzIoU3RhdHNBZGRyICsgNCwgKHU2NClkbWEgPj4gMzIpOworCWNwdzMyKFN0YXRzQWRkciwgKCh1NjQpZG1hICYgRE1BXzMyQklUX01BU0spIHwgRHVtcFN0YXRzKTsKIAljcHIzMihTdGF0c0FkZHIpOwogCiAJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykgewpAQCAtMTUzMiwyNCArMTUyOSwyNyBAQAogCX0KIAljcHczMihTdGF0c0FkZHIsIDApOwogCWNwdzMyKFN0YXRzQWRkciArIDQsIDApOworCWNwcjMyKFN0YXRzQWRkcik7CiAKIAlpID0gMDsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KGNwLT5uaWNfc3RhdHMtPnR4X29rKTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KGNwLT5uaWNfc3RhdHMtPnJ4X29rKTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KGNwLT5uaWNfc3RhdHMtPnR4X2Vycik7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShjcC0+bmljX3N0YXRzLT5yeF9lcnIpOwotCXRtcF9zdGF0c1tpKytdID0gbGUxNl90b19jcHUoY3AtPm5pY19zdGF0cy0+cnhfZmlmbyk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTE2X3RvX2NwdShjcC0+bmljX3N0YXRzLT5mcmFtZV9hbGlnbik7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShjcC0+bmljX3N0YXRzLT50eF9va18xY29sKTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KGNwLT5uaWNfc3RhdHMtPnR4X29rX21jb2wpOwotCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoY3AtPm5pY19zdGF0cy0+cnhfb2tfcGh5cyk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShjcC0+bmljX3N0YXRzLT5yeF9va19iY2FzdCk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShjcC0+bmljX3N0YXRzLT5yeF9va19tY2FzdCk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTE2X3RvX2NwdShjcC0+bmljX3N0YXRzLT50eF9hYm9ydCk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTE2X3RvX2NwdShjcC0+bmljX3N0YXRzLT50eF91bmRlcnJ1bik7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShuaWNfc3RhdHMtPnR4X29rKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KG5pY19zdGF0cy0+cnhfb2spOworCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUobmljX3N0YXRzLT50eF9lcnIpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUobmljX3N0YXRzLT5yeF9lcnIpOworCXRtcF9zdGF0c1tpKytdID0gbGUxNl90b19jcHUobmljX3N0YXRzLT5yeF9maWZvKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMTZfdG9fY3B1KG5pY19zdGF0cy0+ZnJhbWVfYWxpZ24pOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUobmljX3N0YXRzLT50eF9va18xY29sKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KG5pY19zdGF0cy0+dHhfb2tfbWNvbCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShuaWNfc3RhdHMtPnJ4X29rX3BoeXMpOworCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUobmljX3N0YXRzLT5yeF9va19iY2FzdCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShuaWNfc3RhdHMtPnJ4X29rX21jYXN0KTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMTZfdG9fY3B1KG5pY19zdGF0cy0+dHhfYWJvcnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUxNl90b19jcHUobmljX3N0YXRzLT50eF91bmRlcnJ1bik7CiAJdG1wX3N0YXRzW2krK10gPSBjcC0+Y3Bfc3RhdHMucnhfZnJhZ3M7CiAJaWYgKGkgIT0gQ1BfTlVNX1NUQVRTKQogCQlCVUcoKTsKKworCXBjaV9mcmVlX2NvbnNpc3RlbnQoY3AtPnBkZXYsIHNpemVvZigqbmljX3N0YXRzKSwgbmljX3N0YXRzLCBkbWEpOwogfQogCiBzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGNwX2V0aHRvb2xfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODM5MC5jIGIvZHJpdmVycy9uZXQvODM5MC5jCmluZGV4IDZkNzZmM2EuLmY4NzAyNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgzOTAuYworKysgYi9kcml2ZXJzL25ldC84MzkwLmMKQEAgLTEwOTQsNyArMTA5NCw3IEBACiAgICAKIAlvdXRiX3AoRTgzOTBfTk9ETUErRTgzOTBfUEFHRTAsIGU4MzkwX2Jhc2UrRTgzOTBfQ01EKTsKICAgICAKLQlpZiAoaW5iX3AoZTgzOTBfYmFzZSkgJiBFODM5MF9UUkFOUykgCisJaWYgKGluYl9wKGU4MzkwX2Jhc2UgKyBFODM5MF9DTUQpICYgRTgzOTBfVFJBTlMpIAogCXsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHRyaWdnZXJfc2VuZCgpIGNhbGxlZCB3aXRoIHRoZSB0cmFuc21pdHRlciBidXN5LlxuIiwKIAkJCWRldi0+bmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZwppbmRleCA5NmYxNGFiLi5jNzQ4YjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWcKQEAgLTU0OCw2ICs1NDgsMTQgQEAKIAkgIFN1cHBvcnQgZm9yIHRoZSBTdW4gR0VNIGNoaXAsIGFrYSBTdW4gR2lnYWJpdEV0aGVybmV0L1AgMi4wLiAgU2VlIGFsc28KIAkgIDxodHRwOi8vd3d3LnN1bi5jb20vcHJvZHVjdHMtbi1zb2x1dGlvbnMvaGFyZHdhcmUvZG9jcy9wZGYvODA2LTM5ODUtMTAucGRmPi4KIAorY29uZmlnIENBU1NJTkkKKwl0cmlzdGF0ZSAiU3VuIENhc3Npbmkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE5FVF9FVEhFUk5FVCAmJiBQQ0kKKwlzZWxlY3QgQ1JDMzIKKwloZWxwCisJICBTdXBwb3J0IGZvciB0aGUgU3VuIENhc3NpbmkgY2hpcCwgYWthIFN1biBHaWdhU3dpZnQgRXRoZXJuZXQuIFNlZSBhbHNvCisJICA8aHR0cDovL3d3dy5zdW4uY29tL3Byb2R1Y3RzLW4tc29sdXRpb25zL2hhcmR3YXJlL2RvY3MvcGRmLzgxNy00MzQxLTEwLnBkZj4KKwogY29uZmlnIE5FVF9WRU5ET1JfM0NPTQogCWJvb2wgIjNDT00gY2FyZHMiCiAJZGVwZW5kcyBvbiBORVRfRVRIRVJORVQgJiYgKElTQSB8fCBFSVNBIHx8IE1DQSB8fCBQQ0kpCkBAIC0xNjQ3LDcgKzE2NTUsNyBAQAogCiBjb25maWcgTkVUX1BPQ0tFVAogCWJvb2wgIlBvY2tldCBhbmQgcG9ydGFibGUgYWRhcHRlcnMiCi0JZGVwZW5kcyBvbiBORVRfRVRIRVJORVQgJiYgSVNBCisJZGVwZW5kcyBvbiBORVRfRVRIRVJORVQgJiYgUEFSUE9SVAogCS0tLWhlbHAtLS0KIAkgIEN1dGUgbGl0dGxlIG5ldHdvcmsgKEV0aGVybmV0KSBkZXZpY2VzIHdoaWNoIGF0dGFjaCB0byB0aGUgcGFyYWxsZWwKIAkgIHBvcnQgKCJwb2NrZXQgYWRhcHRlcnMiKSwgY29tbW9ubHkgdXNlZCB3aXRoIGxhcHRvcHMuIElmIHlvdSBoYXZlCkBAIC0xNjcxLDcgKzE2NzksNyBAQAogCiBjb25maWcgQVRQCiAJdHJpc3RhdGUgIkFULUxBTi1URUMvUmVhbFRlayBwb2NrZXQgYWRhcHRlciBzdXBwb3J0IgotCWRlcGVuZHMgb24gTkVUX1BPQ0tFVCAmJiBJU0EgJiYgWDg2CisJZGVwZW5kcyBvbiBORVRfUE9DS0VUICYmIFBBUlBPUlQgJiYgWDg2CiAJc2VsZWN0IENSQzMyCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBhIG5ldHdvcmsgKEV0aGVybmV0KSBkZXZpY2Ugd2hpY2ggYXR0YWNoZXMgdG8geW91ciBwYXJhbGxlbApAQCAtMTY4Niw3ICsxNjk0LDcgQEAKIAogY29uZmlnIERFNjAwCiAJdHJpc3RhdGUgIkQtTGluayBERTYwMCBwb2NrZXQgYWRhcHRlciBzdXBwb3J0IgotCWRlcGVuZHMgb24gTkVUX1BPQ0tFVCAmJiBJU0EKKwlkZXBlbmRzIG9uIE5FVF9QT0NLRVQgJiYgUEFSUE9SVAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSBuZXR3b3JrIChFdGhlcm5ldCkgZGV2aWNlIHdoaWNoIGF0dGFjaGVzIHRvIHlvdXIgcGFyYWxsZWwKIAkgIHBvcnQuIFJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL0RMSU5LLnR4dD4gYXMgd2VsbCBhcyB0aGUKQEAgLTE3MDEsNyArMTcwOSw3IEBACiAKIGNvbmZpZyBERTYyMAogCXRyaXN0YXRlICJELUxpbmsgREU2MjAgcG9ja2V0IGFkYXB0ZXIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE5FVF9QT0NLRVQgJiYgSVNBCisJZGVwZW5kcyBvbiBORVRfUE9DS0VUICYmIFBBUlBPUlQKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgbmV0d29yayAoRXRoZXJuZXQpIGRldmljZSB3aGljaCBhdHRhY2hlcyB0byB5b3VyIHBhcmFsbGVsCiAJICBwb3J0LiBSZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9ETElOSy50eHQ+IGFzIHdlbGwgYXMgdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCmluZGV4IDg2NDVjODQuLjhhZWVjOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCkBAIC0yOCw2ICsyOCw3IEBACiBvYmotJChDT05GSUdfU1VOQk1BQykgKz0gc3VuYm1hYy5vCiBvYmotJChDT05GSUdfTVlSSV9TQlVTKSArPSBteXJpX3NidXMubwogb2JqLSQoQ09ORklHX1NVTkdFTSkgKz0gc3VuZ2VtLm8gc3VuZ2VtX3BoeS5vCitvYmotJChDT05GSUdfQ0FTU0lOSSkgKz0gY2Fzc2luaS5vCiAKIG9iai0kKENPTkZJR19NQUNFKSArPSBtYWNlLm8KIG9iai0kKENPTkZJR19CTUFDKSArPSBibWFjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9hbTc5Yzk2MWEuYyBiL2RyaXZlcnMvbmV0L2FybS9hbTc5Yzk2MWEuYwppbmRleCA5YjY1OWUzLi5jNTZkODZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vYW03OWM5NjFhLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2FtNzljOTYxYS5jCkBAIC0xNSwxNiArMTUsMTMgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZmNudGwuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KQEAgLTMzLDcgKzMwLDYgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9kbWEuaD4KIAogI2RlZmluZSBUWF9CVUZGRVJTIDE1CiAjZGVmaW5lIFJYX0JVRkZFUlMgMjUKQEAgLTg1LDcgKzgxLDcgQEAKIAl1X3Nob3J0IHY7CiAJX19hc21fXygKIAkic3RyJT9oCSUxLCBbJTJdCUAgTkFUX1JBUFxuXHQiCi0JInN0ciU/aAklMCwgWyUyLCAjOF0JQCBORVRfSURQXG5cdCIKKwkibGRyJT9oCSUwLCBbJTIsICM4XQlAIE5FVF9JRFBcblx0IgogCTogIj1yIiAodikKIAk6ICJyIiAocmVnKSwgInIiIChJU0FJT19CQVNFICsgMHgwNDY0KSk7CiAJcmV0dXJuIHY7CkBAIC0yODgsNyArMjg0LDcgQEAKIAllbHNlIGlmICghbG5rc3RhdCAmJiBjYXJyaWVyKQogCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwogCi0JbW9kX3RpbWVyKCZwcml2LT50aW1lciwgamlmZmllcyArIDUqSFopOworCW1vZF90aW1lcigmcHJpdi0+dGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUwMCkpOwogfQogCiAvKgpAQCAtNzA5LDEzICs3MDUsOSBAQAogCSAgICAJZ290byByZWxlYXNlOwogCiAJYW03OWM5NjFfYmFubmVyKCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGV0aGVyIGFkZHJlc3MgIiwgZGV2LT5uYW1lKTsKIAotCS8qIFJldHJpdmUgYW5kIHByaW50IHRoZSBldGhlcm5ldCBhZGRyZXNzLiAqLwotCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQogCQlkZXYtPmRldl9hZGRyW2ldID0gaW5iKGRldi0+YmFzZV9hZGRyICsgaSAqIDIpICYgMHhmZjsKLQkJcHJpbnRrIChpID09IDUgPyAiJTAyeFxuIiA6ICIlMDJ4OiIsIGRldi0+ZGV2X2FkZHJbaV0pOwotCX0KIAogCXNwaW5fbG9ja19pbml0KCZwcml2LT5jaGlwX2xvY2spOwogCWluaXRfdGltZXIoJnByaXYtPnRpbWVyKTsKQEAgLTczNiw4ICs3MjgsMTQgQEAKICNlbmRpZgogCiAJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JaWYgKHJldCA9PSAwKQorCWlmIChyZXQgPT0gMCkgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogZXRoZXIgYWRkcmVzcyAiLCBkZXYtPm5hbWUpOworCisJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCQlwcmludGsgKGkgPT0gNSA/ICIlMDJ4XG4iIDogIiUwMng6IiwgZGV2LT5kZXZfYWRkcltpXSk7CisKIAkJcmV0dXJuIDA7CisJfQogCiByZWxlYXNlOgogCXJlbGVhc2VfcmVnaW9uKGRldi0+YmFzZV9hZGRyLCAweDE4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JtYWMuYyBiL2RyaXZlcnMvbmV0L2JtYWMuYwppbmRleCA4ZGM2NTdmLi42MGRiYTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibWFjLmMKKysrIGIvZHJpdmVycy9uZXQvYm1hYy5jCkBAIC0yMTgsNyArMjE4LDcgQEAKIAogCiBzdGF0aWMgaW5saW5lCi12b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBibXJlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyByZWdfb2Zmc2V0ICkKK3Vuc2lnbmVkIHNob3J0IGJtcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIHJlZ19vZmZzZXQgKQogewogCXJldHVybiBpbl9sZTE2KCh2b2lkIF9faW9tZW0gKilkZXYtPmJhc2VfYWRkciArIHJlZ19vZmZzZXQpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKaW5kZXggOTRjOWY2OC4uZjI2NGZmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCkBAIC00ODcsNiArNDg3LDggQEAKICAqCSAgKiBBZGRlZCB4bWl0X2hhc2hfcG9saWN5X2xheWVyMzQoKQogICoJLSBNb2RpZmllZCBieSBKYXkgVm9zYnVyZ2ggPGZ1YmFyQHVzLmlibS5jb20+IHRvIGFsc28gc3VwcG9ydCBtb2RlIDQuCiAgKgkgIFNldCB2ZXJzaW9uIHRvIDIuNi4zLgorICogMjAwNS8wOS8yNiAtIEpheSBWb3NidXJnaCA8ZnViYXJAdXMuaWJtLmNvbT4KKyAqCS0gUmVtb3ZlZCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3Igb2xkIGlmZW5zbGF2ZXMuICBWZXJzaW9uIDIuNi40LgogICovCiAKIC8vI2RlZmluZSBCT05ESU5HX0RFQlVHIDEKQEAgLTU5NSwxNCArNTk3LDcgQEAKIHN0YXRpYyBpbnQgYm9uZF9tb2RlCT0gQk9ORF9NT0RFX1JPVU5EUk9CSU47CiBzdGF0aWMgaW50IHhtaXRfaGFzaHR5cGU9IEJPTkRfWE1JVF9QT0xJQ1lfTEFZRVIyOwogc3RhdGljIGludCBsYWNwX2Zhc3QJPSAwOwotc3RhdGljIGludCBhcHBfYWJpX3Zlcgk9IDA7Ci1zdGF0aWMgaW50IG9yaWdfYXBwX2FiaV92ZXIgPSAtMTsgLyogVGhpcyBpcyB1c2VkIHRvIHNhdmUgdGhlIGZpcnN0IEFCSSB2ZXJzaW9uCi0JCQkJICAgKiB3ZSByZWNlaXZlIGZyb20gdGhlIGFwcGxpY2F0aW9uLiBPbmNlIHNldCwKLQkJCQkgICAqIGl0IHdvbid0IGJlIGNoYW5nZWQsIGFuZCB0aGUgbW9kdWxlIHdpbGwKLQkJCQkgICAqIHJlZnVzZSB0byBlbnNsYXZlL3JlbGVhc2UgaW50ZXJmYWNlcyBpZiB0aGUKLQkJCQkgICAqIGNvbW1hbmQgY29tZXMgZnJvbSBhbiBhcHBsaWNhdGlvbiB1c2luZwotCQkJCSAgICogYW5vdGhlciBBQkkgdmVyc2lvbi4KLQkJCQkgICAqLworCiBzdHJ1Y3QgYm9uZF9wYXJtX3RibCB7CiAJY2hhciAqbW9kZW5hbWU7CiAJaW50IG1vZGU7CkBAIC0xMjk0LDEyICsxMjg5LDEzIEBACiAvKgogICogQ29weSBhbGwgdGhlIE11bHRpY2FzdCBhZGRyZXNzZXMgZnJvbSBzcmMgdG8gdGhlIGJvbmRpbmcgZGV2aWNlIGRzdAogICovCi1zdGF0aWMgaW50IGJvbmRfbWNfbGlzdF9jb3B5KHN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfbGlzdCwgc3RydWN0IGJvbmRpbmcgKmJvbmQsIGludCBncGZfZmxhZykKK3N0YXRpYyBpbnQgYm9uZF9tY19saXN0X2NvcHkoc3RydWN0IGRldl9tY19saXN0ICptY19saXN0LCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCwKKwkJCSAgICAgZ2ZwX3QgZ2ZwX2ZsYWcpCiB7CiAJc3RydWN0IGRldl9tY19saXN0ICpkbWksICpuZXdfZG1pOwogCiAJZm9yIChkbWkgPSBtY19saXN0OyBkbWk7IGRtaSA9IGRtaS0+bmV4dCkgewotCQluZXdfZG1pID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRldl9tY19saXN0KSwgZ3BmX2ZsYWcpOworCQluZXdfZG1pID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRldl9tY19saXN0KSwgZ2ZwX2ZsYWcpOwogCiAJCWlmICghbmV3X2RtaSkgewogCQkJLyogRklYTUU6IFBvdGVudGlhbCBtZW1vcnkgbGVhayAhISEgKi8KQEAgLTE2NTMsNyArMTY0OSw4IEBACiAJaW50IG9sZF9mZWF0dXJlcyA9IGJvbmRfZGV2LT5mZWF0dXJlczsKIAlpbnQgcmVzID0gMDsKIAotCWlmIChzbGF2ZV9kZXYtPmRvX2lvY3RsID09IE5VTEwpIHsKKwlpZiAoIWJvbmQtPnBhcmFtcy51c2VfY2FycmllciAmJiBzbGF2ZV9kZXYtPmV0aHRvb2xfb3BzID09IE5VTEwgJiYKKwkJc2xhdmVfZGV2LT5kb19pb2N0bCA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUKIAkJICAgICAgICI6IFdhcm5pbmcgOiBubyBsaW5rIG1vbml0b3Jpbmcgc3VwcG9ydCBmb3IgJXNcbiIsCiAJCSAgICAgICBzbGF2ZV9kZXYtPm5hbWUpOwpAQCAtMTcwMSw1MSArMTY5OCwyOSBAQAogCQl9CiAJfQogCi0JaWYgKGFwcF9hYmlfdmVyID49IDEpIHsKLQkJLyogVGhlIGFwcGxpY2F0aW9uIGlzIHVzaW5nIGFuIEFCSSwgd2hpY2ggcmVxdWlyZXMgdGhlCi0JCSAqIHNsYXZlIGludGVyZmFjZSB0byBiZSBjbG9zZWQuCi0JCSAqLwotCQlpZiAoKHNsYXZlX2Rldi0+ZmxhZ3MgJiBJRkZfVVApKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKLQkJCSAgICAgICAiOiBFcnJvcjogJXMgaXMgdXBcbiIsCi0JCQkgICAgICAgc2xhdmVfZGV2LT5uYW1lKTsKLQkJCXJlcyA9IC1FUEVSTTsKLQkJCWdvdG8gZXJyX3VuZG9fZmxhZ3M7Ci0JCX0KKwkvKgorCSAqIE9sZCBpZmVuc2xhdmUgYmluYXJpZXMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQuICBUaGVzZSBjYW4KKwkgKiBiZSBpZGVudGlmaWVkIHdpdGggbW9kZXJhdGUgYWNjdXJhcnkgYnkgdGhlIHN0YXRlIG9mIHRoZSBzbGF2ZToKKwkgKiB0aGUgY3VycmVudCBpZmVuc2xhdmUgd2lsbCBzZXQgdGhlIGludGVyZmFjZSBkb3duIHByaW9yIHRvCisJICogZW5zbGF2aW5nIGl0OyB0aGUgb2xkIGlmZW5zbGF2ZSB3aWxsIG5vdC4KKwkgKi8KKwlpZiAoKHNsYXZlX2Rldi0+ZmxhZ3MgJiBJRkZfVVApKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiAlcyBpcyB1cC4gIgorCQkgICAgICAgIlRoaXMgbWF5IGJlIGR1ZSB0byBhbiBvdXQgb2YgZGF0ZSBpZmVuc2xhdmUuXG4iLAorCQkgICAgICAgc2xhdmVfZGV2LT5uYW1lKTsKKwkJcmVzID0gLUVQRVJNOworCQlnb3RvIGVycl91bmRvX2ZsYWdzOworCX0KIAotCQlpZiAoc2xhdmVfZGV2LT5zZXRfbWFjX2FkZHJlc3MgPT0gTlVMTCkgewotCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCi0JCQkgICAgICAgIjogRXJyb3I6IFRoZSBzbGF2ZSBkZXZpY2UgeW91IHNwZWNpZmllZCBkb2VzICIKLQkJCSAgICAgICAibm90IHN1cHBvcnQgc2V0dGluZyB0aGUgTUFDIGFkZHJlc3MuXG4iKTsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJZb3VyIGtlcm5lbCBsaWtlbHkgZG9lcyBub3Qgc3VwcG9ydCBzbGF2ZSAiCi0JCQkgICAgICAgImRldmljZXMuXG4iKTsKKwlpZiAoc2xhdmVfZGV2LT5zZXRfbWFjX2FkZHJlc3MgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJICAgICAgICI6IEVycm9yOiBUaGUgc2xhdmUgZGV2aWNlIHlvdSBzcGVjaWZpZWQgZG9lcyAiCisJCSAgICAgICAibm90IHN1cHBvcnQgc2V0dGluZyB0aGUgTUFDIGFkZHJlc3MuXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiWW91ciBrZXJuZWwgbGlrZWx5IGRvZXMgbm90IHN1cHBvcnQgc2xhdmUgZGV2aWNlcy5cbiIpOwogCi0JCQlyZXMgPSAtRU9QTk9UU1VQUDsKLQkJCWdvdG8gZXJyX3VuZG9fZmxhZ3M7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBUaGUgYXBwbGljYXRpb24gaXMgbm90IHVzaW5nIGFuIEFCSSwgd2hpY2ggcmVxdWlyZXMgdGhlCi0JCSAqIHNsYXZlIGludGVyZmFjZSB0byBiZSBvcGVuLgotCQkgKi8KLQkJaWYgKCEoc2xhdmVfZGV2LT5mbGFncyAmIElGRl9VUCkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQotCQkJICAgICAgICI6IEVycm9yOiAlcyBpcyBub3QgcnVubmluZ1xuIiwKLQkJCSAgICAgICBzbGF2ZV9kZXYtPm5hbWUpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gZXJyX3VuZG9fZmxhZ3M7Ci0JCX0KLQotCQlpZiAoKGJvbmQtPnBhcmFtcy5tb2RlID09IEJPTkRfTU9ERV84MDIzQUQpIHx8Ci0JCSAgICAoYm9uZC0+cGFyYW1zLm1vZGUgPT0gQk9ORF9NT0RFX1RMQikgICAgfHwKLQkJICAgIChib25kLT5wYXJhbXMubW9kZSA9PSBCT05EX01PREVfQUxCKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCi0JCQkgICAgICAgIjogRXJyb3I6IHRvIHVzZSAlcyBtb2RlLCB5b3UgbXVzdCB1cGdyYWRlICIKLQkJCSAgICAgICAiaWZlbnNsYXZlLlxuIiwKLQkJCSAgICAgICBib25kX21vZGVfbmFtZShib25kLT5wYXJhbXMubW9kZSkpOwotCQkJcmVzID0gLUVPUE5PVFNVUFA7Ci0JCQlnb3RvIGVycl91bmRvX2ZsYWdzOwotCQl9CisJCXJlcyA9IC1FT1BOT1RTVVBQOworCQlnb3RvIGVycl91bmRvX2ZsYWdzOwogCX0KIAogCW5ld19zbGF2ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbGF2ZSksIEdGUF9LRVJORUwpOwpAQCAtMTc2MSw0MSArMTczNiwzNiBAQAogCSAqLwogCW5ld19zbGF2ZS0+b3JpZ2luYWxfZmxhZ3MgPSBzbGF2ZV9kZXYtPmZsYWdzOwogCi0JaWYgKGFwcF9hYmlfdmVyID49IDEpIHsKLQkJLyogc2F2ZSBzbGF2ZSdzIG9yaWdpbmFsICgicGVybWFuZW50IikgbWFjIGFkZHJlc3MgZm9yCi0JCSAqIG1vZGVzIHRoYXQgbmVlZHMgaXQsIGFuZCBmb3IgcmVzdG9yaW5nIGl0IHVwb24gcmVsZWFzZSwKLQkJICogYW5kIHRoZW4gc2V0IGl0IHRvIHRoZSBtYXN0ZXIncyBhZGRyZXNzCi0JCSAqLwotCQltZW1jcHkobmV3X3NsYXZlLT5wZXJtX2h3YWRkciwgc2xhdmVfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCS8qCisJICogU2F2ZSBzbGF2ZSdzIG9yaWdpbmFsICgicGVybWFuZW50IikgbWFjIGFkZHJlc3MgZm9yIG1vZGVzCisJICogdGhhdCBuZWVkIGl0LCBhbmQgZm9yIHJlc3RvcmluZyBpdCB1cG9uIHJlbGVhc2UsIGFuZCB0aGVuCisJICogc2V0IGl0IHRvIHRoZSBtYXN0ZXIncyBhZGRyZXNzCisJICovCisJbWVtY3B5KG5ld19zbGF2ZS0+cGVybV9od2FkZHIsIHNsYXZlX2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAotCQkvKiBzZXQgc2xhdmUgdG8gbWFzdGVyJ3MgbWFjIGFkZHJlc3MKLQkJICogVGhlIGFwcGxpY2F0aW9uIGFscmVhZHkgc2V0IHRoZSBtYXN0ZXIncwotCQkgKiBtYWMgYWRkcmVzcyB0byB0aGF0IG9mIHRoZSBmaXJzdCBzbGF2ZQotCQkgKi8KLQkJbWVtY3B5KGFkZHIuc2FfZGF0YSwgYm9uZF9kZXYtPmRldl9hZGRyLCBib25kX2Rldi0+YWRkcl9sZW4pOwotCQlhZGRyLnNhX2ZhbWlseSA9IHNsYXZlX2Rldi0+dHlwZTsKLQkJcmVzID0gZGV2X3NldF9tYWNfYWRkcmVzcyhzbGF2ZV9kZXYsICZhZGRyKTsKLQkJaWYgKHJlcykgewotCQkJZHByaW50aygiRXJyb3IgJWQgY2FsbGluZyBzZXRfbWFjX2FkZHJlc3NcbiIsIHJlcyk7Ci0JCQlnb3RvIGVycl9mcmVlOwotCQl9CisJLyoKKwkgKiBTZXQgc2xhdmUgdG8gbWFzdGVyJ3MgbWFjIGFkZHJlc3MuICBUaGUgYXBwbGljYXRpb24gYWxyZWFkeQorCSAqIHNldCB0aGUgbWFzdGVyJ3MgbWFjIGFkZHJlc3MgdG8gdGhhdCBvZiB0aGUgZmlyc3Qgc2xhdmUKKwkgKi8KKwltZW1jcHkoYWRkci5zYV9kYXRhLCBib25kX2Rldi0+ZGV2X2FkZHIsIGJvbmRfZGV2LT5hZGRyX2xlbik7CisJYWRkci5zYV9mYW1pbHkgPSBzbGF2ZV9kZXYtPnR5cGU7CisJcmVzID0gZGV2X3NldF9tYWNfYWRkcmVzcyhzbGF2ZV9kZXYsICZhZGRyKTsKKwlpZiAocmVzKSB7CisJCWRwcmludGsoIkVycm9yICVkIGNhbGxpbmcgc2V0X21hY19hZGRyZXNzXG4iLCByZXMpOworCQlnb3RvIGVycl9mcmVlOworCX0KIAotCQkvKiBvcGVuIHRoZSBzbGF2ZSBzaW5jZSB0aGUgYXBwbGljYXRpb24gY2xvc2VkIGl0ICovCi0JCXJlcyA9IGRldl9vcGVuKHNsYXZlX2Rldik7Ci0JCWlmIChyZXMpIHsKLQkJCWRwcmludGsoIk9wZW5uaW5nIHNsYXZlICVzIGZhaWxlZFxuIiwgc2xhdmVfZGV2LT5uYW1lKTsKLQkJCWdvdG8gZXJyX3Jlc3RvcmVfbWFjOwotCQl9CisJLyogb3BlbiB0aGUgc2xhdmUgc2luY2UgdGhlIGFwcGxpY2F0aW9uIGNsb3NlZCBpdCAqLworCXJlcyA9IGRldl9vcGVuKHNsYXZlX2Rldik7CisJaWYgKHJlcykgeworCQlkcHJpbnRrKCJPcGVubmluZyBzbGF2ZSAlcyBmYWlsZWRcbiIsIHNsYXZlX2Rldi0+bmFtZSk7CisJCWdvdG8gZXJyX3Jlc3RvcmVfbWFjOwogCX0KIAogCXJlcyA9IG5ldGRldl9zZXRfbWFzdGVyKHNsYXZlX2RldiwgYm9uZF9kZXYpOwogCWlmIChyZXMpIHsKIAkJZHByaW50aygiRXJyb3IgJWQgY2FsbGluZyBuZXRkZXZfc2V0X21hc3RlclxuIiwgcmVzKTsKLQkJaWYgKGFwcF9hYmlfdmVyIDwgMSkgewotCQkJZ290byBlcnJfZnJlZTsKLQkJfSBlbHNlIHsKLQkJCWdvdG8gZXJyX2Nsb3NlOwotCQl9CisJCWdvdG8gZXJyX2Nsb3NlOwogCX0KIAogCW5ld19zbGF2ZS0+ZGV2ID0gc2xhdmVfZGV2OwpAQCAtMTk5NiwzOSArMTk2Niw2IEBACiAKIAl3cml0ZV91bmxvY2tfYmgoJmJvbmQtPmxvY2spOwogCi0JaWYgKGFwcF9hYmlfdmVyIDwgMSkgewotCQkvKgotCQkgKiAhISEgVGhpcyBpcyB0byBzdXBwb3J0IG9sZCB2ZXJzaW9ucyBvZiBpZmVuc2xhdmUuCi0JCSAqIFdlIGNhbiByZW1vdmUgdGhpcyBpbiAyLjUgYmVjYXVzZSBvdXIgaWZlbnNsYXZlIHRha2VzCi0JCSAqIGNhcmUgb2YgdGhpcyBmb3IgdXMuCi0JCSAqIFdlIGNoZWNrIHRvIHNlZSBpZiB0aGUgbWFzdGVyIGhhcyBhIG1hYyBhZGRyZXNzIHlldC4KLQkJICogSWYgbm90LCB3ZSdsbCBnaXZlIGl0IHRoZSBtYWMgYWRkcmVzcyBvZiBvdXIgc2xhdmUgZGV2aWNlLgotCQkgKi8KLQkJaW50IG5keCA9IDA7Ci0KLQkJZm9yIChuZHggPSAwOyBuZHggPCBib25kX2Rldi0+YWRkcl9sZW47IG5keCsrKSB7Ci0JCQlkcHJpbnRrKCJDaGVja2luZyBuZHg9JWQgb2YgYm9uZF9kZXYtPmRldl9hZGRyXG4iLAotCQkJCW5keCk7Ci0JCQlpZiAoYm9uZF9kZXYtPmRldl9hZGRyW25keF0gIT0gMCkgewotCQkJCWRwcmludGsoIkZvdW5kIG5vbi16ZXJvIGJ5dGUgYXQgbmR4PSVkXG4iLAotCQkJCQluZHgpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJaWYgKG5keCA9PSBib25kX2Rldi0+YWRkcl9sZW4pIHsKLQkJCS8qCi0JCQkgKiBXZSBnb3QgYWxsIHRoZSB3YXkgdGhyb3VnaCB0aGUgYWRkcmVzcyBhbmQgaXQgd2FzCi0JCQkgKiBhbGwgMCdzLgotCQkJICovCi0JCQlkcHJpbnRrKCIlcyBkb2Vzbid0IGhhdmUgYSBNQUMgYWRkcmVzcyB5ZXQuICBcbiIsCi0JCQkJYm9uZF9kZXYtPm5hbWUpOwotCQkJZHByaW50aygiR29pbmcgdG8gZ2l2ZSBhc3NpZ24gaXQgZnJvbSAlcy5cbiIsCi0JCQkJc2xhdmVfZGV2LT5uYW1lKTsKLQkJCWJvbmRfc2V0aHdhZGRyKGJvbmRfZGV2LCBzbGF2ZV9kZXYpOwotCQl9Ci0JfQotCiAJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQogCSAgICAgICAiOiAlczogZW5zbGF2aW5nICVzIGFzIGElcyBpbnRlcmZhY2Ugd2l0aCBhJXMgbGluay5cbiIsCiAJICAgICAgIGJvbmRfZGV2LT5uYW1lLCBzbGF2ZV9kZXYtPm5hbWUsCkBAIC0yMjI2LDEyICsyMTYzLDEwIEBACiAJLyogY2xvc2Ugc2xhdmUgYmVmb3JlIHJlc3RvcmluZyBpdHMgbWFjIGFkZHJlc3MgKi8KIAlkZXZfY2xvc2Uoc2xhdmVfZGV2KTsKIAotCWlmIChhcHBfYWJpX3ZlciA+PSAxKSB7Ci0JCS8qIHJlc3RvcmUgb3JpZ2luYWwgKCJwZXJtYW5lbnQiKSBtYWMgYWRkcmVzcyAqLwotCQltZW1jcHkoYWRkci5zYV9kYXRhLCBzbGF2ZS0+cGVybV9od2FkZHIsIEVUSF9BTEVOKTsKLQkJYWRkci5zYV9mYW1pbHkgPSBzbGF2ZV9kZXYtPnR5cGU7Ci0JCWRldl9zZXRfbWFjX2FkZHJlc3Moc2xhdmVfZGV2LCAmYWRkcik7Ci0JfQorCS8qIHJlc3RvcmUgb3JpZ2luYWwgKCJwZXJtYW5lbnQiKSBtYWMgYWRkcmVzcyAqLworCW1lbWNweShhZGRyLnNhX2RhdGEsIHNsYXZlLT5wZXJtX2h3YWRkciwgRVRIX0FMRU4pOworCWFkZHIuc2FfZmFtaWx5ID0gc2xhdmVfZGV2LT50eXBlOworCWRldl9zZXRfbWFjX2FkZHJlc3Moc2xhdmVfZGV2LCAmYWRkcik7CiAKIAkvKiByZXN0b3JlIHRoZSBvcmlnaW5hbCBzdGF0ZSBvZiB0aGUKIAkgKiBJRkZfTk9BUlAgZmxhZyB0aGF0IG1pZ2h0IGhhdmUgYmVlbgpAQCAtMjMxOSwxMiArMjI1NCwxMCBAQAogCQkvKiBjbG9zZSBzbGF2ZSBiZWZvcmUgcmVzdG9yaW5nIGl0cyBtYWMgYWRkcmVzcyAqLwogCQlkZXZfY2xvc2Uoc2xhdmVfZGV2KTsKIAotCQlpZiAoYXBwX2FiaV92ZXIgPj0gMSkgewotCQkJLyogcmVzdG9yZSBvcmlnaW5hbCAoInBlcm1hbmVudCIpIG1hYyBhZGRyZXNzKi8KLQkJCW1lbWNweShhZGRyLnNhX2RhdGEsIHNsYXZlLT5wZXJtX2h3YWRkciwgRVRIX0FMRU4pOwotCQkJYWRkci5zYV9mYW1pbHkgPSBzbGF2ZV9kZXYtPnR5cGU7Ci0JCQlkZXZfc2V0X21hY19hZGRyZXNzKHNsYXZlX2RldiwgJmFkZHIpOwotCQl9CisJCS8qIHJlc3RvcmUgb3JpZ2luYWwgKCJwZXJtYW5lbnQiKSBtYWMgYWRkcmVzcyovCisJCW1lbWNweShhZGRyLnNhX2RhdGEsIHNsYXZlLT5wZXJtX2h3YWRkciwgRVRIX0FMRU4pOworCQlhZGRyLnNhX2ZhbWlseSA9IHNsYXZlX2Rldi0+dHlwZTsKKwkJZGV2X3NldF9tYWNfYWRkcmVzcyhzbGF2ZV9kZXYsICZhZGRyKTsKIAogCQkvKiByZXN0b3JlIHRoZSBvcmlnaW5hbCBzdGF0ZSBvZiB0aGUgSUZGX05PQVJQIGZsYWcgdGhhdCBtaWdodCBoYXZlCiAJCSAqIGJlZW4gc2V0IGJ5IGJvbmRfc2V0X3NsYXZlX2luYWN0aXZlX2ZsYWdzKCkKQEAgLTI0MjIsNTcgKzIzNTUsNiBAQAogCXJldHVybiByZXM7CiB9CiAKLXN0YXRpYyBpbnQgYm9uZF9ldGh0b29sX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IGlmcmVxICppZnIpCi17Ci0Jc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyBpbmZvOwotCXZvaWQgX191c2VyICphZGRyID0gaWZyLT5pZnJfZGF0YTsKLQl1aW50MzJfdCBjbWQ7Ci0KLQlpZiAoZ2V0X3VzZXIoY21kLCAodWludDMyX3QgX191c2VyICopYWRkcikpIHsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIEVUSFRPT0xfR0RSVklORk86Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmaW5mbywgYWRkciwgc2l6ZW9mKGluZm8pKSkgewotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KLQotCQlpZiAoc3RyY21wKGluZm8uZHJpdmVyLCAiaWZlbnNsYXZlIikgPT0gMCkgewotCQkJaW50IG5ld19hYmlfdmVyOwotCQkJY2hhciAqZW5kcHRyOwotCi0JCQluZXdfYWJpX3ZlciA9IHNpbXBsZV9zdHJ0b3VsKGluZm8uZndfdmVyc2lvbiwKLQkJCQkJCSAgICAgJmVuZHB0ciwgMCk7Ci0JCQlpZiAoKmVuZHB0cikgewotCQkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQotCQkJCSAgICAgICAiOiBFcnJvcjogZ290IGludmFsaWQgQUJJICIKLQkJCQkgICAgICAgInZlcnNpb24gZnJvbSBhcHBsaWNhdGlvblxuIik7Ci0KLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJaWYgKG9yaWdfYXBwX2FiaV92ZXIgPT0gLTEpIHsKLQkJCQlvcmlnX2FwcF9hYmlfdmVyICA9IG5ld19hYmlfdmVyOwotCQkJfQotCi0JCQlhcHBfYWJpX3ZlciA9IG5ld19hYmlfdmVyOwotCQl9Ci0KLQkJc3RybmNweShpbmZvLmRyaXZlciwgIERSVl9OQU1FLCAzMik7Ci0JCXN0cm5jcHkoaW5mby52ZXJzaW9uLCBEUlZfVkVSU0lPTiwgMzIpOwotCQlzbnByaW50ZihpbmZvLmZ3X3ZlcnNpb24sIDMyLCAiJWQiLCBCT05EX0FCSV9WRVJTSU9OKTsKLQotCQlpZiAoY29weV90b191c2VyKGFkZHIsICZpbmZvLCBzaXplb2YoaW5mbykpKSB7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCi0JCXJldHVybiAwOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci19Ci0KIHN0YXRpYyBpbnQgYm9uZF9pbmZvX3F1ZXJ5KHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IGlmYm9uZCAqaW5mbykKIHsKIAlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IGJvbmRfZGV2LT5wcml2OwpAQCAtMjc3NSw3ICsyNjU3LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JaWRldiA9IF9faW5fZGV2X2dldChkZXYpOworCWlkZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7CiAJaWYgKCFpZGV2KQogCQlnb3RvIG91dDsKIApAQCAtMjg3OSw2ICsyNzYxLDcgQEAKIAkJICogVGhpcyB0YXJnZXQgaXMgbm90IG9uIGEgVkxBTgogCQkgKi8KIAkJaWYgKHJ0LT51LmRzdC5kZXYgPT0gYm9uZC0+ZGV2KSB7CisJCQlpcF9ydF9wdXQocnQpOwogCQkJZHByaW50aygiYmFzYTogcnRkZXYgPT0gYm9uZC0+ZGV2OiBhcnBfc2VuZFxuIik7CiAJCQlib25kX2FycF9zZW5kKHNsYXZlLT5kZXYsIEFSUE9QX1JFUVVFU1QsIHRhcmdldHNbaV0sCiAJCQkJICAgICAgYm9uZC0+bWFzdGVyX2lwLCAwKTsKQEAgLTI4OTgsNiArMjc4MSw3IEBACiAJCX0KIAogCQlpZiAodmxhbl9pZCkgeworCQkJaXBfcnRfcHV0KHJ0KTsKIAkJCWJvbmRfYXJwX3NlbmQoc2xhdmUtPmRldiwgQVJQT1BfUkVRVUVTVCwgdGFyZ2V0c1tpXSwKIAkJCQkgICAgICB2bGFuLT52bGFuX2lwLCB2bGFuX2lkKTsKIAkJCWNvbnRpbnVlOwpAQCAtMjkwOSw2ICsyNzkzLDcgQEAKIAkJCSAgICAgICBib25kLT5kZXYtPm5hbWUsIE5JUFFVQUQoZmwuZmw0X2RzdCksCiAJCQkgICAgICAgcnQtPnUuZHN0LmRldiA/IHJ0LT51LmRzdC5kZXYtPm5hbWUgOiAiTlVMTCIpOwogCQl9CisJCWlwX3J0X3B1dChydCk7CiAJfQogfQogCkBAIC0zNDM4LDE2ICszMzIzLDExIEBACiAJc2VxX3ByaW50ZihzZXEsICJMaW5rIEZhaWx1cmUgQ291bnQ6ICVkXG4iLAogCQkgICBzbGF2ZS0+bGlua19mYWlsdXJlX2NvdW50KTsKIAotCWlmIChhcHBfYWJpX3ZlciA+PSAxKSB7Ci0JCXNlcV9wcmludGYoc2VxLAotCQkJICAgIlBlcm1hbmVudCBIVyBhZGRyOiAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkJCSAgIHNsYXZlLT5wZXJtX2h3YWRkclswXSwKLQkJCSAgIHNsYXZlLT5wZXJtX2h3YWRkclsxXSwKLQkJCSAgIHNsYXZlLT5wZXJtX2h3YWRkclsyXSwKLQkJCSAgIHNsYXZlLT5wZXJtX2h3YWRkclszXSwKLQkJCSAgIHNsYXZlLT5wZXJtX2h3YWRkcls0XSwKLQkJCSAgIHNsYXZlLT5wZXJtX2h3YWRkcls1XSk7Ci0JfQorCXNlcV9wcmludGYoc2VxLAorCQkgICAiUGVybWFuZW50IEhXIGFkZHI6ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkgICBzbGF2ZS0+cGVybV9od2FkZHJbMF0sIHNsYXZlLT5wZXJtX2h3YWRkclsxXSwKKwkJICAgc2xhdmUtPnBlcm1faHdhZGRyWzJdLCBzbGF2ZS0+cGVybV9od2FkZHJbM10sCisJCSAgIHNsYXZlLT5wZXJtX2h3YWRkcls0XSwgc2xhdmUtPnBlcm1faHdhZGRyWzVdKTsKIAogCWlmIChib25kLT5wYXJhbXMubW9kZSA9PSBCT05EX01PREVfODAyM0FEKSB7CiAJCWNvbnN0IHN0cnVjdCBhZ2dyZWdhdG9yICphZ2cKQEAgLTQwMDYsMTUgKzM4ODYsMTIgQEAKIAlzdHJ1Y3QgaWZzbGF2ZSBrX3NpbmZvOwogCXN0cnVjdCBpZnNsYXZlIF9fdXNlciAqdV9zaW5mbyA9IE5VTEw7CiAJc3RydWN0IG1paV9pb2N0bF9kYXRhICptaWkgPSBOVUxMOwotCWludCBwcmV2X2FiaV92ZXIgPSBvcmlnX2FwcF9hYmlfdmVyOwogCWludCByZXMgPSAwOwogCiAJZHByaW50aygiYm9uZF9pb2N0bDogbWFzdGVyPSVzLCBjbWQ9JWRcbiIsCiAJCWJvbmRfZGV2LT5uYW1lLCBjbWQpOwogCiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIFNJT0NFVEhUT09MOgotCQlyZXR1cm4gYm9uZF9ldGh0b29sX2lvY3RsKGJvbmRfZGV2LCBpZnIpOwogCWNhc2UgU0lPQ0dNSUlQSFk6CiAJCW1paSA9IGlmX21paShpZnIpOwogCQlpZiAoIW1paSkgewpAQCAtNDA4NiwyMSArMzk2Myw2IEBACiAJCXJldHVybiAtRVBFUk07CiAJfQogCi0JaWYgKG9yaWdfYXBwX2FiaV92ZXIgPT0gLTEpIHsKLQkJLyogbm8gb3JpZ19hcHBfYWJpX3ZlciB3YXMgcHJvdmlkZWQgeWV0LCBzbyB3ZSdsbCB1c2UgdGhlCi0JCSAqIGN1cnJlbnQgb25lIGZyb20gbm93IG9uLCBldmVuIGlmIGl0J3MgMAotCQkgKi8KLQkJb3JpZ19hcHBfYWJpX3ZlciA9IGFwcF9hYmlfdmVyOwotCi0JfSBlbHNlIGlmIChvcmlnX2FwcF9hYmlfdmVyICE9IGFwcF9hYmlfdmVyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQotCQkgICAgICAgIjogRXJyb3I6IGFscmVhZHkgdXNpbmcgaWZlbnNsYXZlIEFCSSB2ZXJzaW9uICVkOyB0byAiCi0JCSAgICAgICAidXBncmFkZSBpZmVuc2xhdmUgdG8gdmVyc2lvbiAlZCwgeW91IG11c3QgZmlyc3QgIgotCQkgICAgICAgInJlbG9hZCBib25kaW5nLlxuIiwKLQkJICAgICAgIG9yaWdfYXBwX2FiaV92ZXIsIGFwcF9hYmlfdmVyKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJc2xhdmVfZGV2ID0gZGV2X2dldF9ieV9uYW1lKGlmci0+aWZyX3NsYXZlKTsKIAogCWRwcmludGsoInNsYXZlX2Rldj0lcDogXG4iLCBzbGF2ZV9kZXYpOwpAQCAtNDEzMywxNCArMzk5NSw2IEBACiAJCWRldl9wdXQoc2xhdmVfZGV2KTsKIAl9CiAKLQlpZiAocmVzIDwgMCkgewotCQkvKiBUaGUgaW9jdGwgZmFpbGVkLCBzbyB0aGVyZSdzIG5vIHBvaW50IGluIGNoYW5naW5nIHRoZQotCQkgKiBvcmlnX2FwcF9hYmlfdmVyLiBXZSdsbCByZXN0b3JlIGl0J3MgdmFsdWUganVzdCBpbiBjYXNlCi0JCSAqIHdlJ3ZlIGNoYW5nZWQgaXQgZWFybGllciBpbiB0aGlzIGZ1bmN0aW9uLgotCQkgKi8KLQkJb3JpZ19hcHBfYWJpX3ZlciA9IHByZXZfYWJpX3ZlcjsKLQl9Ci0KIAlyZXR1cm4gcmVzOwogfQogCkBAIC00NTc0LDkgKzQ0MjgsMTggQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGJvbmRfZXRodG9vbF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsCisJCQkJICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmRydmluZm8pCit7CisJc3RybmNweShkcnZpbmZvLT5kcml2ZXIsIERSVl9OQU1FLCAzMik7CisJc3RybmNweShkcnZpbmZvLT52ZXJzaW9uLCBEUlZfVkVSU0lPTiwgMzIpOworCXNucHJpbnRmKGRydmluZm8tPmZ3X3ZlcnNpb24sIDMyLCAiJWQiLCBCT05EX0FCSV9WRVJTSU9OKTsKK30KKwogc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBib25kX2V0aHRvb2xfb3BzID0gewogCS5nZXRfdHhfY3N1bQkJPSBldGh0b29sX29wX2dldF90eF9jc3VtLAogCS5nZXRfc2cJCQk9IGV0aHRvb2xfb3BfZ2V0X3NnLAorCS5nZXRfZHJ2aW5mbwkJPSBib25kX2V0aHRvb2xfZ2V0X2RydmluZm8sCiB9OwogCiAvKgpAQCAtNTAzNiw2ICs0ODk5LDE0IEBACiAJcmV0dXJuIDA7CiAKIG91dF9lcnI6CisJLyoKKwkgKiBydG5sX3VubG9jaygpIHdpbGwgcnVuIG5ldGRldl9ydW5fdG9kbygpLCBwdXR0aW5nIHRoZQorCSAqIHRodXMtZmFyLXJlZ2lzdGVyZWQgYm9uZGluZyBkZXZpY2VzIGludG8gYSBzdGF0ZSB3aGljaAorCSAqIHVucmVnaWdpc3Rlcl9uZXRkZXZpY2UoKSB3aWxsIGFjY2VwdAorCSAqLworCXJ0bmxfdW5sb2NrKCk7CisJcnRubF9sb2NrKCk7CisKIAkvKiBmcmVlIGFuZCB1bnJlZ2lzdGVyIGFsbCBib25kcyB0aGF0IHdlcmUgc3VjY2Vzc2Z1bGx5IGFkZGVkICovCiAJYm9uZF9mcmVlX2FsbCgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRpbmcuaCBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZGluZy5oCmluZGV4IDM4ODE5NjkuLmJiZjlkYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZGluZy5oCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZGluZy5oCkBAIC00MCw4ICs0MCw4IEBACiAjaW5jbHVkZSAiYm9uZF8zYWQuaCIKICNpbmNsdWRlICJib25kX2FsYi5oIgogCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIyLjYuMyIKLSNkZWZpbmUgRFJWX1JFTERBVEUJIkp1bmUgOCwgMjAwNSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjIuNi40IgorI2RlZmluZSBEUlZfUkVMREFURQkiU2VwdGVtYmVyIDI2LCAyMDA1IgogI2RlZmluZSBEUlZfTkFNRQkiYm9uZGluZyIKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCSJFdGhlcm5ldCBDaGFubmVsIEJvbmRpbmcgRHJpdmVyIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYXNzaW5pLmMgYi9kcml2ZXJzL25ldC9jYXNzaW5pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU2MTc0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYwpAQCAtMCwwICsxLDUyMzcgQEAKKy8qIGNhc3NpbmkuYzogU3VuIE1pY3Jvc3lzdGVtcyBDYXNzaW5pKCspIGV0aGVybmV0IGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgU3VuIE1pY3Jvc3lzdGVtcyBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgQWRyaWFuIFN1biAoYXN1bkBkYXJrc3VucmlzaW5nLmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAqIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBUaGlzIGRyaXZlciB1c2VzIHRoZSBzdW5nZW0gZHJpdmVyIChjKSBEYXZpZCBNaWxsZXIKKyAqIChkYXZlbUByZWRoYXQuY29tKSBhcyBpdHMgYmFzaXMuCisgKgorICogVGhlIGNhc3NpbmkgY2hpcCBoYXMgYSBudW1iZXIgb2YgZmVhdHVyZXMgdGhhdCBkaXN0aW5ndWlzaCBpdCBmcm9tCisgKiB0aGUgZ2VtIGNoaXA6CisgKiAgNCB0cmFuc21pdCBkZXNjcmlwdG9yIHJpbmdzIHRoYXQgYXJlIHVzZWQgZm9yIGVpdGhlciBRb1MgKFZMQU4pIG9yCisgKiAgICAgIGxvYWQgYmFsYW5jaW5nIChub24tVkxBTiBtb2RlKQorICogIGJhdGNoaW5nIG9mIG11bHRpcGxlIHBhY2tldHMKKyAqICBtdWx0aXBsZSBDUFUgZGlzcGF0Y2hpbmcKKyAqICBwYWdlLWJhc2VkIFJYIGRlc2NyaXB0b3IgZW5naW5lIHdpdGggc2VwYXJhdGUgY29tcGxldGlvbiByaW5ncworICogIEdpZ2FiaXQgc3VwcG9ydCAoR01JSSBhbmQgUENTIGludGVyZmFjZSkKKyAqICBNSUYgbGluayB1cC9kb3duIGRldGVjdGlvbiB3b3JrcworICoKKyAqIFJYIGlzIGhhbmRsZWQgYnkgcGFnZSBzaXplZCBidWZmZXJzIHRoYXQgYXJlIGF0dGFjaGVkIGFzIGZyYWdtZW50cyB0bworICogdGhlIHNrYi4gaGVyZSdzIHdoYXQncyBkb25lOgorICogIC0tIGRyaXZlciBhbGxvY2F0ZXMgcGFnZXMgYXQgYSB0aW1lIGFuZCBrZWVwcyByZWZlcmVuY2UgY291bnRzCisgKiAgICAgb24gdGhlbS4KKyAqICAtLSB0aGUgdXBwZXIgcHJvdG9jb2wgbGF5ZXJzIGFzc3VtZSB0aGF0IHRoZSBoZWFkZXIgaXMgaW4gdGhlIHNrYgorICogICAgIGl0c2VsZi4gYXMgYSByZXN1bHQsIGNhc3Npbmkgd2lsbCBjb3B5IGEgc21hbGwgYW1vdW50ICg2NCBieXRlcykKKyAqICAgICB0byBtYWtlIHRoZW0gaGFwcHkuCisgKiAgLS0gZHJpdmVyIGFwcGVuZHMgdGhlIHJlc3Qgb2YgdGhlIGRhdGEgcGFnZXMgYXMgZnJhZ3MgdG8gc2tidWZmcworICogICAgIGFuZCBpbmNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQKKyAqICAtLSBvbiBwYWdlIHJlY2xhbWF0aW9uLCB0aGUgZHJpdmVyIHN3YXBzIHRoZSBwYWdlIHdpdGggYSBzcGFyZSBwYWdlLgorICogICAgIGlmIHRoYXQgcGFnZSBpcyBzdGlsbCBpbiB1c2UsIGl0IGZyZWVzIGl0cyByZWZlcmVuY2UgdG8gdGhhdCBwYWdlLAorICogICAgIGFuZCBhbGxvY2F0ZXMgYSBuZXcgcGFnZSBmb3IgdXNlLiBvdGhlcndpc2UsIGl0IGp1c3QgcmVjeWNsZXMgdGhlCisgKiAgICAgdGhlIHBhZ2UuIAorICoKKyAqIE5PVEU6IGNhc3NpbmkgY2FuIHBhcnNlIHRoZSBoZWFkZXIuIGhvd2V2ZXIsIGl0J3Mgbm90IHdvcnRoIGl0CisgKiAgICAgICBhcyBsb25nIGFzIHRoZSBuZXR3b3JrIHN0YWNrIHJlcXVpcmVzIGEgaGVhZGVyIGNvcHkuCisgKgorICogVFggaGFzIDQgcXVldWVzLiBjdXJyZW50bHkgdGhlc2UgcXVldWVzIGFyZSB1c2VkIGluIGEgcm91bmQtcm9iaW4KKyAqIGZhc2hpb24gZm9yIGxvYWQgYmFsYW5jaW5nLiBUaGV5IGNhbiBhbHNvIGJlIHVzZWQgZm9yIFFvUy4gZm9yIHRoYXQKKyAqIHRvIHdvcmssIGhvd2V2ZXIsIFFvUyBpbmZvcm1hdGlvbiBuZWVkcyB0byBiZSBleHBvc2VkIGRvd24gdG8gdGhlIGRyaXZlcgorICogbGV2ZWwgc28gdGhhdCBzdWJxdWV1ZXMgZ2V0IHRhcmdldHRlZCB0byBwYXJ0aWN1bGFyIHRyYW5zbWl0IHJpbmdzLgorICogYWx0ZXJuYXRpdmVseSwgdGhlIHF1ZXVlcyBjYW4gYmUgY29uZmlndXJlZCB2aWEgdXNlIG9mIHRoZSBhbGwtcHVycG9zZQorICogaW9jdGwuCisgKgorICogUlggREFUQTogdGhlIHJ4IGNvbXBsZXRpb24gcmluZyBoYXMgYWxsIHRoZSBpbmZvLCBidXQgdGhlIHJ4IGRlc2MKKyAqIHJpbmcgaGFzIGFsbCBvZiB0aGUgZGF0YS4gUlggY2FuIGNvbmNlaXZhYmx5IGNvbWUgaW4gdW5kZXIgbXVsdGlwbGUKKyAqIGludGVycnVwdHMsIGJ1dCB0aGUgSU5UIyBhc3NpZ25tZW50IG5lZWRzIHRvIGJlIHNldCB1cCBwcm9wZXJseSBieQorICogdGhlIEJJT1MgYW5kIGNvbnZleWVkIHRvIHRoZSBkcml2ZXIuIFBDSSBCSU9TZXMgZG9uJ3Qga25vdyBob3cgdG8gZG8KKyAqIHRoYXQuIGFsc28sIHRoZSB0d28gZGVzY3JpcHRvciByaW5ncyBhcmUgZGVzaWduZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbgorICogZW5jcnlwdGVkIGFuZCBub24tZW5jcnlwdGVkIHBhY2tldHMsIGJ1dCB3ZSB1c2UgdGhlbSBmb3IgYnVmZmVyaW5nIAorICogaW5zdGVhZC4KKyAqCisgKiBieSBkZWZhdWx0LCB0aGUgc2VsZWN0aXZlIGNsZWFyIG1hc2sgaXMgc2V0IHVwIHRvIHByb2Nlc3MgcnggcGFja2V0cy4gIAorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorCisjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisjZGVmaW5lIGNhc19wYWdlX21hcCh4KSAgICAgIGttYXBfYXRvbWljKCh4KSwgS01fU0tCX0RBVEFfU09GVElSUSkKKyNkZWZpbmUgY2FzX3BhZ2VfdW5tYXAoeCkgICAga3VubWFwX2F0b21pYygoeCksIEtNX1NLQl9EQVRBX1NPRlRJUlEpCisjZGVmaW5lIENBU19OQ1BVUyAgICAgICAgICAgIG51bV9vbmxpbmVfY3B1cygpCisKKyNpZiBkZWZpbmVkKENPTkZJR19DQVNTSU5JX05BUEkpICYmIGRlZmluZWQoSEFWRV9ORVRERVZfUE9MTCkKKyNkZWZpbmUgVVNFX05BUEkKKyNkZWZpbmUgY2FzX3NrYl9yZWxlYXNlKHgpICBuZXRpZl9yZWNlaXZlX3NrYih4KQorI2Vsc2UKKyNkZWZpbmUgY2FzX3NrYl9yZWxlYXNlKHgpICBuZXRpZl9yeCh4KQorI2VuZGlmCisKKy8qIHNlbGVjdCB3aGljaCBmaXJtd2FyZSB0byB1c2UgKi8KKyNkZWZpbmUgVVNFX0hQX1dPUktBUk9VTkQgICAgIAorI2RlZmluZSBIUF9XT1JLQVJPVU5EX0RFRkFVTFQgLyogc2VsZWN0IHdoaWNoIGZpcm13YXJlIHRvIHVzZSBhcyBkZWZhdWx0ICovCisjZGVmaW5lIENBU19IUF9BTFRfRklSTVdBUkUgICBjYXNfcHJvZ19udWxsIC8qIGFsdGVybmF0ZSBmaXJtd2FyZSAqLworCisjaW5jbHVkZSAiY2Fzc2luaS5oIgorCisjZGVmaW5lIFVTRV9UWF9DT01QV0IgICAgICAvKiB1c2UgY29tcGxldGlvbiB3cml0ZWJhY2sgcmVnaXN0ZXJzICovCisjZGVmaW5lIFVTRV9DU01BX0NEX1BST1RPICAvKiBzdGFuZGFyZCBDU01BL0NEICovCisjZGVmaW5lIFVTRV9SWF9CTEFOSyAgICAgICAvKiBodyBpbnRlcnJ1cHQgbWl0aWdhdGlvbiAqLworI3VuZGVmIFVTRV9FTlRST1BZX0RFViAgICAgLyogZG9uJ3QgdGVzdCBmb3IgZW50cm9weSBkZXZpY2UgKi8KKworLyogTk9URTogdGhlc2UgYXJlbid0IHVzZWFibGUgdW5sZXNzIFBDSSBpbnRlcnJ1cHRzIGNhbiBiZSBhc3NpZ25lZC4KKyAqIGFsc28sIHdlIG5lZWQgdG8gbWFrZSBjcC0+bG9jayBmaW5lci1ncmFpbmVkLgorICovCisjdW5kZWYgIFVTRV9QQ0lfSU5UQgorI3VuZGVmICBVU0VfUENJX0lOVEMKKyN1bmRlZiAgVVNFX1BDSV9JTlRECisjdW5kZWYgIFVTRV9RT1MKKworI3VuZGVmICBVU0VfVlBEX0RFQlVHICAgICAgIC8qIGRlYnVnIHZwZCBpbmZvcm1hdGlvbiBpZiBkZWZpbmVkICovCisKKy8qIHJ4IHByb2Nlc3Npbmcgb3B0aW9ucyAqLworI2RlZmluZSBVU0VfUEFHRV9PUkRFUiAgICAgIC8qIHNwZWNpZnkgdG8gYWxsb2NhdGUgbGFyZ2UgcnggcGFnZXMgKi8KKyNkZWZpbmUgUlhfRE9OVF9CQVRDSCAgMCAgICAvKiBpZiAxLCBkb24ndCBiYXRjaCBmbG93cyAqLworI2RlZmluZSBSWF9DT1BZX0FMV0FZUyAwICAgIC8qIGlmIDAsIHVzZSBmcmFncyAqLworI2RlZmluZSBSWF9DT1BZX01JTiAgICA2NCAgIC8qIGNvcHkgYSBsaXR0bGUgdG8gbWFrZSB1cHBlciBsYXllcnMgaGFwcHkgKi8KKyN1bmRlZiAgUlhfQ09VTlRfQlVGRkVSUyAgICAvKiBkZWZpbmUgdG8gY2FsY3VsYXRlIFJYIGJ1ZmZlciBzdGF0cyAqLworCisjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJImNhc3NpbmkiCisjZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjEuNCIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSIxIEp1bHkgMjAwNCIKKworI2RlZmluZSBDQVNfREVGX01TR19FTkFCTEUJICBcCisJKE5FVElGX01TR19EUlYJCXwgXAorCSBORVRJRl9NU0dfUFJPQkUJfCBcCisJIE5FVElGX01TR19MSU5LCQl8IFwKKwkgTkVUSUZfTVNHX1RJTUVSCXwgXAorCSBORVRJRl9NU0dfSUZET1dOCXwgXAorCSBORVRJRl9NU0dfSUZVUAkJfCBcCisJIE5FVElGX01TR19SWF9FUlIJfCBcCisJIE5FVElGX01TR19UWF9FUlIpCisKKy8qIGxlbmd0aCBvZiB0aW1lIGJlZm9yZSB3ZSBkZWNpZGUgdGhlIGhhcmR3YXJlIGlzIGJvcmtlZCwKKyAqIGFuZCBkZXYtPnR4X3RpbWVvdXQoKSBzaG91bGQgYmUgY2FsbGVkIHRvIGZpeCB0aGUgcHJvYmxlbQorICovCisjZGVmaW5lIENBU19UWF9USU1FT1VUCQkJKEhaKQorI2RlZmluZSBDQVNfTElOS19USU1FT1VUICAgICAgICAgICAgICAgICgyMipIWi8xMCkKKyNkZWZpbmUgQ0FTX0xJTktfRkFTVF9USU1FT1VUICAgICAgICAgICAoMSkKKworLyogdGltZW91dCB2YWx1ZXMgZm9yIHN0YXRlIGNoYW5naW5nLiB0aGVzZSBzcGVjaWZ5IHRoZSBudW1iZXIKKyAqIG9mIDEwdXMgZGVsYXlzIHRvIGJlIHVzZWQgYmVmb3JlIGdpdmluZyB1cC4KKyAqLworI2RlZmluZSBTVE9QX1RSSUVTX1BIWSAxMDAwCisjZGVmaW5lIFNUT1BfVFJJRVMgICAgIDUwMDAKKworLyogc3BlY2lmeSBhIG1pbmltdW0gZnJhbWUgc2l6ZSB0byBkZWFsIHdpdGggc29tZSBmaWZvIGlzc3VlcyAKKyAqIG1heCBtdHUgPT0gMiAqIHBhZ2Ugc2l6ZSAtIGV0aGVybmV0IGhlYWRlciAtIDY0IC0gc3dpdmVsID0KKyAqICAgICAgICAgICAgMiAqIHBhZ2Vfc2l6ZSAtIDB4NTAKKyAqLworI2RlZmluZSBDQVNfTUlOX0ZSQU1FCQkJOTcKKyNkZWZpbmUgQ0FTXzEwMDBNQl9NSU5fRlJBTUUgICAgICAgICAgICAyNTUKKyNkZWZpbmUgQ0FTX01JTl9NVFUgICAgICAgICAgICAgICAgICAgICA2MAorI2RlZmluZSBDQVNfTUFYX01UVSAgICAgICAgICAgICAgICAgICAgIG1pbigoKGNwLT5wYWdlX3NpemUgPDwgMSkgLSAweDUwKSwgOTAwMCkKKworI2lmIDEKKy8qCisgKiBFbGltaW5hdGUgdGhlc2UgYW5kIHVzZSBzZXBhcmF0ZSBhdG9taWMgY291bnRlcnMgZm9yIGVhY2gsIHRvCisgKiBhdm9pZCBhIHJhY2UgY29uZGl0aW9uLgorICovCisjZWxzZQorI2RlZmluZSBDQVNfUkVTRVRfTVRVICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ0FTX1JFU0VUX0FMTCAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENBU19SRVNFVF9TUEFSRSAgICAgICAgICAgICAgICAgMworI2VuZGlmCisKK3N0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KKwlEUlZfTU9EVUxFX05BTUUgIi5jOnYiIERSVl9NT0RVTEVfVkVSU0lPTiAiICgiIERSVl9NT0RVTEVfUkVMREFURSAiKVxuIjsKKworTU9EVUxFX0FVVEhPUigiQWRyaWFuIFN1biAoYXN1bkBkYXJrc3VucmlzaW5nLmNvbSkiKTsKK01PRFVMRV9ERVNDUklQVElPTigiU3VuIENhc3NpbmkoKykgZXRoZXJuZXQgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfUEFSTShjYXNzaW5pX2RlYnVnLCAiaSIpOworTU9EVUxFX1BBUk1fREVTQyhjYXNzaW5pX2RlYnVnLCAiQ2Fzc2luaSBiaXRtYXBwZWQgZGVidWdnaW5nIG1lc3NhZ2UgZW5hYmxlIHZhbHVlIik7CitNT0RVTEVfUEFSTShsaW5rX21vZGUsICJpIik7CitNT0RVTEVfUEFSTV9ERVNDKGxpbmtfbW9kZSwgImRlZmF1bHQgbGluayBtb2RlIik7CisKKy8qCisgKiBXb3JrIGFyb3VuZCBmb3IgYSBQQ1MgYnVnIGluIHdoaWNoIHRoZSBsaW5rIGdvZXMgZG93biBkdWUgdG8gdGhlIGNoaXAKKyAqIGJlaW5nIGNvbmZ1c2VkIGFuZCBuZXZlciBzaG93aW5nIGEgbGluayBzdGF0dXMgb2YgInVwLiIKKyAqLworI2RlZmluZSBERUZBVUxUX0xJTktET1dOX1RJTUVPVVQgNQorLyogCisgKiBWYWx1ZSBpbiBzZWNvbmRzLCBmb3IgdXNlciBpbnB1dC4KKyAqLworc3RhdGljIGludCBsaW5rZG93bl90aW1lb3V0ID0gREVGQVVMVF9MSU5LRE9XTl9USU1FT1VUOworTU9EVUxFX1BBUk0obGlua2Rvd25fdGltZW91dCwgImkiKTsKK01PRFVMRV9QQVJNX0RFU0MobGlua2Rvd25fdGltZW91dCwKKyJtaW4gcmVzZXQgaW50ZXJ2YWwgaW4gc2VjLiBmb3IgUENTIGxpbmtkb3duIGlzc3VlOyBkaXNhYmxlZCBpZiBub3QgcG9zaXRpdmUiKTsKKworLyoKKyAqIHZhbHVlIGluICd0aWNrcycgKHVuaXRzIHVzZWQgYnkgamlmZmllcykuIFNldCB3aGVuIHdlIGluaXQgdGhlCisgKiBtb2R1bGUgYmVjYXVzZSAnSFonIGluIGFjdHVhbGx5IGEgZnVuY3Rpb24gY2FsbCBvbiBzb21lIGZsYXZvcnMgb2YKKyAqIExpbnV4LiAgVGhpcyB3aWxsIGRlZmF1bHQgdG8gREVGQVVMVF9MSU5LRE9XTl9USU1FT1VUICogSFouCisgKi8KK3N0YXRpYyBpbnQgbGlua190cmFuc2l0aW9uX3RpbWVvdXQ7CisKKworc3RhdGljIGludCBjYXNzaW5pX2RlYnVnID0gLTE7CS8qIC0xID09IHVzZSBDQVNfREVGX01TR19FTkFCTEUgYXMgdmFsdWUgKi8KK3N0YXRpYyBpbnQgbGlua19tb2RlOworCitzdGF0aWMgdTE2IGxpbmtfbW9kZXNbXSBfX2RldmluaXRkYXRhID0geworCUJNQ1JfQU5FTkFCTEUsCQkJIC8qIDAgOiBhdXRvbmVnICovCisJMCwJCQkJIC8qIDEgOiAxMGJ0IGhhbGYgZHVwbGV4ICovCisJQk1DUl9TUEVFRDEwMCwJCQkgLyogMiA6IDEwMGJ0IGhhbGYgZHVwbGV4ICovCisJQk1DUl9GVUxMRFBMWCwJCQkgLyogMyA6IDEwYnQgZnVsbCBkdXBsZXggKi8KKwlCTUNSX1NQRUVEMTAwfEJNQ1JfRlVMTERQTFgsCSAvKiA0IDogMTAwYnQgZnVsbCBkdXBsZXggKi8KKwlDQVNfQk1DUl9TUEVFRDEwMDB8Qk1DUl9GVUxMRFBMWCAvKiA1IDogMTAwMGJ0IGZ1bGwgZHVwbGV4ICovCit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY2FzX3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0geworCXsgUENJX1ZFTkRPUl9JRF9TVU4sIFBDSV9ERVZJQ0VfSURfU1VOX0NBU1NJTkksCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwVUwgfSwKKwl7IFBDSV9WRU5ET1JfSURfTlMsIFBDSV9ERVZJQ0VfSURfTlNfU0FUVVJOLAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMFVMIH0sCisJeyAwLCB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgY2FzX3BjaV90YmwpOworCitzdGF0aWMgdm9pZCBjYXNfc2V0X2xpbmtfbW9kZXMoc3RydWN0IGNhcyAqY3ApOworCitzdGF0aWMgaW5saW5lIHZvaWQgY2FzX2xvY2tfdHgoc3RydWN0IGNhcyAqY3ApCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTl9UWF9SSU5HUzsgaSsrKSAgCisJCXNwaW5fbG9jaygmY3AtPnR4X2xvY2tbaV0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2FzX2xvY2tfYWxsKHN0cnVjdCBjYXMgKmNwKQoreworCXNwaW5fbG9ja19pcnEoJmNwLT5sb2NrKTsKKwljYXNfbG9ja190eChjcCk7Cit9CisKKy8qIFdUWjogUUEgd2FzIGZpbmRpbmcgZGVhZGxvY2sgcHJvYmxlbXMgd2l0aCB0aGUgcHJldmlvdXMKKyAqIHZlcnNpb25zIGFmdGVyIGxvbmcgdGVzdCBydW5zIHdpdGggbXVsdGlwbGUgY2FyZHMgcGVyIG1hY2hpbmUuCisgKiBTZWUgaWYgcmVwbGFjaW5nIGNhc19sb2NrX2FsbCB3aXRoIHNhZmVyIHZlcnNpb25zIGhlbHBzLiBUaGUKKyAqIHN5bXB0b21zIFFBIGlzIHJlcG9ydGluZyBtYXRjaCB0aG9zZSB3ZSdkIGV4cGVjdCBpZiBpbnRlcnJ1cHRzCisgKiBhcmVuJ3QgYmVpbmcgcHJvcGVybHkgcmVzdG9yZWQsIGFuZCB3ZSBmaXhlZCBhIHByZXZpb3VzIGRlYWRsb2NrCisgKiB3aXRoIHNpbWlsYXIgc3ltcHRvbXMgYnkgdXNpbmcgc2F2ZS9yZXN0b3JlIHZlcnNpb25zIGluIG90aGVyCisgKiBwbGFjZXMuCisgKi8KKyNkZWZpbmUgY2FzX2xvY2tfYWxsX3NhdmUoY3AsIGZsYWdzKSBcCitkbyB7IFwKKwlzdHJ1Y3QgY2FzICp4eHhjcCA9IChjcCk7IFwKKwlzcGluX2xvY2tfaXJxc2F2ZSgmeHh4Y3AtPmxvY2ssIGZsYWdzKTsgXAorCWNhc19sb2NrX3R4KHh4eGNwKTsgXAorfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIGNhc191bmxvY2tfdHgoc3RydWN0IGNhcyAqY3ApCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSBOX1RYX1JJTkdTOyBpID4gMDsgaS0tKSAgCisJCXNwaW5fdW5sb2NrKCZjcC0+dHhfbG9ja1tpIC0gMV0pOyAgCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYXNfdW5sb2NrX2FsbChzdHJ1Y3QgY2FzICpjcCkKK3sKKwljYXNfdW5sb2NrX3R4KGNwKTsKKwlzcGluX3VubG9ja19pcnEoJmNwLT5sb2NrKTsKK30KKworI2RlZmluZSBjYXNfdW5sb2NrX2FsbF9yZXN0b3JlKGNwLCBmbGFncykgXAorZG8geyBcCisJc3RydWN0IGNhcyAqeHh4Y3AgPSAoY3ApOyBcCisJY2FzX3VubG9ja190eCh4eHhjcCk7IFwKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4eHhjcC0+bG9jaywgZmxhZ3MpOyBcCit9IHdoaWxlICgwKQorCitzdGF0aWMgdm9pZCBjYXNfZGlzYWJsZV9pcnEoc3RydWN0IGNhcyAqY3AsIGNvbnN0IGludCByaW5nKQoreworCS8qIE1ha2Ugc3VyZSB3ZSB3b24ndCBnZXQgYW55IG1vcmUgaW50ZXJydXB0cyAqLworCWlmIChyaW5nID09IDApIHsKKwkJd3JpdGVsKDB4RkZGRkZGRkYsIGNwLT5yZWdzICsgUkVHX0lOVFJfTUFTSyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBkaXNhYmxlIGNvbXBsZXRpb24gaW50ZXJydXB0cyBhbmQgc2VsZWN0aXZlbHkgbWFzayAqLworCWlmIChjcC0+Y2FzX2ZsYWdzICYgQ0FTX0ZMQUdfUkVHX1BMVVMpIHsKKwkJc3dpdGNoIChyaW5nKSB7CisjaWYgZGVmaW5lZCAoVVNFX1BDSV9JTlRCKSB8fCBkZWZpbmVkKFVTRV9QQ0lfSU5UQykgfHwgZGVmaW5lZChVU0VfUENJX0lOVEQpCisjaWZkZWYgVVNFX1BDSV9JTlRCCisJCWNhc2UgMToKKyNlbmRpZgorI2lmZGVmIFVTRV9QQ0lfSU5UQworCQljYXNlIDI6CisjZW5kaWYKKyNpZmRlZiBVU0VfUENJX0lOVEQKKwkJY2FzZSAzOgorI2VuZGlmCisJCQl3cml0ZWwoSU5UUk5fTUFTS19DTEVBUl9BTEwgfCBJTlRSTl9NQVNLX1JYX0VOLCAKKwkJCSAgICAgICBjcC0+cmVncyArIFJFR19QTFVTX0lOVFJOX01BU0socmluZykpOworCQkJYnJlYWs7CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJCXdyaXRlbChJTlRSTl9NQVNLX0NMRUFSX0FMTCwgY3AtPnJlZ3MgKworCQkJICAgICAgIFJFR19QTFVTX0lOVFJOX01BU0socmluZykpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYXNfbWFza19pbnRyKHN0cnVjdCBjYXMgKmNwKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5fUlhfQ09NUF9SSU5HUzsgaSsrKQorCQljYXNfZGlzYWJsZV9pcnEoY3AsIGkpOworfQorCitzdGF0aWMgdm9pZCBjYXNfZW5hYmxlX2lycShzdHJ1Y3QgY2FzICpjcCwgY29uc3QgaW50IHJpbmcpCit7CisJaWYgKHJpbmcgPT0gMCkgeyAvKiBhbGwgYnV0IFRYX0RPTkUgKi8KKwkJd3JpdGVsKElOVFJfVFhfRE9ORSwgY3AtPnJlZ3MgKyBSRUdfSU5UUl9NQVNLKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChjcC0+Y2FzX2ZsYWdzICYgQ0FTX0ZMQUdfUkVHX1BMVVMpIHsKKwkJc3dpdGNoIChyaW5nKSB7CisjaWYgZGVmaW5lZCAoVVNFX1BDSV9JTlRCKSB8fCBkZWZpbmVkKFVTRV9QQ0lfSU5UQykgfHwgZGVmaW5lZChVU0VfUENJX0lOVEQpCisjaWZkZWYgVVNFX1BDSV9JTlRCCisJCWNhc2UgMToKKyNlbmRpZgorI2lmZGVmIFVTRV9QQ0lfSU5UQworCQljYXNlIDI6CisjZW5kaWYKKyNpZmRlZiBVU0VfUENJX0lOVEQKKwkJY2FzZSAzOgorI2VuZGlmCisJCQl3cml0ZWwoSU5UUk5fTUFTS19SWF9FTiwgY3AtPnJlZ3MgKworCQkJICAgICAgIFJFR19QTFVTX0lOVFJOX01BU0socmluZykpOworCQkJYnJlYWs7CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2FzX3VubWFza19pbnRyKHN0cnVjdCBjYXMgKmNwKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5fUlhfQ09NUF9SSU5HUzsgaSsrKQorCQljYXNfZW5hYmxlX2lycShjcCwgaSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYXNfZW50cm9weV9nYXRoZXIoc3RydWN0IGNhcyAqY3ApCit7CisjaWZkZWYgVVNFX0VOVFJPUFlfREVWCisJaWYgKChjcC0+Y2FzX2ZsYWdzICYgQ0FTX0ZMQUdfRU5UUk9QWV9ERVYpID09IDApCisJCXJldHVybjsKKworCWJhdGNoX2VudHJvcHlfc3RvcmUocmVhZGwoY3AtPnJlZ3MgKyBSRUdfRU5UUk9QWV9JViksCisJCQkgICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfRU5UUk9QWV9JViksCisJCQkgICAgc2l6ZW9mKHVpbnQ2NF90KSo4KTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2FzX2VudHJvcHlfcmVzZXQoc3RydWN0IGNhcyAqY3ApCit7CisjaWZkZWYgVVNFX0VOVFJPUFlfREVWCisJaWYgKChjcC0+Y2FzX2ZsYWdzICYgQ0FTX0ZMQUdfRU5UUk9QWV9ERVYpID09IDApCisJCXJldHVybjsKKworCXdyaXRlbChCSU1fTE9DQUxfREVWX1BBRCB8IEJJTV9MT0NBTF9ERVZfUFJPTSB8IEJJTV9MT0NBTF9ERVZfRVhULCAKKwkgICAgICAgY3AtPnJlZ3MgKyBSRUdfQklNX0xPQ0FMX0RFVl9FTik7CisJd3JpdGViKEVOVFJPUFlfUkVTRVRfU1RDX01PREUsIGNwLT5yZWdzICsgUkVHX0VOVFJPUFlfUkVTRVQpOworCXdyaXRlYigweDU1LCBjcC0+cmVncyArIFJFR19FTlRST1BZX1JBTkRfUkVHKTsKKworCS8qIGlmIHdlIHJlYWQgYmFjayAweDAsIHdlIGRvbid0IGhhdmUgYW4gZW50cm9weSBkZXZpY2UgKi8KKwlpZiAocmVhZGIoY3AtPnJlZ3MgKyBSRUdfRU5UUk9QWV9SQU5EX1JFRykgPT0gMCkKKwkJY3AtPmNhc19mbGFncyAmPSB+Q0FTX0ZMQUdfRU5UUk9QWV9ERVY7CisjZW5kaWYKK30KKworLyogYWNjZXNzIHRvIHRoZSBwaHkuIHRoZSBmb2xsb3dpbmcgYXNzdW1lcyB0aGF0IHdlJ3ZlIGluaXRpYWxpemVkIHRoZSBNSUYgdG8gCisgKiBiZSBpbiBmcmFtZSByYXRoZXIgdGhhbiBiaXQtYmFuZyBtb2RlCisgKi8KK3N0YXRpYyB1MTYgY2FzX3BoeV9yZWFkKHN0cnVjdCBjYXMgKmNwLCBpbnQgcmVnKQoreworCXUzMiBjbWQ7CisJaW50IGxpbWl0ID0gU1RPUF9UUklFU19QSFk7CisKKwljbWQgPSBNSUZfRlJBTUVfU1QgfCBNSUZfRlJBTUVfT1BfUkVBRDsKKwljbWQgfD0gQ0FTX0JBU0UoTUlGX0ZSQU1FX1BIWV9BRERSLCBjcC0+cGh5X2FkZHIpOworCWNtZCB8PSBDQVNfQkFTRShNSUZfRlJBTUVfUkVHX0FERFIsIHJlZyk7CisJY21kIHw9IE1JRl9GUkFNRV9UVVJOX0FST1VORF9NU0I7CisJd3JpdGVsKGNtZCwgY3AtPnJlZ3MgKyBSRUdfTUlGX0ZSQU1FKTsKKwkKKwkvKiBwb2xsIGZvciBjb21wbGV0aW9uICovCisJd2hpbGUgKGxpbWl0LS0gPiAwKSB7CisJCXVkZWxheSgxMCk7CisJCWNtZCA9IHJlYWRsKGNwLT5yZWdzICsgUkVHX01JRl9GUkFNRSk7CisJCWlmIChjbWQgJiBNSUZfRlJBTUVfVFVSTl9BUk9VTkRfTFNCKQorCQkJcmV0dXJuIChjbWQgJiBNSUZfRlJBTUVfREFUQV9NQVNLKTsKKwl9CisJcmV0dXJuIDB4RkZGRjsgLyogLTEgKi8KK30KKworc3RhdGljIGludCBjYXNfcGh5X3dyaXRlKHN0cnVjdCBjYXMgKmNwLCBpbnQgcmVnLCB1MTYgdmFsKQoreworCWludCBsaW1pdCA9IFNUT1BfVFJJRVNfUEhZOworCXUzMiBjbWQ7CisKKwljbWQgPSBNSUZfRlJBTUVfU1QgfCBNSUZfRlJBTUVfT1BfV1JJVEU7CisJY21kIHw9IENBU19CQVNFKE1JRl9GUkFNRV9QSFlfQUREUiwgY3AtPnBoeV9hZGRyKTsKKwljbWQgfD0gQ0FTX0JBU0UoTUlGX0ZSQU1FX1JFR19BRERSLCByZWcpOworCWNtZCB8PSBNSUZfRlJBTUVfVFVSTl9BUk9VTkRfTVNCOworCWNtZCB8PSB2YWwgJiBNSUZfRlJBTUVfREFUQV9NQVNLOworCXdyaXRlbChjbWQsIGNwLT5yZWdzICsgUkVHX01JRl9GUkFNRSk7CisJCisJLyogcG9sbCBmb3IgY29tcGxldGlvbiAqLworCXdoaWxlIChsaW1pdC0tID4gMCkgeworCQl1ZGVsYXkoMTApOworCQljbWQgPSByZWFkbChjcC0+cmVncyArIFJFR19NSUZfRlJBTUUpOworCQlpZiAoY21kICYgTUlGX0ZSQU1FX1RVUk5fQVJPVU5EX0xTQikKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIGNhc19waHlfcG93ZXJ1cChzdHJ1Y3QgY2FzICpjcCkKK3sKKwl1MTYgY3RsID0gY2FzX3BoeV9yZWFkKGNwLCBNSUlfQk1DUik7CQorCisJaWYgKChjdGwgJiBCTUNSX1BET1dOKSA9PSAwKQorCQlyZXR1cm47CisJY3RsICY9IH5CTUNSX1BET1dOOworCWNhc19waHlfd3JpdGUoY3AsIE1JSV9CTUNSLCBjdGwpOworfQorCitzdGF0aWMgdm9pZCBjYXNfcGh5X3Bvd2VyZG93bihzdHJ1Y3QgY2FzICpjcCkKK3sKKwl1MTYgY3RsID0gY2FzX3BoeV9yZWFkKGNwLCBNSUlfQk1DUik7CQorCisJaWYgKGN0bCAmIEJNQ1JfUERPV04pCisJCXJldHVybjsKKwljdGwgfD0gQk1DUl9QRE9XTjsKKwljYXNfcGh5X3dyaXRlKGNwLCBNSUlfQk1DUiwgY3RsKTsKK30KKworLyogY3AtPmxvY2sgaGVsZC4gbm90ZTogdGhlIGxhc3QgcHV0X3BhZ2Ugd2lsbCBmcmVlIHRoZSBidWZmZXIgKi8KK3N0YXRpYyBpbnQgY2FzX3BhZ2VfZnJlZShzdHJ1Y3QgY2FzICpjcCwgY2FzX3BhZ2VfdCAqcGFnZSkKK3sKKwlwY2lfdW5tYXBfcGFnZShjcC0+cGRldiwgcGFnZS0+ZG1hX2FkZHIsIGNwLT5wYWdlX3NpemUsIAorCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwlfX2ZyZWVfcGFnZXMocGFnZS0+YnVmZmVyLCBjcC0+cGFnZV9vcmRlcik7CisJa2ZyZWUocGFnZSk7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBSWF9DT1VOVF9CVUZGRVJTCisjZGVmaW5lIFJYX1VTRURfQUREKHgsIHkpICAgICAgICgoeCktPnVzZWQgKz0gKHkpKQorI2RlZmluZSBSWF9VU0VEX1NFVCh4LCB5KSAgICAgICAoKHgpLT51c2VkICA9ICh5KSkKKyNlbHNlCisjZGVmaW5lIFJYX1VTRURfQUREKHgsIHkpIAorI2RlZmluZSBSWF9VU0VEX1NFVCh4LCB5KQorI2VuZGlmCisKKy8qIGxvY2FsIHBhZ2UgYWxsb2NhdGlvbiByb3V0aW5lcyBmb3IgdGhlIHJlY2VpdmUgYnVmZmVycy4ganVtYm8gcGFnZXMKKyAqIHJlcXVpcmUgYXQgbGVhc3QgOEsgY29udGlndW91cyBhbmQgOEsgYWxpZ25lZCBidWZmZXJzLgorICovCitzdGF0aWMgY2FzX3BhZ2VfdCAqY2FzX3BhZ2VfYWxsb2Moc3RydWN0IGNhcyAqY3AsIGNvbnN0IGludCBmbGFncykKK3sKKwljYXNfcGFnZV90ICpwYWdlOworCisJcGFnZSA9IGttYWxsb2Moc2l6ZW9mKGNhc19wYWdlX3QpLCBmbGFncyk7CisJaWYgKCFwYWdlKQorCQlyZXR1cm4gTlVMTDsKKworCUlOSVRfTElTVF9IRUFEKCZwYWdlLT5saXN0KTsKKwlSWF9VU0VEX1NFVChwYWdlLCAwKTsKKwlwYWdlLT5idWZmZXIgPSBhbGxvY19wYWdlcyhmbGFncywgY3AtPnBhZ2Vfb3JkZXIpOworCWlmICghcGFnZS0+YnVmZmVyKQorCQlnb3RvIHBhZ2VfZXJyOworCXBhZ2UtPmRtYV9hZGRyID0gcGNpX21hcF9wYWdlKGNwLT5wZGV2LCBwYWdlLT5idWZmZXIsIDAsCisJCQkJICAgICAgY3AtPnBhZ2Vfc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwlyZXR1cm4gcGFnZTsKKworcGFnZV9lcnI6CisJa2ZyZWUocGFnZSk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIGluaXRpYWxpemUgc3BhcmUgcG9vbCBvZiByeCBidWZmZXJzLCBidXQgYWxsb2NhdGUgZHVyaW5nIHRoZSBvcGVuICovCitzdGF0aWMgdm9pZCBjYXNfc3BhcmVfaW5pdChzdHJ1Y3QgY2FzICpjcCkKK3sKKyAgCXNwaW5fbG9jaygmY3AtPnJ4X2ludXNlX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZjcC0+cnhfaW51c2VfbGlzdCk7CisJc3Bpbl91bmxvY2soJmNwLT5yeF9pbnVzZV9sb2NrKTsKKworCXNwaW5fbG9jaygmY3AtPnJ4X3NwYXJlX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZjcC0+cnhfc3BhcmVfbGlzdCk7CisJY3AtPnJ4X3NwYXJlc19uZWVkZWQgPSBSWF9TUEFSRV9DT1VOVDsKKwlzcGluX3VubG9jaygmY3AtPnJ4X3NwYXJlX2xvY2spOworfQorCisvKiB1c2VkIG9uIGNsb3NlLiBmcmVlIGFsbCB0aGUgc3BhcmUgYnVmZmVycy4gKi8KK3N0YXRpYyB2b2lkIGNhc19zcGFyZV9mcmVlKHN0cnVjdCBjYXMgKmNwKQoreworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdCwgKmVsZW0sICp0bXA7CisKKwkvKiBmcmVlIHNwYXJlIGJ1ZmZlcnMgKi8KKwlJTklUX0xJU1RfSEVBRCgmbGlzdCk7CisJc3Bpbl9sb2NrKCZjcC0+cnhfc3BhcmVfbG9jayk7CisJbGlzdF9zcGxpY2UoJmNwLT5yeF9zcGFyZV9saXN0LCAmbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmNwLT5yeF9zcGFyZV9saXN0KTsKKwlzcGluX3VubG9jaygmY3AtPnJ4X3NwYXJlX2xvY2spOworCWxpc3RfZm9yX2VhY2hfc2FmZShlbGVtLCB0bXAsICZsaXN0KSB7CisJCWNhc19wYWdlX2ZyZWUoY3AsIGxpc3RfZW50cnkoZWxlbSwgY2FzX3BhZ2VfdCwgbGlzdCkpOworCX0KKworCUlOSVRfTElTVF9IRUFEKCZsaXN0KTsKKyNpZiAxCisJLyoKKwkgKiBMb29rcyBsaWtlIEFkcmlhbiBoYWQgcHJvdGVjdGVkIHRoaXMgd2l0aCBhIGRpZmZlcmVudAorCSAqIGxvY2sgdGhhbiB1c2VkIGV2ZXJ5d2hlcmUgZWxzZSB0byBtYW5pcHVsYXRlIHRoaXMgbGlzdC4KKwkgKi8KKwlzcGluX2xvY2soJmNwLT5yeF9pbnVzZV9sb2NrKTsKKwlsaXN0X3NwbGljZSgmY3AtPnJ4X2ludXNlX2xpc3QsICZsaXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmY3AtPnJ4X2ludXNlX2xpc3QpOworCXNwaW5fdW5sb2NrKCZjcC0+cnhfaW51c2VfbG9jayk7CisjZWxzZQorCXNwaW5fbG9jaygmY3AtPnJ4X3NwYXJlX2xvY2spOworCWxpc3Rfc3BsaWNlKCZjcC0+cnhfaW51c2VfbGlzdCwgJmxpc3QpOworCUlOSVRfTElTVF9IRUFEKCZjcC0+cnhfaW51c2VfbGlzdCk7CisJc3Bpbl91bmxvY2soJmNwLT5yeF9zcGFyZV9sb2NrKTsKKyNlbmRpZgorCWxpc3RfZm9yX2VhY2hfc2FmZShlbGVtLCB0bXAsICZsaXN0KSB7CisJCWNhc19wYWdlX2ZyZWUoY3AsIGxpc3RfZW50cnkoZWxlbSwgY2FzX3BhZ2VfdCwgbGlzdCkpOworCX0KK30KKworLyogcmVwbGVuaXNoIHNwYXJlcyBpZiBuZWVkZWQgKi8KK3N0YXRpYyB2b2lkIGNhc19zcGFyZV9yZWNvdmVyKHN0cnVjdCBjYXMgKmNwLCBjb25zdCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0LCAqZWxlbSwgKnRtcDsKKwlpbnQgbmVlZGVkLCBpOworCisJLyogY2hlY2sgaW51c2UgbGlzdC4gaWYgd2UgZG9uJ3QgbmVlZCBhbnkgbW9yZSBmcmVlIGJ1ZmZlcnMsCisJICoganVzdCBmcmVlIGl0CisJICovCisKKwkvKiBtYWtlIGEgbG9jYWwgY29weSBvZiB0aGUgbGlzdCAqLworCUlOSVRfTElTVF9IRUFEKCZsaXN0KTsKKwlzcGluX2xvY2soJmNwLT5yeF9pbnVzZV9sb2NrKTsKKwlsaXN0X3NwbGljZSgmY3AtPnJ4X2ludXNlX2xpc3QsICZsaXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmY3AtPnJ4X2ludXNlX2xpc3QpOworCXNwaW5fdW5sb2NrKCZjcC0+cnhfaW51c2VfbG9jayk7CisJCisJbGlzdF9mb3JfZWFjaF9zYWZlKGVsZW0sIHRtcCwgJmxpc3QpIHsKKwkJY2FzX3BhZ2VfdCAqcGFnZSA9IGxpc3RfZW50cnkoZWxlbSwgY2FzX3BhZ2VfdCwgbGlzdCk7CisKKwkJaWYgKHBhZ2VfY291bnQocGFnZS0+YnVmZmVyKSA+IDEpIAorCQkJY29udGludWU7CisKKwkJbGlzdF9kZWwoZWxlbSk7CisJCXNwaW5fbG9jaygmY3AtPnJ4X3NwYXJlX2xvY2spOworCQlpZiAoY3AtPnJ4X3NwYXJlc19uZWVkZWQgPiAwKSB7CisJCQlsaXN0X2FkZChlbGVtLCAmY3AtPnJ4X3NwYXJlX2xpc3QpOworCQkJY3AtPnJ4X3NwYXJlc19uZWVkZWQtLTsKKwkJCXNwaW5fdW5sb2NrKCZjcC0+cnhfc3BhcmVfbG9jayk7CisJCX0gZWxzZSB7CisJCQlzcGluX3VubG9jaygmY3AtPnJ4X3NwYXJlX2xvY2spOworCQkJY2FzX3BhZ2VfZnJlZShjcCwgcGFnZSk7CisJCX0KKwl9CisKKwkvKiBwdXQgYW55IGludXNlIGJ1ZmZlcnMgYmFjayBvbiB0aGUgbGlzdCAqLworCWlmICghbGlzdF9lbXB0eSgmbGlzdCkpIHsKKwkJc3Bpbl9sb2NrKCZjcC0+cnhfaW51c2VfbG9jayk7CisJCWxpc3Rfc3BsaWNlKCZsaXN0LCAmY3AtPnJ4X2ludXNlX2xpc3QpOworCQlzcGluX3VubG9jaygmY3AtPnJ4X2ludXNlX2xvY2spOworCX0KKwkKKwlzcGluX2xvY2soJmNwLT5yeF9zcGFyZV9sb2NrKTsKKwluZWVkZWQgPSBjcC0+cnhfc3BhcmVzX25lZWRlZDsKKwlzcGluX3VubG9jaygmY3AtPnJ4X3NwYXJlX2xvY2spOworCWlmICghbmVlZGVkKQorCQlyZXR1cm47CisKKwkvKiB3ZSBzdGlsbCBuZWVkIHNwYXJlcywgc28gdHJ5IHRvIGFsbG9jYXRlIHNvbWUgKi8KKwlJTklUX0xJU1RfSEVBRCgmbGlzdCk7CisJaSA9IDA7CisJd2hpbGUgKGkgPCBuZWVkZWQpIHsKKwkJY2FzX3BhZ2VfdCAqc3BhcmUgPSBjYXNfcGFnZV9hbGxvYyhjcCwgZmxhZ3MpOworCQlpZiAoIXNwYXJlKSAKKwkJCWJyZWFrOworCQlsaXN0X2FkZCgmc3BhcmUtPmxpc3QsICZsaXN0KTsKKwkJaSsrOworCX0KKworCXNwaW5fbG9jaygmY3AtPnJ4X3NwYXJlX2xvY2spOworCWxpc3Rfc3BsaWNlKCZsaXN0LCAmY3AtPnJ4X3NwYXJlX2xpc3QpOworCWNwLT5yeF9zcGFyZXNfbmVlZGVkIC09IGk7CisJc3Bpbl91bmxvY2soJmNwLT5yeF9zcGFyZV9sb2NrKTsKK30KKworLyogcHVsbCBhIHBhZ2UgZnJvbSB0aGUgbGlzdC4gKi8KK3N0YXRpYyBjYXNfcGFnZV90ICpjYXNfcGFnZV9kZXF1ZXVlKHN0cnVjdCBjYXMgKmNwKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OworCWludCByZWNvdmVyOworCisJc3Bpbl9sb2NrKCZjcC0+cnhfc3BhcmVfbG9jayk7CisJaWYgKGxpc3RfZW1wdHkoJmNwLT5yeF9zcGFyZV9saXN0KSkgeworCQkvKiB0cnkgdG8gZG8gYSBxdWljayByZWNvdmVyeSAqLworCQlzcGluX3VubG9jaygmY3AtPnJ4X3NwYXJlX2xvY2spOworCQljYXNfc3BhcmVfcmVjb3ZlcihjcCwgR0ZQX0FUT01JQyk7CisJCXNwaW5fbG9jaygmY3AtPnJ4X3NwYXJlX2xvY2spOworCQlpZiAobGlzdF9lbXB0eSgmY3AtPnJ4X3NwYXJlX2xpc3QpKSB7CisJCQlpZiAobmV0aWZfbXNnX3J4X2VycihjcCkpCisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gc3BhcmUgYnVmZmVycyAiCisJCQkJICAgICAgICJhdmFpbGFibGUuXG4iLCBjcC0+ZGV2LT5uYW1lKTsKKwkJCXNwaW5fdW5sb2NrKCZjcC0+cnhfc3BhcmVfbG9jayk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCWVudHJ5ID0gY3AtPnJ4X3NwYXJlX2xpc3QubmV4dDsKKwlsaXN0X2RlbChlbnRyeSk7CisJcmVjb3ZlciA9ICsrY3AtPnJ4X3NwYXJlc19uZWVkZWQ7CisJc3Bpbl91bmxvY2soJmNwLT5yeF9zcGFyZV9sb2NrKTsKKworCS8qIHRyaWdnZXIgdGhlIHRpbWVyIHRvIGRvIHRoZSByZWNvdmVyeSAqLworCWlmICgocmVjb3ZlciAmIChSWF9TUEFSRV9SRUNPVkVSX1ZBTCAtIDEpKSA9PSAwKSB7CisjaWYgMQorCQlhdG9taWNfaW5jKCZjcC0+cmVzZXRfdGFza19wZW5kaW5nKTsKKwkJYXRvbWljX2luYygmY3AtPnJlc2V0X3Rhc2tfcGVuZGluZ19zcGFyZSk7CisJCXNjaGVkdWxlX3dvcmsoJmNwLT5yZXNldF90YXNrKTsKKyNlbHNlCisJCWF0b21pY19zZXQoJmNwLT5yZXNldF90YXNrX3BlbmRpbmcsIENBU19SRVNFVF9TUEFSRSk7CisJCXNjaGVkdWxlX3dvcmsoJmNwLT5yZXNldF90YXNrKTsKKyNlbmRpZgorCX0KKwlyZXR1cm4gbGlzdF9lbnRyeShlbnRyeSwgY2FzX3BhZ2VfdCwgbGlzdCk7Cit9CisKKworc3RhdGljIHZvaWQgY2FzX21pZl9wb2xsKHN0cnVjdCBjYXMgKmNwLCBjb25zdCBpbnQgZW5hYmxlKQoreworCXUzMiBjZmc7CisJCisJY2ZnICA9IHJlYWRsKGNwLT5yZWdzICsgUkVHX01JRl9DRkcpOyAKKwljZmcgJj0gKE1JRl9DRkdfTURJT18wIHwgTUlGX0NGR19NRElPXzEpOworCisJaWYgKGNwLT5waHlfdHlwZSAmIENBU19QSFlfTUlJX01ESU8xKQorCQljZmcgfD0gTUlGX0NGR19QSFlfU0VMRUNUOyAKKworCS8qIHBvbGwgYW5kIGludGVycnVwdCBvbiBsaW5rIHN0YXR1cyBjaGFuZ2UuICovCisJaWYgKGVuYWJsZSkgeworCQljZmcgfD0gTUlGX0NGR19QT0xMX0VOOworCQljZmcgfD0gQ0FTX0JBU0UoTUlGX0NGR19QT0xMX1JFRywgTUlJX0JNU1IpOworCQljZmcgfD0gQ0FTX0JBU0UoTUlGX0NGR19QT0xMX1BIWSwgY3AtPnBoeV9hZGRyKTsKKwl9CisJd3JpdGVsKChlbmFibGUpID8gfihCTVNSX0xTVEFUVVMgfCBCTVNSX0FORUdDT01QTEVURSkgOiAweEZGRkYsIAorCSAgICAgICBjcC0+cmVncyArIFJFR19NSUZfTUFTSyk7IAorCXdyaXRlbChjZmcsIGNwLT5yZWdzICsgUkVHX01JRl9DRkcpOworfQorCisvKiBNdXN0IGJlIGludm9rZWQgdW5kZXIgY3AtPmxvY2sgKi8KK3N0YXRpYyB2b2lkIGNhc19iZWdpbl9hdXRvX25lZ290aWF0aW9uKHN0cnVjdCBjYXMgKmNwLCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVwKQoreworCXUxNiBjdGw7CisjaWYgMQorCWludCBsY250bDsKKwlpbnQgY2hhbmdlZCA9IDA7CisJaW50IG9sZHN0YXRlID0gY3AtPmxzdGF0ZTsKKwlpbnQgbGlua193YXNfbm90X2Rvd24gPSAhKG9sZHN0YXRlID09IGxpbmtfZG93bik7CisjZW5kaWYKKwkvKiBTZXR1cCBsaW5rIHBhcmFtZXRlcnMgKi8KKwlpZiAoIWVwKQorCQlnb3RvIHN0YXJ0X2FuZWc7CisJbGNudGwgPSBjcC0+bGlua19jbnRsOworCWlmIChlcC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkKKwkJY3AtPmxpbmtfY250bCA9IEJNQ1JfQU5FTkFCTEU7CisJZWxzZSB7CisJCWNwLT5saW5rX2NudGwgPSAwOworCQlpZiAoZXAtPnNwZWVkID09IFNQRUVEXzEwMCkKKwkJCWNwLT5saW5rX2NudGwgfD0gQk1DUl9TUEVFRDEwMDsKKwkJZWxzZSBpZiAoZXAtPnNwZWVkID09IFNQRUVEXzEwMDApCisJCQljcC0+bGlua19jbnRsIHw9IENBU19CTUNSX1NQRUVEMTAwMDsKKwkJaWYgKGVwLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCisJCQljcC0+bGlua19jbnRsIHw9IEJNQ1JfRlVMTERQTFg7CisJfQorI2lmIDEKKwljaGFuZ2VkID0gKGxjbnRsICE9IGNwLT5saW5rX2NudGwpOworI2VuZGlmCitzdGFydF9hbmVnOgorCWlmIChjcC0+bHN0YXRlID09IGxpbmtfdXApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBDUyBsaW5rIGRvd24uXG4iLAorCQkgICAgICAgY3AtPmRldi0+bmFtZSk7CisJfSBlbHNlIHsKKwkJaWYgKGNoYW5nZWQpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIGNvbmZpZ3VyYXRpb24gY2hhbmdlZFxuIiwKKwkJCSAgICAgICBjcC0+ZGV2LT5uYW1lKTsKKwkJfQorCX0KKwljcC0+bHN0YXRlID0gbGlua19kb3duOworCWNwLT5saW5rX3RyYW5zaXRpb24gPSBMSU5LX1RSQU5TSVRJT05fTElOS19ET1dOOworCWlmICghY3AtPmh3X3J1bm5pbmcpCisJCXJldHVybjsKKyNpZiAxCisJLyoKKwkgKiBXVFo6IElmIHRoZSBvbGQgc3RhdGUgd2FzIGxpbmtfdXAsIHdlIHR1cm4gb2ZmIHRoZSBjYXJyaWVyCisJICogdG8gcmVwbGljYXRlIGV2ZXJ5dGhpbmcgd2UgZG8gZWxzZXdoZXJlIG9uIGEgbGluay1kb3duCisJICogZXZlbnQgd2hlbiB3ZSB3ZXJlIGFscmVhZHkgaW4gYSBsaW5rLXVwIHN0YXRlLi4gIAorCSAqLworCWlmIChvbGRzdGF0ZSA9PSBsaW5rX3VwKQorCQluZXRpZl9jYXJyaWVyX29mZihjcC0+ZGV2KTsKKwlpZiAoY2hhbmdlZCAgJiYgbGlua193YXNfbm90X2Rvd24pIHsKKwkJLyoKKwkJICogV1RaOiBUaGlzIGJyYW5jaCB3aWxsIHNpbXBseSBzY2hlZHVsZSBhIGZ1bGwgcmVzZXQgYWZ0ZXIKKwkJICogd2UgZXhwbGljaXRseSBjaGFuZ2VkIGxpbmsgbW9kZXMgaW4gYW4gaW9jdGwuIFNlZSBpZiB0aGlzCisJCSAqIGZpeGVzIHRoZSBsaW5rLXByb2JsZW1zIHdlIHdlcmUgaGF2aW5nIGZvciBmb3JjZWQgbW9kZS4gCisJCSAqLworCQlhdG9taWNfaW5jKCZjcC0+cmVzZXRfdGFza19wZW5kaW5nKTsKKwkJYXRvbWljX2luYygmY3AtPnJlc2V0X3Rhc2tfcGVuZGluZ19hbGwpOworCQlzY2hlZHVsZV93b3JrKCZjcC0+cmVzZXRfdGFzayk7CisJCWNwLT50aW1lcl90aWNrcyA9IDA7CisJCW1vZF90aW1lcigmY3AtPmxpbmtfdGltZXIsIGppZmZpZXMgKyBDQVNfTElOS19USU1FT1VUKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCWlmIChjcC0+cGh5X3R5cGUgJiBDQVNfUEhZX1NFUkRFUykgeworCQl1MzIgdmFsID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfUENTX01JSV9DVFJMKTsKKworCQlpZiAoY3AtPmxpbmtfY250bCAmIEJNQ1JfQU5FTkFCTEUpIHsKKwkJCXZhbCB8PSAoUENTX01JSV9SRVNUQVJUX0FVVE9ORUcgfCBQQ1NfTUlJX0FVVE9ORUdfRU4pOworCQkJY3AtPmxzdGF0ZSA9IGxpbmtfYW5lZzsKKwkJfSBlbHNlIHsKKwkJCWlmIChjcC0+bGlua19jbnRsICYgQk1DUl9GVUxMRFBMWCkKKwkJCQl2YWwgfD0gUENTX01JSV9DVFJMX0RVUExFWDsKKwkJCXZhbCAmPSB+UENTX01JSV9BVVRPTkVHX0VOOworCQkJY3AtPmxzdGF0ZSA9IGxpbmtfZm9yY2Vfb2s7CisJCX0KKwkJY3AtPmxpbmtfdHJhbnNpdGlvbiA9IExJTktfVFJBTlNJVElPTl9MSU5LX0NPTkZJRzsKKwkJd3JpdGVsKHZhbCwgY3AtPnJlZ3MgKyBSRUdfUENTX01JSV9DVFJMKTsKKworCX0gZWxzZSB7CisJCWNhc19taWZfcG9sbChjcCwgMCk7CisJCWN0bCA9IGNhc19waHlfcmVhZChjcCwgTUlJX0JNQ1IpOworCQljdGwgJj0gfihCTUNSX0ZVTExEUExYIHwgQk1DUl9TUEVFRDEwMCB8IAorCQkJIENBU19CTUNSX1NQRUVEMTAwMCB8IEJNQ1JfQU5FTkFCTEUpOworCQljdGwgfD0gY3AtPmxpbmtfY250bDsKKwkJaWYgKGN0bCAmIEJNQ1JfQU5FTkFCTEUpIHsKKwkJCWN0bCB8PSBCTUNSX0FOUkVTVEFSVDsKKwkJCWNwLT5sc3RhdGUgPSBsaW5rX2FuZWc7CisJCX0gZWxzZSB7CisJCQljcC0+bHN0YXRlID0gbGlua19mb3JjZV9vazsKKwkJfQorCQljcC0+bGlua190cmFuc2l0aW9uID0gTElOS19UUkFOU0lUSU9OX0xJTktfQ09ORklHOworCQljYXNfcGh5X3dyaXRlKGNwLCBNSUlfQk1DUiwgY3RsKTsKKwkJY2FzX21pZl9wb2xsKGNwLCAxKTsKKwl9CisKKwljcC0+dGltZXJfdGlja3MgPSAwOworCW1vZF90aW1lcigmY3AtPmxpbmtfdGltZXIsIGppZmZpZXMgKyBDQVNfTElOS19USU1FT1VUKTsKK30KKworLyogTXVzdCBiZSBpbnZva2VkIHVuZGVyIGNwLT5sb2NrLiAqLworc3RhdGljIGludCBjYXNfcmVzZXRfbWlpX3BoeShzdHJ1Y3QgY2FzICpjcCkKK3sKKwlpbnQgbGltaXQgPSBTVE9QX1RSSUVTX1BIWTsKKwl1MTYgdmFsOworCQorCWNhc19waHlfd3JpdGUoY3AsIE1JSV9CTUNSLCBCTUNSX1JFU0VUKTsKKwl1ZGVsYXkoMTAwKTsKKwl3aGlsZSAobGltaXQtLSkgeworCQl2YWwgPSBjYXNfcGh5X3JlYWQoY3AsIE1JSV9CTUNSKTsKKwkJaWYgKCh2YWwgJiBCTUNSX1JFU0VUKSA9PSAwKQorCQkJYnJlYWs7CisJCXVkZWxheSgxMCk7CisJfQorCXJldHVybiAobGltaXQgPD0gMCk7Cit9CisKK3N0YXRpYyB2b2lkIGNhc19zYXR1cm5fZmlybXdhcmVfbG9hZChzdHJ1Y3QgY2FzICpjcCkKK3sKKwljYXNfc2F0dXJuX3BhdGNoX3QgKnBhdGNoID0gY2FzX3NhdHVybl9wYXRjaDsKKworCWNhc19waHlfcG93ZXJkb3duKGNwKTsKKworCS8qIGV4cGFuZGVkIG1lbW9yeSBhY2Nlc3MgbW9kZSAqLworCWNhc19waHlfd3JpdGUoY3AsIERQODMwNjVfTUlJX01FTSwgMHgwKTsKKworCS8qIHBvaW50ZXIgY29uZmlndXJhdGlvbiBmb3IgbmV3IGZpcm13YXJlICovCisJY2FzX3BoeV93cml0ZShjcCwgRFA4MzA2NV9NSUlfUkVHRSwgMHg4ZmY5KTsKKwljYXNfcGh5X3dyaXRlKGNwLCBEUDgzMDY1X01JSV9SRUdELCAweGJkKTsKKwljYXNfcGh5X3dyaXRlKGNwLCBEUDgzMDY1X01JSV9SRUdFLCAweDhmZmEpOworCWNhc19waHlfd3JpdGUoY3AsIERQODMwNjVfTUlJX1JFR0QsIDB4ODIpOworCWNhc19waHlfd3JpdGUoY3AsIERQODMwNjVfTUlJX1JFR0UsIDB4OGZmYik7CisJY2FzX3BoeV93cml0ZShjcCwgRFA4MzA2NV9NSUlfUkVHRCwgMHgwKTsKKwljYXNfcGh5X3dyaXRlKGNwLCBEUDgzMDY1X01JSV9SRUdFLCAweDhmZmMpOworCWNhc19waHlfd3JpdGUoY3AsIERQODMwNjVfTUlJX1JFR0QsIDB4MzkpOworCisJLyogZG93bmxvYWQgbmV3IGZpcm13YXJlICovCisJY2FzX3BoeV93cml0ZShjcCwgRFA4MzA2NV9NSUlfTUVNLCAweDEpOworCWNhc19waHlfd3JpdGUoY3AsIERQODMwNjVfTUlJX1JFR0UsIHBhdGNoLT5hZGRyKTsKKwl3aGlsZSAocGF0Y2gtPmFkZHIpIHsKKwkJY2FzX3BoeV93cml0ZShjcCwgRFA4MzA2NV9NSUlfUkVHRCwgcGF0Y2gtPnZhbCk7CisJCXBhdGNoKys7CisJfQorCisJLyogZW5hYmxlIGZpcm13YXJlICovCisJY2FzX3BoeV93cml0ZShjcCwgRFA4MzA2NV9NSUlfUkVHRSwgMHg4ZmY4KTsKKwljYXNfcGh5X3dyaXRlKGNwLCBEUDgzMDY1X01JSV9SRUdELCAweDEpOworfQorCisKKy8qIHBoeSBpbml0aWFsaXphdGlvbiAqLworc3RhdGljIHZvaWQgY2FzX3BoeV9pbml0KHN0cnVjdCBjYXMgKmNwKQoreworCXUxNiB2YWw7CisKKwkvKiBpZiB3ZSdyZSBpbiBNSUkvR01JSSBtb2RlLCBzZXQgdXAgcGh5ICovCisJaWYgKENBU19QSFlfTUlJKGNwLT5waHlfdHlwZSkpIHsKKwkJd3JpdGVsKFBDU19EQVRBUEFUSF9NT0RFX01JSSwKKwkJICAgICAgIGNwLT5yZWdzICsgUkVHX1BDU19EQVRBUEFUSF9NT0RFKTsKKworCQljYXNfbWlmX3BvbGwoY3AsIDApOworCQljYXNfcmVzZXRfbWlpX3BoeShjcCk7IC8qIHRha2Ugb3V0IG9mIGlzb2xhdGUgbW9kZSAqLworCisJCWlmIChQSFlfTFVDRU5UX0IwID09IGNwLT5waHlfaWQpIHsKKwkJCS8qIHdvcmthcm91bmQgbGluayB1cC9kb3duIGlzc3VlIHdpdGggbHVjZW50ICovCisJCQljYXNfcGh5X3dyaXRlKGNwLCBMVUNFTlRfTUlJX1JFRywgMHg4MDAwKTsKKwkJCWNhc19waHlfd3JpdGUoY3AsIE1JSV9CTUNSLCAweDAwZjEpOworCQkJY2FzX3BoeV93cml0ZShjcCwgTFVDRU5UX01JSV9SRUcsIDB4MCk7CisKKwkJfSBlbHNlIGlmIChQSFlfQlJPQURDT01fQjAgPT0gKGNwLT5waHlfaWQgJiAweEZGRkZGRkZDKSkgeworCQkJLyogd29ya2Fyb3VuZHMgZm9yIGJyb2FkY29tIHBoeSAqLworCQkJY2FzX3BoeV93cml0ZShjcCwgQlJPQURDT01fTUlJX1JFRzgsIDB4MEMyMCk7CisJCQljYXNfcGh5X3dyaXRlKGNwLCBCUk9BRENPTV9NSUlfUkVHNywgMHgwMDEyKTsKKwkJCWNhc19waHlfd3JpdGUoY3AsIEJST0FEQ09NX01JSV9SRUc1LCAweDE4MDQpOworCQkJY2FzX3BoeV93cml0ZShjcCwgQlJPQURDT01fTUlJX1JFRzcsIDB4MDAxMyk7CisJCQljYXNfcGh5X3dyaXRlKGNwLCBCUk9BRENPTV9NSUlfUkVHNSwgMHgxMjA0KTsKKwkJCWNhc19waHlfd3JpdGUoY3AsIEJST0FEQ09NX01JSV9SRUc3LCAweDgwMDYpOworCQkJY2FzX3BoeV93cml0ZShjcCwgQlJPQURDT01fTUlJX1JFRzUsIDB4MDEzMik7CisJCQljYXNfcGh5X3dyaXRlKGNwLCBCUk9BRENPTV9NSUlfUkVHNywgMHg4MDA2KTsKKwkJCWNhc19waHlfd3JpdGUoY3AsIEJST0FEQ09NX01JSV9SRUc1LCAweDAyMzIpOworCQkJY2FzX3BoeV93cml0ZShjcCwgQlJPQURDT01fTUlJX1JFRzcsIDB4MjAxRik7CisJCQljYXNfcGh5X3dyaXRlKGNwLCBCUk9BRENPTV9NSUlfUkVHNSwgMHgwQTIwKTsKKworCQl9IGVsc2UgaWYgKFBIWV9CUk9BRENPTV81NDExID09IGNwLT5waHlfaWQpIHsKKwkJCXZhbCA9IGNhc19waHlfcmVhZChjcCwgQlJPQURDT01fTUlJX1JFRzQpOworCQkJdmFsID0gY2FzX3BoeV9yZWFkKGNwLCBCUk9BRENPTV9NSUlfUkVHNCk7CisJCQlpZiAodmFsICYgMHgwMDgwKSB7CisJCQkJLyogbGluayB3b3JrYXJvdW5kICovCisJCQkJY2FzX3BoeV93cml0ZShjcCwgQlJPQURDT01fTUlJX1JFRzQsIAorCQkJCQkgICAgICB2YWwgJiB+MHgwMDgwKTsKKwkJCX0KKwkJCQorCQl9IGVsc2UgaWYgKGNwLT5jYXNfZmxhZ3MgJiBDQVNfRkxBR19TQVRVUk4pIHsKKwkJCXdyaXRlbCgoY3AtPnBoeV90eXBlICYgQ0FTX1BIWV9NSUlfTURJTzApID8gCisJCQkgICAgICAgU0FUVVJOX1BDRkdfRlNJIDogMHgwLCAKKwkJCSAgICAgICBjcC0+cmVncyArIFJFR19TQVRVUk5fUENGRyk7CisKKwkJCS8qIGxvYWQgZmlybXdhcmUgdG8gYWRkcmVzcyAxME1icHMgYXV0by1uZWdvdGlhdGlvbgorCQkJICogaXNzdWUuIE5PVEU6IHRoaXMgd2lsbCBuZWVkIHRvIGJlIGNoYW5nZWQgaWYgdGhlIAorCQkJICogZGVmYXVsdCBmaXJtd2FyZSBnZXRzIGZpeGVkLgorCQkJICovCisJCQlpZiAoUEhZX05TX0RQODMwNjUgPT0gY3AtPnBoeV9pZCkgeworCQkJCWNhc19zYXR1cm5fZmlybXdhcmVfbG9hZChjcCk7CisJCQl9CisJCQljYXNfcGh5X3Bvd2VydXAoY3ApOworCQl9CisKKwkJLyogYWR2ZXJ0aXNlIGNhcGFiaWxpdGllcyAqLworCQl2YWwgPSBjYXNfcGh5X3JlYWQoY3AsIE1JSV9CTUNSKTsKKwkJdmFsICY9IH5CTUNSX0FORU5BQkxFOworCQljYXNfcGh5X3dyaXRlKGNwLCBNSUlfQk1DUiwgdmFsKTsKKwkJdWRlbGF5KDEwKTsKKworCQljYXNfcGh5X3dyaXRlKGNwLCBNSUlfQURWRVJUSVNFLAorCQkJICAgICAgY2FzX3BoeV9yZWFkKGNwLCBNSUlfQURWRVJUSVNFKSB8CisJCQkgICAgICAoQURWRVJUSVNFXzEwSEFMRiB8IEFEVkVSVElTRV8xMEZVTEwgfAorCQkJICAgICAgIEFEVkVSVElTRV8xMDBIQUxGIHwgQURWRVJUSVNFXzEwMEZVTEwgfAorCQkJICAgICAgIENBU19BRFZFUlRJU0VfUEFVU0UgfCAKKwkJCSAgICAgICBDQVNfQURWRVJUSVNFX0FTWU1fUEFVU0UpKTsKKwkJCisJCWlmIChjcC0+Y2FzX2ZsYWdzICYgQ0FTX0ZMQUdfMTAwME1CX0NBUCkgeworCQkJLyogbWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3QgYWR2ZXJ0aXNlIGhhbGYKKwkJCSAqIGR1cGxleCB0byBhdm9pZCBhIGNoaXAgaXNzdWUKKwkJCSAqLworCQkJdmFsICA9IGNhc19waHlfcmVhZChjcCwgQ0FTX01JSV8xMDAwX0NUUkwpOworCQkJdmFsICY9IH5DQVNfQURWRVJUSVNFXzEwMDBIQUxGOworCQkJdmFsIHw9IENBU19BRFZFUlRJU0VfMTAwMEZVTEw7CisJCQljYXNfcGh5X3dyaXRlKGNwLCBDQVNfTUlJXzEwMDBfQ1RSTCwgdmFsKTsKKwkJfQorCisJfSBlbHNlIHsKKwkJLyogcmVzZXQgcGNzIGZvciBzZXJkZXMgKi8KKwkJdTMyIHZhbDsKKwkJaW50IGxpbWl0OworCisJCXdyaXRlbChQQ1NfREFUQVBBVEhfTU9ERV9TRVJERVMsCisJCSAgICAgICBjcC0+cmVncyArIFJFR19QQ1NfREFUQVBBVEhfTU9ERSk7CisKKwkJLyogZW5hYmxlIHNlcmRlcyBwaW5zIG9uIHNhdHVybiAqLworCQlpZiAoY3AtPmNhc19mbGFncyAmIENBU19GTEFHX1NBVFVSTikKKwkJCXdyaXRlbCgwLCBjcC0+cmVncyArIFJFR19TQVRVUk5fUENGRyk7CisKKwkJLyogUmVzZXQgUENTIHVuaXQuICovCisJCXZhbCA9IHJlYWRsKGNwLT5yZWdzICsgUkVHX1BDU19NSUlfQ1RSTCk7CisJCXZhbCB8PSBQQ1NfTUlJX1JFU0VUOworCQl3cml0ZWwodmFsLCBjcC0+cmVncyArIFJFR19QQ1NfTUlJX0NUUkwpOworCisJCWxpbWl0ID0gU1RPUF9UUklFUzsKKwkJd2hpbGUgKGxpbWl0LS0gPiAwKSB7CisJCQl1ZGVsYXkoMTApOworCQkJaWYgKChyZWFkbChjcC0+cmVncyArIFJFR19QQ1NfTUlJX0NUUkwpICYgCisJCQkgICAgIFBDU19NSUlfUkVTRVQpID09IDApCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGxpbWl0IDw9IDApCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogUENTIHJlc2V0IGJpdCB3b3VsZCBub3QgIgorCQkJICAgICAgICJjbGVhciBbJTA4eF0uXG4iLCBjcC0+ZGV2LT5uYW1lLAorCQkJICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX1BDU19TVEFURV9NQUNISU5FKSk7CisKKwkJLyogTWFrZSBzdXJlIFBDUyBpcyBkaXNhYmxlZCB3aGlsZSBjaGFuZ2luZyBhZHZlcnRpc2VtZW50CisJCSAqIGNvbmZpZ3VyYXRpb24uCisJCSAqLworCQl3cml0ZWwoMHgwLCBjcC0+cmVncyArIFJFR19QQ1NfQ0ZHKTsKKworCQkvKiBBZHZlcnRpc2UgYWxsIGNhcGFiaWxpdGllcyBleGNlcHQgaGFsZi1kdXBsZXguICovCisJCXZhbCAgPSByZWFkbChjcC0+cmVncyArIFJFR19QQ1NfTUlJX0FEVkVSVCk7CisJCXZhbCAmPSB+UENTX01JSV9BRFZFUlRfSEQ7CisJCXZhbCB8PSAoUENTX01JSV9BRFZFUlRfRkQgfCBQQ1NfTUlJX0FEVkVSVF9TWU1fUEFVU0UgfCAKKwkJCVBDU19NSUlfQURWRVJUX0FTWU1fUEFVU0UpOworCQl3cml0ZWwodmFsLCBjcC0+cmVncyArIFJFR19QQ1NfTUlJX0FEVkVSVCk7CisKKwkJLyogZW5hYmxlIFBDUyAqLworCQl3cml0ZWwoUENTX0NGR19FTiwgY3AtPnJlZ3MgKyBSRUdfUENTX0NGRyk7CisKKwkJLyogcGNzIHdvcmthcm91bmQ6IGVuYWJsZSBzeW5jIGRldGVjdCAqLworCQl3cml0ZWwoUENTX1NFUkRFU19DVFJMX1NZTkNEX0VOLAorCQkgICAgICAgY3AtPnJlZ3MgKyBSRUdfUENTX1NFUkRFU19DVFJMKTsKKwl9Cit9CisKKworc3RhdGljIGludCBjYXNfcGNzX2xpbmtfY2hlY2soc3RydWN0IGNhcyAqY3ApCit7CisJdTMyIHN0YXQsIHN0YXRlX21hY2hpbmU7CisJaW50IHJldHZhbCA9IDA7CisKKwkvKiBUaGUgbGluayBzdGF0dXMgYml0IGxhdGNoZXMgb24gemVybywgc28geW91IG11c3QKKwkgKiByZWFkIGl0IHR3aWNlIGluIHN1Y2ggYSBjYXNlIHRvIHNlZSBhIHRyYW5zaXRpb24KKwkgKiB0byB0aGUgbGluayBiZWluZyB1cC4KKwkgKi8KKwlzdGF0ID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfUENTX01JSV9TVEFUVVMpOworCWlmICgoc3RhdCAmIFBDU19NSUlfU1RBVFVTX0xJTktfU1RBVFVTKSA9PSAwKQorCQlzdGF0ID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfUENTX01JSV9TVEFUVVMpOworCisJLyogVGhlIHJlbW90ZS1mYXVsdCBpbmRpY2F0aW9uIGlzIG9ubHkgdmFsaWQKKwkgKiB3aGVuIGF1dG9uZWcgaGFzIGNvbXBsZXRlZC4KKwkgKi8KKwlpZiAoKHN0YXQgJiAoUENTX01JSV9TVEFUVVNfQVVUT05FR19DT01QIHwKKwkJICAgICBQQ1NfTUlJX1NUQVRVU19SRU1PVEVfRkFVTFQpKSA9PQorCSAgICAoUENTX01JSV9TVEFUVVNfQVVUT05FR19DT01QIHwgUENTX01JSV9TVEFUVVNfUkVNT1RFX0ZBVUxUKSkgeworCQlpZiAobmV0aWZfbXNnX2xpbmsoY3ApKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBDUyBSZW1vdGVGYXVsdFxuIiwgCisJCQkgICAgICAgY3AtPmRldi0+bmFtZSk7CisJfQorCisJLyogd29yayBhcm91bmQgbGluayBkZXRlY3Rpb24gaXNzdWUgYnkgcXVlcnlpbmcgdGhlIFBDUyBzdGF0ZQorCSAqIG1hY2hpbmUgZGlyZWN0bHkuCisJICovCisJc3RhdGVfbWFjaGluZSA9IHJlYWRsKGNwLT5yZWdzICsgUkVHX1BDU19TVEFURV9NQUNISU5FKTsKKwlpZiAoKHN0YXRlX21hY2hpbmUgJiBQQ1NfU01fTElOS19TVEFURV9NQVNLKSAhPSBTTV9MSU5LX1NUQVRFX1VQKSB7CisJCXN0YXQgJj0gflBDU19NSUlfU1RBVFVTX0xJTktfU1RBVFVTOworCX0gZWxzZSBpZiAoc3RhdGVfbWFjaGluZSAmIFBDU19TTV9XT1JEX1NZTkNfU1RBVEVfTUFTSykgeworCQlzdGF0IHw9IFBDU19NSUlfU1RBVFVTX0xJTktfU1RBVFVTOworCX0KKworCWlmIChzdGF0ICYgUENTX01JSV9TVEFUVVNfTElOS19TVEFUVVMpIHsKKwkJaWYgKGNwLT5sc3RhdGUgIT0gbGlua191cCkgeworCQkJaWYgKGNwLT5vcGVuZWQpIHsKKwkJCQljcC0+bHN0YXRlID0gbGlua191cDsKKwkJCQljcC0+bGlua190cmFuc2l0aW9uID0gTElOS19UUkFOU0lUSU9OX0xJTktfVVA7CisJCQkJCisJCQkJY2FzX3NldF9saW5rX21vZGVzKGNwKTsKKwkJCQluZXRpZl9jYXJyaWVyX29uKGNwLT5kZXYpOworCQkJfQorCQl9CisJfSBlbHNlIGlmIChjcC0+bHN0YXRlID09IGxpbmtfdXApIHsKKwkJY3AtPmxzdGF0ZSA9IGxpbmtfZG93bjsKKwkJaWYgKGxpbmtfdHJhbnNpdGlvbl90aW1lb3V0ICE9IDAgJiYKKwkJICAgIGNwLT5saW5rX3RyYW5zaXRpb24gIT0gTElOS19UUkFOU0lUSU9OX1JFUVVFU1RFRF9SRVNFVCAmJgorCQkgICAgIWNwLT5saW5rX3RyYW5zaXRpb25famlmZmllc192YWxpZCkgeworCQkJLyoKKwkJCSAqIGZvcmNlIGEgcmVzZXQsIGFzIGEgd29ya2Fyb3VuZCBmb3IgdGhlIAorCQkJICogbGluay1mYWlsdXJlIHByb2JsZW0uIE1heSB3YW50IHRvIG1vdmUgdGhpcyB0byBhIAorCQkJICogcG9pbnQgYSBiaXQgZWFybGllciBpbiB0aGUgc2VxdWVuY2UuIElmIHdlIGhhZAorCQkJICogZ2VuZXJhdGVkIGEgcmVzZXQgYSBzaG9ydCB0aW1lIGFnbywgd2UnbGwgd2FpdCBmb3IKKwkJCSAqIHRoZSBsaW5rIHRpbWVyIHRvIGNoZWNrIHRoZSBzdGF0dXMgdW50aWwgYQorCQkJICogdGltZXIgZXhwaXJlcyAobGlua190cmFuc2lzdGlvbl9qaWZmaWVzX3ZhbGlkIGlzCisJCQkgKiB0cnVlIHdoZW4gdGhlIHRpbWVyIGlzIHJ1bm5pbmcuKSAgSW5zdGVhZCBvZiB1c2luZworCQkJICogYSBzeXN0ZW0gdGltZXIsIHdlIGp1c3QgZG8gYSBjaGVjayB3aGVuZXZlciB0aGUKKwkJCSAqIGxpbmsgdGltZXIgaXMgcnVubmluZyAtIHRoaXMgY2xlYXJzIHRoZSBmbGFnIGFmdGVyCisJCQkgKiBhIHN1aXRhYmxlIGRlbGF5LgorCQkJICovCisJCQlyZXR2YWwgPSAxOworCQkJY3AtPmxpbmtfdHJhbnNpdGlvbiA9IExJTktfVFJBTlNJVElPTl9SRVFVRVNURURfUkVTRVQ7CisJCQljcC0+bGlua190cmFuc2l0aW9uX2ppZmZpZXMgPSBqaWZmaWVzOworCQkJY3AtPmxpbmtfdHJhbnNpdGlvbl9qaWZmaWVzX3ZhbGlkID0gMTsKKwkJfSBlbHNlIHsKKwkJCWNwLT5saW5rX3RyYW5zaXRpb24gPSBMSU5LX1RSQU5TSVRJT05fT05fRkFJTFVSRTsKKwkJfQorCQluZXRpZl9jYXJyaWVyX29mZihjcC0+ZGV2KTsKKwkJaWYgKGNwLT5vcGVuZWQgJiYgbmV0aWZfbXNnX2xpbmsoY3ApKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogUENTIGxpbmsgZG93bi5cbiIsCisJCQkgICAgICAgY3AtPmRldi0+bmFtZSk7CisJCX0KKworCQkvKiBDYXNzaW5pIG9ubHk6IGlmIHlvdSBmb3JjZSBhIG1vZGUsIHRoZXJlIGNhbiBiZQorCQkgKiBzeW5jIHByb2JsZW1zIG9uIGxpbmsgZG93bi4gdG8gZml4IHRoYXQsIHRoZSBmb2xsb3dpbmcKKwkJICogdGhpbmdzIG5lZWQgdG8gYmUgY2hlY2tlZDoKKwkJICogMSkgcmVhZCBzZXJpYWxpbmsgc3RhdGUgcmVnaXN0ZXIKKwkJICogMikgcmVhZCBwY3Mgc3RhdHVzIHJlZ2lzdGVyIHRvIHZlcmlmeSBsaW5rIGRvd24uCisJCSAqIDMpIGlmIGxpbmsgZG93biBhbmQgc2VyaWFsIGxpbmsgPT0gMHgwMywgdGhlbiB5b3UgbmVlZAorCQkgKiAgICB0byBnbG9iYWwgcmVzZXQgdGhlIGNoaXAuCisJCSAqLworCQlpZiAoKGNwLT5jYXNfZmxhZ3MgJiBDQVNfRkxBR19SRUdfUExVUykgPT0gMCkgeworCQkJLyogc2hvdWxkIGNoZWNrIHRvIHNlZSBpZiB3ZSdyZSBpbiBhIGZvcmNlZCBtb2RlICovCisJCQlzdGF0ID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfUENTX1NFUkRFU19TVEFURSk7CisJCQlpZiAoc3RhdCA9PSAweDAzKQorCQkJCXJldHVybiAxOworCQl9CisJfSBlbHNlIGlmIChjcC0+bHN0YXRlID09IGxpbmtfZG93bikgeworCQlpZiAobGlua190cmFuc2l0aW9uX3RpbWVvdXQgIT0gMCAmJgorCQkgICAgY3AtPmxpbmtfdHJhbnNpdGlvbiAhPSBMSU5LX1RSQU5TSVRJT05fUkVRVUVTVEVEX1JFU0VUICYmCisJCSAgICAhY3AtPmxpbmtfdHJhbnNpdGlvbl9qaWZmaWVzX3ZhbGlkKSB7CisJCQkvKiBmb3JjZSBhIHJlc2V0LCBhcyBhIHdvcmthcm91bmQgZm9yIHRoZQorCQkJICogbGluay1mYWlsdXJlIHByb2JsZW0uICBNYXkgd2FudCB0byBtb3ZlCisJCQkgKiB0aGlzIHRvIGEgcG9pbnQgYSBiaXQgZWFybGllciBpbiB0aGUKKwkJCSAqIHNlcXVlbmNlLgorCQkJICovCisJCQlyZXR2YWwgPSAxOworCQkJY3AtPmxpbmtfdHJhbnNpdGlvbiA9IExJTktfVFJBTlNJVElPTl9SRVFVRVNURURfUkVTRVQ7CisJCQljcC0+bGlua190cmFuc2l0aW9uX2ppZmZpZXMgPSBqaWZmaWVzOworCQkJY3AtPmxpbmtfdHJhbnNpdGlvbl9qaWZmaWVzX3ZhbGlkID0gMTsKKwkJfSBlbHNlIHsKKwkJCWNwLT5saW5rX3RyYW5zaXRpb24gPSBMSU5LX1RSQU5TSVRJT05fU1RJTExfRkFJTEVEOworCQl9CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBjYXNfcGNzX2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCAKKwkJCSAgICAgc3RydWN0IGNhcyAqY3AsIHUzMiBzdGF0dXMpCit7CisJdTMyIHN0YXQgPSByZWFkbChjcC0+cmVncyArIFJFR19QQ1NfSU5UUl9TVEFUVVMpOworCisJaWYgKChzdGF0ICYgUENTX0lOVFJfU1RBVFVTX0xJTktfQ0hBTkdFKSA9PSAwKSAKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGNhc19wY3NfbGlua19jaGVjayhjcCk7Cit9CisKK3N0YXRpYyBpbnQgY2FzX3R4bWFjX2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCAKKwkJCSAgICAgICBzdHJ1Y3QgY2FzICpjcCwgdTMyIHN0YXR1cykKK3sKKwl1MzIgdHhtYWNfc3RhdCA9IHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19UWF9TVEFUVVMpOworCisJaWYgKCF0eG1hY19zdGF0KQorCQlyZXR1cm4gMDsKKworCWlmIChuZXRpZl9tc2dfaW50cihjcCkpCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogdHhtYWMgaW50ZXJydXB0LCB0eG1hY19zdGF0OiAweCV4XG4iLAorCQkJY3AtPmRldi0+bmFtZSwgdHhtYWNfc3RhdCk7CisKKwkvKiBEZWZlciB0aW1lciBleHBpcmF0aW9uIGlzIHF1aXRlIG5vcm1hbCwKKwkgKiBkb24ndCBldmVuIGxvZyB0aGUgZXZlbnQuCisJICovCisJaWYgKCh0eG1hY19zdGF0ICYgTUFDX1RYX0RFRkVSX1RJTUVSKSAmJgorCSAgICAhKHR4bWFjX3N0YXQgJiB+TUFDX1RYX0RFRkVSX1RJTUVSKSkKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xvY2soJmNwLT5zdGF0X2xvY2tbMF0pOworCWlmICh0eG1hY19zdGF0ICYgTUFDX1RYX1VOREVSUlVOKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFRYIE1BQyB4bWl0IHVuZGVycnVuLlxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWNwLT5uZXRfc3RhdHNbMF0udHhfZmlmb19lcnJvcnMrKzsKKwl9CisKKwlpZiAodHhtYWNfc3RhdCAmIE1BQ19UWF9NQVhfUEFDS0VUX0VSUikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBUWCBNQUMgbWF4IHBhY2tldCBzaXplIGVycm9yLlxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWNwLT5uZXRfc3RhdHNbMF0udHhfZXJyb3JzKys7CisJfQorCisJLyogVGhlIHJlc3QgYXJlIGFsbCBjYXNlcyBvZiBvbmUgb2YgdGhlIDE2LWJpdCBUWAorCSAqIGNvdW50ZXJzIGV4cGlyaW5nLgorCSAqLworCWlmICh0eG1hY19zdGF0ICYgTUFDX1RYX0NPTExfTk9STUFMKQorCQljcC0+bmV0X3N0YXRzWzBdLmNvbGxpc2lvbnMgKz0gMHgxMDAwMDsKKworCWlmICh0eG1hY19zdGF0ICYgTUFDX1RYX0NPTExfRVhDRVNTKSB7CisJCWNwLT5uZXRfc3RhdHNbMF0udHhfYWJvcnRlZF9lcnJvcnMgKz0gMHgxMDAwMDsKKwkJY3AtPm5ldF9zdGF0c1swXS5jb2xsaXNpb25zICs9IDB4MTAwMDA7CisJfQorCisJaWYgKHR4bWFjX3N0YXQgJiBNQUNfVFhfQ09MTF9MQVRFKSB7CisJCWNwLT5uZXRfc3RhdHNbMF0udHhfYWJvcnRlZF9lcnJvcnMgKz0gMHgxMDAwMDsKKwkJY3AtPm5ldF9zdGF0c1swXS5jb2xsaXNpb25zICs9IDB4MTAwMDA7CisJfQorCXNwaW5fdW5sb2NrKCZjcC0+c3RhdF9sb2NrWzBdKTsKKworCS8qIFdlIGRvIG5vdCBrZWVwIHRyYWNrIG9mIE1BQ19UWF9DT0xMX0ZJUlNUIGFuZAorCSAqIE1BQ19UWF9QRUFLX0FUVEVNUFRTIGV2ZW50cy4KKwkgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2FzX2xvYWRfZmlybXdhcmUoc3RydWN0IGNhcyAqY3AsIGNhc19ocF9pbnN0X3QgKmZpcm13YXJlKSAKK3sKKwljYXNfaHBfaW5zdF90ICppbnN0OworCXUzMiB2YWw7CisJaW50IGk7CisKKwlpID0gMDsKKwl3aGlsZSAoKGluc3QgPSBmaXJtd2FyZSkgJiYgaW5zdC0+bm90ZSkgeworCQl3cml0ZWwoaSwgY3AtPnJlZ3MgKyBSRUdfSFBfSU5TVFJfUkFNX0FERFIpOworCisJCXZhbCA9IENBU19CQVNFKEhQX0lOU1RSX1JBTV9ISV9WQUwsIGluc3QtPnZhbCk7CisJCXZhbCB8PSBDQVNfQkFTRShIUF9JTlNUUl9SQU1fSElfTUFTSywgaW5zdC0+bWFzayk7CisJCXdyaXRlbCh2YWwsIGNwLT5yZWdzICsgUkVHX0hQX0lOU1RSX1JBTV9EQVRBX0hJKTsKKworCQl2YWwgPSBDQVNfQkFTRShIUF9JTlNUUl9SQU1fTUlEX09VVEFSRywgaW5zdC0+b3V0YXJnID4+IDEwKTsKKwkJdmFsIHw9IENBU19CQVNFKEhQX0lOU1RSX1JBTV9NSURfT1VUT1AsIGluc3QtPm91dG9wKTsKKwkJdmFsIHw9IENBU19CQVNFKEhQX0lOU1RSX1JBTV9NSURfRk5FWFQsIGluc3QtPmZuZXh0KTsKKwkJdmFsIHw9IENBU19CQVNFKEhQX0lOU1RSX1JBTV9NSURfRk9GRiwgaW5zdC0+Zm9mZik7CisJCXZhbCB8PSBDQVNfQkFTRShIUF9JTlNUUl9SQU1fTUlEX1NORVhULCBpbnN0LT5zbmV4dCk7CisJCXZhbCB8PSBDQVNfQkFTRShIUF9JTlNUUl9SQU1fTUlEX1NPRkYsIGluc3QtPnNvZmYpOworCQl2YWwgfD0gQ0FTX0JBU0UoSFBfSU5TVFJfUkFNX01JRF9PUCwgaW5zdC0+b3ApOworCQl3cml0ZWwodmFsLCBjcC0+cmVncyArIFJFR19IUF9JTlNUUl9SQU1fREFUQV9NSUQpOworCisJCXZhbCA9IENBU19CQVNFKEhQX0lOU1RSX1JBTV9MT1dfT1VUTUFTSywgaW5zdC0+b3V0bWFzayk7CisJCXZhbCB8PSBDQVNfQkFTRShIUF9JTlNUUl9SQU1fTE9XX09VVFNISUZULCBpbnN0LT5vdXRzaGlmdCk7CisJCXZhbCB8PSBDQVNfQkFTRShIUF9JTlNUUl9SQU1fTE9XX09VVEVOLCBpbnN0LT5vdXRlbmFiKTsKKwkJdmFsIHw9IENBU19CQVNFKEhQX0lOU1RSX1JBTV9MT1dfT1VUQVJHLCBpbnN0LT5vdXRhcmcpOworCQl3cml0ZWwodmFsLCBjcC0+cmVncyArIFJFR19IUF9JTlNUUl9SQU1fREFUQV9MT1cpOworCQkrK2Zpcm13YXJlOworCQkrK2k7CisJfQorfQorCitzdGF0aWMgdm9pZCBjYXNfaW5pdF9yeF9kbWEoc3RydWN0IGNhcyAqY3ApCit7CisJdTY0IGRlc2NfZG1hID0gY3AtPmJsb2NrX2R2bWE7IAorCXUzMiB2YWw7CisJaW50IGksIHNpemU7CisKKwkvKiByeCBmcmVlIGRlc2NyaXB0b3JzICovCisJdmFsID0gQ0FTX0JBU0UoUlhfQ0ZHX1NXSVZFTCwgUlhfU1dJVkVMX09GRl9WQUwpOyAKKwl2YWwgfD0gQ0FTX0JBU0UoUlhfQ0ZHX0RFU0NfUklORywgUlhfREVTQ19SSU5HTl9JTkRFWCgwKSk7CisJdmFsIHw9IENBU19CQVNFKFJYX0NGR19DT01QX1JJTkcsIFJYX0NPTVBfUklOR05fSU5ERVgoMCkpOworCWlmICgoTl9SWF9ERVNDX1JJTkdTID4gMSkgJiYKKwkgICAgKGNwLT5jYXNfZmxhZ3MgJiBDQVNfRkxBR19SRUdfUExVUykpICAvKiBkbyBkZXNjIDIgKi8KKwkJdmFsIHw9IENBU19CQVNFKFJYX0NGR19ERVNDX1JJTkcxLCBSWF9ERVNDX1JJTkdOX0lOREVYKDEpKTsKKwl3cml0ZWwodmFsLCBjcC0+cmVncyArIFJFR19SWF9DRkcpOworCisJdmFsID0gKHVuc2lnbmVkIGxvbmcpIGNwLT5pbml0X3J4ZHNbMF0gLSAKKwkJKHVuc2lnbmVkIGxvbmcpIGNwLT5pbml0X2Jsb2NrOworCXdyaXRlbCgoZGVzY19kbWEgKyB2YWwpID4+IDMyLCBjcC0+cmVncyArIFJFR19SWF9EQl9ISSk7CisJd3JpdGVsKChkZXNjX2RtYSArIHZhbCkgJiAweGZmZmZmZmZmLCBjcC0+cmVncyArIFJFR19SWF9EQl9MT1cpOworCXdyaXRlbChSWF9ERVNDX1JJTkdOX1NJWkUoMCkgLSA0LCBjcC0+cmVncyArIFJFR19SWF9LSUNLKTsKKworCWlmIChjcC0+Y2FzX2ZsYWdzICYgQ0FTX0ZMQUdfUkVHX1BMVVMpIHsKKwkJLyogcnggZGVzYyAyIGlzIGZvciBJUFNFQyBwYWNrZXRzLiBob3dldmVyLCAKKwkJICogd2UgZG9uJ3QgaXQgdGhhdCBmb3IgdGhhdCBwdXJwb3NlLgorCQkgKi8KKwkJdmFsID0gKHVuc2lnbmVkIGxvbmcpIGNwLT5pbml0X3J4ZHNbMV0gLSAKKwkJCSh1bnNpZ25lZCBsb25nKSBjcC0+aW5pdF9ibG9jazsKKwkJd3JpdGVsKChkZXNjX2RtYSArIHZhbCkgPj4gMzIsIGNwLT5yZWdzICsgUkVHX1BMVVNfUlhfREIxX0hJKTsKKwkJd3JpdGVsKChkZXNjX2RtYSArIHZhbCkgJiAweGZmZmZmZmZmLCBjcC0+cmVncyArIAorCQkgICAgICAgUkVHX1BMVVNfUlhfREIxX0xPVyk7CisJCXdyaXRlbChSWF9ERVNDX1JJTkdOX1NJWkUoMSkgLSA0LCBjcC0+cmVncyArIAorCQkgICAgICAgUkVHX1BMVVNfUlhfS0lDSzEpOworCX0KKwkKKwkvKiByeCBjb21wbGV0aW9uIHJlZ2lzdGVycyAqLworCXZhbCA9ICh1bnNpZ25lZCBsb25nKSBjcC0+aW5pdF9yeGNzWzBdIC0gCisJCSh1bnNpZ25lZCBsb25nKSBjcC0+aW5pdF9ibG9jazsKKwl3cml0ZWwoKGRlc2NfZG1hICsgdmFsKSA+PiAzMiwgY3AtPnJlZ3MgKyBSRUdfUlhfQ0JfSEkpOworCXdyaXRlbCgoZGVzY19kbWEgKyB2YWwpICYgMHhmZmZmZmZmZiwgY3AtPnJlZ3MgKyBSRUdfUlhfQ0JfTE9XKTsKKworCWlmIChjcC0+Y2FzX2ZsYWdzICYgQ0FTX0ZMQUdfUkVHX1BMVVMpIHsKKwkJLyogcnggY29tcCAyLTQgKi8KKwkJZm9yIChpID0gMTsgaSA8IE1BWF9SWF9DT01QX1JJTkdTOyBpKyspIHsKKwkJCXZhbCA9ICh1bnNpZ25lZCBsb25nKSBjcC0+aW5pdF9yeGNzW2ldIC0gCisJCQkJKHVuc2lnbmVkIGxvbmcpIGNwLT5pbml0X2Jsb2NrOworCQkJd3JpdGVsKChkZXNjX2RtYSArIHZhbCkgPj4gMzIsIGNwLT5yZWdzICsgCisJCQkgICAgICAgUkVHX1BMVVNfUlhfQ0JOX0hJKGkpKTsKKwkJCXdyaXRlbCgoZGVzY19kbWEgKyB2YWwpICYgMHhmZmZmZmZmZiwgY3AtPnJlZ3MgKyAKKwkJCSAgICAgICBSRUdfUExVU19SWF9DQk5fTE9XKGkpKTsKKwkJfQorCX0KKworCS8qIHJlYWQgc2VsZWN0aXZlIGNsZWFyIHJlZ3MgdG8gcHJldmVudCBzcHVyaW91cyBpbnRlcnJ1cHRzCisJICogb24gcmVzZXQgYmVjYXVzZSBjb21wbGV0ZSA9PSBraWNrLgorCSAqIHNlbGVjdGl2ZSBjbGVhciBzZXQgdXAgdG8gcHJldmVudCBpbnRlcnJ1cHRzIG9uIHJlc2V0cworCSAqLworCXJlYWRsKGNwLT5yZWdzICsgUkVHX0lOVFJfU1RBVFVTX0FMSUFTKTsKKwl3cml0ZWwoSU5UUl9SWF9ET05FIHwgSU5UUl9SWF9CVUZfVU5BVkFJTCwgY3AtPnJlZ3MgKyBSRUdfQUxJQVNfQ0xFQVIpOworCWlmIChjcC0+Y2FzX2ZsYWdzICYgQ0FTX0ZMQUdfUkVHX1BMVVMpIHsKKwkJZm9yIChpID0gMTsgaSA8IE5fUlhfQ09NUF9SSU5HUzsgaSsrKQorCQkJcmVhZGwoY3AtPnJlZ3MgKyBSRUdfUExVU19JTlRSTl9TVEFUVVNfQUxJQVMoaSkpOworCisJCS8qIDIgaXMgZGlmZmVyZW50IGZyb20gMyBhbmQgNCAqLworCQlpZiAoTl9SWF9DT01QX1JJTkdTID4gMSkKKwkJCXdyaXRlbChJTlRSX1JYX0RPTkVfQUxUIHwgSU5UUl9SWF9CVUZfVU5BVkFJTF8xLCAKKwkJCSAgICAgICBjcC0+cmVncyArIFJFR19QTFVTX0FMSUFTTl9DTEVBUigxKSk7CisKKwkJZm9yIChpID0gMjsgaSA8IE5fUlhfQ09NUF9SSU5HUzsgaSsrKSAKKwkJCXdyaXRlbChJTlRSX1JYX0RPTkVfQUxULCAKKwkJCSAgICAgICBjcC0+cmVncyArIFJFR19QTFVTX0FMSUFTTl9DTEVBUihpKSk7CisJfQorCisJLyogc2V0IHVwIHBhdXNlIHRocmVzaG9sZHMgKi8KKwl2YWwgID0gQ0FTX0JBU0UoUlhfUEFVU0VfVEhSRVNIX09GRiwKKwkJCWNwLT5yeF9wYXVzZV9vZmYgLyBSWF9QQVVTRV9USFJFU0hfUVVBTlRVTSk7CisJdmFsIHw9IENBU19CQVNFKFJYX1BBVVNFX1RIUkVTSF9PTiwgCisJCQljcC0+cnhfcGF1c2Vfb24gLyBSWF9QQVVTRV9USFJFU0hfUVVBTlRVTSk7CisJd3JpdGVsKHZhbCwgY3AtPnJlZ3MgKyBSRUdfUlhfUEFVU0VfVEhSRVNIKTsKKwkKKwkvKiB6ZXJvIG91dCBkbWEgcmVhc3NlbWJseSBidWZmZXJzICovCisJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKKwkJd3JpdGVsKGksIGNwLT5yZWdzICsgUkVHX1JYX1RBQkxFX0FERFIpOworCQl3cml0ZWwoMHgwLCBjcC0+cmVncyArIFJFR19SWF9UQUJMRV9EQVRBX0xPVyk7CisJCXdyaXRlbCgweDAsIGNwLT5yZWdzICsgUkVHX1JYX1RBQkxFX0RBVEFfTUlEKTsKKwkJd3JpdGVsKDB4MCwgY3AtPnJlZ3MgKyBSRUdfUlhfVEFCTEVfREFUQV9ISSk7CisJfQorCisJLyogbWFrZSBzdXJlIGFkZHJlc3MgcmVnaXN0ZXIgaXMgMCBmb3Igbm9ybWFsIG9wZXJhdGlvbiAqLworCXdyaXRlbCgweDAsIGNwLT5yZWdzICsgUkVHX1JYX0NUUkxfRklGT19BRERSKTsKKwl3cml0ZWwoMHgwLCBjcC0+cmVncyArIFJFR19SWF9JUFBfRklGT19BRERSKTsKKworCS8qIGludGVycnVwdCBtaXRpZ2F0aW9uICovCisjaWZkZWYgVVNFX1JYX0JMQU5LCisJdmFsID0gQ0FTX0JBU0UoUlhfQkxBTktfSU5UUl9USU1FLCBSWF9CTEFOS19JTlRSX1RJTUVfVkFMKTsKKwl2YWwgfD0gQ0FTX0JBU0UoUlhfQkxBTktfSU5UUl9QS1QsIFJYX0JMQU5LX0lOVFJfUEtUX1ZBTCk7CisJd3JpdGVsKHZhbCwgY3AtPnJlZ3MgKyBSRUdfUlhfQkxBTkspOworI2Vsc2UKKwl3cml0ZWwoMHgwLCBjcC0+cmVncyArIFJFR19SWF9CTEFOSyk7CisjZW5kaWYKKworCS8qIGludGVycnVwdCBnZW5lcmF0aW9uIGFzIGEgZnVuY3Rpb24gb2YgbG93IHdhdGVyIG1hcmtzIGZvcgorCSAqIGZyZWUgZGVzYyBhbmQgY29tcGxldGlvbiBlbnRyaWVzLiB0aGVzZSBhcmUgdXNlZCB0byB0cmlnZ2VyCisJICogaG91c2VrZWVwaW5nIGZvciByeCBkZXNjcy4gd2UgZG9uJ3QgdXNlIHRoZSBmcmVlIGludGVycnVwdAorCSAqIGFzIGl0J3Mgbm90IHZlcnkgdXNlZnVsCisJICovCisJLyogdmFsID0gQ0FTX0JBU0UoUlhfQUVfVEhSRVNIX0ZSRUUsIFJYX0FFX0ZSRUVOX1ZBTCgwKSk7ICovCisJdmFsID0gQ0FTX0JBU0UoUlhfQUVfVEhSRVNIX0NPTVAsIFJYX0FFX0NPTVBfVkFMKTsKKwl3cml0ZWwodmFsLCBjcC0+cmVncyArIFJFR19SWF9BRV9USFJFU0gpOworCWlmIChjcC0+Y2FzX2ZsYWdzICYgQ0FTX0ZMQUdfUkVHX1BMVVMpIHsKKwkJdmFsID0gQ0FTX0JBU0UoUlhfQUUxX1RIUkVTSF9GUkVFLCBSWF9BRV9GUkVFTl9WQUwoMSkpOworCQl3cml0ZWwodmFsLCBjcC0+cmVncyArIFJFR19QTFVTX1JYX0FFMV9USFJFU0gpOworCX0KKworCS8qIFJhbmRvbSBlYXJseSBkZXRlY3QgcmVnaXN0ZXJzLiB1c2VmdWwgZm9yIGNvbmdlc3Rpb24gYXZvaWRhbmNlLgorCSAqIHRoaXMgc2hvdWxkIGJlIHR1bmFibGUuCisJICovCisJd3JpdGVsKDB4MCwgY3AtPnJlZ3MgKyBSRUdfUlhfUkVEKTsKKwkKKwkvKiByZWNlaXZlIHBhZ2Ugc2l6ZXMuIGRlZmF1bHQgPT0gMksgKDB4ODAwKSAqLworCXZhbCA9IDA7CisJaWYgKGNwLT5wYWdlX3NpemUgPT0gMHgxMDAwKQorCQl2YWwgPSAweDE7CisJZWxzZSBpZiAoY3AtPnBhZ2Vfc2l6ZSA9PSAweDIwMDApCisJCXZhbCA9IDB4MjsKKwllbHNlIGlmIChjcC0+cGFnZV9zaXplID09IDB4NDAwMCkKKwkJdmFsID0gMHgzOworCQorCS8qIHJvdW5kIG10dSArIG9mZnNldC4gY29uc3RyYWluIHRvIHBhZ2Ugc2l6ZS4gKi8KKwlzaXplID0gY3AtPmRldi0+bXR1ICsgNjQ7CisJaWYgKHNpemUgPiBjcC0+cGFnZV9zaXplKQorCQlzaXplID0gY3AtPnBhZ2Vfc2l6ZTsKKworCWlmIChzaXplIDw9IDB4NDAwKQorCQlpID0gMHgwOworCWVsc2UgaWYgKHNpemUgPD0gMHg4MDApCisJCWkgPSAweDE7CisJZWxzZSBpZiAoc2l6ZSA8PSAweDEwMDApCisJCWkgPSAweDI7CisJZWxzZQorCQlpID0gMHgzOworCisJY3AtPm10dV9zdHJpZGUgPSAxIDw8IChpICsgMTApOworCXZhbCAgPSBDQVNfQkFTRShSWF9QQUdFX1NJWkUsIHZhbCk7CisJdmFsIHw9IENBU19CQVNFKFJYX1BBR0VfU0laRV9NVFVfU1RSSURFLCBpKTsgCisJdmFsIHw9IENBU19CQVNFKFJYX1BBR0VfU0laRV9NVFVfQ09VTlQsIGNwLT5wYWdlX3NpemUgPj4gKGkgKyAxMCkpOworCXZhbCB8PSBDQVNfQkFTRShSWF9QQUdFX1NJWkVfTVRVX09GRiwgMHgxKTsKKwl3cml0ZWwodmFsLCBjcC0+cmVncyArIFJFR19SWF9QQUdFX1NJWkUpOworCQorCS8qIGVuYWJsZSB0aGUgaGVhZGVyIHBhcnNlciBpZiBkZXNpcmVkICovCisJaWYgKENBU19IUF9GSVJNV0FSRSA9PSBjYXNfcHJvZ19udWxsKQorCQlyZXR1cm47CisKKwl2YWwgPSBDQVNfQkFTRShIUF9DRkdfTlVNX0NQVSwgQ0FTX05DUFVTID4gNjMgPyAwIDogQ0FTX05DUFVTKTsKKwl2YWwgfD0gSFBfQ0ZHX1BBUlNFX0VOIHwgSFBfQ0ZHX1NZTl9JTkNfTUFTSzsKKwl2YWwgfD0gQ0FTX0JBU0UoSFBfQ0ZHX1RDUF9USFJFU0gsIEhQX1RDUF9USFJFU0hfVkFMKTsKKwl3cml0ZWwodmFsLCBjcC0+cmVncyArIFJFR19IUF9DRkcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2FzX3J4Y19pbml0KHN0cnVjdCBjYXNfcnhfY29tcCAqcnhjKQoreworCW1lbXNldChyeGMsIDAsIHNpemVvZigqcnhjKSk7CisJcnhjLT53b3JkNCA9IGNwdV90b19sZTY0KFJYX0NPTVA0X1pFUk8pOyAKK30KKworLyogTk9URTogd2UgdXNlIHRoZSBFTkMgUlggREVTQyByaW5nIGZvciBzcGFyZXMuIHRoZSByeF9wYWdlWzAsMV0KKyAqIGZsaXBwaW5nIGlzIHByb3RlY3RlZCBieSB0aGUgZmFjdCB0aGF0IHRoZSBjaGlwIHdpbGwgbm90CisgKiBoYW5kIGJhY2sgdGhlIHNhbWUgcGFnZSBpbmRleCB3aGlsZSBpdCdzIGJlaW5nIHByb2Nlc3NlZC4KKyAqLworc3RhdGljIGlubGluZSBjYXNfcGFnZV90ICpjYXNfcGFnZV9zcGFyZShzdHJ1Y3QgY2FzICpjcCwgY29uc3QgaW50IGluZGV4KQoreworCWNhc19wYWdlX3QgKnBhZ2UgPSBjcC0+cnhfcGFnZXNbMV1baW5kZXhdOworCWNhc19wYWdlX3QgKm5ldzsKKworCWlmIChwYWdlX2NvdW50KHBhZ2UtPmJ1ZmZlcikgPT0gMSkKKwkJcmV0dXJuIHBhZ2U7CisKKwluZXcgPSBjYXNfcGFnZV9kZXF1ZXVlKGNwKTsKKwlpZiAobmV3KSB7CisJCXNwaW5fbG9jaygmY3AtPnJ4X2ludXNlX2xvY2spOworCQlsaXN0X2FkZCgmcGFnZS0+bGlzdCwgJmNwLT5yeF9pbnVzZV9saXN0KTsKKwkJc3Bpbl91bmxvY2soJmNwLT5yeF9pbnVzZV9sb2NrKTsKKwl9CisJcmV0dXJuIG5ldzsKK30KKwkJCQkgICAKKy8qIHRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZCBpZiB3ZSBhY3R1YWxseSB1c2UgdGhlIEVOQyBSWCBERVNDIHJpbmcgKi8KK3N0YXRpYyBjYXNfcGFnZV90ICpjYXNfcGFnZV9zd2FwKHN0cnVjdCBjYXMgKmNwLCBjb25zdCBpbnQgcmluZywgCisJCQkJIGNvbnN0IGludCBpbmRleCkKK3sKKwljYXNfcGFnZV90ICoqcGFnZTAgPSBjcC0+cnhfcGFnZXNbMF07CisJY2FzX3BhZ2VfdCAqKnBhZ2UxID0gY3AtPnJ4X3BhZ2VzWzFdOworCisJLyogc3dhcCBpZiBidWZmZXIgaXMgaW4gdXNlICovCisJaWYgKHBhZ2VfY291bnQocGFnZTBbaW5kZXhdLT5idWZmZXIpID4gMSkgeworCQljYXNfcGFnZV90ICpuZXcgPSBjYXNfcGFnZV9zcGFyZShjcCwgaW5kZXgpOworCQlpZiAobmV3KSB7CisJCQlwYWdlMVtpbmRleF0gPSBwYWdlMFtpbmRleF07CisJCQlwYWdlMFtpbmRleF0gPSBuZXc7CisJCX0KKwl9IAorCVJYX1VTRURfU0VUKHBhZ2UwW2luZGV4XSwgMCk7CisJcmV0dXJuIHBhZ2UwW2luZGV4XTsKK30KKworc3RhdGljIHZvaWQgY2FzX2NsZWFuX3J4ZHMoc3RydWN0IGNhcyAqY3ApCit7CisJLyogb25seSBjbGVhbiByaW5nIDAgYXMgcmluZyAxIGlzIHVzZWQgZm9yIHNwYXJlIGJ1ZmZlcnMgKi8KKyAgICAgICAgc3RydWN0IGNhc19yeF9kZXNjICpyeGQgPSBjcC0+aW5pdF9yeGRzWzBdOworCWludCBpLCBzaXplOworCisJLyogcmVsZWFzZSBhbGwgcnggZmxvd3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTl9SWF9GTE9XUzsgaSsrKSB7CisJCXN0cnVjdCBza19idWZmICpza2I7CisJCXdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZSgmY3AtPnJ4X2Zsb3dzW2ldKSkpIHsKKwkJCWNhc19za2JfcmVsZWFzZShza2IpOworCQl9CisJfQorCisJLyogaW5pdGlhbGl6ZSBkZXNjcmlwdG9ycyAqLworCXNpemUgPSBSWF9ERVNDX1JJTkdOX1NJWkUoMCk7CisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQljYXNfcGFnZV90ICpwYWdlID0gY2FzX3BhZ2Vfc3dhcChjcCwgMCwgaSk7CisJCXJ4ZFtpXS5idWZmZXIgPSBjcHVfdG9fbGU2NChwYWdlLT5kbWFfYWRkcik7CisJCXJ4ZFtpXS5pbmRleCAgPSBjcHVfdG9fbGU2NChDQVNfQkFTRShSWF9JTkRFWF9OVU0sIGkpIHwgCisJCQkJCSAgICBDQVNfQkFTRShSWF9JTkRFWF9SSU5HLCAwKSk7CisJfQorCisJY3AtPnJ4X29sZFswXSAgPSBSWF9ERVNDX1JJTkdOX1NJWkUoMCkgLSA0OyAKKwljcC0+cnhfbGFzdFswXSA9IDA7CisJY3AtPmNhc19mbGFncyAmPSB+Q0FTX0ZMQUdfUlhEX1BPU1QoMCk7Cit9CisKK3N0YXRpYyB2b2lkIGNhc19jbGVhbl9yeGNzKHN0cnVjdCBjYXMgKmNwKQoreworCWludCBpLCBqOworCisJLyogdGFrZSBvd25lcnNoaXAgb2YgcnggY29tcCBkZXNjcmlwdG9ycyAqLworCW1lbXNldChjcC0+cnhfY3VyLCAwLCBzaXplb2YoKmNwLT5yeF9jdXIpKk5fUlhfQ09NUF9SSU5HUyk7CisJbWVtc2V0KGNwLT5yeF9uZXcsIDAsIHNpemVvZigqY3AtPnJ4X25ldykqTl9SWF9DT01QX1JJTkdTKTsKKwlmb3IgKGkgPSAwOyBpIDwgTl9SWF9DT01QX1JJTkdTOyBpKyspIHsKKwkJc3RydWN0IGNhc19yeF9jb21wICpyeGMgPSBjcC0+aW5pdF9yeGNzW2ldOworCQlmb3IgKGogPSAwOyBqIDwgUlhfQ09NUF9SSU5HTl9TSVpFKGkpOyBqKyspIHsKKwkJCWNhc19yeGNfaW5pdChyeGMgKyBqKTsKKwkJfQorCX0KK30KKworI2lmIDAKKy8qIFdoZW4gd2UgZ2V0IGEgUlggZmlmbyBvdmVyZmxvdywgdGhlIFJYIHVuaXQgaXMgcHJvYmFibHkgaHVuZworICogc28gd2UgZG8gdGhlIGZvbGxvd2luZy4KKyAqCisgKiBJZiBhbnkgcGFydCBvZiB0aGUgcmVzZXQgZ29lcyB3cm9uZywgd2UgcmV0dXJuIDEgYW5kIHRoYXQgY2F1c2VzIHRoZQorICogd2hvbGUgY2hpcCB0byBiZSByZXNldC4KKyAqLworc3RhdGljIGludCBjYXNfcnhtYWNfcmVzZXQoc3RydWN0IGNhcyAqY3ApCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNwLT5kZXY7CisJaW50IGxpbWl0OworCXUzMiB2YWw7CisKKwkvKiBGaXJzdCwgcmVzZXQgTUFDIFJYLiAqLworCXdyaXRlbChjcC0+bWFjX3J4X2NmZyAmIH5NQUNfUlhfQ0ZHX0VOLCBjcC0+cmVncyArIFJFR19NQUNfUlhfQ0ZHKTsKKwlmb3IgKGxpbWl0ID0gMDsgbGltaXQgPCBTVE9QX1RSSUVTOyBsaW1pdCsrKSB7CisJCWlmICghKHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19SWF9DRkcpICYgTUFDX1JYX0NGR19FTikpCisJCQlicmVhazsKKwkJdWRlbGF5KDEwKTsKKwl9CisJaWYgKGxpbWl0ID09IFNUT1BfVFJJRVMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogUlggTUFDIHdpbGwgbm90IGRpc2FibGUsIHJlc2V0dGluZyB3aG9sZSAiCisJCSAgICAgICAiY2hpcC5cbiIsIGRldi0+bmFtZSk7CisJCXJldHVybiAxOworCX0KKworCS8qIFNlY29uZCwgZGlzYWJsZSBSWCBETUEuICovCisJd3JpdGVsKDAsIGNwLT5yZWdzICsgUkVHX1JYX0NGRyk7CisJZm9yIChsaW1pdCA9IDA7IGxpbWl0IDwgU1RPUF9UUklFUzsgbGltaXQrKykgeworCQlpZiAoIShyZWFkbChjcC0+cmVncyArIFJFR19SWF9DRkcpICYgUlhfQ0ZHX0RNQV9FTikpCisJCQlicmVhazsKKwkJdWRlbGF5KDEwKTsKKwl9CisJaWYgKGxpbWl0ID09IFNUT1BfVFJJRVMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogUlggRE1BIHdpbGwgbm90IGRpc2FibGUsIHJlc2V0dGluZyB3aG9sZSAiCisJCSAgICAgICAiY2hpcC5cbiIsIGRldi0+bmFtZSk7CisJCXJldHVybiAxOworCX0KKworCW1kZWxheSg1KTsKKworCS8qIEV4ZWN1dGUgUlggcmVzZXQgY29tbWFuZC4gKi8KKwl3cml0ZWwoU1dfUkVTRVRfUlgsIGNwLT5yZWdzICsgUkVHX1NXX1JFU0VUKTsKKwlmb3IgKGxpbWl0ID0gMDsgbGltaXQgPCBTVE9QX1RSSUVTOyBsaW1pdCsrKSB7CisJCWlmICghKHJlYWRsKGNwLT5yZWdzICsgUkVHX1NXX1JFU0VUKSAmIFNXX1JFU0VUX1JYKSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTApOworCX0KKwlpZiAobGltaXQgPT0gU1RPUF9UUklFUykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBSWCByZXNldCBjb21tYW5kIHdpbGwgbm90IGV4ZWN1dGUsICIKKwkJICAgICAgICJyZXNldHRpbmcgd2hvbGUgY2hpcC5cbiIsIGRldi0+bmFtZSk7CisJCXJldHVybiAxOworCX0KKworCS8qIHJlc2V0IGRyaXZlciByeCBzdGF0ZSAqLworCWNhc19jbGVhbl9yeGRzKGNwKTsKKwljYXNfY2xlYW5fcnhjcyhjcCk7CisKKwkvKiBOb3csIHJlcHJvZ3JhbSB0aGUgcmVzdCBvZiBSWCB1bml0LiAqLworCWNhc19pbml0X3J4X2RtYShjcCk7CisKKwkvKiByZS1lbmFibGUgKi8KKwl2YWwgPSByZWFkbChjcC0+cmVncyArIFJFR19SWF9DRkcpOworCXdyaXRlbCh2YWwgfCBSWF9DRkdfRE1BX0VOLCBjcC0+cmVncyArIFJFR19SWF9DRkcpOworCXdyaXRlbChNQUNfUlhfRlJBTUVfUkVDViwgY3AtPnJlZ3MgKyBSRUdfTUFDX1JYX01BU0spOworCXZhbCA9IHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19SWF9DRkcpOworCXdyaXRlbCh2YWwgfCBNQUNfUlhfQ0ZHX0VOLCBjcC0+cmVncyArIFJFR19NQUNfUlhfQ0ZHKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGNhc19yeG1hY19pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGNhcyAqY3AsCisJCQkgICAgICAgdTMyIHN0YXR1cykKK3sKKwl1MzIgc3RhdCA9IHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19SWF9TVEFUVVMpOworCisJaWYgKCFzdGF0KQorCQlyZXR1cm4gMDsKKworCWlmIChuZXRpZl9tc2dfaW50cihjcCkpCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogcnhtYWMgaW50ZXJydXB0LCBzdGF0OiAweCV4XG4iLAorCQkJY3AtPmRldi0+bmFtZSwgc3RhdCk7CisKKwkvKiB0aGVzZSBhcmUgYWxsIHJvbGxvdmVycyAqLworCXNwaW5fbG9jaygmY3AtPnN0YXRfbG9ja1swXSk7CisJaWYgKHN0YXQgJiBNQUNfUlhfQUxJR05fRVJSKSAKKwkJY3AtPm5ldF9zdGF0c1swXS5yeF9mcmFtZV9lcnJvcnMgKz0gMHgxMDAwMDsKKworCWlmIChzdGF0ICYgTUFDX1JYX0NSQ19FUlIpCisJCWNwLT5uZXRfc3RhdHNbMF0ucnhfY3JjX2Vycm9ycyArPSAweDEwMDAwOworCisJaWYgKHN0YXQgJiBNQUNfUlhfTEVOX0VSUikKKwkJY3AtPm5ldF9zdGF0c1swXS5yeF9sZW5ndGhfZXJyb3JzICs9IDB4MTAwMDA7CisKKwlpZiAoc3RhdCAmIE1BQ19SWF9PVkVSRkxPVykgeworCQljcC0+bmV0X3N0YXRzWzBdLnJ4X292ZXJfZXJyb3JzKys7CisJCWNwLT5uZXRfc3RhdHNbMF0ucnhfZmlmb19lcnJvcnMrKzsKKwl9CisKKwkvKiBXZSBkbyBub3QgdHJhY2sgTUFDX1JYX0ZSQU1FX0NPVU5UIGFuZCBNQUNfUlhfVklPTF9FUlIKKwkgKiBldmVudHMuCisJICovCisJc3Bpbl91bmxvY2soJmNwLT5zdGF0X2xvY2tbMF0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNhc19tYWNfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjYXMgKmNwLAorCQkJICAgICB1MzIgc3RhdHVzKQoreworCXUzMiBzdGF0ID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX0NUUkxfU1RBVFVTKTsKKworCWlmICghc3RhdCkKKwkJcmV0dXJuIDA7CisKKwlpZiAobmV0aWZfbXNnX2ludHIoY3ApKQorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG1hYyBpbnRlcnJ1cHQsIHN0YXQ6IDB4JXhcbiIsCisJCQljcC0+ZGV2LT5uYW1lLCBzdGF0KTsKKworCS8qIFRoaXMgaW50ZXJydXB0IGlzIGp1c3QgZm9yIHBhdXNlIGZyYW1lIGFuZCBwYXVzZQorCSAqIHRyYWNraW5nLiAgSXQgaXMgdXNlZnVsIGZvciBkaWFnbm9zdGljcyBhbmQgZGVidWcKKwkgKiBidXQgcHJvYmFibHkgYnkgZGVmYXVsdCB3ZSB3aWxsIG1hc2sgdGhlc2UgZXZlbnRzLgorCSAqLworCWlmIChzdGF0ICYgTUFDX0NUUkxfUEFVU0VfU1RBVEUpCisJCWNwLT5wYXVzZV9lbnRlcmVkKys7CisKKwlpZiAoc3RhdCAmIE1BQ19DVFJMX1BBVVNFX1JFQ0VJVkVEKQorCQljcC0+cGF1c2VfbGFzdF90aW1lX3JlY3ZkID0gKHN0YXQgPj4gMTYpOworCisJcmV0dXJuIDA7Cit9CisKKwkKKy8qIE11c3QgYmUgaW52b2tlZCB1bmRlciBjcC0+bG9jay4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNhc19tZGlvX2xpbmtfbm90X3VwKHN0cnVjdCBjYXMgKmNwKQoreworCXUxNiB2YWw7CisJCisJc3dpdGNoIChjcC0+bHN0YXRlKSB7CisJY2FzZSBsaW5rX2ZvcmNlX3JldDoKKwkJaWYgKG5ldGlmX21zZ19saW5rKGNwKSkKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBBdXRvbmVnIGZhaWxlZCBhZ2Fpbiwga2VlcGluZyIKKwkJCQkiIGZvcmNlZCBtb2RlXG4iLCBjcC0+ZGV2LT5uYW1lKTsKKwkJY2FzX3BoeV93cml0ZShjcCwgTUlJX0JNQ1IsIGNwLT5saW5rX2ZjbnRsKTsKKwkJY3AtPnRpbWVyX3RpY2tzID0gNTsKKwkJY3AtPmxzdGF0ZSA9IGxpbmtfZm9yY2Vfb2s7CisJCWNwLT5saW5rX3RyYW5zaXRpb24gPSBMSU5LX1RSQU5TSVRJT05fTElOS19DT05GSUc7CisJCWJyZWFrOworCQkKKwljYXNlIGxpbmtfYW5lZzoKKwkJdmFsID0gY2FzX3BoeV9yZWFkKGNwLCBNSUlfQk1DUik7CisKKwkJLyogVHJ5IGZvcmNlZCBtb2Rlcy4gd2UgdHJ5IHRoaW5ncyBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgorCQkgKiAxMDAwIGZ1bGwgLT4gMTAwIGZ1bGwvaGFsZiAtPiAxMCBoYWxmCisJCSAqLworCQl2YWwgJj0gfihCTUNSX0FOUkVTVEFSVCB8IEJNQ1JfQU5FTkFCTEUpOworCQl2YWwgfD0gQk1DUl9GVUxMRFBMWDsKKwkJdmFsIHw9IChjcC0+Y2FzX2ZsYWdzICYgQ0FTX0ZMQUdfMTAwME1CX0NBUCkgPyAKKwkJCUNBU19CTUNSX1NQRUVEMTAwMCA6IEJNQ1JfU1BFRUQxMDA7CisJCWNhc19waHlfd3JpdGUoY3AsIE1JSV9CTUNSLCB2YWwpOworCQljcC0+dGltZXJfdGlja3MgPSA1OworCQljcC0+bHN0YXRlID0gbGlua19mb3JjZV90cnk7CisJCWNwLT5saW5rX3RyYW5zaXRpb24gPSBMSU5LX1RSQU5TSVRJT05fTElOS19DT05GSUc7CisJCWJyZWFrOworCisJY2FzZSBsaW5rX2ZvcmNlX3RyeToKKwkJLyogRG93bmdyYWRlIGZyb20gMTAwMCB0byAxMDAgdG8gMTAgTWJwcyBpZiBuZWNlc3NhcnkuICovCisJCXZhbCA9IGNhc19waHlfcmVhZChjcCwgTUlJX0JNQ1IpOworCQljcC0+dGltZXJfdGlja3MgPSA1OworCQlpZiAodmFsICYgQ0FTX0JNQ1JfU1BFRUQxMDAwKSB7IC8qIGdpZ2FiaXQgKi8KKwkJCXZhbCAmPSB+Q0FTX0JNQ1JfU1BFRUQxMDAwOworCQkJdmFsIHw9IChCTUNSX1NQRUVEMTAwIHwgQk1DUl9GVUxMRFBMWCk7CisJCQljYXNfcGh5X3dyaXRlKGNwLCBNSUlfQk1DUiwgdmFsKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHZhbCAmIEJNQ1JfU1BFRUQxMDApIHsKKwkJCWlmICh2YWwgJiBCTUNSX0ZVTExEUExYKSAvKiBmZCBmYWlsZWQgKi8KKwkJCQl2YWwgJj0gfkJNQ1JfRlVMTERQTFg7CisJCQllbHNlIHsgLyogMTAwTWJwcyBmYWlsZWQgKi8KKwkJCQl2YWwgJj0gfkJNQ1JfU1BFRUQxMDA7CisJCQl9CisJCQljYXNfcGh5X3dyaXRlKGNwLCBNSUlfQk1DUiwgdmFsKTsKKwkJCWJyZWFrOworCQl9CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCisKKy8qIG11c3QgYmUgaW52b2tlZCB3aXRoIGNwLT5sb2NrIGhlbGQgKi8KK3N0YXRpYyBpbnQgY2FzX21paV9saW5rX2NoZWNrKHN0cnVjdCBjYXMgKmNwLCBjb25zdCB1MTYgYm1zcikKK3sKKwlpbnQgcmVzdGFydDsKKworCWlmIChibXNyICYgQk1TUl9MU1RBVFVTKSB7CisJCS8qIE9rLCBoZXJlIHdlIGdvdCBhIGxpbmsuIElmIHdlIGhhZCBpdCBkdWUgdG8gYSBmb3JjZWQKKwkJICogZmFsbGJhY2ssIGFuZCB3ZSB3ZXJlIGNvbmZpZ3VyZWQgZm9yIGF1dG9uZWcsIHdlIAorCQkgKiByZXRyeSBhIHNob3J0IGF1dG9uZWcgcGFzcy4gSWYgeW91IGtub3cgeW91ciBodWIgaXMKKwkJICogYnJva2VuLCB1c2UgZXRodG9vbCA7KQorCQkgKi8KKwkJaWYgKChjcC0+bHN0YXRlID09IGxpbmtfZm9yY2VfdHJ5KSAmJiAKKwkJICAgIChjcC0+bGlua19jbnRsICYgQk1DUl9BTkVOQUJMRSkpIHsKKwkJCWNwLT5sc3RhdGUgPSBsaW5rX2ZvcmNlX3JldDsKKwkJCWNwLT5saW5rX3RyYW5zaXRpb24gPSBMSU5LX1RSQU5TSVRJT05fTElOS19DT05GSUc7CisJCQljYXNfbWlmX3BvbGwoY3AsIDApOworCQkJY3AtPmxpbmtfZmNudGwgPSBjYXNfcGh5X3JlYWQoY3AsIE1JSV9CTUNSKTsKKwkJCWNwLT50aW1lcl90aWNrcyA9IDU7CisJCQlpZiAoY3AtPm9wZW5lZCAmJiBuZXRpZl9tc2dfbGluayhjcCkpCisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEdvdCBsaW5rIGFmdGVyIGZhbGxiYWNrLCByZXRyeWluZyIKKwkJCQkgICAgICAgIiBhdXRvbmVnIG9uY2UuLi5cbiIsIGNwLT5kZXYtPm5hbWUpOworCQkJY2FzX3BoeV93cml0ZShjcCwgTUlJX0JNQ1IsCisJCQkJICAgICAgY3AtPmxpbmtfZmNudGwgfCBCTUNSX0FORU5BQkxFIHwKKwkJCQkgICAgICBCTUNSX0FOUkVTVEFSVCk7CisJCQljYXNfbWlmX3BvbGwoY3AsIDEpOworCisJCX0gZWxzZSBpZiAoY3AtPmxzdGF0ZSAhPSBsaW5rX3VwKSB7CisJCQljcC0+bHN0YXRlID0gbGlua191cDsKKwkJCWNwLT5saW5rX3RyYW5zaXRpb24gPSBMSU5LX1RSQU5TSVRJT05fTElOS19VUDsKKworCQkJaWYgKGNwLT5vcGVuZWQpIHsKKwkJCQljYXNfc2V0X2xpbmtfbW9kZXMoY3ApOworCQkJCW5ldGlmX2NhcnJpZXJfb24oY3AtPmRldik7CisJCQl9CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJLyogbGluayBub3QgdXAuIGlmIHRoZSBsaW5rIHdhcyBwcmV2aW91c2x5IHVwLCB3ZSByZXN0YXJ0IHRoZQorCSAqIHdob2xlIHByb2Nlc3MKKwkgKi8KKwlyZXN0YXJ0ID0gMDsKKwlpZiAoY3AtPmxzdGF0ZSA9PSBsaW5rX3VwKSB7CisJCWNwLT5sc3RhdGUgPSBsaW5rX2Rvd247CisJCWNwLT5saW5rX3RyYW5zaXRpb24gPSBMSU5LX1RSQU5TSVRJT05fTElOS19ET1dOOworCisJCW5ldGlmX2NhcnJpZXJfb2ZmKGNwLT5kZXYpOworCQlpZiAoY3AtPm9wZW5lZCAmJiBuZXRpZl9tc2dfbGluayhjcCkpCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogTGluayBkb3duXG4iLAorCQkJICAgICAgIGNwLT5kZXYtPm5hbWUpOworCQlyZXN0YXJ0ID0gMTsKKwkJCisJfSBlbHNlIGlmICgrK2NwLT50aW1lcl90aWNrcyA+IDEwKQorCQljYXNfbWRpb19saW5rX25vdF91cChjcCk7CisJCQorCXJldHVybiByZXN0YXJ0OworfQorCitzdGF0aWMgaW50IGNhc19taWZfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjYXMgKmNwLAorCQkJICAgICB1MzIgc3RhdHVzKQoreworCXUzMiBzdGF0ID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUlGX1NUQVRVUyk7CisJdTE2IGJtc3I7CisKKwkvKiBjaGVjayBmb3IgYSBsaW5rIGNoYW5nZSAqLworCWlmIChDQVNfVkFMKE1JRl9TVEFUVVNfUE9MTF9TVEFUVVMsIHN0YXQpID09IDApCisJCXJldHVybiAwOworCisJYm1zciA9IENBU19WQUwoTUlGX1NUQVRVU19QT0xMX0RBVEEsIHN0YXQpOworCXJldHVybiBjYXNfbWlpX2xpbmtfY2hlY2soY3AsIGJtc3IpOworfQorCitzdGF0aWMgaW50IGNhc19wY2lfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjYXMgKmNwLAorCQkJICAgICB1MzIgc3RhdHVzKQoreworCXUzMiBzdGF0ID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfUENJX0VSUl9TVEFUVVMpOworCisJaWYgKCFzdGF0KQorCQlyZXR1cm4gMDsKKworCXByaW50ayhLRVJOX0VSUiAiJXM6IFBDSSBlcnJvciBbJTA0eDolMDR4XSAiLCBkZXYtPm5hbWUsIHN0YXQsCisJICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX0JJTV9ESUFHKSk7CisKKwkvKiBjYXNzaW5pKyBoYXMgdGhpcyByZXNlcnZlZCAqLworCWlmICgoc3RhdCAmIFBDSV9FUlJfQkFEQUNLKSAmJgorCSAgICAoKGNwLT5jYXNfZmxhZ3MgJiBDQVNfRkxBR19SRUdfUExVUykgPT0gMCkpCisJCXByaW50aygiPE5vIEFDSzY0IyBkdXJpbmcgQUJTNjQgY3ljbGU+ICIpOworCisJaWYgKHN0YXQgJiBQQ0lfRVJSX0RUUlRPKQorCQlwcmludGsoIjxEZWxheWVkIHRyYW5zYWN0aW9uIHRpbWVvdXQ+ICIpOworCWlmIChzdGF0ICYgUENJX0VSUl9PVEhFUikKKwkJcHJpbnRrKCI8b3RoZXI+ICIpOworCWlmIChzdGF0ICYgUENJX0VSUl9CSU1fRE1BX1dSSVRFKQorCQlwcmludGsoIjxCSU0gRE1BIDAgd3JpdGUgcmVxPiAiKTsKKwlpZiAoc3RhdCAmIFBDSV9FUlJfQklNX0RNQV9SRUFEKQorCQlwcmludGsoIjxCSU0gRE1BIDAgcmVhZCByZXE+ICIpOworCXByaW50aygiXG4iKTsKKworCWlmIChzdGF0ICYgUENJX0VSUl9PVEhFUikgeworCQl1MTYgY2ZnOworCisJCS8qIEludGVycm9nYXRlIFBDSSBjb25maWcgc3BhY2UgZm9yIHRoZQorCQkgKiB0cnVlIGNhdXNlLgorCQkgKi8KKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoY3AtPnBkZXYsIFBDSV9TVEFUVVMsICZjZmcpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBSZWFkIFBDSSBjZmcgc3BhY2Ugc3RhdHVzIFslMDR4XVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgY2ZnKTsKKwkJaWYgKGNmZyAmIFBDSV9TVEFUVVNfUEFSSVRZKQorCQkJcHJpbnRrKEtFUk5fRVJSICIlczogUENJIHBhcml0eSBlcnJvciBkZXRlY3RlZC5cbiIsCisJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJaWYgKGNmZyAmIFBDSV9TVEFUVVNfU0lHX1RBUkdFVF9BQk9SVCkKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFBDSSB0YXJnZXQgYWJvcnQuXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSk7CisJCWlmIChjZmcgJiBQQ0lfU1RBVFVTX1JFQ19UQVJHRVRfQUJPUlQpCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBQQ0kgbWFzdGVyIGFja3MgdGFyZ2V0IGFib3J0LlxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUpOworCQlpZiAoY2ZnICYgUENJX1NUQVRVU19SRUNfTUFTVEVSX0FCT1JUKQorCQkJcHJpbnRrKEtFUk5fRVJSICIlczogUENJIG1hc3RlciBhYm9ydC5cbiIsIGRldi0+bmFtZSk7CisJCWlmIChjZmcgJiBQQ0lfU1RBVFVTX1NJR19TWVNURU1fRVJST1IpCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBQQ0kgc3lzdGVtIGVycm9yIFNFUlIjLlxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUpOworCQlpZiAoY2ZnICYgUENJX1NUQVRVU19ERVRFQ1RFRF9QQVJJVFkpCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBQQ0kgcGFyaXR5IGVycm9yLlxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUpOworCisJCS8qIFdyaXRlIHRoZSBlcnJvciBiaXRzIGJhY2sgdG8gY2xlYXIgdGhlbS4gKi8KKwkJY2ZnICY9IChQQ0lfU1RBVFVTX1BBUklUWSB8CisJCQlQQ0lfU1RBVFVTX1NJR19UQVJHRVRfQUJPUlQgfAorCQkJUENJX1NUQVRVU19SRUNfVEFSR0VUX0FCT1JUIHwKKwkJCVBDSV9TVEFUVVNfUkVDX01BU1RFUl9BQk9SVCB8CisJCQlQQ0lfU1RBVFVTX1NJR19TWVNURU1fRVJST1IgfAorCQkJUENJX1NUQVRVU19ERVRFQ1RFRF9QQVJJVFkpOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoY3AtPnBkZXYsIFBDSV9TVEFUVVMsIGNmZyk7CisJfQorCisJLyogRm9yIGFsbCBQQ0kgZXJyb3JzLCB3ZSBzaG91bGQgcmVzZXQgdGhlIGNoaXAuICovCisJcmV0dXJuIDE7Cit9CisKKy8qIEFsbCBub24tbm9ybWFsIGludGVycnVwdCBjb25kaXRpb25zIGdldCBzZXJ2aWNlZCBoZXJlLgorICogUmV0dXJucyBub24temVybyBpZiB3ZSBzaG91bGQganVzdCBleGl0IHRoZSBpbnRlcnJ1cHQKKyAqIGhhbmRsZXIgcmlnaHQgbm93IChpZS4gaWYgd2UgcmVzZXQgdGhlIGNhcmQgd2hpY2ggaW52YWxpZGF0ZXMKKyAqIGFsbCBvZiB0aGUgb3RoZXIgb3JpZ2luYWwgaXJxIHN0YXR1cyBiaXRzKS4KKyAqLworc3RhdGljIGludCBjYXNfYWJub3JtYWxfaXJxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjYXMgKmNwLAorCQkJICAgIHUzMiBzdGF0dXMpCit7CisJaWYgKHN0YXR1cyAmIElOVFJfUlhfVEFHX0VSUk9SKSB7CisJCS8qIGNvcnJ1cHQgUlggdGFnIGZyYW1pbmcgKi8KKwkJaWYgKG5ldGlmX21zZ19yeF9lcnIoY3ApKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBjb3JydXB0IHJ4IHRhZyBmcmFtaW5nXG4iLAorCQkJCWNwLT5kZXYtPm5hbWUpOworCQlzcGluX2xvY2soJmNwLT5zdGF0X2xvY2tbMF0pOworCQljcC0+bmV0X3N0YXRzWzBdLnJ4X2Vycm9ycysrOworCQlzcGluX3VubG9jaygmY3AtPnN0YXRfbG9ja1swXSk7CisJCWdvdG8gZG9fcmVzZXQ7CisJfQorCisJaWYgKHN0YXR1cyAmIElOVFJfUlhfTEVOX01JU01BVENIKSB7CisJCS8qIGxlbmd0aCBtaXNtYXRjaC4gKi8KKwkJaWYgKG5ldGlmX21zZ19yeF9lcnIoY3ApKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBsZW5ndGggbWlzbWF0Y2ggZm9yIHJ4IGZyYW1lXG4iLAorCQkJCWNwLT5kZXYtPm5hbWUpOworCQlzcGluX2xvY2soJmNwLT5zdGF0X2xvY2tbMF0pOworCQljcC0+bmV0X3N0YXRzWzBdLnJ4X2Vycm9ycysrOworCQlzcGluX3VubG9jaygmY3AtPnN0YXRfbG9ja1swXSk7CisJCWdvdG8gZG9fcmVzZXQ7CisJfQorCisJaWYgKHN0YXR1cyAmIElOVFJfUENTX1NUQVRVUykgeworCQlpZiAoY2FzX3Bjc19pbnRlcnJ1cHQoZGV2LCBjcCwgc3RhdHVzKSkKKwkJCWdvdG8gZG9fcmVzZXQ7CisJfQorCisJaWYgKHN0YXR1cyAmIElOVFJfVFhfTUFDX1NUQVRVUykgeworCQlpZiAoY2FzX3R4bWFjX2ludGVycnVwdChkZXYsIGNwLCBzdGF0dXMpKQorCQkJZ290byBkb19yZXNldDsKKwl9CisKKwlpZiAoc3RhdHVzICYgSU5UUl9SWF9NQUNfU1RBVFVTKSB7CisJCWlmIChjYXNfcnhtYWNfaW50ZXJydXB0KGRldiwgY3AsIHN0YXR1cykpCisJCQlnb3RvIGRvX3Jlc2V0OworCX0KKworCWlmIChzdGF0dXMgJiBJTlRSX01BQ19DVFJMX1NUQVRVUykgeworCQlpZiAoY2FzX21hY19pbnRlcnJ1cHQoZGV2LCBjcCwgc3RhdHVzKSkKKwkJCWdvdG8gZG9fcmVzZXQ7CisJfQorCisJaWYgKHN0YXR1cyAmIElOVFJfTUlGX1NUQVRVUykgeworCQlpZiAoY2FzX21pZl9pbnRlcnJ1cHQoZGV2LCBjcCwgc3RhdHVzKSkKKwkJCWdvdG8gZG9fcmVzZXQ7CisJfQorCisJaWYgKHN0YXR1cyAmIElOVFJfUENJX0VSUk9SX1NUQVRVUykgeworCQlpZiAoY2FzX3BjaV9pbnRlcnJ1cHQoZGV2LCBjcCwgc3RhdHVzKSkKKwkJCWdvdG8gZG9fcmVzZXQ7CisJfQorCXJldHVybiAwOworCitkb19yZXNldDoKKyNpZiAxCisJYXRvbWljX2luYygmY3AtPnJlc2V0X3Rhc2tfcGVuZGluZyk7CisJYXRvbWljX2luYygmY3AtPnJlc2V0X3Rhc2tfcGVuZGluZ19hbGwpOworCXByaW50ayhLRVJOX0VSUiAiJXM6cmVzZXQgY2FsbGVkIGluIGNhc19hYm5vcm1hbF9pcnEgWzB4JXhdXG4iLAorCSAgICAgICBkZXYtPm5hbWUsIHN0YXR1cyk7CisJc2NoZWR1bGVfd29yaygmY3AtPnJlc2V0X3Rhc2spOworI2Vsc2UKKwlhdG9taWNfc2V0KCZjcC0+cmVzZXRfdGFza19wZW5kaW5nLCBDQVNfUkVTRVRfQUxMKTsKKwlwcmludGsoS0VSTl9FUlIgInJlc2V0IGNhbGxlZCBpbiBjYXNfYWJub3JtYWxfaXJxXG4iKTsKKwlzY2hlZHVsZV93b3JrKCZjcC0+cmVzZXRfdGFzayk7CisjZW5kaWYKKwlyZXR1cm4gMTsKK30KKworLyogTk9URTogQ0FTX1RBQk9SVCByZXR1cm5zIDEgb3IgMiBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIHdoZW4KKyAqICAgICAgIGRldGVybWluaW5nIHdoZXRoZXIgdG8gZG8gYSBuZXRpZl9zdG9wL3dha2V1cAorICovCisjZGVmaW5lIENBU19UQUJPUlQoeCkgICAgICAoKCh4KS0+Y2FzX2ZsYWdzICYgQ0FTX0ZMQUdfVEFSR0VUX0FCT1JUKSA/IDIgOiAxKQorI2RlZmluZSBDQVNfUk9VTkRfUEFHRSh4KSAgKCgoeCkgKyBQQUdFX1NJWkUgLSAxKSAmIFBBR0VfTUFTSykKK3N0YXRpYyBpbmxpbmUgaW50IGNhc19jYWxjX3RhYm9ydChzdHJ1Y3QgY2FzICpjcCwgY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCSAgY29uc3QgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIG9mZiA9IGFkZHIgKyBsZW47CisKKwlpZiAoQ0FTX1RBQk9SVChjcCkgPT0gMSkKKwkJcmV0dXJuIDA7CisJaWYgKChDQVNfUk9VTkRfUEFHRShvZmYpIC0gb2ZmKSA+IFRYX1RBUkdFVF9BQk9SVF9MRU4pCisJCXJldHVybiAwOworCXJldHVybiBUWF9UQVJHRVRfQUJPUlRfTEVOOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2FzX3R4X3JpbmdOKHN0cnVjdCBjYXMgKmNwLCBpbnQgcmluZywgaW50IGxpbWl0KQoreworCXN0cnVjdCBjYXNfdHhfZGVzYyAqdHhkczsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKnNrYnM7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNwLT5kZXY7CisJaW50IGVudHJ5LCBjb3VudDsKKworCXNwaW5fbG9jaygmY3AtPnR4X2xvY2tbcmluZ10pOworCXR4ZHMgPSBjcC0+aW5pdF90eGRzW3JpbmddOworCXNrYnMgPSBjcC0+dHhfc2tic1tyaW5nXTsKKwllbnRyeSA9IGNwLT50eF9vbGRbcmluZ107CisKKwljb3VudCA9IFRYX0JVRkZfQ09VTlQocmluZywgZW50cnksIGxpbWl0KTsKKwl3aGlsZSAoZW50cnkgIT0gbGltaXQpIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYnNbZW50cnldOworCQlkbWFfYWRkcl90IGRhZGRyOworCQl1MzIgZGxlbjsKKwkJaW50IGZyYWc7CisKKwkJaWYgKCFza2IpIHsKKwkJCS8qIHRoaXMgc2hvdWxkIG5ldmVyIG9jY3VyICovCisJCQllbnRyeSA9IFRYX0RFU0NfTkVYVChyaW5nLCBlbnRyeSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGhvd2V2ZXIsIHdlIG1pZ2h0IGdldCBvbmx5IGEgcGFydGlhbCBza2IgcmVsZWFzZS4gKi8KKwkJY291bnQgLT0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArCisJCQkrIGNwLT50eF90aW55X3VzZVtyaW5nXVtlbnRyeV0ubmJ1ZnMgKyAxOworCQlpZiAoY291bnQgPCAwKQorCQkJYnJlYWs7CisKKwkJaWYgKG5ldGlmX21zZ190eF9kb25lKGNwKSkKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdHhbJWRdIGRvbmUsIHNsb3QgJWRcbiIsCisJCQkgICAgICAgY3AtPmRldi0+bmFtZSwgcmluZywgZW50cnkpOworCisJCXNrYnNbZW50cnldID0gTlVMTDsKKwkJY3AtPnR4X3RpbnlfdXNlW3JpbmddW2VudHJ5XS5uYnVmcyA9IDA7CisJCQorCQlmb3IgKGZyYWcgPSAwOyBmcmFnIDw9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGZyYWcrKykgeworCQkJc3RydWN0IGNhc190eF9kZXNjICp0eGQgPSB0eGRzICsgZW50cnk7CisKKwkJCWRhZGRyID0gbGU2NF90b19jcHUodHhkLT5idWZmZXIpOworCQkJZGxlbiA9IENBU19WQUwoVFhfREVTQ19CVUZMRU4sCisJCQkJICAgICAgIGxlNjRfdG9fY3B1KHR4ZC0+Y29udHJvbCkpOworCQkJcGNpX3VubWFwX3BhZ2UoY3AtPnBkZXYsIGRhZGRyLCBkbGVuLAorCQkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCWVudHJ5ID0gVFhfREVTQ19ORVhUKHJpbmcsIGVudHJ5KTsKKworCQkJLyogdGlueSBidWZmZXIgbWF5IGZvbGxvdyAqLworCQkJaWYgKGNwLT50eF90aW55X3VzZVtyaW5nXVtlbnRyeV0udXNlZCkgeworCQkJCWNwLT50eF90aW55X3VzZVtyaW5nXVtlbnRyeV0udXNlZCA9IDA7CisJCQkJZW50cnkgPSBUWF9ERVNDX05FWFQocmluZywgZW50cnkpOworCQkJfSAKKwkJfQorCisJCXNwaW5fbG9jaygmY3AtPnN0YXRfbG9ja1tyaW5nXSk7CisJCWNwLT5uZXRfc3RhdHNbcmluZ10udHhfcGFja2V0cysrOworCQljcC0+bmV0X3N0YXRzW3JpbmddLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCQlzcGluX3VubG9jaygmY3AtPnN0YXRfbG9ja1tyaW5nXSk7CisJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJfQorCWNwLT50eF9vbGRbcmluZ10gPSBlbnRyeTsKKworCS8qIHRoaXMgaXMgd3JvbmcgZm9yIG11bHRpcGxlIHR4IHJpbmdzLiB0aGUgbmV0IGRldmljZSBuZWVkcworCSAqIG11bHRpcGxlIHF1ZXVlcyBmb3IgdGhpcyB0byBkbyB0aGUgcmlnaHQgdGhpbmcuICB3ZSB3YWl0CisJICogZm9yIDIqcGFja2V0cyB0byBiZSBhdmFpbGFibGUgd2hlbiB1c2luZyB0aW55IGJ1ZmZlcnMKKwkgKi8KKwlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpICYmCisJICAgIChUWF9CVUZGU19BVkFJTChjcCwgcmluZykgPiBDQVNfVEFCT1JUKGNwKSooTUFYX1NLQl9GUkFHUyArIDEpKSkKKwkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCXNwaW5fdW5sb2NrKCZjcC0+dHhfbG9ja1tyaW5nXSk7Cit9CisKK3N0YXRpYyB2b2lkIGNhc190eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2FzICpjcCwKKwkJICAgdTMyIHN0YXR1cykKK3sKKyAgICAgICAgaW50IGxpbWl0LCByaW5nOworI2lmZGVmIFVTRV9UWF9DT01QV0IKKwl1NjQgY29tcHdiID0gbGU2NF90b19jcHUoY3AtPmluaXRfYmxvY2stPnR4X2NvbXB3Yik7CisjZW5kaWYKKwlpZiAobmV0aWZfbXNnX2ludHIoY3ApKQorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR4IGludGVycnVwdCwgc3RhdHVzOiAweCV4LCAlbHhcbiIsCisJCQljcC0+ZGV2LT5uYW1lLCBzdGF0dXMsIGNvbXB3Yik7CisJLyogcHJvY2VzcyBhbGwgdGhlIHJpbmdzICovCisJZm9yIChyaW5nID0gMDsgcmluZyA8IE5fVFhfUklOR1M7IHJpbmcrKykgeworI2lmZGVmIFVTRV9UWF9DT01QV0IKKwkJLyogdXNlIHRoZSBjb21wbGV0aW9uIHdyaXRlYmFjayByZWdpc3RlcnMgKi8KKwkJbGltaXQgPSAoQ0FTX1ZBTChUWF9DT01QV0JfTVNCLCBjb21wd2IpIDw8IDgpIHwKKwkJCUNBU19WQUwoVFhfQ09NUFdCX0xTQiwgY29tcHdiKTsKKwkJY29tcHdiID0gVFhfQ09NUFdCX05FWFQoY29tcHdiKTsKKyNlbHNlCisJCWxpbWl0ID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfVFhfQ09NUE4ocmluZykpOworI2VuZGlmCisJCWlmIChjcC0+dHhfb2xkW3JpbmddICE9IGxpbWl0KSAKKwkJCWNhc190eF9yaW5nTihjcCwgcmluZywgbGltaXQpOworCX0KK30KKworCitzdGF0aWMgaW50IGNhc19yeF9wcm9jZXNzX3BrdChzdHJ1Y3QgY2FzICpjcCwgc3RydWN0IGNhc19yeF9jb21wICpyeGMsIAorCQkJICAgICAgaW50IGVudHJ5LCBjb25zdCB1NjQgKndvcmRzLCAKKwkJCSAgICAgIHN0cnVjdCBza19idWZmICoqc2ticmVmKQoreworCWludCBkbGVuLCBobGVuLCBsZW4sIGksIGFsbG9jbGVuOworCWludCBvZmYsIHN3aXZlbCA9IFJYX1NXSVZFTF9PRkZfVkFMOworCXN0cnVjdCBjYXNfcGFnZSAqcGFnZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXZvaWQgKmFkZHIsICpjcmNhZGRyOworCWNoYXIgKnA7IAorCisJaGxlbiA9IENBU19WQUwoUlhfQ09NUDJfSERSX1NJWkUsIHdvcmRzWzFdKTsKKwlkbGVuID0gQ0FTX1ZBTChSWF9DT01QMV9EQVRBX1NJWkUsIHdvcmRzWzBdKTsKKwlsZW4gID0gaGxlbiArIGRsZW47CisKKwlpZiAoUlhfQ09QWV9BTFdBWVMgfHwgKHdvcmRzWzJdICYgUlhfQ09NUDNfU01BTExfUEtUKSkgCisJCWFsbG9jbGVuID0gbGVuOworCWVsc2UgCisJCWFsbG9jbGVuID0gbWF4KGhsZW4sIFJYX0NPUFlfTUlOKTsKKworCXNrYiA9IGRldl9hbGxvY19za2IoYWxsb2NsZW4gKyBzd2l2ZWwgKyBjcC0+Y3JjX3NpemUpOworCWlmIChza2IgPT0gTlVMTCkgCisJCXJldHVybiAtMTsKKworCSpza2JyZWYgPSBza2I7CisJc2tiLT5kZXYgPSBjcC0+ZGV2OworCXNrYl9yZXNlcnZlKHNrYiwgc3dpdmVsKTsKKworCXAgPSBza2ItPmRhdGE7CisJYWRkciA9IGNyY2FkZHIgPSBOVUxMOworCWlmIChobGVuKSB7IC8qIGFsd2F5cyBjb3B5IGhlYWRlciBwYWdlcyAqLworCQlpID0gQ0FTX1ZBTChSWF9DT01QMl9IRFJfSU5ERVgsIHdvcmRzWzFdKTsKKwkJcGFnZSA9IGNwLT5yeF9wYWdlc1tDQVNfVkFMKFJYX0lOREVYX1JJTkcsIGkpXVtDQVNfVkFMKFJYX0lOREVYX05VTSwgaSldOworCQlvZmYgPSBDQVNfVkFMKFJYX0NPTVAyX0hEUl9PRkYsIHdvcmRzWzFdKSAqIDB4MTAwICsgCisJCQlzd2l2ZWw7CisKKwkJaSA9IGhsZW47CisJCWlmICghZGxlbikgLyogYXR0YWNoIEZDUyAqLworCQkJaSArPSBjcC0+Y3JjX3NpemU7CisJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShjcC0+cGRldiwgcGFnZS0+ZG1hX2FkZHIgKyBvZmYsIGksCisJCQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCWFkZHIgPSBjYXNfcGFnZV9tYXAocGFnZS0+YnVmZmVyKTsKKwkJbWVtY3B5KHAsIGFkZHIgKyBvZmYsIGkpOworCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoY3AtPnBkZXYsIHBhZ2UtPmRtYV9hZGRyICsgb2ZmLCBpLAorCQkJCSAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQljYXNfcGFnZV91bm1hcChhZGRyKTsKKwkJUlhfVVNFRF9BREQocGFnZSwgMHgxMDApOworCQlwICs9IGhsZW47CisJCXN3aXZlbCA9IDA7CisJfSAKKworCisJaWYgKGFsbG9jbGVuIDwgKGhsZW4gKyBkbGVuKSkgeworCQlza2JfZnJhZ190ICpmcmFnID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnczsKKworCQkvKiBub3JtYWwgb3IganVtYm8gcGFja2V0cy4gd2UgdXNlIGZyYWdzICovCisJCWkgPSBDQVNfVkFMKFJYX0NPTVAxX0RBVEFfSU5ERVgsIHdvcmRzWzBdKTsKKwkJcGFnZSA9IGNwLT5yeF9wYWdlc1tDQVNfVkFMKFJYX0lOREVYX1JJTkcsIGkpXVtDQVNfVkFMKFJYX0lOREVYX05VTSwgaSldOworCQlvZmYgPSBDQVNfVkFMKFJYX0NPTVAxX0RBVEFfT0ZGLCB3b3Jkc1swXSkgKyBzd2l2ZWw7CisKKwkJaGxlbiA9IG1pbihjcC0+cGFnZV9zaXplIC0gb2ZmLCBkbGVuKTsKKwkJaWYgKGhsZW4gPCAwKSB7CisJCQlpZiAobmV0aWZfbXNnX3J4X2VycihjcCkpIHsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJ4IHBhZ2Ugb3ZlcmZsb3c6ICIKKwkJCQkgICAgICAgIiVkXG4iLCBjcC0+ZGV2LT5uYW1lLCBobGVuKTsKKwkJCX0KKwkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJaSA9IGhsZW47CisJCWlmIChpID09IGRsZW4pICAvKiBhdHRhY2ggRkNTICovCisJCQlpICs9IGNwLT5jcmNfc2l6ZTsKKwkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGNwLT5wZGV2LCBwYWdlLT5kbWFfYWRkciArIG9mZiwgaSwKKwkJCQkgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKworCQkvKiBtYWtlIHN1cmUgd2UgYWx3YXlzIGNvcHkgYSBoZWFkZXIgKi8KKwkJc3dpdmVsID0gMDsKKwkJaWYgKHAgPT0gKGNoYXIgKikgc2tiLT5kYXRhKSB7IC8qIG5vdCBzcGxpdCAqLworCQkJYWRkciA9IGNhc19wYWdlX21hcChwYWdlLT5idWZmZXIpOworCQkJbWVtY3B5KHAsIGFkZHIgKyBvZmYsIFJYX0NPUFlfTUlOKTsKKwkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShjcC0+cGRldiwgcGFnZS0+ZG1hX2FkZHIgKyBvZmYsIGksCisJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCQljYXNfcGFnZV91bm1hcChhZGRyKTsKKwkJCW9mZiArPSBSWF9DT1BZX01JTjsKKwkJCXN3aXZlbCA9IFJYX0NPUFlfTUlOOworCQkJUlhfVVNFRF9BREQocGFnZSwgY3AtPm10dV9zdHJpZGUpOworCQl9IGVsc2UgeworCQkJUlhfVVNFRF9BREQocGFnZSwgaGxlbik7CisJCX0KKwkJc2tiX3B1dChza2IsIGFsbG9jbGVuKTsKKworCQlza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKys7CisJCXNrYi0+ZGF0YV9sZW4gKz0gaGxlbiAtIHN3aXZlbDsKKwkJc2tiLT5sZW4gICAgICArPSBobGVuIC0gc3dpdmVsOworCisJCWdldF9wYWdlKHBhZ2UtPmJ1ZmZlcik7CisJCWZyYWctPnBhZ2UgPSBwYWdlLT5idWZmZXI7CisJCWZyYWctPnBhZ2Vfb2Zmc2V0ID0gb2ZmOworCQlmcmFnLT5zaXplID0gaGxlbiAtIHN3aXZlbDsKKwkJCisJCS8qIGFueSBtb3JlIGRhdGE/ICovCisJCWlmICgod29yZHNbMF0gJiBSWF9DT01QMV9TUExJVF9QS1QpICYmICgoZGxlbiAtPSBobGVuKSA+IDApKSB7CisJCQlobGVuID0gZGxlbjsKKwkJCW9mZiA9IDA7CisKKwkJCWkgPSBDQVNfVkFMKFJYX0NPTVAyX05FWFRfSU5ERVgsIHdvcmRzWzFdKTsKKwkJCXBhZ2UgPSBjcC0+cnhfcGFnZXNbQ0FTX1ZBTChSWF9JTkRFWF9SSU5HLCBpKV1bQ0FTX1ZBTChSWF9JTkRFWF9OVU0sIGkpXTsKKwkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShjcC0+cGRldiwgcGFnZS0+ZG1hX2FkZHIsIAorCQkJCQkgICAgaGxlbiArIGNwLT5jcmNfc2l6ZSwgCisJCQkJCSAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGNwLT5wZGV2LCBwYWdlLT5kbWFfYWRkciwKKwkJCQkJICAgIGhsZW4gKyBjcC0+Y3JjX3NpemUsCisJCQkJCSAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJCQlza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKys7CisJCQlza2ItPmRhdGFfbGVuICs9IGhsZW47CisJCQlza2ItPmxlbiAgICAgICs9IGhsZW47IAorCQkJZnJhZysrOworCisJCQlnZXRfcGFnZShwYWdlLT5idWZmZXIpOworCQkJZnJhZy0+cGFnZSA9IHBhZ2UtPmJ1ZmZlcjsKKwkJCWZyYWctPnBhZ2Vfb2Zmc2V0ID0gMDsKKwkJCWZyYWctPnNpemUgPSBobGVuOworCQkJUlhfVVNFRF9BREQocGFnZSwgaGxlbiArIGNwLT5jcmNfc2l6ZSk7CisJCX0KKworCQlpZiAoY3AtPmNyY19zaXplKSB7CisJCQlhZGRyID0gY2FzX3BhZ2VfbWFwKHBhZ2UtPmJ1ZmZlcik7CisJCQljcmNhZGRyICA9IGFkZHIgKyBvZmYgKyBobGVuOworCQl9CisKKwl9IGVsc2UgeworCQkvKiBjb3B5aW5nIHBhY2tldCAqLworCQlpZiAoIWRsZW4pCisJCQlnb3RvIGVuZF9jb3B5X3BrdDsKKworCQlpID0gQ0FTX1ZBTChSWF9DT01QMV9EQVRBX0lOREVYLCB3b3Jkc1swXSk7CisJCXBhZ2UgPSBjcC0+cnhfcGFnZXNbQ0FTX1ZBTChSWF9JTkRFWF9SSU5HLCBpKV1bQ0FTX1ZBTChSWF9JTkRFWF9OVU0sIGkpXTsKKwkJb2ZmID0gQ0FTX1ZBTChSWF9DT01QMV9EQVRBX09GRiwgd29yZHNbMF0pICsgc3dpdmVsOworCQlobGVuID0gbWluKGNwLT5wYWdlX3NpemUgLSBvZmYsIGRsZW4pOworCQlpZiAoaGxlbiA8IDApIHsKKwkJCWlmIChuZXRpZl9tc2dfcnhfZXJyKGNwKSkgeworCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogcnggcGFnZSBvdmVyZmxvdzogIgorCQkJCSAgICAgICAiJWRcbiIsIGNwLT5kZXYtPm5hbWUsIGhsZW4pOworCQkJfQorCQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlpID0gaGxlbjsKKwkJaWYgKGkgPT0gZGxlbikgLyogYXR0YWNoIEZDUyAqLworCQkJaSArPSBjcC0+Y3JjX3NpemU7CisJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShjcC0+cGRldiwgcGFnZS0+ZG1hX2FkZHIgKyBvZmYsIGksCisJCQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCWFkZHIgPSBjYXNfcGFnZV9tYXAocGFnZS0+YnVmZmVyKTsKKwkJbWVtY3B5KHAsIGFkZHIgKyBvZmYsIGkpOworCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoY3AtPnBkZXYsIHBhZ2UtPmRtYV9hZGRyICsgb2ZmLCBpLAorCQkJCSAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQljYXNfcGFnZV91bm1hcChhZGRyKTsKKwkJaWYgKHAgPT0gKGNoYXIgKikgc2tiLT5kYXRhKSAvKiBub3Qgc3BsaXQgKi8KKwkJCVJYX1VTRURfQUREKHBhZ2UsIGNwLT5tdHVfc3RyaWRlKTsKKwkJZWxzZQorCQkJUlhfVVNFRF9BREQocGFnZSwgaSk7CisJCisJCS8qIGFueSBtb3JlIGRhdGE/ICovCisJCWlmICgod29yZHNbMF0gJiBSWF9DT01QMV9TUExJVF9QS1QpICYmICgoZGxlbiAtPSBobGVuKSA+IDApKSB7CisJCQlwICs9IGhsZW47CisJCQlpID0gQ0FTX1ZBTChSWF9DT01QMl9ORVhUX0lOREVYLCB3b3Jkc1sxXSk7CisJCQlwYWdlID0gY3AtPnJ4X3BhZ2VzW0NBU19WQUwoUlhfSU5ERVhfUklORywgaSldW0NBU19WQUwoUlhfSU5ERVhfTlVNLCBpKV07CisJCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoY3AtPnBkZXYsIHBhZ2UtPmRtYV9hZGRyLCAKKwkJCQkJICAgIGRsZW4gKyBjcC0+Y3JjX3NpemUsIAorCQkJCQkgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCWFkZHIgPSBjYXNfcGFnZV9tYXAocGFnZS0+YnVmZmVyKTsKKwkJCW1lbWNweShwLCBhZGRyLCBkbGVuICsgY3AtPmNyY19zaXplKTsKKwkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShjcC0+cGRldiwgcGFnZS0+ZG1hX2FkZHIsCisJCQkJCSAgICBkbGVuICsgY3AtPmNyY19zaXplLAorCQkJCQkgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCWNhc19wYWdlX3VubWFwKGFkZHIpOworCQkJUlhfVVNFRF9BREQocGFnZSwgZGxlbiArIGNwLT5jcmNfc2l6ZSk7IAorCQl9CitlbmRfY29weV9wa3Q6CisJCWlmIChjcC0+Y3JjX3NpemUpIHsKKwkJCWFkZHIgICAgPSBOVUxMOworCQkJY3JjYWRkciA9IHNrYi0+ZGF0YSArIGFsbG9jbGVuOworCQl9CisJCXNrYl9wdXQoc2tiLCBhbGxvY2xlbik7CisJfQorCisJaSA9IENBU19WQUwoUlhfQ09NUDRfVENQX0NTVU0sIHdvcmRzWzNdKTsKKwlpZiAoY3AtPmNyY19zaXplKSB7CisJCS8qIGNoZWNrc3VtIGluY2x1ZGVzIEZDUy4gc3RyaXAgaXQgb3V0LiAqLworCQlpID0gY3N1bV9mb2xkKGNzdW1fcGFydGlhbChjcmNhZGRyLCBjcC0+Y3JjX3NpemUsIGkpKTsKKwkJaWYgKGFkZHIpCisJCQljYXNfcGFnZV91bm1hcChhZGRyKTsKKwl9CisJc2tiLT5jc3VtID0gbnRvaHMoaSBeIDB4ZmZmZik7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9IVzsKKwlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBjcC0+ZGV2KTsKKwlyZXR1cm4gbGVuOworfQorCisKKy8qIHdlIGNhbiBoYW5kbGUgdXAgdG8gNjQgcnggZmxvd3MgYXQgYSB0aW1lLiB3ZSBkbyB0aGUgc2FtZSB0aGluZworICogYXMgbm9ucmVhc3NtIGV4Y2VwdCB0aGF0IHdlIGJhdGNoIHVwIHRoZSBidWZmZXJzLiAKKyAqIE5PVEU6IHdlIGN1cnJlbnRseSBqdXN0IHRyZWF0IGVhY2ggZmxvdyBhcyBhIGJ1bmNoIG9mIHBhY2tldHMgdGhhdAorICogICAgICAgd2UgcGFzcyB1cC4gYSBiZXR0ZXIgd2F5IHdvdWxkIGJlIHRvIGNvYWxlc2NlIHRoZSBwYWNrZXRzCisgKiAgICAgICBpbnRvIGEganVtYm8gcGFja2V0LiB0byBkbyB0aGF0LCB3ZSBuZWVkIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisgKiAgICAgICAxKSB0aGUgZmlyc3QgcGFja2V0IHdpbGwgaGF2ZSBhIGNsZWFuIHNwbGl0IGJldHdlZW4gaGVhZGVyIGFuZAorICogICAgICAgICAgZGF0YS4gc2F2ZSBib3RoLgorICogICAgICAgMikgZWFjaCB0aW1lIHRoZSBuZXh0IGZsb3cgcGFja2V0IGNvbWVzIGluLCBleHRlbmQgdGhlCisgKiAgICAgICAgICBkYXRhIGxlbmd0aCBhbmQgbWVyZ2UgdGhlIGNoZWNrc3Vtcy4KKyAqICAgICAgIDMpIG9uIGZsb3cgcmVsZWFzZSwgZml4IHVwIHRoZSBoZWFkZXIuCisgKiAgICAgICA0KSBtYWtlIHN1cmUgdGhlIGhpZ2hlciBsYXllciBkb2Vzbid0IGNhcmUuCisgKiBiZWNhdXNlIHBhY2tldHMgZ2V0IGNvYWxlc2NlZCwgd2Ugc2hvdWxkbid0IHJ1biBpbnRvIGZyYWdtZW50IGNvdW50IAorICogaXNzdWVzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2FzX3J4X2Zsb3dfcGt0KHN0cnVjdCBjYXMgKmNwLCBjb25zdCB1NjQgKndvcmRzLAorCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50IGZsb3dpZCA9IENBU19WQUwoUlhfQ09NUDNfRkxPV0lELCB3b3Jkc1syXSkgJiAoTl9SWF9GTE9XUyAtIDEpOworCXN0cnVjdCBza19idWZmX2hlYWQgKmZsb3cgPSAmY3AtPnJ4X2Zsb3dzW2Zsb3dpZF07CisJCisJLyogdGhpcyBpcyBwcm90ZWN0ZWQgYXQgYSBoaWdoZXIgbGF5ZXIsIHNvIG5vIG5lZWQgdG8gCisJICogZG8gYW55IGFkZGl0aW9uYWwgbG9ja2luZyBoZXJlLiBzdGljayB0aGUgYnVmZmVyCisJICogYXQgdGhlIGVuZC4KKwkgKi8KKwlfX3NrYl9pbnNlcnQoc2tiLCBmbG93LT5wcmV2LCAoc3RydWN0IHNrX2J1ZmYgKikgZmxvdywgZmxvdyk7CisJaWYgKHdvcmRzWzBdICYgUlhfQ09NUDFfUkVMRUFTRV9GTE9XKSB7CisJCXdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShmbG93KSkpIHsKKwkJCWNhc19za2JfcmVsZWFzZShza2IpOworCQl9CisJfQorfQorCisvKiBwdXQgcnggZGVzY3JpcHRvciBiYWNrIG9uIHJpbmcuIGlmIGEgYnVmZmVyIGlzIGluIHVzZSBieSBhIGhpZ2hlcgorICogbGF5ZXIsIHRoaXMgd2lsbCBuZWVkIHRvIHB1dCBpbiBhIHJlcGxhY2VtZW50LgorICovCitzdGF0aWMgdm9pZCBjYXNfcG9zdF9wYWdlKHN0cnVjdCBjYXMgKmNwLCBjb25zdCBpbnQgcmluZywgY29uc3QgaW50IGluZGV4KQoreworCWNhc19wYWdlX3QgKm5ldzsKKwlpbnQgZW50cnk7CisKKwllbnRyeSA9IGNwLT5yeF9vbGRbcmluZ107CisKKwluZXcgPSBjYXNfcGFnZV9zd2FwKGNwLCByaW5nLCBpbmRleCk7CisJY3AtPmluaXRfcnhkc1tyaW5nXVtlbnRyeV0uYnVmZmVyID0gY3B1X3RvX2xlNjQobmV3LT5kbWFfYWRkcik7CisJY3AtPmluaXRfcnhkc1tyaW5nXVtlbnRyeV0uaW5kZXggID0KKwkJY3B1X3RvX2xlNjQoQ0FTX0JBU0UoUlhfSU5ERVhfTlVNLCBpbmRleCkgfCAKKwkJCSAgICBDQVNfQkFTRShSWF9JTkRFWF9SSU5HLCByaW5nKSk7CisKKwllbnRyeSA9IFJYX0RFU0NfRU5UUlkocmluZywgZW50cnkgKyAxKTsKKwljcC0+cnhfb2xkW3JpbmddID0gZW50cnk7CisJCisJaWYgKGVudHJ5ICUgNCkKKwkJcmV0dXJuOworCisJaWYgKHJpbmcgPT0gMCkKKwkJd3JpdGVsKGVudHJ5LCBjcC0+cmVncyArIFJFR19SWF9LSUNLKTsKKwllbHNlIGlmICgoTl9SWF9ERVNDX1JJTkdTID4gMSkgJiYKKwkJIChjcC0+Y2FzX2ZsYWdzICYgQ0FTX0ZMQUdfUkVHX1BMVVMpKSAKKwkJd3JpdGVsKGVudHJ5LCBjcC0+cmVncyArIFJFR19QTFVTX1JYX0tJQ0sxKTsKK30KKworCisvKiBvbmx5IHdoZW4gdGhpbmdzIGFyZSBiYWQgKi8KK3N0YXRpYyBpbnQgY2FzX3Bvc3Rfcnhkc19yaW5nTihzdHJ1Y3QgY2FzICpjcCwgaW50IHJpbmcsIGludCBudW0pCit7CisJdW5zaWduZWQgaW50IGVudHJ5LCBsYXN0LCBjb3VudCwgcmVsZWFzZWQ7CisJaW50IGNsdXN0ZXI7CisJY2FzX3BhZ2VfdCAqKnBhZ2UgPSBjcC0+cnhfcGFnZXNbcmluZ107CisKKwllbnRyeSA9IGNwLT5yeF9vbGRbcmluZ107CisKKwlpZiAobmV0aWZfbXNnX2ludHIoY3ApKQorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJ4ZFslZF0gaW50ZXJydXB0LCBkb25lOiAlZFxuIiwKKwkJICAgICAgIGNwLT5kZXYtPm5hbWUsIHJpbmcsIGVudHJ5KTsKKworCWNsdXN0ZXIgPSAtMTsKKwljb3VudCA9IGVudHJ5ICYgMHgzOyAKKwlsYXN0ID0gUlhfREVTQ19FTlRSWShyaW5nLCBudW0gPyBlbnRyeSArIG51bSAtIDQ6IGVudHJ5IC0gNCk7CisJcmVsZWFzZWQgPSAwOworCXdoaWxlIChlbnRyeSAhPSBsYXN0KSB7CisJCS8qIG1ha2UgYSBuZXcgYnVmZmVyIGlmIGl0J3Mgc3RpbGwgaW4gdXNlICovCisJCWlmIChwYWdlX2NvdW50KHBhZ2VbZW50cnldLT5idWZmZXIpID4gMSkgeworCQkJY2FzX3BhZ2VfdCAqbmV3ID0gY2FzX3BhZ2VfZGVxdWV1ZShjcCk7CisJCQlpZiAoIW5ldykgeworCQkJCS8qIGxldCB0aGUgdGltZXIga25vdyB0aGF0IHdlIG5lZWQgdG8gCisJCQkJICogZG8gdGhpcyBhZ2FpbgorCQkJCSAqLworCQkJCWNwLT5jYXNfZmxhZ3MgfD0gQ0FTX0ZMQUdfUlhEX1BPU1QocmluZyk7CisJCQkJaWYgKCF0aW1lcl9wZW5kaW5nKCZjcC0+bGlua190aW1lcikpCisJCQkJCW1vZF90aW1lcigmY3AtPmxpbmtfdGltZXIsIGppZmZpZXMgKyAKKwkJCQkJCSAgQ0FTX0xJTktfRkFTVF9USU1FT1VUKTsKKwkJCQljcC0+cnhfb2xkW3JpbmddICA9IGVudHJ5OworCQkJCWNwLT5yeF9sYXN0W3JpbmddID0gbnVtID8gbnVtIC0gcmVsZWFzZWQgOiAwOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQkJc3Bpbl9sb2NrKCZjcC0+cnhfaW51c2VfbG9jayk7CisJCQlsaXN0X2FkZCgmcGFnZVtlbnRyeV0tPmxpc3QsICZjcC0+cnhfaW51c2VfbGlzdCk7CisJCQlzcGluX3VubG9jaygmY3AtPnJ4X2ludXNlX2xvY2spOworCQkJY3AtPmluaXRfcnhkc1tyaW5nXVtlbnRyeV0uYnVmZmVyID0gCisJCQkJY3B1X3RvX2xlNjQobmV3LT5kbWFfYWRkcik7CisJCQlwYWdlW2VudHJ5XSA9IG5ldzsKKwkJCQorCQl9CisKKwkJaWYgKCsrY291bnQgPT0gNCkgeworCQkJY2x1c3RlciA9IGVudHJ5OworCQkJY291bnQgPSAwOworCQl9CisJCXJlbGVhc2VkKys7CisJCWVudHJ5ID0gUlhfREVTQ19FTlRSWShyaW5nLCBlbnRyeSArIDEpOworCX0KKwljcC0+cnhfb2xkW3JpbmddID0gZW50cnk7CisKKwlpZiAoY2x1c3RlciA8IDApIAorCQlyZXR1cm4gMDsKKworCWlmIChyaW5nID09IDApCisJCXdyaXRlbChjbHVzdGVyLCBjcC0+cmVncyArIFJFR19SWF9LSUNLKTsKKwllbHNlIGlmICgoTl9SWF9ERVNDX1JJTkdTID4gMSkgJiYKKwkJIChjcC0+Y2FzX2ZsYWdzICYgQ0FTX0ZMQUdfUkVHX1BMVVMpKSAKKwkJd3JpdGVsKGNsdXN0ZXIsIGNwLT5yZWdzICsgUkVHX1BMVVNfUlhfS0lDSzEpOworCXJldHVybiAwOworfQorCisKKy8qIHByb2Nlc3MgYSBjb21wbGV0aW9uIHJpbmcuIHBhY2tldHMgYXJlIHNldCB1cCBpbiB0aHJlZSBiYXNpYyB3YXlzOgorICogc21hbGwgcGFja2V0czogc2hvdWxkIGJlIGNvcGllZCBoZWFkZXIgKyBkYXRhIGluIHNpbmdsZSBidWZmZXIuCisgKiBsYXJnZSBwYWNrZXRzOiBoZWFkZXIgYW5kIGRhdGEgaW4gYSBzaW5nbGUgYnVmZmVyLgorICogc3BsaXQgcGFja2V0czogaGVhZGVyIGluIGEgc2VwYXJhdGUgYnVmZmVyIGZyb20gZGF0YS4gCisgKiAgICAgICAgICAgICAgICBkYXRhIG1heSBiZSBpbiBtdWx0aXBsZSBwYWdlcy4gZGF0YSBtYXkgYmUgPiAyNTYKKyAqICAgICAgICAgICAgICAgIGJ5dGVzIGJ1dCBpbiBhIHNpbmdsZSBwYWdlLiAKKyAqCisgKiBOT1RFOiBSWCBwYWdlIHBvc3RpbmcgaXMgZG9uZSBpbiB0aGlzIHJvdXRpbmUgYXMgd2VsbC4gd2hpbGUgdGhlcmUncworICogICAgICAgdGhlIGNhcGFiaWxpdHkgb2YgdXNpbmcgbXVsdGlwbGUgUlggY29tcGxldGlvbiByaW5ncywgaXQgaXNuJ3QKKyAqICAgICAgIHJlYWxseSB3b3J0aHdoaWxlIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHRoZSBwYWdlIHBvc3Rpbmcgd2lsbAorICogICAgICAgZm9yY2Ugc2VyaWFsaXphdGlvbiBvbiB0aGUgc2luZ2xlIGRlc2NyaXB0b3IgcmluZy4gCisgKi8KK3N0YXRpYyBpbnQgY2FzX3J4X3JpbmdOKHN0cnVjdCBjYXMgKmNwLCBpbnQgcmluZywgaW50IGJ1ZGdldCkKK3sKKwlzdHJ1Y3QgY2FzX3J4X2NvbXAgKnJ4Y3MgPSBjcC0+aW5pdF9yeGNzW3JpbmddOworCWludCBlbnRyeSwgZHJvcHM7CisJaW50IG5wYWNrZXRzID0gMDsKKworCWlmIChuZXRpZl9tc2dfaW50cihjcCkpCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogcnhbJWRdIGludGVycnVwdCwgZG9uZTogJWQvJWRcbiIsCisJCSAgICAgICBjcC0+ZGV2LT5uYW1lLCByaW5nLAorCQkgICAgICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfUlhfQ09NUF9IRUFEKSwgCisJCSAgICAgICBjcC0+cnhfbmV3W3JpbmddKTsKKworCWVudHJ5ID0gY3AtPnJ4X25ld1tyaW5nXTsKKwlkcm9wcyA9IDA7CisJd2hpbGUgKDEpIHsKKwkJc3RydWN0IGNhc19yeF9jb21wICpyeGMgPSByeGNzICsgZW50cnk7CisJCXN0cnVjdCBza19idWZmICpza2I7CisJCWludCB0eXBlLCBsZW47CisJCXU2NCB3b3Jkc1s0XTsKKwkJaW50IGksIGRyaW5nOworCisJCXdvcmRzWzBdID0gbGU2NF90b19jcHUocnhjLT53b3JkMSk7CisJCXdvcmRzWzFdID0gbGU2NF90b19jcHUocnhjLT53b3JkMik7CisJCXdvcmRzWzJdID0gbGU2NF90b19jcHUocnhjLT53b3JkMyk7CisJCXdvcmRzWzNdID0gbGU2NF90b19jcHUocnhjLT53b3JkNCk7CisKKwkJLyogZG9uJ3QgdG91Y2ggaWYgc3RpbGwgb3duZWQgYnkgaHcgKi8KKwkJdHlwZSA9IENBU19WQUwoUlhfQ09NUDFfVFlQRSwgd29yZHNbMF0pOworCQlpZiAodHlwZSA9PSAwKQorCQkJYnJlYWs7CisKKwkJLyogaHcgaGFzbid0IGNsZWFyZWQgdGhlIHplcm8gYml0IHlldCAqLworCQlpZiAod29yZHNbM10gJiBSWF9DT01QNF9aRVJPKSB7CisJCQlicmVhazsKKwkJfQorCisJCS8qIGdldCBpbmZvIG9uIHRoZSBwYWNrZXQgKi8KKwkJaWYgKHdvcmRzWzNdICYgKFJYX0NPTVA0X0xFTl9NSVNNQVRDSCB8IFJYX0NPTVA0X0JBRCkpIHsKKwkJCXNwaW5fbG9jaygmY3AtPnN0YXRfbG9ja1tyaW5nXSk7CisJCQljcC0+bmV0X3N0YXRzW3JpbmddLnJ4X2Vycm9ycysrOworCQkJaWYgKHdvcmRzWzNdICYgUlhfQ09NUDRfTEVOX01JU01BVENIKQorCQkJCWNwLT5uZXRfc3RhdHNbcmluZ10ucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJaWYgKHdvcmRzWzNdICYgUlhfQ09NUDRfQkFEKQorCQkJCWNwLT5uZXRfc3RhdHNbcmluZ10ucnhfY3JjX2Vycm9ycysrOworCQkJc3Bpbl91bmxvY2soJmNwLT5zdGF0X2xvY2tbcmluZ10pOworCisJCQkvKiBXZSdsbCBqdXN0IHJldHVybiBpdCB0byBDYXNzaW5pLiAqLworCQlkcm9wX2l0OgorCQkJc3Bpbl9sb2NrKCZjcC0+c3RhdF9sb2NrW3JpbmddKTsKKwkJCSsrY3AtPm5ldF9zdGF0c1tyaW5nXS5yeF9kcm9wcGVkOworCQkJc3Bpbl91bmxvY2soJmNwLT5zdGF0X2xvY2tbcmluZ10pOworCQkJZ290byBuZXh0OworCQl9CisKKwkJbGVuID0gY2FzX3J4X3Byb2Nlc3NfcGt0KGNwLCByeGMsIGVudHJ5LCB3b3JkcywgJnNrYik7CisJCWlmIChsZW4gPCAwKSB7CisJCQkrK2Ryb3BzOworCQkJZ290byBkcm9wX2l0OworCQl9CisKKwkJLyogc2VlIGlmIGl0J3MgYSBmbG93IHJlLWFzc2VtYmx5IG9yIG5vdC4gdGhlIGRyaXZlcgorCQkgKiBpdHNlbGYgaGFuZGxlcyByZWxlYXNlIGJhY2sgdXAuCisJCSAqLworCQlpZiAoUlhfRE9OVF9CQVRDSCB8fCAodHlwZSA9PSAweDIpKSB7CisJCQkvKiBub24tcmVhc3NtOiB0aGVzZSBhbHdheXMgZ2V0IHJlbGVhc2VkICovCisJCQljYXNfc2tiX3JlbGVhc2Uoc2tiKTsgCisJCX0gZWxzZSB7CisJCQljYXNfcnhfZmxvd19wa3QoY3AsIHdvcmRzLCBza2IpOworCQl9CisKKwkJc3Bpbl9sb2NrKCZjcC0+c3RhdF9sb2NrW3JpbmddKTsKKwkJY3AtPm5ldF9zdGF0c1tyaW5nXS5yeF9wYWNrZXRzKys7CisJCWNwLT5uZXRfc3RhdHNbcmluZ10ucnhfYnl0ZXMgKz0gbGVuOworCQlzcGluX3VubG9jaygmY3AtPnN0YXRfbG9ja1tyaW5nXSk7CisJCWNwLT5kZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCisJbmV4dDoKKwkJbnBhY2tldHMrKzsKKworCQkvKiBzaG91bGQgaXQgYmUgcmVsZWFzZWQ/ICovCisJCWlmICh3b3Jkc1swXSAmIFJYX0NPTVAxX1JFTEVBU0VfSERSKSB7CisJCQlpID0gQ0FTX1ZBTChSWF9DT01QMl9IRFJfSU5ERVgsIHdvcmRzWzFdKTsKKwkJCWRyaW5nID0gQ0FTX1ZBTChSWF9JTkRFWF9SSU5HLCBpKTsKKwkJCWkgPSBDQVNfVkFMKFJYX0lOREVYX05VTSwgaSk7CisJCQljYXNfcG9zdF9wYWdlKGNwLCBkcmluZywgaSk7CisJCX0KKwkJCisJCWlmICh3b3Jkc1swXSAmIFJYX0NPTVAxX1JFTEVBU0VfREFUQSkgeworCQkJaSA9IENBU19WQUwoUlhfQ09NUDFfREFUQV9JTkRFWCwgd29yZHNbMF0pOworCQkJZHJpbmcgPSBDQVNfVkFMKFJYX0lOREVYX1JJTkcsIGkpOworCQkJaSA9IENBU19WQUwoUlhfSU5ERVhfTlVNLCBpKTsKKwkJCWNhc19wb3N0X3BhZ2UoY3AsIGRyaW5nLCBpKTsKKwkJfQorCisJCWlmICh3b3Jkc1swXSAmIFJYX0NPTVAxX1JFTEVBU0VfTkVYVCkgeworCQkJaSA9IENBU19WQUwoUlhfQ09NUDJfTkVYVF9JTkRFWCwgd29yZHNbMV0pOworCQkJZHJpbmcgPSBDQVNfVkFMKFJYX0lOREVYX1JJTkcsIGkpOworCQkJaSA9IENBU19WQUwoUlhfSU5ERVhfTlVNLCBpKTsKKwkJCWNhc19wb3N0X3BhZ2UoY3AsIGRyaW5nLCBpKTsKKwkJfQorCisJCS8qIHNraXAgdG8gdGhlIG5leHQgZW50cnkgKi8KKwkJZW50cnkgPSBSWF9DT01QX0VOVFJZKHJpbmcsIGVudHJ5ICsgMSArIAorCQkJCSAgICAgIENBU19WQUwoUlhfQ09NUDFfU0tJUCwgd29yZHNbMF0pKTsKKyNpZmRlZiBVU0VfTkFQSQorCQlpZiAoYnVkZ2V0ICYmIChucGFja2V0cyA+PSBidWRnZXQpKQorCQkJYnJlYWs7CisjZW5kaWYKKwl9CisJY3AtPnJ4X25ld1tyaW5nXSA9IGVudHJ5OworCisJaWYgKGRyb3BzKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogTWVtb3J5IHNxdWVlemUsIGRlZmVycmluZyBwYWNrZXQuXG4iLAorCQkgICAgICAgY3AtPmRldi0+bmFtZSk7CisJcmV0dXJuIG5wYWNrZXRzOworfQorCisKKy8qIHB1dCBjb21wbGV0aW9uIGVudHJpZXMgYmFjayBvbiB0aGUgcmluZyAqLworc3RhdGljIHZvaWQgY2FzX3Bvc3Rfcnhjc19yaW5nTihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBjYXMgKmNwLCBpbnQgcmluZykKK3sKKwlzdHJ1Y3QgY2FzX3J4X2NvbXAgKnJ4YyA9IGNwLT5pbml0X3J4Y3NbcmluZ107CisJaW50IGxhc3QsIGVudHJ5OworCisJbGFzdCA9IGNwLT5yeF9jdXJbcmluZ107CisJZW50cnkgPSBjcC0+cnhfbmV3W3JpbmddOyAKKwlpZiAobmV0aWZfbXNnX2ludHIoY3ApKQorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJ4Y1slZF0gaW50ZXJydXB0LCBkb25lOiAlZC8lZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgcmluZywgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfUlhfQ09NUF9IRUFEKSwKKwkJICAgICAgIGVudHJ5KTsKKwkKKwkvKiB6ZXJvIGFuZCByZS1tYXJrIGRlc2NyaXB0b3JzICovCisJd2hpbGUgKGxhc3QgIT0gZW50cnkpIHsKKwkJY2FzX3J4Y19pbml0KHJ4YyArIGxhc3QpOworCQlsYXN0ID0gUlhfQ09NUF9FTlRSWShyaW5nLCBsYXN0ICsgMSk7CisJfQorCWNwLT5yeF9jdXJbcmluZ10gPSBsYXN0OworCisJaWYgKHJpbmcgPT0gMCkKKwkJd3JpdGVsKGxhc3QsIGNwLT5yZWdzICsgUkVHX1JYX0NPTVBfVEFJTCk7CisJZWxzZSBpZiAoY3AtPmNhc19mbGFncyAmIENBU19GTEFHX1JFR19QTFVTKSAKKwkJd3JpdGVsKGxhc3QsIGNwLT5yZWdzICsgUkVHX1BMVVNfUlhfQ09NUE5fVEFJTChyaW5nKSk7Cit9CisKKworCisvKiBjYXNzaW5pIGNhbiB1c2UgYWxsIGZvdXIgUENJIGludGVycnVwdHMgZm9yIHRoZSBjb21wbGV0aW9uIHJpbmcuIAorICogcmluZ3MgMyBhbmQgNCBhcmUgaWRlbnRpY2FsCisgKi8KKyNpZiBkZWZpbmVkKFVTRV9QQ0lfSU5UQykgfHwgZGVmaW5lZChVU0VfUENJX0lOVEQpCitzdGF0aWMgaW5saW5lIHZvaWQgY2FzX2hhbmRsZV9pcnFOKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIAorCQkJCSAgIHN0cnVjdCBjYXMgKmNwLCBjb25zdCB1MzIgc3RhdHVzLAorCQkJCSAgIGNvbnN0IGludCByaW5nKQoreworCWlmIChzdGF0dXMgJiAoSU5UUl9SWF9DT01QX0ZVTExfQUxUIHwgSU5UUl9SWF9DT01QX0FGX0FMVCkpIAorCQljYXNfcG9zdF9yeGNzX3JpbmdOKGRldiwgY3AsIHJpbmcpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgY2FzX2ludGVycnVwdE4oaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOworCXN0cnVjdCBjYXMgKmNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByaW5nOworCXUzMiBzdGF0dXMgPSByZWFkbChjcC0+cmVncyArIFJFR19QTFVTX0lOVFJOX1NUQVRVUyhyaW5nKSk7CisKKwkvKiBjaGVjayBmb3Igc2hhcmVkIGlycSAqLworCWlmIChzdGF0dXMgPT0gMCkKKwkJcmV0dXJuIElSUV9OT05FOworCisJcmluZyA9IChpcnEgPT0gY3AtPnBjaV9pcnFfSU5UQykgPyAyIDogMzsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3AtPmxvY2ssIGZsYWdzKTsKKwlpZiAoc3RhdHVzICYgSU5UUl9SWF9ET05FX0FMVCkgeyAvKiBoYW5kbGUgcnggc2VwYXJhdGVseSAqLworI2lmZGVmIFVTRV9OQVBJCisJCWNhc19tYXNrX2ludHIoY3ApOworCQluZXRpZl9yeF9zY2hlZHVsZShkZXYpOworI2Vsc2UKKwkJY2FzX3J4X3JpbmdOKGNwLCByaW5nLCAwKTsKKyNlbmRpZgorCQlzdGF0dXMgJj0gfklOVFJfUlhfRE9ORV9BTFQ7CisJfQorCisJaWYgKHN0YXR1cykKKwkJY2FzX2hhbmRsZV9pcnFOKGRldiwgY3AsIHN0YXR1cywgcmluZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3AtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisjZW5kaWYKKworI2lmZGVmIFVTRV9QQ0lfSU5UQgorLyogZXZlcnl0aGluZyBidXQgcnggcGFja2V0cyAqLworc3RhdGljIGlubGluZSB2b2lkIGNhc19oYW5kbGVfaXJxMShzdHJ1Y3QgY2FzICpjcCwgY29uc3QgdTMyIHN0YXR1cykKK3sKKwlpZiAoc3RhdHVzICYgSU5UUl9SWF9CVUZfVU5BVkFJTF8xKSB7CisJCS8qIEZyYW1lIGFycml2ZWQsIG5vIGZyZWUgUlggYnVmZmVycyBhdmFpbGFibGUuIAorCQkgKiBOT1RFOiB3ZSBjYW4gZ2V0IHRoaXMgb24gYSBsaW5rIHRyYW5zaXRpb24uICovCisJCWNhc19wb3N0X3J4ZHNfcmluZ04oY3AsIDEsIDApOworCQlzcGluX2xvY2soJmNwLT5zdGF0X2xvY2tbMV0pOworCQljcC0+bmV0X3N0YXRzWzFdLnJ4X2Ryb3BwZWQrKzsKKwkJc3Bpbl91bmxvY2soJmNwLT5zdGF0X2xvY2tbMV0pOworCX0KKworCWlmIChzdGF0dXMgJiBJTlRSX1JYX0JVRl9BRV8xKSAKKwkJY2FzX3Bvc3Rfcnhkc19yaW5nTihjcCwgMSwgUlhfREVTQ19SSU5HTl9TSVpFKDEpIC0gCisJCQkJICAgIFJYX0FFX0ZSRUVOX1ZBTCgxKSk7CisKKwlpZiAoc3RhdHVzICYgKElOVFJfUlhfQ09NUF9BRiB8IElOVFJfUlhfQ09NUF9GVUxMKSkKKwkJY2FzX3Bvc3Rfcnhjc19yaW5nTihjcCwgMSk7Cit9CisKKy8qIHJpbmcgMiBoYW5kbGVzIGEgZmV3IG1vcmUgZXZlbnRzIHRoYW4gMyBhbmQgNCAqLworc3RhdGljIGlycXJldHVybl90IGNhc19pbnRlcnJ1cHQxKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKKwlzdHJ1Y3QgY2FzICpjcCA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgc3RhdHVzID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfUExVU19JTlRSTl9TVEFUVVMoMSkpOworCisJLyogY2hlY2sgZm9yIHNoYXJlZCBpbnRlcnJ1cHQgKi8KKwlpZiAoc3RhdHVzID09IDApCisJCXJldHVybiBJUlFfTk9ORTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjcC0+bG9jaywgZmxhZ3MpOworCWlmIChzdGF0dXMgJiBJTlRSX1JYX0RPTkVfQUxUKSB7IC8qIGhhbmRsZSByeCBzZXBhcmF0ZWx5ICovCisjaWZkZWYgVVNFX05BUEkKKwkJY2FzX21hc2tfaW50cihjcCk7CisJCW5ldGlmX3J4X3NjaGVkdWxlKGRldik7CisjZWxzZQorCQljYXNfcnhfcmluZ04oY3AsIDEsIDApOworI2VuZGlmCisJCXN0YXR1cyAmPSB+SU5UUl9SWF9ET05FX0FMVDsKKwl9CisJaWYgKHN0YXR1cykKKwkJY2FzX2hhbmRsZV9pcnExKGNwLCBzdGF0dXMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYXNfaGFuZGxlX2lycShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGNhcyAqY3AsIGNvbnN0IHUzMiBzdGF0dXMpCit7CisJLyogaG91c2VrZWVwaW5nIGludGVycnVwdHMgKi8KKwlpZiAoc3RhdHVzICYgSU5UUl9FUlJPUl9NQVNLKQorCQljYXNfYWJub3JtYWxfaXJxKGRldiwgY3AsIHN0YXR1cyk7CisKKwlpZiAoc3RhdHVzICYgSU5UUl9SWF9CVUZfVU5BVkFJTCkgeworCQkvKiBGcmFtZSBhcnJpdmVkLCBubyBmcmVlIFJYIGJ1ZmZlcnMgYXZhaWxhYmxlLiAKKwkJICogTk9URTogd2UgY2FuIGdldCB0aGlzIG9uIGEgbGluayB0cmFuc2l0aW9uLgorCQkgKi8KKwkJY2FzX3Bvc3Rfcnhkc19yaW5nTihjcCwgMCwgMCk7CisJCXNwaW5fbG9jaygmY3AtPnN0YXRfbG9ja1swXSk7CisJCWNwLT5uZXRfc3RhdHNbMF0ucnhfZHJvcHBlZCsrOworCQlzcGluX3VubG9jaygmY3AtPnN0YXRfbG9ja1swXSk7CisJfSBlbHNlIGlmIChzdGF0dXMgJiBJTlRSX1JYX0JVRl9BRSkgeworCQljYXNfcG9zdF9yeGRzX3JpbmdOKGNwLCAwLCBSWF9ERVNDX1JJTkdOX1NJWkUoMCkgLQorCQkJCSAgICBSWF9BRV9GUkVFTl9WQUwoMCkpOworCX0KKworCWlmIChzdGF0dXMgJiAoSU5UUl9SWF9DT01QX0FGIHwgSU5UUl9SWF9DT01QX0ZVTEwpKQorCQljYXNfcG9zdF9yeGNzX3JpbmdOKGRldiwgY3AsIDApOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgY2FzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7CisJc3RydWN0IGNhcyAqY3AgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHN0YXR1cyA9IHJlYWRsKGNwLT5yZWdzICsgUkVHX0lOVFJfU1RBVFVTKTsKKworCWlmIChzdGF0dXMgPT0gMCkKKwkJcmV0dXJuIElSUV9OT05FOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNwLT5sb2NrLCBmbGFncyk7CisJaWYgKHN0YXR1cyAmIChJTlRSX1RYX0FMTCB8IElOVFJfVFhfSU5UTUUpKSB7CisJCWNhc190eChkZXYsIGNwLCBzdGF0dXMpOworCQlzdGF0dXMgJj0gfihJTlRSX1RYX0FMTCB8IElOVFJfVFhfSU5UTUUpOworCX0KKworCWlmIChzdGF0dXMgJiBJTlRSX1JYX0RPTkUpIHsKKyNpZmRlZiBVU0VfTkFQSQorCQljYXNfbWFza19pbnRyKGNwKTsKKwkJbmV0aWZfcnhfc2NoZWR1bGUoZGV2KTsKKyNlbHNlCisJCWNhc19yeF9yaW5nTihjcCwgMCwgMCk7CisjZW5kaWYKKwkJc3RhdHVzICY9IH5JTlRSX1JYX0RPTkU7CisJfQorCisJaWYgKHN0YXR1cykKKwkJY2FzX2hhbmRsZV9pcnEoZGV2LCBjcCwgc3RhdHVzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcC0+bG9jaywgZmxhZ3MpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworCisjaWZkZWYgVVNFX05BUEkKK3N0YXRpYyBpbnQgY2FzX3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50ICpidWRnZXQpCit7CisJc3RydWN0IGNhcyAqY3AgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBpLCBlbmFibGVfaW50ciwgdG9kbywgY3JlZGl0czsKKwl1MzIgc3RhdHVzID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfSU5UUl9TVEFUVVMpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3AtPmxvY2ssIGZsYWdzKTsKKwljYXNfdHgoZGV2LCBjcCwgc3RhdHVzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcC0+bG9jaywgZmxhZ3MpOworCisJLyogTkFQSSByeCBwYWNrZXRzLiB3ZSBzcHJlYWQgdGhlIGNyZWRpdHMgYWNyb3NzIGFsbCBvZiB0aGUKKwkgKiByeGMgcmluZ3MKKwkgKi8KKwl0b2RvID0gbWluKCpidWRnZXQsIGRldi0+cXVvdGEpOworCisJLyogdG8gbWFrZSBzdXJlIHdlJ3JlIGZhaXIgd2l0aCB0aGUgd29yayB3ZSBsb29wIHRocm91Z2ggZWFjaAorCSAqIHJpbmcgTl9SWF9DT01QX1JJTkcgdGltZXMgd2l0aCBhIHJlcXVlc3Qgb2YgCisJICogdG9kbyAvIE5fUlhfQ09NUF9SSU5HUworCSAqLworCWVuYWJsZV9pbnRyID0gMTsKKwljcmVkaXRzID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgTl9SWF9DT01QX1JJTkdTOyBpKyspIHsKKwkJaW50IGo7CisJCWZvciAoaiA9IDA7IGogPCBOX1JYX0NPTVBfUklOR1M7IGorKykgeworCQkJY3JlZGl0cyArPSBjYXNfcnhfcmluZ04oY3AsIGosIHRvZG8gLyBOX1JYX0NPTVBfUklOR1MpOworCQkJaWYgKGNyZWRpdHMgPj0gdG9kbykgeworCQkJCWVuYWJsZV9pbnRyID0gMDsKKwkJCQlnb3RvIHJ4X2NvbXA7CisJCQl9CisJCX0KKwl9CisKK3J4X2NvbXA6CisJKmJ1ZGdldCAgICAtPSBjcmVkaXRzOworCWRldi0+cXVvdGEgLT0gY3JlZGl0czsKKworCS8qIGZpbmFsIHJ4IGNvbXBsZXRpb24gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3AtPmxvY2ssIGZsYWdzKTsKKwlpZiAoc3RhdHVzKQorCQljYXNfaGFuZGxlX2lycShkZXYsIGNwLCBzdGF0dXMpOworCisjaWZkZWYgVVNFX1BDSV9JTlRCCisJaWYgKE5fUlhfQ09NUF9SSU5HUyA+IDEpIHsKKwkJc3RhdHVzID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfUExVU19JTlRSTl9TVEFUVVMoMSkpOworCQlpZiAoc3RhdHVzKQorCQkJY2FzX2hhbmRsZV9pcnExKGRldiwgY3AsIHN0YXR1cyk7CisJfQorI2VuZGlmCisKKyNpZmRlZiBVU0VfUENJX0lOVEMKKwlpZiAoTl9SWF9DT01QX1JJTkdTID4gMikgeworCQlzdGF0dXMgPSByZWFkbChjcC0+cmVncyArIFJFR19QTFVTX0lOVFJOX1NUQVRVUygyKSk7CisJCWlmIChzdGF0dXMpCisJCQljYXNfaGFuZGxlX2lycU4oZGV2LCBjcCwgc3RhdHVzLCAyKTsKKwl9CisjZW5kaWYKKworI2lmZGVmIFVTRV9QQ0lfSU5URAorCWlmIChOX1JYX0NPTVBfUklOR1MgPiAzKSB7CisJCXN0YXR1cyA9IHJlYWRsKGNwLT5yZWdzICsgUkVHX1BMVVNfSU5UUk5fU1RBVFVTKDMpKTsKKwkJaWYgKHN0YXR1cykKKwkJCWNhc19oYW5kbGVfaXJxTihkZXYsIGNwLCBzdGF0dXMsIDMpOworCX0KKyNlbmRpZgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwLT5sb2NrLCBmbGFncyk7CisJaWYgKGVuYWJsZV9pbnRyKSB7CisJCW5ldGlmX3J4X2NvbXBsZXRlKGRldik7CisJCWNhc191bm1hc2tfaW50cihjcCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKK3N0YXRpYyB2b2lkIGNhc19uZXRwb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGNhcyAqY3AgPSBuZXRkZXZfcHJpdihkZXYpOworCisJY2FzX2Rpc2FibGVfaXJxKGNwLCAwKTsKKwljYXNfaW50ZXJydXB0KGNwLT5wZGV2LT5pcnEsIGRldiwgTlVMTCk7CisJY2FzX2VuYWJsZV9pcnEoY3AsIDApOworCisjaWZkZWYgVVNFX1BDSV9JTlRCCisJaWYgKE5fUlhfQ09NUF9SSU5HUyA+IDEpIHsKKwkJLyogY2FzX2ludGVycnVwdDEoKTsgKi8KKwl9CisjZW5kaWYKKyNpZmRlZiBVU0VfUENJX0lOVEMKKwlpZiAoTl9SWF9DT01QX1JJTkdTID4gMikgeworCQkvKiBjYXNfaW50ZXJydXB0TigpOyAqLworCX0KKyNlbmRpZgorI2lmZGVmIFVTRV9QQ0lfSU5URAorCWlmIChOX1JYX0NPTVBfUklOR1MgPiAzKSB7CisJCS8qIGNhc19pbnRlcnJ1cHROKCk7ICovCisJfQorI2VuZGlmCit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgY2FzX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY2FzICpjcCA9IG5ldGRldl9wcml2KGRldik7CisKKwlwcmludGsoS0VSTl9FUlIgIiVzOiB0cmFuc21pdCB0aW1lZCBvdXQsIHJlc2V0dGluZ1xuIiwgZGV2LT5uYW1lKTsKKwlpZiAoIWNwLT5od19ydW5uaW5nKSB7CisJCXByaW50aygiJXM6IGhybS4uIGh3IG5vdCBydW5uaW5nIVxuIiwgZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCXByaW50ayhLRVJOX0VSUiAiJXM6IE1JRl9TVEFURVslMDh4XVxuIiwKKwkgICAgICAgZGV2LT5uYW1lLCByZWFkbChjcC0+cmVncyArIFJFR19NSUZfU1RBVEVfTUFDSElORSkpOworCisJcHJpbnRrKEtFUk5fRVJSICIlczogTUFDX1NUQVRFWyUwOHhdXG4iLAorCSAgICAgICBkZXYtPm5hbWUsIHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19TVEFURV9NQUNISU5FKSk7CisKKwlwcmludGsoS0VSTl9FUlIgIiVzOiBUWF9TVEFURVslMDh4OiUwOHg6JTA4eF0gIgorCSAgICAgICAiRklGT1slMDh4OiUwOHg6JTA4eF0gU00xWyUwOHhdIFNNMlslMDh4XVxuIiwKKwkgICAgICAgZGV2LT5uYW1lLAorCSAgICAgICByZWFkbChjcC0+cmVncyArIFJFR19UWF9DRkcpLAorCSAgICAgICByZWFkbChjcC0+cmVncyArIFJFR19NQUNfVFhfU1RBVFVTKSwKKwkgICAgICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX1RYX0NGRyksCisJICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX1RYX0ZJRk9fUEtUX0NOVCksCisJICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX1RYX0ZJRk9fV1JJVEVfUFRSKSwKKwkgICAgICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfVFhfRklGT19SRUFEX1BUUiksCisJICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX1RYX1NNXzEpLAorCSAgICAgICByZWFkbChjcC0+cmVncyArIFJFR19UWF9TTV8yKSk7CisKKwlwcmludGsoS0VSTl9FUlIgIiVzOiBSWF9TVEFURVslMDh4OiUwOHg6JTA4eF1cbiIsCisJICAgICAgIGRldi0+bmFtZSwKKwkgICAgICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfUlhfQ0ZHKSwKKwkgICAgICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX1JYX1NUQVRVUyksCisJICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19SWF9DRkcpKTsKKworCXByaW50ayhLRVJOX0VSUiAiJXM6IEhQX1NUQVRFWyUwOHg6JTA4eDolMDh4OiUwOHhdXG4iLAorCSAgICAgICBkZXYtPm5hbWUsCisJICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX0hQX1NUQVRFX01BQ0hJTkUpLAorCSAgICAgICByZWFkbChjcC0+cmVncyArIFJFR19IUF9TVEFUVVMwKSwKKwkgICAgICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfSFBfU1RBVFVTMSksCisJICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX0hQX1NUQVRVUzIpKTsKKworI2lmIDEKKwlhdG9taWNfaW5jKCZjcC0+cmVzZXRfdGFza19wZW5kaW5nKTsKKwlhdG9taWNfaW5jKCZjcC0+cmVzZXRfdGFza19wZW5kaW5nX2FsbCk7CisJc2NoZWR1bGVfd29yaygmY3AtPnJlc2V0X3Rhc2spOworI2Vsc2UKKwlhdG9taWNfc2V0KCZjcC0+cmVzZXRfdGFza19wZW5kaW5nLCBDQVNfUkVTRVRfQUxMKTsKKwlzY2hlZHVsZV93b3JrKCZjcC0+cmVzZXRfdGFzayk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBpbnQgY2FzX2ludG1lKGludCByaW5nLCBpbnQgZW50cnkpCit7CisJLyogQWxnb3JpdGhtOiBJUlEgZXZlcnkgMS8yIG9mIGRlc2NyaXB0b3JzLiAqLworCWlmICghKGVudHJ5ICYgKChUWF9ERVNDX1JJTkdOX1NJWkUocmluZykgPj4gMSkgLSAxKSkpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIGNhc193cml0ZV90eGQoc3RydWN0IGNhcyAqY3AsIGludCByaW5nLCBpbnQgZW50cnksCisJCQkgIGRtYV9hZGRyX3QgbWFwcGluZywgaW50IGxlbiwgdTY0IGN0cmwsIGludCBsYXN0KQoreworCXN0cnVjdCBjYXNfdHhfZGVzYyAqdHhkID0gY3AtPmluaXRfdHhkc1tyaW5nXSArIGVudHJ5OworCisJY3RybCB8PSBDQVNfQkFTRShUWF9ERVNDX0JVRkxFTiwgbGVuKTsKKwlpZiAoY2FzX2ludG1lKHJpbmcsIGVudHJ5KSkKKwkJY3RybCB8PSBUWF9ERVNDX0lOVE1FOworCWlmIChsYXN0KQorCQljdHJsIHw9IFRYX0RFU0NfRU9GOworCXR4ZC0+Y29udHJvbCA9IGNwdV90b19sZTY0KGN0cmwpOworCXR4ZC0+YnVmZmVyID0gY3B1X3RvX2xlNjQobWFwcGluZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqdHhfdGlueV9idWYoc3RydWN0IGNhcyAqY3AsIGNvbnN0IGludCByaW5nLCAKKwkJCQljb25zdCBpbnQgZW50cnkpCit7CisJcmV0dXJuIGNwLT50eF90aW55X2J1ZnNbcmluZ10gKyBUWF9USU5ZX0JVRl9MRU4qZW50cnk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCB0eF90aW55X21hcChzdHJ1Y3QgY2FzICpjcCwgY29uc3QgaW50IHJpbmcsIAorCQkJCSAgICAgY29uc3QgaW50IGVudHJ5LCBjb25zdCBpbnQgdGVudHJ5KQoreworCWNwLT50eF90aW55X3VzZVtyaW5nXVt0ZW50cnldLm5idWZzKys7CisJY3AtPnR4X3RpbnlfdXNlW3JpbmddW2VudHJ5XS51c2VkID0gMTsKKwlyZXR1cm4gY3AtPnR4X3RpbnlfZHZtYVtyaW5nXSArIFRYX1RJTllfQlVGX0xFTiplbnRyeTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY2FzX3htaXRfdHhfcmluZ04oc3RydWN0IGNhcyAqY3AsIGludCByaW5nLCAKKwkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY3AtPmRldjsKKwlpbnQgZW50cnksIG5yX2ZyYWdzLCBmcmFnLCB0YWJvcnQsIHRlbnRyeTsKKwlkbWFfYWRkcl90IG1hcHBpbmc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1NjQgY3RybDsKKwl1MzIgbGVuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNwLT50eF9sb2NrW3JpbmddLCBmbGFncyk7CisKKwkvKiBUaGlzIGlzIGEgaGFyZCBlcnJvciwgbG9nIGl0LiAqLworCWlmIChUWF9CVUZGU19BVkFJTChjcCwgcmluZykgPD0gCisJICAgIENBU19UQUJPUlQoY3ApKihza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMSkpIHsKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcC0+dHhfbG9ja1tyaW5nXSwgZmxhZ3MpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogQlVHISBUeCBSaW5nIGZ1bGwgd2hlbiAiCisJCSAgICAgICAicXVldWUgYXdha2UhXG4iLCBkZXYtPm5hbWUpOworCQlyZXR1cm4gMTsKKwl9CisKKwljdHJsID0gMDsKKwlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcpIHsKKwkJdTY0IGNzdW1fc3RhcnRfb2ZmLCBjc3VtX3N0dWZmX29mZjsKKworCQljc3VtX3N0YXJ0X29mZiA9ICh1NjQpIChza2ItPmgucmF3IC0gc2tiLT5kYXRhKTsKKwkJY3N1bV9zdHVmZl9vZmYgPSAodTY0KSAoKHNrYi0+aC5yYXcgKyBza2ItPmNzdW0pIC0gc2tiLT5kYXRhKTsKKworCQljdHJsID0gIFRYX0RFU0NfQ1NVTV9FTiB8IAorCQkJQ0FTX0JBU0UoVFhfREVTQ19DU1VNX1NUQVJULCBjc3VtX3N0YXJ0X29mZikgfAorCQkJQ0FTX0JBU0UoVFhfREVTQ19DU1VNX1NUVUZGLCBjc3VtX3N0dWZmX29mZik7CisJfQorCisJZW50cnkgPSBjcC0+dHhfbmV3W3JpbmddOworCWNwLT50eF9za2JzW3JpbmddW2VudHJ5XSA9IHNrYjsKKworCW5yX2ZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKwlsZW4gPSBza2JfaGVhZGxlbihza2IpOworCW1hcHBpbmcgPSBwY2lfbWFwX3BhZ2UoY3AtPnBkZXYsIHZpcnRfdG9fcGFnZShza2ItPmRhdGEpLAorCQkJICAgICAgIG9mZnNldF9pbl9wYWdlKHNrYi0+ZGF0YSksIGxlbiwKKwkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKKworCXRlbnRyeSA9IGVudHJ5OworCXRhYm9ydCA9IGNhc19jYWxjX3RhYm9ydChjcCwgKHVuc2lnbmVkIGxvbmcpIHNrYi0+ZGF0YSwgbGVuKTsKKwlpZiAodW5saWtlbHkodGFib3J0KSkgeworCQkvKiBOT1RFOiBsZW4gaXMgYWx3YXlzID4gIHRhYm9ydCAqLworCQljYXNfd3JpdGVfdHhkKGNwLCByaW5nLCBlbnRyeSwgbWFwcGluZywgbGVuIC0gdGFib3J0LCAKKwkJCSAgICAgIGN0cmwgfCBUWF9ERVNDX1NPRiwgMCk7CisJCWVudHJ5ID0gVFhfREVTQ19ORVhUKHJpbmcsIGVudHJ5KTsKKworCQltZW1jcHkodHhfdGlueV9idWYoY3AsIHJpbmcsIGVudHJ5KSwgc2tiLT5kYXRhICsgCisJCSAgICAgICBsZW4gLSB0YWJvcnQsIHRhYm9ydCk7CisJCW1hcHBpbmcgPSB0eF90aW55X21hcChjcCwgcmluZywgZW50cnksIHRlbnRyeSk7CisJCWNhc193cml0ZV90eGQoY3AsIHJpbmcsIGVudHJ5LCBtYXBwaW5nLCB0YWJvcnQsIGN0cmwsCisJCQkgICAgICAobnJfZnJhZ3MgPT0gMCkpOworCX0gZWxzZSB7CisJCWNhc193cml0ZV90eGQoY3AsIHJpbmcsIGVudHJ5LCBtYXBwaW5nLCBsZW4sIGN0cmwgfCAKKwkJCSAgICAgIFRYX0RFU0NfU09GLCAobnJfZnJhZ3MgPT0gMCkpOworCX0KKwllbnRyeSA9IFRYX0RFU0NfTkVYVChyaW5nLCBlbnRyeSk7CisKKwlmb3IgKGZyYWcgPSAwOyBmcmFnIDwgbnJfZnJhZ3M7IGZyYWcrKykgeworCQlza2JfZnJhZ190ICpmcmFncCA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ZyYWddOworCisJCWxlbiA9IGZyYWdwLT5zaXplOworCQltYXBwaW5nID0gcGNpX21hcF9wYWdlKGNwLT5wZGV2LCBmcmFncC0+cGFnZSwKKwkJCQkgICAgICAgZnJhZ3AtPnBhZ2Vfb2Zmc2V0LCBsZW4sCisJCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCisJCXRhYm9ydCA9IGNhc19jYWxjX3RhYm9ydChjcCwgZnJhZ3AtPnBhZ2Vfb2Zmc2V0LCBsZW4pOworCQlpZiAodW5saWtlbHkodGFib3J0KSkgeworCQkJdm9pZCAqYWRkcjsKKworCQkJLyogTk9URTogbGVuIGlzIGFsd2F5cyA+IHRhYm9ydCAqLworCQkJY2FzX3dyaXRlX3R4ZChjcCwgcmluZywgZW50cnksIG1hcHBpbmcsIGxlbiAtIHRhYm9ydCwKKwkJCQkgICAgICBjdHJsLCAwKTsKKwkJCWVudHJ5ID0gVFhfREVTQ19ORVhUKHJpbmcsIGVudHJ5KTsKKwkJCQorCQkJYWRkciA9IGNhc19wYWdlX21hcChmcmFncC0+cGFnZSk7CisJCQltZW1jcHkodHhfdGlueV9idWYoY3AsIHJpbmcsIGVudHJ5KSwKKwkJCSAgICAgICBhZGRyICsgZnJhZ3AtPnBhZ2Vfb2Zmc2V0ICsgbGVuIC0gdGFib3J0LCAKKwkJCSAgICAgICB0YWJvcnQpOworCQkJY2FzX3BhZ2VfdW5tYXAoYWRkcik7CisJCQltYXBwaW5nID0gdHhfdGlueV9tYXAoY3AsIHJpbmcsIGVudHJ5LCB0ZW50cnkpOworCQkJbGVuICAgICA9IHRhYm9ydDsKKwkJfQorCisJCWNhc193cml0ZV90eGQoY3AsIHJpbmcsIGVudHJ5LCBtYXBwaW5nLCBsZW4sIGN0cmwsCisJCQkgICAgICAoZnJhZyArIDEgPT0gbnJfZnJhZ3MpKTsKKwkJZW50cnkgPSBUWF9ERVNDX05FWFQocmluZywgZW50cnkpOworCX0KKworCWNwLT50eF9uZXdbcmluZ10gPSBlbnRyeTsKKwlpZiAoVFhfQlVGRlNfQVZBSUwoY3AsIHJpbmcpIDw9IENBU19UQUJPUlQoY3ApKihNQVhfU0tCX0ZSQUdTICsgMSkpCisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCWlmIChuZXRpZl9tc2dfdHhfcXVldWVkKGNwKSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eFslZF0gcXVldWVkLCBzbG90ICVkLCBza2JsZW4gJWQsICIKKwkJICAgICAgICJhdmFpbCAlZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgcmluZywgZW50cnksIHNrYi0+bGVuLCAKKwkJICAgICAgIFRYX0JVRkZTX0FWQUlMKGNwLCByaW5nKSk7CisJd3JpdGVsKGVudHJ5LCBjcC0+cmVncyArIFJFR19UWF9LSUNLTihyaW5nKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3AtPnR4X2xvY2tbcmluZ10sIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30gCisKK3N0YXRpYyBpbnQgY2FzX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY2FzICpjcCA9IG5ldGRldl9wcml2KGRldik7CisKKwkvKiB0aGlzIGlzIG9ubHkgdXNlZCBhcyBhIGxvYWQtYmFsYW5jaW5nIGhpbnQsIHNvIGl0IGRvZXNuJ3QKKwkgKiBuZWVkIHRvIGJlIFNNUCBzYWZlCisJICovCisJc3RhdGljIGludCByaW5nOyAKKworCXNrYiA9IHNrYl9wYWR0byhza2IsIGNwLT5taW5fZnJhbWVfc2l6ZSk7CisJaWYgKCFza2IpCisJCXJldHVybiAwOworCisJLyogWFhYOiB3ZSBuZWVkIHNvbWUgaGlnaGVyLWxldmVsIFFvUyBob29rcyB0byBzdGVlciBwYWNrZXRzIHRvCisJICogICAgICBpbmRpdmlkdWFsIHF1ZXVlcy4KKwkgKi8KKwlpZiAoY2FzX3htaXRfdHhfcmluZ04oY3AsIHJpbmcrKyAmIE5fVFhfUklOR1NfTUFTSywgc2tiKSkKKwkJcmV0dXJuIDE7CisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNhc19pbml0X3R4X2RtYShzdHJ1Y3QgY2FzICpjcCkKK3sKKwl1NjQgZGVzY19kbWEgPSBjcC0+YmxvY2tfZHZtYTsKKwl1bnNpZ25lZCBsb25nIG9mZjsKKwl1MzIgdmFsOworCWludCBpOworCisJLyogc2V0IHVwIHR4IGNvbXBsZXRpb24gd3JpdGViYWNrIHJlZ2lzdGVycy4gbXVzdCBiZSA4LWJ5dGUgYWxpZ25lZCAqLworI2lmZGVmIFVTRV9UWF9DT01QV0IKKwlvZmYgPSBvZmZzZXRvZihzdHJ1Y3QgY2FzX2luaXRfYmxvY2ssIHR4X2NvbXB3Yik7CisJd3JpdGVsKChkZXNjX2RtYSArIG9mZikgPj4gMzIsIGNwLT5yZWdzICsgUkVHX1RYX0NPTVBXQl9EQl9ISSk7CisJd3JpdGVsKChkZXNjX2RtYSArIG9mZikgJiAweGZmZmZmZmZmLCBjcC0+cmVncyArIFJFR19UWF9DT01QV0JfREJfTE9XKTsKKyNlbmRpZgorCisJLyogZW5hYmxlIGNvbXBsZXRpb24gd3JpdGViYWNrcywgZW5hYmxlIHBhY2VkIG1vZGUsCisJICogZGlzYWJsZSByZWFkIHBpcGUsIGFuZCBkaXNhYmxlIHByZS1pbnRlcnJ1cHQgY29tcHdicworCSAqLworCXZhbCA9ICAgVFhfQ0ZHX0NPTVBXQl9RMSB8IFRYX0NGR19DT01QV0JfUTIgfCAKKwkJVFhfQ0ZHX0NPTVBXQl9RMyB8IFRYX0NGR19DT01QV0JfUTQgfAorCQlUWF9DRkdfRE1BX1JEUElQRV9ESVMgfCBUWF9DRkdfUEFDRURfTU9ERSB8IAorCQlUWF9DRkdfSU5UUl9DT01QV0JfRElTOworCisJLyogd3JpdGUgb3V0IHR4IHJpbmcgaW5mbyBhbmQgdHggZGVzYyBiYXNlcyAqLworCWZvciAoaSA9IDA7IGkgPCBNQVhfVFhfUklOR1M7IGkrKykgeworCQlvZmYgPSAodW5zaWduZWQgbG9uZykgY3AtPmluaXRfdHhkc1tpXSAtIAorCQkJKHVuc2lnbmVkIGxvbmcpIGNwLT5pbml0X2Jsb2NrOworCisJCXZhbCB8PSBDQVNfVFhfUklOR05fQkFTRShpKTsKKwkJd3JpdGVsKChkZXNjX2RtYSArIG9mZikgPj4gMzIsIGNwLT5yZWdzICsgUkVHX1RYX0RCTl9ISShpKSk7CisJCXdyaXRlbCgoZGVzY19kbWEgKyBvZmYpICYgMHhmZmZmZmZmZiwgY3AtPnJlZ3MgKworCQkgICAgICAgUkVHX1RYX0RCTl9MT1coaSkpOworCQkvKiBkb24ndCB6ZXJvIG91dCB0aGUga2ljayByZWdpc3RlciBoZXJlIGFzIHRoZSBzeXN0ZW0KKwkJICogd2lsbCB3ZWRnZQorCQkgKi8KKwl9CisJd3JpdGVsKHZhbCwgY3AtPnJlZ3MgKyBSRUdfVFhfQ0ZHKTsKKworCS8qIHByb2dyYW0gbWF4IGJ1cnN0IHNpemVzLiB0aGVzZSBudW1iZXJzIHNob3VsZCBiZSBkaWZmZXJlbnQKKwkgKiBpZiBkb2luZyBRb1MuCisJICovCisjaWZkZWYgVVNFX1FPUworCXdyaXRlbCgweDgwMCwgY3AtPnJlZ3MgKyBSRUdfVFhfTUFYQlVSU1RfMCk7CisJd3JpdGVsKDB4MTYwMCwgY3AtPnJlZ3MgKyBSRUdfVFhfTUFYQlVSU1RfMSk7CisJd3JpdGVsKDB4MjQwMCwgY3AtPnJlZ3MgKyBSRUdfVFhfTUFYQlVSU1RfMik7CisJd3JpdGVsKDB4NDgwMCwgY3AtPnJlZ3MgKyBSRUdfVFhfTUFYQlVSU1RfMyk7CisjZWxzZQorCXdyaXRlbCgweDgwMCwgY3AtPnJlZ3MgKyBSRUdfVFhfTUFYQlVSU1RfMCk7CisJd3JpdGVsKDB4ODAwLCBjcC0+cmVncyArIFJFR19UWF9NQVhCVVJTVF8xKTsKKwl3cml0ZWwoMHg4MDAsIGNwLT5yZWdzICsgUkVHX1RYX01BWEJVUlNUXzIpOworCXdyaXRlbCgweDgwMCwgY3AtPnJlZ3MgKyBSRUdfVFhfTUFYQlVSU1RfMyk7CisjZW5kaWYKK30KKworLyogTXVzdCBiZSBpbnZva2VkIHVuZGVyIGNwLT5sb2NrLiAqLworc3RhdGljIGlubGluZSB2b2lkIGNhc19pbml0X2RtYShzdHJ1Y3QgY2FzICpjcCkKK3sKKwljYXNfaW5pdF90eF9kbWEoY3ApOworCWNhc19pbml0X3J4X2RtYShjcCk7Cit9CisKKy8qIE11c3QgYmUgaW52b2tlZCB1bmRlciBjcC0+bG9jay4gKi8KK3N0YXRpYyB1MzIgY2FzX3NldHVwX211bHRpY2FzdChzdHJ1Y3QgY2FzICpjcCkKK3sKKwl1MzIgcnhjZmcgPSAwOworCWludCBpOworCQorCWlmIChjcC0+ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCXJ4Y2ZnIHw9IE1BQ19SWF9DRkdfUFJPTUlTQ19FTjsKKworCX0gZWxzZSBpZiAoY3AtPmRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKKwkgICAgCWZvciAoaT0wOyBpIDwgMTY7IGkrKykKKwkJCXdyaXRlbCgweEZGRkYsIGNwLT5yZWdzICsgUkVHX01BQ19IQVNIX1RBQkxFTihpKSk7CisJCXJ4Y2ZnIHw9IE1BQ19SWF9DRkdfSEFTSF9GSUxURVJfRU47CisKKwl9IGVsc2UgeworCQl1MTYgaGFzaF90YWJsZVsxNl07CisJCXUzMiBjcmM7CisJCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pID0gY3AtPmRldi0+bWNfbGlzdDsKKwkJaW50IGk7CisKKwkJLyogdXNlIHRoZSBhbHRlcm5hdGUgbWFjIGFkZHJlc3MgcmVnaXN0ZXJzIGZvciB0aGUKKwkJICogZmlyc3QgMTUgbXVsdGljYXN0IGFkZHJlc3NlcworCQkgKi8KKwkJZm9yIChpID0gMTsgaSA8PSBDQVNfTUNfRVhBQ1RfTUFUQ0hfU0laRTsgaSsrKSB7CisJCQlpZiAoIWRtaSkgeworCQkJCXdyaXRlbCgweDAsIGNwLT5yZWdzICsgUkVHX01BQ19BRERSTihpKjMgKyAwKSk7CisJCQkJd3JpdGVsKDB4MCwgY3AtPnJlZ3MgKyBSRUdfTUFDX0FERFJOKGkqMyArIDEpKTsKKwkJCQl3cml0ZWwoMHgwLCBjcC0+cmVncyArIFJFR19NQUNfQUREUk4oaSozICsgMikpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJd3JpdGVsKChkbWktPmRtaV9hZGRyWzRdIDw8IDgpIHwgZG1pLT5kbWlfYWRkcls1XSwgCisJCQkgICAgICAgY3AtPnJlZ3MgKyBSRUdfTUFDX0FERFJOKGkqMyArIDApKTsKKwkJCXdyaXRlbCgoZG1pLT5kbWlfYWRkclsyXSA8PCA4KSB8IGRtaS0+ZG1pX2FkZHJbM10sIAorCQkJICAgICAgIGNwLT5yZWdzICsgUkVHX01BQ19BRERSTihpKjMgKyAxKSk7CisJCQl3cml0ZWwoKGRtaS0+ZG1pX2FkZHJbMF0gPDwgOCkgfCBkbWktPmRtaV9hZGRyWzFdLCAKKwkJCSAgICAgICBjcC0+cmVncyArIFJFR19NQUNfQUREUk4oaSozICsgMikpOworCQkJZG1pID0gZG1pLT5uZXh0OworCQl9CisKKwkJLyogdXNlIGh3IGhhc2ggdGFibGUgZm9yIHRoZSBuZXh0IHNlcmllcyBvZiAKKwkJICogbXVsdGljYXN0IGFkZHJlc3NlcworCQkgKi8KKwkJbWVtc2V0KGhhc2hfdGFibGUsIDAsIHNpemVvZihoYXNoX3RhYmxlKSk7CisJCXdoaWxlIChkbWkpIHsKKyAJCQljcmMgPSBldGhlcl9jcmNfbGUoRVRIX0FMRU4sIGRtaS0+ZG1pX2FkZHIpOworCQkJY3JjID4+PSAyNDsKKwkJCWhhc2hfdGFibGVbY3JjID4+IDRdIHw9IDEgPDwgKDE1IC0gKGNyYyAmIDB4ZikpOworCQkJZG1pID0gZG1pLT5uZXh0OworCQl9CisJICAgIAlmb3IgKGk9MDsgaSA8IDE2OyBpKyspCisJCQl3cml0ZWwoaGFzaF90YWJsZVtpXSwgY3AtPnJlZ3MgKyAKKwkJCSAgICAgICBSRUdfTUFDX0hBU0hfVEFCTEVOKGkpKTsKKwkJcnhjZmcgfD0gTUFDX1JYX0NGR19IQVNIX0ZJTFRFUl9FTjsKKwl9CisKKwlyZXR1cm4gcnhjZmc7Cit9CisKKy8qIG11c3QgYmUgaW52b2tlZCB1bmRlciBjcC0+c3RhdF9sb2NrW05fVFhfUklOR1NdICovCitzdGF0aWMgdm9pZCBjYXNfY2xlYXJfbWFjX2VycihzdHJ1Y3QgY2FzICpjcCkKK3sKKwl3cml0ZWwoMCwgY3AtPnJlZ3MgKyBSRUdfTUFDX0NPTExfTk9STUFMKTsKKwl3cml0ZWwoMCwgY3AtPnJlZ3MgKyBSRUdfTUFDX0NPTExfRklSU1QpOworCXdyaXRlbCgwLCBjcC0+cmVncyArIFJFR19NQUNfQ09MTF9FWENFU1MpOworCXdyaXRlbCgwLCBjcC0+cmVncyArIFJFR19NQUNfQ09MTF9MQVRFKTsKKwl3cml0ZWwoMCwgY3AtPnJlZ3MgKyBSRUdfTUFDX1RJTUVSX0RFRkVSKTsKKwl3cml0ZWwoMCwgY3AtPnJlZ3MgKyBSRUdfTUFDX0FUVEVNUFRTX1BFQUspOworCXdyaXRlbCgwLCBjcC0+cmVncyArIFJFR19NQUNfUkVDVl9GUkFNRSk7CisJd3JpdGVsKDAsIGNwLT5yZWdzICsgUkVHX01BQ19MRU5fRVJSKTsKKwl3cml0ZWwoMCwgY3AtPnJlZ3MgKyBSRUdfTUFDX0FMSUdOX0VSUik7CisJd3JpdGVsKDAsIGNwLT5yZWdzICsgUkVHX01BQ19GQ1NfRVJSKTsKKwl3cml0ZWwoMCwgY3AtPnJlZ3MgKyBSRUdfTUFDX1JYX0NPREVfRVJSKTsKK30KKworCitzdGF0aWMgdm9pZCBjYXNfbWFjX3Jlc2V0KHN0cnVjdCBjYXMgKmNwKQoreworCWludCBpOworCisJLyogZG8gYm90aCBUWCBhbmQgUlggcmVzZXQgKi8KKwl3cml0ZWwoMHgxLCBjcC0+cmVncyArIFJFR19NQUNfVFhfUkVTRVQpOworCXdyaXRlbCgweDEsIGNwLT5yZWdzICsgUkVHX01BQ19SWF9SRVNFVCk7CisKKwkvKiB3YWl0IGZvciBUWCAqLworCWkgPSBTVE9QX1RSSUVTOworCXdoaWxlIChpLS0gPiAwKSB7CisJCWlmIChyZWFkbChjcC0+cmVncyArIFJFR19NQUNfVFhfUkVTRVQpID09IDApCisJCQlicmVhazsKKwkJdWRlbGF5KDEwKTsKKwl9CisKKwkvKiB3YWl0IGZvciBSWCAqLworCWkgPSBTVE9QX1RSSUVTOworCXdoaWxlIChpLS0gPiAwKSB7CisJCWlmIChyZWFkbChjcC0+cmVncyArIFJFR19NQUNfUlhfUkVTRVQpID09IDApCisJCQlicmVhazsKKwkJdWRlbGF5KDEwKTsKKwl9CisKKwlpZiAocmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX1RYX1JFU0VUKSB8CisJICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19SWF9SRVNFVCkpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IG1hYyB0eFslZF0vcnhbJWRdIHJlc2V0IGZhaWxlZCBbJTA4eF1cbiIsCisJCSAgICAgICBjcC0+ZGV2LT5uYW1lLCByZWFkbChjcC0+cmVncyArIFJFR19NQUNfVFhfUkVTRVQpLAorCQkgICAgICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX1JYX1JFU0VUKSwKKwkJICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19TVEFURV9NQUNISU5FKSk7Cit9CisKKworLyogTXVzdCBiZSBpbnZva2VkIHVuZGVyIGNwLT5sb2NrLiAqLworc3RhdGljIHZvaWQgY2FzX2luaXRfbWFjKHN0cnVjdCBjYXMgKmNwKQoreworCXVuc2lnbmVkIGNoYXIgKmUgPSAmY3AtPmRldi0+ZGV2X2FkZHJbMF07CisJaW50IGk7CisjaWZkZWYgQ09ORklHX0NBU1NJTklfTVVMVElDQVNUX1JFR19XUklURQorCXUzMiByeGNmZzsKKyNlbmRpZgorCWNhc19tYWNfcmVzZXQoY3ApOworCisJLyogc2V0dXAgY29yZSBhcmJpdHJhdGlvbiB3ZWlnaHQgcmVnaXN0ZXIgKi8KKwl3cml0ZWwoQ0FXUl9SUl9ESVMsIGNwLT5yZWdzICsgUkVHX0NBV1IpOworCisJLyogWFhYIFVzZSBwY2lfZG1hX2J1cnN0X2FkdmljZSgpICovCisjaWYgIWRlZmluZWQoQ09ORklHX1NQQVJDNjQpICYmICFkZWZpbmVkKENPTkZJR19BTFBIQSkKKwkvKiBzZXQgdGhlIGluZmluaXRlIGJ1cnN0IHJlZ2lzdGVyIGZvciBjaGlwcyB0aGF0IGRvbid0IGhhdmUKKwkgKiBwY2kgaXNzdWVzLgorCSAqLworCWlmICgoY3AtPmNhc19mbGFncyAmIENBU19GTEFHX1RBUkdFVF9BQk9SVCkgPT0gMCkKKwkJd3JpdGVsKElORl9CVVJTVF9FTiwgY3AtPnJlZ3MgKyBSRUdfSU5GX0JVUlNUKTsKKyNlbmRpZgorCisJd3JpdGVsKDB4MUJGMCwgY3AtPnJlZ3MgKyBSRUdfTUFDX1NFTkRfUEFVU0UpOworCisJd3JpdGVsKDB4MDAsIGNwLT5yZWdzICsgUkVHX01BQ19JUEcwKTsKKwl3cml0ZWwoMHgwOCwgY3AtPnJlZ3MgKyBSRUdfTUFDX0lQRzEpOworCXdyaXRlbCgweDA0LCBjcC0+cmVncyArIFJFR19NQUNfSVBHMik7CisJCisJLyogY2hhbmdlIGxhdGVyIGZvciA4MDIuM3ogKi8KKwl3cml0ZWwoMHg0MCwgY3AtPnJlZ3MgKyBSRUdfTUFDX1NMT1RfVElNRSk7IAorCisJLyogbWluIGZyYW1lICsgRkNTICovCisJd3JpdGVsKEVUSF9aTEVOICsgNCwgY3AtPnJlZ3MgKyBSRUdfTUFDX0ZSQU1FU0laRV9NSU4pOworCisJLyogRXRoZXJuZXQgcGF5bG9hZCArIGhlYWRlciArIEZDUyArIG9wdGlvbmFsIFZMQU4gdGFnLiBOT1RFOiB3ZQorCSAqIHNwZWNpZnkgdGhlIG1heGltdW0gZnJhbWUgc2l6ZSB0byBwcmV2ZW50IFJYIHRhZyBlcnJvcnMgb24gCisJICogb3ZlcnNpemVkIGZyYW1lcy4KKwkgKi8KKwl3cml0ZWwoQ0FTX0JBU0UoTUFDX0ZSQU1FU0laRV9NQVhfQlVSU1QsIDB4MjAwMCkgfAorCSAgICAgICBDQVNfQkFTRShNQUNfRlJBTUVTSVpFX01BWF9GUkFNRSwgCisJCQkoQ0FTX01BWF9NVFUgKyBFVEhfSExFTiArIDQgKyA0KSksIAorCSAgICAgICBjcC0+cmVncyArIFJFR19NQUNfRlJBTUVTSVpFX01BWCk7CisKKwkvKiBOT1RFOiBjcmNfc2l6ZSBpcyB1c2VkIGFzIGEgc3Vycm9nYXRlIGZvciBoYWxmLWR1cGxleC4gCisJICogd29ya2Fyb3VuZCBzYXR1cm4gaGFsZi1kdXBsZXggaXNzdWUgYnkgaW5jcmVhc2luZyBwcmVhbWJsZQorCSAqIHNpemUgdG8gNjUgYnl0ZXMuCisJICovCisJaWYgKChjcC0+Y2FzX2ZsYWdzICYgQ0FTX0ZMQUdfU0FUVVJOKSAmJiBjcC0+Y3JjX3NpemUpCisJCXdyaXRlbCgweDQxLCBjcC0+cmVncyArIFJFR19NQUNfUEFfU0laRSk7CisJZWxzZQorCQl3cml0ZWwoMHgwNywgY3AtPnJlZ3MgKyBSRUdfTUFDX1BBX1NJWkUpOworCXdyaXRlbCgweDA0LCBjcC0+cmVncyArIFJFR19NQUNfSkFNX1NJWkUpOworCXdyaXRlbCgweDEwLCBjcC0+cmVncyArIFJFR19NQUNfQVRURU1QVF9MSU1JVCk7CisJd3JpdGVsKDB4ODgwOCwgY3AtPnJlZ3MgKyBSRUdfTUFDX0NUUkxfVFlQRSk7CisKKwl3cml0ZWwoKGVbNV0gfCAoZVs0XSA8PCA4KSkgJiAweDNmZiwgY3AtPnJlZ3MgKyBSRUdfTUFDX1JBTkRPTV9TRUVEKTsKKworCXdyaXRlbCgwLCBjcC0+cmVncyArIFJFR19NQUNfQUREUl9GSUxURVIwKTsKKwl3cml0ZWwoMCwgY3AtPnJlZ3MgKyBSRUdfTUFDX0FERFJfRklMVEVSMSk7CisJd3JpdGVsKDAsIGNwLT5yZWdzICsgUkVHX01BQ19BRERSX0ZJTFRFUjIpOworCXdyaXRlbCgwLCBjcC0+cmVncyArIFJFR19NQUNfQUREUl9GSUxURVIyXzFfTUFTSyk7CisJd3JpdGVsKDAsIGNwLT5yZWdzICsgUkVHX01BQ19BRERSX0ZJTFRFUjBfTUFTSyk7CisKKwkvKiBzZXR1cCBtYWMgYWRkcmVzcyBpbiBwZXJmZWN0IGZpbHRlciBhcnJheSAqLworCWZvciAoaSA9IDA7IGkgPCA0NTsgaSsrKQorCQl3cml0ZWwoMHgwLCBjcC0+cmVncyArIFJFR19NQUNfQUREUk4oaSkpOworCisJd3JpdGVsKChlWzRdIDw8IDgpIHwgZVs1XSwgY3AtPnJlZ3MgKyBSRUdfTUFDX0FERFJOKDApKTsKKwl3cml0ZWwoKGVbMl0gPDwgOCkgfCBlWzNdLCBjcC0+cmVncyArIFJFR19NQUNfQUREUk4oMSkpOworCXdyaXRlbCgoZVswXSA8PCA4KSB8IGVbMV0sIGNwLT5yZWdzICsgUkVHX01BQ19BRERSTigyKSk7CisKKwl3cml0ZWwoMHgwMDAxLCBjcC0+cmVncyArIFJFR19NQUNfQUREUk4oNDIpKTsKKwl3cml0ZWwoMHhjMjAwLCBjcC0+cmVncyArIFJFR19NQUNfQUREUk4oNDMpKTsKKwl3cml0ZWwoMHgwMTgwLCBjcC0+cmVncyArIFJFR19NQUNfQUREUk4oNDQpKTsKKworI2lmbmRlZiBDT05GSUdfQ0FTU0lOSV9NVUxUSUNBU1RfUkVHX1dSSVRFCisJY3AtPm1hY19yeF9jZmcgPSBjYXNfc2V0dXBfbXVsdGljYXN0KGNwKTsKKyNlbHNlCisJLyogV1RaOiBEbyB3aGF0IEFkcmlhbiBkaWQgaW4gY2FzX3NldF9tdWx0aWNhc3QuIERvaW5nCisJICogYSB3cml0ZWwgZG9lcyBub3Qgc2VlbSB0byBiZSBuZWNlc3NhcnkgYmVjYXVzZSBDYXNzaW5pCisJICogc2VlbXMgdG8gcHJlc2VydmUgdGhlIGNvbmZpZ3VyYXRpb24gd2hlbiB3ZSBkbyB0aGUgcmVzZXQuCisJICogSWYgdGhlIGNoaXAgaXMgaW4gdHJvdWJsZSwgdGhvdWdoLCBpdCBpcyBub3QgY2xlYXIgaWYgd2UKKwkgKiBjYW4gcmVhbGx5IGNvdW50IG9uIHRoaXMgYmVoYXZpb3IuIGNhc19zZXRfbXVsdGljYXN0IHVzZXMKKwkgKiBzcGluX2xvY2tfaXJxc2F2ZSwgYnV0IHdlIGFyZSBjYWxsZWQgb25seSBpbiBjYXNfaW5pdF9odyBhbmQKKwkgKiBjYXNfaW5pdF9odyBpcyBwcm90ZWN0ZWQgYnkgY2FzX2xvY2tfYWxsLCB3aGljaCBjYWxscworCSAqIHNwaW5fbG9ja19pcnEgKHNvIGl0IGRvZXNuJ3QgbmVlZCB0byBzYXZlIHRoZSBmbGFncywgYW5kCisJICogd2Ugc2hvdWxkIGJlIE9LIGZvciB0aGUgd3JpdGVsLCBhcyB0aGF0IGlzIHRoZSBvbmx5IAorCSAqIGRpZmZlcmVuY2UpLgorCSAqLworCWNwLT5tYWNfcnhfY2ZnID0gcnhjZmcgPSBjYXNfc2V0dXBfbXVsdGljYXN0KGNwKTsKKwl3cml0ZWwocnhjZmcsIGNwLT5yZWdzICsgUkVHX01BQ19SWF9DRkcpOworI2VuZGlmCisJc3Bpbl9sb2NrKCZjcC0+c3RhdF9sb2NrW05fVFhfUklOR1NdKTsKKwljYXNfY2xlYXJfbWFjX2VycihjcCk7CisJc3Bpbl91bmxvY2soJmNwLT5zdGF0X2xvY2tbTl9UWF9SSU5HU10pOworCisJLyogU2V0dXAgTUFDIGludGVycnVwdHMuICBXZSB3YW50IHRvIGdldCBhbGwgb2YgdGhlIGludGVyZXN0aW5nCisJICogY291bnRlciBleHBpcmF0aW9uIGV2ZW50cywgYnV0IHdlIGRvIG5vdCB3YW50IHRvIGhlYXIgYWJvdXQKKwkgKiBub3JtYWwgcngvdHggYXMgdGhlIERNQSBlbmdpbmUgdGVsbHMgdXMgdGhhdC4KKwkgKi8KKwl3cml0ZWwoTUFDX1RYX0ZSQU1FX1hNSVQsIGNwLT5yZWdzICsgUkVHX01BQ19UWF9NQVNLKTsKKwl3cml0ZWwoTUFDX1JYX0ZSQU1FX1JFQ1YsIGNwLT5yZWdzICsgUkVHX01BQ19SWF9NQVNLKTsKKworCS8qIERvbid0IGVuYWJsZSBldmVuIHRoZSBQQVVTRSBpbnRlcnJ1cHRzIGZvciBub3csIHdlCisJICogbWFrZSBubyB1c2Ugb2YgdGhvc2UgZXZlbnRzIG90aGVyIHRoYW4gdG8gcmVjb3JkIHRoZW0uCisJICovCisJd3JpdGVsKDB4ZmZmZmZmZmYsIGNwLT5yZWdzICsgUkVHX01BQ19DVFJMX01BU0spOworfQorCisvKiBNdXN0IGJlIGludm9rZWQgdW5kZXIgY3AtPmxvY2suICovCitzdGF0aWMgdm9pZCBjYXNfaW5pdF9wYXVzZV90aHJlc2hvbGRzKHN0cnVjdCBjYXMgKmNwKQoreworCS8qIENhbGN1bGF0ZSBwYXVzZSB0aHJlc2hvbGRzLiAgU2V0dGluZyB0aGUgT0ZGIHRocmVzaG9sZCB0byB0aGUKKwkgKiBmdWxsIFJYIGZpZm8gc2l6ZSBlZmZlY3RpdmVseSBkaXNhYmxlcyBQQVVTRSBnZW5lcmF0aW9uCisJICovCisJaWYgKGNwLT5yeF9maWZvX3NpemUgPD0gKDIgKiAxMDI0KSkgeworCQljcC0+cnhfcGF1c2Vfb2ZmID0gY3AtPnJ4X3BhdXNlX29uID0gY3AtPnJ4X2ZpZm9fc2l6ZTsKKwl9IGVsc2UgeworCQlpbnQgbWF4X2ZyYW1lID0gKGNwLT5kZXYtPm10dSArIEVUSF9ITEVOICsgNCArIDQgKyA2NCkgJiB+NjM7CisJCWlmIChtYXhfZnJhbWUgKiAzID4gY3AtPnJ4X2ZpZm9fc2l6ZSkgeworCQkJY3AtPnJ4X3BhdXNlX29mZiA9IDcxMDQ7CisJCQljcC0+cnhfcGF1c2Vfb24gID0gOTYwOworCQl9IGVsc2UgeworCQkJaW50IG9mZiA9IChjcC0+cnhfZmlmb19zaXplIC0gKG1heF9mcmFtZSAqIDIpKTsKKwkJCWludCBvbiA9IG9mZiAtIG1heF9mcmFtZTsKKwkJCWNwLT5yeF9wYXVzZV9vZmYgPSBvZmY7CisJCQljcC0+cnhfcGF1c2Vfb24gPSBvbjsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBjYXNfdnBkX21hdGNoKGNvbnN0IHZvaWQgX19pb21lbSAqcCwgY29uc3QgY2hhciAqc3RyKQoreworCWludCBsZW4gPSBzdHJsZW4oc3RyKSArIDE7CisJaW50IGk7CisJCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWlmIChyZWFkYihwICsgaSkgIT0gc3RyW2ldKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCisKKy8qIGdldCB0aGUgbWFjIGFkZHJlc3MgYnkgcmVhZGluZyB0aGUgdnBkIGluZm9ybWF0aW9uIGluIHRoZSByb20uCisgKiBhbHNvIGdldCB0aGUgcGh5IHR5cGUgYW5kIGRldGVybWluZSBpZiB0aGVyZSdzIGFuIGVudHJvcHkgZ2VuZXJhdG9yLgorICogTk9URTogdGhpcyBpcyBhIGJpdCBjb252b2x1dGVkIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnM6CisgKiAgMSkgdnBkIGluZm8gaGFzIG9yZGVyLWRlcGVuZGVudCBtYWMgYWRkcmVzc2VzIGZvciBtdWx0aW5pYyBjYXJkcworICogIDIpIHRoZSBvbmx5IHdheSB0byBkZXRlcm1pbmUgdGhlIG5pYyBvcmRlciBpcyB0byB1c2UgdGhlIHNsb3QKKyAqICAgICBudW1iZXIuCisgKiAgMykgZmliZXIgY2FyZHMgZG9uJ3QgaGF2ZSBicmlkZ2VzLCBzbyB0aGVpciBzbG90IG51bWJlcnMgZG9uJ3QKKyAqICAgICBtZWFuIGFueXRoaW5nLgorICogIDQpIHdlIGRvbid0IGFjdHVhbGx5IGtub3cgd2UgaGF2ZSBhIGZpYmVyIGNhcmQgdW50aWwgYWZ0ZXIgCisgKiAgICAgdGhlIG1hYyBhZGRyZXNzZXMgYXJlIHBhcnNlZC4KKyAqLworc3RhdGljIGludCBjYXNfZ2V0X3ZwZF9pbmZvKHN0cnVjdCBjYXMgKmNwLCB1bnNpZ25lZCBjaGFyICpkZXZfYWRkciwKKwkJCSAgICBjb25zdCBpbnQgb2Zmc2V0KQoreworCXZvaWQgX19pb21lbSAqcCA9IGNwLT5yZWdzICsgUkVHX0VYUEFOU0lPTl9ST01fUlVOX1NUQVJUOworCXZvaWQgX19pb21lbSAqYmFzZSwgKmtzdGFydDsKKwlpbnQgaSwgbGVuOworCWludCBmb3VuZCA9IDA7CisjZGVmaW5lIFZQRF9GT1VORF9NQUMgICAgICAgIDB4MDEKKyNkZWZpbmUgVlBEX0ZPVU5EX1BIWSAgICAgICAgMHgwMgorCisJaW50IHBoeV90eXBlID0gQ0FTX1BIWV9NSUlfTURJTzA7IC8qIGRlZmF1bHQgcGh5IHR5cGUgKi8KKwlpbnQgbWFjX29mZiAgPSAwOworCisJLyogZ2l2ZSB1cyBhY2Nlc3MgdG8gdGhlIFBST00gKi8KKwl3cml0ZWwoQklNX0xPQ0FMX0RFVl9QUk9NIHwgQklNX0xPQ0FMX0RFVl9QQUQsCisJICAgICAgIGNwLT5yZWdzICsgUkVHX0JJTV9MT0NBTF9ERVZfRU4pOworCisJLyogY2hlY2sgZm9yIGFuIGV4cGFuc2lvbiByb20gKi8KKwlpZiAocmVhZGIocCkgIT0gMHg1NSB8fCByZWFkYihwICsgMSkgIT0gMHhhYSkKKwkJZ290byB1c2VfcmFuZG9tX21hY19hZGRyOworCisJLyogc2VhcmNoIGZvciBiZWdpbm5pbmcgb2YgdnBkICovCisJYmFzZSA9IE5VTEw7CisJZm9yIChpID0gMjsgaSA8IEVYUEFOU0lPTl9ST01fU0laRTsgaSsrKSB7CisJCS8qIGNoZWNrIGZvciBQQ0lSICovCisJCWlmICgocmVhZGIocCArIGkgKyAwKSA9PSAweDUwKSAmJgorCQkgICAgKHJlYWRiKHAgKyBpICsgMSkgPT0gMHg0MykgJiYKKwkJICAgIChyZWFkYihwICsgaSArIDIpID09IDB4NDkpICYmCisJCSAgICAocmVhZGIocCArIGkgKyAzKSA9PSAweDUyKSkgeworCQkJYmFzZSA9IHAgKyAocmVhZGIocCArIGkgKyA4KSB8IAorCQkJCSAgICAocmVhZGIocCArIGkgKyA5KSA8PCA4KSk7CisJCQlicmVhazsKKwkJfQkJCisJfQorCisJaWYgKCFiYXNlIHx8IChyZWFkYihiYXNlKSAhPSAweDgyKSkKKwkJZ290byB1c2VfcmFuZG9tX21hY19hZGRyOworCQorCWkgPSAocmVhZGIoYmFzZSArIDEpIHwgKHJlYWRiKGJhc2UgKyAyKSA8PCA4KSkgKyAzOworCXdoaWxlIChpIDwgRVhQQU5TSU9OX1JPTV9TSVpFKSB7CisJCWlmIChyZWFkYihiYXNlICsgaSkgIT0gMHg5MCkgLyogbm8gdnBkIGZvdW5kICovCisJCQlnb3RvIHVzZV9yYW5kb21fbWFjX2FkZHI7CisKKwkJLyogZm91bmQgYSB2cGQgZmllbGQgKi8KKwkJbGVuID0gcmVhZGIoYmFzZSArIGkgKyAxKSB8IChyZWFkYihiYXNlICsgaSArIDIpIDw8IDgpOworCisJCS8qIGV4dHJhY3Qga2V5d29yZHMgKi8KKwkJa3N0YXJ0ID0gYmFzZSArIGkgKyAzOworCQlwID0ga3N0YXJ0OworCQl3aGlsZSAoKHAgLSBrc3RhcnQpIDwgbGVuKSB7CisJCQlpbnQga2xlbiA9IHJlYWRiKHAgKyAyKTsKKwkJCWludCBqOworCQkJY2hhciB0eXBlOworCisJCQlwICs9IDM7CisJCQkKKwkJCS8qIGxvb2sgZm9yIHRoZSBmb2xsb3dpbmcgdGhpbmdzOgorCQkJICogLS0gY29ycmVjdCBsZW5ndGggPT0gMjkKKwkJCSAqIDMgKHR5cGUpICsgMiAoc2l6ZSkgKyAKKwkJCSAqIDE4IChzdHJsZW4oImxvY2FsLW1hYy1hZGRyZXNzIikgKyAxKSArIAorCQkJICogNiAobWFjIGFkZHIpIAorCQkJICogLS0gVlBEIEluc3RhbmNlICdJJworCQkJICogLS0gVlBEIFR5cGUgQnl0ZXMgJ0InCisJCQkgKiAtLSBWUEQgZGF0YSBsZW5ndGggPT0gNgorCQkJICogLS0gcHJvcGVydHkgc3RyaW5nID09IGxvY2FsLW1hYy1hZGRyZXNzCisJCQkgKiAKKwkJCSAqIC0tIGNvcnJlY3QgbGVuZ3RoID09IDI0CisJCQkgKiAzICh0eXBlKSArIDIgKHNpemUpICsgCisJCQkgKiAxMiAoc3RybGVuKCJlbnRyb3B5LWRldiIpICsgMSkgKyAKKwkJCSAqIDcgKHN0cmxlbigidm1zMTEwIikgKyAxKQorCQkJICogLS0gVlBEIEluc3RhbmNlICdJJworCQkJICogLS0gVlBEIFR5cGUgU3RyaW5nICdCJworCQkJICogLS0gVlBEIGRhdGEgbGVuZ3RoID09IDcKKwkJCSAqIC0tIHByb3BlcnR5IHN0cmluZyA9PSBlbnRyb3B5LWRldgorCQkJICoKKwkJCSAqIC0tIGNvcnJlY3QgbGVuZ3RoID09IDE4CisJCQkgKiAzICh0eXBlKSArIDIgKHNpemUpICsgCisJCQkgKiA5IChzdHJsZW4oInBoeS10eXBlIikgKyAxKSArIAorCQkJICogNCAoc3RybGVuKCJwY3MiKSArIDEpCisJCQkgKiAtLSBWUEQgSW5zdGFuY2UgJ0knCisJCQkgKiAtLSBWUEQgVHlwZSBTdHJpbmcgJ1MnCisJCQkgKiAtLSBWUEQgZGF0YSBsZW5ndGggPT0gNAorCQkJICogLS0gcHJvcGVydHkgc3RyaW5nID09IHBoeS10eXBlCisJCQkgKiAKKwkJCSAqIC0tIGNvcnJlY3QgbGVuZ3RoID09IDIzCisJCQkgKiAzICh0eXBlKSArIDIgKHNpemUpICsgCisJCQkgKiAxNCAoc3RybGVuKCJwaHktaW50ZXJmYWNlIikgKyAxKSArIAorCQkJICogNCAoc3RybGVuKCJwY3MiKSArIDEpCisJCQkgKiAtLSBWUEQgSW5zdGFuY2UgJ0knCisJCQkgKiAtLSBWUEQgVHlwZSBTdHJpbmcgJ1MnCisJCQkgKiAtLSBWUEQgZGF0YSBsZW5ndGggPT0gNAorCQkJICogLS0gcHJvcGVydHkgc3RyaW5nID09IHBoeS1pbnRlcmZhY2UKKwkJCSAqLworCQkJaWYgKHJlYWRiKHApICE9ICdJJykKKwkJCQlnb3RvIG5leHQ7CisKKwkJCS8qIGZpbmFsbHksIGNoZWNrIHN0cmluZyBhbmQgbGVuZ3RoICovCisJCQl0eXBlID0gcmVhZGIocCArIDMpOworCQkJaWYgKHR5cGUgPT0gJ0InKSB7CisJCQkJaWYgKChrbGVuID09IDI5KSAmJiByZWFkYihwICsgNCkgPT0gNiAmJgorCQkJCSAgICBjYXNfdnBkX21hdGNoKHAgKyA1LCAKKwkJCQkJCSAgImxvY2FsLW1hYy1hZGRyZXNzIikpIHsKKwkJCQkJaWYgKG1hY19vZmYrKyA+IG9mZnNldCkgCisJCQkJCQlnb3RvIG5leHQ7CisKKwkJCQkJLyogc2V0IG1hYyBhZGRyZXNzICovCisJCQkJCWZvciAoaiA9IDA7IGogPCA2OyBqKyspIAorCQkJCQkJZGV2X2FkZHJbal0gPSAKKwkJCQkJCQlyZWFkYihwICsgMjMgKyBqKTsKKwkJCQkJZ290byBmb3VuZF9tYWM7CisJCQkJfQorCQkJfQorCisJCQlpZiAodHlwZSAhPSAnUycpCisJCQkJZ290byBuZXh0OworCisjaWZkZWYgVVNFX0VOVFJPUFlfREVWCisJCQlpZiAoKGtsZW4gPT0gMjQpICYmIAorCQkJICAgIGNhc192cGRfbWF0Y2gocCArIDUsICJlbnRyb3B5LWRldiIpICYmCisJCQkgICAgY2FzX3ZwZF9tYXRjaChwICsgMTcsICJ2bXMxMTAiKSkgeworCQkJCWNwLT5jYXNfZmxhZ3MgfD0gQ0FTX0ZMQUdfRU5UUk9QWV9ERVY7CisJCQkJZ290byBuZXh0OworCQkJfQorI2VuZGlmCisKKwkJCWlmIChmb3VuZCAmIFZQRF9GT1VORF9QSFkpCisJCQkJZ290byBuZXh0OworCisJCQlpZiAoKGtsZW4gPT0gMTgpICYmIHJlYWRiKHAgKyA0KSA9PSA0ICYmCisJCQkgICAgY2FzX3ZwZF9tYXRjaChwICsgNSwgInBoeS10eXBlIikpIHsKKwkJCQlpZiAoY2FzX3ZwZF9tYXRjaChwICsgMTQsICJwY3MiKSkgeworCQkJCQlwaHlfdHlwZSA9IENBU19QSFlfU0VSREVTOworCQkJCQlnb3RvIGZvdW5kX3BoeTsKKwkJCQl9CisJCQl9CisJCQkKKwkJCWlmICgoa2xlbiA9PSAyMykgJiYgcmVhZGIocCArIDQpID09IDQgJiYKKwkJCSAgICBjYXNfdnBkX21hdGNoKHAgKyA1LCAicGh5LWludGVyZmFjZSIpKSB7CisJCQkJaWYgKGNhc192cGRfbWF0Y2gocCArIDE5LCAicGNzIikpIHsKKwkJCQkJcGh5X3R5cGUgPSBDQVNfUEhZX1NFUkRFUzsKKwkJCQkJZ290byBmb3VuZF9waHk7CisJCQkJfQorCQkJfQorZm91bmRfbWFjOgorCQkJZm91bmQgfD0gVlBEX0ZPVU5EX01BQzsKKwkJCWdvdG8gbmV4dDsKKworZm91bmRfcGh5OgorCQkJZm91bmQgfD0gVlBEX0ZPVU5EX1BIWTsKKworbmV4dDoKKwkJCXAgKz0ga2xlbjsKKwkJfQorCQlpICs9IGxlbiArIDM7CisJfQorCit1c2VfcmFuZG9tX21hY19hZGRyOgorCWlmIChmb3VuZCAmIFZQRF9GT1VORF9NQUMpCisJCWdvdG8gZG9uZTsKKworCS8qIFN1biBNQUMgcHJlZml4IHRoZW4gMyByYW5kb20gYnl0ZXMuICovCisJcHJpbnRrKFBGWCAiTUFDIGFkZHJlc3Mgbm90IGZvdW5kIGluIFJPTSBWUERcbiIpOworCWRldl9hZGRyWzBdID0gMHgwODsKKwlkZXZfYWRkclsxXSA9IDB4MDA7CisJZGV2X2FkZHJbMl0gPSAweDIwOworCWdldF9yYW5kb21fYnl0ZXMoZGV2X2FkZHIgKyAzLCAzKTsKKworZG9uZToKKwl3cml0ZWwoMCwgY3AtPnJlZ3MgKyBSRUdfQklNX0xPQ0FMX0RFVl9FTik7CisJcmV0dXJuIHBoeV90eXBlOworfQorCisvKiBjaGVjayBwY2kgaW52YXJpYW50cyAqLworc3RhdGljIHZvaWQgY2FzX2NoZWNrX3BjaV9pbnZhcmlhbnRzKHN0cnVjdCBjYXMgKmNwKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gY3AtPnBkZXY7CisJdTggcmV2OworCisJY3AtPmNhc19mbGFncyA9IDA7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX1JFVklTSU9OX0lELCAmcmV2KTsKKwlpZiAoKHBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX1NVTikgJiYKKwkgICAgKHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1NVTl9DQVNTSU5JKSkgeworCQlpZiAocmV2ID49IENBU19JRF9SRVZQTFVTKQorCQkJY3AtPmNhc19mbGFncyB8PSBDQVNfRkxBR19SRUdfUExVUzsKKwkJaWYgKHJldiA8IENBU19JRF9SRVZQTFVTMDJ1KQorCQkJY3AtPmNhc19mbGFncyB8PSBDQVNfRkxBR19UQVJHRVRfQUJPUlQ7CisKKwkJLyogT3JpZ2luYWwgQ2Fzc2luaSBzdXBwb3J0cyBIVyBDU1VNLCBidXQgaXQncyBub3QKKwkJICogZW5hYmxlZCBieSBkZWZhdWx0IGFzIGl0IGNhbiB0cmlnZ2VyIFRYIGhhbmdzLgorCQkgKi8KKwkJaWYgKHJldiA8IENBU19JRF9SRVYyKQorCQkJY3AtPmNhc19mbGFncyB8PSBDQVNfRkxBR19OT19IV19DU1VNOworCX0gZWxzZSB7CisJCS8qIE9ubHkgc3VuIGhhcyBvcmlnaW5hbCBjYXNzaW5pIGNoaXBzLiAgKi8KKwkJY3AtPmNhc19mbGFncyB8PSBDQVNfRkxBR19SRUdfUExVUzsKKworCQkvKiBXZSB1c2UgYSBmbGFnIGJlY2F1c2UgdGhlIHNhbWUgcGh5IG1pZ2h0IGJlIGV4dGVybmFsbHkKKwkJICogY29ubmVjdGVkLgorCQkgKi8KKwkJaWYgKChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9OUykgJiYKKwkJICAgIChwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9OU19TQVRVUk4pKQorCQkJY3AtPmNhc19mbGFncyB8PSBDQVNfRkxBR19TQVRVUk47CisJfQorfQorCisKK3N0YXRpYyBpbnQgY2FzX2NoZWNrX2ludmFyaWFudHMoc3RydWN0IGNhcyAqY3ApCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBjcC0+cGRldjsKKwl1MzIgY2ZnOworCWludCBpOworCisJLyogZ2V0IHBhZ2Ugc2l6ZSBmb3IgcnggYnVmZmVycy4gKi8KKwljcC0+cGFnZV9vcmRlciA9IDA7IAorI2lmZGVmIFVTRV9QQUdFX09SREVSCisJaWYgKFBBR0VfU0hJRlQgPCBDQVNfSlVNQk9fUEFHRV9TSElGVCkgeworCQkvKiBzZWUgaWYgd2UgY2FuIGFsbG9jYXRlIGxhcmdlciBwYWdlcyAqLworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2VzKEdGUF9BVE9NSUMsIAorCQkJCQkJQ0FTX0pVTUJPX1BBR0VfU0hJRlQgLSAKKwkJCQkJCVBBR0VfU0hJRlQpOworCQlpZiAocGFnZSkgeworCQkJX19mcmVlX3BhZ2VzKHBhZ2UsIENBU19KVU1CT19QQUdFX1NISUZUIC0gUEFHRV9TSElGVCk7CisJCQljcC0+cGFnZV9vcmRlciA9IENBU19KVU1CT19QQUdFX1NISUZUIC0gUEFHRV9TSElGVDsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhQRlggIk1UVSBsaW1pdGVkIHRvICVkIGJ5dGVzXG4iLCBDQVNfTUFYX01UVSk7CisJCX0KKwl9CisjZW5kaWYKKwljcC0+cGFnZV9zaXplID0gKFBBR0VfU0laRSA8PCBjcC0+cGFnZV9vcmRlcik7CisKKwkvKiBGZXRjaCB0aGUgRklGTyBjb25maWd1cmF0aW9ucy4gKi8KKwljcC0+dHhfZmlmb19zaXplID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfVFhfRklGT19TSVpFKSAqIDY0OworCWNwLT5yeF9maWZvX3NpemUgPSBSWF9GSUZPX1NJWkU7CisKKwkvKiBmaW5pc2ggcGh5IGRldGVybWluYXRpb24uIE1ESU8xIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBNRElPMCBpZiAKKwkgKiB0aGV5J3JlIGJvdGggY29ubmVjdGVkLgorCSAqLworCWNwLT5waHlfdHlwZSA9IGNhc19nZXRfdnBkX2luZm8oY3AsIGNwLT5kZXYtPmRldl9hZGRyLCAKKwkJCQkJUENJX1NMT1QocGRldi0+ZGV2Zm4pKTsKKwlpZiAoY3AtPnBoeV90eXBlICYgQ0FTX1BIWV9TRVJERVMpIHsKKwkJY3AtPmNhc19mbGFncyB8PSBDQVNfRkxBR18xMDAwTUJfQ0FQOworCQlyZXR1cm4gMDsgLyogbm8gbW9yZSBjaGVja2luZyBuZWVkZWQgKi8KKwl9IAorCisJLyogTUlJICovCisJY2ZnID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUlGX0NGRyk7CisJaWYgKGNmZyAmIE1JRl9DRkdfTURJT18xKSB7CisJCWNwLT5waHlfdHlwZSA9IENBU19QSFlfTUlJX01ESU8xOworCX0gZWxzZSBpZiAoY2ZnICYgTUlGX0NGR19NRElPXzApIHsKKwkJY3AtPnBoeV90eXBlID0gQ0FTX1BIWV9NSUlfTURJTzA7CisJfQorCisJY2FzX21pZl9wb2xsKGNwLCAwKTsKKwl3cml0ZWwoUENTX0RBVEFQQVRIX01PREVfTUlJLCBjcC0+cmVncyArIFJFR19QQ1NfREFUQVBBVEhfTU9ERSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQl1MzIgcGh5X2lkOworCQlpbnQgajsKKworCQlmb3IgKGogPSAwOyBqIDwgMzsgaisrKSB7CisJCQljcC0+cGh5X2FkZHIgPSBpOworCQkJcGh5X2lkID0gY2FzX3BoeV9yZWFkKGNwLCBNSUlfUEhZU0lEMSkgPDwgMTY7CisJCQlwaHlfaWQgfD0gY2FzX3BoeV9yZWFkKGNwLCBNSUlfUEhZU0lEMik7CisJCQlpZiAocGh5X2lkICYmIChwaHlfaWQgIT0gMHhGRkZGRkZGRikpIHsKKwkJCQljcC0+cGh5X2lkID0gcGh5X2lkOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJfQorCX0KKwlwcmludGsoS0VSTl9FUlIgUEZYICJNSUkgcGh5IGRpZCBub3QgcmVzcG9uZCBbJTA4eF1cbiIsCisJICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX01JRl9TVEFURV9NQUNISU5FKSk7CisJcmV0dXJuIC0xOworCitkb25lOgorCS8qIHNlZSBpZiB3ZSBjYW4gZG8gZ2lnYWJpdCAqLworCWNmZyA9IGNhc19waHlfcmVhZChjcCwgTUlJX0JNU1IpOworCWlmICgoY2ZnICYgQ0FTX0JNU1JfMTAwMF9FWFRFTkQpICYmIAorCSAgICBjYXNfcGh5X3JlYWQoY3AsIENBU19NSUlfMTAwMF9FWFRFTkQpKQorCQljcC0+Y2FzX2ZsYWdzIHw9IENBU19GTEFHXzEwMDBNQl9DQVA7CisJcmV0dXJuIDA7Cit9CisKKy8qIE11c3QgYmUgaW52b2tlZCB1bmRlciBjcC0+bG9jay4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjYXNfc3RhcnRfZG1hKHN0cnVjdCBjYXMgKmNwKQoreworCWludCBpOworCXUzMiB2YWw7CisJaW50IHR4ZmFpbGVkID0gMDsKKwkKKwkvKiBlbmFibGUgZG1hICovCisJdmFsID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfVFhfQ0ZHKSB8IFRYX0NGR19ETUFfRU47CisJd3JpdGVsKHZhbCwgY3AtPnJlZ3MgKyBSRUdfVFhfQ0ZHKTsKKwl2YWwgPSByZWFkbChjcC0+cmVncyArIFJFR19SWF9DRkcpIHwgUlhfQ0ZHX0RNQV9FTjsKKwl3cml0ZWwodmFsLCBjcC0+cmVncyArIFJFR19SWF9DRkcpOworCisJLyogZW5hYmxlIHRoZSBtYWMgKi8KKwl2YWwgPSByZWFkbChjcC0+cmVncyArIFJFR19NQUNfVFhfQ0ZHKSB8IE1BQ19UWF9DRkdfRU47CisJd3JpdGVsKHZhbCwgY3AtPnJlZ3MgKyBSRUdfTUFDX1RYX0NGRyk7CisJdmFsID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX1JYX0NGRykgfCBNQUNfUlhfQ0ZHX0VOOworCXdyaXRlbCh2YWwsIGNwLT5yZWdzICsgUkVHX01BQ19SWF9DRkcpOworCisJaSA9IFNUT1BfVFJJRVM7CisJd2hpbGUgKGktLSA+IDApIHsKKwkJdmFsID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX1RYX0NGRyk7CisJCWlmICgodmFsICYgTUFDX1RYX0NGR19FTikpCisJCQlicmVhazsKKwkJdWRlbGF5KDEwKTsKKwl9CisJaWYgKGkgPCAwKSB0eGZhaWxlZCA9IDE7CisJaSA9IFNUT1BfVFJJRVM7CisJd2hpbGUgKGktLSA+IDApIHsKKwkJdmFsID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX1JYX0NGRyk7CisJCWlmICgodmFsICYgTUFDX1JYX0NGR19FTikpIHsKKwkJCWlmICh0eGZhaWxlZCkgeworCQkJICBwcmludGsoS0VSTl9FUlIgCisJCQkJICIlczogZW5hYmxpbmcgbWFjIGZhaWxlZCBbdHg6JTA4eDolMDh4XS5cbiIsIAorCQkJCSBjcC0+ZGV2LT5uYW1lLAorCQkJCSByZWFkbChjcC0+cmVncyArIFJFR19NSUZfU1RBVEVfTUFDSElORSksCisJCQkJIHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19TVEFURV9NQUNISU5FKSk7CisJCQl9CisJCQlnb3RvIGVuYWJsZV9yeF9kb25lOworCQl9CisJCXVkZWxheSgxMCk7CisJfQorCXByaW50ayhLRVJOX0VSUiAiJXM6IGVuYWJsaW5nIG1hYyBmYWlsZWQgWyVzOiUwOHg6JTA4eF0uXG4iLCAKKwkgICAgICAgY3AtPmRldi0+bmFtZSwKKwkgICAgICAgKHR4ZmFpbGVkPyAidHgscngiOiJyeCIpLAorCSAgICAgICByZWFkbChjcC0+cmVncyArIFJFR19NSUZfU1RBVEVfTUFDSElORSksCisJICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19TVEFURV9NQUNISU5FKSk7CisKK2VuYWJsZV9yeF9kb25lOgorCWNhc191bm1hc2tfaW50cihjcCk7IC8qIGVuYWJsZSBpbnRlcnJ1cHRzICovCisJd3JpdGVsKFJYX0RFU0NfUklOR05fU0laRSgwKSAtIDQsIGNwLT5yZWdzICsgUkVHX1JYX0tJQ0spOworCXdyaXRlbCgwLCBjcC0+cmVncyArIFJFR19SWF9DT01QX1RBSUwpOworCisJaWYgKGNwLT5jYXNfZmxhZ3MgJiBDQVNfRkxBR19SRUdfUExVUykgeworCQlpZiAoTl9SWF9ERVNDX1JJTkdTID4gMSkgCisJCQl3cml0ZWwoUlhfREVTQ19SSU5HTl9TSVpFKDEpIC0gNCwgCisJCQkgICAgICAgY3AtPnJlZ3MgKyBSRUdfUExVU19SWF9LSUNLMSk7CisKKwkJZm9yIChpID0gMTsgaSA8IE5fUlhfQ09NUF9SSU5HUzsgaSsrKSAKKwkJCXdyaXRlbCgwLCBjcC0+cmVncyArIFJFR19QTFVTX1JYX0NPTVBOX1RBSUwoaSkpOworCX0KK30KKworLyogTXVzdCBiZSBpbnZva2VkIHVuZGVyIGNwLT5sb2NrLiAqLworc3RhdGljIHZvaWQgY2FzX3JlYWRfcGNzX2xpbmtfbW9kZShzdHJ1Y3QgY2FzICpjcCwgaW50ICpmZCwgaW50ICpzcGQsCisJCQkJICAgaW50ICpwYXVzZSkKK3sKKwl1MzIgdmFsID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfUENTX01JSV9MUEEpOworCSpmZCAgICAgPSAodmFsICYgUENTX01JSV9MUEFfRkQpID8gMSA6IDA7CisJKnBhdXNlICA9ICh2YWwgJiBQQ1NfTUlJX0xQQV9TWU1fUEFVU0UpID8gMHgwMSA6IDB4MDA7CisJaWYgKHZhbCAmIFBDU19NSUlfTFBBX0FTWU1fUEFVU0UpCisJCSpwYXVzZSB8PSAweDEwOworCSpzcGQgPSAxMDAwOworfQorCisvKiBNdXN0IGJlIGludm9rZWQgdW5kZXIgY3AtPmxvY2suICovCitzdGF0aWMgdm9pZCBjYXNfcmVhZF9taWlfbGlua19tb2RlKHN0cnVjdCBjYXMgKmNwLCBpbnQgKmZkLCBpbnQgKnNwZCwKKwkJCQkgICBpbnQgKnBhdXNlKQoreworCXUzMiB2YWw7CisKKwkqZmQgPSAwOworCSpzcGQgPSAxMDsKKwkqcGF1c2UgPSAwOworCQorCS8qIHVzZSBHTUlJIHJlZ2lzdGVycyAqLworCXZhbCA9IGNhc19waHlfcmVhZChjcCwgTUlJX0xQQSk7CisJaWYgKHZhbCAmIENBU19MUEFfUEFVU0UpCisJCSpwYXVzZSA9IDB4MDE7CisKKwlpZiAodmFsICYgQ0FTX0xQQV9BU1lNX1BBVVNFKQorCQkqcGF1c2UgfD0gMHgxMDsKKworCWlmICh2YWwgJiBMUEFfRFVQTEVYKQorCQkqZmQgPSAxOworCWlmICh2YWwgJiBMUEFfMTAwKQorCQkqc3BkID0gMTAwOworCisJaWYgKGNwLT5jYXNfZmxhZ3MgJiBDQVNfRkxBR18xMDAwTUJfQ0FQKSB7CisJCXZhbCA9IGNhc19waHlfcmVhZChjcCwgQ0FTX01JSV8xMDAwX1NUQVRVUyk7CisJCWlmICh2YWwgJiAoQ0FTX0xQQV8xMDAwRlVMTCB8IENBU19MUEFfMTAwMEhBTEYpKQorCQkJKnNwZCA9IDEwMDA7CisJCWlmICh2YWwgJiBDQVNfTFBBXzEwMDBGVUxMKQorCQkJKmZkID0gMTsKKwl9Cit9CisKKy8qIEEgbGluay11cCBjb25kaXRpb24gaGFzIG9jY3VycmVkLCBpbml0aWFsaXplIGFuZCBlbmFibGUgdGhlCisgKiByZXN0IG9mIHRoZSBjaGlwLgorICoKKyAqIE11c3QgYmUgaW52b2tlZCB1bmRlciBjcC0+bG9jay4KKyAqLworc3RhdGljIHZvaWQgY2FzX3NldF9saW5rX21vZGVzKHN0cnVjdCBjYXMgKmNwKQoreworCXUzMiB2YWw7CisJaW50IGZ1bGxfZHVwbGV4LCBzcGVlZCwgcGF1c2U7CisKKwlmdWxsX2R1cGxleCA9IDA7CisJc3BlZWQgPSAxMDsKKwlwYXVzZSA9IDA7CisKKwlpZiAoQ0FTX1BIWV9NSUkoY3AtPnBoeV90eXBlKSkgeworCQljYXNfbWlmX3BvbGwoY3AsIDApOworCQl2YWwgPSBjYXNfcGh5X3JlYWQoY3AsIE1JSV9CTUNSKTsKKwkJaWYgKHZhbCAmIEJNQ1JfQU5FTkFCTEUpIHsKKwkJCWNhc19yZWFkX21paV9saW5rX21vZGUoY3AsICZmdWxsX2R1cGxleCwgJnNwZWVkLCAKKwkJCQkJICAgICAgICZwYXVzZSk7CisJCX0gZWxzZSB7CisJCQlpZiAodmFsICYgQk1DUl9GVUxMRFBMWCkKKwkJCQlmdWxsX2R1cGxleCA9IDE7CisKKwkJCWlmICh2YWwgJiBCTUNSX1NQRUVEMTAwKQorCQkJCXNwZWVkID0gMTAwOworCQkJZWxzZSBpZiAodmFsICYgQ0FTX0JNQ1JfU1BFRUQxMDAwKQorCQkJCXNwZWVkID0gKGNwLT5jYXNfZmxhZ3MgJiBDQVNfRkxBR18xMDAwTUJfQ0FQKSA/CisJCQkJCTEwMDAgOiAxMDA7CisJCX0KKwkJY2FzX21pZl9wb2xsKGNwLCAxKTsKKworCX0gZWxzZSB7CisJCXZhbCA9IHJlYWRsKGNwLT5yZWdzICsgUkVHX1BDU19NSUlfQ1RSTCk7CisJCWNhc19yZWFkX3Bjc19saW5rX21vZGUoY3AsICZmdWxsX2R1cGxleCwgJnNwZWVkLCAmcGF1c2UpOworCQlpZiAoKHZhbCAmIFBDU19NSUlfQVVUT05FR19FTikgPT0gMCkgeworCQkJaWYgKHZhbCAmIFBDU19NSUlfQ1RSTF9EVVBMRVgpCisJCQkJZnVsbF9kdXBsZXggPSAxOworCQl9CisJfQorCisJaWYgKG5ldGlmX21zZ19saW5rKGNwKSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IExpbmsgdXAgYXQgJWQgTWJwcywgJXMtZHVwbGV4LlxuIiwKKwkJICAgICAgIGNwLT5kZXYtPm5hbWUsIHNwZWVkLCAoZnVsbF9kdXBsZXggPyAiZnVsbCIgOiAiaGFsZiIpKTsKKworCXZhbCA9IE1BQ19YSUZfVFhfTUlJX09VVFBVVF9FTiB8IE1BQ19YSUZfTElOS19MRUQ7CisJaWYgKENBU19QSFlfTUlJKGNwLT5waHlfdHlwZSkpIHsKKwkJdmFsIHw9IE1BQ19YSUZfTUlJX0JVRkZFUl9PVVRQVVRfRU47CisJCWlmICghZnVsbF9kdXBsZXgpCisJCQl2YWwgfD0gTUFDX1hJRl9ESVNBQkxFX0VDSE87CisJfQorCWlmIChmdWxsX2R1cGxleCkgCisJCXZhbCB8PSBNQUNfWElGX0ZEUExYX0xFRDsKKwlpZiAoc3BlZWQgPT0gMTAwMCkKKwkJdmFsIHw9IE1BQ19YSUZfR01JSV9NT0RFOworCXdyaXRlbCh2YWwsIGNwLT5yZWdzICsgUkVHX01BQ19YSUZfQ0ZHKTsKKworCS8qIGRlYWwgd2l0aCBjYXJyaWVyIGFuZCBjb2xsaXNpb24gZGV0ZWN0LiAqLworCXZhbCA9IE1BQ19UWF9DRkdfSVBHX0VOOworCWlmIChmdWxsX2R1cGxleCkgeworCQl2YWwgfD0gTUFDX1RYX0NGR19JR05PUkVfQ0FSUklFUjsKKwkJdmFsIHw9IE1BQ19UWF9DRkdfSUdOT1JFX0NPTEw7CisJfSBlbHNlIHsKKyNpZm5kZWYgVVNFX0NTTUFfQ0RfUFJPVE8KKwkJdmFsIHw9IE1BQ19UWF9DRkdfTkVWRVJfR0lWRV9VUF9FTjsKKwkJdmFsIHw9IE1BQ19UWF9DRkdfTkVWRVJfR0lWRV9VUF9MSU07CisjZW5kaWYKKwl9CisJLyogdmFsIG5vdyBzZXQgdXAgZm9yIFJFR19NQUNfVFhfQ0ZHICovCisKKwkvKiBJZiBnaWdhYml0IGFuZCBoYWxmLWR1cGxleCwgZW5hYmxlIGNhcnJpZXIgZXh0ZW5zaW9uCisJICogbW9kZS4gIGluY3JlYXNlIHNsb3QgdGltZSB0byA1MTIgYnl0ZXMgYXMgd2VsbC4gCisJICogZWxzZSwgZGlzYWJsZSBpdCBhbmQgbWFrZSBzdXJlIHNsb3QgdGltZSBpcyA2NCBieXRlcy4KKwkgKiBhbHNvIGFjdGl2YXRlIGNoZWNrc3VtIGJ1ZyB3b3JrYXJvdW5kCisJICovCisJaWYgKChzcGVlZCA9PSAxMDAwKSAmJiAhZnVsbF9kdXBsZXgpIHsKKwkJd3JpdGVsKHZhbCB8IE1BQ19UWF9DRkdfQ0FSUklFUl9FWFRFTkQsIAorCQkgICAgICAgY3AtPnJlZ3MgKyBSRUdfTUFDX1RYX0NGRyk7CisKKwkJdmFsID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX1JYX0NGRyk7CisJCXZhbCAmPSB+TUFDX1JYX0NGR19TVFJJUF9GQ1M7IC8qIGNoZWNrc3VtIHdvcmthcm91bmQgKi8KKwkJd3JpdGVsKHZhbCB8IE1BQ19SWF9DRkdfQ0FSUklFUl9FWFRFTkQsIAorCQkgICAgICAgY3AtPnJlZ3MgKyBSRUdfTUFDX1JYX0NGRyk7CisKKwkJd3JpdGVsKDB4MjAwLCBjcC0+cmVncyArIFJFR19NQUNfU0xPVF9USU1FKTsKKworCQljcC0+Y3JjX3NpemUgPSA0OworCQkvKiBtaW5pbXVtIHNpemUgZ2lnYWJpdCBmcmFtZSBhdCBoYWxmIGR1cGxleCAqLworCQljcC0+bWluX2ZyYW1lX3NpemUgPSBDQVNfMTAwME1CX01JTl9GUkFNRTsKKworCX0gZWxzZSB7CisJCXdyaXRlbCh2YWwsIGNwLT5yZWdzICsgUkVHX01BQ19UWF9DRkcpOworCisJCS8qIGNoZWNrc3VtIGJ1ZyB3b3JrYXJvdW5kLiBkb24ndCBzdHJpcCBGQ1Mgd2hlbiBpbiAKKwkJICogaGFsZi1kdXBsZXggbW9kZQorCQkgKi8KKwkJdmFsID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX1JYX0NGRyk7CisJCWlmIChmdWxsX2R1cGxleCkgeworCQkJdmFsIHw9IE1BQ19SWF9DRkdfU1RSSVBfRkNTOworCQkJY3AtPmNyY19zaXplID0gMDsKKwkJCWNwLT5taW5fZnJhbWVfc2l6ZSA9IENBU19NSU5fTVRVOworCQl9IGVsc2UgeworCQkJdmFsICY9IH5NQUNfUlhfQ0ZHX1NUUklQX0ZDUzsKKwkJCWNwLT5jcmNfc2l6ZSA9IDQ7CisJCQljcC0+bWluX2ZyYW1lX3NpemUgPSBDQVNfTUlOX0ZSQU1FOworCQl9CisJCXdyaXRlbCh2YWwgJiB+TUFDX1JYX0NGR19DQVJSSUVSX0VYVEVORCwgCisJCSAgICAgICBjcC0+cmVncyArIFJFR19NQUNfUlhfQ0ZHKTsKKwkJd3JpdGVsKDB4NDAsIGNwLT5yZWdzICsgUkVHX01BQ19TTE9UX1RJTUUpOworCX0KKworCWlmIChuZXRpZl9tc2dfbGluayhjcCkpIHsKKwkJaWYgKHBhdXNlICYgMHgwMSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBhdXNlIGlzIGVuYWJsZWQgIgorCQkJICAgICAgICIocnhmaWZvOiAlZCBvZmY6ICVkIG9uOiAlZClcbiIsCisJCQkgICAgICAgY3AtPmRldi0+bmFtZSwKKwkJCSAgICAgICBjcC0+cnhfZmlmb19zaXplLAorCQkJICAgICAgIGNwLT5yeF9wYXVzZV9vZmYsCisJCQkgICAgICAgY3AtPnJ4X3BhdXNlX29uKTsKKwkJfSBlbHNlIGlmIChwYXVzZSAmIDB4MTApIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBUWCBwYXVzZSBlbmFibGVkXG4iLAorCQkJICAgICAgIGNwLT5kZXYtPm5hbWUpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBhdXNlIGlzIGRpc2FibGVkXG4iLAorCQkJICAgICAgIGNwLT5kZXYtPm5hbWUpOworCQl9CisJfQorCisJdmFsID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX0NUUkxfQ0ZHKTsKKwl2YWwgJj0gfihNQUNfQ1RSTF9DRkdfU0VORF9QQVVTRV9FTiB8IE1BQ19DVFJMX0NGR19SRUNWX1BBVVNFX0VOKTsKKwlpZiAocGF1c2UpIHsgLyogc3ltbWV0cmljIG9yIGFzeW1tZXRyaWMgcGF1c2UgKi8KKwkJdmFsIHw9IE1BQ19DVFJMX0NGR19TRU5EX1BBVVNFX0VOOworCQlpZiAocGF1c2UgJiAweDAxKSB7IC8qIHN5bW1ldHJpYyBwYXVzZSAqLworCQkJdmFsIHw9IE1BQ19DVFJMX0NGR19SRUNWX1BBVVNFX0VOOworCQl9IAorCX0KKwl3cml0ZWwodmFsLCBjcC0+cmVncyArIFJFR19NQUNfQ1RSTF9DRkcpOworCWNhc19zdGFydF9kbWEoY3ApOworfQorCisvKiBNdXN0IGJlIGludm9rZWQgdW5kZXIgY3AtPmxvY2suICovCitzdGF0aWMgdm9pZCBjYXNfaW5pdF9odyhzdHJ1Y3QgY2FzICpjcCwgaW50IHJlc3RhcnRfbGluaykKK3sKKwlpZiAocmVzdGFydF9saW5rKQorCQljYXNfcGh5X2luaXQoY3ApOworCisJY2FzX2luaXRfcGF1c2VfdGhyZXNob2xkcyhjcCk7CisJY2FzX2luaXRfbWFjKGNwKTsKKwljYXNfaW5pdF9kbWEoY3ApOworCisJaWYgKHJlc3RhcnRfbGluaykgeworCQkvKiBEZWZhdWx0IGFuZWcgcGFyYW1ldGVycyAqLworCQljcC0+dGltZXJfdGlja3MgPSAwOworCQljYXNfYmVnaW5fYXV0b19uZWdvdGlhdGlvbihjcCwgTlVMTCk7CisJfSBlbHNlIGlmIChjcC0+bHN0YXRlID09IGxpbmtfdXApIHsKKwkJY2FzX3NldF9saW5rX21vZGVzKGNwKTsKKwkJbmV0aWZfY2Fycmllcl9vbihjcC0+ZGV2KTsKKwl9Cit9CisKKy8qIE11c3QgYmUgaW52b2tlZCB1bmRlciBjcC0+bG9jay4gb24gZWFybGllciBjYXNzaW5pIGJvYXJkcywKKyAqIFNPRlRfMCBpcyB0aWVkIHRvIFBDSSByZXNldC4gd2UgdXNlIHRoaXMgdG8gZm9yY2UgYSBwY2kgcmVzZXQsCisgKiBsZXQgaXQgc2V0dGxlIG91dCwgYW5kIHRoZW4gcmVzdG9yZSBwY2kgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkIGNhc19oYXJkX3Jlc2V0KHN0cnVjdCBjYXMgKmNwKQoreworCXdyaXRlbChCSU1fTE9DQUxfREVWX1NPRlRfMCwgY3AtPnJlZ3MgKyBSRUdfQklNX0xPQ0FMX0RFVl9FTik7IAorCXVkZWxheSgyMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUoY3AtPnBkZXYpOworfQorCisKK3N0YXRpYyB2b2lkIGNhc19nbG9iYWxfcmVzZXQoc3RydWN0IGNhcyAqY3AsIGludCBibGtmbGFnKQoreworCWludCBsaW1pdDsKKworCS8qIGlzc3VlIGEgZ2xvYmFsIHJlc2V0LiBkb24ndCB1c2UgUlNUT1VULiAqLworCWlmIChibGtmbGFnICYmICFDQVNfUEhZX01JSShjcC0+cGh5X3R5cGUpKSB7CisJCS8qIEZvciBQQ1MsIHdoZW4gdGhlIGJsa2ZsYWcgaXMgc2V0LCB3ZSBzaG91bGQgc2V0IHRoZQorCQkgKiBTV19SRVNUX0JMT0NLX1BDU19TTElOSyBiaXQgdG8gcHJldmVudCB0aGUgcmVzdWx0cyBvZgorCQkgKiB0aGUgbGFzdCBhdXRvbmVnb3RpYXRpb24gZnJvbSBiZWluZyBjbGVhcmVkLiAgV2UnbGwKKwkJICogbmVlZCBzb21lIHNwZWNpYWwgaGFuZGxpbmcgaWYgdGhlIGNoaXAgaXMgc2V0IGludG8gYQorCQkgKiBsb29wYmFjayBtb2RlLgorCQkgKi8KKwkJd3JpdGVsKChTV19SRVNFVF9UWCB8IFNXX1JFU0VUX1JYIHwgU1dfUkVTRVRfQkxPQ0tfUENTX1NMSU5LKSwgCisJCSAgICAgICBjcC0+cmVncyArIFJFR19TV19SRVNFVCk7CisJfSBlbHNlIHsKKwkJd3JpdGVsKFNXX1JFU0VUX1RYIHwgU1dfUkVTRVRfUlgsIGNwLT5yZWdzICsgUkVHX1NXX1JFU0VUKTsKKwl9CisKKwkvKiBuZWVkIHRvIHdhaXQgYXQgbGVhc3QgM21zIGJlZm9yZSBwb2xsaW5nIHJlZ2lzdGVyICovCisJbWRlbGF5KDMpOworCisJbGltaXQgPSBTVE9QX1RSSUVTOworCXdoaWxlIChsaW1pdC0tID4gMCkgeworCQl1MzIgdmFsID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfU1dfUkVTRVQpOworCQlpZiAoKHZhbCAmIChTV19SRVNFVF9UWCB8IFNXX1JFU0VUX1JYKSkgPT0gMCkKKwkJCWdvdG8gZG9uZTsKKwkJdWRlbGF5KDEwKTsKKwl9CisJcHJpbnRrKEtFUk5fRVJSICIlczogc3cgcmVzZXQgZmFpbGVkLlxuIiwgY3AtPmRldi0+bmFtZSk7CisKK2RvbmU6CisJLyogZW5hYmxlIHZhcmlvdXMgQklNIGludGVycnVwdHMgKi8KKwl3cml0ZWwoQklNX0NGR19EUEFSX0lOVFJfRU5BQkxFIHwgQklNX0NGR19STUFfSU5UUl9FTkFCTEUgfCAKKwkgICAgICAgQklNX0NGR19SVEFfSU5UUl9FTkFCTEUsIGNwLT5yZWdzICsgUkVHX0JJTV9DRkcpOworCisJLyogY2xlYXIgb3V0IHBjaSBlcnJvciBzdGF0dXMgbWFzayBmb3IgaGFuZGxlZCBlcnJvcnMuCisJICogd2UgZG9uJ3QgZGVhbCB3aXRoIERNQSBjb3VudGVyIG92ZXJmbG93cyBhcyB0aGV5IGhhcHBlbgorCSAqIGFsbCB0aGUgdGltZS4KKwkgKi8KKwl3cml0ZWwoMHhGRkZGRkZGRlUgJiB+KFBDSV9FUlJfQkFEQUNLIHwgUENJX0VSUl9EVFJUTyB8IAorCQkJICAgICAgIFBDSV9FUlJfT1RIRVIgfCBQQ0lfRVJSX0JJTV9ETUFfV1JJVEUgfCAKKwkJCSAgICAgICBQQ0lfRVJSX0JJTV9ETUFfUkVBRCksIGNwLT5yZWdzICsgCisJICAgICAgIFJFR19QQ0lfRVJSX1NUQVRVU19NQVNLKTsKKworCS8qIHNldCB1cCBmb3IgTUlJIGJ5IGRlZmF1bHQgdG8gYWRkcmVzcyBtYWMgcnggcmVzZXQgdGltZW91dAorCSAqIGlzc3VlCisJICovCisJd3JpdGVsKFBDU19EQVRBUEFUSF9NT0RFX01JSSwgY3AtPnJlZ3MgKyBSRUdfUENTX0RBVEFQQVRIX01PREUpOworfQorCitzdGF0aWMgdm9pZCBjYXNfcmVzZXQoc3RydWN0IGNhcyAqY3AsIGludCBibGtmbGFnKQoreworCXUzMiB2YWw7CisKKwljYXNfbWFza19pbnRyKGNwKTsKKwljYXNfZ2xvYmFsX3Jlc2V0KGNwLCBibGtmbGFnKTsKKwljYXNfbWFjX3Jlc2V0KGNwKTsKKwljYXNfZW50cm9weV9yZXNldChjcCk7CisKKwkvKiBkaXNhYmxlIGRtYSBlbmdpbmVzLiAqLworCXZhbCA9IHJlYWRsKGNwLT5yZWdzICsgUkVHX1RYX0NGRyk7CisJdmFsICY9IH5UWF9DRkdfRE1BX0VOOworCXdyaXRlbCh2YWwsIGNwLT5yZWdzICsgUkVHX1RYX0NGRyk7CisKKwl2YWwgPSByZWFkbChjcC0+cmVncyArIFJFR19SWF9DRkcpOworCXZhbCAmPSB+UlhfQ0ZHX0RNQV9FTjsKKwl3cml0ZWwodmFsLCBjcC0+cmVncyArIFJFR19SWF9DRkcpOworCisJLyogcHJvZ3JhbSBoZWFkZXIgcGFyc2VyICovCisJaWYgKChjcC0+Y2FzX2ZsYWdzICYgQ0FTX0ZMQUdfVEFSR0VUX0FCT1JUKSB8fAorCSAgICAoQ0FTX0hQX0FMVF9GSVJNV0FSRSA9PSBjYXNfcHJvZ19udWxsKSkgeworCQljYXNfbG9hZF9maXJtd2FyZShjcCwgQ0FTX0hQX0ZJUk1XQVJFKTsKKwl9IGVsc2UgeworCQljYXNfbG9hZF9maXJtd2FyZShjcCwgQ0FTX0hQX0FMVF9GSVJNV0FSRSk7CisJfQorCisJLyogY2xlYXIgb3V0IGVycm9yIHJlZ2lzdGVycyAqLworCXNwaW5fbG9jaygmY3AtPnN0YXRfbG9ja1tOX1RYX1JJTkdTXSk7CisJY2FzX2NsZWFyX21hY19lcnIoY3ApOworCXNwaW5fdW5sb2NrKCZjcC0+c3RhdF9sb2NrW05fVFhfUklOR1NdKTsKK30KKworLyogU2h1dCBkb3duIHRoZSBjaGlwLCBtdXN0IGJlIGNhbGxlZCB3aXRoIHBtX3NlbSBoZWxkLiAgKi8KK3N0YXRpYyB2b2lkIGNhc19zaHV0ZG93bihzdHJ1Y3QgY2FzICpjcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogTWFrZSB1cyBub3QtcnVubmluZyB0byBhdm9pZCB0aW1lcnMgcmVzcGF3bmluZyAqLworCWNwLT5od19ydW5uaW5nID0gMDsKKworCWRlbF90aW1lcl9zeW5jKCZjcC0+bGlua190aW1lcik7CisKKwkvKiBTdG9wIHRoZSByZXNldCB0YXNrICovCisjaWYgMAorCXdoaWxlIChhdG9taWNfcmVhZCgmY3AtPnJlc2V0X3Rhc2tfcGVuZGluZ19tdHUpIHx8CisJICAgICAgIGF0b21pY19yZWFkKCZjcC0+cmVzZXRfdGFza19wZW5kaW5nX3NwYXJlKSB8fAorCSAgICAgICBhdG9taWNfcmVhZCgmY3AtPnJlc2V0X3Rhc2tfcGVuZGluZ19hbGwpKQorCQlzY2hlZHVsZSgpOworCisjZWxzZQorCXdoaWxlIChhdG9taWNfcmVhZCgmY3AtPnJlc2V0X3Rhc2tfcGVuZGluZykpCisJCXNjaGVkdWxlKCk7CisjZW5kaWYJCisJLyogQWN0dWFsbHkgc3RvcCB0aGUgY2hpcCAqLworCWNhc19sb2NrX2FsbF9zYXZlKGNwLCBmbGFncyk7CisJY2FzX3Jlc2V0KGNwLCAwKTsKKwlpZiAoY3AtPmNhc19mbGFncyAmIENBU19GTEFHX1NBVFVSTikKKwkJY2FzX3BoeV9wb3dlcmRvd24oY3ApOworCWNhc191bmxvY2tfYWxsX3Jlc3RvcmUoY3AsIGZsYWdzKTsKK30KKworc3RhdGljIGludCBjYXNfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKK3sKKwlzdHJ1Y3QgY2FzICpjcCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAobmV3X210dSA8IENBU19NSU5fTVRVIHx8IG5ld19tdHUgPiBDQVNfTUFYX01UVSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZXYtPm10dSA9IG5ld19tdHU7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikgfHwgIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpCisJCXJldHVybiAwOworCisJLyogbGV0IHRoZSByZXNldCB0YXNrIGhhbmRsZSBpdCAqLworI2lmIDEKKwlhdG9taWNfaW5jKCZjcC0+cmVzZXRfdGFza19wZW5kaW5nKTsKKwlpZiAoKGNwLT5waHlfdHlwZSAmIENBU19QSFlfU0VSREVTKSkgeworCQlhdG9taWNfaW5jKCZjcC0+cmVzZXRfdGFza19wZW5kaW5nX2FsbCk7CisJfSBlbHNlIHsKKwkJYXRvbWljX2luYygmY3AtPnJlc2V0X3Rhc2tfcGVuZGluZ19tdHUpOworCX0KKwlzY2hlZHVsZV93b3JrKCZjcC0+cmVzZXRfdGFzayk7CisjZWxzZQorCWF0b21pY19zZXQoJmNwLT5yZXNldF90YXNrX3BlbmRpbmcsIChjcC0+cGh5X3R5cGUgJiBDQVNfUEhZX1NFUkRFUykgPyAKKwkJICAgQ0FTX1JFU0VUX0FMTCA6IENBU19SRVNFVF9NVFUpOworCXByaW50ayhLRVJOX0VSUiAicmVzZXQgY2FsbGVkIGluIGNhc19jaGFuZ2VfbXR1XG4iKTsKKwlzY2hlZHVsZV93b3JrKCZjcC0+cmVzZXRfdGFzayk7CisjZW5kaWYKKworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNhc19jbGVhbl90eGQoc3RydWN0IGNhcyAqY3AsIGludCByaW5nKQoreworCXN0cnVjdCBjYXNfdHhfZGVzYyAqdHhkID0gY3AtPmluaXRfdHhkc1tyaW5nXTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqKnNrYnMgPSBjcC0+dHhfc2tic1tyaW5nXTsKKwl1NjQgZGFkZHIsIGRsZW47CisJaW50IGksIHNpemU7CisKKwlzaXplID0gVFhfREVTQ19SSU5HTl9TSVpFKHJpbmcpOworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJaW50IGZyYWc7CisKKwkJaWYgKHNrYnNbaV0gPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCXNrYiA9IHNrYnNbaV07CisJCXNrYnNbaV0gPSBOVUxMOworCisJCWZvciAoZnJhZyA9IDA7IGZyYWcgPD0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgIGZyYWcrKykgeworCQkJaW50IGVudCA9IGkgJiAoc2l6ZSAtIDEpOworCisJCQkvKiBmaXJzdCBidWZmZXIgaXMgbmV2ZXIgYSB0aW55IGJ1ZmZlciBhbmQgc28KKwkJCSAqIG5lZWRzIHRvIGJlIHVubWFwcGVkLgorCQkJICovCisJCQlkYWRkciA9IGxlNjRfdG9fY3B1KHR4ZFtlbnRdLmJ1ZmZlcik7CisJCQlkbGVuICA9ICBDQVNfVkFMKFRYX0RFU0NfQlVGTEVOLCAKKwkJCQkJIGxlNjRfdG9fY3B1KHR4ZFtlbnRdLmNvbnRyb2wpKTsKKwkJCXBjaV91bm1hcF9wYWdlKGNwLT5wZGV2LCBkYWRkciwgZGxlbiwKKwkJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CisKKwkJCWlmIChmcmFnICE9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MpIHsKKwkJCQlpKys7CisKKwkJCQkvKiBuZXh0IGJ1ZmZlciBtaWdodCBieSBhIHRpbnkgYnVmZmVyLgorCQkJCSAqIHNraXAgcGFzdCBpdC4KKwkJCQkgKi8KKwkJCQllbnQgPSBpICYgKHNpemUgLSAxKTsKKwkJCQlpZiAoY3AtPnR4X3RpbnlfdXNlW3JpbmddW2VudF0udXNlZCkKKwkJCQkJaSsrOworCQkJfQorCQl9CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJfQorCisJLyogemVybyBvdXQgdGlueSBidWYgdXNhZ2UgKi8KKwltZW1zZXQoY3AtPnR4X3RpbnlfdXNlW3JpbmddLCAwLCBzaXplKnNpemVvZigqY3AtPnR4X3RpbnlfdXNlW3JpbmddKSk7Cit9CisKKy8qIGZyZWVkIG9uIGNsb3NlICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2FzX2ZyZWVfcnhfZGVzYyhzdHJ1Y3QgY2FzICpjcCwgaW50IHJpbmcpCit7CisJY2FzX3BhZ2VfdCAqKnBhZ2UgPSBjcC0+cnhfcGFnZXNbcmluZ107CisJaW50IGksIHNpemU7CisKKwlzaXplID0gUlhfREVTQ19SSU5HTl9TSVpFKHJpbmcpOworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJaWYgKHBhZ2VbaV0pIHsKKwkJCWNhc19wYWdlX2ZyZWUoY3AsIHBhZ2VbaV0pOworCQkJcGFnZVtpXSA9IE5VTEw7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNhc19mcmVlX3J4ZHMoc3RydWN0IGNhcyAqY3ApCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTl9SWF9ERVNDX1JJTkdTOyBpKyspCisJCWNhc19mcmVlX3J4X2Rlc2MoY3AsIGkpOworfQorCisvKiBNdXN0IGJlIGludm9rZWQgdW5kZXIgY3AtPmxvY2suICovCitzdGF0aWMgdm9pZCBjYXNfY2xlYW5fcmluZ3Moc3RydWN0IGNhcyAqY3ApCit7CisJaW50IGk7CisKKwkvKiBuZWVkIHRvIGNsZWFuIGFsbCB0eCByaW5ncyAqLworCW1lbXNldChjcC0+dHhfb2xkLCAwLCBzaXplb2YoKmNwLT50eF9vbGQpKk5fVFhfUklOR1MpOworCW1lbXNldChjcC0+dHhfbmV3LCAwLCBzaXplb2YoKmNwLT50eF9uZXcpKk5fVFhfUklOR1MpOworCWZvciAoaSA9IDA7IGkgPCBOX1RYX1JJTkdTOyBpKyspCisJCWNhc19jbGVhbl90eGQoY3AsIGkpOworCisJLyogemVybyBvdXQgaW5pdCBibG9jayAqLworCW1lbXNldChjcC0+aW5pdF9ibG9jaywgMCwgc2l6ZW9mKHN0cnVjdCBjYXNfaW5pdF9ibG9jaykpOworCWNhc19jbGVhbl9yeGRzKGNwKTsKKwljYXNfY2xlYW5fcnhjcyhjcCk7Cit9CisKKy8qIGFsbG9jYXRlZCBvbiBvcGVuICovCitzdGF0aWMgaW5saW5lIGludCBjYXNfYWxsb2NfcnhfZGVzYyhzdHJ1Y3QgY2FzICpjcCwgaW50IHJpbmcpCit7CisJY2FzX3BhZ2VfdCAqKnBhZ2UgPSBjcC0+cnhfcGFnZXNbcmluZ107CisJaW50IHNpemUsIGkgPSAwOworCisJc2l6ZSA9IFJYX0RFU0NfUklOR05fU0laRShyaW5nKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCWlmICgocGFnZVtpXSA9IGNhc19wYWdlX2FsbG9jKGNwLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgCisJCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNhc19hbGxvY19yeGRzKHN0cnVjdCBjYXMgKmNwKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5fUlhfREVTQ19SSU5HUzsgaSsrKSB7CisJCWlmIChjYXNfYWxsb2NfcnhfZGVzYyhjcCwgaSkgPCAwKSB7CisJCQljYXNfZnJlZV9yeGRzKGNwKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2FzX3Jlc2V0X3Rhc2sodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY2FzICpjcCA9IChzdHJ1Y3QgY2FzICopIGRhdGE7CisjaWYgMAorCWludCBwZW5kaW5nID0gYXRvbWljX3JlYWQoJmNwLT5yZXNldF90YXNrX3BlbmRpbmcpOworI2Vsc2UKKwlpbnQgcGVuZGluZ19hbGwgPSBhdG9taWNfcmVhZCgmY3AtPnJlc2V0X3Rhc2tfcGVuZGluZ19hbGwpOworCWludCBwZW5kaW5nX3NwYXJlID0gYXRvbWljX3JlYWQoJmNwLT5yZXNldF90YXNrX3BlbmRpbmdfc3BhcmUpOworCWludCBwZW5kaW5nX210dSA9IGF0b21pY19yZWFkKCZjcC0+cmVzZXRfdGFza19wZW5kaW5nX210dSk7CisKKwlpZiAocGVuZGluZ19hbGwgPT0gMCAmJiBwZW5kaW5nX3NwYXJlID09IDAgJiYgcGVuZGluZ19tdHUgPT0gMCkgeworCQkvKiBXZSBjYW4gaGF2ZSBtb3JlIHRhc2tzIHNjaGVkdWxlZCB0aGFuIGFjdHVhbGx5CisJCSAqIG5lZWRlZC4KKwkJICovCisJCWF0b21pY19kZWMoJmNwLT5yZXNldF90YXNrX3BlbmRpbmcpOworCQlyZXR1cm47CisJfQorI2VuZGlmCisJLyogVGhlIGxpbmsgd2VudCBkb3duLCB3ZSByZXNldCB0aGUgcmluZywgYnV0IGtlZXAKKwkgKiBETUEgc3RvcHBlZC4gVXNlIHRoaXMgZnVuY3Rpb24gZm9yIHJlc2V0CisJICogb24gZXJyb3IgYXMgd2VsbC4KKwkgKi8KKwlpZiAoY3AtPmh3X3J1bm5pbmcpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQkvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IGludGVycnVwdHMgb3IgdHggcGFja2V0cyAqLworCQluZXRpZl9kZXZpY2VfZGV0YWNoKGNwLT5kZXYpOworCQljYXNfbG9ja19hbGxfc2F2ZShjcCwgZmxhZ3MpOworCisJCWlmIChjcC0+b3BlbmVkKSB7CisJCQkvKiBXZSBjYWxsIGNhc19zcGFyZV9yZWNvdmVyIHdoZW4gd2UgY2FsbCBjYXNfb3Blbi4KKwkJCSAqIGJ1dCB3ZSBkbyBub3QgaW5pdGlhbGl6ZSB0aGUgbGlzdHMgY2FzX3NwYXJlX3JlY292ZXIKKwkJCSAqIHVzZXMgdW50aWwgY2FzX29wZW4gaXMgY2FsbGVkLgorCQkJICovCisJCQljYXNfc3BhcmVfcmVjb3ZlcihjcCwgR0ZQX0FUT01JQyk7CisJCX0KKyNpZiAxCisJCS8qIHRlc3QgPT4gb25seSBwZW5kaW5nX3NwYXJlIHNldCAqLworCQlpZiAoIXBlbmRpbmdfYWxsICYmICFwZW5kaW5nX210dSkKKwkJCWdvdG8gZG9uZTsKKyNlbHNlCisJCWlmIChwZW5kaW5nID09IENBU19SRVNFVF9TUEFSRSkKKwkJCWdvdG8gZG9uZTsKKyNlbmRpZgorCQkvKiB3aGVuIHBlbmRpbmcgPT0gQ0FTX1JFU0VUX0FMTCwgdGhlIGZvbGxvd2luZworCQkgKiBjYWxsIHRvIGNhc19pbml0X2h3IHdpbGwgcmVzdGFydCBhdXRvIG5lZ290aWF0aW9uLgorCQkgKiBTZXR0aW5nIHRoZSBzZWNvbmQgYXJndW1lbnQgb2YgY2FzX3Jlc2V0IHRvCisJCSAqICEocGVuZGluZyA9PSBDQVNfUkVTRVRfQUxMKSB3aWxsIHNldCB0aGlzIGFyZ3VtZW50CisJCSAqIHRvIDEgKGF2b2lkaW5nIHJlaW5pdGlhbGl6aW5nIHRoZSBQSFkgZm9yIHRoZSBub3JtYWwgCisJCSAqIFBDUyBjYXNlKSB3aGVuIGF1dG8gbmVnb3RpYXRpb24gaXMgbm90IHJlc3RhcnRlZC4KKwkJICovCisjaWYgMQorCQljYXNfcmVzZXQoY3AsICEocGVuZGluZ19hbGwgPiAwKSk7CisJCWlmIChjcC0+b3BlbmVkKQorCQkJY2FzX2NsZWFuX3JpbmdzKGNwKTsKKwkJY2FzX2luaXRfaHcoY3AsIChwZW5kaW5nX2FsbCA+IDApKTsKKyNlbHNlCisJCWNhc19yZXNldChjcCwgIShwZW5kaW5nID09IENBU19SRVNFVF9BTEwpKTsKKwkJaWYgKGNwLT5vcGVuZWQpCisJCQljYXNfY2xlYW5fcmluZ3MoY3ApOworCQljYXNfaW5pdF9odyhjcCwgcGVuZGluZyA9PSBDQVNfUkVTRVRfQUxMKTsKKyNlbmRpZgorCitkb25lOgorCQljYXNfdW5sb2NrX2FsbF9yZXN0b3JlKGNwLCBmbGFncyk7CisJCW5ldGlmX2RldmljZV9hdHRhY2goY3AtPmRldik7CisJfQorI2lmIDEKKwlhdG9taWNfc3ViKHBlbmRpbmdfYWxsLCAmY3AtPnJlc2V0X3Rhc2tfcGVuZGluZ19hbGwpOworCWF0b21pY19zdWIocGVuZGluZ19zcGFyZSwgJmNwLT5yZXNldF90YXNrX3BlbmRpbmdfc3BhcmUpOworCWF0b21pY19zdWIocGVuZGluZ19tdHUsICZjcC0+cmVzZXRfdGFza19wZW5kaW5nX210dSk7CisJYXRvbWljX2RlYygmY3AtPnJlc2V0X3Rhc2tfcGVuZGluZyk7CisjZWxzZQorCWF0b21pY19zZXQoJmNwLT5yZXNldF90YXNrX3BlbmRpbmcsIDApOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGNhc19saW5rX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgY2FzICpjcCA9IChzdHJ1Y3QgY2FzICopIGRhdGE7CisJaW50IG1hc2ssIHBlbmRpbmcgPSAwLCByZXNldCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChsaW5rX3RyYW5zaXRpb25fdGltZW91dCAhPSAwICYmCisJICAgIGNwLT5saW5rX3RyYW5zaXRpb25famlmZmllc192YWxpZCAmJgorCSAgICAoKGppZmZpZXMgLSBjcC0+bGlua190cmFuc2l0aW9uX2ppZmZpZXMpID4gCisJICAgICAgKGxpbmtfdHJhbnNpdGlvbl90aW1lb3V0KSkpIHsKKwkJLyogT25lLXNlY29uZCBjb3VudGVyIHNvIGxpbmstZG93biB3b3JrYXJvdW5kIGRvZXNuJ3QgCisJCSAqIGNhdXNlIHJlc2V0cyB0byBvY2N1ciBzbyBmYXN0IGFzIHRvIGZvb2wgdGhlIHN3aXRjaAorCQkgKiBpbnRvIHRoaW5raW5nIHRoZSBsaW5rIGlzIGRvd24uCisJCSAqLworCQljcC0+bGlua190cmFuc2l0aW9uX2ppZmZpZXNfdmFsaWQgPSAwOworCX0KKworCWlmICghY3AtPmh3X3J1bm5pbmcpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjcC0+bG9jaywgZmxhZ3MpOworCWNhc19sb2NrX3R4KGNwKTsKKwljYXNfZW50cm9weV9nYXRoZXIoY3ApOworCisJLyogSWYgdGhlIGxpbmsgdGFzayBpcyBzdGlsbCBwZW5kaW5nLCB3ZSBqdXN0CisJICogcmVzY2hlZHVsZSB0aGUgbGluayB0aW1lcgorCSAqLworI2lmIDEKKwlpZiAoYXRvbWljX3JlYWQoJmNwLT5yZXNldF90YXNrX3BlbmRpbmdfYWxsKSB8fAorCSAgICBhdG9taWNfcmVhZCgmY3AtPnJlc2V0X3Rhc2tfcGVuZGluZ19zcGFyZSkgfHwKKwkgICAgYXRvbWljX3JlYWQoJmNwLT5yZXNldF90YXNrX3BlbmRpbmdfbXR1KSkgCisJCWdvdG8gZG9uZTsKKyNlbHNlCisJaWYgKGF0b21pY19yZWFkKCZjcC0+cmVzZXRfdGFza19wZW5kaW5nKSkgCisJCWdvdG8gZG9uZTsKKyNlbmRpZgorCisJLyogY2hlY2sgZm9yIHJ4IGNsZWFuaW5nICovCisJaWYgKChtYXNrID0gKGNwLT5jYXNfZmxhZ3MgJiBDQVNfRkxBR19SWERfUE9TVF9NQVNLKSkpIHsKKwkJaW50IGksIHJtYXNrOworCisJCWZvciAoaSA9IDA7IGkgPCBNQVhfUlhfREVTQ19SSU5HUzsgaSsrKSB7CisJCQlybWFzayA9IENBU19GTEFHX1JYRF9QT1NUKGkpOworCQkJaWYgKChtYXNrICYgcm1hc2spID09IDApCisJCQkJY29udGludWU7CisKKwkJCS8qIHBvc3RfcnhkcyB3aWxsIGRvIGEgbW9kX3RpbWVyICovCisJCQlpZiAoY2FzX3Bvc3Rfcnhkc19yaW5nTihjcCwgaSwgY3AtPnJ4X2xhc3RbaV0pIDwgMCkgeworCQkJCXBlbmRpbmcgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJY3AtPmNhc19mbGFncyAmPSB+cm1hc2s7CisJCX0KKwl9CisKKwlpZiAoQ0FTX1BIWV9NSUkoY3AtPnBoeV90eXBlKSkgeworCQl1MTYgYm1zcjsKKwkJY2FzX21pZl9wb2xsKGNwLCAwKTsKKwkJYm1zciA9IGNhc19waHlfcmVhZChjcCwgTUlJX0JNU1IpOworCQkvKiBXVFo6IFNvbGFyaXMgZHJpdmVyIHJlYWRzIHRoaXMgdHdpY2UsIGJ1dCB0aGF0CisJCSAqIG1heSBiZSBkdWUgdG8gdGhlIFBDUyBjYXNlIGFuZCB0aGUgdXNlIG9mIGEKKwkJICogY29tbW9uIGltcGxlbWVudGF0aW9uLiBSZWFkIGl0IHR3aWNlIGhlcmUgdG8gYmUKKwkJICogc2FmZS4KKwkJICovCisJCWJtc3IgPSBjYXNfcGh5X3JlYWQoY3AsIE1JSV9CTVNSKTsKKwkJY2FzX21pZl9wb2xsKGNwLCAxKTsKKwkJcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUlGX1NUQVRVUyk7IC8qIGF2b2lkIGR1cHMgKi8KKwkJcmVzZXQgPSBjYXNfbWlpX2xpbmtfY2hlY2soY3AsIGJtc3IpOworCX0gZWxzZSB7CisJCXJlc2V0ID0gY2FzX3Bjc19saW5rX2NoZWNrKGNwKTsKKwl9CisKKwlpZiAocmVzZXQpCisJCWdvdG8gZG9uZTsKKworCS8qIGNoZWNrIGZvciB0eCBzdGF0ZSBtYWNoaW5lIGNvbmZ1c2lvbiAqLworCWlmICgocmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX1RYX1NUQVRVUykgJiBNQUNfVFhfRlJBTUVfWE1JVCkgPT0gMCkgeworCQl1MzIgdmFsID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX1NUQVRFX01BQ0hJTkUpOworCQl1MzIgd3B0ciwgcnB0cjsKKwkJaW50IHRsbSAgPSBDQVNfVkFMKE1BQ19TTV9UTE0sIHZhbCk7CisKKwkJaWYgKCgodGxtID09IDB4NSkgfHwgKHRsbSA9PSAweDMpKSAmJgorCQkgICAgKENBU19WQUwoTUFDX1NNX0VOQ0FQX1NNLCB2YWwpID09IDApKSB7CisJCQlpZiAobmV0aWZfbXNnX3R4X2VycihjcCkpCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eCBlcnI6ICIKKwkJCQkgICAgICAgIk1BQ19TVEFURVslMDh4XVxuIiwKKwkJCQkgICAgICAgY3AtPmRldi0+bmFtZSwgdmFsKTsKKwkJCXJlc2V0ID0gMTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCXZhbCAgPSByZWFkbChjcC0+cmVncyArIFJFR19UWF9GSUZPX1BLVF9DTlQpOworCQl3cHRyID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfVFhfRklGT19XUklURV9QVFIpOworCQlycHRyID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfVFhfRklGT19SRUFEX1BUUik7CisJCWlmICgodmFsID09IDApICYmICh3cHRyICE9IHJwdHIpKSB7CisJCQlpZiAobmV0aWZfbXNnX3R4X2VycihjcCkpCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eCBlcnI6ICIKKwkJCQkgICAgICAgIlRYX0ZJRk9bJTA4eDolMDh4OiUwOHhdXG4iLAorCQkJCSAgICAgICBjcC0+ZGV2LT5uYW1lLCB2YWwsIHdwdHIsIHJwdHIpOworCQkJcmVzZXQgPSAxOworCQl9CisKKwkJaWYgKHJlc2V0KQorCQkJY2FzX2hhcmRfcmVzZXQoY3ApOworCX0KKworZG9uZToKKwlpZiAocmVzZXQpIHsKKyNpZiAxCisJCWF0b21pY19pbmMoJmNwLT5yZXNldF90YXNrX3BlbmRpbmcpOworCQlhdG9taWNfaW5jKCZjcC0+cmVzZXRfdGFza19wZW5kaW5nX2FsbCk7CisJCXNjaGVkdWxlX3dvcmsoJmNwLT5yZXNldF90YXNrKTsKKyNlbHNlCisJCWF0b21pY19zZXQoJmNwLT5yZXNldF90YXNrX3BlbmRpbmcsIENBU19SRVNFVF9BTEwpOworCQlwcmludGsoS0VSTl9FUlIgInJlc2V0IGNhbGxlZCBpbiBjYXNfbGlua190aW1lclxuIik7CisJCXNjaGVkdWxlX3dvcmsoJmNwLT5yZXNldF90YXNrKTsKKyNlbmRpZgorCX0KKworCWlmICghcGVuZGluZykKKwkJbW9kX3RpbWVyKCZjcC0+bGlua190aW1lciwgamlmZmllcyArIENBU19MSU5LX1RJTUVPVVQpOworCWNhc191bmxvY2tfdHgoY3ApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qIHRpbnkgYnVmZmVycyBhcmUgdXNlZCB0byBhdm9pZCB0YXJnZXQgYWJvcnQgaXNzdWVzIHdpdGggCisgKiBvbGRlciBjYXNzaW5pJ3MKKyAqLworc3RhdGljIHZvaWQgY2FzX3R4X3RpbnlfZnJlZShzdHJ1Y3QgY2FzICpjcCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGNwLT5wZGV2OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5fVFhfUklOR1M7IGkrKykgeworCQlpZiAoIWNwLT50eF90aW55X2J1ZnNbaV0pCisJCQljb250aW51ZTsKKworCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIFRYX1RJTllfQlVGX0JMT0NLLCAKKwkJCQkgICAgY3AtPnR4X3RpbnlfYnVmc1tpXSwKKwkJCQkgICAgY3AtPnR4X3RpbnlfZHZtYVtpXSk7CisJCWNwLT50eF90aW55X2J1ZnNbaV0gPSBOVUxMOworCX0KK30KKworc3RhdGljIGludCBjYXNfdHhfdGlueV9hbGxvYyhzdHJ1Y3QgY2FzICpjcCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGNwLT5wZGV2OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5fVFhfUklOR1M7IGkrKykgeworCQljcC0+dHhfdGlueV9idWZzW2ldID0gCisJCQlwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCBUWF9USU5ZX0JVRl9CTE9DSywKKwkJCQkJICAgICAmY3AtPnR4X3RpbnlfZHZtYVtpXSk7CisJCWlmICghY3AtPnR4X3RpbnlfYnVmc1tpXSkgeworCQkJY2FzX3R4X3RpbnlfZnJlZShjcCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBjYXNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBjYXMgKmNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaHdfd2FzX3VwLCBlcnI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRvd24oJmNwLT5wbV9zZW0pOworCisJaHdfd2FzX3VwID0gY3AtPmh3X3J1bm5pbmc7CisKKwkvKiBUaGUgcG93ZXItbWFuYWdlbWVudCBzZW1hcGhvcmUgcHJvdGVjdHMgdGhlIGh3X3J1bm5pbmcKKwkgKiBldGMuIHN0YXRlIHNvIGl0IGlzIHNhZmUgdG8gZG8gdGhpcyBiaXQgd2l0aG91dCBjcC0+bG9jaworCSAqLworCWlmICghY3AtPmh3X3J1bm5pbmcpIHsKKwkJLyogUmVzZXQgdGhlIGNoaXAgKi8KKwkJY2FzX2xvY2tfYWxsX3NhdmUoY3AsIGZsYWdzKTsKKwkJLyogV2Ugc2V0IHRoZSBzZWNvbmQgYXJnIHRvIGNhc19yZXNldCB0byB6ZXJvCisJCSAqIGJlY2F1c2UgY2FzX2luaXRfaHcgYmVsb3cgd2lsbCBoYXZlIGl0cyBzZWNvbmQgCisJCSAqIGFyZ3VtZW50IHNldCB0byBub24temVybywgd2hpY2ggd2lsbCBmb3JjZQorCQkgKiBhdXRvbmVnb3RpYXRpb24gdG8gc3RhcnQuCisJCSAqLworCQljYXNfcmVzZXQoY3AsIDApOworCQljcC0+aHdfcnVubmluZyA9IDE7CisJCWNhc191bmxvY2tfYWxsX3Jlc3RvcmUoY3AsIGZsYWdzKTsKKwl9CisKKwlpZiAoY2FzX3R4X3RpbnlfYWxsb2MoY3ApIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBhbGxvYyByeCBkZXNjcmlwdG9ycyAqLworCWVyciA9IC1FTk9NRU07CisJaWYgKGNhc19hbGxvY19yeGRzKGNwKSA8IDApCisJCWdvdG8gZXJyX3R4X3Rpbnk7CisJCisJLyogYWxsb2NhdGUgc3BhcmVzICovCisJY2FzX3NwYXJlX2luaXQoY3ApOworCWNhc19zcGFyZV9yZWNvdmVyKGNwLCBHRlBfS0VSTkVMKTsKKworCS8qIFdlIGNhbiBub3cgcmVxdWVzdCB0aGUgaW50ZXJydXB0IGFzIHdlIGtub3cgaXQncyBtYXNrZWQKKwkgKiBvbiB0aGUgY29udHJvbGxlci4gY2Fzc2luaSsgaGFzIHVwIHRvIDQgaW50ZXJydXB0cworCSAqIHRoYXQgY2FuIGJlIHVzZWQsIGJ1dCB5b3UgbmVlZCB0byBkbyBleHBsaWNpdCBwY2kgaW50ZXJydXB0IAorCSAqIG1hcHBpbmcgdG8gZXhwb3NlIHRoZW0KKwkgKi8KKwlpZiAocmVxdWVzdF9pcnEoY3AtPnBkZXYtPmlycSwgY2FzX2ludGVycnVwdCwKKwkJCVNBX1NISVJRLCBkZXYtPm5hbWUsICh2b2lkICopIGRldikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlcXVlc3QgaXJxICFcbiIsIAorCQkgICAgICAgY3AtPmRldi0+bmFtZSk7CisJCWVyciA9IC1FQUdBSU47CisJCWdvdG8gZXJyX3NwYXJlOworCX0KKworCS8qIGluaXQgaHcgKi8KKwljYXNfbG9ja19hbGxfc2F2ZShjcCwgZmxhZ3MpOworCWNhc19jbGVhbl9yaW5ncyhjcCk7CisJY2FzX2luaXRfaHcoY3AsICFod193YXNfdXApOworCWNwLT5vcGVuZWQgPSAxOworCWNhc191bmxvY2tfYWxsX3Jlc3RvcmUoY3AsIGZsYWdzKTsKKworCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJdXAoJmNwLT5wbV9zZW0pOworCXJldHVybiAwOworCitlcnJfc3BhcmU6CisJY2FzX3NwYXJlX2ZyZWUoY3ApOworCWNhc19mcmVlX3J4ZHMoY3ApOworZXJyX3R4X3Rpbnk6CisJY2FzX3R4X3RpbnlfZnJlZShjcCk7CisJdXAoJmNwLT5wbV9zZW0pOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgY2FzX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgY2FzICpjcCA9IG5ldGRldl9wcml2KGRldik7CisKKwkvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IGRpc3RyYWN0ZWQgYnkgc3VzcGVuZC9yZXN1bWUgKi8KKwlkb3duKCZjcC0+cG1fc2VtKTsKKworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCS8qIFN0b3AgdHJhZmZpYywgbWFyayB1cyBjbG9zZWQgKi8KKwljYXNfbG9ja19hbGxfc2F2ZShjcCwgZmxhZ3MpOworCWNwLT5vcGVuZWQgPSAwOwkKKwljYXNfcmVzZXQoY3AsIDApOworCWNhc19waHlfaW5pdChjcCk7IAorCWNhc19iZWdpbl9hdXRvX25lZ290aWF0aW9uKGNwLCBOVUxMKTsKKwljYXNfY2xlYW5fcmluZ3MoY3ApOworCWNhc191bmxvY2tfYWxsX3Jlc3RvcmUoY3AsIGZsYWdzKTsKKworCWZyZWVfaXJxKGNwLT5wZGV2LT5pcnEsICh2b2lkICopIGRldik7CisJY2FzX3NwYXJlX2ZyZWUoY3ApOworCWNhc19mcmVlX3J4ZHMoY3ApOworCWNhc190eF90aW55X2ZyZWUoY3ApOworCXVwKCZjcC0+cG1fc2VtKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB7CisJY29uc3QgY2hhciBuYW1lW0VUSF9HU1RSSU5HX0xFTl07Cit9IGV0aHRvb2xfY2Fzc2luaV9zdGF0bmFtZXNbXSA9IHsKKwl7ImNvbGxpc2lvbnMifSwKKwl7InJ4X2J5dGVzIn0sCisJeyJyeF9jcmNfZXJyb3JzIn0sCisJeyJyeF9kcm9wcGVkIn0sCisJeyJyeF9lcnJvcnMifSwKKwl7InJ4X2ZpZm9fZXJyb3JzIn0sCisJeyJyeF9mcmFtZV9lcnJvcnMifSwKKwl7InJ4X2xlbmd0aF9lcnJvcnMifSwKKwl7InJ4X292ZXJfZXJyb3JzIn0sCisJeyJyeF9wYWNrZXRzIn0sCisJeyJ0eF9hYm9ydGVkX2Vycm9ycyJ9LAorCXsidHhfYnl0ZXMifSwKKwl7InR4X2Ryb3BwZWQifSwKKwl7InR4X2Vycm9ycyJ9LAorCXsidHhfZmlmb19lcnJvcnMifSwKKwl7InR4X3BhY2tldHMifQorfTsKKyNkZWZpbmUgQ0FTX05VTV9TVEFUX0tFWVMgKHNpemVvZihldGh0b29sX2Nhc3Npbmlfc3RhdG5hbWVzKS9FVEhfR1NUUklOR19MRU4pCisKK3N0YXRpYyBzdHJ1Y3QgeworCWNvbnN0IGludCBvZmZzZXRzOwkvKiBuZWcuIHZhbHVlcyBmb3IgMm5kIGFyZyB0byBjYXNfcmVhZF9waHkgKi8KK30gZXRodG9vbF9yZWdpc3Rlcl90YWJsZVtdID0geworCXstTUlJX0JNU1J9LAorCXstTUlJX0JNQ1J9LAorCXtSRUdfQ0FXUn0sCisJe1JFR19JTkZfQlVSU1R9LAorCXtSRUdfQklNX0NGR30sCisJe1JFR19SWF9DRkd9LAorCXtSRUdfSFBfQ0ZHfSwKKwl7UkVHX01BQ19UWF9DRkd9LAorCXtSRUdfTUFDX1JYX0NGR30sCisJe1JFR19NQUNfQ1RSTF9DRkd9LAorCXtSRUdfTUFDX1hJRl9DRkd9LAorCXtSRUdfTUlGX0NGR30sCisJe1JFR19QQ1NfQ0ZHfSwKKwl7UkVHX1NBVFVSTl9QQ0ZHfSwKKwl7UkVHX1BDU19NSUlfU1RBVFVTfSwKKwl7UkVHX1BDU19TVEFURV9NQUNISU5FfSwKKwl7UkVHX01BQ19DT0xMX0VYQ0VTU30sCisJe1JFR19NQUNfQ09MTF9MQVRFfQorfTsKKyNkZWZpbmUgQ0FTX1JFR19MRU4gCShzaXplb2YoZXRodG9vbF9yZWdpc3Rlcl90YWJsZSkvc2l6ZW9mKGludCkpCisjZGVmaW5lIENBU19NQVhfUkVHUyAJKHNpemVvZiAodTMyKSpDQVNfUkVHX0xFTikKKworc3RhdGljIHZvaWQgY2FzX3JlYWRfcmVncyhzdHJ1Y3QgY2FzICpjcCwgdTggKnB0ciwgaW50IGxlbikKK3sKKwl1OCAqcDsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNwLT5sb2NrLCBmbGFncyk7CisJZm9yIChpID0gMCwgcCA9IHB0cjsgaSA8IGxlbiA7IGkgKyssIHAgKz0gc2l6ZW9mKHUzMikpIHsKKwkJdTE2IGh2YWw7CisJCXUzMiB2YWw7CisJCWlmIChldGh0b29sX3JlZ2lzdGVyX3RhYmxlW2ldLm9mZnNldHMgPCAwKSB7CisJCQlodmFsID0gY2FzX3BoeV9yZWFkKGNwLAorCQkJCSAgICAtZXRodG9vbF9yZWdpc3Rlcl90YWJsZVtpXS5vZmZzZXRzKTsKKwkJCXZhbCA9IGh2YWw7CisJCX0gZWxzZSB7CisJCQl2YWw9IHJlYWRsKGNwLT5yZWdzK2V0aHRvb2xfcmVnaXN0ZXJfdGFibGVbaV0ub2Zmc2V0cyk7CisJCX0KKwkJbWVtY3B5KHAsICh1OCAqKSZ2YWwsIHNpemVvZih1MzIpKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3AtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpjYXNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGNhcyAqY3AgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IGNwLT5uZXRfc3RhdHM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCS8qIHdlIGNvbGxhdGUgYWxsIG9mIHRoZSBzdGF0cyBpbnRvIG5ldF9zdGF0c1tOX1RYX1JJTkddICovCisJaWYgKCFjcC0+aHdfcnVubmluZykKKwkJcmV0dXJuIHN0YXRzICsgTl9UWF9SSU5HUzsKKwkKKwkvKiBjb2xsZWN0IG91dHN0YW5kaW5nIHN0YXRzICovCisJLyogV1RaOiB0aGUgQ2Fzc2luaSBzcGVjIGdpdmVzIHRoZXNlIGFzIDE2IGJpdCBjb3VudGVycyBidXQKKwkgKiBzdG9yZWQgaW4gMzItYml0IHdvcmRzLiAgQWRkZWQgYSBtYXNrIG9mIDB4ZmZmZiB0byBiZSBzYWZlLAorCSAqIGluIGNhc2UgdGhlIGNoaXAgc29tZWhvdyBwdXRzIGFueSBnYXJiYWdlIGluIHRoZSBvdGhlciBiaXRzLgorCSAqIEFsc28sIGNvdW50ZXIgdXNhZ2UgZGlkbid0IHNlZW0gdG8gbWFjaCB3aGF0IEFkcmlhbiBkaWQKKwkgKiBpbiB0aGUgcGFydHMgb2YgdGhlIGNvZGUgdGhhdCBzZXQgdGhlc2UgcXVhbnRpdGllcy4gTWFkZQorCSAqIHRoYXQgY29uc2lzdGVudC4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3AtPnN0YXRfbG9ja1tOX1RYX1JJTkdTXSwgZmxhZ3MpOworCXN0YXRzW05fVFhfUklOR1NdLnJ4X2NyY19lcnJvcnMgKz0gCisJICByZWFkbChjcC0+cmVncyArIFJFR19NQUNfRkNTX0VSUikgJiAweGZmZmY7CisJc3RhdHNbTl9UWF9SSU5HU10ucnhfZnJhbWVfZXJyb3JzICs9IAorCQlyZWFkbChjcC0+cmVncyArIFJFR19NQUNfQUxJR05fRVJSKSAmMHhmZmZmOworCXN0YXRzW05fVFhfUklOR1NdLnJ4X2xlbmd0aF9lcnJvcnMgKz0gCisJCXJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19MRU5fRVJSKSAmIDB4ZmZmZjsKKyNpZiAxCisJdG1wID0gKHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19DT0xMX0VYQ0VTUykgJiAweGZmZmYpICsKKwkJKHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19DT0xMX0xBVEUpICYgMHhmZmZmKTsKKwlzdGF0c1tOX1RYX1JJTkdTXS50eF9hYm9ydGVkX2Vycm9ycyArPSB0bXA7CisJc3RhdHNbTl9UWF9SSU5HU10uY29sbGlzaW9ucyArPQorCSAgdG1wICsgKHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19DT0xMX05PUk1BTCkgJiAweGZmZmYpOworI2Vsc2UKKwlzdGF0c1tOX1RYX1JJTkdTXS50eF9hYm9ydGVkX2Vycm9ycyArPSAKKwkJcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX0NPTExfRVhDRVNTKTsKKwlzdGF0c1tOX1RYX1JJTkdTXS5jb2xsaXNpb25zICs9IHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19DT0xMX0VYQ0VTUykgKworCQlyZWFkbChjcC0+cmVncyArIFJFR19NQUNfQ09MTF9MQVRFKTsKKyNlbmRpZgorCWNhc19jbGVhcl9tYWNfZXJyKGNwKTsKKworCS8qIHNhdmVkIGJpdHMgdGhhdCBhcmUgdW5pcXVlIHRvIHJpbmcgMCAqLworCXNwaW5fbG9jaygmY3AtPnN0YXRfbG9ja1swXSk7CisJc3RhdHNbTl9UWF9SSU5HU10uY29sbGlzaW9ucyAgICAgICAgKz0gc3RhdHNbMF0uY29sbGlzaW9uczsKKwlzdGF0c1tOX1RYX1JJTkdTXS5yeF9vdmVyX2Vycm9ycyAgICArPSBzdGF0c1swXS5yeF9vdmVyX2Vycm9yczsKKwlzdGF0c1tOX1RYX1JJTkdTXS5yeF9mcmFtZV9lcnJvcnMgICArPSBzdGF0c1swXS5yeF9mcmFtZV9lcnJvcnM7CisJc3RhdHNbTl9UWF9SSU5HU10ucnhfZmlmb19lcnJvcnMgICAgKz0gc3RhdHNbMF0ucnhfZmlmb19lcnJvcnM7CisJc3RhdHNbTl9UWF9SSU5HU10udHhfYWJvcnRlZF9lcnJvcnMgKz0gc3RhdHNbMF0udHhfYWJvcnRlZF9lcnJvcnM7CisJc3RhdHNbTl9UWF9SSU5HU10udHhfZmlmb19lcnJvcnMgICAgKz0gc3RhdHNbMF0udHhfZmlmb19lcnJvcnM7CisJc3Bpbl91bmxvY2soJmNwLT5zdGF0X2xvY2tbMF0pOworCisJZm9yIChpID0gMDsgaSA8IE5fVFhfUklOR1M7IGkrKykgeworCQlzcGluX2xvY2soJmNwLT5zdGF0X2xvY2tbaV0pOworCQlzdGF0c1tOX1RYX1JJTkdTXS5yeF9sZW5ndGhfZXJyb3JzICs9IAorCQkJc3RhdHNbaV0ucnhfbGVuZ3RoX2Vycm9yczsKKwkJc3RhdHNbTl9UWF9SSU5HU10ucnhfY3JjX2Vycm9ycyArPSBzdGF0c1tpXS5yeF9jcmNfZXJyb3JzOworCQlzdGF0c1tOX1RYX1JJTkdTXS5yeF9wYWNrZXRzICAgICs9IHN0YXRzW2ldLnJ4X3BhY2tldHM7CisJCXN0YXRzW05fVFhfUklOR1NdLnR4X3BhY2tldHMgICAgKz0gc3RhdHNbaV0udHhfcGFja2V0czsKKwkJc3RhdHNbTl9UWF9SSU5HU10ucnhfYnl0ZXMgICAgICArPSBzdGF0c1tpXS5yeF9ieXRlczsKKwkJc3RhdHNbTl9UWF9SSU5HU10udHhfYnl0ZXMgICAgICArPSBzdGF0c1tpXS50eF9ieXRlczsKKwkJc3RhdHNbTl9UWF9SSU5HU10ucnhfZXJyb3JzICAgICArPSBzdGF0c1tpXS5yeF9lcnJvcnM7CisJCXN0YXRzW05fVFhfUklOR1NdLnR4X2Vycm9ycyAgICAgKz0gc3RhdHNbaV0udHhfZXJyb3JzOworCQlzdGF0c1tOX1RYX1JJTkdTXS5yeF9kcm9wcGVkICAgICs9IHN0YXRzW2ldLnJ4X2Ryb3BwZWQ7CisJCXN0YXRzW05fVFhfUklOR1NdLnR4X2Ryb3BwZWQgICAgKz0gc3RhdHNbaV0udHhfZHJvcHBlZDsKKwkJbWVtc2V0KHN0YXRzICsgaSwgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSk7CisJCXNwaW5fdW5sb2NrKCZjcC0+c3RhdF9sb2NrW2ldKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3AtPnN0YXRfbG9ja1tOX1RYX1JJTkdTXSwgZmxhZ3MpOworCXJldHVybiBzdGF0cyArIE5fVFhfUklOR1M7Cit9CisKKworc3RhdGljIHZvaWQgY2FzX3NldF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY2FzICpjcCA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIHJ4Y2ZnLCByeGNmZ19uZXc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgbGltaXQgPSBTVE9QX1RSSUVTOworCQorCWlmICghY3AtPmh3X3J1bm5pbmcpCisJCXJldHVybjsKKwkJCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNwLT5sb2NrLCBmbGFncyk7CisJcnhjZmcgPSByZWFkbChjcC0+cmVncyArIFJFR19NQUNfUlhfQ0ZHKTsKKworCS8qIGRpc2FibGUgUlggTUFDIGFuZCB3YWl0IGZvciBjb21wbGV0aW9uICovCisJd3JpdGVsKHJ4Y2ZnICYgfk1BQ19SWF9DRkdfRU4sIGNwLT5yZWdzICsgUkVHX01BQ19SWF9DRkcpOworCXdoaWxlIChyZWFkbChjcC0+cmVncyArIFJFR19NQUNfUlhfQ0ZHKSAmIE1BQ19SWF9DRkdfRU4pIHsKKwkJaWYgKCFsaW1pdC0tKQorCQkJYnJlYWs7CisJCXVkZWxheSgxMCk7CisJfQorCisJLyogZGlzYWJsZSBoYXNoIGZpbHRlciBhbmQgd2FpdCBmb3IgY29tcGxldGlvbiAqLworCWxpbWl0ID0gU1RPUF9UUklFUzsKKwlyeGNmZyAmPSB+KE1BQ19SWF9DRkdfUFJPTUlTQ19FTiB8IE1BQ19SWF9DRkdfSEFTSF9GSUxURVJfRU4pOworCXdyaXRlbChyeGNmZyAmIH5NQUNfUlhfQ0ZHX0VOLCBjcC0+cmVncyArIFJFR19NQUNfUlhfQ0ZHKTsKKwl3aGlsZSAocmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX1JYX0NGRykgJiBNQUNfUlhfQ0ZHX0hBU0hfRklMVEVSX0VOKSB7CisJCWlmICghbGltaXQtLSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTApOworCX0KKworCS8qIHByb2dyYW0gaGFzaCBmaWx0ZXJzICovCisJY3AtPm1hY19yeF9jZmcgPSByeGNmZ19uZXcgPSBjYXNfc2V0dXBfbXVsdGljYXN0KGNwKTsKKwlyeGNmZyB8PSByeGNmZ19uZXc7CisJd3JpdGVsKHJ4Y2ZnLCBjcC0+cmVncyArIFJFR19NQUNfUlhfQ0ZHKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBjYXNfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2FzICpjcCA9IG5ldGRldl9wcml2KGRldik7CisJc3RybmNweShpbmZvLT5kcml2ZXIsIERSVl9NT0RVTEVfTkFNRSwgRVRIVE9PTF9CVVNJTkZPX0xFTik7CisJc3RybmNweShpbmZvLT52ZXJzaW9uLCBEUlZfTU9EVUxFX1ZFUlNJT04sIEVUSFRPT0xfQlVTSU5GT19MRU4pOworCWluZm8tPmZ3X3ZlcnNpb25bMF0gPSAnXDAnOworCXN0cm5jcHkoaW5mby0+YnVzX2luZm8sIHBjaV9uYW1lKGNwLT5wZGV2KSwgRVRIVE9PTF9CVVNJTkZPX0xFTik7CisJaW5mby0+cmVnZHVtcF9sZW4gPSBjcC0+Y2FzcmVnX2xlbiA8IENBU19NQVhfUkVHUyA/CisJCWNwLT5jYXNyZWdfbGVuIDogQ0FTX01BWF9SRUdTOworCWluZm8tPm5fc3RhdHMgPSBDQVNfTlVNX1NUQVRfS0VZUzsKK30KKworc3RhdGljIGludCBjYXNfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQoreworCXN0cnVjdCBjYXMgKmNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MTYgYm1jcjsKKwlpbnQgZnVsbF9kdXBsZXgsIHNwZWVkLCBwYXVzZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWVudW0gbGlua19zdGF0ZSBsaW5rc3RhdGUgPSBsaW5rX3VwOworCisJY21kLT5hZHZlcnRpc2luZyA9IDA7CisJY21kLT5zdXBwb3J0ZWQgPSBTVVBQT1JURURfQXV0b25lZzsKKwlpZiAoY3AtPmNhc19mbGFncyAmIENBU19GTEFHXzEwMDBNQl9DQVApIHsKKwkJY21kLT5zdXBwb3J0ZWQgfD0gU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsOworCQljbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGw7CisJfQorCisJLyogUmVjb3JkIFBIWSBzZXR0aW5ncyBpZiBIVyBpcyBvbi4gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3AtPmxvY2ssIGZsYWdzKTsKKwlibWNyID0gMDsKKwlsaW5rc3RhdGUgPSBjcC0+bHN0YXRlOworCWlmIChDQVNfUEhZX01JSShjcC0+cGh5X3R5cGUpKSB7CisJCWNtZC0+cG9ydCA9IFBPUlRfTUlJOworCQljbWQtPnRyYW5zY2VpdmVyID0gKGNwLT5jYXNfZmxhZ3MgJiBDQVNfRkxBR19TQVRVUk4pID8KKwkJCVhDVlJfSU5URVJOQUwgOiBYQ1ZSX0VYVEVSTkFMOworCQljbWQtPnBoeV9hZGRyZXNzID0gY3AtPnBoeV9hZGRyOworCQljbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfVFAgfCBBRFZFUlRJU0VEX01JSSB8CisJCQlBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZiB8IAorCQkJQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwgfCAKKwkJCUFEVkVSVElTRURfMTAwYmFzZVRfSGFsZiB8IAorCQkJQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsOworCisJCWNtZC0+c3VwcG9ydGVkIHw9CisJCQkoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8IAorCQkJIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfAorCQkJIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwgCisJCQkgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfAorCQkJIFNVUFBPUlRFRF9UUCB8IFNVUFBPUlRFRF9NSUkpOworCisJCWlmIChjcC0+aHdfcnVubmluZykgeworCQkJY2FzX21pZl9wb2xsKGNwLCAwKTsKKwkJCWJtY3IgPSBjYXNfcGh5X3JlYWQoY3AsIE1JSV9CTUNSKTsKKwkJCWNhc19yZWFkX21paV9saW5rX21vZGUoY3AsICZmdWxsX2R1cGxleCwgCisJCQkJCSAgICAgICAmc3BlZWQsICZwYXVzZSk7CisJCQljYXNfbWlmX3BvbGwoY3AsIDEpOworCQl9CisKKwl9IGVsc2UgeworCQljbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOworCQljbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKKwkJY21kLT5waHlfYWRkcmVzcyA9IDA7CisJCWNtZC0+c3VwcG9ydGVkICAgfD0gU1VQUE9SVEVEX0ZJQlJFOworCQljbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfRklCUkU7CisKKwkJaWYgKGNwLT5od19ydW5uaW5nKSB7CisJCQkvKiBwY3MgdXNlcyB0aGUgc2FtZSBiaXRzIGFzIG1paSAqLyAKKwkJCWJtY3IgPSByZWFkbChjcC0+cmVncyArIFJFR19QQ1NfTUlJX0NUUkwpOworCQkJY2FzX3JlYWRfcGNzX2xpbmtfbW9kZShjcCwgJmZ1bGxfZHVwbGV4LCAKKwkJCQkJICAgICAgICZzcGVlZCwgJnBhdXNlKTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcC0+bG9jaywgZmxhZ3MpOworCisJaWYgKGJtY3IgJiBCTUNSX0FORU5BQkxFKSB7CisJCWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9BdXRvbmVnOworCQljbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKKwkJY21kLT5zcGVlZCA9ICgoc3BlZWQgPT0gMTApID8KKwkJCSAgICAgIFNQRUVEXzEwIDoKKwkJCSAgICAgICgoc3BlZWQgPT0gMTAwMCkgPworCQkJICAgICAgIFNQRUVEXzEwMDAgOiBTUEVFRF8xMDApKTsKKwkJY21kLT5kdXBsZXggPSBmdWxsX2R1cGxleCA/IERVUExFWF9GVUxMIDogRFVQTEVYX0hBTEY7CisJfSBlbHNlIHsKKwkJY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOworCQljbWQtPnNwZWVkID0KKwkJCShibWNyICYgQ0FTX0JNQ1JfU1BFRUQxMDAwKSA/CisJCQlTUEVFRF8xMDAwIDogCisJCQkoKGJtY3IgJiBCTUNSX1NQRUVEMTAwKSA/IFNQRUVEXzEwMDogCisJCQkgU1BFRURfMTApOworCQljbWQtPmR1cGxleCA9CisJCQkoYm1jciAmIEJNQ1JfRlVMTERQTFgpID8KKwkJCURVUExFWF9GVUxMIDogRFVQTEVYX0hBTEY7CisJfQorCWlmIChsaW5rc3RhdGUgIT0gbGlua191cCkgeworCQkvKiBGb3JjZSB0aGVzZSB0byAidW5rbm93biIgaWYgdGhlIGxpbmsgaXMgbm90IHVwIGFuZAorCQkgKiBhdXRvbm9nb3RpYXRpb24gaW4gZW5hYmxlZC4gV2UgY2FuIHNldCB0aGUgbGluayAKKwkJICogc3BlZWQgdG8gMCwgYnV0IG5vdCBjbWQtPmR1cGxleCwKKwkJICogYmVjYXVzZSBpdHMgbGVnYWwgdmFsdWVzIGFyZSAwIGFuZCAxLiAgRXRodG9vbCB3aWxsCisJCSAqIHByaW50IHRoZSB2YWx1ZSByZXBvcnRlZCBpbiBwYXJlbnRoZXNlcyBhZnRlciB0aGUKKwkJICogd29yZCAiVW5rbm93biIgZm9yIHVucmVjb2duaXplZCB2YWx1ZXMuCisJCSAqCisJCSAqIElmIGluIGZvcmNlZCBtb2RlLCB3ZSByZXBvcnQgdGhlIHNwZWVkIGFuZCBkdXBsZXgKKwkJICogc2V0dGluZ3MgdGhhdCB3ZSBjb25maWd1cmVkLgorCQkgKi8KKwkJaWYgKGNwLT5saW5rX2NudGwgJiBCTUNSX0FORU5BQkxFKSB7CisJCQljbWQtPnNwZWVkID0gMDsKKwkJCWNtZC0+ZHVwbGV4ID0gMHhmZjsKKwkJfSBlbHNlIHsKKwkJCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDsKKwkJCWlmIChjcC0+bGlua19jbnRsICYgQk1DUl9TUEVFRDEwMCkgeworCQkJCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDA7CisJCQl9IGVsc2UgaWYgKGNwLT5saW5rX2NudGwgJiBDQVNfQk1DUl9TUEVFRDEwMDApIHsKKwkJCQljbWQtPnNwZWVkID0gU1BFRURfMTAwMDsKKwkJCX0KKwkJCWNtZC0+ZHVwbGV4ID0gKGNwLT5saW5rX2NudGwgJiBCTUNSX0ZVTExEUExYKT8KKwkJCQlEVVBMRVhfRlVMTCA6IERVUExFWF9IQUxGOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNhc19zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IGNhcyAqY3AgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBWZXJpZnkgdGhlIHNldHRpbmdzIHdlIGNhcmUgYWJvdXQuICovCisJaWYgKGNtZC0+YXV0b25lZyAhPSBBVVRPTkVHX0VOQUJMRSAmJgorCSAgICBjbWQtPmF1dG9uZWcgIT0gQVVUT05FR19ESVNBQkxFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19ESVNBQkxFICYmCisJICAgICgoY21kLT5zcGVlZCAhPSBTUEVFRF8xMDAwICYmCisJICAgICAgY21kLT5zcGVlZCAhPSBTUEVFRF8xMDAgJiYKKwkgICAgICBjbWQtPnNwZWVkICE9IFNQRUVEXzEwKSB8fAorCSAgICAgKGNtZC0+ZHVwbGV4ICE9IERVUExFWF9IQUxGICYmCisJICAgICAgY21kLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBBcHBseSBzZXR0aW5ncyBhbmQgcmVzdGFydCBsaW5rIHByb2Nlc3MuICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNwLT5sb2NrLCBmbGFncyk7CisJY2FzX2JlZ2luX2F1dG9fbmVnb3RpYXRpb24oY3AsIGNtZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3AtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjYXNfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBjYXMgKmNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKChjcC0+bGlua19jbnRsICYgQk1DUl9BTkVOQUJMRSkgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBSZXN0YXJ0IGxpbmsgcHJvY2Vzcy4gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3AtPmxvY2ssIGZsYWdzKTsKKwljYXNfYmVnaW5fYXV0b19uZWdvdGlhdGlvbihjcCwgTlVMTCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3AtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGNhc19nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBjYXMgKmNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlyZXR1cm4gY3AtPmxzdGF0ZSA9PSBsaW5rX3VwOworfQorCitzdGF0aWMgdTMyIGNhc19nZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY2FzICpjcCA9IG5ldGRldl9wcml2KGRldik7CisJcmV0dXJuIGNwLT5tc2dfZW5hYmxlOworfQorCitzdGF0aWMgdm9pZCBjYXNfc2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgY2FzICpjcCA9IG5ldGRldl9wcml2KGRldik7CisJY3AtPm1zZ19lbmFibGUgPSB2YWx1ZTsKK30KKworc3RhdGljIGludCBjYXNfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGNhcyAqY3AgPSBuZXRkZXZfcHJpdihkZXYpOworCXJldHVybiBjcC0+Y2FzcmVnX2xlbiA8IENBU19NQVhfUkVHUyA/IGNwLT5jYXNyZWdfbGVuOiBDQVNfTUFYX1JFR1M7Cit9CisKK3N0YXRpYyB2b2lkIGNhc19nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLAorCQkJICAgICB2b2lkICpwKQoreworCXN0cnVjdCBjYXMgKmNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlyZWdzLT52ZXJzaW9uID0gMDsKKwkvKiBjYXNfcmVhZF9yZWdzIGhhbmRsZXMgbG9ja3MgKGNwLT5sb2NrKS4gICovCisJY2FzX3JlYWRfcmVncyhjcCwgcCwgcmVncy0+bGVuIC8gc2l6ZW9mKHUzMikpOworfQorCitzdGF0aWMgaW50IGNhc19nZXRfc3RhdHNfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gQ0FTX05VTV9TVEFUX0tFWVM7Cit9CisKK3N0YXRpYyB2b2lkIGNhc19nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSkKK3sKKwkgbWVtY3B5KGRhdGEsICZldGh0b29sX2Nhc3Npbmlfc3RhdG5hbWVzLCAKKwkJCQkJIENBU19OVU1fU1RBVF9LRVlTICogRVRIX0dTVFJJTkdfTEVOKTsKK30KKworc3RhdGljIHZvaWQgY2FzX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKmVzdGF0cywgdTY0ICpkYXRhKQoreworCXN0cnVjdCBjYXMgKmNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBjYXNfZ2V0X3N0YXRzKGNwLT5kZXYpOworCWludCBpID0gMDsKKwlkYXRhW2krK10gPSBzdGF0cy0+Y29sbGlzaW9uczsKKwlkYXRhW2krK10gPSBzdGF0cy0+cnhfYnl0ZXM7CisJZGF0YVtpKytdID0gc3RhdHMtPnJ4X2NyY19lcnJvcnM7CisJZGF0YVtpKytdID0gc3RhdHMtPnJ4X2Ryb3BwZWQ7CisJZGF0YVtpKytdID0gc3RhdHMtPnJ4X2Vycm9yczsKKwlkYXRhW2krK10gPSBzdGF0cy0+cnhfZmlmb19lcnJvcnM7CisJZGF0YVtpKytdID0gc3RhdHMtPnJ4X2ZyYW1lX2Vycm9yczsKKwlkYXRhW2krK10gPSBzdGF0cy0+cnhfbGVuZ3RoX2Vycm9yczsKKwlkYXRhW2krK10gPSBzdGF0cy0+cnhfb3Zlcl9lcnJvcnM7CisJZGF0YVtpKytdID0gc3RhdHMtPnJ4X3BhY2tldHM7CisJZGF0YVtpKytdID0gc3RhdHMtPnR4X2Fib3J0ZWRfZXJyb3JzOworCWRhdGFbaSsrXSA9IHN0YXRzLT50eF9ieXRlczsKKwlkYXRhW2krK10gPSBzdGF0cy0+dHhfZHJvcHBlZDsKKwlkYXRhW2krK10gPSBzdGF0cy0+dHhfZXJyb3JzOworCWRhdGFbaSsrXSA9IHN0YXRzLT50eF9maWZvX2Vycm9yczsKKwlkYXRhW2krK10gPSBzdGF0cy0+dHhfcGFja2V0czsKKwlCVUdfT04oaSAhPSBDQVNfTlVNX1NUQVRfS0VZUyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgY2FzX2V0aHRvb2xfb3BzID0geworCS5nZXRfZHJ2aW5mbwkJPSBjYXNfZ2V0X2RydmluZm8sCisJLmdldF9zZXR0aW5ncwkJPSBjYXNfZ2V0X3NldHRpbmdzLAorCS5zZXRfc2V0dGluZ3MJCT0gY2FzX3NldF9zZXR0aW5ncywKKwkubndheV9yZXNldAkJPSBjYXNfbndheV9yZXNldCwKKwkuZ2V0X2xpbmsJCT0gY2FzX2dldF9saW5rLAorCS5nZXRfbXNnbGV2ZWwJCT0gY2FzX2dldF9tc2dsZXZlbCwKKwkuc2V0X21zZ2xldmVsCQk9IGNhc19zZXRfbXNnbGV2ZWwsCisJLmdldF9yZWdzX2xlbgkJPSBjYXNfZ2V0X3JlZ3NfbGVuLAorCS5nZXRfcmVncwkJPSBjYXNfZ2V0X3JlZ3MsCisJLmdldF9zdGF0c19jb3VudAk9IGNhc19nZXRfc3RhdHNfY291bnQsCisJLmdldF9zdHJpbmdzCQk9IGNhc19nZXRfc3RyaW5ncywKKwkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBjYXNfZ2V0X2V0aHRvb2xfc3RhdHMsCit9OworCitzdGF0aWMgaW50IGNhc19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgY2FzICpjcCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG1paV9pb2N0bF9kYXRhICpkYXRhID0gaWZfbWlpKGlmcik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmMgPSAtRU9QTk9UU1VQUDsKKwkKKwkvKiBIb2xkIHRoZSBQTSBzZW1hcGhvcmUgd2hpbGUgZG9pbmcgaW9jdGwncyBvciB3ZSBtYXkgY29sbGlkZQorCSAqIHdpdGggb3Blbi9jbG9zZSBhbmQgcG93ZXIgbWFuYWdlbWVudCBhbmQgb29wcy4KKwkgKi8KKwlkb3duKCZjcC0+cG1fc2VtKTsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0lPQ0dNSUlQSFk6CQkvKiBHZXQgYWRkcmVzcyBvZiBNSUkgUEhZIGluIHVzZS4gKi8KKwkJZGF0YS0+cGh5X2lkID0gY3AtPnBoeV9hZGRyOworCQkvKiBGYWxsdGhyb3VnaC4uLiAqLworCisJY2FzZSBTSU9DR01JSVJFRzoJCS8qIFJlYWQgTUlJIFBIWSByZWdpc3Rlci4gKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNwLT5sb2NrLCBmbGFncyk7CisJCWNhc19taWZfcG9sbChjcCwgMCk7CisJCWRhdGEtPnZhbF9vdXQgPSBjYXNfcGh5X3JlYWQoY3AsIGRhdGEtPnJlZ19udW0gJiAweDFmKTsKKwkJY2FzX21pZl9wb2xsKGNwLCAxKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3AtPmxvY2ssIGZsYWdzKTsKKwkJcmMgPSAwOworCQlicmVhazsKKworCWNhc2UgU0lPQ1NNSUlSRUc6CQkvKiBXcml0ZSBNSUkgUEhZIHJlZ2lzdGVyLiAqLworCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpIHsKKwkJCXJjID0gLUVQRVJNOworCQkJYnJlYWs7CisJCX0KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNwLT5sb2NrLCBmbGFncyk7CisJCWNhc19taWZfcG9sbChjcCwgMCk7CisJCXJjID0gY2FzX3BoeV93cml0ZShjcCwgZGF0YS0+cmVnX251bSAmIDB4MWYsIGRhdGEtPnZhbF9pbik7CisJCWNhc19taWZfcG9sbChjcCwgMSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwLT5sb2NrLCBmbGFncyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX07CisKKwl1cCgmY3AtPnBtX3NlbSk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBjYXNfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXN0YXRpYyBpbnQgY2FzX3ZlcnNpb25fcHJpbnRlZCA9IDA7CisJdW5zaWduZWQgbG9uZyBjYXNyZWdfYmFzZSwgY2FzcmVnX2xlbjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBjYXMgKmNwOworCWludCBpLCBlcnIsIHBjaV91c2luZ19kYWM7CisJdTE2IHBjaV9jbWQ7CisJdTggb3JpZ19jYWNoZWxpbmVfc2l6ZSA9IDAsIGNhc19jYWNoZWxpbmVfc2l6ZSA9IDA7CisKKwlpZiAoY2FzX3ZlcnNpb25fcHJpbnRlZCsrID09IDApCisJCXByaW50ayhLRVJOX0lORk8gIiVzIiwgdmVyc2lvbik7CisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSwgIgorCQkgICAgICAgImFib3J0aW5nLlxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDApICYgSU9SRVNPVVJDRV9NRU0pKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBmaW5kIHByb3BlciBQQ0kgZGV2aWNlICIKKwkJICAgICAgICJiYXNlIGFkZHJlc3MsIGFib3J0aW5nLlxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX291dF9kaXNhYmxlX3BkZXY7CisJfQorCisJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKCpjcCkpOworCWlmICghZGV2KSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkV0aGVyZGV2IGFsbG9jIGZhaWxlZCwgYWJvcnRpbmcuXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0X2Rpc2FibGVfcGRldjsKKwl9CisJU0VUX01PRFVMRV9PV05FUihkZXYpOworCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CisKKwllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIGRldi0+bmFtZSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXMsICIKKwkJICAgICAgICJhYm9ydGluZy5cbiIpOworCQlnb3RvIGVycl9vdXRfZnJlZV9uZXRkZXY7CisJfQorCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJLyogd2UgbXVzdCBhbHdheXMgdHVybiBvbiBwYXJpdHkgcmVzcG9uc2Ugb3IgZWxzZSBwYXJpdHkKKwkgKiBkb2Vzbid0IGdldCBnZW5lcmF0ZWQgcHJvcGVybHkuIGRpc2FibGUgU0VSUi9QRVJSIGFzIHdlbGwuCisJICogaW4gYWRkaXRpb24sIHdlIHdhbnQgdG8gdHVybiBNV0kgb24uCisJICovCisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX0NPTU1BTkQsICZwY2lfY21kKTsKKwlwY2lfY21kICY9IH5QQ0lfQ09NTUFORF9TRVJSOworCXBjaV9jbWQgfD0gUENJX0NPTU1BTkRfUEFSSVRZOworCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBQQ0lfQ09NTUFORCwgcGNpX2NtZCk7CisJcGNpX3NldF9td2kocGRldik7CisJLyoKKwkgKiBPbiBzb21lIGFyY2hpdGVjdHVyZXMsIHRoZSBkZWZhdWx0IGNhY2hlIGxpbmUgc2l6ZSBzZXQKKwkgKiBieSBwY2lfc2V0X213aSByZWR1Y2VzIHBlcmZvcmFtbmNlLiAgV2UgaGF2ZSB0byBpbmNyZWFzZQorCSAqIGl0IGZvciB0aGlzIGNhc2UuICBUbyBzdGFydCwgd2UnbGwgcHJpbnQgc29tZSBjb25maWd1cmF0aW9uCisJICogZGF0YS4KKwkgKi8KKyNpZiAxCisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwKKwkJCSAgICAgJm9yaWdfY2FjaGVsaW5lX3NpemUpOworCWlmIChvcmlnX2NhY2hlbGluZV9zaXplIDwgQ0FTX1BSRUZfQ0FDSEVMSU5FX1NJWkUpIHsKKwkJY2FzX2NhY2hlbGluZV9zaXplID0gCisJCQkoQ0FTX1BSRUZfQ0FDSEVMSU5FX1NJWkUgPCBTTVBfQ0FDSEVfQllURVMpID8gCisJCQlDQVNfUFJFRl9DQUNIRUxJTkVfU0laRSA6IFNNUF9DQUNIRV9CWVRFUzsKKwkJaWYgKHBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAKKwkJCQkJICBQQ0lfQ0FDSEVfTElORV9TSVpFLCAKKwkJCQkJICBjYXNfY2FjaGVsaW5lX3NpemUpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJDb3VsZCBub3Qgc2V0IFBDSSBjYWNoZSAiCisJCQkgICAgICAgImxpbmUgc2l6ZVxuIik7CisJCQlnb3RvIGVycl93cml0ZV9jYWNoZWxpbmU7CisJCX0KKwl9CisjZW5kaWYKKworCisJLyogQ29uZmlndXJlIERNQSBhdHRyaWJ1dGVzLiAqLworCWlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSykpIHsKKwkJcGNpX3VzaW5nX2RhYyA9IDE7CisJCWVyciA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LAorCQkJCQkJICBETUFfNjRCSVRfTUFTSyk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJVbmFibGUgdG8gb2J0YWluIDY0LWJpdCBETUEgIgorCQkJICAgICAgICJmb3IgY29uc2lzdGVudCBhbGxvY2F0aW9uc1xuIik7CisJCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7CisJCX0KKworCX0gZWxzZSB7CisJCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb24sICIKKwkJCSAgICAgICAiYWJvcnRpbmcuXG4iKTsKKwkJCWdvdG8gZXJyX291dF9mcmVlX3JlczsKKwkJfQorCQlwY2lfdXNpbmdfZGFjID0gMDsKKwl9CisKKwljYXNyZWdfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKwljYXNyZWdfbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKKworCWNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwljcC0+cGRldiA9IHBkZXY7CisjaWYgMQorCS8qIEEgdmFsdWUgb2YgMCBpbmRpY2F0ZXMgd2UgbmV2ZXIgZXhwbGljaXRseSBzZXQgaXQgKi8KKwljcC0+b3JpZ19jYWNoZWxpbmVfc2l6ZSA9IGNhc19jYWNoZWxpbmVfc2l6ZSA/IG9yaWdfY2FjaGVsaW5lX3NpemU6IDA7CisjZW5kaWYKKwljcC0+ZGV2ID0gZGV2OworCWNwLT5tc2dfZW5hYmxlID0gKGNhc3NpbmlfZGVidWcgPCAwKSA/IENBU19ERUZfTVNHX0VOQUJMRSA6IAorCSAgY2Fzc2luaV9kZWJ1ZzsKKworCWNwLT5saW5rX3RyYW5zaXRpb24gPSBMSU5LX1RSQU5TSVRJT05fVU5LTk9XTjsKKwljcC0+bGlua190cmFuc2l0aW9uX2ppZmZpZXNfdmFsaWQgPSAwOworCisJc3Bpbl9sb2NrX2luaXQoJmNwLT5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmY3AtPnJ4X2ludXNlX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZjcC0+cnhfc3BhcmVfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IE5fVFhfUklOR1M7IGkrKykgeworCQlzcGluX2xvY2tfaW5pdCgmY3AtPnN0YXRfbG9ja1tpXSk7CisJCXNwaW5fbG9ja19pbml0KCZjcC0+dHhfbG9ja1tpXSk7CisJfQorCXNwaW5fbG9ja19pbml0KCZjcC0+c3RhdF9sb2NrW05fVFhfUklOR1NdKTsKKwlpbml0X01VVEVYKCZjcC0+cG1fc2VtKTsKKworCWluaXRfdGltZXIoJmNwLT5saW5rX3RpbWVyKTsKKwljcC0+bGlua190aW1lci5mdW5jdGlvbiA9IGNhc19saW5rX3RpbWVyOworCWNwLT5saW5rX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgY3A7CisKKyNpZiAxCisJLyogSnVzdCBpbiBjYXNlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBhdG9taWMgb3BlcmF0aW9ucworCSAqIGNoYW5nZSBzbyB0aGF0IGFuIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIGlzIG5lY2Vzc2FyeS4KKwkgKi8KKwlhdG9taWNfc2V0KCZjcC0+cmVzZXRfdGFza19wZW5kaW5nLCAwKTsKKwlhdG9taWNfc2V0KCZjcC0+cmVzZXRfdGFza19wZW5kaW5nX2FsbCwgMCk7CisJYXRvbWljX3NldCgmY3AtPnJlc2V0X3Rhc2tfcGVuZGluZ19zcGFyZSwgMCk7CisJYXRvbWljX3NldCgmY3AtPnJlc2V0X3Rhc2tfcGVuZGluZ19tdHUsIDApOworI2VuZGlmCisJSU5JVF9XT1JLKCZjcC0+cmVzZXRfdGFzaywgY2FzX3Jlc2V0X3Rhc2ssIGNwKTsKKworCS8qIERlZmF1bHQgbGluayBwYXJhbWV0ZXJzICovCisJaWYgKGxpbmtfbW9kZSA+PSAwICYmIGxpbmtfbW9kZSA8PSA2KQorCQljcC0+bGlua19jbnRsID0gbGlua19tb2Rlc1tsaW5rX21vZGVdOworCWVsc2UKKwkJY3AtPmxpbmtfY250bCA9IEJNQ1JfQU5FTkFCTEU7CisJY3AtPmxzdGF0ZSA9IGxpbmtfZG93bjsKKwljcC0+bGlua190cmFuc2l0aW9uID0gTElOS19UUkFOU0lUSU9OX0xJTktfRE9XTjsKKwluZXRpZl9jYXJyaWVyX29mZihjcC0+ZGV2KTsKKwljcC0+dGltZXJfdGlja3MgPSAwOworCisJLyogZ2l2ZSB1cyBhY2Nlc3MgdG8gY2Fzc2luaSByZWdpc3RlcnMgKi8KKwljcC0+cmVncyA9IGlvcmVtYXAoY2FzcmVnX2Jhc2UsIGNhc3JlZ19sZW4pOworCWlmIChjcC0+cmVncyA9PSAwVUwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IG1hcCBkZXZpY2UgcmVnaXN0ZXJzLCAiCisJCSAgICAgICAiYWJvcnRpbmcuXG4iKTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfcmVzOworCX0KKwljcC0+Y2FzcmVnX2xlbiA9IGNhc3JlZ19sZW47CisKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwljYXNfY2hlY2tfcGNpX2ludmFyaWFudHMoY3ApOworCWNhc19oYXJkX3Jlc2V0KGNwKTsKKwljYXNfcmVzZXQoY3AsIDApOworCWlmIChjYXNfY2hlY2tfaW52YXJpYW50cyhjcCkpCisJCWdvdG8gZXJyX291dF9pb3VubWFwOworCisJY3AtPmluaXRfYmxvY2sgPSAoc3RydWN0IGNhc19pbml0X2Jsb2NrICopCisJCXBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHNpemVvZihzdHJ1Y3QgY2FzX2luaXRfYmxvY2spLAorCQkJCSAgICAgJmNwLT5ibG9ja19kdm1hKTsKKwlpZiAoIWNwLT5pbml0X2Jsb2NrKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBhbGxvY2F0ZSBpbml0IGJsb2NrLCAiCisJCSAgICAgICAiYWJvcnRpbmcuXG4iKTsKKwkJZ290byBlcnJfb3V0X2lvdW5tYXA7CisJfQorCisJZm9yIChpID0gMDsgaSA8IE5fVFhfUklOR1M7IGkrKykgCisJCWNwLT5pbml0X3R4ZHNbaV0gPSBjcC0+aW5pdF9ibG9jay0+dHhkc1tpXTsKKworCWZvciAoaSA9IDA7IGkgPCBOX1JYX0RFU0NfUklOR1M7IGkrKykgCisJCWNwLT5pbml0X3J4ZHNbaV0gPSBjcC0+aW5pdF9ibG9jay0+cnhkc1tpXTsKKworCWZvciAoaSA9IDA7IGkgPCBOX1JYX0NPTVBfUklOR1M7IGkrKykgCisJCWNwLT5pbml0X3J4Y3NbaV0gPSBjcC0+aW5pdF9ibG9jay0+cnhjc1tpXTsKKworCWZvciAoaSA9IDA7IGkgPCBOX1JYX0ZMT1dTOyBpKyspCisJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmNwLT5yeF9mbG93c1tpXSk7CisKKwlkZXYtPm9wZW4gPSBjYXNfb3BlbjsKKwlkZXYtPnN0b3AgPSBjYXNfY2xvc2U7CisJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBjYXNfc3RhcnRfeG1pdDsKKwlkZXYtPmdldF9zdGF0cyA9IGNhc19nZXRfc3RhdHM7CisJZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBjYXNfc2V0X211bHRpY2FzdDsKKwlkZXYtPmRvX2lvY3RsID0gY2FzX2lvY3RsOworCWRldi0+ZXRodG9vbF9vcHMgPSAmY2FzX2V0aHRvb2xfb3BzOworCWRldi0+dHhfdGltZW91dCA9IGNhc190eF90aW1lb3V0OworCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBDQVNfVFhfVElNRU9VVDsKKwlkZXYtPmNoYW5nZV9tdHUgPSBjYXNfY2hhbmdlX210dTsKKyNpZmRlZiBVU0VfTkFQSQorCWRldi0+cG9sbCA9IGNhc19wb2xsOworCWRldi0+d2VpZ2h0ID0gNjQ7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCWRldi0+cG9sbF9jb250cm9sbGVyID0gY2FzX25ldHBvbGw7CisjZW5kaWYKKwlkZXYtPmlycSA9IHBkZXYtPmlycTsKKwlkZXYtPmRtYSA9IDA7CisKKwkvKiBDYXNzaW5pIGZlYXR1cmVzLiAqLworCWlmICgoY3AtPmNhc19mbGFncyAmIENBU19GTEFHX05PX0hXX0NTVU0pID09IDApCisJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNIHwgTkVUSUZfRl9TRzsKKworCWlmIChwY2lfdXNpbmdfZGFjKQorCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKKworCWlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSwgIgorCQkgICAgICAgImFib3J0aW5nLlxuIik7CisJCWdvdG8gZXJyX291dF9mcmVlX2NvbnNpc3RlbnQ7CisJfQorCisJaSA9IHJlYWRsKGNwLT5yZWdzICsgUkVHX0JJTV9DRkcpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBTdW4gQ2Fzc2luaSVzICglc2JpdC8lc01IeiBQQ0kvJXMpICIKKwkgICAgICAgIkV0aGVybmV0WyVkXSAiLCAgZGV2LT5uYW1lLCAKKwkgICAgICAgKGNwLT5jYXNfZmxhZ3MgJiBDQVNfRkxBR19SRUdfUExVUykgPyAiKyIgOiAiIiwgCisJICAgICAgIChpICYgQklNX0NGR18zMkJJVCkgPyAiMzIiIDogIjY0IiwKKwkgICAgICAgKGkgJiBCSU1fQ0ZHXzY2TUhaKSA/ICI2NiIgOiAiMzMiLAorCSAgICAgICAoY3AtPnBoeV90eXBlID09IENBU19QSFlfU0VSREVTKSA/ICJGaSIgOiAiQ3UiLCBwZGV2LT5pcnEpOyAKKworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCXByaW50aygiJTIuMnglYyIsIGRldi0+ZGV2X2FkZHJbaV0sCisJCSAgICAgICBpID09IDUgPyAnICcgOiAnOicpOworCXByaW50aygiXG4iKTsKKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOworCWNwLT5od19ydW5uaW5nID0gMTsKKwljYXNfZW50cm9weV9yZXNldChjcCk7CisJY2FzX3BoeV9pbml0KGNwKTsKKwljYXNfYmVnaW5fYXV0b19uZWdvdGlhdGlvbihjcCwgTlVMTCk7CisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZnJlZV9jb25zaXN0ZW50OgorCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgc2l6ZW9mKHN0cnVjdCBjYXNfaW5pdF9ibG9jayksCisJCQkgICAgY3AtPmluaXRfYmxvY2ssIGNwLT5ibG9ja19kdm1hKTsKKworZXJyX291dF9pb3VubWFwOgorCWRvd24oJmNwLT5wbV9zZW0pOworCWlmIChjcC0+aHdfcnVubmluZykKKwkJY2FzX3NodXRkb3duKGNwKTsKKwl1cCgmY3AtPnBtX3NlbSk7CisKKwlpb3VubWFwKGNwLT5yZWdzKTsKKworCitlcnJfb3V0X2ZyZWVfcmVzOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisKK2Vycl93cml0ZV9jYWNoZWxpbmU6CisJLyogVHJ5IHRvIHJlc3RvcmUgaXQgaW4gY2FzZSB0aGUgZXJyb3Igb2NjdXJlZCBhZnRlciB3ZQorCSAqIHNldCBpdC4gCisJICovCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsIG9yaWdfY2FjaGVsaW5lX3NpemUpOworCitlcnJfb3V0X2ZyZWVfbmV0ZGV2OgorCWZyZWVfbmV0ZGV2KGRldik7CisKK2Vycl9vdXRfZGlzYWJsZV9wZGV2OgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBjYXNfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBjYXMgKmNwOworCWlmICghZGV2KQorCQlyZXR1cm47CisKKwljcCA9IG5ldGRldl9wcml2KGRldik7CisJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKworCWRvd24oJmNwLT5wbV9zZW0pOworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJaWYgKGNwLT5od19ydW5uaW5nKQorCQljYXNfc2h1dGRvd24oY3ApOworCXVwKCZjcC0+cG1fc2VtKTsKKworI2lmIDEKKwlpZiAoY3AtPm9yaWdfY2FjaGVsaW5lX3NpemUpIHsKKwkJLyogUmVzdG9yZSB0aGUgY2FjaGUgbGluZSBzaXplIGlmIHdlIGhhZCBtb2RpZmllZAorCQkgKiBpdC4KKwkJICovCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQQ0lfQ0FDSEVfTElORV9TSVpFLCAKKwkJCQkgICAgICBjcC0+b3JpZ19jYWNoZWxpbmVfc2l6ZSk7CisJfQorI2VuZGlmCisJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBzaXplb2Yoc3RydWN0IGNhc19pbml0X2Jsb2NrKSwKKwkJCSAgICBjcC0+aW5pdF9ibG9jaywgY3AtPmJsb2NrX2R2bWEpOworCWlvdW5tYXAoY3AtPnJlZ3MpOworCWZyZWVfbmV0ZGV2KGRldik7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGNhc19zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgY2FzICpjcCA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIFdlIGhvbGQgdGhlIFBNIHNlbWFwaG9yZSBkdXJpbmcgZW50aXJlIGRyaXZlcgorCSAqIHNsZWVwIHRpbWUKKwkgKi8KKwlkb3duKCZjcC0+cG1fc2VtKTsKKwkKKwkvKiBJZiB0aGUgZHJpdmVyIGlzIG9wZW5lZCwgd2Ugc3RvcCB0aGUgRE1BICovCisJaWYgKGNwLT5vcGVuZWQpIHsKKwkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOworCisJCWNhc19sb2NrX2FsbF9zYXZlKGNwLCBmbGFncyk7CisKKwkJLyogV2UgY2FuIHNldCB0aGUgc2Vjb25kIGFyZyBvZiBjYXNfcmVzZXQgdG8gMAorCQkgKiBiZWNhdXNlIG9uIHJlc3VtZSwgd2UnbGwgY2FsbCBjYXNfaW5pdF9odyB3aXRoCisJCSAqIGl0cyBzZWNvbmQgYXJnIHNldCBzbyB0aGF0IGF1dG9uZWdvdGlhdGlvbiBpcworCQkgKiByZXN0YXJ0ZWQuCisJCSAqLworCQljYXNfcmVzZXQoY3AsIDApOworCQljYXNfY2xlYW5fcmluZ3MoY3ApOworCQljYXNfdW5sb2NrX2FsbF9yZXN0b3JlKGNwLCBmbGFncyk7CisJfQorCisJaWYgKGNwLT5od19ydW5uaW5nKQorCQljYXNfc2h1dGRvd24oY3ApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2FzX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBjYXMgKmNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXByaW50ayhLRVJOX0lORk8gIiVzOiByZXN1bWluZ1xuIiwgZGV2LT5uYW1lKTsKKworCWNhc19oYXJkX3Jlc2V0KGNwKTsKKwlpZiAoY3AtPm9wZW5lZCkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQljYXNfbG9ja19hbGxfc2F2ZShjcCwgZmxhZ3MpOworCQljYXNfcmVzZXQoY3AsIDApOworCQljcC0+aHdfcnVubmluZyA9IDE7CisJCWNhc19jbGVhbl9yaW5ncyhjcCk7CisJCWNhc19pbml0X2h3KGNwLCAxKTsKKwkJY2FzX3VubG9ja19hbGxfcmVzdG9yZShjcCwgZmxhZ3MpOworCisJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKKwl9CisJdXAoJmNwLT5wbV9zZW0pOworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19QTSAqLworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgY2FzX2RyaXZlciA9IHsKKwkubmFtZQkJPSBEUlZfTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlCT0gY2FzX3BjaV90YmwsCisJLnByb2JlCQk9IGNhc19pbml0X29uZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGNhc19yZW1vdmVfb25lKSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZAk9IGNhc19zdXNwZW5kLAorCS5yZXN1bWUJCT0gY2FzX3Jlc3VtZQorI2VuZGlmCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjYXNfaW5pdCh2b2lkKQoreworCWlmIChsaW5rZG93bl90aW1lb3V0ID4gMCkKKwkJbGlua190cmFuc2l0aW9uX3RpbWVvdXQgPSBsaW5rZG93bl90aW1lb3V0ICogSFo7CisJZWxzZQorCQlsaW5rX3RyYW5zaXRpb25fdGltZW91dCA9IDA7CisKKwlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZjYXNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNhc19jbGVhbnVwKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZjYXNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoY2FzX2luaXQpOworbW9kdWxlX2V4aXQoY2FzX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2Fzc2luaS5oIGIvZHJpdmVycy9uZXQvY2Fzc2luaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MDYzZWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9jYXNzaW5pLmgKQEAgLTAsMCArMSw0NDI1IEBACisvKiAkSWQ6IGNhc3NpbmkuaCx2IDEuMTYgMjAwNC8wOC8xNyAyMToxNToxNiB6YXVtZW4gRXhwICQKKyAqIGNhc3NpbmkuaDogRGVmaW5pdGlvbnMgZm9yIFN1biBNaWNyb3N5c3RlbXMgQ2Fzc2luaSgrKSBldGhlcm5ldCBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFN1biBNaWNyb3N5c3RlbXMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDAzIEFkcmlhbiBTdW4gKGFzdW5AZGFya3N1bnJpc2luZy5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgKiAwMjExMS0xMzA3LCBVU0EuCisgKgorICogdmVuZG9yIGlkOiAweDEwOEUgKFN1biBNaWNyb3N5c3RlbXMsIEluYy4pCisgKiBkZXZpY2UgaWQ6IDB4YWJiYSAoQ2Fzc2luaSkKKyAqIHJldmlzaW9uIGlkczogMHgwMSA9IENhc3NpbmkgCisgKiAgICAgICAgICAgICAgIDB4MDIgPSBDYXNzaW5pIHJldiAyCisgKiAgICAgICAgICAgICAgIDB4MTAgPSBDYXNzaW5pKworICogICAgICAgICAgICAgICAweDExID0gQ2Fzc2luaSsgMC4ydQorICoKKyAqIHZlbmRvciBpZDogMHgxMDBiIChOYXRpb25hbCBTZW1pY29uZHVjdG9yKQorICogZGV2aWNlIGlkOiAweDAwMzUgKERQODMwNjUvU2F0dXJuKQorICogcmV2aXNpb24gaWRzOiAweDMwID0gU2F0dXJuIEIyCisgKgorICogcmluZ3MgYXJlIGFsbCBvZmZzZXQgZnJvbSAwLgorICoKKyAqIHRoZXJlIGFyZSB0d28gY2xvY2sgZG9tYWluczoKKyAqIFBDSTogIDMzLzY2TUh6IGNsb2NrCisgKiBjaGlwOiAxMjVNSHogY2xvY2sKKyAqLworCisjaWZuZGVmIF9DQVNTSU5JX0gKKyNkZWZpbmUgX0NBU1NJTklfSAorCisvKiBjYXNzaW5pIHJlZ2lzdGVyIG1hcDogMk0gbWVtb3J5IG1hcHBlZCBpbiAzMi1iaXQgbWVtb3J5IHNwYWNlIGFjY2Vzc2libGUgYXMKKyAqIDMyLWJpdCB3b3Jkcy4gdGhlcmUgaXMgbm8gaS9vIHBvcnQgYWNjZXNzLiBSRUdfIGFkZHJlc3NlcyBhcmUKKyAqIHNoYXJlZCBiZXR3ZWVuIGNhc3NpbmkgYW5kIGNhc3NpbmkrLiBSRUdfUExVU18gYWRkcmVzc2VzIG9ubHkKKyAqIGFwcGVhciBpbiBjYXNzaW5pKy4gUkVHX01JTlVTXyBhZGRyZXNzZXMgb25seSBhcHBlYXIgaW4gY2Fzc2luaS4KKyAqLworI2RlZmluZSBDQVNfSURfUkVWMiAgICAgICAgICAweDAyCisjZGVmaW5lIENBU19JRF9SRVZQTFVTICAgICAgIDB4MTAgCisjZGVmaW5lIENBU19JRF9SRVZQTFVTMDJ1ICAgIDB4MTEgCisjZGVmaW5lIENBU19JRF9SRVZTQVRVUk5CMiAgIDB4MzAKKworLyoqIGdsb2JhbCByZXNvdXJjZXMgKiovCisKKy8qIHRoaXMgcmVnaXN0ZXIgc2V0cyB0aGUgd2VpZ2h0cyBmb3IgdGhlIHdlaWdodGVkIHJvdW5kIHJvYmluIGFyYml0ZXIuIGUuZy4sCisgKiBpZiByeCB3ZWlnaHQgPT0gMSBhbmQgdHggd2VpZ2h0ID09IDAsIHJ4ID09IDJ4IHR4IHRyYW5zZmVyIGNyZWRpdAorICogZm9yIGl0cyBuZXh0IHR1cm4gdG8gYWNjZXNzIHRoZSBwY2kgYnVzLiAKKyAqIG1hcDogMHgwID0geDEsIDB4MSA9IHgyLCAweDIgPSB4NCwgMHgzID0geDggCisgKiBERUZBVUxUOiAweDAsIFNJWkU6IDUgYml0cworICovCisjZGVmaW5lICBSRUdfQ0FXUgkgICAgICAgICAgICAgICAweDAwMDQgIC8qIGNvcmUgYXJiaXRyYXRpb24gd2VpZ2h0ICovCisjZGVmaW5lICAgIENBV1JfUlhfRE1BX1dFSUdIVF9TSElGVCAgICAwCisjZGVmaW5lICAgIENBV1JfUlhfRE1BX1dFSUdIVF9NQVNLICAgICAweDAzICAgIC8qIFswOjFdICovCisjZGVmaW5lICAgIENBV1JfVFhfRE1BX1dFSUdIVF9TSElGVCAgICAyCisjZGVmaW5lICAgIENBV1JfVFhfRE1BX1dFSUdIVF9NQVNLICAgICAweDBDICAgIC8qIFszOjJdICovCisjZGVmaW5lICAgIENBV1JfUlJfRElTICAgICAgICAgICAgICAgICAweDEwICAgIC8qIFs0XSAqLworCisvKiBpZiBlbmFibGVkLCBCSU0gY2FuIHNlbmQgYnVyc3RzIGFjcm9zcyBQQ0kgYnVzID4gY2FjaGVsaW5lIHNpemUuIGJ1cnN0CisgKiBzaXplcyBkZXRlcm1pbmVkIGJ5IGxlbmd0aCBvZiBwYWNrZXQgb3IgZGVzY3JpcHRvciB0cmFuc2ZlciBhbmQgdGhlIAorICogbWF4IGxlbmd0aCBhbGxvd2VkIGJ5IHRoZSB0YXJnZXQuIAorICogREVGQVVMVDogMHgwLCBTSVpFOiAxIGJpdAorICovCisjZGVmaW5lICBSRUdfSU5GX0JVUlNUICAgICAgICAgICAgICAgICAweDAwMDggIC8qIGluZmluaXRlIGJ1cnN0IGVuYWJsZSByZWcgKi8KKyNkZWZpbmUgICAgSU5GX0JVUlNUX0VOICAgICAgICAgICAgICAgIDB4MSAgICAgLyogZW5hYmxlICovCisKKy8qIHRvcCBsZXZlbCBpbnRlcnJ1cHRzIFswLTldIGFyZSBhdXRvLWNsZWFyZWQgdG8gMCB3aGVuIHRoZSBzdGF0dXMKKyAqIHJlZ2lzdGVyIGlzIHJlYWQuIHNlY29uZCBsZXZlbCBpbnRlcnJ1cHRzIFsxMyAtIDE4XSBhcmUgY2xlYXJlZCBhdAorICogdGhlIHNvdXJjZS4gdHggY29tcGxldGlvbiByZWdpc3RlciAzIGlzIHJlcGxpY2F0ZWQgaW4gWzE5IC0gMzFdIAorICogREVGQVVMVDogMHgwMDAwMDAwMCwgU0laRTogMjkgYml0cworICovCisjZGVmaW5lICBSRUdfSU5UUl9TVEFUVVMgICAgICAgICAgICAgICAweDAwMEMgIC8qIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgSU5UUl9UWF9JTlRNRSAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgIC8qIGZyYW1lIHcvIElOVCBNRSBkZXNjIGJpdCBzZXQgCisJCQkJCQkgICAgICB4ZmVycmVkIGZyb20gaG9zdCBxdWV1ZSB0bworCQkJCQkJICAgICAgVFggRklGTyAqLworI2RlZmluZSAgICBJTlRSX1RYX0FMTCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAgLyogYWxsIHhtaXQgZnJhbWVzIHhmZXJyZWQgaW50bworCQkJCQkJICAgICAgVFggRklGTy4gaS5lLiwKKwkJCQkJCSAgICAgIFRYIEtpY2sgPT0gVFggY29tcGxldGUuIGlmIAorCQkJCQkJICAgICAgUEFDRURfTU9ERSBzZXQsIHRoZW4gVFggRklGTworCQkJCQkJICAgICAgYWxzbyBlbXB0eSAqLworI2RlZmluZSAgICBJTlRSX1RYX0RPTkUgICAgICAgICAgICAgICAgMHgwMDAwMDAwNCAgLyogYW55IGZyYW1lIHhmZXJyZWQgaW50byB0eCAKKwkJCQkJCSAgICAgIEZJRk8gKi8KKyNkZWZpbmUgICAgSU5UUl9UWF9UQUdfRVJST1IgICAgICAgICAgIDB4MDAwMDAwMDggIC8qIFRYIEZJRk8gdGFnIGZyYW1pbmcgCisJCQkJCQkgICAgICBjb3JydXB0ZWQuIEZBVEFMIEVSUk9SICovCisjZGVmaW5lICAgIElOVFJfUlhfRE9ORSAgICAgICAgICAgICAgICAweDAwMDAwMDEwICAvKiBhdCBsZWFzdCAxIGZyYW1lIHhmZXJyZWQKKwkJCQkJCSAgICAgIGZyb20gUlggRklGTyB0byBob3N0IG1lbS4KKwkJCQkJCSAgICAgIFJYIGNvbXBsZXRpb24gcmVnIHVwZGF0ZWQuCisJCQkJCQkgICAgICBtYXkgYmUgZGVsYXllZCBieSByZWN2CisJCQkJCQkgICAgICBpbnRyIGJsYW5raW5nLiAqLworI2RlZmluZSAgICBJTlRSX1JYX0JVRl9VTkFWQUlMICAgICAgICAgMHgwMDAwMDAyMCAgLyogbm8gbW9yZSByZWNlaXZlIGJ1ZmZlcnMuCisJCQkJCQkgICAgICBSWCBLaWNrID09IFJYIGNvbXBsZXRlICovCisjZGVmaW5lICAgIElOVFJfUlhfVEFHX0VSUk9SICAgICAgICAgICAweDAwMDAwMDQwICAvKiBSWCBGSUZPIHRhZyBmcmFtaW5nIAorCQkJCQkJICAgICAgY29ycnVwdGVkLiBGQVRBTCBFUlJPUiAqLworI2RlZmluZSAgICBJTlRSX1JYX0NPTVBfRlVMTCAgICAgICAgICAgMHgwMDAwMDA4MCAgLyogbm8gbW9yZSByb29tIGluIGNvbXBsZXRpb24KKwkJCQkJCSAgICAgIHJpbmcgdG8gcG9zdCBkZXNjcmlwdG9ycy4KKwkJCQkJCSAgICAgIFJYIGNvbXBsZXRlIGhlYWQgaW5jciB0bworCQkJCQkJICAgICAgYWxtb3N0IHJlYWNoIFJYIGNvbXBsZXRlCisJCQkJCQkgICAgICB0YWlsICovCisjZGVmaW5lICAgIElOVFJfUlhfQlVGX0FFICAgICAgICAgICAgICAweDAwMDAwMTAwICAvKiBsZXNzIHRoYW4gdGhlIAorCQkJCQkJICAgICAgcHJvZ3JhbW1hYmxlIHRocmVzaG9sZCAjCisJCQkJCQkgICAgICBvZiBmcmVlIGRlc2NyIGF2YWlsIGZvcgorCQkJCQkJICAgICAgaHcgdXNlICovCisjZGVmaW5lICAgIElOVFJfUlhfQ09NUF9BRiAgICAgICAgICAgICAweDAwMDAwMjAwICAvKiBsZXNzIHRoYW4gdGhlIAorCQkJCQkJICAgICAgcHJvZ3JhbW1hYmxlIHRocmVzaG9sZCAjCisJCQkJCQkgICAgICBvZiBkZXNjciBzcGFjZXMgZm9yIGh3CisJCQkJCQkgICAgICB1c2UgaW4gY29tcGxldGlvbiBkZXNjcgorCQkJCQkJICAgICAgcmluZyAqLworI2RlZmluZSAgICBJTlRSX1JYX0xFTl9NSVNNQVRDSCAgICAgICAgMHgwMDAwMDQwMCAgLyogbGVuIGZpZWxkIGZyb20gTUFDICE9CisJCQkJCQkgICAgICBsZW4gb2Ygbm9uLXJlYXNzZW1ibHkgcGt0CisJCQkJCQkgICAgICBmcm9tIGZpZm8gZHVyaW5nIERNQSBvcgorCQkJCQkJICAgICAgaGVhZGVyIHBhcnNlciBwcm92aWRlcyBUQ1AKKwkJCQkJCSAgICAgIGhlYWRlciBhbmQgcGF5bG9hZCBzaXplID4KKwkJCQkJCSAgICAgIE1BQyBwYWNrZXQgc2l6ZS4gCisJCQkJCQkgICAgICBGQVRBTCBFUlJPUiAqLworI2RlZmluZSAgICBJTlRSX1NVTU1BUlkgICAgICAgICAgICAgICAgMHgwMDAwMTAwMCAgLyogc3VtbWFyeSBpbnRlcnJ1cHQgYml0LiB0aGlzCisJCQkJCQkgICAgICBiaXQgd2lsbCBiZSBzZXQgaWYgYW4gaW50ZXJydXB0IAorCQkJCQkJICAgICAgZ2VuZXJhdGVkIG9uIHRoZSBwY2kgYnVzLiB1c2VmdWwKKwkJCQkJCSAgICAgIHdoZW4gZHJpdmVyIGlzIHBvbGxpbmcgZm9yIAorCQkJCQkJICAgICAgaW50ZXJydXB0cyAqLworI2RlZmluZSAgICBJTlRSX1BDU19TVEFUVVMgICAgICAgICAgICAgMHgwMDAwMjAwMCAgLyogUENTIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgSU5UUl9UWF9NQUNfU1RBVFVTICAgICAgICAgIDB4MDAwMDQwMDAgIC8qIFRYIE1BQyBzdGF0dXMgcmVnaXN0ZXIgaGFzIGF0IAorCQkJCQkJICAgICAgbGVhc3QgMSB1bm1hc2tlZCBpbnRlcnJ1cHQgc2V0ICovCisjZGVmaW5lICAgIElOVFJfUlhfTUFDX1NUQVRVUyAgICAgICAgICAweDAwMDA4MDAwICAvKiBSWCBNQUMgc3RhdHVzIHJlZ2lzdGVyIGhhcyBhdCAKKwkJCQkJCSAgICAgIGxlYXN0IDEgdW5tYXNrZWQgaW50ZXJydXB0IHNldCAqLworI2RlZmluZSAgICBJTlRSX01BQ19DVFJMX1NUQVRVUyAgICAgICAgMHgwMDAxMDAwMCAgLyogTUFDIGNvbnRyb2wgc3RhdHVzIHJlZ2lzdGVyIGhhcworCQkJCQkJICAgICAgYXQgbGVhc3QgMSB1bm1hc2tlZCBpbnRlcnJ1cHQKKwkJCQkJCSAgICAgIHNldCAqLworI2RlZmluZSAgICBJTlRSX01JRl9TVEFUVVMgICAgICAgICAgICAgMHgwMDAyMDAwMCAgLyogTUlGIHN0YXR1cyByZWdpc3RlciBoYXMgYXQgbGVhc3QKKwkJCQkJCSAgICAgIDEgdW5tYXNrZWQgaW50ZXJydXB0IHNldCAqLworI2RlZmluZSAgICBJTlRSX1BDSV9FUlJPUl9TVEFUVVMgICAgICAgMHgwMDA0MDAwMCAgLyogUENJIGVycm9yIHN0YXR1cyByZWdpc3RlciBpbiB0aGUKKwkJCQkJCSAgICAgIEJJRiBoYXMgYXQgbGVhc3QgMSB1bm1hc2tlZCAKKwkJCQkJCSAgICAgIGludGVycnVwdCBzZXQgKi8KKyNkZWZpbmUgICAgSU5UUl9UWF9DT01QXzNfTUFTSyAgICAgICAgIDB4RkZGODAwMDAgIC8qIG1hc2sgZm9yIFRYIGNvbXBsZXRpb24gCisJCQkJCQkgICAgICAzIHJlZyBkYXRhICovCisjZGVmaW5lICAgIElOVFJfVFhfQ09NUF8zX1NISUZUICAgICAgICAxOQorI2RlZmluZSAgICBJTlRSX0VSUk9SX01BU0sgKElOVFJfTUlGX1NUQVRVUyB8IElOVFJfUENJX0VSUk9SX1NUQVRVUyB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlRSX1BDU19TVEFUVVMgfCBJTlRSX1JYX0xFTl9NSVNNQVRDSCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlRSX1RYX01BQ19TVEFUVVMgfCBJTlRSX1JYX01BQ19TVEFUVVMgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UUl9UWF9UQUdfRVJST1IgfCBJTlRSX1JYX1RBR19FUlJPUiB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlRSX01BQ19DVFJMX1NUQVRVUykKKworLyogZGV0ZXJtaW5lcyB3aGljaCBzdGF0dXMgZXZlbnRzIHdpbGwgY2F1c2UgYW4gaW50ZXJydXB0LiBsYXlvdXQgc2FtZQorICogYXMgUkVHX0lOVFJfU1RBVFVTLiAKKyAqIERFRkFVTFQ6IDB4RkZGRkZGRkYsIFNJWkU6IDE2IGJpdHMKKyAqLworI2RlZmluZSAgUkVHX0lOVFJfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBJbnRlcnJ1cHQgbWFzayAqLworCisvKiB0b3AgbGV2ZWwgaW50ZXJydXB0IGJpdHMgdGhhdCBhcmUgY2xlYXJlZCBkdXJpbmcgcmVhZCBvZiBSRUdfSU5UUl9TVEFUVVNfQUxJQVMuCisgKiB1c2VmdWwgd2hlbiBkcml2ZXIgaXMgcG9sbGluZyBmb3IgaW50ZXJydXB0cy4gbGF5b3V0IHNhbWUgYXMgUkVHX0lOVFJfTUFTSy4KKyAqIERFRkFVTFQ6IDB4MDAwMDAwMDAsIFNJWkU6IDEyIGJpdHMKKyAqLworI2RlZmluZSAgUkVHX0FMSUFTX0NMRUFSICAgICAgICAgICAgICAgMHgwMDE0ICAvKiBhbGlhcyBjbGVhciBtYXNrIAorCQkJCQkJICAodXNlZCB3LyBzdGF0dXMgYWxpYXMpICovCisvKiBzYW1lIGFzIFJFR19JTlRSX1NUQVRVUyBleGNlcHQgdGhhdCBvbmx5IGJpdHMgY2xlYXJlZCBhcmUgdGhvc2Ugc2VsZWN0ZWQgYnkKKyAqIFJFR19BTElBU19DTEVBUiAKKyAqIERFRkFVTFQ6IDB4MDAwMDAwMDAsIFNJWkU6IDI5IGJpdHMKKyAqLworI2RlZmluZSAgUkVHX0lOVFJfU1RBVFVTX0FMSUFTICAgICAgICAgMHgwMDFDICAvKiBpbnRlcnJ1cHQgc3RhdHVzIGFsaWFzIAorCQkJCQkJICAoc2VsZWN0aXZlIGNsZWFyKSAqLworCisvKiBERUZBVUxUOiAweDAsIFNJWkU6IDMgYml0cyAqLworI2RlZmluZSAgUkVHX1BDSV9FUlJfU1RBVFVTICAgICAgICAgICAgMHgxMDAwICAvKiBQQ0kgZXJyb3Igc3RhdHVzICovCisjZGVmaW5lICAgIFBDSV9FUlJfQkFEQUNLICAgICAgICAgICAgICAweDAxICAgIC8qIHJlc2VydmVkIGluIENhc3NpbmkrLiAKKwkJCQkJCSAgc2V0IGlmIG5vIEFDSzY0IyBkdXJpbmcgQUJTNjQgY3ljbGUKKwkJCQkJCSAgaW4gQ2Fzc2luaS4gKi8KKyNkZWZpbmUgICAgUENJX0VSUl9EVFJUTyAgICAgICAgICAgICAgIDB4MDIgICAgLyogZGVsYXllZCB4YWN0aW9uIHRpbWVvdXQuIHNldCBpZgorCQkJCQkJICBubyByZWFkIHJldHJ5IGFmdGVyIDJeMTUgY2xvY2tzICovCisjZGVmaW5lICAgIFBDSV9FUlJfT1RIRVIgICAgICAgICAgICAgICAweDA0ICAgIC8qIG90aGVyIFBDSSBlcnJvcnMgKi8KKyNkZWZpbmUgICAgUENJX0VSUl9CSU1fRE1BX1dSSVRFICAgICAgIDB4MDggICAgLyogQklNIHJlY2VpdmVkIDAgY291bnQgRE1BIHdyaXRlIHJlcS4KKwkJCQkJCSAgdW51c2VkIGluIENhc3NpbmkuICovCisjZGVmaW5lICAgIFBDSV9FUlJfQklNX0RNQV9SRUFEICAgICAgICAweDEwICAgIC8qIEJJTSByZWNlaXZlZCAwIGNvdW50IERNQSByZWFkIHJlcS4KKwkJCQkJCSAgdW51c2VkIGluIENhc3NpbmkuICovCisjZGVmaW5lICAgIFBDSV9FUlJfQklNX0RNQV9USU1FT1VUICAgICAweDIwICAgIC8qIEJJTSByZWNlaXZlZCAyNTUgcmV0cmllcyBkdXJpbmcgCisJCQkJCQkgIERNQS4gdW51c2VkIGluIGNhc3NpbmkuICovCisKKy8qIG1hc2sgZm9yIFBDSSBzdGF0dXMgZXZlbnRzIHRoYXQgd2lsbCBzZXQgUENJX0VSUl9TVEFUVVMuIGlmIGNsZWFyZWQsIGV2ZW50CisgKiBjYXVzZXMgYW4gaW50ZXJydXB0IHRvIGJlIGdlbmVyYXRlZC4gCisgKiBERUZBVUxUOiAweDcsIFNJWkU6IDMgYml0cworICovCisjZGVmaW5lICBSRUdfUENJX0VSUl9TVEFUVVNfTUFTSyAgICAgICAweDEwMDQgIC8qIFBDSSBFcnJvciBzdGF0dXMgbWFzayAqLworCisvKiB1c2VkIHRvIGNvbmZpZ3VyZSBQQ0kgcmVsYXRlZCBwYXJhbWV0ZXJzIHRoYXQgYXJlIG5vdCBpbiBQQ0kgY29uZmlnIHNwYWNlLiAKKyAqIERFRkFVTFQ6IDBieHgwMDAsIFNJWkU6IDUgYml0cworICovCisjZGVmaW5lICBSRUdfQklNX0NGRyAgICAgICAgICAgICAgICAweDEwMDggIC8qIEJJTSBDb25maWd1cmF0aW9uICovCisjZGVmaW5lICAgIEJJTV9DRkdfUkVTRVJWRUQwICAgICAgICAweDAwMSAgIC8qIHJlc2VydmVkICovCisjZGVmaW5lICAgIEJJTV9DRkdfUkVTRVJWRUQxICAgICAgICAweDAwMiAgIC8qIHJlc2VydmVkICovCisjZGVmaW5lICAgIEJJTV9DRkdfNjRCSVRfRElTQUJMRSAgICAweDAwNCAgIC8qIGRpc2FibGUgNjQtYml0IG1vZGUgKi8KKyNkZWZpbmUgICAgQklNX0NGR182Nk1IWiAgICAgICAgICAgIDB4MDA4ICAgLyogKHJvKSAxID0gNjZNSHosIDAgPSA8IDY2TUh6ICovCisjZGVmaW5lICAgIEJJTV9DRkdfMzJCSVQgICAgICAgICAgICAweDAxMCAgIC8qIChybykgMSA9IDMyLWJpdCBzbG90LCAwID0gNjQtYml0ICovCisjZGVmaW5lICAgIEJJTV9DRkdfRFBBUl9JTlRSX0VOQUJMRSAweDAyMCAgIC8qIGRldGVjdGVkIHBhcml0eSBlcnIgZW5hYmxlICovCisjZGVmaW5lICAgIEJJTV9DRkdfUk1BX0lOVFJfRU5BQkxFICAweDA0MCAgIC8qIG1hc3RlciBhYm9ydCBpbnRyIGVuYWJsZSAqLworI2RlZmluZSAgICBCSU1fQ0ZHX1JUQV9JTlRSX0VOQUJMRSAgMHgwODAgICAvKiB0YXJnZXQgYWJvcnQgaW50ciBlbmFibGUgKi8KKyNkZWZpbmUgICAgQklNX0NGR19SRVNFUlZFRDIgICAgICAgIDB4MTAwICAgLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgICAgQklNX0NGR19CSU1fRElTQUJMRSAgICAgIDB4MjAwICAgLyogc3RvcCBCSU0gRE1BLiB1c2UgYmVmb3JlIGdsb2JhbCAKKwkJCQkJICAgICAgIHJlc2V0LiByZXNlcnZlZCBpbiBDYXNzaW5pLiAqLworI2RlZmluZSAgICBCSU1fQ0ZHX0JJTV9TVEFUVVMgICAgICAgMHg0MDAgICAvKiAocm8pIDEgPSBCSU0gRE1BIHN1c3BlbmRlZC4KKwkJCQkJCSAgcmVzZXJ2ZWQgaW4gQ2Fzc2luaS4gKi8KKyNkZWZpbmUgICAgQklNX0NGR19QRVJST1JfQkxPQ0sgICAgIDB4ODAwICAvKiBibG9jayBQRVJSIyB0byBwY2kgYnVzLiBkZWY6IDAuCisJCQkJCQkgcmVzZXJ2ZWQgaW4gQ2Fzc2luaS4gKi8KKworLyogREVGQVVMVDogMHgwMDAwMDAwMCwgU0laRTogMzIgYml0cyAqLworI2RlZmluZSAgUkVHX0JJTV9ESUFHICAgICAgICAgICAgICAgICAgMHgxMDBDICAvKiBCSU0gRGlhZ25vc3RpYyAqLworI2RlZmluZSAgICBCSU1fRElBR19NU1RSX1NNX01BU0sgICAgICAgMHgzRkZGRkYwMCAvKiBQQ0kgbWFzdGVyIGNvbnRyb2xsZXIgc3RhdGUKKwkJCQkJCSAgICAgbWFjaGluZSBiaXRzIFsyMTowXSAqLworI2RlZmluZSAgICBCSU1fRElBR19CUlNUX1NNX01BU0sgICAgICAgMHg3RiAgICAvKiBQQ0kgYnVyc3QgY29udHJvbGxlciBzdGF0ZSAKKwkJCQkJCSAgbWFjaGluZSBiaXRzIFs2OjBdICovCisKKy8qIHdyaXRpbmcgdG8gU1dfUkVTRVRfVFggYW5kIFNXX1JFU0VUX1JYIHdpbGwgaXNzdWUgYSBnbG9iYWwKKyAqIHJlc2V0LiBwb2xsIHVudGlsIFRYIGFuZCBSWCByZWFkIGJhY2sgYXMgMCdzIGZvciBjb21wbGV0aW9uLgorICovCisjZGVmaW5lICBSRUdfU1dfUkVTRVQgICAgICAgICAgICAgICAgICAweDEwMTAgIC8qIFNvZnR3YXJlIHJlc2V0ICovCisjZGVmaW5lICAgIFNXX1JFU0VUX1RYICAgICAgICAgICAgICAgICAweDAwMDAwMDAxICAvKiByZXNldCBUWCBETUEgZW5naW5lLiBwb2xsIHVudGlsCisJCQkJCQkgICAgICBjbGVhcmVkIHRvIDAuICAqLworI2RlZmluZSAgICBTV19SRVNFVF9SWCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAgLyogcmVzZXQgUlggRE1BIGVuZ2luZS4gcG9sbCB1bnRpbAorCQkJCQkJICAgICAgY2xlYXJlZCB0byAwLiAqLworI2RlZmluZSAgICBTV19SRVNFVF9SU1RPVVQgICAgICAgICAgICAgMHgwMDAwMDAwNCAgLyogZm9yY2UgUlNUT1VUIyBwaW4gYWN0aXZlIChsb3cpLgorCQkJCQkJICAgICAgcmVzZXRzIFBIWSBhbmQgYW55dGhpbmcgZWxzZSAKKwkJCQkJCSAgICAgIGNvbm5lY3RlZCB0byBSU1RPVVQjLiBSU1RPVVQjCisJCQkJCQkgICAgICBpcyBhbHNvIGFjdGl2YXRlZCBieSBsb2NhbCBQQ0kKKwkJCQkJCSAgICAgIHJlc2V0IHdoZW4gaG90LXN3YXAgaXMgYmVpbmcgCisJCQkJCQkgICAgICBkb25lLiAqLworI2RlZmluZSAgICBTV19SRVNFVF9CTE9DS19QQ1NfU0xJTksgICAgMHgwMDAwMDAwOCAgLyogaWYgYSBnbG9iYWwgcmVzZXQgaXMgZG9uZSB3aXRoIAorCQkJCQkJICAgICAgdGhpcyBiaXQgc2V0LCBQQ1MgYW5kIFNMSU5LIAorCQkJCQkJICAgICAgbW9kdWxlcyB3b24ndCBiZSByZXNldC4gCisJCQkJCQkgICAgICBpLmUuLCBsaW5rIHdvbid0IGRyb3AuICovCisjZGVmaW5lICAgIFNXX1JFU0VUX0JSRVFfU01fTUFTSyAgICAgICAweDAwMDA3RjAwICAvKiBicmVxIHN0YXRlIG1hY2hpbmUgWzY6MF0gKi8KKyNkZWZpbmUgICAgU1dfUkVTRVRfUENJQVJCX1NNX01BU0sgICAgIDB4MDAwNzAwMDAgIC8qIHBjaSBhcmJpdHJhdGlvbiBzdGF0ZSBiaXRzOgorCQkJCQkJICAgICAgMGIwMDA6IEFSQl9JRExFMQorCQkJCQkJICAgICAgMGIwMDE6IEFSQl9JRExFMgorCQkJCQkJICAgICAgMGIwMTA6IEFSQl9XQl9BQ0sKKwkJCQkJCSAgICAgIDBiMDExOiBBUkJfV0JfV0FUCisJCQkJCQkgICAgICAwYjEwMDogQVJCX1JCX0FDSworCQkJCQkJICAgICAgMGIxMDE6IEFSQl9SQl9XQVQKKwkJCQkJCSAgICAgIDBiMTEwOiBBUkJfUkJfRU5ECisJCQkJCQkgICAgICAwYjExMTogQVJCX1dCX0VORCAqLworI2RlZmluZSAgICBTV19SRVNFVF9SRFBDSV9TTV9NQVNLICAgICAgMHgwMDMwMDAwMCAgLyogcmVhZCBwY2kgc3RhdGUgYml0czoKKwkJCQkJCSAgICAgIDBiMDA6IFJEX1BDSV9XQVQKKwkJCQkJCSAgICAgIDBiMDE6IFJEX1BDSV9SRFkKKwkJCQkJCSAgICAgIDBiMTE6IFJEX1BDSV9BQ0sgKi8KKyNkZWZpbmUgICAgU1dfUkVTRVRfUkRBUkJfU01fTUFTSyAgICAgIDB4MDBDMDAwMDAgIC8qIHJlYWQgYXJiaXRyYXRpb24gc3RhdGUgYml0czoKKwkJCQkJCSAgICAgIDBiMDA6IEFEX0lETF9SWAorCQkJCQkJICAgICAgMGIwMTogQURfQUNLX1JYCisJCQkJCQkgICAgICAwYjEwOiBBRF9BQ0tfVFgKKwkJCQkJCSAgICAgIDBiMTE6IEFEX0lETF9UWCAqLworI2RlZmluZSAgICBTV19SRVNFVF9XUlBDSV9TTV9NQVNLICAgICAgMHgwNjAwMDAwMCAgLyogd3JpdGUgcGNpIHN0YXRlIGJpdHMgCisJCQkJCQkgICAgICAwYjAwOiBXUl9QQ0lfV0FUCisJCQkJCQkgICAgICAwYjAxOiBXUl9QQ0lfUkRZCisJCQkJCQkgICAgICAwYjExOiBXUl9QQ0lfQUNLICovCisjZGVmaW5lICAgIFNXX1JFU0VUX1dSQVJCX1NNX01BU0sgICAgICAweDM4MDAwMDAwICAvKiB3cml0ZSBhcmJpdHJhdGlvbiBzdGF0ZSBiaXRzOgorCQkJCQkJICAgICAgMGIwMDA6IEFSQl9JRExFMQorCQkJCQkJICAgICAgMGIwMDE6IEFSQl9JRExFMgorCQkJCQkJICAgICAgMGIwMTA6IEFSQl9UWF9BQ0sKKwkJCQkJCSAgICAgIDBiMDExOiBBUkJfVFhfV0FUCisJCQkJCQkgICAgICAwYjEwMDogQVJCX1JYX0FDSworCQkJCQkJICAgICAgMGIxMTA6IEFSQl9SWF9XQVQgKi8KKworLyogQ2Fzc2luaSBvbmx5LiA2NC1iaXQgcmVnaXN0ZXIgdXNlZCB0byBjaGVjayBQQ0kgZGF0YXBhdGguIHdoZW4gcmVhZCwKKyAqIHZhbHVlIHdyaXR0ZW4gaGFzIGJvdGggbG93ZXIgYW5kIHVwcGVyIDMyLWJpdCBoYWx2ZXMgcm90YXRlZCB0byB0aGUgcmlnaHQKKyAqIG9uZSBiaXQgcG9zaXRpb24uIGUuZy4sIEZGRkZGRkZGIEZGRkZGRkZGIC0+IDdGRkZGRkZGIDdGRkZGRkZGCisgKi8KKyNkZWZpbmUgIFJFR19NSU5VU19CSU1fREFUQVBBVEhfVEVTVCAgIDB4MTAxOCAgLyogQ2Fzc2luaTogQklNIGRhdGFwYXRoIHRlc3QgCisJCQkJCQkgIENhc3NpbmkrOiByZXNlcnZlZCAqLworCisvKiBvdXRwdXQgZW5hYmxlcyBhcmUgcHJvdmlkZWQgZm9yIGVhY2ggZGV2aWNlJ3MgY2hpcCBzZWxlY3QgYW5kIGZvciB0aGUgcmVzdAorICogb2YgdGhlIG91dHB1dHMgZnJvbSBjYXNzaW5pIHRvIGl0cyBsb2NhbCBidXMgZGV2aWNlcy4gdHdvIHN3IHByb2dyYW1tYWJsZQorICogYml0cyBhcmUgY29ubmVjdGVkIHRvIGdlbmVyYWwgcHVycHVzIGNvbnRyb2wvc3RhdHVzIGJpdHMuCisgKiBERUZBVUxUOiAweDcKKyAqLworI2RlZmluZSAgUkVHX0JJTV9MT0NBTF9ERVZfRU4gICAgICAgICAgMHgxMDIwICAvKiBCSU0gbG9jYWwgZGV2aWNlIAorCQkJCQkJICBvdXRwdXQgRU4uIGRlZmF1bHQ6IDB4NyAqLworI2RlZmluZSAgICBCSU1fTE9DQUxfREVWX1BBRCAgICAgICAgICAgMHgwMSAgICAvKiBhZGRyZXNzIGJ1cywgUlcgc2lnbmFsLCBhbmQKKwkJCQkJCSAgT0Ugc2lnbmFsIG91dHB1dCBlbmFibGUgb24gdGhlCisJCQkJCQkgIGxvY2FsIGJ1cyBpbnRlcmZhY2UuIHRoZXNlCisJCQkJCQkgIGFyZSBzaGFyZWQgYmV0d2VlbiBib3RoIGxvY2FsIAorCQkJCQkJICBidXMgZGV2aWNlcy4gdHJpc3RhdGUgd2hlbiAwLiAqLworI2RlZmluZSAgICBCSU1fTE9DQUxfREVWX1BST00gICAgICAgICAgMHgwMiAgICAvKiBQUk9NIGNoaXAgc2VsZWN0ICovCisjZGVmaW5lICAgIEJJTV9MT0NBTF9ERVZfRVhUICAgICAgICAgICAweDA0ICAgIC8qIHNlY29uZGFyeSBsb2NhbCBidXMgZGV2aWNlIGNoaXAKKwkJCQkJCSAgc2VsZWN0IG91dHB1dCBlbmFibGUgKi8KKyNkZWZpbmUgICAgQklNX0xPQ0FMX0RFVl9TT0ZUXzAgICAgICAgIDB4MDggICAgLyogc3cgcHJvZ3JhbW1hYmxlIGN0cmwgYml0IDAgKi8KKyNkZWZpbmUgICAgQklNX0xPQ0FMX0RFVl9TT0ZUXzEgICAgICAgIDB4MTAgICAgLyogc3cgcHJvZ3JhbW1hYmxlIGN0cmwgYml0IDEgKi8KKyNkZWZpbmUgICAgQklNX0xPQ0FMX0RFVl9IV19SRVNFVCAgICAgIDB4MjAgICAgLyogaW50ZXJuYWwgaHcgcmVzZXQuIENhc3NpbmkrIG9ubHkuICovCisKKy8qIGFjY2VzcyAyNCBlbnRyeSBCSU0gcmVhZCBhbmQgd3JpdGUgYnVmZmVycy4gcHV0IGFkZHJlc3MgaW4gUkVHX0JJTV9CVUZGRVJfQUREUgorICogYW5kIHJlYWQvd3JpdGUgZnJvbS90byBpdCBSRUdfQklNX0JVRkZFUl9EQVRBX0xPVyBhbmQgX0RBVEFfSEkuIAorICogX0RBVEFfSEkgc2hvdWxkIGJlIHRoZSBsYXN0IGFjY2VzcyBvZiB0aGUgc2VxdWVuY2UuIAorICogREVGQVVMVDogdW5kZWZpbmVkCisgKi8KKyNkZWZpbmUgIFJFR19CSU1fQlVGRkVSX0FERFIgICAgICAgICAgIDB4MTAyNCAgLyogQklNIGJ1ZmZlciBhZGRyZXNzLiBmb3IKKwkJCQkJCSAgcHVycG9zZXMuICovCisjZGVmaW5lICAgIEJJTV9CVUZGRVJfQUREUl9NQVNLICAgICAgICAweDNGICAgIC8qIGluZGV4ICgwIC0gMjMpIG9mIGJ1ZmZlciAgKi8KKyNkZWZpbmUgICAgQklNX0JVRkZFUl9XUl9TRUxFQ1QgICAgICAgIDB4NDAgICAgLyogd3JpdGUgYnVmZmVyIGFjY2VzcyA9IDEKKwkJCQkJCSAgcmVhZCBidWZmZXIgYWNjZXNzID0gMCAqLworLyogREVGQVVMVDogdW5kZWZpbmVkICovCisjZGVmaW5lICBSRUdfQklNX0JVRkZFUl9EQVRBX0xPVyAgICAgICAweDEwMjggIC8qIEJJTSBidWZmZXIgZGF0YSBsb3cgKi8KKyNkZWZpbmUgIFJFR19CSU1fQlVGRkVSX0RBVEFfSEkgICAgICAgIDB4MTAyQyAgLyogQklNIGJ1ZmZlciBkYXRhIGhpZ2ggKi8KKworLyogc2V0IEJJTV9SQU1fQklTVF9TVEFSVCB0byBzdGFydCBidWlsdC1pbiBzZWxmIHRlc3QgZm9yIEJJTSByZWFkIGJ1ZmZlci4gCisgKiBiaXQgYXV0by1jbGVhcnMgd2hlbiBkb25lIHdpdGggc3RhdHVzIHJlYWQgZnJvbSBfU1VNTUFSWSBhbmQgX1BBU1MgYml0cy4KKyAqLworI2RlZmluZSAgUkVHX0JJTV9SQU1fQklTVCAgICAgICAgICAgICAgMHgxMDJDICAvKiBCSU0gUkFNIChyZWFkIGJ1ZmZlcikgQklTVCAKKwkJCQkJCSAgY29udHJvbC9zdGF0dXMgKi8KKyNkZWZpbmUgICAgQklNX1JBTV9CSVNUX1JEX1NUQVJUICAgICAgIDB4MDEgICAgLyogc3RhcnQgQklTVCBmb3IgQklNIHJlYWQgYnVmZmVyICovCisjZGVmaW5lICAgIEJJTV9SQU1fQklTVF9XUl9TVEFSVCAgICAgICAweDAyICAgIC8qIHN0YXJ0IEJJU1QgZm9yIEJJTSB3cml0ZSBidWZmZXIuCisJCQkJCQkgIENhc3Npbmkgb25seS4gcmVzZXJ2ZWQgaW4KKwkJCQkJCSAgQ2Fzc2luaSsuICovCisjZGVmaW5lICAgIEJJTV9SQU1fQklTVF9SRF9QQVNTICAgICAgICAweDA0ICAgIC8qIHN1bW1hcnkgQklTVCBwYXNzIHN0YXR1cyBmb3IgcmVhZAorCQkJCQkJICBidWZmZXIuICovCisjZGVmaW5lICAgIEJJTV9SQU1fQklTVF9XUl9QQVNTICAgICAgICAweDA4ICAgIC8qIHN1bW1hcnkgQklTVCBwYXNzIHN0YXR1cyBmb3Igd3JpdGUKKwkJCQkJCSAgYnVmZmVyLiBDYXNzaW5pIG9ubHkuIHJlc2VydmVkCisJCQkJCQkgIGluIENhc3NpbmkrLiAqLworI2RlZmluZSAgICBCSU1fUkFNX0JJU1RfUkRfTE9XX1BBU1MgICAgMHgxMCAgICAvKiByZWFkIGxvdyBiYW5rIHBhc3NlcyBCSVNUICovCisjZGVmaW5lICAgIEJJTV9SQU1fQklTVF9SRF9ISV9QQVNTICAgICAweDIwICAgIC8qIHJlYWQgaGlnaCBiYW5rIHBhc3NlcyBCSVNUICovCisjZGVmaW5lICAgIEJJTV9SQU1fQklTVF9XUl9MT1dfUEFTUyAgICAweDQwICAgIC8qIHdyaXRlIGxvdyBiYW5rIHBhc3NlcyBCSVNULgorCQkJCQkJICBDYXNzaW5pIG9ubHkuIHJlc2VydmVkIGluIAorCQkJCQkJICBDYXNzaW5pKy4gKi8KKyNkZWZpbmUgICAgQklNX1JBTV9CSVNUX1dSX0hJX1BBU1MgICAgIDB4ODAgICAgLyogd3JpdGUgaGlnaCBiYW5rIHBhc3NlcyBCSVNULgorCQkJCQkJICBDYXNzaW5pIG9ubHkuIHJlc2VydmVkIGluCisJCQkJCQkgIENhc3NpbmkrLiAqLworCisvKiBBU1VOOiBpJ20gbm90IHN1cmUgd2hhdCB0aGlzIGRvZXMgYXMgaXQncyBub3QgaW4gdGhlIHNwZWMuCisgKiBERUZBVUxUOiAweEZDCisgKi8KKyNkZWZpbmUgIFJFR19CSU1fRElBR19NVVggICAgICAgICAgICAgIDB4MTAzMCAgLyogQklNIGRpYWdub3N0aWMgcHJvYmUgbXV4CisJCQkJCQkgIHNlbGVjdCByZWdpc3RlciAqLworCisvKiBlbmFibGUgcHJvYmUgbW9uaXRvcmluZyBtb2RlIGFuZCBzZWxlY3QgZGF0YSBhcHBlYXJpbmcgb24gdGhlIFBfQSogYnVzLiBiaXQgCisgKiB2YWx1ZXMgZm9yIF9TRUxfSElfTUFTSyBhbmQgX1NFTF9MT1dfTUFTSzoKKyAqIDB4MDogaW50ZXJuYWwgcHJvYmVbNzowXSAocGNpIGFyYiBzdGF0ZSwgd3RjIGVtcHR5IHcsIHd0YyBmdWxsIHcsIHd0YyBlbXB0eSB3LAorICogICAgICAgICAgICAgICAgICAgICAgICAgICB3dGMgZW1wdHkgciwgcG9zdCBwY2kpCisgKiAweDE6IGludGVybmFsIHByb2JlWzE1OjhdIChwY2kgd2J1ZiBjb21wLCBwY2kgd3BrdCBjb21wLCBwY2kgcmJ1ZiBjb21wLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpIHJwa3QgY29tcCwgdHhkbWEgd3IgcmVxLCB0eGRtYSB3ciBhY2ssCisgKgkJCSAgICAgIHR4ZG1hIHdyIHJkeSwgdHhkbWEgd3IgeGZyIGRvbmUpCisgKiAweDI6IGludGVybmFsIHByb2JlWzIzOjE2XSAodHhkbWEgcmQgcmVxLCB0eGRtYSByZCBhY2ssIHR4ZG1hIHJkIHJkeSwgcnhkbWEgcmQsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmQgYXJiIHN0YXRlLCByZCBwY2kgc3RhdGUpCisgKiAweDM6IGludGVybmFsIHByb2JlWzMxOjI0XSAocnhkbWEgcmVxLCByeGRtYSBhY2ssIHJ4ZG1hIHJkeSwgd3JhcmIgc3RhdGUsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JwY2kgc3RhdGUpCisgKiAweDQ6IHBjaSBpbyBwcm9iZVs3OjBdICAgICAweDU6IHBjaSBpbyBwcm9iZVsxNTo4XQorICogMHg2OiBwY2kgaW8gcHJvYmVbMjM6MTZdICAgMHg3OiBwY2kgaW8gcHJvYmVbMzE6MjRdCisgKiAweDg6IHBjaSBpbyBwcm9iZVszOTozMl0gICAweDk6IHBjaSBpbyBwcm9iZVs0Nzo0MF0KKyAqIDB4YTogcGNpIGlvIHByb2JlWzU1OjQ4XSAgIDB4YjogcGNpIGlvIHByb2JlWzYzOjU2XQorICogdGhlIGZvbGxvd2luZyBhcmUgbm90IGF2YWlsYWJsZSBpbiBDYXNzaW5pOgorICogMHhjOiByeCBwcm9iZVs3OjBdICAgICAgICAgMHhkOiB0eCBwcm9iZVs3OjBdCisgKiAweGU6IGhwIHByb2JlWzc6MF0gCSAgICAgIDB4ZjogbWFjIHByb2JlWzc6MF0KKyAqLworI2RlZmluZSAgUkVHX1BMVVNfUFJPQkVfTVVYX1NFTEVDVCAgICAgMHgxMDM0IC8qIENhc3NpbmkrOiBQUk9CRSBNVVggU0VMRUNUICovCisjZGVmaW5lICAgIFBST0JFX01VWF9FTiAgICAgICAgICAgICAgICAweDgwMDAwMDAwIC8qIGFsbG93IHByb2JlIHNpZ25hbHMgdG8gYmUgCisJCQkJCQkgICAgIGRyaXZlbiBvbiBsb2NhbCBidXMgUF9BWzE1OjBdCisJCQkJCQkgICAgIGZvciBkZWJ1Z2dpbmcgKi8KKyNkZWZpbmUgICAgUFJPQkVfTVVYX1NVQl9NVVhfTUFTSyAgICAgIDB4MDAwMEZGMDAgLyogc2VsZWN0IHN1YiBtb2R1bGUgcHJvYmUgc2lnbmFsczoKKwkJCQkJCSAgICAgMHgwMyA9IG1hY1sxOjBdCisJCQkJCQkgICAgIDB4MEMgPSByeFsxOjBdCisJCQkJCQkgICAgIDB4MzAgPSB0eFsxOjBdCisJCQkJCQkgICAgIDB4QzAgPSBocFsxOjBdICovCisjZGVmaW5lICAgIFBST0JFX01VWF9TRUxfSElfTUFTSyAgICAgICAweDAwMDAwMEYwIC8qIHNlbGVjdCB3aGljaCBtb2R1bGUgdG8gYXBwZWFyCisJCQkJCQkgICAgIG9uIFBfQVsxNTo4XS4gc2VlIGFib3ZlIGZvciAKKwkJCQkJCSAgICAgdmFsdWVzLiAqLworI2RlZmluZSAgICBQUk9CRV9NVVhfU0VMX0xPV19NQVNLICAgICAgMHgwMDAwMDAwRiAvKiBzZWxlY3Qgd2hpY2ggbW9kdWxlIHRvIGFwcGVhcgorCQkJCQkJICAgICBvbiBQX0FbNzowXS4gc2VlIGFib3ZlIGZvciAKKwkJCQkJCSAgICAgdmFsdWVzLiAqLworCisvKiB2YWx1ZXMgbWVhbiB0aGUgc2FtZSB0aGluZyBhcyBSRUdfSU5UUl9NQVNLIGV4Y2VwIHRoYXQgaXQncyBmb3IgSU5UQi4gCisgREVGQVVMVDogMHgxRiAqLworI2RlZmluZSAgUkVHX1BMVVNfSU5UUl9NQVNLXzEgICAgICAgICAgMHgxMDM4IC8qIENhc3NpbmkrOiBpbnRlcnJ1cHQgbWFzaworCQkJCQkJIHJlZ2lzdGVyIDIgZm9yIElOVEIgKi8KKyNkZWZpbmUgIFJFR19QTFVTX0lOVFJOX01BU0soeCkgICAgICAgKFJFR19QTFVTX0lOVFJfTUFTS18xICsgKCh4KSAtIDEpKjE2KQorLyogYml0cyBjb3JyZXNwb25kIHRvIGJvdGggX01BU0sgYW5kIF9TVEFUVVMgcmVnaXN0ZXJzLiBfQUxUIGNvcnJlc3BvbmRzIHRvIAorICogYWxsIG9mIHRoZSBhbHRlcm5hdGUgKDItNCkgSU5UUiByZWdpc3RlcnMgd2hpbGUgXzEgY29ycmVzcG9uZHMgdG8gb25seSAKKyAqIF9NQVNLXzEgYW5kIF9TVEFUVVNfMSByZWdpc3RlcnMuIAorICogREVGQVVMVDogMHg3IGZvciBNQVNLIHJlZ2lzdGVycywgMHgwIGZvciBBTElBU19DTEVBUiByZWdpc3RlcnMKKyAqLworI2RlZmluZSAgICBJTlRSX1JYX0RPTkVfQUxUICAgICAgICAgICAgICAweDAxICAKKyNkZWZpbmUgICAgSU5UUl9SWF9DT01QX0ZVTExfQUxUICAgICAgICAgMHgwMgorI2RlZmluZSAgICBJTlRSX1JYX0NPTVBfQUZfQUxUICAgICAgICAgICAweDA0CisjZGVmaW5lICAgIElOVFJfUlhfQlVGX1VOQVZBSUxfMSAgICAgICAgIDB4MDgKKyNkZWZpbmUgICAgSU5UUl9SWF9CVUZfQUVfMSAgICAgICAgICAgICAgMHgxMCAvKiBhbG1vc3QgZW1wdHkgKi8KKyNkZWZpbmUgICAgSU5UUk5fTUFTS19SWF9FTiAgICAgICAgICAgICAgMHg4MCAgICAgCisjZGVmaW5lICAgIElOVFJOX01BU0tfQ0xFQVJfQUxMICAgICAgICAgIChJTlRSX1JYX0RPTkVfQUxUIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UUl9SWF9DT01QX0ZVTExfQUxUIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UUl9SWF9DT01QX0FGX0FMVCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVFJfUlhfQlVGX1VOQVZBSUxfMSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVFJfUlhfQlVGX0FFXzEpCisjZGVmaW5lICBSRUdfUExVU19JTlRSX1NUQVRVU18xICAgICAgICAweDEwM0MgLyogQ2Fzc2luaSs6IGludGVycnVwdCBzdGF0dXMKKwkJCQkJCSByZWdpc3RlciAyIGZvciBJTlRCLiBkZWZhdWx0OiAweDFGICovCisjZGVmaW5lICBSRUdfUExVU19JTlRSTl9TVEFUVVMoeCkgICAgICAgKFJFR19QTFVTX0lOVFJfU1RBVFVTXzEgKyAoKHgpIC0gMSkqMTYpCisjZGVmaW5lICAgIElOVFJfU1RBVFVTX0FMVF9JTlRYX0VOICAgICAweDgwICAgLyogZ2VuZXJhdGUgSU5UWCB3aGVuIG9uZSBvZiB0aGUKKwkJCQkJCSBmbGFncyBhcmUgc2V0LiBlbmFibGVzIGRlc2MgcmluZy4gKi8KKworI2RlZmluZSAgUkVHX1BMVVNfQUxJQVNfQ0xFQVJfMSAgICAgICAgMHgxMDQwIC8qIENhc3NpbmkrOiBhbGlhcyBjbGVhciBtYXNrCisJCQkJCQkgcmVnaXN0ZXIgMiBmb3IgSU5UQiAqLworI2RlZmluZSAgUkVHX1BMVVNfQUxJQVNOX0NMRUFSKHgpICAgICAgKFJFR19QTFVTX0FMSUFTX0NMRUFSXzEgKyAoKHgpIC0gMSkqMTYpCisKKyNkZWZpbmUgIFJFR19QTFVTX0lOVFJfU1RBVFVTX0FMSUFTXzEgIDB4MTA0NCAvKiBDYXNzaW5pKzogaW50ZXJydXB0IHN0YXR1cyAKKwkJCQkJCSByZWdpc3RlciBhbGlhcyAyIGZvciBJTlRCICovCisjZGVmaW5lICBSRUdfUExVU19JTlRSTl9TVEFUVVNfQUxJQVMoeCkgKFJFR19QTFVTX0lOVFJfU1RBVFVTX0FMSUFTXzEgKyAoKHgpIC0gMSkqMTYpCisKKyNkZWZpbmUgUkVHX1NBVFVSTl9QQ0ZHICAgICAgICAgICAgICAgMHgxMDZjIC8qIHBpbiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGZvcgorCQkJCQkJaW50ZWdyYXRlZCBtYWNwaHkgKi8KKworI2RlZmluZSAgIFNBVFVSTl9QQ0ZHX1RMQSAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIDEgPSBwaHkgYWN0bGVkICovCisjZGVmaW5lICAgU0FUVVJOX1BDRkdfRkxBICAgICAgICAgICAgIDB4MDAwMDAwMDIgLyogMSA9IHBoeSBsaW5rMTBsZWQgKi8KKyNkZWZpbmUgICBTQVRVUk5fUENGR19DTEEgICAgICAgICAgICAgMHgwMDAwMDAwNCAvKiAxID0gcGh5IGxpbmsxMDBsZWQgKi8KKyNkZWZpbmUgICBTQVRVUk5fUENGR19MTEEgICAgICAgICAgICAgMHgwMDAwMDAwOCAvKiAxID0gcGh5IGxpbmsxMDAwbGVkICovCisjZGVmaW5lICAgU0FUVVJOX1BDRkdfUkxBICAgICAgICAgICAgIDB4MDAwMDAwMTAgLyogMSA9IHBoeSBkdXBsZXhsZWQgKi8KKyNkZWZpbmUgICBTQVRVUk5fUENGR19QRFMgICAgICAgICAgICAgMHgwMDAwMDAyMCAvKiBwaHkgZGVidWcgbW9kZS4gCisJCQkJCQkgICAgMCA9IG5vcm1hbCAqLworI2RlZmluZSAgIFNBVFVSTl9QQ0ZHX01UUCAgICAgICAgICAgICAweDAwMDAwMDgwIC8qIHRlc3QgcG9pbnQgc2VsZWN0ICovIAorI2RlZmluZSAgIFNBVFVSTl9QQ0ZHX0dNTyAgICAgICAgICAgICAweDAwMDAwMTAwIC8qIEdNSUkgb2JzZXJ2ZS4gMSA9IAorCQkJCQkJICAgIEdNSUkgb24gU0VSREVTIHBpbnMgZm9yCisJCQkJCQkgICAgbW9uaXRvcmluZy4gKi8KKyNkZWZpbmUgICBTQVRVUk5fUENGR19GU0kgICAgICAgICAgICAgMHgwMDAwMDIwMCAvKiAxID0gZnJlZXplIHNlcmRlcy9nbWlpLiBhbGwKKwkJCQkJCSAgICBwaW5zIGNvbmZpZ2VkIGFzIG91dHB1dHMuCisJCQkJCQkgICAgZm9yIHBvd2VyIHNhdmluZyB3aGVuIHVzaW5nCisJCQkJCQkgICAgaW50ZXJuYWwgcGh5LiAqLworI2RlZmluZSAgIFNBVFVSTl9QQ0ZHX0xBRCAgICAgICAgICAgICAweDAwMDAwODAwIC8qIDAgPSBtYWMgY29yZSBsZWQgY3RybCAKKwkJCQkJCSAgICBwb2xhcml0eSBmcm9tIHN0cmFwcGluZyAKKwkJCQkJCSAgICB2YWx1ZS4KKwkJCQkJCSAgICAxID0gbWFjIGNvcmUgbGVkIGN0cmwKKwkJCQkJCSAgICBwb2xhcml0eSBhY3RpdmUgbG93LiAqLworCisKKy8qKiB0cmFuc21pdCBkbWEgcmVnaXN0ZXJzICoqLworI2RlZmluZSBNQVhfVFhfUklOR1NfU0hJRlQgICAgICAgICAgICAyCisjZGVmaW5lIE1BWF9UWF9SSU5HUyAgICAgICAgICAgICAgICAgICgxIDw8IE1BWF9UWF9SSU5HU19TSElGVCkKKyNkZWZpbmUgTUFYX1RYX1JJTkdTX01BU0sgICAgICAgICAgICAgKE1BWF9UWF9SSU5HUyAtIDEpCisKKy8qIFRYIGNvbmZpZ3VyYXRpb24uIAorICogZGVzY3IgcmluZyBzaXplcyBzaXplID0gMzIgKiAoMSA8PCBuKSwgbiA8IDkuIGUuZy4sIDB4OCA9IDhrLiBkZWZhdWx0OiAweDggCisgKiBERUZBVUxUOiAweDNGMDAwMDAxCisgKi8KKyNkZWZpbmUgIFJFR19UWF9DRkcgICAgICAgICAgICAgICAgICAgIDB4MjAwNCAgLyogVFggY29uZmlnICovCisjZGVmaW5lICAgIFRYX0NGR19ETUFfRU4gICAgICAgICAgICAgICAweDAwMDAwMDAxICAvKiBlbmFibGUgVFggRE1BLiBpZiBjbGVhcmVkLCBETUEKKwkJCQkJCSAgICAgIHdpbGwgc3RvcCBhZnRlciB4ZmVyIG9mIGN1cnJlbnQKKwkJCQkJCSAgICAgIGJ1ZmZlciBoYXMgYmVlbiBjb21wbGV0ZWQuICovCisjZGVmaW5lICAgIFRYX0NGR19GSUZPX1BJT19TRUwgICAgICAgICAweDAwMDAwMDAyICAvKiBUWCBETUEgRklGTyBjYW4gYmUgCisJCQkJCQkgICAgICBhY2Nlc3NlZCB3LyBGSUZPIGFkZHIgCisJCQkJCQkgICAgICBhbmQgZGF0YSByZWdpc3RlcnMuIAorCQkJCQkJICAgICAgVFggRE1BIHNob3VsZCBiZSAKKwkJCQkJCSAgICAgIGRpc2FibGVkLiAqLworI2RlZmluZSAgICBUWF9DRkdfREVTQ19SSU5HMF9NQVNLICAgICAgMHgwMDAwMDAzQyAgLyogIyBkZXNjIGVudHJpZXMgaW4KKwkJCQkJCSAgICAgIHJpbmcgMS4gKi8KKyNkZWZpbmUgICAgVFhfQ0ZHX0RFU0NfUklORzBfU0hJRlQgICAgIDIKKyNkZWZpbmUgICAgVFhfQ0ZHX0RFU0NfUklOR05fTUFTSyhhKSAgIChUWF9DRkdfREVTQ19SSU5HMF9NQVNLIDw8IChhKSo0KQorI2RlZmluZSAgICBUWF9DRkdfREVTQ19SSU5HTl9TSElGVChhKSAgKFRYX0NGR19ERVNDX1JJTkcwX1NISUZUICsgKGEpKjQpCisjZGVmaW5lICAgIFRYX0NGR19QQUNFRF9NT0RFICAgICAgICAgICAweDAwMTAwMDAwICAvKiBUWF9BTEwgb25seSBzZXQgYWZ0ZXIgCisJCQkJCQkgICAgICBUWCBGSUZPIGJlY29tZXMgZW1wdHkuIAorCQkJCQkJICAgICAgaWYgMCwgVFhfQUxMIHNldAorCQkJCQkJICAgICAgaWYgZGVzY3IgcXVldWUgZW1wdHkuICovCisjZGVmaW5lICAgIFRYX0NGR19ETUFfUkRQSVBFX0RJUyAgICAgICAweDAxMDAwMDAwICAvKiBhbHdheXMgc2V0IHRvIDEgKi8KKyNkZWZpbmUgICAgVFhfQ0ZHX0NPTVBXQl9RMSAgICAgICAgICAgIDB4MDIwMDAwMDAgIC8qIGNvbXBsZXRpb24gd3JpdGViYWNrIGhhcHBlbnMgYXQKKwkJCQkJCSAgICAgIHRoZSBlbmQgb2YgZXZlcnkgcGFja2V0IGtpY2tlZAorCQkJCQkJICAgICAgdGhyb3VnaCBRMS4gKi8KKyNkZWZpbmUgICAgVFhfQ0ZHX0NPTVBXQl9RMiAgICAgICAgICAgIDB4MDQwMDAwMDAgIC8qIGNvbXBsZXRpb24gd3JpdGViYWNrIGhhcHBlbnMgYXQKKwkJCQkJCSAgICAgIHRoZSBlbmQgb2YgZXZlcnkgcGFja2V0IGtpY2tlZAorCQkJCQkJICAgICAgdGhyb3VnaCBRMi4gKi8KKyNkZWZpbmUgICAgVFhfQ0ZHX0NPTVBXQl9RMyAgICAgICAgICAgIDB4MDgwMDAwMDAgIC8qIGNvbXBsZXRpb24gd3JpdGViYWNrIGhhcHBlbnMgYXQKKwkJCQkJCSAgICAgIHRoZSBlbmQgb2YgZXZlcnkgcGFja2V0IGtpY2tlZAorCQkJCQkJICAgICAgdGhyb3VnaCBRMyAqLworI2RlZmluZSAgICBUWF9DRkdfQ09NUFdCX1E0ICAgICAgICAgICAgMHgxMDAwMDAwMCAgLyogY29tcGxldGlvbiB3cml0ZWJhY2sgaGFwcGVucyBhdAorCQkJCQkJICAgICAgdGhlIGVuZCBvZiBldmVyeSBwYWNrZXQga2lja2VkCisJCQkJCQkgICAgICB0aHJvdWdoIFE0ICovCisjZGVmaW5lICAgIFRYX0NGR19JTlRSX0NPTVBXQl9ESVMgICAgICAweDIwMDAwMDAwICAvKiBkaXNhYmxlIHByZS1pbnRlcnJ1cHQgY29tcGxldGlvbgorCQkJCQkJICAgICAgd3JpdGViYWNrICovCisjZGVmaW5lICAgIFRYX0NGR19DVFhfU0VMX01BU0sgICAgICAgICAweEMwMDAwMDAwICAvKiBzZWxlY3RzIHR4IHRlc3QgcG9ydCAKKwkJCQkJCSAgICAgIGNvbm5lY3Rpb24KKwkJCQkJCSAgICAgIDBiMDA6IHR4IG1hYyByZXEsIAorCQkJCQkJICAgICAgICAgICAgdHggbWFjIHJldHJ5IHJlcSwKKwkJCQkJCQkgICAgdHggYWNrIGFuZCB0eCB0YWcuCisJCQkJCQkgICAgICAwYjAxOiB0eGRtYSByZCByZXEsIAorCQkJCQkJICAgICAgICAgICAgdHhkbWEgcmQgYWNrLAorCQkJCQkJCSAgICB0eGRtYSByZCByZHksCisJCQkJCQkJICAgIHR4ZG1hIHJkIHR5cGUwCisJCQkJCQkgICAgICAwYjExOiB0eGRtYSB3ciByZXEsIAorCQkJCQkJICAgICAgICAgICAgdHhkbWEgd3IgYWNrLAorCQkJCQkJCSAgICB0eGRtYSB3ciByZHksCisJCQkJCQkJICAgIHR4ZG1hIHdyIHhmciBkb25lLiAqLworI2RlZmluZSAgICBUWF9DRkdfQ1RYX1NFTF9TSElGVCAgICAgICAgMzAKKwkJCQkJCSAgICAgIAorLyogMTEtYml0IGNvdW50ZXJzIHRoYXQgcG9pbnQgdG8gbmV4dCBsb2NhdGlvbiBpbiBGSUZPIHRvIGJlIGxvYWRlZC9yZXRyaWV2ZWQuCisgKiB1c2VkIGZvciBkaWFnbm9zdGljcyBvbmx5LgorICovCisjZGVmaW5lICBSRUdfVFhfRklGT19XUklURV9QVFIgICAgICAgICAweDIwMTQgIC8qIFRYIEZJRk8gd3JpdGUgcG9pbnRlciAqLworI2RlZmluZSAgUkVHX1RYX0ZJRk9fU0hBRE9XX1dSSVRFX1BUUiAgMHgyMDE4ICAvKiBUWCBGSUZPIHNoYWRvdyB3cml0ZSAKKwkJCQkJCSAgcG9pbnRlci4gdGVtcCBob2xkIHJlZy4KKwkJCQkJICAgICAgICAgIGRpYWdub3N0aWNzIG9ubHkuICovCisjZGVmaW5lICBSRUdfVFhfRklGT19SRUFEX1BUUiAgICAgICAgICAweDIwMUMgIC8qIFRYIEZJRk8gcmVhZCBwb2ludGVyICovCisjZGVmaW5lICBSRUdfVFhfRklGT19TSEFET1dfUkVBRF9QVFIgICAweDIwMjAgIC8qIFRYIEZJRk8gc2hhZG93IHJlYWQKKwkJCQkJCSAgcG9pbnRlciAqLworCisvKiAocm8pIDExLWJpdCB1cC9kb3duIGNvdW50ZXIgdy8gIyBvZiBmcmFtZXMgY3VycmVudGx5IGluIFRYIEZJRk8gKi8KKyNkZWZpbmUgIFJFR19UWF9GSUZPX1BLVF9DTlQgICAgICAgICAgIDB4MjAyNCAgLyogVFggRklGTyBwYWNrZXQgY291bnRlciAqLworCisvKiBjdXJyZW50IHN0YXRlIG9mIGFsbCBzdGF0ZSBtYWNoaW5lcyBpbiBUWCAqLworI2RlZmluZSAgUkVHX1RYX1NNXzEgICAgICAgICAgICAgICAgICAgMHgyMDI4ICAvKiBUWCBzdGF0ZSBtYWNoaW5lIHJlZyAjMSAqLworI2RlZmluZSAgICBUWF9TTV8xX0NIQUlOX01BU0sgICAgICAgICAgMHgwMDAwMDNGRiAgIC8qIGNoYWluaW5nIHN0YXRlIG1hY2hpbmUgKi8KKyNkZWZpbmUgICAgVFhfU01fMV9DU1VNX01BU0sgICAgICAgICAgIDB4MDAwMDBDMDAgICAvKiBjaGVja3N1bSBzdGF0ZSBtYWNoaW5lICovCisjZGVmaW5lICAgIFRYX1NNXzFfRklGT19MT0FEX01BU0sgICAgICAweDAwMDNGMDAwICAgLyogRklGTyBsb2FkIHN0YXRlIG1hY2hpbmUuCisJCQkJCQkgICAgICAgPSAweDAxIHdoZW4gVFggZGlzYWJsZWQuICovCisjZGVmaW5lICAgIFRYX1NNXzFfRklGT19VTkxPQURfTUFTSyAgICAweDAwM0MwMDAwICAgLyogRklGTyB1bmxvYWQgc3RhdGUgbWFjaGluZSAqLworI2RlZmluZSAgICBUWF9TTV8xX0NBQ0hFX01BU0sgICAgICAgICAgMHgwM0MwMDAwMCAgIC8qIGRlc2MuIHByZWZldGNoIGNhY2hlIGNvbnRyb2xsZXIKKwkJCQkJCSAgICAgICBzdGF0ZSBtYWNoaW5lICovCisjZGVmaW5lICAgIFRYX1NNXzFfQ0JRX0FSQl9NQVNLICAgICAgICAweEY4MDAwMDAwICAgLyogQ0JRIGFyYml0ZXIgc3RhdGUgbWFjaGluZSAqLworCQkJCQkJICAgICAgICAgCisjZGVmaW5lICBSRUdfVFhfU01fMiAgICAgICAgICAgICAgICAgICAweDIwMkMgIC8qIFRYIHN0YXRlIG1hY2hpbmUgcmVnICMyICovCisjZGVmaW5lICAgIFRYX1NNXzJfQ09NUF9XQl9NQVNLICAgICAgICAweDA3ICAgIC8qIGNvbXBsZXRpb24gd3JpdGViYWNrIHNtICovCisjZGVmaW5lCSAgIFRYX1NNXzJfU1VCX0xPQURfTUFTSyAgICAgICAweDM4ICAgIC8qIHN1YiBsb2FkIHN0YXRlIG1hY2hpbmUgKi8KKyNkZWZpbmUJICAgVFhfU01fMl9LSUNLX01BU0sgICAgICAgICAgIDB4QzAgICAgLyoga2ljayBzdGF0ZSBtYWNoaW5lICovCisKKy8qIDY0LWJpdCBwb2ludGVyIHRvIHRoZSB0cmFuc21pdCBkYXRhIGJ1ZmZlci4gb25seSB0aGUgNTAgTFNCIGFyZSBpbmNyZW1lbnRlZAorICogd2hpbGUgdGhlIHVwcGVyIDIzIGJpdHMgYXJlIHRha2VuIGZyb20gdGhlIFRYIGRlc2NyaXB0b3IKKyAqLworI2RlZmluZSAgUkVHX1RYX0RBVEFfUFRSX0xPVyAgICAgICAgICAgMHgyMDMwICAvKiBUWCBkYXRhIHBvaW50ZXIgbG93ICovCisjZGVmaW5lICBSRUdfVFhfREFUQV9QVFJfSEkgICAgICAgICAgICAweDIwMzQgIC8qIFRYIGRhdGEgcG9pbnRlciBoaWdoICovCisKKy8qIDEzIGJpdCByZWdpc3RlcnMgd3JpdHRlbiBieSBkcml2ZXIgdy8gZGVzY3JpcHRvciB2YWx1ZSB0aGF0IGZvbGxvd3MgCisgKiBsYXN0IHZhbGlkIHhtaXQgZGVzY3JpcHRvci4ga2ljayAjIGFuZCBjb21wbGV0ZSAjIHZhbHVlcyBhcmUgdXNlZCBieQorICogdGhlIHhtaXQgZG1hIGVuZ2luZSB0byBjb250cm9sIHR4IGRlc2NyIGZldGNoaW5nLiBpZiA+IDEgdmFsaWQgCisgKiB0eCBkZXNjciBpcyBhdmFpbGFibGUgd2l0aGluIHRoZSBjYWNoZSBsaW5lIGJlaW5nIHJlYWQsIGNhc3Npbmkgd2lsbAorICogaW50ZXJuYWxseSBjYWNoZSB1cCB0byA0IG9mIHRoZW0uIDAgb24gcmVzZXQuIF9LSUNLID0gcncsIF9DT01QID0gcm8uCisgKi8KKyNkZWZpbmUgIFJFR19UWF9LSUNLMCAgICAgICAgICAgICAgICAgIDB4MjAzOCAgLyogVFgga2ljayByZWcgIzEgKi8KKyNkZWZpbmUgIFJFR19UWF9LSUNLTih4KSAgICAgICAgICAgICAgIChSRUdfVFhfS0lDSzAgKyAoeCkqNCkKKyNkZWZpbmUgIFJFR19UWF9DT01QMCAgICAgICAgICAgICAgICAgIDB4MjA0OCAgLyogVFggY29tcGxldGlvbiByZWcgIzEgKi8KKyNkZWZpbmUgIFJFR19UWF9DT01QTih4KSAgICAgICAgICAgICAgIChSRUdfVFhfQ09NUDAgKyAoeCkqNCkKKworLyogdmFsdWVzIG9mIFRYX0NPTVBMRVRFXzEtNCBhcmUgd3JpdHRlbi4gZWFjaCBjb21wbGV0aW9uIHJlZ2lzdGVyIAorICogaXMgMmJ5dGVzIGluIHNpemUgYW5kIGNvbnRpZ3VvdXMuIDhCIGFsbG9jYXRpb24gdy8gOEIgYWxpZ25tZW50LiAKKyAqIE5PVEU6IGNvbXBsZXRpb24gcmVnIHZhbHVlcyBhcmUgb25seSB3cml0dGVuIGJhY2sgcHJpb3IgdG8gVFhfSU5UTUUgYW5kCisgKiBUWF9BTEwgaW50ZXJydXB0cy4gYXQgYWxsIG90aGVyIHRpbWVzLCB0aGUgbW9zdCB1cC10by1kYXRlIGluZGV4IHZhbHVlcyAKKyAqIHNob3VsZCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBSRUdfVFhfQ09NUExFVEVfIyByZWdpc3RlcnMuIAorICogaGVyZSdzIHRoZSBsYXlvdXQ6IAorICogb2Zmc2V0IGZyb20gYmFzZSBhZGRyICAgICAgY29tcGxldGlvbiAjIGJ5dGUKKyAqICAgICAgICAgICAwICAgICAgICAgICAgICAgIFRYX0NPTVBMRVRFXzFfTVNCCisgKgkgICAgIDEgICAgICAgICAgICAgICAgVFhfQ09NUExFVEVfMV9MU0IKKyAqICAgICAgICAgICAyICAgICAgICAgICAgICAgIFRYX0NPTVBMRVRFXzJfTVNCCisgKgkgICAgIDMgICAgICAgICAgICAgICAgVFhfQ09NUExFVEVfMl9MU0IKKyAqICAgICAgICAgICA0ICAgICAgICAgICAgICAgIFRYX0NPTVBMRVRFXzNfTVNCCisgKgkgICAgIDUgICAgICAgICAgICAgICAgVFhfQ09NUExFVEVfM19MU0IKKyAqICAgICAgICAgICA2ICAgICAgICAgICAgICAgIFRYX0NPTVBMRVRFXzRfTVNCCisgKgkgICAgIDcgICAgICAgICAgICAgICAgVFhfQ09NUExFVEVfNF9MU0IKKyAqLworI2RlZmluZSAgVFhfQ09NUFdCX1NJWkUgICAgICAgICAgICAgOAorI2RlZmluZSAgUkVHX1RYX0NPTVBXQl9EQl9MT1cgICAgICAgMHgyMDU4ICAvKiBUWCBjb21wbGV0aW9uIHdyaXRlIGJhY2sKKwkJCQkJICAgICAgIGJhc2UgbG93ICovCisjZGVmaW5lICBSRUdfVFhfQ09NUFdCX0RCX0hJICAgICAgICAweDIwNUMgIC8qIFRYIGNvbXBsZXRpb24gd3JpdGUgYmFjaworCQkJCQkgICAgICAgYmFzZSBoaWdoICovCisjZGVmaW5lICAgIFRYX0NPTVBXQl9NU0JfTUFTSyAgICAgICAweDAwMDAwMDAwMDAwMDAwRkZVTEwKKyNkZWZpbmUgICAgVFhfQ09NUFdCX01TQl9TSElGVCAgICAgIDAKKyNkZWZpbmUgICAgVFhfQ09NUFdCX0xTQl9NQVNLICAgICAgIDB4MDAwMDAwMDAwMDAwRkYwMFVMTAorI2RlZmluZSAgICBUWF9DT01QV0JfTFNCX1NISUZUICAgICAgOAorI2RlZmluZSAgICBUWF9DT01QV0JfTkVYVCh4KSAgICAgICAgKCh4KSA+PiAxNikKKwkJCQkJCSAgICAgIAorLyogNTMgTVNCIHVzZWQgYXMgYmFzZSBhZGRyZXNzLiAxMSBMU0IgYXNzdW1lZCB0byBiZSAwLiBUWCBkZXNjIHBvaW50ZXIgbXVzdAorICogYmUgMktCLWFsaWduZWQuICovCisjZGVmaW5lICBSRUdfVFhfREIwX0xPVyAgICAgICAgIDB4MjA2MCAgLyogVFggZGVzY3JpcHRvciBiYXNlIGxvdyAjMSAqLworI2RlZmluZSAgUkVHX1RYX0RCMF9ISSAgICAgICAgICAweDIwNjQgIC8qIFRYIGRlc2NyaXB0b3IgYmFzZSBoaSAjMSAqLworI2RlZmluZSAgUkVHX1RYX0RCTl9MT1coeCkgICAgICAoUkVHX1RYX0RCMF9MT1cgKyAoeCkqOCkKKyNkZWZpbmUgIFJFR19UWF9EQk5fSEkoeCkgICAgICAgKFJFR19UWF9EQjBfSEkgKyAoeCkqOCkKKworLyogMTYtYml0IHJlZ2lzdGVycyBob2xkIHdlaWdodHMgZm9yIHRoZSB3ZWlnaHRlZCByb3VuZC1yb2JpbiBvZiB0aGUKKyAqIGZvdXIgQ0JRIFRYIGRlc2NyIHJpbmdzLiB3ZWlnaHRzIGNvcnJlc3BvbmQgdG8gIyBieXRlcyB4ZmVycmVkIGZyb20KKyAqIGhvc3QgdG8gVFhGSUZPIGluIGEgcm91bmQgb2YgV1JSIGFyYml0cmF0aW9uLiBjYW4gYmUgc2V0CisgKiBkeW5hbWljYWxseSB3aXRoIG5ldyB3ZWlnaHRzIHNldCB1cG9uIGNvbXBsZXRpb24gb2YgdGhlIGN1cnJlbnQKKyAqIHBhY2tldCB0cmFuc2ZlciBmcm9tIGhvc3QgbWVtb3J5IHRvIFRYRklGTy4gYSBkdW1teSB3cml0ZSB0byBhbnkgb2YKKyAqIHRoZXNlIHJlZ2lzdGVycyBjYXVzZXMgYSBxdWV1ZTEgcHJlLWVtcHRpb24gd2l0aCBhbGwgaGlzdG9yaWNhbCBidworICogZGVmaWNpdCBkYXRhIHJlc2V0IHRvIDAgKHVzZWZ1bCB3aGVuIGNvbmdlc3Rpb24gcmVxdWlyZXMgYQorICogcHJlLWVtcHRpb24vcmUtYWxsb2NhdGlvbiBvZiBuZXR3b3JrIGJhbmR3aWR0aAorICovCisjZGVmaW5lICBSRUdfVFhfTUFYQlVSU1RfMCAgICAgICAgICAgICAweDIwODAgIC8qIFRYIE1heEJ1cnN0ICMxICovCisjZGVmaW5lICBSRUdfVFhfTUFYQlVSU1RfMSAgICAgICAgICAgICAweDIwODQgIC8qIFRYIE1heEJ1cnN0ICMyICovCisjZGVmaW5lICBSRUdfVFhfTUFYQlVSU1RfMiAgICAgICAgICAgICAweDIwODggIC8qIFRYIE1heEJ1cnN0ICMzICovCisjZGVmaW5lICBSRUdfVFhfTUFYQlVSU1RfMyAgICAgICAgICAgICAweDIwOEMgIC8qIFRYIE1heEJ1cnN0ICM0ICovCisKKy8qIGRpYWdub3N0aWNzIGFjY2VzcyB0byBhbnkgVFggRklGTyBsb2NhdGlvbi4gZXZlcnkgYWNjZXNzIGlzIDY1CisgKiBiaXRzLiAgX0RBVEFfTE9XID0gMzIgTFNCLCBfREFUQV9ISV9UMS9UMCA9IDMyIE1TQi4gX1RBRyA9IHRhZyBiaXQuCisgKiB3cml0aW5nIF9EQVRBX0hJX1QwIHNldHMgdGFnIGJpdCBsb3csIHdyaXRpbmcgX0RBVEFfSElfVDEgc2V0cyB0YWcKKyAqIGJpdCBoaWdoLiAgVFhfRklGT19QSU9fU0VMIG11c3QgYmUgc2V0IGZvciBUWCBGSUZPIFBJTyBhY2Nlc3MuIGlmCisgKiBUWCBGSUZPIGRhdGEgaW50ZWdyaXR5IGlzIGRlc2lyZWQsIFRYIERNQSBzaG91bGQgYmUKKyAqIGRpc2FibGVkLiBfREFUQV9ISV9UeCBzaG91bGQgYmUgdGhlIGxhc3QgYWNjZXNzIG9mIHRoZSBzZXF1ZW5jZS4KKyAqLworI2RlZmluZSAgUkVHX1RYX0ZJRk9fQUREUiAgICAgICAgICAgICAgMHgyMTA0ICAvKiBUWCBGSUZPIGFkZHJlc3MgKi8KKyNkZWZpbmUgIFJFR19UWF9GSUZPX1RBRyAgICAgICAgICAgICAgIDB4MjEwOCAgLyogVFggRklGTyB0YWcgKi8KKyNkZWZpbmUgIFJFR19UWF9GSUZPX0RBVEFfTE9XICAgICAgICAgIDB4MjEwQyAgLyogVFggRklGTyBkYXRhIGxvdyAqLworI2RlZmluZSAgUkVHX1RYX0ZJRk9fREFUQV9ISV9UMSAgICAgICAgMHgyMTEwICAvKiBUWCBGSUZPIGRhdGEgaGlnaCB0MSAqLworI2RlZmluZSAgUkVHX1RYX0ZJRk9fREFUQV9ISV9UMCAgICAgICAgMHgyMTE0ICAvKiBUWCBGSUZPIGRhdGEgaGlnaCB0MCAqLworI2RlZmluZSAgUkVHX1RYX0ZJRk9fU0laRSAgICAgICAgICAgICAgMHgyMTE4ICAvKiAocm8pIFRYIEZJRk8gc2l6ZSA9IDB4MDkwID0gOUtCICovCisKKy8qIDktYml0IHJlZ2lzdGVyIGNvbnRyb2xzIEJJU1Qgb2YgVFggRklGTy4gYml0IHNldCBpbmRpY2F0ZXMgdGhhdCB0aGUgQklTVCAKKyAqIHBhc3NlZCBmb3IgdGhlIHNwZWNpZmllZCBtZW1vcnkKKyAqLworI2RlZmluZSAgUkVHX1RYX1JBTUJJU1QgICAgICAgICAgICAgICAgMHgyMTFDIC8qIFRYIFJBTUJJU1QgY29udHJvbC9zdGF0dXMgKi8KKyNkZWZpbmUgICAgVFhfUkFNQklTVF9TVEFURSAgICAgICAgICAgIDB4MDFDMCAvKiBwcm9ncmVzcyBzdGF0ZSBvZiBSQU1CSVNUIAorCQkJCQkJIGNvbnRyb2xsZXIgc3RhdGUgbWFjaGluZSAqLworI2RlZmluZSAgICBUWF9SQU1CSVNUX1JBTTMzQV9QQVNTICAgICAgMHgwMDIwIC8qIFJBTTMzQSBwYXNzZWQgKi8KKyNkZWZpbmUgICAgVFhfUkFNQklTVF9SQU0zMkFfUEFTUyAgICAgIDB4MDAxMCAvKiBSQU0zMkEgcGFzc2VkICovCisjZGVmaW5lICAgIFRYX1JBTUJJU1RfUkFNMzNCX1BBU1MgICAgICAweDAwMDggLyogUkFNMzNCIHBhc3NlZCAqLworI2RlZmluZSAgICBUWF9SQU1CSVNUX1JBTTMyQl9QQVNTICAgICAgMHgwMDA0IC8qIFJBTTMyQiBwYXNzZWQgKi8KKyNkZWZpbmUgICAgVFhfUkFNQklTVF9TVU1NQVJZICAgICAgICAgIDB4MDAwMiAvKiBhbGwgUkFNIHBhc3NlZCAqLworI2RlZmluZSAgICBUWF9SQU1CSVNUX1NUQVJUICAgICAgICAgICAgMHgwMDAxIC8qIHdyaXRlIDEgdG8gc3RhcnQgQklTVC4gc2VsZgorCQkJCQkJIGNsZWFycyBvbiBjb21wbGV0aW9uLiAqLworCisvKiogcmVjZWl2ZSBkbWEgcmVnaXN0ZXJzICoqLworI2RlZmluZSBNQVhfUlhfREVTQ19SSU5HUyAgICAgICAgICAgICAgMgorI2RlZmluZSBNQVhfUlhfQ09NUF9SSU5HUyAgICAgICAgICAgICAgNAorCisvKiByZWNlaXZlIERNQSBjaGFubmVsIGNvbmZpZ3VyYXRpb24uIGRlZmF1bHQ6IDB4ODA5MTAgCisgKiBmcmVlIHJpbmcgc2l6ZSAgICAgICA9ICgxIDw8IG4pKjMyICAtPiBbMzIgLSA4a10KKyAqIGNvbXBsZXRpb24gcmluZyBzaXplID0gKDEgPDwgbikqMTI4IC0+IFsxMjggLSAzMmtdLCBuIDwgOSAKKyAqIERFRkFVTFQ6IDB4ODA5MTAKKyAqLworI2RlZmluZSAgUkVHX1JYX0NGRyAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogUlggY29uZmlnICovCisjZGVmaW5lICAgIFJYX0NGR19ETUFfRU4gICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBlbmFibGUgUlggRE1BLiAwIHN0b3BzCisJCQkJCQkJIGNoYW5uZWwgYXMgc29vbiBhcyBjdXJyZW50CisJCQkJCQkJIGZyYW1lIHhmZXIgaGFzIGNvbXBsZXRlZC4KKwkJCQkJCQkgZHJpdmVyIHNob3VsZCBkaXNhYmxlIE1BQyAKKwkJCQkJCQkgZm9yIDIwMG1zIGJlZm9yZSBkaXNhYmxpbmcgCisJCQkJCQkJIFJYICovCisjZGVmaW5lICAgIFJYX0NGR19ERVNDX1JJTkdfTUFTSyAgICAgICAgMHgwMDAwMDAxRSAvKiAjIGRlc2MgZW50cmllcyBpbiBSWCAKKwkJCQkJCQkgZnJlZSBkZXNjIHJpbmcuIAorCQkJCQkJCSBkZWY6IDB4OCA9IDhrICovCisjZGVmaW5lICAgIFJYX0NGR19ERVNDX1JJTkdfU0hJRlQgICAgICAgMQorI2RlZmluZSAgICBSWF9DRkdfQ09NUF9SSU5HX01BU0sgICAgICAgIDB4MDAwMDAxRTAgLyogIyBkZXNjIGVudHJpZXMgaW4gUlggY29tcGxldGUKKwkJCQkJCQkgcmluZy4gZGVmOiAweDggPSAzMmsgKi8KKyNkZWZpbmUgICAgUlhfQ0ZHX0NPTVBfUklOR19TSElGVCAgICAgICA1CisjZGVmaW5lICAgIFJYX0NGR19CQVRDSF9ESVMgICAgICAgICAgICAgMHgwMDAwMDIwMCAvKiBkaXNhYmxlIHJlY2VpdmUgZGVzYyAKKwkJCQkJCSAgICAgIGJhdGNoaW5nLiBkZWY6IDB4MCA9CisJCQkJCQkgICAgICBlbmFibGVkICovCisjZGVmaW5lICAgIFJYX0NGR19TV0lWRUxfTUFTSyAgICAgICAgICAgMHgwMDAwMUMwMCAvKiBieXRlIG9mZnNldCBvZiB0aGUgMXN0IAorCQkJCQkJICAgICAgZGF0YSBieXRlIG9mIHRoZSBwYWNrZXQgCisJCQkJCQkgICAgICB3L2luIDggYnl0ZSBib3VuZGFyZXMuCisJCQkJCQkgICAgICB0aGlzIHN3aXZlbHMgdGhlIGRhdGEgCisJCQkJCQkgICAgICBETUEnZWQgdG8gaGVhZGVyIAorCQkJCQkJICAgICAgYnVmZmVycywganVtYm8gYnVmZmVycworCQkJCQkJICAgICAgd2hlbiBoZWFkZXIgc3BsaXQgaXMgbm90CisJCQkJCQkgICAgICByZXF1ZXN0ZWQgYW5kIE1UVSBzaXplZAorCQkJCQkJICAgICAgYnVmZmVycy4gZGVmOiAweDIgKi8KKyNkZWZpbmUgICAgUlhfQ0ZHX1NXSVZFTF9TSElGVCAgICAgICAgICAxMAorCisvKiBjYXNzaW5pKyBvbmx5ICovCisjZGVmaW5lICAgIFJYX0NGR19ERVNDX1JJTkcxX01BU0sgICAgICAgMHgwMDBGMDAwMCAvKiAjIG9mIGRlc2MgZW50cmllcyBpbgorCQkJCQkJCSBSWCBmcmVlIGRlc2MgcmluZyAyLiAKKwkJCQkJCQkgZGVmOiAweDggPSA4ayAqLworI2RlZmluZSAgICBSWF9DRkdfREVTQ19SSU5HMV9TSElGVCAgICAgIDE2CisKKworLyogdGhlIHBhZ2Ugc2l6ZSByZWdpc3RlciBhbGxvd3MgY2Fzc2luaSBjaGlwcyB0byBkbyB0aGUgZm9sbG93aW5nIHdpdGggCisgKiByZWNlaXZlZCBkYXRhOgorICogWy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXSBwYWdlCisgKiBbb2ZmXVtidWYxXVtwYWRdW29mZl1bYnVmMl1bcGFkXVtvZmZdW2J1ZjNdW3BhZF1bb2ZmXVtidWY0XVtwYWRdCisgKiB8LS0tLS0tLS0tLS0tLS18ID0gUEFHRV9TSVpFX0JVRkZFUl9TVFJJREUKKyAqIHBhZ2UgPSBQQUdFX1NJWkUgCisgKiBvZmZzZXQgPSBQQUdFX1NJWkVfTVRVX09GRgorICogZm9yIHRoZSBhYm92ZSBleGFtcGxlLCBNVFVfQlVGRkVSX0NPVU5UID0gNC4KKyAqIE5PVEU6IGFzIGlzIGFwcGFyZW50LCB5b3UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZm9sbG93aW5nIGhvbGRzOgorICogTVRVX0JVRkZFUl9DT1VOVCA8PSBQQUdFX1NJWkUvUEFHRV9TSVpFX0JVRkZFUl9TVFJJREUKKyAqIERFRkFVTFQ6IDB4NDgwMDIwMDIgKDhrIHBhZ2VzKQorICovCisjZGVmaW5lICBSRUdfUlhfUEFHRV9TSVpFICAgICAgICAgICAgICAgMHg0MDA0ICAvKiBSWCBwYWdlIHNpemUgKi8KKyNkZWZpbmUgICAgUlhfUEFHRV9TSVpFX01BU0sgICAgICAgICAgICAweDAwMDAwMDAzIC8qIHNpemUgb2YgcGFnZXMgcG9pbnRlZCB0bworCQkJCQkJICAgICAgYnkgcmVjZWl2ZSBkZXNjcmlwdG9ycy4KKwkJCQkJCSAgICAgIGlmIGp1bWJvIGJ1ZmZlcnMgYXJlIAorCQkJCQkJICAgICAgc3VwcG9ydGVkIHRoZSBwYWdlIHNpemUgCisJCQkJCQkgICAgICBzaG91bGQgbm90IGJlIDwgOGsuCisJCQkJCQkgICAgICAwYjAwID0gMmssIDBiMDEgPSA0aworCQkJCQkJICAgICAgMGIxMCA9IDhrLCAwYjExID0gMTZrCisJCQkJCQkgICAgICBERUZBVUxUOiA4ayAqLworI2RlZmluZSAgICBSWF9QQUdFX1NJWkVfU0hJRlQgICAgICAgICAgIDAKKyNkZWZpbmUgICAgUlhfUEFHRV9TSVpFX01UVV9DT1VOVF9NQVNLICAweDAwMDA3ODAwIC8qICMgb2YgTVRVIGJ1ZmZlcnMgdGhlIGh3CisJCQkJCQkgICAgICBwYWNrcyBpbnRvIGEgcGFnZS4gCisJCQkJCQkgICAgICBERUZBVUxUOiA0ICovCisjZGVmaW5lICAgIFJYX1BBR0VfU0laRV9NVFVfQ09VTlRfU0hJRlQgMTEKKyNkZWZpbmUgICAgUlhfUEFHRV9TSVpFX01UVV9TVFJJREVfTUFTSyAweDE4MDAwMDAwIC8qICMgb2YgYnl0ZXMgdGhhdCBzZXBhcmF0ZQorCQkJCQkJCSBlYWNoIE1UVSBidWZmZXIgKyAKKwkJCQkJCQkgb2Zmc2V0IGZyb20gZWFjaCAKKwkJCQkJCQkgb3RoZXIuCisJCQkJCQkJIDBiMDAgPSAxaywgMGIwMSA9IDJrCisJCQkJCQkJIDBiMTAgPSA0aywgMGIxMSA9IDhrCisJCQkJCQkJIERFRkFVTFQ6IDB4MSAqLworI2RlZmluZSAgICBSWF9QQUdFX1NJWkVfTVRVX1NUUklERV9TSElGVCAyNworI2RlZmluZSAgICBSWF9QQUdFX1NJWkVfTVRVX09GRl9NQVNLICAgIDB4QzAwMDAwMDAgLyogb2Zmc2V0IGluIGVhY2ggcGFnZSB0aGF0CisJCQkJCQkgICAgICBodyB3cml0ZXMgdGhlIE1UVSBidWZmZXIKKwkJCQkJCSAgICAgIGludG8uIAorCQkJCQkJICAgICAgMGIwMCA9IDAsICAKKwkJCQkJCSAgICAgIDBiMDEgPSA2NCBieXRlcworCQkJCQkJICAgICAgMGIxMCA9IDk2LCAwYjExID0gMTI4CisJCQkJCQkgICAgICBERUZBVUxUOiAweDEgKi8KKyNkZWZpbmUgICAgUlhfUEFHRV9TSVpFX01UVV9PRkZfU0hJRlQgICAzMAorCQkJCQkJCSAKKy8qIDExLWJpdCBjb3VudGVyIHBvaW50cyB0byBuZXh0IGxvY2F0aW9uIGluIFJYIEZJRk8gdG8gYmUgbG9hZGVkL3JlYWQuIAorICogc2hhZG93IHdyaXRlIHBvaW50ZXJzIGVuYWJsZSByZXRyaWVzIGluIGNhc2Ugb2YgZWFybHkgcmVjZWl2ZSBhYm9ydHMuCisgKiBERUZBVUxUOiAweDAuIGdlbmVyYXRlZCBvbiA2NC1iaXQgYm91bmRhcmllcy4KKyAqLworI2RlZmluZSAgUkVHX1JYX0ZJRk9fV1JJVEVfUFRSICAgICAgICAgICAgIDB4NDAwOCAgLyogUlggRklGTyB3cml0ZSBwb2ludGVyICovCisjZGVmaW5lICBSRUdfUlhfRklGT19SRUFEX1BUUiAgICAgICAgICAgICAgMHg0MDBDICAvKiBSWCBGSUZPIHJlYWQgcG9pbnRlciAqLworI2RlZmluZSAgUkVHX1JYX0lQUF9GSUZPX1NIQURPV19XUklURV9QVFIgIDB4NDAxMCAgLyogUlggSVBQIEZJRk8gc2hhZG93IHdyaXRlIAorCQkJCQkJICAgICAgcG9pbnRlciAqLworI2RlZmluZSAgUkVHX1JYX0lQUF9GSUZPX1NIQURPV19SRUFEX1BUUiAgIDB4NDAxNCAgLyogUlggSVBQIEZJRk8gc2hhZG93IHJlYWQKKwkJCQkJCSAgICAgIHBvaW50ZXIgKi8KKyNkZWZpbmUgIFJFR19SWF9JUFBfRklGT19SRUFEX1BUUiAgICAgICAgICAweDQwMEMgIC8qIFJYIElQUCBGSUZPIHJlYWQgCisJCQkJCQkgICAgICBwb2ludGVyLiAoOC1iaXQgY291bnRlcikgKi8KKworLyogY3VycmVudCBzdGF0ZSBvZiBSWCBETUEgc3RhdGUgZW5naW5lcyArIG90aGVyIGluZm8KKyAqIERFRkFVTFQ6IDB4MAorICovCisjZGVmaW5lICBSRUdfUlhfREVCVUcgICAgICAgICAgICAgICAgICAgICAgMHg0MDFDICAvKiBSWCBkZWJ1ZyAqLworI2RlZmluZSAgICBSWF9ERUJVR19MT0FEX1NUQVRFX01BU0sgICAgICAgIDB4MDAwMDAwMEYgLyogbG9hZCBzdGF0ZSBtYWNoaW5lIHcvIE1BQzoKKwkJCQkJCQkgMHgwID0gaWRsZSwgICAweDEgPSBsb2FkX2JvcAorCQkJCQkJCSAweDIgPSBsb2FkIDEsIDB4MyA9IGxvYWQgMgorCQkJCQkJCSAweDQgPSBsb2FkIDMsIDB4NSA9IGxvYWQgNAorCQkJCQkJCSAweDYgPSBsYXN0IGRldGVjdAorCQkJCQkJCSAweDcgPSB3YWl0IHJlcQorCQkJCQkJCSAweDggPSB3YWl0IHJlcSBzdGF0dXNzIDFzdAorCQkJCQkJCSAweDkgPSBsb2FkIHN0CisJCQkJCQkJIDB4YSA9IGJ1YmJsZSBtYWMKKwkJCQkJCQkgMHhiID0gZXJyb3IgKi8KKyNkZWZpbmUgICAgUlhfREVCVUdfTE1fU1RBVEVfTUFTSyAgICAgICAgICAweDAwMDAwMDcwIC8qIGxvYWQgc3RhdGUgbWFjaGluZSB3LyBIUCBhbmQKKwkJCQkJCQkgUlggRklGTzoKKwkJCQkJCQkgMHgwID0gaWRsZSwgICAweDEgPSBocCB4ZnIKKwkJCQkJCQkgMHgyID0gd2FpdCBocCByZWFkeQorCQkJCQkJCSAweDMgPSB3YWl0IGZsb3cgY29kZQorCQkJCQkJCSAweDQgPSBmaWZvIHhmZXIKKwkJCQkJCQkgMHg1ID0gbWFrZSBzdGF0dXMKKwkJCQkJCQkgMHg2ID0gY3N1bSByZWFkeQorCQkJCQkJCSAweDcgPSBlcnJvciAqLworI2RlZmluZSAgICBSWF9ERUJVR19GQ19TVEFURV9NQVNLICAgICAgICAgIDB4MDAwMDAwMTgwIC8qIGZsb3cgY29udHJvbCBzdGF0ZSBtYWNoaW5lCisJCQkJCQkJIHcvIE1BQzoKKwkJCQkJCQkgMHgwID0gaWRsZQorCQkJCQkJCSAweDEgPSB3YWl0IHhvZmYgYWNrCisJCQkJCQkJIDB4MiA9IHdhaXQgeG9uCisJCQkJCQkJIDB4MyA9IHdhaXQgeG9uIGFjayAqLworI2RlZmluZSAgICBSWF9ERUJVR19EQVRBX1NUQVRFX01BU0sgICAgICAgIDB4MDAwMDAxRTAwIC8qIHVubG9hZCBkYXRhIHN0YXRlIG1hY2hpbmUKKwkJCQkJCQkgc3RhdGVzOiAKKwkJCQkJCQkgMHgwID0gaWRsZSBkYXRhCisJCQkJCQkJIDB4MSA9IGhlYWRlciBiZWdpbgorCQkJCQkJCSAweDIgPSB4ZmVyIGhlYWRlcgorCQkJCQkJCSAweDMgPSB4ZmVyIGhlYWRlciBsZAorCQkJCQkJCSAweDQgPSBtdHUgYmVnaW4KKwkJCQkJCQkgMHg1ID0geGZlciBtdHUKKwkJCQkJCQkgMHg2ID0geGZlciBtdHUgbGQKKwkJCQkJCQkgMHg3ID0ganVtYm8gYmVnaW4KKwkJCQkJCQkgMHg4ID0geGZlciBqdW1ibyAKKwkJCQkJCQkgMHg5ID0geGZlciBqdW1ibyBsZAorCQkJCQkJCSAweGEgPSByZWFzIGJlZ2luCisJCQkJCQkJIDB4YiA9IHhmZXIgcmVhcworCQkJCQkJCSAweGMgPSBmbHVzaCB0YWcKKwkJCQkJCQkgMHhkID0geGZlciByZWFzIGxkCisJCQkJCQkJIDB4ZSA9IGVycm9yCisJCQkJCQkJIDB4ZiA9IGJ1YmJsZSBpZGxlICovCisjZGVmaW5lICAgIFJYX0RFQlVHX0RFU0NfU1RBVEVfTUFTSyAgICAgICAgMHgwMDAxRTAwMCAvKiB1bmxvYWQgZGVzYyBzdGF0ZSBtYWNoaW5lCisJCQkJCQkJIHN0YXRlczoKKwkJCQkJCQkgMHgwID0gaWRsZSBkZXNjCisJCQkJCQkJIDB4MSA9IHdhaXQgYWNrCisJCQkJCQkJIDB4OSA9IHdhaXQgYWNrIDIKKwkJCQkJCQkgMHgyID0gZmV0Y2ggZGVzYyAxCisJCQkJCQkJIDB4YSA9IGZldGNoIGRlc2MgMgorCQkJCQkJCSAweDMgPSBsb2FkIHB0cnMKKwkJCQkJCQkgMHg0ID0gd2FpdCBkbWEKKwkJCQkJCQkgMHg1ID0gd2FpdCBhY2sgYmF0Y2gKKwkJCQkJCQkgMHg2ID0gcG9zdCBiYXRjaAorCQkJCQkJCSAweDcgPSB4ZnIgZG9uZSAqLworI2RlZmluZSAgICBSWF9ERUJVR19JTlRSX1JFQURfUFRSX01BU0sgICAgIDB4MzAwMDAwMDAgLyogaW50ZXJydXB0IHJlYWQgcHRyIG9mIHRoZQorCQkJCQkJCSBpbnRlcnJ1cHQgcXVldWUgKi8KKyNkZWZpbmUgICAgUlhfREVCVUdfSU5UUl9XUklURV9QVFJfTUFTSyAgICAweEMwMDAwMDAwIC8qIGludGVycnVwdCB3cml0ZSBwb2ludGVyCisJCQkJCQkJIG9mIHRoZSBpbnRlcnJ1cHQgcXVldWUgKi8KKworLyogZmxvdyBjb250cm9sIGZyYW1lcyBhcmUgZW1taXR0ZWQgdXNpbmcgdHdvIFBBVVNFIHRocmVzaG9sZHM6CisgKiBYT0ZGIFBBVVNFIHVzZXMgcGF1c2UgdGltZSB2YWx1ZSBwcmUtcHJvZ3JhbW1lZCBpbiB0aGUgU2VuZCBQQVVTRSBNQUMgcmVnCisgKiBYT04gUEFVU0UgdXNlcyBhIHBhdXNlIHRpbWUgb2YgMC4gZ3JhbnVsYXJpdHkgb2YgdGhyZXNob2xkIGlzIDY0Ynl0ZXMuCisgKiBQQVVTRSB0aHJlc2hvbGRzIGRlZmluZWQgaW4gdGVybXMgb2YgRklGTyBvY2N1cGFuY3kgYW5kIG1heSBiZSB0cmFuc2xhdGVkCisgKiBpbnRvIEZJRk8gdmFjYW5jeSB1c2luZyBSWF9GSUZPX1NJWkUuIHNldHRpbmcgT04gd2lsbCB0cmlnZ2VyIFhPTiBmcmFtZXMgCisgKiB3aGVuIEZJRk8gcmVhY2hlcyAwLiBPRkYgdGhyZXNob2xkIHNob3VsZCBub3QgYmUgPiBzaXplIG9mIFJYIEZJRk8uIG1heAorICogdmFsdWUgaXMgaXMgMHg2Ri4gCisgKiBERUZBVUxUOiAweDAwMDc4CisgKi8KKyNkZWZpbmUgIFJFR19SWF9QQVVTRV9USFJFU0ggICAgICAgICAgICAgICAweDQwMjAgIC8qIFJYIHBhdXNlIHRocmVzaG9sZHMgKi8KKyNkZWZpbmUgICAgUlhfUEFVU0VfVEhSRVNIX1FVQU5UVU0gICAgICAgICA2NAorI2RlZmluZSAgICBSWF9QQVVTRV9USFJFU0hfT0ZGX01BU0sgICAgICAgIDB4MDAwMDAxRkYgLyogWE9GRiBQQVVTRSBlbWl0dGVkIHdoZW4KKwkJCQkJCQkgUlggRklGTyBvY2N1cGFuY3kgPiAKKwkJCQkJCQkgdmFsdWUqNjRCICovCisjZGVmaW5lICAgIFJYX1BBVVNFX1RIUkVTSF9PRkZfU0hJRlQgICAgICAgMAorI2RlZmluZSAgICBSWF9QQVVTRV9USFJFU0hfT05fTUFTSyAgICAgICAgIDB4MDAxRkYwMDAgLyogWE9OIFBBVVNFIGVtaXR0ZWQgYWZ0ZXIKKwkJCQkJCQkgZW1pdHRpbmcgWE9GRiBQQVVTRSB3aGVuIFJYCisJCQkJCQkJIEZJRk8gb2NjdXBhbmN5IGZhbGxzIGJlbG93CisJCQkJCQkJIHRoaXMgdmFsdWUqNjRCLiBtdXN0IGJlCisJCQkJCQkJIDwgWE9GRiB0aHJlc2hvbGQuIGlmID0KKwkJCQkJCQkgUlhfRklGT19TSVpFPCBYT04gZnJhbWVzIGFyZQorCQkJCQkJCSBuZXZlciBlbWl0dGVkLiAqLworI2RlZmluZSAgICBSWF9QQVVTRV9USFJFU0hfT05fU0hJRlQgICAgICAgIDEyCisKKy8qIDEzLWJpdCByZWdpc3RlciB1c2VkIHRvIGNvbnRyb2wgUlggZGVzYyBmZXRjaGluZyBhbmQgaW50ciBnZW5lcmF0aW9uLiBpZiA0KworICogdmFsaWQgUlggZGVzY3JpcHRvcnMgYXJlIGF2YWlsYWJsZSwgQ2Fzc2luaSB3aWxsIHJlYWQgNCBhdCBhIHRpbWUuIAorICogd3JpdGluZyBOIG1lYW5zIHRoYXQgYWxsIGRlc2MgdXAgdG8gKmJ1dCogZXhjbHVkaW5nIE4gYXJlIGF2YWlsYWJsZS4gTiBtdXN0CisgKiBiZSBhIG11bHRpcGxlIG9mIDQgKE4gJSA0ID0gMCkuIGZpcnN0IGRlc2Mgc2hvdWxkIGJlIGNhY2hlLWxpbmUgYWxpZ25lZC4gCisgKiBERUZBVUxUOiAwIG9uIHJlc2V0CisgKi8KKyNkZWZpbmUgIFJFR19SWF9LSUNLICAgICAgICAgICAgICAgICAgICAweDQwMjQgIC8qIFJYIGtpY2sgcmVnICovCisKKy8qIDhLQiBhbGlnbmVkIDY0LWJpdCBwb2ludGVyIHRvIHRoZSBiYXNlIG9mIHRoZSBSWCBmcmVlL2NvbXBsZXRpb24gcmluZ3MuCisgKiBsb3dlciAxMyBiaXRzIG9mIHRoZSBsb3cgcmVnaXN0ZXIgYXJlIGhhcmQtd2lyZWQgdG8gMC4KKyAqLworI2RlZmluZSAgUkVHX1JYX0RCX0xPVyAgICAgICAgICAgICAgICAgICAgIDB4NDAyOCAgLyogUlggZGVzY3JpcHRvciByaW5nIAorCQkJCQkJCSBiYXNlIGxvdyAqLworI2RlZmluZSAgUkVHX1JYX0RCX0hJICAgICAgICAgICAgICAgICAgICAgIDB4NDAyQyAgLyogUlggZGVzY3JpcHRvciByaW5nCisJCQkJCQkJIGJhc2UgaGkgKi8KKyNkZWZpbmUgIFJFR19SWF9DQl9MT1cgICAgICAgICAgICAgICAgICAgICAweDQwMzAgIC8qIFJYIGNvbXBsZXRpb24gcmluZworCQkJCQkJCSBiYXNlIGxvdyAqLworI2RlZmluZSAgUkVHX1JYX0NCX0hJICAgICAgICAgICAgICAgICAgICAgIDB4NDAzNCAgLyogUlggY29tcGxldGlvbiByaW5nIAorCQkJCQkJCSBiYXNlIGhpICovCisvKiAxMy1iaXQgcmVnaXN0ZXIgaW5kaWNhdGUgZGVzYyB1c2VkIGJ5IGNhc3NpbmkgZm9yIHJlY2VpdmUgZnJhbWVzLiB1c2VkCisgKiBmb3IgZGlhZ25vc3RpYyBwdXJwb3Nlcy4gCisgKiBERUZBVUxUOiAwIG9uIHJlc2V0CisgKi8KKyNkZWZpbmUgIFJFR19SWF9DT01QICAgICAgICAgICAgICAgICAgICAgICAweDQwMzggIC8qIChybykgUlggY29tcGxldGlvbiAqLworCisvKiBIRUFEIGFuZCBUQUlMIGFyZSB1c2VkIHRvIGNvbnRyb2wgUlggZGVzYyBwb3N0aW5nIGFuZCBpbnRlcnJ1cHQKKyAqIGdlbmVyYXRpb24uICBodyBtb3ZlcyB0aGUgaGVhZCByZWdpc3RlciB0byBwYXNzIG93bmVyc2hpcCB0byBzdy4gc3cKKyAqIG1vdmVzIHRoZSB0YWlsIHJlZ2lzdGVyIHRvIHBhc3Mgb3duZXJzaGlwIGJhY2sgdG8gaHcuIHRvIGdpdmUgYWxsCisgKiBlbnRyaWVzIHRvIGh3LCBzZXQgVEFJTCA9IEhFQUQuICBpZiBIRUFEIGFuZCBUQUlMIGluZGljYXRlIHRoYXQgbm8KKyAqIG1vcmUgZW50cmllcyBhcmUgYXZhaWxhYmxlLCBETUEgd2lsbCBwYXVzZSBhbmQgYW4gaW50ZXJydXB0IHdpbGwgYmUKKyAqIGdlbmVyYXRlZCB0byBpbmRpY2F0ZSBubyBtb3JlIGVudHJpZXMgYXJlIGF2YWlsYWJsZS4gIHN3IGNhbiB1c2UKKyAqIHRoaXMgaW50ZXJydXB0IHRvIHJlZHVjZSB0aGUgIyBvZiB0aW1lcyBpdCBtdXN0IHVwZGF0ZSB0aGUKKyAqIGNvbXBsZXRpb24gdGFpbCByZWdpc3Rlci4KKyAqIERFRkFVTFQ6IDAgb24gcmVzZXQKKyAqLworI2RlZmluZSAgUkVHX1JYX0NPTVBfSEVBRCAgICAgICAgICAgICAgICAgIDB4NDAzQyAgLyogUlggY29tcGxldGlvbiBoZWFkICovCisjZGVmaW5lICBSRUdfUlhfQ09NUF9UQUlMICAgICAgICAgICAgICAgICAgMHg0MDQwICAvKiBSWCBjb21wbGV0aW9uIHRhaWwgKi8KKworLyogdmFsdWVzIHVzZWQgZm9yIHJlY2VpdmUgaW50ZXJydXB0IGJsYW5raW5nLiBsb2FkZWQgZWFjaCB0aW1lIHRoZSBJU1IgaXMgcmVhZAorICogREVGQVVMVDogMHgwMDAwMDAwMAorICovCisjZGVmaW5lICBSRUdfUlhfQkxBTksgICAgICAgICAgICAgICAgICAgICAgMHg0MDQ0ICAvKiBSWCBibGFua2luZyByZWdpc3RlciAKKwkJCQkJCQkgZm9yIElTUiByZWFkICovCisjZGVmaW5lICAgIFJYX0JMQU5LX0lOVFJfUEtUX01BU0sgICAgICAgICAgMHgwMDAwMDFGRiAvKiBSWF9ET05FIGludHIgYXNzZXJ0ZWQgaWYgCisJCQkJCQkJIHRoaXMgbWFueSBzZXRzIG9mIGNvbXBsZXRpb24KKwkJCQkJCQkgd3JpdGViYWNrcyAodXAgdG8gMiBwYWNrZXRzKQorCQkJCQkJCSBvY2N1ciBzaW5jZSB0aGUgbGFzdCB0aW1lCisJCQkJCQkJIHRoZSBJU1Igd2FzIHJlYWQuIDAgPSBubworCQkJCQkJCSBwYWNrZXQgYmxhbmtpbmcgKi8KKyNkZWZpbmUgICAgUlhfQkxBTktfSU5UUl9QS1RfU0hJRlQgICAgICAgICAwCisjZGVmaW5lICAgIFJYX0JMQU5LX0lOVFJfVElNRV9NQVNLICAgICAgICAgMHgzRkZGRjAwMCAvKiBSWF9ET05FIGludGVycnVwdCBhc3NlcnRlZAorCQkJCQkJCSBpZiB0aGF0IG1hbnkgY2xvY2tzIHdlcmUKKwkJCQkJCQkgY291bnRlZCBzaW5jZSBsYXN0IHRpbWUgdGhlCisJCQkJCQkJIElTUiB3YXMgcmVhZC4gCisJCQkJCQkJIGVhY2ggY291bnQgaXMgNTEyIGNvcmUKKwkJCQkJCQkgY2xvY2tzICgxMjVNSHopLiAwID0gbm8KKwkJCQkJCQkgdGltZSBibGFua2luZyAqLworI2RlZmluZSAgICBSWF9CTEFOS19JTlRSX1RJTUVfU0hJRlQgICAgICAgIDEyCisKKy8qIHZhbHVlcyB1c2VkIGZvciBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBiYXNlZCBvbiB0aHJlc2hvbGQgdmFsdWVzIG9mIGhvdyAKKyAqIG1hbnkgZnJlZSBkZXNjIGFuZCBjb21wbGV0aW9uIGVudHJpZXMgYXJlIGF2YWlsYWJsZSBmb3IgaHcgdXNlLgorICogREVGQVVMVDogMHgwMDAwMDAwMAorICovCisjZGVmaW5lICBSRUdfUlhfQUVfVEhSRVNIICAgICAgICAgICAgICAgICAgMHg0MDQ4ICAvKiBSWCBhbG1vc3QgZW1wdHkgCisJCQkJCQkJIHRocmVzaG9sZHMgKi8KKyNkZWZpbmUgICAgUlhfQUVfVEhSRVNIX0ZSRUVfTUFTSyAgICAgICAgICAweDAwMDAxRkZGIC8qIFJYX0JVRl9BRSB3aWxsIGJlIAorCQkJCQkJCSBnZW5lcmF0ZWQgaWYgIyBkZXNjCisJCQkJCQkJIGF2YWlsIGZvciBodyB1c2UgPD0gCisJCQkJCQkJICMgKi8KKyNkZWZpbmUgICAgUlhfQUVfVEhSRVNIX0ZSRUVfU0hJRlQgICAgICAgICAwCisjZGVmaW5lICAgIFJYX0FFX1RIUkVTSF9DT01QX01BU0sgICAgICAgICAgMHgwRkZGRTAwMCAvKiBSWF9DT01QX0FFIHdpbGwgYmUKKwkJCQkJCQkgZ2VuZXJhdGVkIGlmICMgb2YgCisJCQkJCQkJIGNvbXBsZXRpb24gZW50cmllcworCQkJCQkJCSBhdmFpbCBmb3IgaHcgdXNlIDw9IAorCQkJCQkJCSAjICovCisjZGVmaW5lICAgIFJYX0FFX1RIUkVTSF9DT01QX1NISUZUICAgICAgICAgMTMKKworLyogcHJvYmFiaWxpdGllcyBmb3IgcmFuZG9tIGVhcmx5IGRyb3AgKFJFRCkgdGhyZXNob2xkcyBvbiBhIEZJRk8gdGhyZXNob2xkIAorICogYmFzaXMuIHByb2JhYmlsaXR5IHNob3VsZCBpbmNyZWFzZSB3aGVuIHRoZSBGSUZPIGxldmVsIGluY3JlYXNlcy4gY29udHJvbCAKKyAqIHBhY2tldHMgYXJlIG5ldmVyIGRyb3BwZWQgYW5kIG5vdCBjb3VudGVkIGluIHN0YXRzLiBwcm9iYWJpbGl0eSBwcm9ncmFtbWVkIAorICogb24gYSAxMi41JSBncmFudWxhcml0eS4gZS5nLiwgMHgxID0gMS84IHBhY2tldHMgZHJvcHBlZC4KKyAqIERFRkFVTFQ6IDB4MDAwMDAwMDAKKyAqLworI2RlZmluZSAgUkVHX1JYX1JFRCAgICAgICAgICAgICAgICAgICAgICAweDQwNEMgIC8qIFJYIHJhbmRvbSBlYXJseSBkZXRlY3QgZW5hYmxlICovCisjZGVmaW5lICAgIFJYX1JFRF80S182S19GSUZPX01BU0sgICAgICAgIDB4MDAwMDAwRkYgLyogIDRLQiA8IEZJRk8gdGhyZXNoIDwgNktCICovCisjZGVmaW5lICAgIFJYX1JFRF82S184S19GSUZPX01BU0sgICAgICAgIDB4MDAwMEZGMDAgLyogIDZLQiA8IEZJRk8gdGhyZXNoIDwgOEtCICovCisjZGVmaW5lICAgIFJYX1JFRF84S18xMEtfRklGT19NQVNLICAgICAgIDB4MDBGRjAwMDAgLyogIDhLQiA8IEZJRk8gdGhyZXNoIDwgMTBLQiAqLworI2RlZmluZSAgICBSWF9SRURfMTBLXzEyS19GSUZPX01BU0sgICAgICAweEZGMDAwMDAwIC8qIDEwS0IgPCBGSUZPIHRocmVzaCA8IDEyS0IgKi8KKworLyogRklGTyBmdWxsbmVzcyBsZXZlbHMgZm9yIFJYIEZJRk8sIFJYIGNvbnRyb2wgRklGTywgYW5kIFJYIElQUCBGSUZPLiAKKyAqIFJYIGNvbnRyb2wgRklGTyA9ICMgb2YgcGFja2V0cyBpbiBSWCBGSUZPLiAKKyAqIERFRkFVTFQ6IDB4MAorICovCisjZGVmaW5lICBSRUdfUlhfRklGT19GVUxMTkVTUyAgICAgICAgICAgICAgMHg0MDUwICAvKiAocm8pIFJYIEZJRk8gZnVsbG5lc3MgKi8KKyNkZWZpbmUgICAgUlhfRklGT19GVUxMTkVTU19SWF9GSUZPX01BU0sgICAweDNGRjgwMDAwIC8qIGxldmVsIHcvIDhCIGdyYW51bGFyaXR5ICovCisjZGVmaW5lICAgIFJYX0ZJRk9fRlVMTE5FU1NfSVBQX0ZJRk9fTUFTSyAgMHgwMDA3RkYwMCAvKiBsZXZlbCB3LyA4QiBncmFudWxhcml0eSAqLworI2RlZmluZSAgICBSWF9GSUZPX0ZVTExORVNTX1JYX1BLVF9NQVNLICAgIDB4MDAwMDAwRkYgLyogIyBwYWNrZXRzIGluIFJYIEZJRk8gKi8KKyNkZWZpbmUgIFJFR19SWF9JUFBfUEFDS0VUX0NPVU5UICAgICAgICAgICAweDQwNTQgIC8qIFJYIElQUCBwYWNrZXQgY291bnRlciAqLworI2RlZmluZSAgUkVHX1JYX1dPUktfRE1BX1BUUl9MT1cgICAgICAgICAgIDB4NDA1OCAgLyogUlggd29ya2luZyBETUEgcHRyIGxvdyAqLworI2RlZmluZSAgUkVHX1JYX1dPUktfRE1BX1BUUl9ISSAgICAgICAgICAgIDB4NDA1QyAgLyogUlggd29ya2luZyBETUEgcHRyIAorCQkJCQkJICAgICAgaGlnaCAqLworCisvKiBCSVNUIHRlc3Rpbmcgcm8gUlggRklGTywgUlggY29udHJvbCBGSUZPLCBhbmQgUlggSVBQIEZJRk8uIG9ubHkgUlggQklTVAorICogU1RBUlQvQ09NUExFVEUgaXMgd3JpdGVhYmxlLiBTVEFSVCB3aWxsIGNsZWFyIHdoZW4gdGhlIEJJU1QgaGFzIGNvbXBsZXRlZAorICogY2hlY2tpbmcgYWxsIDE3IFJBTVMuIAorICogREVGQVVMVDogMGJ4eHh4IHh4eHh4IHh4eHggeHh4eCB4eHh4IHgwMDAgMDAwMCAwMDAwIDAweDAKKyAqLworI2RlZmluZSAgUkVHX1JYX0JJU1QgICAgICAgICAgICAgICAgICAgICAgIDB4NDA2MCAgLyogKHJvKSBSWCBCSVNUICovCisjZGVmaW5lICAgIFJYX0JJU1RfMzJBX1BBU1MgICAgICAgICAgICAgICAgMHg4MDAwMDAwMCAvKiBSWCBGSUZPIDMyQSBwYXNzZWQgKi8KKyNkZWZpbmUgICAgUlhfQklTVF8zM0FfUEFTUyAgICAgICAgICAgICAgICAweDQwMDAwMDAwIC8qIFJYIEZJRk8gMzNBIHBhc3NlZCAqLworI2RlZmluZSAgICBSWF9CSVNUXzMyQl9QQVNTICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAgLyogUlggRklGTyAzMkIgcGFzc2VkICovCisjZGVmaW5lICAgIFJYX0JJU1RfMzNCX1BBU1MgICAgICAgICAgICAgICAgMHgxMDAwMDAwMCAvKiBSWCBGSUZPIDMzQiBwYXNzZWQgKi8KKyNkZWZpbmUgICAgUlhfQklTVF8zMkNfUEFTUyAgICAgICAgICAgICAgICAweDA4MDAwMDAwIC8qIFJYIEZJRk8gMzJDIHBhc3NlZCAqLworI2RlZmluZSAgICBSWF9CSVNUXzMzQ19QQVNTICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAgLyogUlggRklGTyAzM0MgcGFzc2VkICovCisjZGVmaW5lICAgIFJYX0JJU1RfSVBQXzMyQV9QQVNTICAgICAgICAgICAgMHgwMjAwMDAwMCAvKiBSWCBJUFAgRklGTyAzM0IgcGFzc2VkICovCisjZGVmaW5lICAgIFJYX0JJU1RfSVBQXzMzQV9QQVNTICAgICAgICAgICAgMHgwMTAwMDAwMCAvKiBSWCBJUFAgRklGTyAzM0EgcGFzc2VkICovCisjZGVmaW5lICAgIFJYX0JJU1RfSVBQXzMyQl9QQVNTICAgICAgICAgICAgMHgwMDgwMDAwMCAvKiBSWCBJUFAgRklGTyAzMkIgcGFzc2VkICovCisjZGVmaW5lICAgIFJYX0JJU1RfSVBQXzMzQl9QQVNTICAgICAgICAgICAgMHgwMDQwMDAwMCAvKiBSWCBJUFAgRklGTyAzM0IgcGFzc2VkICovCisjZGVmaW5lICAgIFJYX0JJU1RfSVBQXzMyQ19QQVNTICAgICAgICAgICAgMHgwMDIwMDAwMCAvKiBSWCBJUFAgRklGTyAzMkMgcGFzc2VkICovCisjZGVmaW5lICAgIFJYX0JJU1RfSVBQXzMzQ19QQVNTICAgICAgICAgICAgMHgwMDEwMDAwMCAvKiBSWCBJUFAgRklGTyAzM0MgcGFzc2VkICovCisjZGVmaW5lICAgIFJYX0JJU1RfQ1RSTF8zMl9QQVNTICAgICAgICAgICAgMHgwMDgwMDAwMCAvKiBSWCBDVFJMIEZJRk8gMzIgcGFzc2VkICovCisjZGVmaW5lICAgIFJYX0JJU1RfQ1RSTF8zM19QQVNTICAgICAgICAgICAgMHgwMDQwMDAwMCAvKiBSWCBDVFJMIEZJRk8gMzMgcGFzc2VkICovCisjZGVmaW5lICAgIFJYX0JJU1RfUkVBU18yNkFfUEFTUyAgICAgICAgICAgMHgwMDIwMDAwMCAvKiBSWCBSZWFzIDI2QSBwYXNzZWQgKi8KKyNkZWZpbmUgICAgUlhfQklTVF9SRUFTXzI2Ql9QQVNTICAgICAgICAgICAweDAwMTAwMDAwIC8qIFJYIFJlYXMgMjZCIHBhc3NlZCAqLworI2RlZmluZSAgICBSWF9CSVNUX1JFQVNfMjdfUEFTUyAgICAgICAgICAgIDB4MDAwODAwMDAgLyogUlggUmVhcyAyNyBwYXNzZWQgKi8KKyNkZWZpbmUgICAgUlhfQklTVF9TVEFURV9NQVNLICAgICAgICAgICAgICAweDAwMDc4MDAwIC8qIEJJU1Qgc3RhdGUgbWFjaGluZSAqLworI2RlZmluZSAgICBSWF9CSVNUX1NVTU1BUlkgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIgLyogd2hlbiBCSVNUIGNvbXBsZXRlLAorCQkJCQkJCSBzdW1tYXJ5IHBhc3MgYml0IAorCQkJCQkJCSBjb250YWlucyBBTkQgb2YgQklTVAorCQkJCQkJCSByZXN1bHRzIG9mIGFsbCAxNgorCQkJCQkJCSBSQU1TICovCisjZGVmaW5lICAgIFJYX0JJU1RfU1RBUlQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiB3cml0ZSAxIHRvIHN0YXJ0IAorCQkJCQkJCSBCSVNULiBzZWxmIGNsZWFycworCQkJCQkJCSBvbiBjb21wbGV0aW9uLiAqLworCisvKiBuZXh0IGxvY2F0aW9uIGluIFJYIENUUkwgRklGTyB0aGF0IHdpbGwgYmUgbG9hZGVkIHcvIGRhdGEgZnJvbSBSWCBJUFAvcmVhZAorICogZnJvbSB0byByZXRyaWV2ZSBwYWNrZXQgY29udHJvbCBpbmZvLiAKKyAqIERFRkFVTFQ6IDAKKyAqLworI2RlZmluZSAgUkVHX1JYX0NUUkxfRklGT19XUklURV9QVFIgICAgICAgIDB4NDA2NCAgLyogKHJvKSBSWCBjb250cm9sIEZJRk8gCisJCQkJCQkgICAgICB3cml0ZSBwdHIgKi8KKyNkZWZpbmUgIFJFR19SWF9DVFJMX0ZJRk9fUkVBRF9QVFIgICAgICAgICAweDQwNjggIC8qIChybykgUlggY29udHJvbCBGSUZPIHJlYWQKKwkJCQkJCSAgICAgIHB0ciAqLworCisvKiByZWNlaXZlIGludGVycnVwdCBibGFua2luZy4gbG9hZGVkIGVhY2ggdGltZSBpbnRlcnJ1cHQgYWxpYXMgcmVnaXN0ZXIgaXMKKyAqIHJlYWQuIAorICogREVGQVVMVDogMHgwCisgKi8KKyNkZWZpbmUgIFJFR19SWF9CTEFOS19BTElBU19SRUFEICAgICAgICAgICAweDQwNkMgIC8qIFJYIGJsYW5raW5nIHJlZ2lzdGVyIGZvcgorCQkJCQkJICAgICAgYWxpYXMgcmVhZCAqLworI2RlZmluZSAgICBSWF9CQVJfSU5UUl9QQUNLRVRfTUFTSyAgICAgICAgIDB4MDAwMDAxRkYgLyogYXNzZXJ0IFJYX0RPTkUgaWYgIyAKKwkJCQkJCQkgY29tcGxldGlvbiB3cml0ZWJhY2tzIAorCQkJCQkJCSA+ICMgc2luY2UgbGFzdCBJU1IgCisJCQkJCQkJIHJlYWQuIDAgPSBubyAKKwkJCQkJCQkgYmxhbmtpbmcuIHVwIHRvIDIgCisJCQkJCQkJIHBhY2tldHMgcGVyIAorCQkJCQkJCSBjb21wbGV0aW9uIHdiLiAqLworI2RlZmluZSAgICBSWF9CQVJfSU5UUl9USU1FX01BU0sgICAgICAgICAgIDB4M0ZGRkYwMDAgLyogYXNzZXJ0IFJYX0RPTkUgaWYgIworCQkJCQkJCSBjbG9ja3MgPiAjIHNpbmNlIGxhc3QKKwkJCQkJCQkgSVNSIHJlYWQuIGVhY2ggY291bnQKKwkJCQkJCQkgaXMgNTEyIGNvcmUgY2xvY2tzCisJCQkJCQkJICgxMjVNSHopLiAwID0gbm8gCisJCQkJCQkJIGJsYW5raW5nLiAqLworCisvKiBkaWFnbm9zdGljIGFjY2VzcyB0byBSWCBGSUZPLiAzMiBMU0IgYWNjZXNzZWQgdmlhIERBVEFfTE9XLiAzMiBNU0IgYWNjZXNzZWQKKyAqIHZpYSBEQVRBX0hJX1QwIG9yIERBVEFfSElfVDEuIFRBRyByZWFkcyB0aGUgdGFnIGJpdC4gd3JpdGluZyBISV9UMAorICogd2lsbCB1bnNldCB0aGUgdGFnIGJpdCB3aGlsZSB3cml0aW5nIEhJX1QxIHdpbGwgc2V0IHRoZSB0YWcgYml0LiB0byByZXNldAorICogdG8gbm9ybWFsIG9wZXJhdGlvbiBhZnRlciBkaWFnbm9zdGljcywgd3JpdGUgdG8gYWRkcmVzcyBsb2NhdGlvbiAweDAuCisgKiBSWF9ETUFfRU4gYml0IG11c3QgYmUgc2V0IHRvIDB4MCBmb3IgUlggRklGTyBQSU8gYWNjZXNzLiBEQVRBX0hJIHNob3VsZAorICogYmUgdGhlIGxhc3Qgd3JpdGUgYWNjZXNzIG9mIGEgd3JpdGUgc2VxdWVuY2UuCisgKiBERUZBVUxUOiB1bmRlZmluZWQKKyAqLworI2RlZmluZSAgUkVHX1JYX0ZJRk9fQUREUiAgICAgICAgICAgICAgICAgIDB4NDA4MCAgLyogUlggRklGTyBhZGRyZXNzICovCisjZGVmaW5lICBSRUdfUlhfRklGT19UQUcgICAgICAgICAgICAgICAgICAgMHg0MDg0ICAvKiBSWCBGSUZPIHRhZyAqLworI2RlZmluZSAgUkVHX1JYX0ZJRk9fREFUQV9MT1cgICAgICAgICAgICAgIDB4NDA4OCAgLyogUlggRklGTyBkYXRhIGxvdyAqLworI2RlZmluZSAgUkVHX1JYX0ZJRk9fREFUQV9ISV9UMCAgICAgICAgICAgIDB4NDA4QyAgLyogUlggRklGTyBkYXRhIGhpZ2ggVDAgKi8KKyNkZWZpbmUgIFJFR19SWF9GSUZPX0RBVEFfSElfVDEgICAgICAgICAgICAweDQwOTAgIC8qIFJYIEZJRk8gZGF0YSBoaWdoIFQxICovCisKKy8qIGRpYWdub3N0aWMgYXNzZXNzIHRvIFJYIENUUkwgRklGTy4gOC1iaXQgRklGT19BRERSIGhvbGRzIGFkZHJlc3Mgb2YKKyAqIDgxIGJpdCBjb250cm9sIGVudHJ5IGFuZCA2IGJpdCBmbG93IGlkLiBMT1cgYW5kIE1JRCBhcmUgYm90aCAzMi1iaXQKKyAqIGFjY2Vzc2VzLiBISSBpcyA3LWJpdHMgd2l0aCA2LWJpdCBmbG93IGlkIGFuZCAxIGJpdCBjb250cm9sCisgKiB3b3JkLiBSWF9ETUFfRU4gbXVzdCBiZSAwIGZvciBSWCBDVFJMIEZJRk8gUElPIGFjY2Vzcy4gREFUQV9ISQorICogc2hvdWxkIGJlIGxhc3Qgd3JpdGUgYWNjZXNzIG9mIHRoZSB3cml0ZSBzZXF1ZW5jZS4KKyAqIERFRkFVTFQ6IHVuZGVmaW5lZAorICovCisjZGVmaW5lICBSRUdfUlhfQ1RSTF9GSUZPX0FERFIgICAgICAgICAgICAgMHg0MDk0ICAvKiBSWCBDb250cm9sIEZJRk8gYW5kIAorCQkJCQkJICAgICAgQmF0Y2hpbmcgRklGTyBhZGRyICovCisjZGVmaW5lICBSRUdfUlhfQ1RSTF9GSUZPX0RBVEFfTE9XICAgICAgICAgMHg0MDk4ICAvKiBSWCBDb250cm9sIEZJRk8gZGF0YSAKKwkJCQkJCSAgICAgIGxvdyAqLworI2RlZmluZSAgUkVHX1JYX0NUUkxfRklGT19EQVRBX01JRCAgICAgICAgIDB4NDA5QyAgLyogUlggQ29udHJvbCBGSUZPIGRhdGEgCisJCQkJCQkgICAgICBtaWQgKi8KKyNkZWZpbmUgIFJFR19SWF9DVFJMX0ZJRk9fREFUQV9ISSAgICAgICAgICAweDQxMDAgIC8qIFJYIENvbnRyb2wgRklGTyBkYXRhIAorCQkJCQkJICAgICAgaGkgYW5kIGZsb3cgaWQgKi8KKyNkZWZpbmUgICAgUlhfQ1RSTF9GSUZPX0RBVEFfSElfQ1RSTCAgICAgICAweDAwMDEgIC8qIHVwcGVyIGJpdCBvZiBjdHJsIHdvcmQgKi8KKyNkZWZpbmUgICAgUlhfQ1RSTF9GSUZPX0RBVEFfSElfRkxPV19NQVNLICAweDAwN0UgIC8qIGZsb3cgaWQgKi8KKworLyogZGlhZ25vc3RpYyBhY2Nlc3MgdG8gUlggSVBQIEZJRk8uIHNhbWUgc2VtYW50aWNzIGFzIFJYX0ZJRk8uCisgKiBERUZBVUxUOiB1bmRlZmluZWQKKyAqLworI2RlZmluZSAgUkVHX1JYX0lQUF9GSUZPX0FERFIgICAgICAgICAgICAgIDB4NDEwNCAgLyogUlggSVBQIEZJRk8gYWRkcmVzcyAqLworI2RlZmluZSAgUkVHX1JYX0lQUF9GSUZPX1RBRyAgICAgICAgICAgICAgIDB4NDEwOCAgLyogUlggSVBQIEZJRk8gdGFnICovCisjZGVmaW5lICBSRUdfUlhfSVBQX0ZJRk9fREFUQV9MT1cgICAgICAgICAgMHg0MTBDICAvKiBSWCBJUFAgRklGTyBkYXRhIGxvdyAqLworI2RlZmluZSAgUkVHX1JYX0lQUF9GSUZPX0RBVEFfSElfVDAgICAgICAgIDB4NDExMCAgLyogUlggSVBQIEZJRk8gZGF0YSBoaWdoCisJCQkJCQkgICAgICBUMCAqLworI2RlZmluZSAgUkVHX1JYX0lQUF9GSUZPX0RBVEFfSElfVDEgICAgICAgIDB4NDExNCAgLyogUlggSVBQIEZJRk8gZGF0YSBoaWdoCisJCQkJCQkgICAgICBUMSAqLworCisvKiA2NC1iaXQgcG9pbnRlciB0byByZWNlaXZlIGRhdGEgYnVmZmVyIGluIGhvc3QgbWVtb3J5IHVzZWQgZm9yIGhlYWRlcnMgYW5kCisgKiBzbWFsbCBwYWNrZXRzLiBNU0IgaW4gaGlnaCByZWdpc3Rlci4gbG9hZGVkIGJ5IERNQSBzdGF0ZSBtYWNoaW5lIGFuZCAKKyAqIGluY3JlbWVudHMgYXMgRE1BIHdyaXRlcyByZWNlaXZlIGRhdGEuIG9ubHkgNTAgTFNCIGFyZSBpbmNyZW1lbnRlZC4gdG9wCisgKiAxMyBiaXRzIHRha2VuIGZyb20gUlggZGVzY3JpcHRvci4KKyAqIERFRkFVTFQ6IHVuZGVmaW5lZAorICovCisjZGVmaW5lICBSRUdfUlhfSEVBREVSX1BBR0VfUFRSX0xPVyAgICAgICAgMHg0MTE4ICAvKiAocm8pIFJYIGhlYWRlciBwYWdlIHB0cgorCQkJCQkJICAgICAgbG93ICovCisjZGVmaW5lICBSRUdfUlhfSEVBREVSX1BBR0VfUFRSX0hJICAgICAgICAgMHg0MTFDICAvKiAocm8pIFJYIGhlYWRlciBwYWdlIHB0cgorCQkJCQkJICAgICAgaGlnaCAqLworI2RlZmluZSAgUkVHX1JYX01UVV9QQUdFX1BUUl9MT1cgICAgICAgICAgIDB4NDEyMCAgLyogKHJvKSBSWCBNVFUgcGFnZSBwb2ludGVyIAorCQkJCQkJICAgICAgbG93ICovCisjZGVmaW5lICBSRUdfUlhfTVRVX1BBR0VfUFRSX0hJICAgICAgICAgICAgMHg0MTI0ICAvKiAocm8pIFJYIE1UVSBwYWdlIHBvaW50ZXIgCisJCQkJCQkgICAgICBoaWdoICovCisKKy8qIFBJTyBkaWFnbm9zdGljIGFjY2VzcyB0byBSWCByZWFzc2VtYmx5IERNQSBUYWJsZSBSQU0uIDYtYml0IHJlZ2lzdGVyIGhvbGRzCisgKiBvbmUgb2YgNjQgNzktYml0IGxvY2F0aW9ucyBpbiB0aGUgUlggUmVhc3NlbWJseSBETUEgdGFibGUgYW5kIHRoZSBhZGRyIG9mCisgKiBvbmUgb2YgdGhlIDY0IGJ5dGUgbG9jYXRpb25zIGluIHRoZSBCYXRjaGluZyB0YWJsZS4gTE9XIGhvbGRzIDMyIExTQi4gCisgKiBNSUQgaG9sZHMgdGhlIG5leHQgMzIgTFNCLiBISUdIIGhvbGRzIHRoZSAxNSBNU0IuIFJYX0RNQV9FTiBtdXN0IGJlIHNldAorICogdG8gMCBmb3IgUElPIGFjY2Vzcy4gREFUQV9ISUdIIHNob3VsZCBiZSBsYXN0IHdyaXRlIG9mIHdyaXRlIHNlcXVlbmNlLgorICogbGF5b3V0OiAgCisgKiByZWFzc21ibCBwdHIgWzc4OjE1XSB8IHJlYXNzbWJsIGluZGV4IFsxNDoxXSB8IHJlYXNzbWJsIGVudHJ5IHZhbGlkIFswXQorICogREVGQVVMVDogdW5kZWZpbmVkCisgKi8KKyNkZWZpbmUgIFJFR19SWF9UQUJMRV9BRERSICAgICAgICAgICAgIDB4NDEyOCAgLyogUlggcmVhc3NlbWJseSBETUEgdGFibGUKKwkJCQkJCSAgYWRkcmVzcyAqLworI2RlZmluZSAgICBSWF9UQUJMRV9BRERSX01BU0sgICAgICAgICAgMHgwMDAwMDAzRiAvKiBhZGRyZXNzIG1hc2sgKi8KKworI2RlZmluZSAgUkVHX1JYX1RBQkxFX0RBVEFfTE9XICAgICAgICAgMHg0MTJDICAvKiBSWCByZWFzc2VtYmx5IERNQSB0YWJsZQorCQkJCQkJICBkYXRhIGxvdyAqLworI2RlZmluZSAgUkVHX1JYX1RBQkxFX0RBVEFfTUlEICAgICAgICAgMHg0MTMwICAvKiBSWCByZWFzc2VtYmx5IERNQSB0YWJsZSAKKwkJCQkJCSAgZGF0YSBtaWQgKi8KKyNkZWZpbmUgIFJFR19SWF9UQUJMRV9EQVRBX0hJICAgICAgICAgIDB4NDEzNCAgLyogUlggcmVhc3NlbWJseSBETUEgdGFibGUKKwkJCQkJCSAgZGF0YSBoaWdoICovCisKKy8qIGNhc3NpbmkrIG9ubHkgKi8KKy8qIDhLQiBhbGlnbmVkIDY0LWJpdCBwb2ludGVyIHRvIGJhc2Ugb2YgUlggcmluZ3MuIGxvd2VyIDEzIGJpdHMgaGFyZHdpcmVkIHRvCisgKiAwLiBzYW1lIHNlbWFudGljcyBhcyBwcmltYXJ5IGRlc2MvY29tcGxldGUgcmluZ3MuCisgKi8KKyNkZWZpbmUgIFJFR19QTFVTX1JYX0RCMV9MT1cgICAgICAgICAgICAweDQyMDAgIC8qIFJYIGRlc2NyaXB0b3IgcmluZworCQkJCQkJICAgMiBiYXNlIGxvdyAqLworI2RlZmluZSAgUkVHX1BMVVNfUlhfREIxX0hJICAgICAgICAgICAgIDB4NDIwNCAgLyogUlggZGVzY3JpcHRvciByaW5nCisJCQkJCQkgICAyIGJhc2UgaGlnaCAqLworI2RlZmluZSAgUkVHX1BMVVNfUlhfQ0IxX0xPVyAgICAgICAgICAgIDB4NDIwOCAgLyogUlggY29tcGxldGlvbiByaW5nCisJCQkJCQkgICAyIGJhc2UgbG93LiA0IHRvdGFsICovCisjZGVmaW5lICBSRUdfUExVU19SWF9DQjFfSEkgICAgICAgICAgICAgMHg0MjBDICAvKiBSWCBjb21wbGV0aW9uIHJpbmcKKwkJCQkJCSAgIDIgYmFzZSBoaWdoLiA0IHRvdGFsICovCisjZGVmaW5lICBSRUdfUExVU19SWF9DQk5fTE9XKHgpICAgICAgICAoUkVHX1BMVVNfUlhfQ0IxX0xPVyArIDgqKCh4KSAtIDEpKQorI2RlZmluZSAgUkVHX1BMVVNfUlhfQ0JOX0hJKHgpICAgICAgICAgKFJFR19QTFVTX1JYX0NCMV9ISSArIDgqKCh4KSAtIDEpKQorI2RlZmluZSAgUkVHX1BMVVNfUlhfS0lDSzEgICAgICAgICAgICAgMHg0MjIwICAvKiBSWCBLaWNrIDIgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgIFJFR19QTFVTX1JYX0NPTVAxICAgICAgICAgICAgIDB4NDIyNCAgLyogKHJvKSBSWCBjb21wbGV0aW9uIDIgCisJCQkJCQkgIHJlZyAqLworI2RlZmluZSAgUkVHX1BMVVNfUlhfQ09NUDFfSEVBRCAgICAgICAgMHg0MjI4ICAvKiAocm8pIFJYIGNvbXBsZXRpb24gMiAKKwkJCQkJCSAgaGVhZCByZWcuIDQgdG90YWwuICovCisjZGVmaW5lICBSRUdfUExVU19SWF9DT01QMV9UQUlMICAgICAgICAweDQyMkMgIC8qIFJYIGNvbXBsZXRpb24gMiAKKwkJCQkJCSAgdGFpbCByZWcuIDQgdG90YWwuICovCisjZGVmaW5lICBSRUdfUExVU19SWF9DT01QTl9IRUFEKHgpICAgIChSRUdfUExVU19SWF9DT01QMV9IRUFEICsgOCooKHgpIC0gMSkpCisjZGVmaW5lICBSRUdfUExVU19SWF9DT01QTl9UQUlMKHgpICAgIChSRUdfUExVU19SWF9DT01QMV9UQUlMICsgOCooKHgpIC0gMSkpCisjZGVmaW5lICBSRUdfUExVU19SWF9BRTFfVEhSRVNIICAgICAgICAweDQyNDAgIC8qIFJYIGFsbW9zdCBlbXB0eSAyCisJCQkJCQkgIHRocmVzaG9sZHMgKi8KKyNkZWZpbmUgICAgUlhfQUUxX1RIUkVTSF9GUkVFX01BU0sgICAgIFJYX0FFX1RIUkVTSF9GUkVFX01BU0sKKyNkZWZpbmUgICAgUlhfQUUxX1RIUkVTSF9GUkVFX1NISUZUICAgIFJYX0FFX1RIUkVTSF9GUkVFX1NISUZUCisKKy8qKiBoZWFkZXIgcGFyc2VyIHJlZ2lzdGVycyAqKi8KKworLyogUlggcGFyc2VyIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuIAorICogREVGQVVMVDogMHgxNjUxMDA0CisgKi8KKyNkZWZpbmUgIFJFR19IUF9DRkcgICAgICAgICAgICAgICAgICAgICAgIDB4NDE0MCAgLyogaGVhZGVyIHBhcnNlciAKKwkJCQkJCSAgICAgY29uZmlndXJhdGlvbiByZWcgKi8KKyNkZWZpbmUgICAgSFBfQ0ZHX1BBUlNFX0VOICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogZW5hYiBoZWFkZXIgcGFyc2luZyAqLworI2RlZmluZSAgICBIUF9DRkdfTlVNX0NQVV9NQVNLICAgICAgICAgICAgMHgwMDAwMDBGQyAvKiAjIHByb2Nlc3NvcnMgCisJCQkJCQkgICAgICAwID0gNjQuIDB4M2YgPSA2MyAqLworI2RlZmluZSAgICBIUF9DRkdfTlVNX0NQVV9TSElGVCAgICAgICAgICAgMgorI2RlZmluZSAgICBIUF9DRkdfU1lOX0lOQ19NQVNLICAgICAgICAgICAgMHgwMDAwMDEwMCAvKiBTWU4gYml0IHdvbid0IGluY3JlbWVudAorCQkJCQkJCVRDUCBzZXEgIyBieSBvbmUgd2hlbgorCQkJCQkJCXN0b3JlZCBpbiBGREJNICovCisjZGVmaW5lICAgIEhQX0NGR19UQ1BfVEhSRVNIX01BU0sgICAgICAgICAweDAwMEZGRTAwIC8qICMgYnl0ZXMgb2YgVENQIGRhdGEKKwkJCQkJCQluZWVkZWQgdG8gYmUgY29uc2lkZXJlZAorCQkJCQkJCWZvciByZWFzc2VtYmx5ICovCisjZGVmaW5lICAgIEhQX0NGR19UQ1BfVEhSRVNIX1NISUZUICAgICAgICA5CisKKy8qIGFjY2VzcyB0byBSWCBJbnN0cnVjdGlvbiBSQU0uIDUtYml0IHJlZ2lzdGVyL2NvdW50ZXIgaG9sZHMgYWRkcgorICogb2YgMzkgYml0IGVudHJ5IHRvIGJlIHJlYWQvd3JpdHRlbi4gMzIgTFNCIGluIF9EQVRBX0xPVy4gNyBNU0IgaW4gX0RBVEFfSEkuCisgKiBSWF9ETUFfRU4gbXVzdCBiZSAwIGZvciBSWCBpbnN0ciBQSU8gYWNjZXNzLiBEQVRBX0hJIHNob3VsZCBiZSBsYXN0IGFjY2VzcworICogb2Ygc2VxdWVuY2UuIAorICogREVGQVVMVDogdW5kZWZpbmVkCisgKi8KKyNkZWZpbmUgIFJFR19IUF9JTlNUUl9SQU1fQUREUiAgICAgICAgICAgICAweDQxNDQgIC8qIEhQIGluc3RydWN0aW9uIFJBTQorCQkJCQkJICAgICAgYWRkcmVzcyAqLworI2RlZmluZSAgICBIUF9JTlNUUl9SQU1fQUREUl9NQVNLICAgICAgICAgIDB4MDFGICAgLyogNS1iaXQgbWFzayAqLworI2RlZmluZSAgUkVHX0hQX0lOU1RSX1JBTV9EQVRBX0xPVyAgICAgICAgIDB4NDE0OCAgLyogSFAgaW5zdHJ1Y3Rpb24gUkFNCisJCQkJCQkgICAgICBkYXRhIGxvdyAqLworI2RlZmluZSAgICBIUF9JTlNUUl9SQU1fTE9XX09VVE1BU0tfTUFTSyAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgICAgSFBfSU5TVFJfUkFNX0xPV19PVVRNQVNLX1NISUZUICAwCisjZGVmaW5lICAgIEhQX0lOU1RSX1JBTV9MT1dfT1VUU0hJRlRfTUFTSyAgMHgwMDBGMDAwMAorI2RlZmluZSAgICBIUF9JTlNUUl9SQU1fTE9XX09VVFNISUZUX1NISUZUIDE2CisjZGVmaW5lICAgIEhQX0lOU1RSX1JBTV9MT1dfT1VURU5fTUFTSyAgICAgMHgwMDMwMDAwMAorI2RlZmluZSAgICBIUF9JTlNUUl9SQU1fTE9XX09VVEVOX1NISUZUICAgIDIwCisjZGVmaW5lICAgIEhQX0lOU1RSX1JBTV9MT1dfT1VUQVJHX01BU0sgICAgMHhGRkMwMDAwMAorI2RlZmluZSAgICBIUF9JTlNUUl9SQU1fTE9XX09VVEFSR19TSElGVCAgIDIyCisjZGVmaW5lICBSRUdfSFBfSU5TVFJfUkFNX0RBVEFfTUlEICAgICAgICAgMHg0MTRDICAvKiBIUCBpbnN0cnVjdGlvbiBSQU0gCisJCQkJCQkgICAgICBkYXRhIG1pZCAqLworI2RlZmluZSAgICBIUF9JTlNUUl9SQU1fTUlEX09VVEFSR19NQVNLICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgICAgSFBfSU5TVFJfUkFNX01JRF9PVVRBUkdfU0hJRlQgICAwCisjZGVmaW5lICAgIEhQX0lOU1RSX1JBTV9NSURfT1VUT1BfTUFTSyAgICAgMHgwMDAwMDAzQworI2RlZmluZSAgICBIUF9JTlNUUl9SQU1fTUlEX09VVE9QX1NISUZUICAgIDIKKyNkZWZpbmUgICAgSFBfSU5TVFJfUkFNX01JRF9GTkVYVF9NQVNLICAgICAweDAwMDAwN0MwCisjZGVmaW5lICAgIEhQX0lOU1RSX1JBTV9NSURfRk5FWFRfU0hJRlQgICAgNgorI2RlZmluZSAgICBIUF9JTlNUUl9SQU1fTUlEX0ZPRkZfTUFTSyAgICAgIDB4MDAwM0Y4MDAKKyNkZWZpbmUgICAgSFBfSU5TVFJfUkFNX01JRF9GT0ZGX1NISUZUICAgICAxMQorI2RlZmluZSAgICBIUF9JTlNUUl9SQU1fTUlEX1NORVhUX01BU0sgICAgIDB4MDA3QzAwMDAKKyNkZWZpbmUgICAgSFBfSU5TVFJfUkFNX01JRF9TTkVYVF9TSElGVCAgICAxOAorI2RlZmluZSAgICBIUF9JTlNUUl9SQU1fTUlEX1NPRkZfTUFTSyAgICAgIDB4M0Y4MDAwMDAKKyNkZWZpbmUgICAgSFBfSU5TVFJfUkFNX01JRF9TT0ZGX1NISUZUICAgICAyMworI2RlZmluZSAgICBIUF9JTlNUUl9SQU1fTUlEX09QX01BU0sgICAgICAgIDB4QzAwMDAwMDAKKyNkZWZpbmUgICAgSFBfSU5TVFJfUkFNX01JRF9PUF9TSElGVCAgICAgICAzMAorI2RlZmluZSAgUkVHX0hQX0lOU1RSX1JBTV9EQVRBX0hJICAgICAgICAgIDB4NDE1MCAgLyogSFAgaW5zdHJ1Y3Rpb24gUkFNCisJCQkJCQkgICAgICBkYXRhIGhpZ2ggKi8KKyNkZWZpbmUgICAgSFBfSU5TVFJfUkFNX0hJX1ZBTF9NQVNLICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lICAgIEhQX0lOU1RSX1JBTV9ISV9WQUxfU0hJRlQgICAgICAgMAorI2RlZmluZSAgICBIUF9JTlNUUl9SQU1fSElfTUFTS19NQVNLICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICAgSFBfSU5TVFJfUkFNX0hJX01BU0tfU0hJRlQgICAgICAxNgorCisvKiBQSU8gYWNjZXNzIGludG8gUlggSGVhZGVyIHBhcnNlciBkYXRhIFJBTSBhbmQgZmxvdyBkYXRhYmFzZS4KKyAqIDExLWJpdCByZWdpc3Rlci4gRGF0YSBmaWxscyB0aGUgTFNCIHBvcnRpb24gb2YgYnVzIGlmIGxlc3MgdGhhbiAzMiBiaXRzLgorICogREFUQV9SQU06IHdyaXRlIFJBTV9GREJfREFUQSB3aXRoIGluZGV4IHRvIGFjY2VzcyBEQVRBX1JBTS4KKyAqIFJBTSBieXRlcyA9IDQqKHggLSAxKSArIFszOjBdLiBlLmcuLCAwIC0+IFszOjBdLCAzMSAtPiBbMTIzOjEyMF0KKyAqIEZMT1dEQjogd3JpdGUgREFUQV9SQU1fRkRCIHJlZ2lzdGVyIGFuZCB0aGVuIHJlYWQvd3JpdGUgRkRCMS0xMiB0byBhY2Nlc3MgCisgKiBmbG93IGRhdGFiYXNlLgorICogUlhfRE1BX0VOIG11c3QgYmUgMCBmb3IgUlggcGFyc2VyIFJBTSBQSU8gYWNjZXNzLiBSWCBQYXJzZXIgUkFNIGRhdGEgcmVnCisgKiBzaG91bGQgYmUgdGhlIGxhc3Qgd3JpdGUgYWNjZXNzIG9mIHRoZSB3cml0ZSBzZXF1ZW5jZS4KKyAqIERFRkFVTFQ6IHVuZGVmaW5lZAorICovCisjZGVmaW5lICBSRUdfSFBfREFUQV9SQU1fRkRCX0FERFIgICAgICAgICAgMHg0MTU0ICAvKiBIUCBkYXRhIGFuZCBGREIKKwkJCQkJCSAgICAgIFJBTSBhZGRyZXNzICovCisjZGVmaW5lICAgIEhQX0RBVEFfUkFNX0ZEQl9EQVRBX01BU0sgICAgICAgMHgwMDFGICAvKiBzZWxlY3QgMSBvZiA4NiBieXRlIAorCQkJCQkJICAgICAgbG9jYXRpb25zIGluIGhlYWRlciAKKwkJCQkJCSAgICAgIHBhcnNlciBkYXRhIHJhbSB0byAKKwkJCQkJCSAgICAgIHJlYWQvd3JpdGUgKi8KKyNkZWZpbmUgICAgSFBfREFUQV9SQU1fRkRCX0ZEQl9NQVNLICAgICAgICAweDNGMDAgIC8qIDEgb2YgNjQgMzUzLWJpdCBsb2NhdGlvbnMKKwkJCQkJCSAgICAgIGluIHRoZSBmbG93IGRhdGFiYXNlICovCisjZGVmaW5lICBSRUdfSFBfREFUQV9SQU1fREFUQSAgICAgICAgICAgICAgMHg0MTU4ICAvKiBIUCBkYXRhIFJBTSBkYXRhICovCisKKy8qIEhQIGZsb3cgZGF0YWJhc2UgcmVnaXN0ZXJzOiAxIC0gMTIsIDB4NDE1QyAtIDB4NDE4OCwgNCA4LWJpdCBieXRlcyAKKyAqIEZMT1dfREIoMSkgPSBJUF9TQVsxMjc6OTZdLCBGTE9XX0RCKDIpID0gSVBfU0FbOTU6NjRdCisgKiBGTE9XX0RCKDMpID0gSVBfU0FbNjM6MzJdLCAgRkxPV19EQig0KSA9IElQX1NBWzMxOjBdIAorICogRkxPV19EQig1KSA9IElQX0RBWzEyNzo5Nl0sIEZMT1dfREIoNikgPSBJUF9EQVs5NTo2NF0KKyAqIEZMT1dfREIoNykgPSBJUF9EQVs2MzozMl0sICBGTE9XX0RCKDgpID0gSVBfREFbMzE6MF0KKyAqIEZMT1dfREIoOSkgPSB7VENQX1NQWzE1OjBdLFRDUF9EUFsxNTowXX0KKyAqIEZMT1dfREIoMTApID0gYml0IDAgaGFzIHZhbHVlIGZvciBmbG93IHZhbGlkCisgKiBGTE9XX0RCKDExKSA9IFRDUF9TRVFbNjM6MzJdLCBGTE9XX0RCKDEyKSA9IFRDUF9TRVFbMzE6MF0KKyAqLworI2RlZmluZSAgUkVHX0hQX0ZMT1dfREIwICAgICAgICAgICAgICAgICAgIDB4NDE1QyAgLyogSFAgZmxvdyBkYXRhYmFzZSAxIHJlZyAqLworI2RlZmluZSAgUkVHX0hQX0ZMT1dfREJOKHgpICAgICAgICAgICAgICAgIChSRUdfSFBfRkxPV19EQjAgKyAoeCkqNCkKKworLyogZGlhZ25vc3RpY3MgZm9yIFJYIEhlYWRlciBQYXJzZXIgYmxvY2suIAorICogQVNVTjogdGhlIGhlYWRlciBwYXJzZXIgc3RhdGUgbWFjaGluZSByZWdpc3RlciBpcyB1c2VkIGZvciBkaWFnbm9zdGljcworICogcHVycG9zZXMuIGhvd2V2ZXIsIHRoZSBzcGVjIGRvZXNuJ3QgaGF2ZSBhbnkgZGV0YWlscyBvbiBpdC4KKyAqLworI2RlZmluZSAgUkVHX0hQX1NUQVRFX01BQ0hJTkUgICAgICAgICAgICAgIDB4NDE4QyAgLyogKHJvKSBIUCBzdGF0ZSBtYWNoaW5lICovCisjZGVmaW5lICBSRUdfSFBfU1RBVFVTMCAgICAgICAgICAgICAgICAgICAgMHg0MTkwICAvKiAocm8pIEhQIHN0YXR1cyAxICovCisjZGVmaW5lICAgIEhQX1NUQVRVUzBfU0FQX01BU0sgICAgICAgICAgICAgMHhGRkZGMDAwMCAvKiBTQVAgKi8KKyNkZWZpbmUgICAgSFBfU1RBVFVTMF9MM19PRkZfTUFTSyAgICAgICAgICAweDAwMDBGRTAwIC8qIEwzIG9mZnNldCAqLworI2RlZmluZSAgICBIUF9TVEFUVVMwX0xCX0NQVU5VTV9NQVNLICAgICAgIDB4MDAwMDAxRjggLyogbG9hZCBiYWxhbmNpbmcgQ1BVIAorCQkJCQkJCSBudW1iZXIgKi8KKyNkZWZpbmUgICAgSFBfU1RBVFVTMF9IUlBfT1BDT0RFX01BU0sgICAgICAweDAwMDAwMDA3IC8qIEhSUCBvcGNvZGUgKi8KKworI2RlZmluZSAgUkVHX0hQX1NUQVRVUzEgICAgICAgICAgICAgICAgICAgIDB4NDE5NCAgLyogKHJvKSBIUCBzdGF0dXMgMiAqLworI2RlZmluZSAgICBIUF9TVEFUVVMxX0FDQ1VSMl9NQVNLICAgICAgICAgIDB4RTAwMDAwMDAgLyogYWNjdSBSMls2OjRdICovCisjZGVmaW5lICAgIEhQX1NUQVRVUzFfRkxPV0lEX01BU0sgICAgICAgICAgMHgxRjgwMDAwMCAvKiBmbG93IGlkICovCisjZGVmaW5lICAgIEhQX1NUQVRVUzFfVENQX09GRl9NQVNLICAgICAgICAgMHgwMDdGMDAwMCAvKiB0Y3AgcGF5bG9hZCBvZmZzZXQgKi8KKyNkZWZpbmUgICAgSFBfU1RBVFVTMV9UQ1BfU0laRV9NQVNLICAgICAgICAweDAwMDBGRkZGIC8qIHRjcCBwYXlsb2FkIHNpemUgKi8KKworI2RlZmluZSAgUkVHX0hQX1NUQVRVUzIgICAgICAgICAgICAgICAgICAgIDB4NDE5OCAgLyogKHJvKSBIUCBzdGF0dXMgMyAqLworI2RlZmluZSAgICBIUF9TVEFUVVMyX0FDQ1VSMl9NQVNLICAgICAgICAgIDB4RjAwMDAwMDAgLyogYWNjdSBSMlszOjBdICovCisjZGVmaW5lICAgIEhQX1NUQVRVUzJfQ1NVTV9PRkZfTUFTSyAgICAgICAgMHgwN0YwMDAwMCAvKiBjaGVja3N1bSBzdGFydCAKKwkJCQkJCQkgc3RhcnQgb2Zmc2V0ICovCisjZGVmaW5lICAgIEhQX1NUQVRVUzJfQUNDVVIxX01BU0sgICAgICAgICAgMHgwMDBGRTAwMCAvKiBhY2N1IFIxICovCisjZGVmaW5lICAgIEhQX1NUQVRVUzJfRk9SQ0VfRFJPUCAgICAgICAgICAgMHgwMDAwMTAwMCAvKiBmb3JjZSBkcm9wICovCisjZGVmaW5lICAgIEhQX1NUQVRVUzJfQldPX1JFQVNTTSAgICAgICAgICAgMHgwMDAwMDgwMCAvKiBiYXRjaGluZyB3L28gCisJCQkJCQkJIHJlYXNzZW1ibHkgKi8KKyNkZWZpbmUgICAgSFBfU1RBVFVTMl9KSF9TUExJVF9FTiAgICAgICAgICAweDAwMDAwNDAwIC8qIGp1bWJvIGhlYWRlciBzcGxpdAorCQkJCQkJCSBlbmFibGUgKi8KKyNkZWZpbmUgICAgSFBfU1RBVFVTMl9GT1JDRV9UQ1BfTk9DSEVDSyAgICAweDAwMDAwMjAwIC8qIGZvcmNlIHRjcCBubyBwYXlsb2FkCisJCQkJCQkJIGNoZWNrICovCisjZGVmaW5lICAgIEhQX1NUQVRVUzJfREFUQV9NQVNLX1pFUk8gICAgICAgMHgwMDAwMDEwMCAvKiBtYXNrIG9mIGRhdGEgbGVuZ3RoCisJCQkJCQkJIGVxdWFsIHRvIHplcm8gKi8KKyNkZWZpbmUgICAgSFBfU1RBVFVTMl9GT1JDRV9UQ1BfQ0hFQ0sgICAgICAweDAwMDAwMDgwIC8qIGZvcmNlIHRjcCBwYXlsb2FkIAorCQkJCQkJCSBjaGsgKi8KKyNkZWZpbmUgICAgSFBfU1RBVFVTMl9NQVNLX1RDUF9USFJFU0ggICAgICAweDAwMDAwMDQwIC8qIG1hc2sgb2YgcGF5bG9hZCAKKwkJCQkJCQkgdGhyZXNob2xkICovCisjZGVmaW5lICAgIEhQX1NUQVRVUzJfTk9fQVNTSVNUICAgICAgICAgICAgMHgwMDAwMDAyMCAvKiBubyBhc3Npc3QgKi8KKyNkZWZpbmUgICAgSFBfU1RBVFVTMl9DVFJMX1BBQ0tFVF9GTEFHICAgICAweDAwMDAwMDEwIC8qIGNvbnRyb2wgcGFja2V0IGZsYWcgKi8KKyNkZWZpbmUgICAgSFBfU1RBVFVTMl9UQ1BfRkxBR19DSEVDSyAgICAgICAweDAwMDAwMDA4IC8qIHRjcCBmbGFnIGNoZWNrICovCisjZGVmaW5lICAgIEhQX1NUQVRVUzJfU1lOX0ZMQUcgICAgICAgICAgICAgMHgwMDAwMDAwNCAvKiBzeW4gZmxhZyAqLworI2RlZmluZSAgICBIUF9TVEFUVVMyX1RDUF9DSEVDSyAgICAgICAgICAgIDB4MDAwMDAwMDIgLyogdGNwIHBheWxvYWQgY2hrICovCisjZGVmaW5lICAgIEhQX1NUQVRVUzJfVENQX05PQ0hFQ0sgICAgICAgICAgMHgwMDAwMDAwMSAvKiB0Y3Agbm8gcGF5bG9hZCBjaGsgKi8KKworLyogQklTVCBmb3IgaGVhZGVyIHBhcnNlcihIUCkgYW5kIGZsb3cgZGF0YWJhc2UgbWVtb3JpZXMgKEZEQk0pLiBzZXQgX1NUQVJUCisgKiB0byBzdGFydCBCSVNULiBjb250cm9sbGVyIGNsZWFycyBfU1RBUlQgb24gY29tcGxldGlvbi4gX1NUQVJUIGNhbiBhbHNvCisgKiBiZSBjbGVhcmVkIHRvIGZvcmNlIHRlcm1pbmF0aW9uIG9mIEJJU1QuIGEgYml0IHNldCBpbmRpY2F0ZXMgdGhhdCB0aGF0CisgKiBtZW1vcnkgcGFzc2VkIGl0cyBCSVNULgorICovCisjZGVmaW5lICBSRUdfSFBfUkFNX0JJU1QgICAgICAgICAgICAgICAgICAgMHg0MTlDICAvKiBIUCBSQU0gQklTVCByZWcgKi8KKyNkZWZpbmUgICAgSFBfUkFNX0JJU1RfSFBfREFUQV9QQVNTICAgICAgICAweDgwMDAwMDAwIC8qIEhQIGRhdGEgcmFtICovCisjZGVmaW5lICAgIEhQX1JBTV9CSVNUX0hQX0lOU1RSMF9QQVNTICAgICAgMHg0MDAwMDAwMCAvKiBIUCBpbnN0ciByYW0gMCAqLworI2RlZmluZSAgICBIUF9SQU1fQklTVF9IUF9JTlNUUjFfUEFTUyAgICAgIDB4MjAwMDAwMDAgLyogSFAgaW5zdHIgcmFtIDEgKi8KKyNkZWZpbmUgICAgSFBfUkFNX0JJU1RfSFBfSU5TVFIyX1BBU1MgICAgICAweDEwMDAwMDAwIC8qIEhQIGluc3RyIHJhbSAyICovCisjZGVmaW5lICAgIEhQX1JBTV9CSVNUX0ZEQk1fQUdFMF9QQVNTICAgICAgMHgwODAwMDAwMCAvKiBGREJNIGFnaW5nIFJBTTAgKi8KKyNkZWZpbmUgICAgSFBfUkFNX0JJU1RfRkRCTV9BR0UxX1BBU1MgICAgICAweDA0MDAwMDAwIC8qIEZEQk0gYWdpbmcgUkFNMSAqLworI2RlZmluZSAgICBIUF9SQU1fQklTVF9GREJNX0ZMT1dJRDAwX1BBU1MgIDB4MDIwMDAwMDAgLyogRkRCTSBmbG93aWQgUkFNMCAKKwkJCQkJCQkgYmFuayAwICovCisjZGVmaW5lICAgIEhQX1JBTV9CSVNUX0ZEQk1fRkxPV0lEMTBfUEFTUyAgMHgwMTAwMDAwMCAvKiBGREJNIGZsb3dpZCBSQU0xCisJCQkJCQkJIGJhbmsgMCAqLworI2RlZmluZSAgICBIUF9SQU1fQklTVF9GREJNX0ZMT1dJRDIwX1BBU1MgIDB4MDA4MDAwMDAgLyogRkRCTSBmbG93aWQgUkFNMgorCQkJCQkJCSBiYW5rIDAgKi8KKyNkZWZpbmUgICAgSFBfUkFNX0JJU1RfRkRCTV9GTE9XSUQzMF9QQVNTICAweDAwNDAwMDAwIC8qIEZEQk0gZmxvd2lkIFJBTTMKKwkJCQkJCQkgYmFuayAwICovCisjZGVmaW5lICAgIEhQX1JBTV9CSVNUX0ZEQk1fRkxPV0lEMDFfUEFTUyAgMHgwMDIwMDAwMCAvKiBGREJNIGZsb3dpZCBSQU0wCisJCQkJCQkJIGJhbmsgMSAqLworI2RlZmluZSAgICBIUF9SQU1fQklTVF9GREJNX0ZMT1dJRDExX1BBU1MgIDB4MDAxMDAwMDAgLyogRkRCTSBmbG93aWQgUkFNMQorCQkJCQkJCSBiYW5rIDIgKi8KKyNkZWZpbmUgICAgSFBfUkFNX0JJU1RfRkRCTV9GTE9XSUQyMV9QQVNTICAweDAwMDgwMDAwIC8qIEZEQk0gZmxvd2lkIFJBTTIKKwkJCQkJCQkgYmFuayAxICovCisjZGVmaW5lICAgIEhQX1JBTV9CSVNUX0ZEQk1fRkxPV0lEMzFfUEFTUyAgMHgwMDA0MDAwMCAvKiBGREJNIGZsb3dpZCBSQU0zCisJCQkJCQkJIGJhbmsgMSAqLworI2RlZmluZSAgICBIUF9SQU1fQklTVF9GREJNX1RDUFNFUV9QQVNTICAgIDB4MDAwMjAwMDAgLyogRkRCTSB0Y3Agc2VxdWVuY2UKKwkJCQkJCQkgUkFNICovCisjZGVmaW5lICAgIEhQX1JBTV9CSVNUX1NVTU1BUlkgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBhbGwgQklTVCB0ZXN0cyAqLworI2RlZmluZSAgICBIUF9SQU1fQklTVF9TVEFSVCAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogc3RhcnQvc3RvcCBCSVNUICovCisKKworLyoqIE1BQyByZWdpc3RlcnMuICAqKi8KKy8qIHJlc2V0IGJpdHMgYXJlIHNldCB1c2luZyBhIFBJTyB3cml0ZSBhbmQgc2VsZi1jbGVhcmVkIGFmdGVyIHRoZSBjb21tYW5kCisgKiBleGVjdXRpb24gaGFzIGNvbXBsZXRlZC4KKyAqLworI2RlZmluZSAgUkVHX01BQ19UWF9SRVNFVCAgICAgICAgICAgICAgICAgIDB4NjAwMCAgLyogVFggTUFDIHNvZnR3YXJlIHJlc2V0CisJCQkJCQkgICAgICBjb21tYW5kIChkZWZhdWx0OiAweDApICovCisjZGVmaW5lICBSRUdfTUFDX1JYX1JFU0VUICAgICAgICAgICAgICAgICAgMHg2MDA0ICAvKiBSWCBNQUMgc29mdHdhcmUgcmVzZXQKKwkJCQkJCSAgICAgIGNvbW1hbmQgKGRlZmF1bHQ6IDB4MCkgKi8KKy8qIGV4ZWN1dGUgYSBwYXVzZSBmbG93IGNvbnRyb2wgZnJhbWUgdHJhbnNtaXNzaW9uCisgREVGQVVMVDogMHgwWFhYWCAqLworI2RlZmluZSAgUkVHX01BQ19TRU5EX1BBVVNFICAgICAgICAgICAgICAgIDB4NjAwOCAgLyogc2VuZCBwYXVzZSBjb21tYW5kIHJlZyAqLworI2RlZmluZSAgICBNQUNfU0VORF9QQVVTRV9USU1FX01BU0sgICAgICAgIDB4MDAwMEZGRkYgLyogdmFsdWUgb2YgcGF1c2UgdGltZSAKKwkJCQkJCQkgdG8gYmUgc2VudCBvbiBuZXR3b3JrCisJCQkJCQkJIGluIHVuaXRzIG9mIHNsb3QgCisJCQkJCQkJIHRpbWVzICovCisjZGVmaW5lICAgIE1BQ19TRU5EX1BBVVNFX1NFTkQgICAgICAgICAgICAgMHgwMDAxMDAwMCAvKiBzZW5kIHBhdXNlIGZsb3cgY3RybAorCQkJCQkJCSBmcmFtZSBvbiBuZXR3b3JrICovCisKKy8qIGJpdCBzZXQgaW5kaWNhdGVzIHRoYXQgZXZlbnQgb2NjdXJyZWQuIGF1dG8tY2xlYXJlZCB3aGVuIHN0YXR1cyByZWdpc3RlcgorICogaXMgcmVhZCBhbmQgaGF2ZSBjb3JyZXNwb25kaW5nIG1hc2sgYml0cyBpbiBtYXNrIHJlZ2lzdGVyLiBldmVudHMgd2lsbCAKKyAqIHRyaWdnZXIgYW4gaW50ZXJydXB0IGlmIHRoZSBjb3JyZXNwb25kaW5nIG1hc2sgYml0IGlzIDAuIAorICogc3RhdHVzIHJlZ2lzdGVyIGRlZmF1bHQ6IDB4MDAwMDAwMDAKKyAqIG1hc2sgcmVnaXN0ZXIgZGVmYXVsdCA9IDB4RkZGRkZGRkYgb24gcmVzZXQKKyAqLworI2RlZmluZSAgUkVHX01BQ19UWF9TVEFUVVMgICAgICAgICAgICAgICAgIDB4NjAxMCAgLyogVFggTUFDIHN0YXR1cyByZWcgKi8KKyNkZWZpbmUgICAgTUFDX1RYX0ZSQU1FX1hNSVQgICAgICAgICAgICAgICAweDAwMDEgIC8qIHN1Y2Nlc3NmdWwgZnJhbWUgCisJCQkJCQkgICAgICB0cmFuc21pc2lvbiAqLworI2RlZmluZSAgICBNQUNfVFhfVU5ERVJSVU4gICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogdGVybWluYXRlZCBmcmFtZSAKKwkJCQkJCSAgICAgIHRyYW5zbWlzc2lvbiBkdWUgdG8KKwkJCQkJCSAgICAgIGRhdGEgc3RhcnZhdGlvbiBpbiB0aGUgCisJCQkJCQkgICAgICB4bWl0IGRhdGEgcGF0aCAqLworI2RlZmluZSAgICBNQUNfVFhfTUFYX1BBQ0tFVF9FUlIgICAgICAgICAgIDB4MDAwNCAgLyogZnJhbWUgZXhjZWVkcyBtYXggYWxsb3dlZAorCQkJCQkJICAgICAgbGVuZ3RoIHBhc3NlZCB0byBUWCBNQUMKKwkJCQkJCSAgICAgIGJ5IHRoZSBETUEgZW5naW5lICovCisjZGVmaW5lICAgIE1BQ19UWF9DT0xMX05PUk1BTCAgICAgICAgICAgICAgMHgwMDA4ICAvKiByb2xsb3ZlciBvZiB0aGUgbm9ybWFsCisJCQkJCQkgICAgICBjb2xsaXNpb24gY291bnRlciAqLworI2RlZmluZSAgICBNQUNfVFhfQ09MTF9FWENFU1MgICAgICAgICAgICAgIDB4MDAxMCAgLyogcm9sbG92ZXIgb2YgdGhlIGV4Y2Vzc2l2ZQorCQkJCQkJICAgICAgY29sbGlzaW9uIGNvdW50ZXIgKi8KKyNkZWZpbmUgICAgTUFDX1RYX0NPTExfTEFURSAgICAgICAgICAgICAgICAweDAwMjAgIC8qIHJvbGxvdmVyIG9mIHRoZSBsYXRlCisJCQkJCQkgICAgICBjb2xsaXNpb24gY291bnRlciAqLworI2RlZmluZSAgICBNQUNfVFhfQ09MTF9GSVJTVCAgICAgICAgICAgICAgIDB4MDA0MCAgLyogcm9sbG92ZXIgb2YgdGhlIGZpcnN0CisJCQkJCQkgICAgICBjb2xsaXNpb24gY291bnRlciAqLworI2RlZmluZSAgICBNQUNfVFhfREVGRVJfVElNRVIgICAgICAgICAgICAgIDB4MDA4MCAgLyogcm9sbG92ZXIgb2YgdGhlIGRlZmVyCisJCQkJCQkgICAgICB0aW1lciAqLworI2RlZmluZSAgICBNQUNfVFhfUEVBS19BVFRFTVBUUyAgICAgICAgICAgIDB4MDEwMCAgLyogcm9sbG92ZXIgb2YgdGhlIHBlYWsKKwkJCQkJCSAgICAgIGF0dGVtcHRzIGNvdW50ZXIgKi8KKworI2RlZmluZSAgUkVHX01BQ19SWF9TVEFUVVMgICAgICAgICAgICAgICAgIDB4NjAxNCAgLyogUlggTUFDIHN0YXR1cyByZWcgKi8KKyNkZWZpbmUgICAgTUFDX1JYX0ZSQU1FX1JFQ1YgICAgICAgICAgICAgICAweDAwMDEgIC8qIHN1Y2Nlc3NmdWwgcmVjZWlwdCBvZgorCQkJCQkJICAgICAgYSBmcmFtZSAqLworI2RlZmluZSAgICBNQUNfUlhfT1ZFUkZMT1cgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogZHJvcHBlZCBmcmFtZSBkdWUgdG8gCisJCQkJCQkgICAgICBSWCBGSUZPIG92ZXJmbG93ICovCisjZGVmaW5lICAgIE1BQ19SWF9GUkFNRV9DT1VOVCAgICAgICAgICAgICAgMHgwMDA0ICAvKiByb2xsb3ZlciBvZiByZWNlaXZlIGZyYW1lCisJCQkJCQkgICAgICBjb3VudGVyICovCisjZGVmaW5lICAgIE1BQ19SWF9BTElHTl9FUlIgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiByb2xsb3ZlciBvZiBhbGlnbm1lbnQKKwkJCQkJCSAgICAgIGVycm9yIGNvdW50ZXIgKi8KKyNkZWZpbmUgICAgTUFDX1JYX0NSQ19FUlIgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIHJvbGxvdmVyIG9mIGNyYyBlcnJvcgorCQkJCQkJICAgICAgY291bnRlciAqLworI2RlZmluZSAgICBNQUNfUlhfTEVOX0VSUiAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogcm9sbG92ZXIgb2YgbGVuZ3RoIAorCQkJCQkJICAgICAgZXJyb3IgY291bnRlciAqLworI2RlZmluZSAgICBNQUNfUlhfVklPTF9FUlIgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogcm9sbG92ZXIgb2YgY29kZSAKKwkJCQkJCSAgICAgIHZpb2xhdGlvbiBlcnJvciAqLworCisvKiBERUZBVUxUOiAweFhYWFgwMDAwIG9uIHJlc2V0ICovCisjZGVmaW5lICBSRUdfTUFDX0NUUkxfU1RBVFVTICAgICAgICAgICAgICAgMHg2MDE4ICAvKiBNQUMgY29udHJvbCBzdGF0dXMgcmVnICovCisjZGVmaW5lICAgIE1BQ19DVFJMX1BBVVNFX1JFQ0VJVkVEICAgICAgICAgMHgwMDAwMDAwMSAgLyogc3VjY2Vzc2Z1bCAKKwkJCQkJCQkgIHJlY2VwdGlvbiBvZiBhIAorCQkJCQkJCSAgcGF1c2UgY29udHJvbCAKKwkJCQkJCQkgIGZyYW1lICovCisjZGVmaW5lICAgIE1BQ19DVFJMX1BBVVNFX1NUQVRFICAgICAgICAgICAgMHgwMDAwMDAwMiAgLyogTUFDIGhhcyBtYWRlIGEgCisJCQkJCQkJICB0cmFuc2l0aW9uIGZyb20gCisJCQkJCQkJICAibm90IHBhdXNlZCIgdG8gCisJCQkJCQkJICAicGF1c2VkIiAqLworI2RlZmluZSAgICBNQUNfQ1RSTF9OT1BBVVNFX1NUQVRFICAgICAgICAgIDB4MDAwMDAwMDQgIC8qIE1BQyBoYXMgbWFkZSBhIAorCQkJCQkJCSAgdHJhbnNpdGlvbiBmcm9tIAorCQkJCQkJCSAgInBhdXNlZCIgdG8gIm5vdAorCQkJCQkJCSAgcGF1c2VkIiAqLworI2RlZmluZSAgICBNQUNfQ1RSTF9QQVVTRV9USU1FX01BU0sgICAgICAgIDB4RkZGRjAwMDAgIC8qIHZhbHVlIG9mIHBhdXNlIHRpbWUKKwkJCQkJCQkgIG9wZXJhbmQgdGhhdCB3YXMgCisJCQkJCQkJICByZWNlaXZlZCBpbiB0aGUgbGFzdAorCQkJCQkJCSAgcGF1c2UgZmxvdyBjb250cm9sCisJCQkJCQkJICBmcmFtZSAqLworCisvKiBsYXlvdXQgaWRlbnRpY2FsIHRvIFRYIE1BQ1s4OjBdICovCisjZGVmaW5lICBSRUdfTUFDX1RYX01BU0sgICAgICAgICAgICAgICAgICAgMHg2MDIwICAvKiBUWCBNQUMgbWFzayByZWcgKi8KKy8qIGxheW91dCBpZGVudGljYWwgdG8gUlggTUFDWzY6MF0gKi8KKyNkZWZpbmUgIFJFR19NQUNfUlhfTUFTSyAgICAgICAgICAgICAgICAgICAweDYwMjQgIC8qIFJYIE1BQyBtYXNrIHJlZyAqLworLyogbGF5b3V0IGlkZW50aWNhbCB0byBDVFJMIE1BQ1syOjBdICovCisjZGVmaW5lICBSRUdfTUFDX0NUUkxfTUFTSyAgICAgICAgICAgICAgICAgMHg2MDI4ICAvKiBNQUMgY29udHJvbCBtYXNrIHJlZyAqLworCisvKiB0byBlbnN1cmUgcHJvcGVyIG9wZXJhdGlvbiwgQ0ZHX0VOIG11c3QgYmUgY2xlYXJlZCB0byAwIGFuZCBhIGRlbGF5IAorICogaW1wb3NlZCBiZWZvcmUgd3JpdGVzIHRvIG90aGVyIGJpdHMgaW4gdGhlIFRYX01BQ19DRkcgcmVnaXN0ZXIgb3IgYW55IG9mCisgKiB0aGUgTUFDIHBhcmFtZXRlcnMgaXMgcGVyZm9ybWVkLiBkZWxheSBkZXBlbmRlbnQgdXBvbiB0aW1lIHJlcXVpcmVkIHRvCisgKiB0cmFuc21pdCBhIG1heGltdW0gc2l6ZSBmcmFtZSAoPSBNQUNfRlJBTUVTSVpFX01BWCo4L01icHMpLiBlLmcuLAorICogdGhlIGRlbGF5IGZvciBhIDE1MTgtYnl0ZSBmcmFtZSBvbiBhIDEwME1icHMgbmV0d29yayBpcyAxMjV1cy4gCisgKiBhbHRlcm5hdGl2ZWx5LCBqdXN0IHBvbGwgVFhfQ0ZHX0VOIHVudGlsIGl0IHJlYWRzIGJhY2sgYXMgMC4gCisgKiBOT1RFOiBvbiBoYWxmLWR1cGxleCAxR2JwcywgVFhfQ0ZHX0NBUlJJRVJfRVhURU5EIGFuZCAKKyAqIFJYX0NGR19DQVJSSUVSX0VYVEVORCBzaG91bGQgYmUgc2V0IGFuZCB0aGUgU0xPVF9USU1FIHJlZ2lzdGVyIHNob3VsZAorICogYmUgMHgyMDAgKHNsb3QgdGltZSBvZiA1MTIgYnl0ZXMpCisgKi8KKyNkZWZpbmUgIFJFR19NQUNfVFhfQ0ZHICAgICAgICAgICAgICAgICAweDYwMzAgIC8qIFRYIE1BQyBjb25maWcgcmVnICovCisjZGVmaW5lICAgIE1BQ19UWF9DRkdfRU4gICAgICAgICAgICAgICAgMHgwMDAxICAvKiBlbmFibGUgVFggTUFDLiAwIHdpbGwKKwkJCQkJCSAgICAgIGZvcmNlIFRYTUFDIHN0YXRlCisJCQkJCQkgICAgICBtYWNoaW5lIHRvIHJlbWFpbiBpbgorCQkJCQkJICAgICAgaWRsZSBzdGF0ZSBvciB0byAKKwkJCQkJCSAgICAgIHRyYW5zaXRpb24gdG8gaWRsZSBzdGF0ZQorCQkJCQkJICAgICAgb24gY29tcGxldGlvbiBvZiBhbgorCQkJCQkJICAgICAgb25nb2luZyBwYWNrZXQuICovCisjZGVmaW5lICAgIE1BQ19UWF9DRkdfSUdOT1JFX0NBUlJJRVIgICAgMHgwMDAyICAvKiBkaXNhYmxlIENTTUEvQ0QgZGVmZXJyYWwKKwkJCQkJCSAgIHByb2Nlc3MuIHNldCB0byAxIHdoZW4gCisJCQkJCQkgICBmdWxsIGR1cGxleCBhbmQgMCB3aGVuCisJCQkJCQkgICBoYWxmIGR1cGxleCAqLworI2RlZmluZSAgICBNQUNfVFhfQ0ZHX0lHTk9SRV9DT0xMICAgICAgIDB4MDAwNCAgLyogZGlzYWJsZSBDU01BL0NEIGJhY2tvZmYKKwkJCQkJCSAgIGFsZ29yaXRobS4gc2V0IHRvIDEgd2hlbgorCQkJCQkJICAgZnVsbCBkdXBsZXggYW5kIDAgd2hlbgorCQkJCQkJICAgaGFsZiBkdXBsZXggKi8KKyNkZWZpbmUgICAgTUFDX1RYX0NGR19JUEdfRU4gICAgICAgICAgICAweDAwMDggIC8qIGVuYWJsZSBleHRlbnNpb24gb2YgdGhlCisJCQkJCQkgICBSeC10by1UWCBJUEcuIGFmdGVyIAorCQkJCQkJICAgcmVjZWl2aW5nIGEgZnJhbWUsIFRYIAorCQkJCQkJICAgTUFDIHdpbGwgcmVzZXQgaXRzIAorCQkJCQkJICAgZGVmZXJyYWwgcHJvY2VzcyB0byAKKwkJCQkJCSAgIGNhcnJpZXIgc2Vuc2UgZm9yIHRoZQorCQkJCQkJICAgYW1vdW50IG9mIHRpbWUgPSBJUEcwICsKKwkJCQkJCSAgIElQRzEgYW5kIGNvbW1pdCB0byAKKwkJCQkJCSAgIHRyYW5zbWlzc2lvbiBmb3IgdGltZQorCQkJCQkJICAgc3BlY2lmaWVkIGluIElQRzIuIHdoZW4KKwkJCQkJCSAgIDAgb3Igd2hlbiB4bWl0dGluZyBmcmFtZXMKKwkJCQkJCSAgIGJhY2stdG8tcGFjayAoVHgtdG8tVHgKKwkJCQkJCSAgIElQRyksIFRYIE1BQyBpZ25vcmVzIAorCQkJCQkJICAgSVBHMCBhbmQgd2lsbCBvbmx5IHVzZQorCQkJCQkJICAgSVBHMSBmb3IgZGVmZXJyYWwgdGltZS4KKwkJCQkJCSAgIElQRzIgc3RpbGwgdXNlZC4gKi8KKyNkZWZpbmUgICAgTUFDX1RYX0NGR19ORVZFUl9HSVZFX1VQX0VOICAweDAwMTAgIC8qIFRYIE1BQyB3aWxsIG5vdCBlYXNpbHkKKwkJCQkJCSAgIGdpdmUgdXAgb24gZnJhbWUgCisJCQkJCQkgICB4bWlzc2lvbi4gaWYgYmFja29mZiAKKwkJCQkJCSAgIGFsZ29yaXRobSByZWFjaGVzIHRoZQorCQkJCQkJICAgQVRURU1QVF9MSU1JVCwgaXQgd2lsbAorCQkJCQkJICAgY2xlYXIgYXR0ZW1wdHMgY291bnRlcgorCQkJCQkJICAgYW5kIGNvbnRpbnVlIHRyeWluZyB0bworCQkJCQkJICAgc2VuZCB0aGUgZnJhbWUgYXMgCisJCQkJCQkgICBzcGVjaWZpZWQgYnkgCisJCQkJCQkgICBHSVZFX1VQX0xJTS4gd2hlbiAwLAorCQkJCQkJICAgVFggTUFDIHdpbGwgZXhlY3V0ZSAKKwkJCQkJCSAgIHN0YW5kYXJkIENTTUEvQ0QgcHJvdC4gKi8KKyNkZWZpbmUgICAgTUFDX1RYX0NGR19ORVZFUl9HSVZFX1VQX0xJTSAweDAwMjAgIC8qIHdoZW4gc2V0LCBUWCBNQUMgd2lsbAorCQkJCQkJICAgY29udGludWUgdG8gdHJ5IHRvIHhtaXQKKwkJCQkJCSAgIHVudGlsIHN1Y2Nlc3NmdWwuIHdoZW4KKwkJCQkJCSAgIDAsIFRYIE1BQyB3aWxsIGNvbnRpbnVlCisJCQkJCQkgICB0byB0cnkgeG1pdHRpbmcgdW50aWwKKwkJCQkJCSAgIHN1Y2Nlc3NmdWwgb3IgYmFja29mZgorCQkJCQkJICAgYWxnb3JpdGhtIHJlYWNoZXMgCisJCQkJCQkgICBBVFRFTVBUX0xJTUlUKjE2ICovCisjZGVmaW5lICAgIE1BQ19UWF9DRkdfTk9fQkFDS09GRiAgICAgICAgMHgwMDQwICAvKiBtb2RpZnkgQ1NNQS9DRCB0byBkaXNhYmxlCisJCQkJCQkgICBiYWNrb2ZmIGFsZ29yaXRobS4gVFgKKwkJCQkJCSAgIE1BQyB3aWxsIG5vdCBiYWNrIG9mZgorCQkJCQkJICAgYWZ0ZXIgYSB4bWlzc2lvbiBhdHRlbXB0CisJCQkJCQkgICB0aGF0IHJlc3VsdGVkIGluIGEgCisJCQkJCQkgICBjb2xsaXNpb24uICovCisjZGVmaW5lICAgIE1BQ19UWF9DRkdfU0xPV19ET1dOICAgICAgICAgMHgwMDgwICAvKiBtb2RpZnkgQ1NNQS9DRCBzbyB0aGF0CisJCQkJCQkgICBkZWZlcnJhbCBwcm9jZXNzIGlzIHJlc2V0CisJCQkJCQkgICBpbiByZXNwb25zZSB0byBjYXJyaWVyCisJCQkJCQkgICBzZW5zZSBkdXJpbmcgdGhlIGVudGlyZQorCQkJCQkJICAgZHVyYXRpb24gb2YgSVBHLiBUWCBNQUMKKwkJCQkJCSAgIHdpbGwgb25seSBjb21taXQgdG8gZnJhbWUKKwkJCQkJCSAgIHhtaXNzaW9uIGFmdGVyIGZyYW1lCisJCQkJCQkgICB4bWlzc2lvbiBoYXMgYWN0dWFsbHkKKwkJCQkJCSAgIGJlZ3VuLiAqLworI2RlZmluZSAgICBNQUNfVFhfQ0ZHX05PX0ZDUyAgICAgICAgICAgIDB4MDEwMCAgLyogVFggTUFDIHdpbGwgbm90IGdlbmVyYXRlCisJCQkJCQkgICBDUkMgZm9yIGFsbCB4bWl0dGVkCisJCQkJCQkgICBwYWNrZXRzLiB3aGVuIGNsZWFyLCBDUkMKKwkJCQkJCSAgIGdlbmVyYXRpb24gaXMgZGVwZW5kZW50CisJCQkJCQkgICB1cG9uIE5PX0NSQyBiaXQgaW4gdGhlCisJCQkJCQkgICB4bWl0IGNvbnRyb2wgd29yZCBmcm9tIAorCQkJCQkJICAgVFggRE1BICovCisjZGVmaW5lICAgIE1BQ19UWF9DRkdfQ0FSUklFUl9FWFRFTkQgICAgMHgwMjAwICAvKiBlbmFibGVzIHhtaXQgcGFydCBvZiB0aGUKKwkJCQkJCSAgIGNhcnJpZXIgZXh0ZW5zaW9uIAorCQkJCQkJICAgZmVhdHVyZS4gdGhpcyBhbGxvd3MgZm9yIAorCQkJCQkJICAgbG9uZ2VyIGNvbGxpc2lvbiBkb21haW5zCisJCQkJCQkgICBieSBleHRlbmRpbmcgdGhlIGNhcnJpZXIKKwkJCQkJCSAgIGFuZCBjb2xsaXNpb24gd2luZG93CisJCQkJCQkgICBmcm9tIHRoZSBlbmQgb2YgRkNTIHVudGlsCisJCQkJCQkgICB0aGUgZW5kIG9mIHRoZSBzbG90IHRpbWUKKwkJCQkJCSAgIGlmIG5lY2Vzc2FyeS4gUmVxdWlyZWQKKwkJCQkJCSAgIGZvciBoYWxmLWR1cGxleCBhdCAxR2JwcywKKwkJCQkJCSAgIGNsZWFyIG90aGVyd2lzZS4gKi8KKworLyogd2hlbiBDUkMgaXMgbm90IHN0cmlwcGVkLCByZWFzc2VtYmx5IHBhY2tldHMgd2lsbCBub3QgY29udGFpbiB0aGUgQ1JDLiAKKyAqIHRoZXNlIHdpbGwgYmUgc3RyaXBwZWQgYnkgSFJQIGJlY2F1c2UgaXQgcmVhc3NlbWJsZXMgbGF5ZXIgNCBkYXRhLCBhbmQgdGhlCisgKiBDUkMgaXMgbGF5ZXIgMi4gaG93ZXZlciwgbm9uLXJlYXNzZW1ibHkgcGFja2V0cyB3aWxsIHN0aWxsIGNvbnRhaW4gdGhlIENSQyAKKyAqIHdoZW4gcGFzc2VkIHRvIHRoZSBob3N0LiB0byBlbnN1cmUgcHJvcGVyIG9wZXJhdGlvbiwgbmVlZCB0byB3YWl0IDMuMm1zCisgKiBhZnRlciBjbGVhcmluZyBSWF9DRkdfRU4gYmVmb3JlIHdyaXRpbmcgdG8gYW55IG90aGVyIFJYIE1BQyByZWdpc3RlcnMKKyAqIG9yIG90aGVyIE1BQyBwYXJhbWV0ZXJzLiBhbHRlcm5hdGl2ZWx5LCBwb2xsIFJYX0NGR19FTiB1bnRpbCBpdCBjbGVhcnMKKyAqIHRvIDAuIHNpbWlsYXJ5LCBIQVNIX0ZJTFRFUl9FTiBhbmQgQUREUl9GSUxURVJfRU4gaGF2ZSB0aGUgc2FtZSAKKyAqIHJlc3RyaWN0aW9ucyBhcyBDRkdfRU4uCisgKi8KKyNkZWZpbmUgIFJFR19NQUNfUlhfQ0ZHICAgICAgICAgICAgICAgICAweDYwMzQgIC8qIFJYIE1BQyBjb25maWcgcmVnICovCisjZGVmaW5lICAgIE1BQ19SWF9DRkdfRU4gICAgICAgICAgICAgICAgMHgwMDAxICAvKiBlbmFibGUgUlggTUFDICovCisjZGVmaW5lICAgIE1BQ19SWF9DRkdfU1RSSVBfUEFEICAgICAgICAgMHgwMDAyICAvKiBhbHdheXMgcHJvZ3JhbSB0byAwLgorCQkJCQkJICAgZmVhdHVyZSBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lICAgIE1BQ19SWF9DRkdfU1RSSVBfRkNTICAgICAgICAgMHgwMDA0ICAvKiBSWCBNQUMgd2lsbCBzdHJpcCB0aGUgCisJCQkJCQkgICBsYXN0IDQgYnl0ZXMgb2YgYSAKKwkJCQkJCSAgIHJlY2VpdmVkIGZyYW1lLiAqLworI2RlZmluZSAgICBNQUNfUlhfQ0ZHX1BST01JU0NfRU4gICAgICAgIDB4MDAwOCAgLyogcHJvbWlzY3VvdXMgbW9kZSAqLworI2RlZmluZSAgICBNQUNfUlhfQ0ZHX1BST01JU0NfR1JPVVBfRU4gIDB4MDAxMCAgLyogYWNjZXB0IGFsbCB2YWxpZCAKKwkJCQkJCSAgIG11bHRpY2FzdCBmcmFtZXMgKGdyb3VwCisJCQkJCQkgICBiaXQgaW4gREEgZmllbGQgc2V0KSAqLworI2RlZmluZSAgICBNQUNfUlhfQ0ZHX0hBU0hfRklMVEVSX0VOICAgIDB4MDAyMCAgLyogdXNlIGhhc2ggdGFibGUgdG8gZmlsdGVyCisJCQkJCQkgICBtdWx0aWNhc3QgYWRkcmVzc2VzICovCisjZGVmaW5lICAgIE1BQ19SWF9DRkdfQUREUl9GSUxURVJfRU4gICAgMHgwMDQwICAvKiBjYXVzZSBSWCBNQUMgdG8gdXNlIAorCQkJCQkJICAgYWRkcmVzcyBmaWx0ZXJpbmcgcmVncyAKKwkJCQkJCSAgIHRvIGZpbHRlciBib3RoIHVuaWNhc3QKKwkJCQkJCSAgIGFuZCBtdWx0aWNhc3QgCisJCQkJCQkgICBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgICAgTUFDX1JYX0NGR19ESVNBQkxFX0RJU0NBUkQgICAweDAwODAgIC8qIHBhc3MgZXJyb3JlZCBmcmFtZXMgdG8KKwkJCQkJCSAgIFJYIERNQSBieSBzZXR0aW5nIEJBRAorCQkJCQkJICAgYml0IGJ1dCBub3QgQWJvcnQgYml0CisJCQkJCQkgICBpbiB0aGUgc3RhdHVzLiBDUkMsIAorCQkJCQkJICAgZnJhbWluZywgYW5kIGxlbmd0aCBlcnJzCisJCQkJCQkgICB3aWxsIG5vdCBpbmNyZW1lbnQgCisJCQkJCQkgICBlcnJvciBjb3VudGVycy4gZnJhbWVzCisJCQkJCQkgICB3aGljaCBkb24ndCBtYXRjaCBkZXN0CisJCQkJCQkgICBhZGRyIHdpbGwgYmUgcGFzc2VkIHVwCisJCQkJCQkgICB3LyBCQUQgYml0IHNldC4gKi8KKyNkZWZpbmUgICAgTUFDX1JYX0NGR19DQVJSSUVSX0VYVEVORCAgICAweDAxMDAgIC8qIGVuYWJsZSByZWNlcHRpb24gb2YgCisJCQkJCQkgICBwYWNrZXQgYnVyc3RzIGdlbmVyYXRlZAorCQkJCQkJICAgYnkgY2FycmllciBleHRlbnNpb24KKwkJCQkJCSAgIHdpdGggcGFja2V0IGJ1cnN0aW5nCisJCQkJCQkgICBzZW5kZXJzLiBvbmx5IGFwcGxpZXMKKwkJCQkJCSAgIHRvIGhhbGYtZHVwbGV4IDFHYnBzICovCisKKy8qIERFRkFVTFQ6IDB4MCAqLworI2RlZmluZSAgUkVHX01BQ19DVFJMX0NGRyAgICAgICAgICAgICAgIDB4NjAzOCAgLyogTUFDIGNvbnRyb2wgY29uZmlnIHJlZyAqLworI2RlZmluZSAgICBNQUNfQ1RSTF9DRkdfU0VORF9QQVVTRV9FTiAgIDB4MDAwMSAgLyogcmVzcG9uZCB0byByZXF1ZXN0cyBmb3IgCisJCQkJCQkgICBzZW5kaW5nIHBhdXNlIGZsb3cgY3RybCAKKwkJCQkJCSAgIGZyYW1lcyAqLworI2RlZmluZSAgICBNQUNfQ1RSTF9DRkdfUkVDVl9QQVVTRV9FTiAgIDB4MDAwMiAgLyogcmVzcG9uZCB0byByZWNlaXZlZCAKKwkJCQkJCSAgIHBhdXNlIGZsb3cgY3RybCBmcmFtZXMgKi8KKyNkZWZpbmUgICAgTUFDX0NUUkxfQ0ZHX1BBU1NfQ1RSTCAgICAgICAweDAwMDQgIC8qIHBhc3MgdmFsaWQgTUFDIGN0cmwKKwkJCQkJCSAgIHBhY2tldHMgdG8gUlggRE1BICovCisKKy8qIHRvIGVuc3VyZSBwcm9wZXIgb3BlcmF0aW9uLCBhIGdsb2JhbCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBzaG91bGQgYmUKKyAqIHBlcmZvcm1lZCB3aGVuIGEgbG9vcGJhY2sgY29uZmlnIGlzIGVudGVyZWQgb3IgZXhpdGVkLiBpZiBwcm9ncmFtbWVkIGFmdGVyCisgKiBhIGh3IG9yIGdsb2JhbCBzdyByZXNldCwgUlgvVFggTUFDIHNvZnR3YXJlIHJlc2V0IGFuZCBpbml0aWFsaXphdGlvbiAKKyAqIHNob3VsZCBiZSBkb25lIHRvIGVuc3VyZSBzdGFibGUgY2xvY2tpbmcuIAorICogREVGQVVMVDogMHgwCisgKi8KKyNkZWZpbmUgIFJFR19NQUNfWElGX0NGRyAgICAgICAgICAgICAgICAweDYwM0MgIC8qIFhJRiBjb25maWcgcmVnICovCisjZGVmaW5lICAgIE1BQ19YSUZfVFhfTUlJX09VVFBVVF9FTiAgICAgICAgMHgwMDAxICAvKiBlbmFibGUgb3V0cHV0IGRyaXZlcnMKKwkJCQkJCSAgICAgIG9uIE1JSSB4bWl0IGJ1cyAqLworI2RlZmluZSAgICBNQUNfWElGX01JSV9JTlRfTE9PUEJBQ0sgICAgICAgIDB4MDAwMiAgLyogbG9vcGJhY2sgR01JSSB4bWl0IGRhdGEKKwkJCQkJCSAgICAgIHBhdGggdG8gR01JSSByZWN2IGRhdGEKKwkJCQkJCSAgICAgIHBhdGguIHBoeSBtb2RlIHJlZ2lzdGVyCisJCQkJCQkgICAgICBjbG9jayBzZWxlY3Rpb24gbXVzdCBiZQorCQkJCQkJICAgICAgc2V0IHRvIEdNSUkgbW9kZSBhbmQgCisJCQkJCQkgICAgICBHTUlJX01PREUgc2hvdWxkIGJlIHNldAorCQkJCQkJICAgICAgdG8gMS4gaW4gbG9vcGJhY2sgbW9kZSwKKwkJCQkJCSAgICAgIFJFRkNMSyB3aWxsIGRyaXZlIHRoZQorCQkJCQkJICAgICAgZW50aXJlIG1hYyBjb3JlLiAwIGZvcgorCQkJCQkJICAgICAgbm9ybWFsIG9wZXJhdGlvbi4gKi8KKyNkZWZpbmUgICAgTUFDX1hJRl9ESVNBQkxFX0VDSE8gICAgICAgICAgICAweDAwMDQgIC8qIGRpc2FibGVzIHJlY2VpdmUgZGF0YQorCQkJCQkJICAgICAgcGF0aCBkdXJpbmcgcGFja2V0IAorCQkJCQkJICAgICAgeG1pc3Npb24uIGNsZWFyIHRvIDAKKwkJCQkJCSAgICAgIGluIGFueSBmdWxsIGR1cGxleCBtb2RlLAorCQkJCQkJICAgICAgaW4gYW55IGxvb3BiYWNrIG1vZGUsCisJCQkJCQkgICAgICBvciBpbiBoYWxmLWR1cGxleCBTRVJERVMKKwkJCQkJCSAgICAgIG9yIFNMSU5LIG1vZGVzLiBzZXQgd2hlbgorCQkJCQkJICAgICAgaW4gaGFsZi1kdXBsZXggd2hlbiAKKwkJCQkJCSAgICAgIHVzaW5nIGV4dGVybmFsIHBoeS4gKi8KKyNkZWZpbmUgICAgTUFDX1hJRl9HTUlJX01PREUgICAgICAgICAgICAgICAweDAwMDggIC8qIE1BQyBvcGVyYXRlcyB3aXRoIEdNSUkKKwkJCQkJCSAgICAgIGNsb2NrcyBhbmQgZGF0YXBhdGggKi8KKyNkZWZpbmUgICAgTUFDX1hJRl9NSUlfQlVGRkVSX09VVFBVVF9FTiAgICAweDAwMTAgIC8qIE1JSV9CVUZfRU4gcGluLiBlbmFibGUKKwkJCQkJCSAgICAgIGV4dGVybmFsIHRyaXN0YXRlIGJ1ZmZlcgorCQkJCQkJICAgICAgb24gdGhlIE1JSSByZWNlaXZlIAorCQkJCQkJICAgICAgYnVzLiAqLworI2RlZmluZSAgICBNQUNfWElGX0xJTktfTEVEICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTElOS0xFRCMgYWN0aXZlIChsb3cpICovCisjZGVmaW5lICAgIE1BQ19YSUZfRkRQTFhfTEVEICAgICAgICAgICAgICAgMHgwMDQwICAvKiBGRFBMWExFRCMgYWN0aXZlIChsb3cpICovCisKKyNkZWZpbmUgIFJFR19NQUNfSVBHMCAgICAgICAgICAgICAgICAgICAgICAweDYwNDAgIC8qIGludGVyLXBhY2tldCBnYXAwIHJlZy4KKwkJCQkJCSAgICAgIHJlY29tbWVuZGVkOiAweDAwICovCisjZGVmaW5lICBSRUdfTUFDX0lQRzEgICAgICAgICAgICAgICAgICAgICAgMHg2MDQ0ICAvKiBpbnRlci1wYWNrZXQgZ2FwMSByZWcKKwkJCQkJCSAgICAgIHJlY29tbWVuZGVkOiAweDA4ICovCisjZGVmaW5lICBSRUdfTUFDX0lQRzIgICAgICAgICAgICAgICAgICAgICAgMHg2MDQ4ICAvKiBpbnRlci1wYWNrZXQgZ2FwMiByZWcKKwkJCQkJCSAgICAgIHJlY29tbWVuZGVkOiAweDA0ICovCisjZGVmaW5lICBSRUdfTUFDX1NMT1RfVElNRSAgICAgICAgICAgICAgICAgMHg2MDRDICAvKiBzbG90IHRpbWUgcmVnCisJCQkJCQkgICAgICByZWNvbW1lbmRlZDogMHg0MCAqLworI2RlZmluZSAgUkVHX01BQ19GUkFNRVNJWkVfTUlOICAgICAgICAgICAgIDB4NjA1MCAgLyogbWluIGZyYW1lIHNpemUgcmVnIAorCQkJCQkJICAgICAgcmVjb21tZW5kZWQ6IDB4NDAgKi8KKworLyogRlJBTUVTSVpFX01BWCBob2xkcyBib3RoIHRoZSBtYXggZnJhbWUgc2l6ZSBhcyB3ZWxsIGFzIHRoZSBtYXggYnVyc3Qgc2l6ZS4KKyAqIHJlY29tbWVuZGVkIHZhbHVlOiAgMHgyMDAwLjA1RUUKKyAqLworI2RlZmluZSAgUkVHX01BQ19GUkFNRVNJWkVfTUFYICAgICAgICAgICAgIDB4NjA1NCAgLyogbWF4IGZyYW1lIHNpemUgcmVnICovCisjZGVmaW5lICAgIE1BQ19GUkFNRVNJWkVfTUFYX0JVUlNUX01BU0sgICAgMHgzRkZGMDAwMCAvKiBtYXggYnVyc3Qgc2l6ZSAqLworI2RlZmluZSAgICBNQUNfRlJBTUVTSVpFX01BWF9CVVJTVF9TSElGVCAgIDE2CisjZGVmaW5lICAgIE1BQ19GUkFNRVNJWkVfTUFYX0ZSQU1FX01BU0sgICAgMHgwMDAwN0ZGRiAvKiBtYXggZnJhbWUgc2l6ZSAqLworI2RlZmluZSAgICBNQUNfRlJBTUVTSVpFX01BWF9GUkFNRV9TSElGVCAgIDAKKyNkZWZpbmUgIFJFR19NQUNfUEFfU0laRSAgICAgICAgICAgICAgICAgICAweDYwNTggIC8qIFBBIHNpemUgcmVnLiBudW1iZXIgb2YKKwkJCQkJCSAgICAgIHByZWFtYmxlIGJ5dGVzIHRoYXQgdGhlCisJCQkJCQkgICAgICBUWCBNQUMgd2lsbCB4bWl0IGF0IHRoZQorCQkJCQkJICAgICAgYmVnaW5uaW5nIG9mIGVhY2ggZnJhbWUKKwkJCQkJCSAgICAgIHZhbHVlIHNob3VsZCBiZSAyIG9yIAorCQkJCQkJICAgICAgZ3JlYXRlci4gcmVjb21tZW5kZWQgCisJCQkJCQkgICAgICB2YWx1ZTogMHgwNyAqLworI2RlZmluZSAgUkVHX01BQ19KQU1fU0laRSAgICAgICAgICAgICAgICAgIDB4NjA1QyAgLyogamFtIHNpemUgcmVnLiBkdXJhdGlvbiAKKwkJCQkJCSAgICAgIG9mIGphbSBpbiB1bml0cyBvZiBtZWRpYQorCQkJCQkJICAgICAgYnl0ZSB0aW1lLiByZWNvbW1lbmRlZAorCQkJCQkJICAgICAgdmFsdWU6IDB4MDQgKi8KKyNkZWZpbmUgIFJFR19NQUNfQVRURU1QVF9MSU1JVCAgICAgICAgICAgICAweDYwNjAgIC8qIGF0dGVtcHQgbGltaXQgcmVnLiAjCisJCQkJCQkgICAgICBvZiBhdHRlbXB0cyBUWCBNQUMgd2lsbAorCQkJCQkJICAgICAgbWFrZSB0byB4bWl0IGEgZnJhbWUgCisJCQkJCQkgICAgICBiZWZvcmUgaXQgcmVzZXRzIGl0cworCQkJCQkJICAgICAgYXR0ZW1wdHMgY291bnRlci4gYWZ0ZXIKKwkJCQkJCSAgICAgIHRoZSBsaW1pdCBoYXMgYmVlbiAKKwkJCQkJCSAgICAgIHJlYWNoZWQsIFRYIE1BQyBtYXkgb3IKKwkJCQkJCSAgICAgIG1heSBub3QgZHJvcCB0aGUgZnJhbWUKKwkJCQkJCSAgICAgIGRlcGVuZGVudCB1cG9uIHZhbHVlCisJCQkJCQkgICAgICBpbiBUWF9NQUNfQ0ZHLiAKKwkJCQkJCSAgICAgIHJlY29tbWVuZGVkIAorCQkJCQkJICAgICAgdmFsdWU6IDB4MTAgKi8KKyNkZWZpbmUgIFJFR19NQUNfQ1RSTF9UWVBFICAgICAgICAgICAgICAgICAweDYwNjQgIC8qIE1BQyBjb250cm9sIHR5cGUgcmVnLgorCQkJCQkJICAgICAgdHlwZSBmaWVsZCBvZiBhIE1BQyAKKwkJCQkJCSAgICAgIGN0cmwgZnJhbWUuIHJlY29tbWVuZGVkCisJCQkJCQkgICAgICB2YWx1ZTogMHg4ODA4ICovCisKKy8qIG1hYyBhZGRyZXNzIHJlZ2lzdGVyczogMCAtIDQ0LCAweDYwODAgLSAweDYxMzAsIDQgOC1iaXQgYnl0ZXMuCisgKiByZWdpc3RlciAgICAgICAgICAgY29udGFpbnMgICAgICAgICAgICAgICAgICAgY29tcGFyaXNvbiAgCisgKiAgICAwICAgICAgICAxNiBNU0Igb2YgcHJpbWFyeSBNQUMgYWRkciAgICAgICAgWzQ3OjMyXSBvZiBEQSBmaWVsZAorICogICAgMSAgICAgICAgMTYgbWlkZGxlIGJpdHMgIiIgICAgICAgICAgICAgICAgIFszMToxNl0gb2YgREEgZmllbGQKKyAqICAgIDIgICAgICAgIDE2IExTQiAiIiAgICAgICAgICAgICAgICAgICAgICAgICBbMTU6MF0gb2YgREEgZmllbGQKKyAqICAgIDMqeCAgICAgIDE2TVNCIG9mIGFsdCBNQUMgYWRkciAxLTE1ICAgICAgICBbNDc6MzJdIG9mIERBIGZpZWxkCisgKiAgICA0KnggICAgICAxNiBtaWRkbGUgYml0cyAiIiAgICAgICAgICAgICAgICAgWzMxOjE2XQorICogICAgNSp4ICAgICAgMTYgTFNCICIiICAgICAgICAgICAgICAgICAgICAgICAgIFsxNTowXQorICogICAgNDIgICAgICAgMTYgTVNCIG9mIE1BQyBDVFJMIGFkZHIgICAgICAgICAgIFs0NzozMl0gb2YgREEuIAorICogICAgNDMgICAgICAgMTYgbWlkZGxlIGJpdHMgIiIgICAgICAgICAgICAgICAgIFszMToxNl0KKyAqICAgIDQ0ICAgICAgIDE2IExTQiAiIiAgICAgICAgICAgICAgICAgICAgICAgICBbMTU6MF0KKyAqICAgIE1BQyBDVFJMIGFkZHIgbXVzdCBiZSB0aGUgcmVzZXJ2ZWQgbXVsdGljYXN0IGFkZHIgZm9yIE1BQyBDVFJMIGZyYW1lcy4KKyAqICAgIGlmIHRoZXJlIGlzIGEgbWF0Y2gsIE1BQyB3aWxsIHNldCB0aGUgYml0IGZvciBhbHRlcm5hdGl2ZSBhZGRyZXNzCisgKiAgICBmaWx0ZXIgcGFzcyBbMTVdCisKKyAqICAgIGhlcmUgaXMgdGhlIG1hcCBvZiByZWdpc3RlcnMgZ2l2ZW4gTUFDIGFkZHJlc3Mgbm90YXRpb246IGE6YjpjOmQ6ZTpmCisgKiAgICAgICAgICAgICAgICAgICAgIGFiICAgICAgICAgICAgIGNkICAgICAgICAgICAgIGVmCisgKiAgICBwcmltYXJ5IGFkZHIgICAgIHJlZyAyICAgICAgICAgIHJlZyAxICAgICAgICAgIHJlZyAwCisgKiAgICBhbHQgYWRkciAxICAgICAgIHJlZyA1ICAgICAgICAgIHJlZyA0ICAgICAgICAgIHJlZyAzCisgKiAgICBhbHQgYWRkciB4ICAgICAgIHJlZyA1KnggICAgICAgIHJlZyA0KnggICAgICAgIHJlZyAzKngKKyAqICAgIGN0cmwgYWRkciAgICAgICAgcmVnIDQ0ICAgICAgICAgcmVnIDQzICAgICAgICAgcmVnIDQyCisgKi8KKyNkZWZpbmUgIFJFR19NQUNfQUREUjAgICAgICAgICAgICAgICAgICAgICAweDYwODAgIC8qIE1BQyBhZGRyZXNzIDAgcmVnICovCisjZGVmaW5lICBSRUdfTUFDX0FERFJOKHgpICAgICAgICAgICAgICAgICAgKFJFR19NQUNfQUREUjAgKyAoeCkqNCkKKyNkZWZpbmUgIFJFR19NQUNfQUREUl9GSUxURVIwICAgICAgICAgICAgICAweDYxNEMgIC8qIGFkZHJlc3MgZmlsdGVyIDAgcmVnCisJCQkJCQkgICAgICBbNDc6MzJdICovCisjZGVmaW5lICBSRUdfTUFDX0FERFJfRklMVEVSMSAgICAgICAgICAgICAgMHg2MTUwICAvKiBhZGRyZXNzIGZpbHRlciAxIHJlZyAKKwkJCQkJCSAgICAgIFszMToxNl0gKi8KKyNkZWZpbmUgIFJFR19NQUNfQUREUl9GSUxURVIyICAgICAgICAgICAgICAweDYxNTQgIC8qIGFkZHJlc3MgZmlsdGVyIDIgcmVnIAorCQkJCQkJICAgICAgWzE1OjBdICovCisjZGVmaW5lICBSRUdfTUFDX0FERFJfRklMVEVSMl8xX01BU0sgICAgICAgMHg2MTU4ICAvKiBhZGRyZXNzIGZpbHRlciAyIGFuZCAxCisJCQkJCQkgICAgICBtYXNrIHJlZy4gOC1iaXQgcmVnCisJCQkJCQkgICAgICBjb250YWlucyBuaWJibGUgbWFzayBmb3IKKwkJCQkJCSAgICAgIHJlZyAyIGFuZCAxLiAqLworI2RlZmluZSAgUkVHX01BQ19BRERSX0ZJTFRFUjBfTUFTSyAgICAgICAgIDB4NjE1QyAgLyogYWRkcmVzcyBmaWx0ZXIgMCBtYXNrIAorCQkJCQkJICAgICAgcmVnICovCisKKy8qIGhhc2ggdGFibGUgcmVnaXN0ZXJzOiAwIC0gMTUsIDB4NjE2MCAtIDB4NjE5QywgNCA4LWJpdCBieXRlcyAKKyAqIDE2LWJpdCByZWdpc3RlcnMgY29udGFpbiBiaXRzIG9mIHRoZSBoYXNoIHRhYmxlLgorICogcmVnIHggIC0+IFsxNiooMTUgLSB4KSArIDE1IDogMTYqKDE1IC0geCldLiAKKyAqIGUuZy4sIDE1IC0+IFsxNTowXSwgMCAtPiBbMjU1OjI0MF0KKyAqLworI2RlZmluZSAgUkVHX01BQ19IQVNIX1RBQkxFMCAgICAgICAgICAgICAgIDB4NjE2MCAgLyogaGFzaCB0YWJsZSAwIHJlZyAqLworI2RlZmluZSAgUkVHX01BQ19IQVNIX1RBQkxFTih4KSAgICAgICAgICAgIChSRUdfTUFDX0hBU0hfVEFCTEUwICsgKHgpKjQpCisKKy8qIHN0YXRpc3RpY3MgcmVnaXN0ZXJzLiB0aGVzZSByZWdpc3RlcnMgZ2VuZXJhdGUgYW4gaW50ZXJydXB0IG9uIAorICogb3ZlcmZsb3cuIHJlY29tbWVuZGVkIGluaXRpYWxpemF0aW9uOiAweDAwMDAuIG1vc3QgYXJlIDE2LWJpdHMgZXhjZXB0CisgKiBmb3IgUEVBS19BVFRFTVBUUyByZWdpc3RlciB3aGljaCBpcyA4IGJpdHMuCisgKi8KKyNkZWZpbmUgIFJFR19NQUNfQ09MTF9OT1JNQUwgICAgICAgICAgICAgICAweDYxQTAgLyogbm9ybWFsIGNvbGxpc2lvbiAKKwkJCQkJCSAgICAgY291bnRlci4gKi8KKyNkZWZpbmUgIFJFR19NQUNfQ09MTF9GSVJTVCAgICAgICAgICAgICAgICAweDYxQTQgLyogZmlyc3QgYXR0ZW1wdAorCQkJCQkJICAgICBzdWNjZXNzZnVsIGNvbGxpc2lvbiAKKwkJCQkJCSAgICAgY291bnRlciAqLworI2RlZmluZSAgUkVHX01BQ19DT0xMX0VYQ0VTUyAgICAgICAgICAgICAgIDB4NjFBOCAvKiBleGNlc3NpdmUgY29sbGlzaW9uIAorCQkJCQkJICAgICBjb3VudGVyICovCisjZGVmaW5lICBSRUdfTUFDX0NPTExfTEFURSAgICAgICAgICAgICAgICAgMHg2MUFDIC8qIGxhdGUgY29sbGlzaW9uIGNvdW50ZXIgKi8KKyNkZWZpbmUgIFJFR19NQUNfVElNRVJfREVGRVIgICAgICAgICAgICAgICAweDYxQjAgLyogZGVmZXIgdGltZXIuIHRpbWUgYmFzZSAKKwkJCQkJCSAgICAgaXMgdGhlIG1lZGlhIGJ5dGUgCisJCQkJCQkgICAgIGNsb2NrLzI1NiAqLworI2RlZmluZSAgUkVHX01BQ19BVFRFTVBUU19QRUFLICAgICAgICAgICAgIDB4NjFCNCAvKiBwZWFrIGF0dGVtcHRzIHJlZyAqLworI2RlZmluZSAgUkVHX01BQ19SRUNWX0ZSQU1FICAgICAgICAgICAgICAgIDB4NjFCOCAvKiByZWNlaXZlIGZyYW1lIGNvdW50ZXIgKi8KKyNkZWZpbmUgIFJFR19NQUNfTEVOX0VSUiAgICAgICAgICAgICAgICAgICAweDYxQkMgLyogbGVuZ3RoIGVycm9yIGNvdW50ZXIgKi8KKyNkZWZpbmUgIFJFR19NQUNfQUxJR05fRVJSICAgICAgICAgICAgICAgICAweDYxQzAgLyogYWxpZ25tZW50IGVycm9yIGNvdW50ZXIgKi8KKyNkZWZpbmUgIFJFR19NQUNfRkNTX0VSUiAgICAgICAgICAgICAgICAgICAweDYxQzQgLyogRkNTIGVycm9yIGNvdW50ZXIgKi8KKyNkZWZpbmUgIFJFR19NQUNfUlhfQ09ERV9FUlIgICAgICAgICAgICAgICAweDYxQzggLyogUlggY29kZSB2aW9sYXRpb24KKwkJCQkJCSAgICAgZXJyb3IgY291bnRlciAqLworCisvKiBtaXNjIHJlZ2lzdGVycyAqLworI2RlZmluZSAgUkVHX01BQ19SQU5ET01fU0VFRCAgICAgICAgICAgICAgIDB4NjFDQyAvKiByYW5kb20gbnVtYmVyIHNlZWQgcmVnLgorCQkJCQkJICAgMTAtYml0IHJlZ2lzdGVyIHVzZWQgYXMgYQorCQkJCQkJICAgc2VlZCAgZm9yIHRoZSByYW5kb20gbnVtYmVyCisJCQkJCQkgICBnZW5lcmF0b3IgZm9yIHRoZSBDU01BL0NECisJCQkJCQkgICBiYWNrb2ZmIGFsZ29yaXRobS4gb25seSAKKwkJCQkJCSAgIHByb2dyYW1tZWQgYWZ0ZXIgcG93ZXItb24KKwkJCQkJCSAgIHJlc2V0IGFuZCBzaG91bGQgYmUgYSAKKwkJCQkJCSAgIHJhbmRvbSB2YWx1ZSB3aGljaCBoYXMgYSAKKwkJCQkJCSAgIGhpZ2ggbGlrZWxpaG9vZCBvZiBiZWluZyAKKwkJCQkJCSAgIHVuaXF1ZSBmb3IgZWFjaCBNQUMgCisJCQkJCQkgICBhdHRhY2hlZCB0byBhIG5ldHdvcmsgCisJCQkJCQkgICBzZWdtZW50IChlLmcuLCAxMCBMU0Igb2YKKwkJCQkJCSAgIE1BQyBhZGRyZXNzKSAqLworCisvKiBBU1VOOiB0aGVyZSdzIGEgUEFVU0VfVElNRVIgKHJvKSBkZXNjcmliZWQsIGJ1dCBpdCdzIG5vdCBpbiB0aGUgYWRkcmVzcworICogICAgICAgbWFwCisgKi8KKworLyogMjctYml0IHJlZ2lzdGVyIGhhcyB0aGUgY3VycmVudCBzdGF0ZSBmb3Iga2V5IHN0YXRlIG1hY2hpbmVzIGluIHRoZSBNQUMgKi8KKyNkZWZpbmUgIFJFR19NQUNfU1RBVEVfTUFDSElORSAgICAgICAgICAgICAweDYxRDAgLyogKHJvKSBzdGF0ZSBtYWNoaW5lIHJlZyAqLworI2RlZmluZSAgICBNQUNfU01fUkxNX01BU0sgICAgICAgICAgICAgICAgIDB4MDc4MDAwMDAgCisjZGVmaW5lICAgIE1BQ19TTV9STE1fU0hJRlQgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgICAgTUFDX1NNX1JYX0ZDX01BU0sgICAgICAgICAgICAgICAweDAwNzAwMDAwCisjZGVmaW5lICAgIE1BQ19TTV9SWF9GQ19TSElGVCAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgICAgTUFDX1NNX1RMTV9NQVNLICAgICAgICAgICAgICAgICAweDAwMEYwMDAwCisjZGVmaW5lICAgIE1BQ19TTV9UTE1fU0hJRlQgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgTUFDX1NNX0VOQ0FQX1NNX01BU0sgICAgICAgICAgICAweDAwMDBGMDAwCisjZGVmaW5lICAgIE1BQ19TTV9FTkNBUF9TTV9TSElGVCAgICAgICAgICAgMTIKKyNkZWZpbmUgICAgTUFDX1NNX1RYX1JFUV9NQVNLICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lICAgIE1BQ19TTV9UWF9SRVFfU0hJRlQgICAgICAgICAgICAgMTAKKyNkZWZpbmUgICAgTUFDX1NNX1RYX0ZDX01BU0sgICAgICAgICAgICAgICAweDAwMDAwM0MwCisjZGVmaW5lICAgIE1BQ19TTV9UWF9GQ19TSElGVCAgICAgICAgICAgICAgNgorI2RlZmluZSAgICBNQUNfU01fRklGT19XUklURV9TRUxfTUFTSyAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgICAgTUFDX1NNX0ZJRk9fV1JJVEVfU0VMX1NISUZUICAgICAzCisjZGVmaW5lICAgIE1BQ19TTV9UWF9GSUZPX0VNUFRZX01BU0sgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSAgICBNQUNfU01fVFhfRklGT19FTVBUWV9TSElGVCAgICAgIDAKKworLyoqIE1JRiByZWdpc3RlcnMuIHRoZSBNSUYgY2FuIGJlIHByb2dyYW1tZWQgaW4gZWl0aGVyIGJpdC1iYW5nIG9yIAorICogIGZyYW1lIG1vZGUuCisgKiovCisjZGVmaW5lICBSRUdfTUlGX0JJVF9CQU5HX0NMT0NLICAgICAgICAgICAgMHg2MjAwIC8qIE1JRiBiaXQtYmFuZyBjbG9jay4KKwkJCQkJCSAgIDEgLT4gMCB3aWxsIGdlbmVyYXRlIGEgCisJCQkJCQkgICByaXNpbmcgZWRnZS4gMCAtPiAxIHdpbGwKKwkJCQkJCSAgIGdlbmVyYXRlIGEgZmFsbGluZyBlZGdlLiAqLworI2RlZmluZSAgUkVHX01JRl9CSVRfQkFOR19EQVRBICAgICAgICAgICAgIDB4NjIwNCAvKiBNSUYgYml0LWJhbmcgZGF0YS4gMS1iaXQKKwkJCQkJCSAgICAgcmVnaXN0ZXIgZ2VuZXJhdGVzIGRhdGEgKi8KKyNkZWZpbmUgIFJFR19NSUZfQklUX0JBTkdfT1VUUFVUX0VOICAgICAgICAweDYyMDggLyogTUlGIGJpdC1iYW5nIG91dHB1dCAKKwkJCQkJCSAgICAgZW5hYmxlLiBlbmFibGUgd2hlbiAKKwkJCQkJCSAgICAgeG1pdHRpbmcgZGF0YSBmcm9tIE1JRiB0bworCQkJCQkJICAgICB0cmFuc2NlaXZlci4gKi8KKworLyogMzItYml0IHJlZ2lzdGVyIHNlcnZlcyBhcyBhbiBpbnN0cnVjdGlvbiByZWdpc3RlciB3aGVuIHRoZSBNSUYgaXMgCisgKiBwcm9ncmFtbWVkIGluIGZyYW1lIG1vZGUuIGxvYWQgdGhpcyByZWdpc3RlciB3LyBhIHZhbGlkIGluc3RydWN0aW9uCisgKiAoYXMgcGVyIElFRUUgODAyLjN1IE1JSSBzcGVjKS4gcG9sbCB0aGlzIHJlZ2lzdGVyIHRvIGNoZWNrIGZvciBpbnN0cnVjdGlvbgorICogZXhlY3V0aW9uIGNvbXBsZXRpb24uIGR1cmluZyBhIHJlYWQgb3BlcmF0aW9uLCB0aGlzIHJlZ2lzdGVyIHdpbGwgYWxzbworICogY29udGFpbiB0aGUgMTYtYml0IGRhdGEgcmV0dXJuZWQgYnkgdGhlIHRyYW5jZWl2ZXIuIHVubGVzcyBzcGVjaWZpZWQgCisgKiBvdGhlcndpc2UsIGZpZWxkcyBhcmUgY29uc2lkZXJlZCAiZG9uJ3QgY2FyZSIgd2hlbiBwb2xsaW5nIGZvciAKKyAqIGNvbXBsZXRpb24uCisgKi8KKyNkZWZpbmUgIFJFR19NSUZfRlJBTUUgICAgICAgICAgICAgICAgICAgICAweDYyMEMgLyogTUlGIGZyYW1lL291dHB1dCByZWcgKi8KKyNkZWZpbmUgICAgTUlGX0ZSQU1FX1NUQVJUX01BU0sgICAgICAgICAgICAweEMwMDAwMDAwIC8qIHN0YXJ0IG9mIGZyYW1lLgorCQkJCQkJCSBsb2FkIHcvIDAxIHdoZW4KKwkJCQkJCQkgaXNzdWluZyBhbiBpbnN0ciAqLworI2RlZmluZSAgICBNSUZfRlJBTUVfU1QgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAgLyogU1RhcnQgb2YgZnJhbWUgKi8KKyNkZWZpbmUgICAgTUlGX0ZSQU1FX09QQ09ERV9NQVNLICAgICAgICAgICAweDMwMDAwMDAwIC8qIG9wY29kZS4gMDEgZm9yIGEgCisJCQkJCQkJIHdyaXRlLiAxMCBmb3IgYSAKKwkJCQkJCQkgcmVhZCAqLworI2RlZmluZSAgICBNSUZfRlJBTUVfT1BfUkVBRCAgICAgICAgICAgICAgIDB4MjAwMDAwMDAgLyogcmVhZCBPUGNvZGUgKi8KKyNkZWZpbmUgICAgTUlGX0ZSQU1FX09QX1dSSVRFICAgICAgICAgICAgICAweDEwMDAwMDAwIC8qIHdyaXRlIE9QY29kZSAqLworI2RlZmluZSAgICBNSUZfRlJBTUVfUEhZX0FERFJfTUFTSyAgICAgICAgIDB4MEY4MDAwMDAgLyogcGh5IGFkZHJlc3MuIHdoZW4KKwkJCQkJCQkgaXNzdWluZyBhbiBpbnN0ciwKKwkJCQkJCQkgdGhpcyBmaWVsZCBzaG91bGQgYmUgCisJCQkJCQkJIGxvYWRlZCB3LyB0aGUgWENWUgorCQkJCQkJCSBhZGRyICovCisjZGVmaW5lICAgIE1JRl9GUkFNRV9QSFlfQUREUl9TSElGVCAgICAgICAgMjMKKyNkZWZpbmUgICAgTUlGX0ZSQU1FX1JFR19BRERSX01BU0sgICAgICAgICAweDAwN0MwMDAwIC8qIHJlZ2lzdGVyIGFkZHJlc3MuCisJCQkJCQkJIHdoZW4gaXNzdWluZyBhbiBpbnN0ciwKKwkJCQkJCQkgYWRkciBvZiByZWdpc3RlcgorCQkJCQkJCSB0byBiZSByZWFkL3dyaXR0ZW4gKi8KKyNkZWZpbmUgICAgTUlGX0ZSQU1FX1JFR19BRERSX1NISUZUICAgICAgICAxOAorI2RlZmluZSAgICBNSUZfRlJBTUVfVFVSTl9BUk9VTkRfTVNCICAgICAgIDB4MDAwMjAwMDAgLyogdHVybiBhcm91bmQsIE1TQi4KKwkJCQkJCQkgd2hlbiBpc3N1aW5nIGFuIGluc3RyLAorCQkJCQkJCSBzZXQgdGhpcyBiaXQgdG8gMSAqLworI2RlZmluZSAgICBNSUZfRlJBTUVfVFVSTl9BUk9VTkRfTFNCICAgICAgIDB4MDAwMTAwMDAgLyogdHVybiBhcm91bmQsIExTQi4KKwkJCQkJCQkgd2hlbiBpc3N1aW5nIGFuIGluc3RyLAorCQkJCQkJCSBzZXQgdGhpcyBiaXQgdG8gMC4KKwkJCQkJCQkgd2hlbiBwb2xsaW5nIGZvcgorCQkJCQkJCSBjb21wbGV0aW9uLCAxIG1lYW5zCisJCQkJCQkJIHRoYXQgaW5zdHIgZXhlY3V0aW9uCisJCQkJCQkJIGhhcyBiZWVuIGNvbXBsZXRlZCAqLworI2RlZmluZSAgICBNSUZfRlJBTUVfREFUQV9NQVNLICAgICAgICAgICAgIDB4MDAwMEZGRkYgLyogaW5zdHJ1Y3Rpb24gcGF5bG9hZAorCQkJCQkJCSBsb2FkIHdpdGggMTYtYml0IGRhdGEKKwkJCQkJCQkgdG8gYmUgd3JpdHRlbiBpbgorCQkJCQkJCSB0cmFuc2NlaXZlciByZWcgZm9yIGEKKwkJCQkJCQkgd3JpdGUuIGRvZXNuJ3QgbWF0dGVyCisJCQkJCQkJIGluIGEgcmVhZC4gd2hlbiAKKwkJCQkJCQkgcG9sbGluZyBmb3IgCisJCQkJCQkJIGNvbXBsZXRpb24sIGZpZWxkIGlzCisJCQkJCQkJICJkb24ndCBjYXJlIiBmb3Igd3JpdGUKKwkJCQkJCQkgYW5kIDE2LWJpdCBkYXRhIAorCQkJCQkJCSByZXR1cm5lZCBieSB0aGUgCisJCQkJCQkJIHRyYW5zY2VpdmVyIGZvciBhCisJCQkJCQkJIHJlYWQgKGlmIHZhbGlkIGJpdAorCQkJCQkJCSBpcyBzZXQpICovCisjZGVmaW5lICBSRUdfTUlGX0NGRyAgICAgICAgICAgICAgICAgICAgMHg2MjEwIC8qIE1JRiBjb25maWcgcmVnICovCisjZGVmaW5lICAgIE1JRl9DRkdfUEhZX1NFTEVDVCAgICAgICAgICAgMHgwMDAxIC8qIDEgLT4gc2VsZWN0IE1ESU9fMQorCQkJCQkJICAwIC0+IHNlbGVjdCBNRElPXzAgKi8KKyNkZWZpbmUgICAgTUlGX0NGR19QT0xMX0VOICAgICAgICAgICAgICAweDAwMDIgLyogZW5hYmxlIHBvbGxpbmcKKwkJCQkJCSAgbWVjaGFuaXNtLiBpZiBzZXQsCisJCQkJCQkgIEJCX01PREUgc2hvdWxkIGJlIDAgKi8KKyNkZWZpbmUgICAgTUlGX0NGR19CQl9NT0RFICAgICAgICAgICAgICAweDAwMDQgLyogMSAtPiBiaXQtYmFuZyBtb2RlCisJCQkJCQkgIDAgLT4gZnJhbWUgbW9kZSAqLworI2RlZmluZSAgICBNSUZfQ0ZHX1BPTExfUkVHX01BU0sgICAgICAgIDB4MDBGOCAvKiByZWdpc3RlciBhZGRyZXNzIHRvIGJlCisJCQkJCQkgIHVzZWQgYnkgcG9sbGluZyBtb2RlLgorCQkJCQkJICBvbmx5IG1lYW5pbmdmdWwgaWYgUE9MTF9FTgorCQkJCQkJICBpcyBzZXQgdG8gMSAqLworI2RlZmluZSAgICBNSUZfQ0ZHX1BPTExfUkVHX1NISUZUICAgICAgIDMKKyNkZWZpbmUgICAgTUlGX0NGR19NRElPXzAgICAgICAgICAgICAgICAweDAxMDAgLyogKHJvKSBkdWFsIHB1cnBvc2UuCisJCQkJCQkgIHdoZW4gTURJT18wIGlzIGlkbGUsCisJCQkJCQkgIDEgLT4gdHJhbmNlaXZlciBpcyAKKwkJCQkJCSAgY29ubmVjdGVkIHRvIE1ESU9fMC4KKwkJCQkJCSAgd2hlbiBNSUYgaXMgY29tbXVuaWNhdGluZworCQkJCQkJICB3LyBNRElPXzAgaW4gYml0LWJhbmcgCisJCQkJCQkgIG1vZGUsIHRoaXMgYml0IGluZGljYXRlcworCQkJCQkJICB0aGUgaW5jb21pbmcgYml0IHN0cmVhbQorCQkJCQkJICBkdXJpbmcgYSByZWFkIG9wICovCisjZGVmaW5lICAgIE1JRl9DRkdfTURJT18xICAgICAgICAgICAgICAgMHgwMjAwIC8qIChybykgZHVhbCBwdXJwb3NlLgorCQkJCQkJICB3aGVuIE1ESU9fMSBpcyBpZGxlLCAKKwkJCQkJCSAgMSAtPiB0cmFuc2NlaXZlciBpcyAKKwkJCQkJCSAgY29ubmVjdGVkIHRvIE1ESU9fMS4KKwkJCQkJCSAgd2hlbiBNSUYgaXMgY29tbXVuaWNhdGluZworCQkJCQkJICB3LyBNRElPXzEgaW4gYml0LWJhbmcKKwkJCQkJCSAgbW9kZSwgdGhpcyBiaXQgaW5kaWNhdGVzCisJCQkJCQkgIHRoZSBpbmNvbWluZyBiaXQgc3RyZWFtCisJCQkJCQkgIGR1cmluZyBhIHJlYWQgb3AgKi8KKyNkZWZpbmUgICAgTUlGX0NGR19QT0xMX1BIWV9NQVNLICAgICAgICAweDdDMDAgLyogdHJhbmNlaXZlciBhZGRyZXNzIHRvCisJCQkJCQkgIGJlIHBvbGxlZCAqLworI2RlZmluZSAgICBNSUZfQ0ZHX1BPTExfUEhZX1NISUZUICAgICAgIDEwCisKKy8qIDE2LWJpdCByZWdpc3RlciB1c2VkIHRvIGRldGVybWluZSB3aGljaCBiaXRzIGluIHRoZSBQT0xMX1NUQVRVUyBwb3J0aW9uIG9mCisgKiB0aGUgTUlGX1NUQVRVUyByZWdpc3RlciB3aWxsIGNhdXNlIGFuIGludGVycnVwdC4gaWYgYSBtYXNrIGJpdCBpcyAwLAorICogY29ycmVzcG9uZGluZyBiaXQgb2YgdGhlIFBPTExfU1RBVFVTIHdpbGwgZ2VuZXJhdGUgYSBNSUYgaW50ZXJydXB0IHdoZW4gCisgKiBzZXQuIERFRkFVTFQ6IDB4RkZGRgorICovCisjZGVmaW5lICBSRUdfTUlGX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHg2MjE0IC8qIE1JRiBtYXNrIHJlZyAqLworCisvKiAzMi1iaXQgcmVnaXN0ZXIgdXNlZCB3aGVuIGluIHBvbGwgbW9kZS4gYXV0by1jbGVhcmVkIGFmdGVyIGJlaW5nIHJlYWQgKi8KKyNkZWZpbmUgIFJFR19NSUZfU1RBVFVTICAgICAgICAgICAgICAgICAgICAweDYyMTggLyogTUlGIHN0YXR1cyByZWcgKi8KKyNkZWZpbmUgICAgTUlGX1NUQVRVU19QT0xMX0RBVEFfTUFTSyAgICAgICAweEZGRkYwMDAwIC8qIHBvbGwgZGF0YSBjb250YWlucworCQkJCQkJCSB0aGUgImxhdGVzdCBpbWFnZSIKKwkJCQkJCQkgdXBkYXRlIG9mIHRoZSBYQ1ZSIAorCQkJCQkJCSByZWcgYmVpbmcgcmVhZCAqLworI2RlZmluZSAgICBNSUZfU1RBVFVTX1BPTExfREFUQV9TSElGVCAgICAgIDE2CisjZGVmaW5lICAgIE1JRl9TVEFUVVNfUE9MTF9TVEFUVVNfTUFTSyAgICAgMHgwMDAwRkZGRiAvKiBwb2xsIHN0YXR1cyBpbmRpY2F0ZXMKKwkJCQkJCQkgd2hpY2ggYml0cyBpbiB0aGUKKwkJCQkJCQkgUE9MTF9EQVRBIGZpZWxkIGhhdmUKKwkJCQkJCQkgY2hhbmdlZCBzaW5jZSB0aGUKKwkJCQkJCQkgTUlGX1NUQVRVUyByZWcgd2FzCisJCQkJCQkJIGxhc3QgcmVhZCAqLworI2RlZmluZSAgICBNSUZfU1RBVFVTX1BPTExfU1RBVFVTX1NISUZUICAgIDAKKworLyogNy1iaXQgcmVnaXN0ZXIgaGFzIGN1cnJlbnQgc3RhdGUgZm9yIGFsbCBzdGF0ZSBtYWNoaW5lcyBpbiB0aGUgTUlGICovCisjZGVmaW5lICBSRUdfTUlGX1NUQVRFX01BQ0hJTkUgICAgICAgICAgICAgMHg2MjFDIC8qIE1JRiBzdGF0ZSBtYWNoaW5lIHJlZyAqLworI2RlZmluZSAgICBNSUZfU01fQ09OVFJPTF9NQVNLICAgICAgICAgICAgIDB4MDcgICAvKiBjb250cm9sIHN0YXRlIG1hY2hpbmUgCisJCQkJCQkgICAgIHN0YXRlICovCisjZGVmaW5lICAgIE1JRl9TTV9FWEVDVVRJT05fTUFTSyAgICAgICAgICAgMHg2MCAgIC8qIGV4ZWN1dGlvbiBzdGF0ZSBtYWNoaW5lCisJCQkJCQkgICAgIHN0YXRlICovCisKKy8qKiBQQ1MvU2VyaWFsaW5rLiB0aGUgZm9sbG93aW5nIHJlZ2lzdGVycyBhcmUgZXF1aXZhbGVudCB0byB0aGUgc3RhbmRhcmQKKyAqICBNSUkgbWFuYWdlbWVudCByZWdpc3RlcnMgZXhjZXB0IHRoYXQgdGhleSdyZSBkaXJlY3RseSBtYXBwZWQgaW4gCisgKiAgQ2Fzc2luaSdzIHJlZ2lzdGVyIHNwYWNlLgorICoqLworCisvKiB0aGUgYXV0by1uZWdvdGlhdGlvbiBlbmFibGUgYml0IHNob3VsZCBiZSBwcm9ncmFtbWVkIHRoZSBzYW1lIGF0CisgKiB0aGUgbGluayBwYXJ0bmVyIGFzIGluIHRoZSBsb2NhbCBkZXZpY2UgdG8gZW5hYmxlIGF1dG8tbmVnb3RpYXRpb24gdG8KKyAqIGNvbXBsZXRlLiB3aGVuIHRoYXQgYml0IGlzIHJlcHJvZ3JhbW1lZCwgYXV0by1uZWcvbWFudWFsIGNvbmZpZyBpcyAKKyAqIHJlc3RhcnRlZCBhdXRvbWF0aWNhbGx5LgorICogREVGQVVMVDogMHgxMDQwCisgKi8KKyNkZWZpbmUgIFJFR19QQ1NfTUlJX0NUUkwgICAgICAgICAgICAgICAgICAweDkwMDAgLyogUENTIE1JSSBjb250cm9sIHJlZyAqLworI2RlZmluZSAgICBQQ1NfTUlJX0NUUkxfMTAwMF9TRUwgICAgICAgICAgIDB4MDA0MCAvKiByZWFkcyAxLiBpZ25vcmVkIG9uCisJCQkJCQkgICAgIHdyaXRlcyAqLworI2RlZmluZSAgICBQQ1NfTUlJX0NUUkxfQ09MTElTSU9OX1RFU1QgICAgIDB4MDA4MCAvKiBDT0wgc2lnbmFsIGF0IHRoZSBQQ1MKKwkJCQkJCSAgICAgdG8gTUFDIGludGVyZmFjZSBpcworCQkJCQkJICAgICBhY3RpdmF0ZWQgcmVnYXJkbGVzcworCQkJCQkJICAgICBvZiBhY3Rpdml0eSAqLworI2RlZmluZSAgICBQQ1NfTUlJX0NUUkxfRFVQTEVYICAgICAgICAgICAgIDB4MDEwMCAvKiBmb3JjZWQgMHgwLiBQQ1MgCisJCQkJCQkgICAgIGJlaGF2aW91ciBzYW1lIGZvcgorCQkJCQkJICAgICBoYWxmIGFuZCBmdWxsIGRwbHggKi8KKyNkZWZpbmUgICAgUENTX01JSV9SRVNUQVJUX0FVVE9ORUcgICAgICAgICAweDAyMDAgLyogc2VsZiBjbGVhcmluZy4gCisJCQkJCQkgICAgIHJlc3RhcnQgYXV0by0KKwkJCQkJCSAgICAgbmVnb3RpYXRpb24gKi8KKyNkZWZpbmUgICAgUENTX01JSV9JU09MQVRFICAgICAgICAgICAgICAgICAweDA0MDAgLyogcmVhZCBhcyAwLiBpZ25vcmVkCisJCQkJCQkgICAgIG9uIHdyaXRlcyAqLworI2RlZmluZSAgICBQQ1NfTUlJX1BPV0VSX0RPV04gICAgICAgICAgICAgIDB4MDgwMCAvKiByZWFkIGFzIDAuIGlnbm9yZWQKKwkJCQkJCSAgICAgb24gd3JpdGVzICovCisjZGVmaW5lICAgIFBDU19NSUlfQVVUT05FR19FTiAgICAgICAgICAgICAgMHgxMDAwIC8qIGRlZmF1bHQgMS4gUENTIGdvZXMKKwkJCQkJCSAgICAgdGhyb3VnaCBhdXRvbWF0aWMKKwkJCQkJCSAgICAgbGluayBjb25maWcgYmVmb3JlIGl0CisJCQkJCQkgICAgIGNhbiBiZSB1c2VkLiB3aGVuIDAsCisJCQkJCQkgICAgIGxpbmsgY2FuIGJlIHVzZWQgCisJCQkJCQkgICAgIHcvb3V0IGFueSBsaW5rIGNvbmZpZworCQkJCQkJICAgICBwaGFzZSAqLworI2RlZmluZSAgICBQQ1NfTUlJXzEwXzEwMF9TRUwgICAgICAgICAgICAgIDB4MjAwMCAvKiByZWFkIGFzIDAuIGlnbm9yZWQgb24gCisJCQkJCQkgICAgIHdyaXRlcyAqLworI2RlZmluZSAgICBQQ1NfTUlJX1JFU0VUICAgICAgICAgICAgICAgICAgIDB4ODAwMCAvKiByZXNldCBQQ1MuIHNlbGYtY2xlYXJzCisJCQkJCQkgICAgIHdoZW4gZG9uZSAqLworCisvKiBERUZBVUxUOiAweDAxMDggKi8KKyNkZWZpbmUgIFJFR19QQ1NfTUlJX1NUQVRVUyAgICAgICAgICAgICAgICAweDkwMDQgLyogUENTIE1JSSBzdGF0dXMgcmVnICovCisjZGVmaW5lICAgIFBDU19NSUlfU1RBVFVTX0VYVEVORF9DQVAgICAgICAgMHgwMDAxIC8qIHJlYWRzIDAgKi8KKyNkZWZpbmUgICAgUENTX01JSV9TVEFUVVNfSkFCQkVSX0RFVEVDVCAgICAweDAwMDIgLyogcmVhZHMgMCAqLworI2RlZmluZSAgICBQQ1NfTUlJX1NUQVRVU19MSU5LX1NUQVRVUyAgICAgIDB4MDAwNCAvKiAxIC0+IGxpbmsgdXAuIAorCQkJCQkJICAgICAwIC0+IGxpbmsgZG93bi4gMCBpcworCQkJCQkJICAgICBsYXRjaGVkIHNvIHRoYXQgMCBpcworCQkJCQkJICAgICBrZXB0IHVudGlsIHJlYWQuIHJlYWQKKwkJCQkJCSAgICAgMnggdG8gZGV0ZXJtaW5lIGlmIHRoZQorCQkJCQkJICAgICBsaW5rIGhhcyBnb25lIHVwIGFnYWluICovCisjZGVmaW5lICAgIFBDU19NSUlfU1RBVFVTX0FVVE9ORUdfQUJMRSAgICAgMHgwMDA4IC8qIHJlYWRzIDEgKGFibGUgdG8gcGVyZm9ybQorCQkJCQkJICAgICBhdXRvLW5lZykgKi8KKyNkZWZpbmUgICAgUENTX01JSV9TVEFUVVNfUkVNT1RFX0ZBVUxUICAgICAweDAwMTAgLyogMSAtPiByZW1vdGUgZmF1bHQgZGV0ZWN0ZWQKKwkJCQkJCSAgICAgZnJvbSByZWNlaXZlZCBsaW5rIGNvZGUKKwkJCQkJCSAgICAgd29yZC4gb25seSB2YWxpZCBhZnRlcgorCQkJCQkJICAgICBhdXRvLW5lZyBjb21wbGV0ZWQgKi8KKyNkZWZpbmUgICAgUENTX01JSV9TVEFUVVNfQVVUT05FR19DT01QICAgICAweDAwMjAgLyogMSAtPiBhdXRvLW5lZ290aWF0aW9uIAorCQkJCQkJICAgICAgICAgIGNvbXBsZXRlZAorCQkJCQkJICAgICAwIC0+IGF1dG8tbmVnb3RpYXRpb24gbm90CisJCQkJCQkgICAgIGNvbXBsZXRlZCAqLworI2RlZmluZSAgICBQQ1NfTUlJX1NUQVRVU19FWFRFTkRfU1RBVFVTICAgIDB4MDEwMCAvKiByZWFkcyBhcyAxLiB1c2VkIGFzIGFuCisJCQkJCQkgICAgIGluZGljYXRpb24gdGhhdCB0aGlzIGlzCisJCQkJCQkgICAgIGEgMTAwMCBCYXNlLVggUEhZLiB3cml0ZXMKKwkJCQkJCSAgICAgdG8gaXQgYXJlIGlnbm9yZWQgKi8KKworLyogdXNlZCBkdXJpbmcgYXV0by1uZWdvdGlhdGlvbi4gCisgKiBERUZBVUxUOiAweDAwRTAKKyAqLworI2RlZmluZSAgUkVHX1BDU19NSUlfQURWRVJUICAgICAgICAgICAgICAgIDB4OTAwOCAvKiBQQ1MgTUlJIGFkdmVydGlzZW1lbnQKKwkJCQkJCSAgICAgcmVnICovCisjZGVmaW5lICAgIFBDU19NSUlfQURWRVJUX0ZEICAgICAgICAgICAgICAgMHgwMDIwICAvKiBhZHZlcnRpc2UgZnVsbCBkdXBsZXgKKwkJCQkJCSAgICAgIDEwMDAgQmFzZS1YICovCisjZGVmaW5lICAgIFBDU19NSUlfQURWRVJUX0hEICAgICAgICAgICAgICAgMHgwMDQwICAvKiBhZHZlcnRpc2UgaGFsZi1kdXBsZXgKKwkJCQkJCSAgICAgIDEwMDAgQmFzZS1YICovCisjZGVmaW5lICAgIFBDU19NSUlfQURWRVJUX1NZTV9QQVVTRSAgICAgICAgMHgwMDgwICAvKiBhZHZlcnRpc2UgUEFVU0UKKwkJCQkJCSAgICAgIHN5bW1ldHJpYyBjYXBhYmlsaXR5ICovCisjZGVmaW5lICAgIFBDU19NSUlfQURWRVJUX0FTWU1fUEFVU0UgICAgICAgMHgwMTAwICAvKiBhZHZlcnRpc2VzIFBBVVNFIAorCQkJCQkJICAgICAgYXN5bW1ldHJpYyBjYXBhYmlsaXR5ICovCisjZGVmaW5lICAgIFBDU19NSUlfQURWRVJUX1JGX01BU0sgICAgICAgICAgMHgzMDAwIC8qIHJlbW90ZSBmYXVsdC4gd3JpdGUgYml0MTMKKwkJCQkJCSAgICAgdG8gb3B0aW9uYWxseSBpbmRpY2F0ZSB0bworCQkJCQkJICAgICBsaW5rIHBhcnRuZXIgdGhhdCBjaGlwIGlzCisJCQkJCQkgICAgIGdvaW5nIG9mZi1saW5lLiBiaXQxMiB3aWxsCisJCQkJCQkgICAgIGdldCBzZXQgd2hlbiBzaWduYWwKKwkJCQkJCSAgICAgZGV0ZWN0ID09IEZBSUwgYW5kIHdpbGwKKwkJCQkJCSAgICAgcmVtYWluIHNldCB1bnRpbCAKKwkJCQkJCSAgICAgc3VjY2Vzc2Z1bCBuZWdvdGlhdGlvbiAqLworI2RlZmluZSAgICBQQ1NfTUlJX0FEVkVSVF9BQ0sgICAgICAgICAgICAgIDB4NDAwMCAvKiAocm8pICovCisjZGVmaW5lICAgIFBDU19NSUlfQURWRVJUX05FWFRfUEFHRSAgICAgICAgMHg4MDAwIC8qIChybykgZm9yY2VkIDB4MCAqLworCisvKiBjb250ZW50cyB1cGRhdGVkIGFzIGEgcmVzdWx0IG9mIGF1dG9uZWdvdGlhdGlvbi4gbGF5b3V0IGFuZCBkZWZpbml0aW9ucworICogaWRlbnRpY2FsIHRvIFBDU19NSUlfQURWRVJUCisgKi8KKyNkZWZpbmUgIFJFR19QQ1NfTUlJX0xQQSAgICAgICAgICAgICAgICAgICAweDkwMEMgLyogUENTIE1JSSBsaW5rIHBhcnRuZXIKKwkJCQkJCSAgICAgYWJpbGl0eSByZWcgKi8KKyNkZWZpbmUgICAgUENTX01JSV9MUEFfRkQgICAgICAgICAgICAgUENTX01JSV9BRFZFUlRfRkQKKyNkZWZpbmUgICAgUENTX01JSV9MUEFfSEQgICAgICAgICAgICAgUENTX01JSV9BRFZFUlRfSEQKKyNkZWZpbmUgICAgUENTX01JSV9MUEFfU1lNX1BBVVNFICAgICAgUENTX01JSV9BRFZFUlRfU1lNX1BBVVNFCisjZGVmaW5lICAgIFBDU19NSUlfTFBBX0FTWU1fUEFVU0UgICAgIFBDU19NSUlfQURWRVJUX0FTWU1fUEFVU0UKKyNkZWZpbmUgICAgUENTX01JSV9MUEFfUkZfTUFTSyAgICAgICAgUENTX01JSV9BRFZFUlRfUkZfTUFTSworI2RlZmluZSAgICBQQ1NfTUlJX0xQQV9BQ0sgICAgICAgICAgICBQQ1NfTUlJX0FEVkVSVF9BQ0sKKyNkZWZpbmUgICAgUENTX01JSV9MUEFfTkVYVF9QQUdFICAgICAgUENTX01JSV9BRFZFUlRfTkVYVF9QQUdFCisKKy8qIERFRkFVTFQ6IDB4MCAqLworI2RlZmluZSAgUkVHX1BDU19DRkcgICAgICAgICAgICAgICAgICAgICAgIDB4OTAxMCAvKiBQQ1MgY29uZmlnIHJlZyAqLworI2RlZmluZSAgICBQQ1NfQ0ZHX0VOICAgICAgICAgICAgICAgICAgICAgIDB4MDEgICAvKiBlbmFibGUgUENTLiBtdXN0IGJlCisJCQkJCQkgICAgIDAgd2hlbiBtb2RpZnlpbmcKKwkJCQkJCSAgICAgUENTX01JSV9BRFZFUlQgKi8KKyNkZWZpbmUgICAgUENTX0NGR19TRF9PVkVSUklERSAgICAgICAgICAgICAweDAyICAgLyogc2V0cyBzaWduYWwgZGV0ZWN0IHRvCisJCQkJCQkgICAgIE9LLiBiaXQgaXMgCisJCQkJCQkgICAgIG5vbi1yZXNldHRhYmxlICovCisjZGVmaW5lICAgIFBDU19DRkdfU0RfQUNUSVZFX0xPVyAgICAgICAgICAgMHgwNCAgIC8qIGNoYW5nZXMgaW50ZXJwcmV0YXRpb24KKwkJCQkJCSAgICAgb2Ygb3B0aWNhbCBzaWduYWwgdG8gbWFrZQorCQkJCQkJICAgICBzaWduYWwgZGV0ZWN0IG9rYXkgd2hlbgorCQkJCQkJICAgICBzaWduYWwgaXMgbG93ICovCisjZGVmaW5lICAgIFBDU19DRkdfSklUVEVSX1NUVURZX01BU0sgICAgICAgMHgxOCAgIC8qIHVzZWQgdG8gbWFrZSBqaXR0ZXIKKwkJCQkJCSAgICAgbWVhc3VyZW1lbnRzLiBhIHNpbmdsZQorCQkJCQkJICAgICBjb2RlIGdyb3VwIGlzIHhtaXR0ZWQKKwkJCQkJCSAgICAgcmVndWxhcmx5LiAKKwkJCQkJCSAgICAgMHgwID0gbm9ybWFsIG9wZXJhdGlvbgorCQkJCQkJICAgICAweDEgPSBoaWdoIGZyZXEgdGVzdCAKKwkJCQkJCSAgICAgICAgICAgcGF0dGVybiwgRDIxLjUKKwkJCQkJCSAgICAgMHgyID0gbG93IGZyZXEgdGVzdAorCQkJCQkJICAgICAgICAgICBwYXR0ZXJuLCBLMjguNworCQkJCQkJICAgICAweDMgPSByZXNlcnZlZCAqLworI2RlZmluZSAgICBQQ1NfQ0ZHXzEwTVNfVElNRVJfT1ZFUlJJREUgICAgIDB4MjAgICAvKiBzaG9ydGVucyAxMC0yMG1zIGF1dG8tCisJCQkJCQkgICAgIG5lZ290aWF0aW9uIHRpbWVyIHRvIAorCQkJCQkJICAgICBhIGZldyBjeWNsZXMgZm9yIHRlc3QKKwkJCQkJCSAgICAgcHVycG9zZXMgKi8KKworLyogdXNlZCBmb3IgZGlhZ25vc3RpYyBwdXJwb3Nlcy4gYml0cyAyMC0yMiBhdXRvY2xlYXIgb24gcmVhZCAqLworI2RlZmluZSAgUkVHX1BDU19TVEFURV9NQUNISU5FICAgICAgICAgICAgIDB4OTAxNCAvKiAocm8pIFBDUyBzdGF0ZSBtYWNoaW5lIAorCQkJCQkJICAgICBhbmQgZGlhZ25vc3RpYyByZWcgKi8KKyNkZWZpbmUgICAgUENTX1NNX1RYX1NUQVRFX01BU0sgICAgICAgICAgICAweDAwMDAwMDBGIC8qIDAgYW5kIDEgaW5kaWNhdGUgCisJCQkJCQkJIHhtaXNzaW9uIG9mIGlkbGUuIAorCQkJCQkJCSBvdGhlcndpc2UsIHhtaXNzaW9uIG9mCisJCQkJCQkJIGEgcGFja2V0ICovCisjZGVmaW5lICAgIFBDU19TTV9SWF9TVEFURV9NQVNLICAgICAgICAgICAgMHgwMDAwMDBGMCAvKiAwIGluZGljYXRlcyByZWNlcHRpb24KKwkJCQkJCQkgb2YgaWRsZS4gb3RoZXJ3aXNlLAorCQkJCQkJCSByZWNlcHRpb24gb2YgcGFja2V0ICovCisjZGVmaW5lICAgIFBDU19TTV9XT1JEX1NZTkNfU1RBVEVfTUFTSyAgICAgMHgwMDAwMDcwMCAvKiAwIGluZGljYXRlcyBsb3NzIG9mCisJCQkJCQkJIHN5bmMgKi8KKyNkZWZpbmUgICAgUENTX1NNX1NFUV9ERVRFQ1RfU1RBVEVfTUFTSyAgICAweDAwMDAxODAwIC8qIGN5Y2xpbmcgdGhyb3VnaCAwLTMKKwkJCQkJCQkgaW5kaWNhdGVzIHJlY2VwdGlvbiBvZgorCQkJCQkJCSBDb25maWcgY29kZXMuIGN5Y2xpbmcKKwkJCQkJCQkgdGhyb3VnaCAwLTEgaW5kaWNhdGVzCisJCQkJCQkJIHJlY2VwdGlvbiBvZiBpZGxlcyAqLworI2RlZmluZSAgICBQQ1NfU01fTElOS19TVEFURV9NQVNLICAgICAgICAgIDB4MDAwMUUwMDAgCisjZGVmaW5lICAgICAgICBTTV9MSU5LX1NUQVRFX1VQICAgICAgICAgICAgMHgwMDAxNjAwMCAvKiBsaW5rIHN0YXRlIGlzIHVwICovCisKKyNkZWZpbmUgICAgUENTX1NNX0xPU1NfTElOS19DICAgICAgICAgICAgICAweDAwMTAwMDAwIC8qIGxvc3Mgb2YgbGluayBkdWUgdG8KKwkJCQkJCQkgcmVjZXB0IG9mIENvbmZpZyAKKwkJCQkJCQkgY29kZXMgKi8KKyNkZWZpbmUgICAgUENTX1NNX0xPU1NfTElOS19TWU5DICAgICAgICAgICAweDAwMjAwMDAwIC8qIGxvc3Mgb2YgbGluayBkdWUgdG8KKwkJCQkJCQkgbG9zcyBvZiBzeW5jICovCisjZGVmaW5lICAgIFBDU19TTV9MT1NTX1NJR05BTF9ERVRFQ1QgICAgICAgMHgwMDQwMDAwMCAvKiBzaWduYWwgZGV0ZWN0IGdvZXMgCisJCQkJCQkJIGZyb20gT0sgdG8gRkFJTC4gYml0MjkKKwkJCQkJCQkgd2lsbCBhbHNvIGJlIHNldCBpZiAKKwkJCQkJCQkgdGhpcyBpcyBzZXQgKi8KKyNkZWZpbmUgICAgUENTX1NNX05PX0xJTktfQlJFQUtMSU5LICAgICAgICAweDAxMDAwMDAwIC8qIGxpbmsgbm90IHVwIGR1ZSB0bworCQkJCQkJCXJlY2VpcHQgb2YgYnJlYWtsaW5rCisJCQkJCQkJQyBjb2RlcyBmcm9tIHBhcnRuZXIuCisJCQkJCQkJQyBjb2RlcyB3LyAwIGNvbnRlbnQKKwkJCQkJCQlyZWNlaXZlZCB0cmlnZ2VyaW5nCisJCQkJCQkJc3RhcnQvcmVzdGFydCBvZiAKKwkJCQkJCQlhdXRvbmVnb3RpYXRpb24uIAorCQkJCQkJCXNob3VsZCBiZSBzZW50IGZvcgorCQkJCQkJCW5vIGxvbmdlciB0aGFuIDIwbXMgKi8KKyNkZWZpbmUgICAgUENTX1NNX05PX0xJTktfU0VSREVTICAgICAgICAgICAweDAyMDAwMDAwIC8qIHNlcmRlcyBiZWluZyAKKwkJCQkJCQlpbml0aWFsaXplZC4gc2VlIHNlcmRlcworCQkJCQkJCXN0YXRlIHJlZyAqLworI2RlZmluZSAgICBQQ1NfU01fTk9fTElOS19DICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAgLyogQyBjb2RlcyBub3Qgc3RhYmxlIG9yCisJCQkJCQkJIG5vdCByZWNlaXZlZCAqLworI2RlZmluZSAgICBQQ1NfU01fTk9fTElOS19TWU5DICAgICAgICAgICAgIDB4MDgwMDAwMDAgLyogd29yZCBzeW5jIG5vdCAKKwkJCQkJCQkgYWNoaWV2ZWQgKi8KKyNkZWZpbmUgICAgUENTX1NNX05PX0xJTktfV0FJVF9DICAgICAgICAgICAweDEwMDAwMDAwIC8qIHdhaXRpbmcgZm9yIEMgY29kZXMgCisJCQkJCQkJIHcvIGFjayBiaXQgc2V0ICovCisjZGVmaW5lICAgIFBDU19TTV9OT19MSU5LX05PX0lETEUgICAgICAgICAgMHgyMDAwMDAwMCAvKiBsaW5rIHBhcnRuZXIgY29udGludWVzCisJCQkJCQkJIHRvIHNlbmQgQyBjb2RlcyAKKwkJCQkJCQkgaW5zdGVhZCBvZiBpZGxlIAorCQkJCQkJCSBzeW1ib2xzIG9yIHBrdCBkYXRhICovCisKKy8qIHRoaXMgcmVnaXN0ZXIgaW5kaWNhdGVzIGludGVycnVwdCBjaGFuZ2VzIGluIHNwZWNpZmljIFBDUyBNSUkgc3RhdHVzIGJpdHMuCisgKiBQQ1NfSU5UIG1heSBiZSBtYXNrZWQgYXQgdGhlIElTUiBsZXZlbC4gb25seSBhIHNpbmdsZSBiaXQgaXMgaW1wbGVtZW50ZWQKKyAqIGZvciBsaW5rIHN0YXR1cyBjaGFuZ2UuCisgKi8KKyNkZWZpbmUgIFJFR19QQ1NfSU5UUl9TVEFUVVMgICAgICAgICAgICAgICAweDkwMTggLyogUENTIGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgICAgUENTX0lOVFJfU1RBVFVTX0xJTktfQ0hBTkdFICAgICAweDA0ICAgLyogbGluayBzdGF0dXMgaGFzIGNoYW5nZWQKKwkJCQkJCSAgICAgc2luY2UgbGFzdCByZWFkICovCisKKy8qIGNvbnRyb2wgd2hpY2ggbmV0d29yayBpbnRlcmZhY2UgaXMgdXNlZC4gbm8gbW9yZSB0aGFuIG9uZSBiaXQgc2hvdWxkCisgKiBiZSBzZXQuCisgKiBERUZBVUxUOiBub25lCisgKi8KKyNkZWZpbmUgIFJFR19QQ1NfREFUQVBBVEhfTU9ERSAgICAgICAgICAgICAweDkwNTAgLyogZGF0YXBhdGggbW9kZSByZWcgKi8KKyNkZWZpbmUgICAgUENTX0RBVEFQQVRIX01PREVfTUlJICAgICAgICAgICAweDAwIC8qIFBDUyBpcyBub3QgdXNlZCBhbmQgCisJCQkJCQkgICBNSUkvR01JSSBpcyBzZWxlY3RlZC4gCisJCQkJCQkgICBzZWxlY3Rpb24gYmV0d2VlbiBNSUkgYW5kCisJCQkJCQkgICBHTUlJIGlzIGNvbnRyb2xsZWQgYnkgCisJCQkJCQkgICBYSUZfQ0ZHICovCisjZGVmaW5lICAgIFBDU19EQVRBUEFUSF9NT0RFX1NFUkRFUyAgICAgICAgMHgwMiAvKiBQQ1MgaXMgdXNlZCB2aWEgdGhlCisJCQkJCQkgICAxMC1iaXQgaW50ZXJmYWNlICovCisKKy8qIGlucHV0IHRvIHNlcmRlcyBjaGlwIG9yIHNlcmlhbGluayBibG9jayAqLworI2RlZmluZSAgUkVHX1BDU19TRVJERVNfQ1RSTCAgICAgICAgICAgICAgMHg5MDU0IC8qIHNlcmRlcyBjb250cm9sIHJlZyAqLworI2RlZmluZSAgICBQQ1NfU0VSREVTX0NUUkxfTE9PUEJBQ0sgICAgICAgMHgwMSAgIC8qIGVuYWJsZSBsb29wYmFjayBvbiAKKwkJCQkJCSAgICBzZXJkZXMgaW50ZXJmYWNlICovCisjZGVmaW5lICAgIFBDU19TRVJERVNfQ1RSTF9TWU5DRF9FTiAgICAgICAweDAyICAgLyogZW5hYmxlIHN5bmMgY2FycmllcgorCQkJCQkJICAgIGRldGVjdGlvbi4gc2hvdWxkIGJlCisJCQkJCQkgICAgMHgwIGZvciBub3JtYWwgCisJCQkJCQkgICAgb3BlcmF0aW9uICovCisjZGVmaW5lICAgIFBDU19TRVJERVNfQ1RSTF9MT0NLUkVGICAgICAgIDB4MDQgICAvKiBmcmVxdWVuY3ktbG9jayBSQkNbMDoxXQorCQkJCQkJICAgdG8gUkVGQ0xLIHdoZW4gc2V0LgorCQkJCQkJICAgd2hlbiBjbGVhciwgcmVjZWl2ZXIKKwkJCQkJCSAgIGNsb2NrIGxvY2tzIHRvIGluY29taW5nCisJCQkJCQkgICBzZXJpYWwgZGF0YSAqLworCisvKiBtdWx0aXBsZXggdGVzdCBvdXRwdXRzIGludG8gdGhlIFBST00gYWRkcmVzcyAoUEFfMyB0aHJvdWdoIFBBXzApIHBpbnMuCisgKiBzaG91bGQgYmUgMHgwIGZvciBub3JtYWwgb3BlcmF0aW9ucy4gCisgKiAwYjAwMCAgICAgICAgICBub3JtYWwgb3BlcmF0aW9uLCBQUk9NIGFkZHJlc3NbMzowXSBzZWxlY3RlZAorICogMGIwMDEgICAgICAgICAgcnhkbWEgcmVxLCByeGRtYSBhY2ssIHJ4ZG1hIHJlYWR5LCByeGRtYSByZWFkIAorICogMGIwMTAgICAgICAgICAgcnhtYWMgcmVxLCByeCBhY2ssIHJ4IHRhZywgcnggY2xrIHNoYXJlZCAKKyAqIDBiMDExICAgICAgICAgIHR4bWFjIHJlcSwgdHggYWNrLCB0eCB0YWcsIHR4IHJldHJ5IHJlcSAKKyAqIDBiMTAwICAgICAgICAgIHR4IHRwMywgdHggdHAyLCB0eCB0cDEsIHR4IHRwMCAKKyAqIDBiMTAxICAgICAgICAgIFIgcGVyaW9kIFJYLCBSIHBlcmlvZCBUWCwgUiBwZXJpb2QgSFAsIFIgcGVyaW9kIEJJTQorICogREVGQVVMVDogMHgwCisgKi8KKyNkZWZpbmUgIFJFR19QQ1NfU0hBUkVEX09VVFBVVF9TRUwgICAgICAgICAweDkwNTggLyogc2hhcmVkIG91dHB1dCBzZWxlY3QgKi8KKyNkZWZpbmUgICAgUENTX1NPU19QUk9NX0FERFJfTUFTSyAgICAgICAgICAweDAwMDcKKworLyogdXNlZCBmb3IgZGlhZ25vc3RpY3MuIHRoaXMgcmVnaXN0ZXIgaW5kaWNhdGVzIHByb2dyZXNzIG9mIHRoZSBTRVJERVMgCisgKiBib290IHVwLiAKKyAqIDBiMDAgICAgICAgdW5kZXJnb2luZyByZXNldAorICogMGIwMSAgICAgICB3YWl0aW5nIDUwMHVzIHdoaWxlIGxvY2tyZWZuIGlzIGFzc2VydGVkCisgKiAwYjEwICAgICAgIHdhaXRpbmcgZm9yIGNvbW1hIGRldGVjdAorICogMGIxMSAgICAgICByZWNlaXZlIGRhdGEgaXMgc3luY2hyb25pemVkIAorICogREVGQVVMVDogMHgwCisgKi8KKyNkZWZpbmUgIFJFR19QQ1NfU0VSREVTX1NUQVRFICAgICAgICAgICAgICAweDkwNUMgLyogKHJvKSBzZXJkZXMgc3RhdGUgKi8KKyNkZWZpbmUgICAgUENTX1NFUkRFU19TVEFURV9NQVNLICAgICAgICAgICAweDAzICAgCisKKy8qIHVzZWQgZm9yIGRpYWdub3N0aWNzLiBpbmRpY2F0ZXMgbnVtYmVyIG9mIHBhY2tldHMgdHJhbnNtaXR0ZWQgb3IgcmVjZWl2ZWQuCisgKiBjb3VudGVycyByb2xsb3ZlciB3L291dCBnZW5lcmF0aW5nIGFuIGludGVycnVwdC4KKyAqIERFRkFVTFQ6IDB4MAorICovCisjZGVmaW5lICBSRUdfUENTX1BBQ0tFVF9DT1VOVCAgICAgICAgICAgICAgMHg5MDYwIC8qIChybykgUENTIHBhY2tldCBjb3VudGVyICovCisjZGVmaW5lICAgIFBDU19QQUNLRVRfQ09VTlRfVFggICAgICAgICAgICAgMHgwMDAwMDdGRiAvKiBwa3RzIHhtaXR0ZWQgYnkgUENTICovCisjZGVmaW5lICAgIFBDU19QQUNLRVRfQ09VTlRfUlggICAgICAgICAgICAgMHgwN0ZGMDAwMCAvKiBwa3RzIHJlY3ZkIGJ5IFBDUworCQkJCQkJCSB3aGV0aGVyIHRoZXkgCisJCQkJCQkJIGVuY291bnRlcmVkIGFuIGVycm9yCisJCQkJCQkJIG9yIG5vdCAqLworCisvKiogTG9jYWxCdXMgRGV2aWNlcy4gdGhlIGZvbGxvd2luZyBwcm92aWRlcyBydW4tdGltZSBhY2Nlc3MgdG8gdGhlIAorICogIENhc3NpbmkncyBQUk9NCisgKioqLworI2RlZmluZSAgUkVHX0VYUEFOU0lPTl9ST01fUlVOX1NUQVJUICAgICAgIDB4MTAwMDAwIC8qIGV4cGFuc2lvbiByb20gcnVuIHRpbWUKKwkJCQkJCSAgICAgICBhY2Nlc3MgKi8KKyNkZWZpbmUgIFJFR19FWFBBTlNJT05fUk9NX1JVTl9FTkQgICAgICAgICAweDE3RkZGRgorCisjZGVmaW5lICBSRUdfU0VDT05EX0xPQ0FMQlVTX1NUQVJUICAgICAgICAgMHgxODAwMDAgLyogc2Vjb25kYXJ5IGxvY2FsIGJ1cyAKKwkJCQkJCSAgICAgICBkZXZpY2UgKi8KKyNkZWZpbmUgIFJFR19TRUNPTkRfTE9DQUxCVVNfRU5EICAgICAgICAgICAweDFGRkZGRgorCisvKiBlbnRyb3B5IGRldmljZSAqLworI2RlZmluZSAgUkVHX0VOVFJPUFlfU1RBUlQgICAgICAgICAgICAgICAgIFJFR19TRUNPTkRfTE9DQUxCVVNfU1RBUlQKKyNkZWZpbmUgIFJFR19FTlRST1BZX0RBVEEgICAgICAgICAgICAgICAgICAoUkVHX0VOVFJPUFlfU1RBUlQgKyAweDAwKQorI2RlZmluZSAgUkVHX0VOVFJPUFlfU1RBVFVTICAgICAgICAgICAgICAgIChSRUdfRU5UUk9QWV9TVEFSVCArIDB4MDQpCisjZGVmaW5lICAgICAgRU5UUk9QWV9TVEFUVVNfRFJEWSAgICAgICAgICAgMHgwMQorI2RlZmluZSAgICAgIEVOVFJPUFlfU1RBVFVTX0JVU1kgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgICAgICBFTlRST1BZX1NUQVRVU19DSVBIRVIgICAgICAgICAweDA0CisjZGVmaW5lICAgICAgRU5UUk9QWV9TVEFUVVNfQllQQVNTX01BU0sgICAgMHgxOAorI2RlZmluZSAgUkVHX0VOVFJPUFlfTU9ERSAgICAgICAgICAgICAgICAgIChSRUdfRU5UUk9QWV9TVEFSVCArIDB4MDUpCisjZGVmaW5lICAgICAgRU5UUk9QWV9NT0RFX0tFWV9NQVNLICAgICAgICAgMHgwNworI2RlZmluZSAgICAgIEVOVFJPUFlfTU9ERV9FTkNSWVBUICAgICAgICAgIDB4NDAKKyNkZWZpbmUgIFJFR19FTlRST1BZX1JBTkRfUkVHICAgICAgICAgICAgICAoUkVHX0VOVFJPUFlfU1RBUlQgKyAweDA2KQorI2RlZmluZSAgUkVHX0VOVFJPUFlfUkVTRVQgICAgICAgICAgICAgICAgIChSRUdfRU5UUk9QWV9TVEFSVCArIDB4MDcpCisjZGVmaW5lICAgICAgRU5UUk9QWV9SRVNFVF9ERVNfSU8gICAgICAgICAgMHgwMQorI2RlZmluZSAgICAgIEVOVFJPUFlfUkVTRVRfU1RDX01PREUgICAgICAgIDB4MDIKKyNkZWZpbmUgICAgICBFTlRST1BZX1JFU0VUX0tFWV9DQUNIRSAgICAgICAweDA0CisjZGVmaW5lICAgICAgRU5UUk9QWV9SRVNFVF9JViAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSAgUkVHX0VOVFJPUFlfSVYgICAgICAgICAgICAgICAgICAgIChSRUdfRU5UUk9QWV9TVEFSVCArIDB4MDgpCisjZGVmaW5lICBSRUdfRU5UUk9QWV9LRVkwICAgICAgICAgICAgICAgICAgKFJFR19FTlRST1BZX1NUQVJUICsgMHgxMCkKKyNkZWZpbmUgIFJFR19FTlRST1BZX0tFWU4oeCkgICAgICAgICAgICAgICAoUkVHX0VOVFJPUFlfS0VZMCArIDQqKHgpKQorCisvKiBwaHlzIG9mIGludGVyZXN0IHcvIHRoZWlyIHNwZWNpYWwgbWlpIHJlZ2lzdGVycyAqLworI2RlZmluZSBQSFlfTFVDRU5UX0IwICAgICAweDAwNDM3NDIxCisjZGVmaW5lICAgTFVDRU5UX01JSV9SRUcgICAgICAweDFGCisKKyNkZWZpbmUgUEhZX05TX0RQODMwNjUgICAgMHgyMDAwNWM3OAorI2RlZmluZSAgIERQODMwNjVfTUlJX01FTSAgICAgMHgxNgorI2RlZmluZSAgIERQODMwNjVfTUlJX1JFR0QgICAgMHgxRAorI2RlZmluZSAgIERQODMwNjVfTUlJX1JFR0UgICAgMHgxRQorCisjZGVmaW5lIFBIWV9CUk9BRENPTV81NDExIDB4MDAyMDYwNzEKKyNkZWZpbmUgUEhZX0JST0FEQ09NX0IwICAgMHgwMDIwNjA1MAorI2RlZmluZSAgIEJST0FEQ09NX01JSV9SRUc0ICAgMHgxNAorI2RlZmluZSAgIEJST0FEQ09NX01JSV9SRUc1ICAgMHgxNQorI2RlZmluZSAgIEJST0FEQ09NX01JSV9SRUc3ICAgMHgxNworI2RlZmluZSAgIEJST0FEQ09NX01JSV9SRUc4ICAgMHgxOAorCisjZGVmaW5lICAgQ0FTX01JSV9BTk5QVFIgICAgICAgICAgMHgwNworI2RlZmluZSAgIENBU19NSUlfQU5OUFJSICAgICAgICAgIDB4MDgKKyNkZWZpbmUgICBDQVNfTUlJXzEwMDBfQ1RSTCAgICAgICAweDA5CisjZGVmaW5lICAgQ0FTX01JSV8xMDAwX1NUQVRVUyAgICAgMHgwQQorI2RlZmluZSAgIENBU19NSUlfMTAwMF9FWFRFTkQgICAgIDB4MEYKKworI2RlZmluZSAgIENBU19CTVNSXzEwMDBfRVhURU5EICAgIDB4MDEwMCAvKiBzdXBwb3J0cyAxMDAwQmFzZS1UIGV4dGVuZGVkIHN0YXR1cyAqLworLyogCisgKiBpZiBhdXRvbmVnIGlzIGRpc2FibGVkLCBoZXJlJ3MgdGhlIHRhYmxlOgorICogQk1DUl9TUEVFRDEwMCA9IDEwME1icHMKKyAqIEJNQ1JfU1BFRUQxMDAwID0gMTAwME1icHMKKyAqIH4oQk1DUl9TUEVFRDEwMCB8IEJNQ1JfU1BFRUQxMDAwKSA9IDEwTWJwcworICovCisjZGVmaW5lICAgQ0FTX0JNQ1JfU1BFRUQxMDAwICAgICAgMHgwMDQwICAvKiBTZWxlY3QgMTAwME1icHMgKi8KKworI2RlZmluZSAgIENBU19BRFZFUlRJU0VfMTAwMEhBTEYgICAweDAxMDAKKyNkZWZpbmUgICBDQVNfQURWRVJUSVNFXzEwMDBGVUxMICAgMHgwMjAwCisjZGVmaW5lICAgQ0FTX0FEVkVSVElTRV9QQVVTRSAgICAgIDB4MDQwMAorI2RlZmluZSAgIENBU19BRFZFUlRJU0VfQVNZTV9QQVVTRSAweDA4MDAKKworLyogcmVndWxhciBscGEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgICBDQVNfTFBBX1BBVVNFCSAgICAgICAgICAgQ0FTX0FEVkVSVElTRV9QQVVTRQorI2RlZmluZSAgIENBU19MUEFfQVNZTV9QQVVTRSAgICAgICBDQVNfQURWRVJUSVNFX0FTWU1fUEFVU0UKKworLyogMTAwMF9TVEFUVVMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgICBDQVNfTFBBXzEwMDBIQUxGICAgICAgICAweDA0MDAKKyNkZWZpbmUgICBDQVNfTFBBXzEwMDBGVUxMICAgICAgICAweDA4MDAKKworI2RlZmluZSAgIENBU19FWFRFTkRfMTAwMFhGVUxMICAgIDB4ODAwMAorI2RlZmluZSAgIENBU19FWFRFTkRfMTAwMFhIQUxGICAgIDB4NDAwMAorI2RlZmluZSAgIENBU19FWFRFTkRfMTAwMFRGVUxMICAgIDB4MjAwMAorI2RlZmluZSAgIENBU19FWFRFTkRfMTAwMFRIQUxGICAgIDB4MTAwMAorCisvKiBjYXNzaW5pIGhlYWRlciBwYXJzZXIgZmlybXdhcmUgKi8KK3R5cGVkZWYgc3RydWN0IGNhc19ocF9pbnN0IHsKKwljb25zdCBjaGFyICpub3RlOworCisJdTE2IG1hc2ssIHZhbDsKKworCXU4IG9wOworCXU4IHNvZmYsIHNuZXh0OwkvKiBpZiBtYXRjaCBzdWNjZWVkcywgbmV3IG9mZnNldCBhbmQgbWF0Y2ggKi8KKwl1OCBmb2ZmLCBmbmV4dDsJLyogaWYgbWF0Y2ggZmFpbHMsIG5ldyBvZmZzZXQgYW5kIG1hdGNoICovCisJLyogb3V0cHV0IGluZm8gKi8KKwl1OCBvdXRvcDsgICAgLyogb3V0cHV0IG9wY29kZSAqLworCisJdTE2IG91dGFyZzsgIC8qIG91dHB1dCBhcmd1bWVudCAqLworCXU4IG91dGVuYWI7ICAvKiBvdXRwdXQgZW5hYmxlOiAwID0gbm90LCAxID0gaWYgbWF0Y2gKKwkJCSAyID0gaWYgIW1hdGNoLCAzID0gYWx3YXlzICovCisJdTggb3V0c2hpZnQ7IC8qIGJhcnJlbCBzaGlmdCByaWdodCwgNCBiaXRzICovCisJdTE2IG91dG1hc2s7IAorfSBjYXNfaHBfaW5zdF90OworCisvKiBjb21wYXJpc29uICovCisjZGVmaW5lIE9QX0VRICAgICAwIC8qIHBhY2tldCA9PSB2YWx1ZSAqLworI2RlZmluZSBPUF9MVCAgICAgMSAvKiBwYWNrZXQgPCB2YWx1ZSAqLworI2RlZmluZSBPUF9HVCAgICAgMiAvKiBwYWNrZXQgPiB2YWx1ZSAqLworI2RlZmluZSBPUF9OUCAgICAgMyAvKiBuZXcgcGFja2V0ICovCisKKy8qIG91dHB1dCBvcGNvZGVzICovCisjZGVmaW5lCUNMX1JFRwkwCisjZGVmaW5lCUxEX0ZJRAkxCisjZGVmaW5lCUxEX1NFUQkyCisjZGVmaW5lCUxEX0NUTAkzCisjZGVmaW5lCUxEX1NBUAk0CisjZGVmaW5lCUxEX1IxCTUKKyNkZWZpbmUJTERfTDMJNgorI2RlZmluZQlMRF9TVU0JNworI2RlZmluZQlMRF9IRFIJOAorI2RlZmluZQlJTV9GSUQJOQorI2RlZmluZQlJTV9TRVEJMTAKKyNkZWZpbmUJSU1fU0FQCTExCisjZGVmaW5lCUlNX1IxCTEyCisjZGVmaW5lCUlNX0NUTAkxMworI2RlZmluZQlMRF9MRU4JMTQKKyNkZWZpbmUJU1RfRkxHCTE1CisKKy8qIG1hdGNoIHNldHAgI3MgZm9yIElQNFRDUDQgKi8KKyNkZWZpbmUgUzFfUENLVCAgICAgICAgIDAKKyNkZWZpbmUgUzFfVkxBTiAgICAgICAgIDEKKyNkZWZpbmUgUzFfQ0ZJICAgICAgICAgIDIKKyNkZWZpbmUgUzFfODAyMyAgICAgICAgIDMKKyNkZWZpbmUgUzFfTExDICAgICAgICAgIDQKKyNkZWZpbmUgUzFfTExDYyAgICAgICAgIDUKKyNkZWZpbmUgUzFfSVBWNCAgICAgICAgIDYKKyNkZWZpbmUgUzFfSVBWNGMgICAgICAgIDcKKyNkZWZpbmUgUzFfSVBWNEYgICAgICAgIDgKKyNkZWZpbmUgUzFfVENQNDQgICAgICAgIDkKKyNkZWZpbmUgUzFfSVBWNiAgICAgICAgIDEwCisjZGVmaW5lIFMxX0lQVjZMICAgICAgICAxMQorI2RlZmluZSBTMV9JUFY2YyAgICAgICAgMTIKKyNkZWZpbmUgUzFfVENQNjQgICAgICAgIDEzCisjZGVmaW5lIFMxX1RDUFNRICAgICAgICAxNAorI2RlZmluZSBTMV9UQ1BGRyAgICAgICAgMTUKKyNkZWZpbmUJUzFfVENQSEwJMTYKKyNkZWZpbmUJUzFfVENQSGMJMTcKKyNkZWZpbmUJUzFfQ0xOUAkJMTgKKyNkZWZpbmUJUzFfQ0xOUDIJMTkKKyNkZWZpbmUJUzFfRFJPUAkJMjAKKyNkZWZpbmUJUzJfSFRUUAkJMjEKKyNkZWZpbmUJUzFfRVNQNAkJMjIKKyNkZWZpbmUJUzFfQUg0CQkyMworI2RlZmluZQlTMV9FU1A2CQkyNAorI2RlZmluZQlTMV9BSDYJCTI1CisKKyNkZWZpbmUgQ0FTX1BST0dfSVA0NlRDUDRfUFJFQU1CTEUgXAoreyAicGFja2V0IGFycml2YWw/IiwgMHhmZmZmLCAweDAwMDAsIE9QX05QLCAgNiwgUzFfVkxBTiwgIDAsIFMxX1BDS1QsICBcCisgIENMX1JFRywgMHgzZmYsIDEsIDB4MCwgMHgwMDAwfSwgXAoreyAiVkxBTj8iLCAweGZmZmYsIDB4ODEwMCwgT1BfRVEsICAxLCBTMV9DRkksICAgMCwgUzFfODAyMywgIFwKKyAgSU1fQ1RMLCAweDAwYSwgIDMsIDB4MCwgMHhmZmZmfSwgXAoreyAiQ0ZJPyIsIDB4MTAwMCwgMHgxMDAwLCBPUF9FUSwgIDAsIFMxX0RST1AsICAxLCBTMV84MDIzLCBcCisgIENMX1JFRywgMHgwMDAsICAwLCAweDAsIDB4MDAwMH0sIFwKK3sgIjgwMjM/IiwgMHhmZmZmLCAweDA2MDAsIE9QX0xULCAgMSwgUzFfTExDLCAgIDAsIFMxX0lQVjQsIFwKKyAgQ0xfUkVHLCAweDAwMCwgIDAsIDB4MCwgMHgwMDAwfSwgXAoreyAiTExDPyIsIDB4ZmZmZiwgMHhhYWFhLCBPUF9FUSwgIDEsIFMxX0xMQ2MsICAwLCBTMV9DTE5QLCBcCisgIENMX1JFRywgMHgwMDAsICAwLCAweDAsIDB4MDAwMH0sIFwKK3sgIkxMQ2M/IiwgMHhmZjAwLCAweDAzMDAsIE9QX0VRLCAgMiwgUzFfSVBWNCwgIDAsIFMxX0NMTlAsIFwKKyAgQ0xfUkVHLCAweDAwMCwgIDAsIDB4MCwgMHgwMDAwfSwgXAoreyAiSVBWND8iLCAweGZmZmYsIDB4MDgwMCwgT1BfRVEsICAxLCBTMV9JUFY0YywgMCwgUzFfSVBWNiwgXAorICBMRF9TQVAsIDB4MTAwLCAgMywgMHgwLCAweGZmZmZ9LCBcCit7ICJJUFY0IGNvbnQ/IiwgMHhmZjAwLCAweDQ1MDAsIE9QX0VRLCAgMywgUzFfSVBWNEYsIDAsIFMxX0NMTlAsIFwKKyAgTERfU1VNLCAweDAwYSwgIDEsIDB4MCwgMHgwMDAwfSwgXAoreyAiSVBWNCBmcmFnPyIsIDB4M2ZmZiwgMHgwMDAwLCBPUF9FUSwgIDEsIFMxX1RDUDQ0LCAwLCBTMV9DTE5QLCBcCisgIExEX0xFTiwgMHgwM2UsICAxLCAweDAsIDB4ZmZmZn0sIFwKK3sgIlRDUDQ0PyIsIDB4MDBmZiwgMHgwMDA2LCBPUF9FUSwgIDcsIFMxX1RDUFNRLCAwLCBTMV9DTE5QLCBcCisgIExEX0ZJRCwgMHgxODIsICAxLCAweDAsIDB4ZmZmZn0sIC8qIEZJRCBJUDQmVENQIHNyYytkc3QgKi8gXAoreyAiSVBWNj8iLCAweGZmZmYsIDB4ODZkZCwgT1BfRVEsICAxLCBTMV9JUFY2TCwgMCwgUzFfQ0xOUCwgIFwKKyAgTERfU1VNLCAweDAxNSwgIDEsIDB4MCwgMHgwMDAwfSwgXAoreyAiSVBWNiBsZW4iLCAweGYwMDAsIDB4NjAwMCwgT1BfRVEsICAwLCBTMV9JUFY2YywgMCwgUzFfQ0xOUCwgXAorICBJTV9SMSwgIDB4MTI4LCAgMSwgMHgwLCAweGZmZmZ9LCBcCit7ICJJUFY2IGNvbnQ/IiwgMHgwMDAwLCAweDAwMDAsIE9QX0VRLCAgMywgUzFfVENQNjQsIDAsIFMxX0NMTlAsIFwKKyAgTERfRklELCAweDQ4NCwgIDEsIDB4MCwgMHhmZmZmfSwgLyogRklEIElQNiZUQ1Agc3JjK2RzdCAqLyBcCit7ICJUQ1A2ND8iLCAweGZmMDAsIDB4MDYwMCwgT1BfRVEsIDE4LCBTMV9UQ1BTUSwgMCwgUzFfQ0xOUCwgXAorICBMRF9MRU4sIDB4MDNmLCAgMSwgMHgwLCAweGZmZmZ9CisKKyNpZmRlZiBVU0VfSFBfSVA0NlRDUDQKK3N0YXRpYyBjYXNfaHBfaW5zdF90IGNhc19wcm9nX2lwNDZ0Y3A0dGFiW10gPSB7CisJQ0FTX1BST0dfSVA0NlRDUDRfUFJFQU1CTEUsIAorCXsgIlRDUCBzZXEiLCAvKiBEQUREUiBzaG91bGQgcG9pbnQgdG8gZGVzdCBwb3J0ICovIAorCSAgMHgwMDAwLCAweDAwMDAsIE9QX0VRLCAwLCBTMV9UQ1BGRywgNCwgUzFfVENQRkcsIExEX1NFUSwgCisJICAweDA4MSwgIDMsIDB4MCwgMHhmZmZmfSwgLyogTG9hZCBUQ1Agc2VxICMgKi8KKwl7ICJUQ1AgY29udHJvbCBmbGFncyIsIDB4MDAwMCwgMHgwMDAwLCBPUF9FUSwgIDAsIFMxX1RDUEhMLCAwLAorCSAgUzFfVENQSEwsIFNUX0ZMRywgMHgwNDUsICAzLCAweDAsIDB4MDAyZn0sIC8qIExvYWQgVENQIGZsYWdzICovCisJeyAiVENQIGxlbmd0aCIsIDB4MDAwMCwgMHgwMDAwLCBPUF9FUSwgIDAsIFMxX1RDUEhjLCAwLAorCSAgUzFfVENQSGMsIExEX1IxLCAgMHgyMDUsICAzLCAweEIsIDB4ZjAwMH0sCisJeyAiVENQIGxlbmd0aCBjb250IiwgMHgwMDAwLCAweDAwMDAsIE9QX0VRLCAgMCwgUzFfUENLVCwgIDAsCisJICBTMV9QQ0tULCAgTERfSERSLCAweDBmZiwgIDMsIDB4MCwgMHhmZmZmfSwKKwl7ICJDbGVhbnVwIiwgMHgwMDAwLCAweDAwMDAsIE9QX0VRLCAgMCwgUzFfQ0xOUDIsICAwLCBTMV9DTE5QMiwKKwkgIElNX0NUTCwgMHgwMDEsICAzLCAweDAsIDB4MDAwMX0sCisJeyAiQ2xlYW51cCAyIiwgMHgwMDAwLCAweDAwMDAsIE9QX0VRLCAgMCwgUzFfUENLVCwgIDAsIFMxX1BDS1QsCisJICBJTV9DVEwsIDB4MDAwLCAgMCwgMHgwLCAweDAwMDB9LAorCXsgIkRyb3AgcGFja2V0IiwgMHgwMDAwLCAweDAwMDAsIE9QX0VRLCAgMCwgUzFfUENLVCwgIDAsIFMxX1BDS1QsCisJICBJTV9DVEwsIDB4MDgwLCAgMywgMHgwLCAweGZmZmZ9LAorCXsgTlVMTCB9LAorfTsKKyNpZmRlZiBIUF9JUDQ2VENQNF9ERUZBVUxUCisjZGVmaW5lIENBU19IUF9GSVJNV0FSRSAgICAgICAgICAgICAgIGNhc19wcm9nX2lwNDZ0Y3A0dGFiCisjZW5kaWYKKyNlbmRpZgorCisvKgorICogQWx0ZXJuYXRlIHRhYmxlIGxvYWQgd2hpY2ggZXhjbHVkZXMgSFRUUCBzZXJ2ZXIgdHJhZmZpYyBmcm9tIHJlYXNzZW1ibHkuCisgKiBJdCBpcyBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlIGJhc2ljIHRhYmxlLCB3aXRoIG9uZSBleHRyYSBzdGF0ZQorICogYW5kIGEgZmV3IGV4dHJhIGNvbXBhcmVzLiAqLworI2lmZGVmIFVTRV9IUF9JUDQ2VENQNE5PSFRUUAorc3RhdGljIGNhc19ocF9pbnN0X3QgY2FzX3Byb2dfaXA0NnRjcDRub2h0dHB0YWJbXSA9IHsKKwlDQVNfUFJPR19JUDQ2VENQNF9QUkVBTUJMRSwKKwl7ICJUQ1Agc2VxIiwgLyogREFERFIgc2hvdWxkIHBvaW50IHRvIGRlc3QgcG9ydCAqLworCSAgMHhGRkZGLCAweDAwODAsIE9QX0VRLCAgMCwgUzJfSFRUUCwgIDAsIFMxX1RDUEZHLCBMRF9TRVEsIAorCSAgMHgwODEsICAzLCAweDAsIDB4ZmZmZn0gLCAvKiBMb2FkIFRDUCBzZXEgIyAqLworCXsgIlRDUCBjb250cm9sIGZsYWdzIiwgMHhGRkZGLCAweDgwODAsIE9QX0VRLCAgMCwgUzJfSFRUUCwgIDAsCisJICBTMV9UQ1BITCwgU1RfRkxHLCAweDE0NSwgIDIsIDB4MCwgMHgwMDJmLCB9LCAvKiBMb2FkIFRDUCBmbGFncyAqLworCXsgIlRDUCBsZW5ndGgiLCAweDAwMDAsIDB4MDAwMCwgT1BfRVEsICAwLCBTMV9UQ1BIYywgMCwgUzFfVENQSGMsCisJICBMRF9SMSwgIDB4MjA1LCAgMywgMHhCLCAweGYwMDB9LAorCXsgIlRDUCBsZW5ndGggY29udCIsIDB4MDAwMCwgMHgwMDAwLCBPUF9FUSwgIDAsIFMxX1BDS1QsICAwLCBTMV9QQ0tULAorCSAgTERfSERSLCAweDBmZiwgIDMsIDB4MCwgMHhmZmZmfSwKKwl7ICJDbGVhbnVwIiwgMHgwMDAwLCAweDAwMDAsIE9QX0VRLCAgMCwgUzFfQ0xOUDIsICAwLCBTMV9DTE5QMiwKKwkgIElNX0NUTCwgMHgwMDEsICAzLCAweDAsIDB4MDAwMX0sCisJeyAiQ2xlYW51cCAyIiwgMHgwMDAwLCAweDAwMDAsIE9QX0VRLCAgMCwgUzFfUENLVCwgIDAsIFMxX1BDS1QsCisJICBDTF9SRUcsIDB4MDAyLCAgMywgMHgwLCAweDAwMDB9LAorCXsgIkRyb3AgcGFja2V0IiwgMHgwMDAwLCAweDAwMDAsIE9QX0VRLCAgMCwgUzFfUENLVCwgIDAsIFMxX1BDS1QsCisJICBJTV9DVEwsIDB4MDgwLCAgMywgMHgwLCAweGZmZmZ9LAorCXsgIk5vIEhUVFAiLCAweDAwMDAsIDB4MDAwMCwgT1BfRVEsICAwLCBTMV9QQ0tULCAgMCwgUzFfUENLVCwKKwkgIElNX0NUTCwgMHgwNDQsICAzLCAweDAsIDB4ZmZmZn0sCisJeyBOVUxMIH0sCit9OworI2lmZGVmIEhQX0lQNDZUQ1A0Tk9IVFRQX0RFRkFVTFQKKyNkZWZpbmUgQ0FTX0hQX0ZJUk1XQVJFICAgICAgICAgICAgICAgY2FzX3Byb2dfaXA0NnRjcDRub2h0dHB0YWIKKyNlbmRpZgorI2VuZGlmCisKKy8qIG1hdGNoIHN0ZXAgI3MgZm9yIElQNEZSQUcgKi8KKyNkZWZpbmUJUzNfSVBWNmMJMTEKKyNkZWZpbmUJUzNfVENQNjQJMTIKKyNkZWZpbmUJUzNfVENQU1EJMTMKKyNkZWZpbmUJUzNfVENQRkcJMTQKKyNkZWZpbmUJUzNfVENQSEwJMTUKKyNkZWZpbmUJUzNfVENQSGMJMTYKKyNkZWZpbmUJUzNfRlJBRwkJMTcKKyNkZWZpbmUJUzNfRk9GRgkJMTgKKyNkZWZpbmUJUzNfQ0xOUAkJMTkKKworI2lmZGVmIFVTRV9IUF9JUDRGUkFHCitzdGF0aWMgY2FzX2hwX2luc3RfdCBjYXNfcHJvZ19pcDRmcmFndGFiW10gPSB7CisJeyAicGFja2V0IGFycml2YWw/IiwgMHhmZmZmLCAweDAwMDAsIE9QX05QLCAgNiwgUzFfVkxBTiwgIDAsIFMxX1BDS1QsCisJICBDTF9SRUcsIDB4M2ZmLCAxLCAweDAsIDB4MDAwMH0sCisJeyAiVkxBTj8iLCAweGZmZmYsIDB4ODEwMCwgT1BfRVEsICAxLCBTMV9DRkksICAgMCwgUzFfODAyMywKKwkgIElNX0NUTCwgMHgwMGEsICAzLCAweDAsIDB4ZmZmZn0sCisJeyAiQ0ZJPyIsIDB4MTAwMCwgMHgxMDAwLCBPUF9FUSwgIDAsIFMzX0NMTlAsICAxLCBTMV84MDIzLAorCSAgQ0xfUkVHLCAweDAwMCwgIDAsIDB4MCwgMHgwMDAwfSwKKwl7ICI4MDIzPyIsIDB4ZmZmZiwgMHgwNjAwLCBPUF9MVCwgIDEsIFMxX0xMQywgICAwLCBTMV9JUFY0LAorCSAgQ0xfUkVHLCAweDAwMCwgIDAsIDB4MCwgMHgwMDAwfSwKKwl7ICJMTEM/IiwgMHhmZmZmLCAweGFhYWEsIE9QX0VRLCAgMSwgUzFfTExDYywgIDAsIFMzX0NMTlAsCisJICBDTF9SRUcsIDB4MDAwLCAgMCwgMHgwLCAweDAwMDB9LAorCXsgIkxMQ2M/IiwweGZmMDAsIDB4MDMwMCwgT1BfRVEsICAyLCBTMV9JUFY0LCAgMCwgUzNfQ0xOUCwKKwkgIENMX1JFRywgMHgwMDAsICAwLCAweDAsIDB4MDAwMH0sCisJeyAiSVBWND8iLCAweGZmZmYsIDB4MDgwMCwgT1BfRVEsICAxLCBTMV9JUFY0YywgMCwgUzFfSVBWNiwKKwkgIExEX1NBUCwgMHgxMDAsICAzLCAweDAsIDB4ZmZmZn0sCisJeyAiSVBWNCBjb250PyIsIDB4ZmYwMCwgMHg0NTAwLCBPUF9FUSwgIDMsIFMxX0lQVjRGLCAwLCBTM19DTE5QLAorCSAgTERfU1VNLCAweDAwYSwgIDEsIDB4MCwgMHgwMDAwfSwKKwl7ICJJUFY0IGZyYWc/IiwgMHgzZmZmLCAweDAwMDAsIE9QX0VRLCAgMSwgUzFfVENQNDQsIDAsIFMzX0ZSQUcsCisJICBMRF9MRU4sIDB4MDNlLCAgMywgMHgwLCAweGZmZmZ9LAorCXsgIlRDUDQ0PyIsIDB4MDBmZiwgMHgwMDA2LCBPUF9FUSwgIDcsIFMzX1RDUFNRLCAwLCBTM19DTE5QLAorCSAgTERfRklELCAweDE4MiwgIDMsIDB4MCwgMHhmZmZmfSwgLyogRklEIElQNCZUQ1Agc3JjK2RzdCAqLworCXsgIklQVjY/IiwgMHhmZmZmLCAweDg2ZGQsIE9QX0VRLCAgMSwgUzNfSVBWNmMsIDAsIFMzX0NMTlAsCisJICBMRF9TVU0sIDB4MDE1LCAgMSwgMHgwLCAweDAwMDB9LAorCXsgIklQVjYgY29udD8iLCAweGYwMDAsIDB4NjAwMCwgT1BfRVEsICAzLCBTM19UQ1A2NCwgMCwgUzNfQ0xOUCwKKwkgIExEX0ZJRCwgMHg0ODQsICAxLCAweDAsIDB4ZmZmZn0sIC8qIEZJRCBJUDYmVENQIHNyYytkc3QgKi8KKwl7ICJUQ1A2ND8iLCAweGZmMDAsIDB4MDYwMCwgT1BfRVEsIDE4LCBTM19UQ1BTUSwgMCwgUzNfQ0xOUCwKKwkgIExEX0xFTiwgMHgwM2YsICAxLCAweDAsIDB4ZmZmZn0sCisJeyAiVENQIHNlcSIsCS8qIERBRERSIHNob3VsZCBwb2ludCB0byBkZXN0IHBvcnQgKi8KKwkgIDB4MDAwMCwgMHgwMDAwLCBPUF9FUSwgIDAsIFMzX1RDUEZHLCA0LCBTM19UQ1BGRywgTERfU0VRLAorCSAgMHgwODEsICAzLCAweDAsIDB4ZmZmZn0sIC8qIExvYWQgVENQIHNlcSAjICovCisJeyAiVENQIGNvbnRyb2wgZmxhZ3MiLCAweDAwMDAsIDB4MDAwMCwgT1BfRVEsICAwLCBTM19UQ1BITCwgMCwgCisJICBTM19UQ1BITCwgU1RfRkxHLCAweDA0NSwgIDMsIDB4MCwgMHgwMDJmfSwgLyogTG9hZCBUQ1AgZmxhZ3MgKi8KKwl7ICJUQ1AgbGVuZ3RoIiwgMHgwMDAwLCAweDAwMDAsIE9QX0VRLCAgMCwgUzNfVENQSGMsIDAsIFMzX1RDUEhjLAorCSAgTERfUjEsICAweDIwNSwgIDMsIDB4QiwgMHhmMDAwfSwKKwl7ICJUQ1AgbGVuZ3RoIGNvbnQiLCAweDAwMDAsIDB4MDAwMCwgT1BfRVEsICAwLCBTMV9QQ0tULCAgMCwgUzFfUENLVCwKKwkgIExEX0hEUiwgMHgwZmYsICAzLCAweDAsIDB4ZmZmZn0sCisJeyAiSVA0IEZyYWdtZW50IiwgMHgwMDAwLCAweDAwMDAsIE9QX0VRLCAgMCwgUzNfRk9GRiwgIDAsIFMzX0ZPRkYsCisJICBMRF9GSUQsIDB4MTAzLCAgMywgMHgwLCAweGZmZmZ9LCAvKiBGSUQgSVA0IHNyYytkc3QgKi8KKwl7ICJJUDQgZnJhZyBvZmZzZXQiLCAweDAwMDAsIDB4MDAwMCwgT1BfRVEsICAwLCBTM19GT0ZGLCAgMCwgUzNfRk9GRiwKKwkgIExEX1NFUSwgMHgwNDAsICAxLCAweEQsIDB4ZmZmOH0sCisJeyAiQ2xlYW51cCIsIDB4MDAwMCwgMHgwMDAwLCBPUF9FUSwgIDAsIFMxX1BDS1QsICAwLCBTMV9QQ0tULCAgCisJICBJTV9DVEwsIDB4MDAxLCAgMywgMHgwLCAweDAwMDF9LAorCXsgTlVMTCB9LAorfTsKKyNpZmRlZiBIUF9JUDRGUkFHX0RFRkFVTFQKKyNkZWZpbmUgQ0FTX0hQX0ZJUk1XQVJFICAgICAgICAgICAgICAgY2FzX3Byb2dfaXA0ZnJhZ3RhYgorI2VuZGlmCisjZW5kaWYKKworLyoKKyAqIEFsdGVybmF0ZSB0YWJsZSB3aGljaCBkb2VzIGJhdGNoaW5nIHdpdGhvdXQgcmVhc3NlbWJseQorICovCisjaWZkZWYgVVNFX0hQX0lQNDZUQ1A0QkFUQ0gKK3N0YXRpYyBjYXNfaHBfaW5zdF90IGNhc19wcm9nX2lwNDZ0Y3A0YmF0Y2h0YWJbXSA9IHsKKwlDQVNfUFJPR19JUDQ2VENQNF9QUkVBTUJMRSwKKwl7ICJUQ1Agc2VxIiwJLyogREFERFIgc2hvdWxkIHBvaW50IHRvIGRlc3QgcG9ydCAqLworCSAgMHgwMDAwLCAweDAwMDAsIE9QX0VRLCAgMCwgUzFfVENQRkcsIDAsIFMxX1RDUEZHLCBMRF9TRVEsCisJICAweDA4MSwgIDMsIDB4MCwgMHhmZmZmfSwgLyogTG9hZCBUQ1Agc2VxICMgKi8KKwl7ICJUQ1AgY29udHJvbCBmbGFncyIsIDB4MDAwMCwgMHgwMDAwLCBPUF9FUSwgIDAsIFMxX1RDUEhMLCAwLCAKKwkgIFMxX1RDUEhMLCBTVF9GTEcsIDB4MDAwLCAgMywgMHgwLCAweDAwMDB9LCAvKiBMb2FkIFRDUCBmbGFncyAqLworCXsgIlRDUCBsZW5ndGgiLCAweDAwMDAsIDB4MDAwMCwgT1BfRVEsICAwLCBTMV9UQ1BIYywgMCwgCisJICBTMV9UQ1BIYywgTERfUjEsICAweDIwNSwgIDMsIDB4QiwgMHhmMDAwfSwKKwl7ICJUQ1AgbGVuZ3RoIGNvbnQiLCAweDAwMDAsIDB4MDAwMCwgT1BfRVEsICAwLCBTMV9QQ0tULCAgMCwgCisJICBTMV9QQ0tULCAgSU1fQ1RMLCAweDA0MCwgIDMsIDB4MCwgMHhmZmZmfSwgLyogc2V0IGJhdGNoIGJpdCAqLworCXsgIkNsZWFudXAiLCAweDAwMDAsIDB4MDAwMCwgT1BfRVEsICAwLCBTMV9QQ0tULCAgMCwgUzFfUENLVCwKKwkgIElNX0NUTCwgMHgwMDEsICAzLCAweDAsIDB4MDAwMX0sCisJeyAiRHJvcCBwYWNrZXQiLCAweDAwMDAsIDB4MDAwMCwgT1BfRVEsICAwLCBTMV9QQ0tULCAgMCwKKwkgIFMxX1BDS1QsICBJTV9DVEwsIDB4MDgwLCAgMywgMHgwLCAweGZmZmZ9LAorCXsgTlVMTCB9LAorfTsKKyNpZmRlZiBIUF9JUDQ2VENQNEJBVENIX0RFRkFVTFQKKyNkZWZpbmUgQ0FTX0hQX0ZJUk1XQVJFICAgICAgICAgICAgICAgY2FzX3Byb2dfaXA0NnRjcDRiYXRjaHRhYgorI2VuZGlmCisjZW5kaWYKKworLyogV29ya2Fyb3VuZCBmb3IgQ2Fzc2luaSByZXYyIGRlc2NyaXB0b3IgY29ycnVwdGlvbiBwcm9ibGVtLgorICogRG9lcyBiYXRjaGluZyB3aXRob3V0IHJlYXNzZW1ibHksIGFuZCBzZXRzIHRoZSBTQVAgdG8gYSBrbm93bgorICogZGF0YSBwYXR0ZXJuIGZvciBhbGwgcGFja2V0cy4KKyAqLworI2lmZGVmIFVTRV9IUF9XT1JLQVJPVU5ECitzdGF0aWMgY2FzX2hwX2luc3RfdCAgY2FzX3Byb2dfd29ya2Fyb3VuZHRhYltdID0geworCXsgInBhY2tldCBhcnJpdmFsPyIsIDB4ZmZmZiwgMHgwMDAwLCBPUF9OUCwgIDYsIFMxX1ZMQU4sICAwLAorCSAgUzFfUENLVCwgIENMX1JFRywgMHgzZmYsICAxLCAweDAsIDB4MDAwMH0gLAorCXsgIlZMQU4/IiwgMHhmZmZmLCAweDgxMDAsIE9QX0VRLCAgMSwgUzFfQ0ZJLCAwLCBTMV84MDIzLCAKKwkgIElNX0NUTCwgMHgwNGEsICAzLCAweDAsIDB4ZmZmZn0sCisJeyAiQ0ZJPyIsIDB4MTAwMCwgMHgxMDAwLCBPUF9FUSwgIDAsIFMxX0NMTlAsICAxLCBTMV84MDIzLAorCSAgQ0xfUkVHLCAweDAwMCwgIDAsIDB4MCwgMHgwMDAwfSwKKwl7ICI4MDIzPyIsIDB4ZmZmZiwgMHgwNjAwLCBPUF9MVCwgIDEsIFMxX0xMQywgICAwLCBTMV9JUFY0LAorCSAgQ0xfUkVHLCAweDAwMCwgIDAsIDB4MCwgMHgwMDAwfSwKKwl7ICJMTEM/IiwgMHhmZmZmLCAweGFhYWEsIE9QX0VRLCAgMSwgUzFfTExDYywgIDAsIFMxX0NMTlAsCisJICBDTF9SRUcsIDB4MDAwLCAgMCwgMHgwLCAweDAwMDB9LAorCXsgIkxMQ2M/IiwgMHhmZjAwLCAweDAzMDAsIE9QX0VRLCAgMiwgUzFfSVBWNCwgIDAsIFMxX0NMTlAsCisJICBDTF9SRUcsIDB4MDAwLCAgMCwgMHgwLCAweDAwMDB9LAorCXsgIklQVjQ/IiwgMHhmZmZmLCAweDA4MDAsIE9QX0VRLCAgMSwgUzFfSVBWNGMsIDAsIFMxX0lQVjYsCisJICBJTV9TQVAsIDB4NkFFLCAgMywgMHgwLCAweGZmZmZ9LAorCXsgIklQVjQgY29udD8iLCAweGZmMDAsIDB4NDUwMCwgT1BfRVEsICAzLCBTMV9JUFY0RiwgMCwgUzFfQ0xOUCwKKwkgIExEX1NVTSwgMHgwMGEsICAxLCAweDAsIDB4MDAwMH0sCisJeyAiSVBWNCBmcmFnPyIsIDB4M2ZmZiwgMHgwMDAwLCBPUF9FUSwgIDEsIFMxX1RDUDQ0LCAwLCBTMV9DTE5QLCAgCisJICBMRF9MRU4sIDB4MDNlLCAgMSwgMHgwLCAweGZmZmZ9LAorCXsgIlRDUDQ0PyIsIDB4MDBmZiwgMHgwMDA2LCBPUF9FUSwgIDcsIFMxX1RDUFNRLCAwLCBTMV9DTE5QLAorCSAgTERfRklELCAweDE4MiwgIDMsIDB4MCwgMHhmZmZmfSwgLyogRklEIElQNCZUQ1Agc3JjK2RzdCAqLworCXsgIklQVjY/IiwgMHhmZmZmLCAweDg2ZGQsIE9QX0VRLCAgMSwgUzFfSVBWNkwsIDAsIFMxX0NMTlAsCisJICBMRF9TVU0sIDB4MDE1LCAgMSwgMHgwLCAweDAwMDB9LAorCXsgIklQVjYgbGVuIiwgMHhmMDAwLCAweDYwMDAsIE9QX0VRLCAgMCwgUzFfSVBWNmMsIDAsIFMxX0NMTlAsCisJICBJTV9SMSwgIDB4MTI4LCAgMSwgMHgwLCAweGZmZmZ9LAorCXsgIklQVjYgY29udD8iLCAweDAwMDAsIDB4MDAwMCwgT1BfRVEsICAzLCBTMV9UQ1A2NCwgMCwgUzFfQ0xOUCwKKwkgIExEX0ZJRCwgMHg0ODQsICAxLCAweDAsIDB4ZmZmZn0sIC8qIEZJRCBJUDYmVENQIHNyYytkc3QgKi8KKwl7ICJUQ1A2ND8iLCAweGZmMDAsIDB4MDYwMCwgT1BfRVEsIDE4LCBTMV9UQ1BTUSwgMCwgUzFfQ0xOUCwKKwkgIExEX0xFTiwgMHgwM2YsICAxLCAweDAsIDB4ZmZmZn0sCisJeyAiVENQIHNlcSIsICAgICAgLyogREFERFIgc2hvdWxkIHBvaW50IHRvIGRlc3QgcG9ydCAqLworCSAgMHgwMDAwLCAweDAwMDAsIE9QX0VRLCAgMCwgUzFfVENQRkcsIDQsIFMxX1RDUEZHLCBMRF9TRVEsIAorCSAgMHgwODEsICAzLCAweDAsIDB4ZmZmZn0sIC8qIExvYWQgVENQIHNlcSAjICovCisJeyAiVENQIGNvbnRyb2wgZmxhZ3MiLCAweDAwMDAsIDB4MDAwMCwgT1BfRVEsICAwLCBTMV9UQ1BITCwgMCwKKwkgIFMxX1RDUEhMLCBTVF9GTEcsIDB4MDQ1LCAgMywgMHgwLCAweDAwMmZ9LCAvKiBMb2FkIFRDUCBmbGFncyAqLworCXsgIlRDUCBsZW5ndGgiLCAweDAwMDAsIDB4MDAwMCwgT1BfRVEsICAwLCBTMV9UQ1BIYywgMCwgUzFfVENQSGMsCisJICBMRF9SMSwgIDB4MjA1LCAgMywgMHhCLCAweGYwMDB9LAorCXsgIlRDUCBsZW5ndGggY29udCIsIDB4MDAwMCwgMHgwMDAwLCBPUF9FUSwgIDAsIFMxX1BDS1QsICAwLAorCSAgUzFfUENLVCwgIExEX0hEUiwgMHgwZmYsICAzLCAweDAsIDB4ZmZmZn0sCisJeyAiQ2xlYW51cCIsIDB4MDAwMCwgMHgwMDAwLCBPUF9FUSwgIDAsIFMxX0NMTlAyLCAwLCBTMV9DTE5QMiwKKwkgIElNX1NBUCwgMHg2QUUsICAzLCAweDAsIDB4ZmZmZn0gLAorCXsgIkNsZWFudXAgMiIsIDB4MDAwMCwgMHgwMDAwLCBPUF9FUSwgIDAsIFMxX1BDS1QsICAwLCBTMV9QQ0tULAorCSAgSU1fQ1RMLCAweDAwMSwgIDMsIDB4MCwgMHgwMDAxfSwKKwl7IE5VTEwgfSwKK307CisjaWZkZWYgSFBfV09SS0FST1VORF9ERUZBVUxUCisjZGVmaW5lIENBU19IUF9GSVJNV0FSRSAgICAgICAgICAgICAgIGNhc19wcm9nX3dvcmthcm91bmR0YWIKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBVU0VfSFBfRU5DUllQVAorc3RhdGljIGNhc19ocF9pbnN0X3QgIGNhc19wcm9nX2VuY3J5cHRpb250YWJbXSA9IHsKKwl7ICJwYWNrZXQgYXJyaXZhbD8iLCAweGZmZmYsIDB4MDAwMCwgT1BfTlAsICA2LCBTMV9WTEFOLCAgMCwgCisJICBTMV9QQ0tULCAgQ0xfUkVHLCAweDNmZiwgIDEsIDB4MCwgMHgwMDAwfSwKKwl7ICJWTEFOPyIsIDB4ZmZmZiwgMHg4MTAwLCBPUF9FUSwgIDEsIFMxX0NGSSwgICAwLCBTMV84MDIzLAorCSAgSU1fQ1RMLCAweDAwYSwgIDMsIDB4MCwgMHhmZmZmfSwKKyNpZiAwCisvLyJDRkk/IiwgLyogMDIgRklORCBDRkkgYW5kIElmIEZJTkQgZ28gdG8gUzFfRFJPUCAqLworLy8weDEwMDAsIDB4MTAwMCwgT1BfRVEsICAwLCBTMV9EUk9QLCAgMSwgUzFfODAyMywgIENMX1JFRywgMHgwMDAsICAwLCAweDAsIDB4MDAKKwkwMCwKKyNlbmRpZgorCXsgIkNGST8iLCAvKiBGSU5EIENGSSBhbmQgSWYgRklORCBnbyB0byBDbGVhblVQMSAoaWdub3JlIGFuZCBzZW5kIHRvIGhvc3QpICovCisJICAweDEwMDAsIDB4MTAwMCwgT1BfRVEsICAwLCBTMV9DTE5QLCAgMSwgUzFfODAyMywgIAorCSAgQ0xfUkVHLCAweDAwMCwgIDAsIDB4MCwgMHgwMDAwfSwKKwl7ICI4MDIzPyIsIDB4ZmZmZiwgMHgwNjAwLCBPUF9MVCwgIDEsIFMxX0xMQywgICAwLCBTMV9JUFY0LCAKKwkgIENMX1JFRywgMHgwMDAsICAwLCAweDAsIDB4MDAwMH0sCisJeyAiTExDPyIsIDB4ZmZmZiwgMHhhYWFhLCBPUF9FUSwgIDEsIFMxX0xMQ2MsICAwLCBTMV9DTE5QLCAKKwkgIENMX1JFRywgMHgwMDAsICAwLCAweDAsIDB4MDAwMH0sCisJeyAiTExDYz8iLCAweGZmMDAsIDB4MDMwMCwgT1BfRVEsICAyLCBTMV9JUFY0LCAgMCwgUzFfQ0xOUCwKKwkgIENMX1JFRywgMHgwMDAsICAwLCAweDAsIDB4MDAwMH0sCisJeyAiSVBWND8iLCAweGZmZmYsIDB4MDgwMCwgT1BfRVEsICAxLCBTMV9JUFY0YywgMCwgUzFfSVBWNiwgIAorCSAgTERfU0FQLCAweDEwMCwgIDMsIDB4MCwgMHhmZmZmfSwKKwl7ICJJUFY0IGNvbnQ/IiwgMHhmZjAwLCAweDQ1MDAsIE9QX0VRLCAgMywgUzFfSVBWNEYsIDAsIFMxX0NMTlAsICAKKwkgIExEX1NVTSwgMHgwMGEsICAxLCAweDAsIDB4MDAwMH0sCisJeyAiSVBWNCBmcmFnPyIsIDB4M2ZmZiwgMHgwMDAwLCBPUF9FUSwgIDEsIFMxX1RDUDQ0LCAwLCBTMV9DTE5QLCAKKwkgIExEX0xFTiwgMHgwM2UsICAxLCAweDAsIDB4ZmZmZn0sCisJeyAiVENQNDQ/IiwgMHgwMGZmLCAweDAwMDYsIE9QX0VRLCAgNywgUzFfVENQU1EsIDAsIFMxX0VTUDQsCisJICBMRF9GSUQsIDB4MTgyLCAgMSwgMHgwLCAweGZmZmZ9LCAvKiBGSUQgSVA0JlRDUCBzcmMrZHN0ICovCisJeyAiSVBWNj8iLCAweGZmZmYsIDB4ODZkZCwgT1BfRVEsICAxLCBTMV9JUFY2TCwgMCwgUzFfQ0xOUCwKKwkgIExEX1NVTSwgMHgwMTUsICAxLCAweDAsIDB4MDAwMH0sCisJeyAiSVBWNiBsZW4iLCAweGYwMDAsIDB4NjAwMCwgT1BfRVEsICAwLCBTMV9JUFY2YywgMCwgUzFfQ0xOUCwKKwkgIElNX1IxLCAgMHgxMjgsICAxLCAweDAsIDB4ZmZmZn0sCisJeyAiSVBWNiBjb250PyIsIDB4MDAwMCwgMHgwMDAwLCBPUF9FUSwgIDMsIFMxX1RDUDY0LCAwLCBTMV9DTE5QLCAKKwkgIExEX0ZJRCwgMHg0ODQsICAxLCAweDAsIDB4ZmZmZn0sIC8qICBGSUQgSVA2JlRDUCBzcmMrZHN0ICovCisJeyAiVENQNjQ/IiwgCisjaWYgMAorLy9AQEAweGZmMDAsIDB4MDYwMCwgT1BfRVEsIDE4LCBTMV9UQ1BTUSwgMCwgUzFfRVNQNiwgIExEX0xFTiwgMHgwM2YsICAxLCAweDAsIDB4ZmZmZiwKKyNlbmRpZgorCSAgMHhmZjAwLCAweDA2MDAsIE9QX0VRLCAxMiwgUzFfVENQU1EsIDAsIFMxX0VTUDYsICBMRF9MRU4sCisJICAweDAzZiwgIDEsIDB4MCwgMHhmZmZmfSwKKwl7ICJUQ1Agc2VxIiwgLyogMTQ6REFERFIgc2hvdWxkIHBvaW50IHRvIGRlc3QgcG9ydCAqLworCSAgMHhGRkZGLCAweDAwODAsIE9QX0VRLCAgMCwgUzJfSFRUUCwgIDAsIFMxX1RDUEZHLCBMRF9TRVEsCisJICAweDA4MSwgIDMsIDB4MCwgMHhmZmZmfSwgLyogTG9hZCBUQ1Agc2VxICMgKi8KKwl7ICJUQ1AgY29udHJvbCBmbGFncyIsIDB4RkZGRiwgMHg4MDgwLCBPUF9FUSwgIDAsIFMyX0hUVFAsICAwLAorCSAgUzFfVENQSEwsIFNUX0ZMRywgMHgxNDUsICAyLCAweDAsIDB4MDAyZn0sIC8qIExvYWQgVENQIGZsYWdzICovCisJeyAiVENQIGxlbmd0aCIsIDB4MDAwMCwgMHgwMDAwLCBPUF9FUSwgIDAsIFMxX1RDUEhjLCAwLCBTMV9UQ1BIYywgCisJICBMRF9SMSwgIDB4MjA1LCAgMywgMHhCLCAweGYwMDB9ICwKKwl7ICJUQ1AgbGVuZ3RoIGNvbnQiLCAweDAwMDAsIDB4MDAwMCwgT1BfRVEsICAwLCBTMV9QQ0tULCAgMCwKKwkgIFMxX1BDS1QsICBMRF9IRFIsIDB4MGZmLCAgMywgMHgwLCAweGZmZmZ9LCAKKwl7ICJDbGVhbnVwIiwgMHgwMDAwLCAweDAwMDAsIE9QX0VRLCAgMCwgUzFfQ0xOUDIsICAwLCBTMV9DTE5QMiwKKwkgIElNX0NUTCwgMHgwMDEsICAzLCAweDAsIDB4MDAwMX0sCisJeyAiQ2xlYW51cCAyIiwgMHgwMDAwLCAweDAwMDAsIE9QX0VRLCAgMCwgUzFfUENLVCwgIDAsIFMxX1BDS1QsCisJICBDTF9SRUcsIDB4MDAyLCAgMywgMHgwLCAweDAwMDB9LAorCXsgIkRyb3AgcGFja2V0IiwgMHgwMDAwLCAweDAwMDAsIE9QX0VRLCAgMCwgUzFfUENLVCwgIDAsIFMxX1BDS1QsCisJICBJTV9DVEwsIDB4MDgwLCAgMywgMHgwLCAweGZmZmZ9LAorCXsgIk5vIEhUVFAiLCAweDAwMDAsIDB4MDAwMCwgT1BfRVEsICAwLCBTMV9QQ0tULCAgMCwgUzFfUENLVCwKKwkgIElNX0NUTCwgMHgwNDQsICAzLCAweDAsIDB4ZmZmZn0sIAorCXsgIklQVjQgRVNQIGVuY3J5cHRlZD8iLCAgLyogUzFfRVNQNCAqLworCSAgMHgwMGZmLCAweDAwMzIsIE9QX0VRLCAgMCwgUzFfQ0xOUDIsIDAsIFMxX0FINCwgSU1fQ1RMLAorCSAgMHgwMjEsIDEsICAweDAsIDB4ZmZmZn0sCisJeyAiSVBWNCBBSCBlbmNyeXB0ZWQ/IiwgICAvKiBTMV9BSDQgKi8KKwkgIDB4MDBmZiwgMHgwMDMzLCBPUF9FUSwgIDAsIFMxX0NMTlAyLCAwLCBTMV9DTE5QLCBJTV9DVEwsCisJICAweDAyMSwgMSwgIDB4MCwgMHhmZmZmfSwKKwl7ICJJUFY2IEVTUCBlbmNyeXB0ZWQ/IiwgIC8qIFMxX0VTUDYgKi8KKyNpZiAwCisvL0BAQDB4MDBmZiwgMHgwMDMyLCBPUF9FUSwgIDAsIFMxX0NMTlAyLCAwLCBTMV9BSDYsIElNX0NUTCwgMHgwMjEsIDEsICAweDAsIDB4ZmZmZiwKKyNlbmRpZgorCSAgMHhmZjAwLCAweDMyMDAsIE9QX0VRLCAgMCwgUzFfQ0xOUDIsIDAsIFMxX0FINiwgSU1fQ1RMLAorCSAgMHgwMjEsIDEsICAweDAsIDB4ZmZmZn0sCisJeyAiSVBWNiBBSCBlbmNyeXB0ZWQ/IiwgICAvKiBTMV9BSDYgKi8KKyNpZiAwCisvL0BAQDB4MDBmZiwgMHgwMDMzLCBPUF9FUSwgIDAsIFMxX0NMTlAyLCAwLCBTMV9DTE5QLCBJTV9DVEwsIDB4MDIxLCAxLCAgMHgwLCAweGZmZmYsCisjZW5kaWYKKwkgIDB4ZmYwMCwgMHgzMzAwLCBPUF9FUSwgIDAsIFMxX0NMTlAyLCAwLCBTMV9DTE5QLCBJTV9DVEwsCisJICAweDAyMSwgMSwgIDB4MCwgMHhmZmZmfSwKKwl7IE5VTEwgfSwKK307CisjaWZkZWYgSFBfRU5DUllQVF9ERUZBVUxUCisjZGVmaW5lIENBU19IUF9GSVJNV0FSRSAgICAgICAgICAgICAgIGNhc19wcm9nX2VuY3J5cHRpb250YWIKKyNlbmRpZgorI2VuZGlmCisKK3N0YXRpYyBjYXNfaHBfaW5zdF90IGNhc19wcm9nX251bGxbXSA9IHsge05VTEx9IH07CisjaWZkZWYgSFBfTlVMTF9ERUZBVUxUCisjZGVmaW5lIENBU19IUF9GSVJNV0FSRSAgICAgICAgICAgICAgIGNhc19wcm9nX251bGwKKyNlbmRpZgorCisvKiBmaXJtd2FyZSBwYXRjaCBmb3IgTlNfRFA4MzA2NSAqLwordHlwZWRlZiBzdHJ1Y3QgY2FzX3NhdHVybl9wYXRjaCB7CisJdTE2IGFkZHI7CisJdTE2IHZhbDsKK30gY2FzX3NhdHVybl9wYXRjaF90OworCisjaWYgMQorY2FzX3NhdHVybl9wYXRjaF90IGNhc19zYXR1cm5fcGF0Y2hbXSA9IHsKK3sweDgyMDAsICAgIDB4MDA3ZX0sIHsweDgyMDEsICAgIDB4MDA4Mn0sIHsweDgyMDIsICAgIDB4MDAwOX0sCit7MHg4MjAzLCAgICAweDAwMDB9LCB7MHg4MjA0LCAgICAweDAwMDB9LCB7MHg4MjA1LCAgICAweDAwMDB9LAorezB4ODIwNiwgICAgMHgwMDAwfSwgezB4ODIwNywgICAgMHgwMDAwfSwgezB4ODIwOCwgICAgMHgwMDAwfSwKK3sweDgyMDksICAgIDB4MDA4ZX0sIHsweDgyMGEsICAgIDB4MDA4ZX0sIHsweDgyMGIsICAgIDB4MDBmZn0sCit7MHg4MjBjLCAgICAweDAwY2V9LCB7MHg4MjBkLCAgICAweDAwODJ9LCB7MHg4MjBlLCAgICAweDAwMjV9LAorezB4ODIwZiwgICAgMHgwMGZmfSwgezB4ODIxMCwgICAgMHgwMDAxfSwgezB4ODIxMSwgICAgMHgwMDBmfSwKK3sweDgyMTIsICAgIDB4MDBjZX0sIHsweDgyMTMsICAgIDB4MDA4NH0sIHsweDgyMTQsICAgIDB4MDAyNn0sCit7MHg4MjE1LCAgICAweDAwZmZ9LCB7MHg4MjE2LCAgICAweDAwMDF9LCB7MHg4MjE3LCAgICAweDAwMTF9LAorezB4ODIxOCwgICAgMHgwMGNlfSwgezB4ODIxOSwgICAgMHgwMDg1fSwgezB4ODIxYSwgICAgMHgwMDNkfSwKK3sweDgyMWIsICAgIDB4MDBkZn0sIHsweDgyMWMsICAgIDB4MDBlNX0sIHsweDgyMWQsICAgIDB4MDA4Nn0sCit7MHg4MjFlLCAgICAweDAwMzl9LCB7MHg4MjFmLCAgICAweDAwYjd9LCB7MHg4MjIwLCAgICAweDAwOGZ9LAorezB4ODIyMSwgICAgMHgwMGY4fSwgezB4ODIyMiwgICAgMHgwMDdlfSwgezB4ODIyMywgICAgMHgwMGMzfSwKK3sweDgyMjQsICAgIDB4MDBjMn0sIHsweDgyMjUsICAgIDB4MDA5Nn0sIHsweDgyMjYsICAgIDB4MDA0N30sCit7MHg4MjI3LCAgICAweDAwODR9LCB7MHg4MjI4LCAgICAweDAwZjN9LCB7MHg4MjI5LCAgICAweDAwOGF9LAorezB4ODIyYSwgICAgMHgwMDAwfSwgezB4ODIyYiwgICAgMHgwMDk3fSwgezB4ODIyYywgICAgMHgwMDQ3fSwKK3sweDgyMmQsICAgIDB4MDBjZX0sIHsweDgyMmUsICAgIDB4MDA4Mn0sIHsweDgyMmYsICAgIDB4MDAzM30sCit7MHg4MjMwLCAgICAweDAwZmZ9LCB7MHg4MjMxLCAgICAweDAwMDF9LCB7MHg4MjMyLCAgICAweDAwMGZ9LAorezB4ODIzMywgICAgMHgwMDk2fSwgezB4ODIzNCwgICAgMHgwMDQ2fSwgezB4ODIzNSwgICAgMHgwMDg0fSwKK3sweDgyMzYsICAgIDB4MDAwY30sIHsweDgyMzcsICAgIDB4MDA4MX0sIHsweDgyMzgsICAgIDB4MDAwNH0sCit7MHg4MjM5LCAgICAweDAwMjd9LCB7MHg4MjNhLCAgICAweDAwMGJ9LCB7MHg4MjNiLCAgICAweDAwOTZ9LAorezB4ODIzYywgICAgMHgwMDQ2fSwgezB4ODIzZCwgICAgMHgwMDg0fSwgezB4ODIzZSwgICAgMHgwMDBjfSwKK3sweDgyM2YsICAgIDB4MDA4MX0sIHsweDgyNDAsICAgIDB4MDAwOH0sIHsweDgyNDEsICAgIDB4MDAyN30sCit7MHg4MjQyLCAgICAweDAwNTd9LCB7MHg4MjQzLCAgICAweDAwN2V9LCB7MHg4MjQ0LCAgICAweDAwODR9LAorezB4ODI0NSwgICAgMHgwMDI1fSwgezB4ODI0NiwgICAgMHgwMDk2fSwgezB4ODI0NywgICAgMHgwMDQ3fSwKK3sweDgyNDgsICAgIDB4MDA4NH0sIHsweDgyNDksICAgIDB4MDBmM30sIHsweDgyNGEsICAgIDB4MDA4YX0sCit7MHg4MjRiLCAgICAweDAwMDR9LCB7MHg4MjRjLCAgICAweDAwOTd9LCB7MHg4MjRkLCAgICAweDAwNDd9LAorezB4ODI0ZSwgICAgMHgwMGNlfSwgezB4ODI0ZiwgICAgMHgwMDgyfSwgezB4ODI1MCwgICAgMHgwMDU0fSwKK3sweDgyNTEsICAgIDB4MDBmZn0sIHsweDgyNTIsICAgIDB4MDAwMX0sIHsweDgyNTMsICAgIDB4MDAwZn0sCit7MHg4MjU0LCAgICAweDAwOTZ9LCB7MHg4MjU1LCAgICAweDAwNDZ9LCB7MHg4MjU2LCAgICAweDAwODR9LAorezB4ODI1NywgICAgMHgwMDBjfSwgezB4ODI1OCwgICAgMHgwMDgxfSwgezB4ODI1OSwgICAgMHgwMDA0fSwKK3sweDgyNWEsICAgIDB4MDAyNn0sIHsweDgyNWIsICAgIDB4MDAzOH0sIHsweDgyNWMsICAgIDB4MDBiNn0sCit7MHg4MjVkLCAgICAweDAwMTJ9LCB7MHg4MjVlLCAgICAweDAwMjB9LCB7MHg4MjVmLCAgICAweDAwODR9LAorezB4ODI2MCwgICAgMHgwMDIwfSwgezB4ODI2MSwgICAgMHgwMDI2fSwgezB4ODI2MiwgICAgMHgwMDAzfSwKK3sweDgyNjMsICAgIDB4MDA3ZX0sIHsweDgyNjQsICAgIDB4MDA4NH0sIHsweDgyNjUsICAgIDB4MDAyNX0sCit7MHg4MjY2LCAgICAweDAwOTZ9LCB7MHg4MjY3LCAgICAweDAwN2J9LCB7MHg4MjY4LCAgICAweDAwZDZ9LAorezB4ODI2OSwgICAgMHgwMDdjfSwgezB4ODI2YSwgICAgMHgwMGZlfSwgezB4ODI2YiwgICAgMHgwMDhmfSwKK3sweDgyNmMsICAgIDB4MDA1Nn0sIHsweDgyNmQsICAgIDB4MDBiZH0sIHsweDgyNmUsICAgIDB4MDBmN30sCit7MHg4MjZmLCAgICAweDAwYjZ9LCB7MHg4MjcwLCAgICAweDAwZmV9LCB7MHg4MjcxLCAgICAweDAwOGZ9LAorezB4ODI3MiwgICAgMHgwMDRlfSwgezB4ODI3MywgICAgMHgwMGJkfSwgezB4ODI3NCwgICAgMHgwMGVjfSwKK3sweDgyNzUsICAgIDB4MDA4ZX0sIHsweDgyNzYsICAgIDB4MDBiZH0sIHsweDgyNzcsICAgIDB4MDBmYX0sCit7MHg4Mjc4LCAgICAweDAwZjd9LCB7MHg4Mjc5LCAgICAweDAwYmR9LCB7MHg4MjdhLCAgICAweDAwZjd9LAorezB4ODI3YiwgICAgMHgwMDI4fSwgezB4ODI3YywgICAgMHgwMGNlfSwgezB4ODI3ZCwgICAgMHgwMDgyfSwKK3sweDgyN2UsICAgIDB4MDA4Mn0sIHsweDgyN2YsICAgIDB4MDBmZn0sIHsweDgyODAsICAgIDB4MDAwMX0sCit7MHg4MjgxLCAgICAweDAwMGZ9LCB7MHg4MjgyLCAgICAweDAwOTZ9LCB7MHg4MjgzLCAgICAweDAwNDZ9LAorezB4ODI4NCwgICAgMHgwMDg0fSwgezB4ODI4NSwgICAgMHgwMDBjfSwgezB4ODI4NiwgICAgMHgwMDgxfSwKK3sweDgyODcsICAgIDB4MDAwNH0sIHsweDgyODgsICAgIDB4MDAyNn0sIHsweDgyODksICAgIDB4MDAwYX0sCit7MHg4MjhhLCAgICAweDAwYjZ9LCB7MHg4MjhiLCAgICAweDAwMTJ9LCB7MHg4MjhjLCAgICAweDAwMjB9LAorezB4ODI4ZCwgICAgMHgwMDg0fSwgezB4ODI4ZSwgICAgMHgwMDIwfSwgezB4ODI4ZiwgICAgMHgwMDI3fSwKK3sweDgyOTAsICAgIDB4MDBiNX0sIHsweDgyOTEsICAgIDB4MDA3ZX0sIHsweDgyOTIsICAgIDB4MDA4NH0sCit7MHg4MjkzLCAgICAweDAwMjV9LCB7MHg4Mjk0LCAgICAweDAwYmR9LCB7MHg4Mjk1LCAgICAweDAwZjd9LAorezB4ODI5NiwgICAgMHgwMDFmfSwgezB4ODI5NywgICAgMHgwMDdlfSwgezB4ODI5OCwgICAgMHgwMDg0fSwKK3sweDgyOTksICAgIDB4MDAxZn0sIHsweDgyOWEsICAgIDB4MDA5Nn0sIHsweDgyOWIsICAgIDB4MDA0N30sCit7MHg4MjljLCAgICAweDAwODR9LCB7MHg4MjlkLCAgICAweDAwZjN9LCB7MHg4MjllLCAgICAweDAwOGF9LAorezB4ODI5ZiwgICAgMHgwMDA4fSwgezB4ODJhMCwgICAgMHgwMDk3fSwgezB4ODJhMSwgICAgMHgwMDQ3fSwKK3sweDgyYTIsICAgIDB4MDBkZX0sIHsweDgyYTMsICAgIDB4MDBlMX0sIHsweDgyYTQsICAgIDB4MDBhZH0sCit7MHg4MmE1LCAgICAweDAwMDB9LCB7MHg4MmE2LCAgICAweDAwY2V9LCB7MHg4MmE3LCAgICAweDAwODJ9LAorezB4ODJhOCwgICAgMHgwMGFmfSwgezB4ODJhOSwgICAgMHgwMGZmfSwgezB4ODJhYSwgICAgMHgwMDAxfSwKK3sweDgyYWIsICAgIDB4MDAwZn0sIHsweDgyYWMsICAgIDB4MDA3ZX0sIHsweDgyYWQsICAgIDB4MDA4NH0sCit7MHg4MmFlLCAgICAweDAwMjV9LCB7MHg4MmFmLCAgICAweDAwOTZ9LCB7MHg4MmIwLCAgICAweDAwNDF9LAorezB4ODJiMSwgICAgMHgwMDg1fSwgezB4ODJiMiwgICAgMHgwMDEwfSwgezB4ODJiMywgICAgMHgwMDI2fSwKK3sweDgyYjQsICAgIDB4MDAwNn0sIHsweDgyYjUsICAgIDB4MDA5Nn0sIHsweDgyYjYsICAgIDB4MDAyM30sCit7MHg4MmI3LCAgICAweDAwODV9LCB7MHg4MmI4LCAgICAweDAwNDB9LCB7MHg4MmI5LCAgICAweDAwMjd9LAorezB4ODJiYSwgICAgMHgwMDA2fSwgezB4ODJiYiwgICAgMHgwMGJkfSwgezB4ODJiYywgICAgMHgwMGVkfSwKK3sweDgyYmQsICAgIDB4MDAwMH0sIHsweDgyYmUsICAgIDB4MDA3ZX0sIHsweDgyYmYsICAgIDB4MDA4M30sCit7MHg4MmMwLCAgICAweDAwYTJ9LCB7MHg4MmMxLCAgICAweDAwZGV9LCB7MHg4MmMyLCAgICAweDAwNDJ9LAorezB4ODJjMywgICAgMHgwMGJkfSwgezB4ODJjNCwgICAgMHgwMGVifSwgezB4ODJjNSwgICAgMHgwMDhlfSwKK3sweDgyYzYsICAgIDB4MDA5Nn0sIHsweDgyYzcsICAgIDB4MDAyNH0sIHsweDgyYzgsICAgIDB4MDA4NH0sCit7MHg4MmM5LCAgICAweDAwMDh9LCB7MHg4MmNhLCAgICAweDAwMjd9LCB7MHg4MmNiLCAgICAweDAwMDN9LAorezB4ODJjYywgICAgMHgwMDdlfSwgezB4ODJjZCwgICAgMHgwMDgzfSwgezB4ODJjZSwgICAgMHgwMGRmfSwKK3sweDgyY2YsICAgIDB4MDA5Nn0sIHsweDgyZDAsICAgIDB4MDA3Yn0sIHsweDgyZDEsICAgIDB4MDBkNn0sCit7MHg4MmQyLCAgICAweDAwN2N9LCB7MHg4MmQzLCAgICAweDAwZmV9LCB7MHg4MmQ0LCAgICAweDAwOGZ9LAorezB4ODJkNSwgICAgMHgwMDU2fSwgezB4ODJkNiwgICAgMHgwMGJkfSwgezB4ODJkNywgICAgMHgwMGY3fSwKK3sweDgyZDgsICAgIDB4MDBiNn0sIHsweDgyZDksICAgIDB4MDBmZX0sIHsweDgyZGEsICAgIDB4MDA4Zn0sCit7MHg4MmRiLCAgICAweDAwNTB9LCB7MHg4MmRjLCAgICAweDAwYmR9LCB7MHg4MmRkLCAgICAweDAwZWN9LAorezB4ODJkZSwgICAgMHgwMDhlfSwgezB4ODJkZiwgICAgMHgwMGJkfSwgezB4ODJlMCwgICAgMHgwMGZhfSwKK3sweDgyZTEsICAgIDB4MDBmN30sIHsweDgyZTIsICAgIDB4MDA4Nn0sIHsweDgyZTMsICAgIDB4MDAxMX0sCit7MHg4MmU0LCAgICAweDAwYzZ9LCB7MHg4MmU1LCAgICAweDAwNDl9LCB7MHg4MmU2LCAgICAweDAwYmR9LAorezB4ODJlNywgICAgMHgwMGU0fSwgezB4ODJlOCwgICAgMHgwMDEyfSwgezB4ODJlOSwgICAgMHgwMGNlfSwKK3sweDgyZWEsICAgIDB4MDA4Mn0sIHsweDgyZWIsICAgIDB4MDBlZn0sIHsweDgyZWMsICAgIDB4MDBmZn0sCit7MHg4MmVkLCAgICAweDAwMDF9LCB7MHg4MmVlLCAgICAweDAwMGZ9LCB7MHg4MmVmLCAgICAweDAwOTZ9LAorezB4ODJmMCwgICAgMHgwMDQ2fSwgezB4ODJmMSwgICAgMHgwMDg0fSwgezB4ODJmMiwgICAgMHgwMDBjfSwKK3sweDgyZjMsICAgIDB4MDA4MX0sIHsweDgyZjQsICAgIDB4MDAwMH0sIHsweDgyZjUsICAgIDB4MDAyN30sCit7MHg4MmY2LCAgICAweDAwMTd9LCB7MHg4MmY3LCAgICAweDAwYzZ9LCB7MHg4MmY4LCAgICAweDAwNDl9LAorezB4ODJmOSwgICAgMHgwMGJkfSwgezB4ODJmYSwgICAgMHgwMGU0fSwgezB4ODJmYiwgICAgMHgwMDkxfSwKK3sweDgyZmMsICAgIDB4MDAyNH0sIHsweDgyZmQsICAgIDB4MDAwZH0sIHsweDgyZmUsICAgIDB4MDBiNn0sCit7MHg4MmZmLCAgICAweDAwMTJ9LCB7MHg4MzAwLCAgICAweDAwMjB9LCB7MHg4MzAxLCAgICAweDAwODV9LAorezB4ODMwMiwgICAgMHgwMDIwfSwgezB4ODMwMywgICAgMHgwMDI2fSwgezB4ODMwNCwgICAgMHgwMDBjfSwKK3sweDgzMDUsICAgIDB4MDBjZX0sIHsweDgzMDYsICAgIDB4MDA4Mn0sIHsweDgzMDcsICAgIDB4MDBjMX0sCit7MHg4MzA4LCAgICAweDAwZmZ9LCB7MHg4MzA5LCAgICAweDAwMDF9LCB7MHg4MzBhLCAgICAweDAwMGZ9LAorezB4ODMwYiwgICAgMHgwMDdlfSwgezB4ODMwYywgICAgMHgwMDg0fSwgezB4ODMwZCwgICAgMHgwMDI1fSwKK3sweDgzMGUsICAgIDB4MDA3ZX0sIHsweDgzMGYsICAgIDB4MDA4NH0sIHsweDgzMTAsICAgIDB4MDAxNn0sCit7MHg4MzExLCAgICAweDAwZmV9LCB7MHg4MzEyLCAgICAweDAwOGZ9LCB7MHg4MzEzLCAgICAweDAwNTJ9LAorezB4ODMxNCwgICAgMHgwMGJkfSwgezB4ODMxNSwgICAgMHgwMGVjfSwgezB4ODMxNiwgICAgMHgwMDhlfSwKK3sweDgzMTcsICAgIDB4MDBiZH0sIHsweDgzMTgsICAgIDB4MDBmYX0sIHsweDgzMTksICAgIDB4MDBmN30sCit7MHg4MzFhLCAgICAweDAwODZ9LCB7MHg4MzFiLCAgICAweDAwNmF9LCB7MHg4MzFjLCAgICAweDAwYzZ9LAorezB4ODMxZCwgICAgMHgwMDQ5fSwgezB4ODMxZSwgICAgMHgwMGJkfSwgezB4ODMxZiwgICAgMHgwMGU0fSwKK3sweDgzMjAsICAgIDB4MDAxMn0sIHsweDgzMjEsICAgIDB4MDBjZX0sIHsweDgzMjIsICAgIDB4MDA4M30sCit7MHg4MzIzLCAgICAweDAwMjd9LCB7MHg4MzI0LCAgICAweDAwZmZ9LCB7MHg4MzI1LCAgICAweDAwMDF9LAorezB4ODMyNiwgICAgMHgwMDBmfSwgezB4ODMyNywgICAgMHgwMDk2fSwgezB4ODMyOCwgICAgMHgwMDQ2fSwKK3sweDgzMjksICAgIDB4MDA4NH0sIHsweDgzMmEsICAgIDB4MDAwY30sIHsweDgzMmIsICAgIDB4MDA4MX0sCit7MHg4MzJjLCAgICAweDAwMDB9LCB7MHg4MzJkLCAgICAweDAwMjd9LCB7MHg4MzJlLCAgICAweDAwMGF9LAorezB4ODMyZiwgICAgMHgwMGM2fSwgezB4ODMzMCwgICAgMHgwMDQ5fSwgezB4ODMzMSwgICAgMHgwMGJkfSwKK3sweDgzMzIsICAgIDB4MDBlNH0sIHsweDgzMzMsICAgIDB4MDA5MX0sIHsweDgzMzQsICAgIDB4MDAyNX0sCit7MHg4MzM1LCAgICAweDAwMDZ9LCB7MHg4MzM2LCAgICAweDAwN2V9LCB7MHg4MzM3LCAgICAweDAwODR9LAorezB4ODMzOCwgICAgMHgwMDI1fSwgezB4ODMzOSwgICAgMHgwMDdlfSwgezB4ODMzYSwgICAgMHgwMDg0fSwKK3sweDgzM2IsICAgIDB4MDAxNn0sIHsweDgzM2MsICAgIDB4MDBiNn0sIHsweDgzM2QsICAgIDB4MDAxOH0sCit7MHg4MzNlLCAgICAweDAwNzB9LCB7MHg4MzNmLCAgICAweDAwYmJ9LCB7MHg4MzQwLCAgICAweDAwMTl9LAorezB4ODM0MSwgICAgMHgwMDcwfSwgezB4ODM0MiwgICAgMHgwMDJhfSwgezB4ODM0MywgICAgMHgwMDA0fSwKK3sweDgzNDQsICAgIDB4MDA4MX0sIHsweDgzNDUsICAgIDB4MDBhZn0sIHsweDgzNDYsICAgIDB4MDAyZX0sCit7MHg4MzQ3LCAgICAweDAwMTl9LCB7MHg4MzQ4LCAgICAweDAwOTZ9LCB7MHg4MzQ5LCAgICAweDAwN2J9LAorezB4ODM0YSwgICAgMHgwMGY2fSwgezB4ODM0YiwgICAgMHgwMDIwfSwgezB4ODM0YywgICAgMHgwMDA3fSwKK3sweDgzNGQsICAgIDB4MDBmYX0sIHsweDgzNGUsICAgIDB4MDAyMH0sIHsweDgzNGYsICAgIDB4MDAyN30sCit7MHg4MzUwLCAgICAweDAwYzR9LCB7MHg4MzUxLCAgICAweDAwMzh9LCB7MHg4MzUyLCAgICAweDAwODF9LAorezB4ODM1MywgICAgMHgwMDM4fSwgezB4ODM1NCwgICAgMHgwMDI3fSwgezB4ODM1NSwgICAgMHgwMDBifSwKK3sweDgzNTYsICAgIDB4MDBmNn0sIHsweDgzNTcsICAgIDB4MDAyMH0sIHsweDgzNTgsICAgIDB4MDAwN30sCit7MHg4MzU5LCAgICAweDAwZmF9LCB7MHg4MzVhLCAgICAweDAwMjB9LCB7MHg4MzViLCAgICAweDAwMjd9LAorezB4ODM1YywgICAgMHgwMGNifSwgezB4ODM1ZCwgICAgMHgwMDA4fSwgezB4ODM1ZSwgICAgMHgwMDdlfSwKK3sweDgzNWYsICAgIDB4MDA4Mn0sIHsweDgzNjAsICAgIDB4MDBkM30sIHsweDgzNjEsICAgIDB4MDBiZH0sCit7MHg4MzYyLCAgICAweDAwZjd9LCB7MHg4MzYzLCAgICAweDAwNjZ9LCB7MHg4MzY0LCAgICAweDAwODZ9LAorezB4ODM2NSwgICAgMHgwMDc0fSwgezB4ODM2NiwgICAgMHgwMGM2fSwgezB4ODM2NywgICAgMHgwMDQ5fSwKK3sweDgzNjgsICAgIDB4MDBiZH0sIHsweDgzNjksICAgIDB4MDBlNH0sIHsweDgzNmEsICAgIDB4MDAxMn0sCit7MHg4MzZiLCAgICAweDAwY2V9LCB7MHg4MzZjLCAgICAweDAwODN9LCB7MHg4MzZkLCAgICAweDAwNzF9LAorezB4ODM2ZSwgICAgMHgwMGZmfSwgezB4ODM2ZiwgICAgMHgwMDAxfSwgezB4ODM3MCwgICAgMHgwMDBmfSwKK3sweDgzNzEsICAgIDB4MDA5Nn0sIHsweDgzNzIsICAgIDB4MDA0Nn0sIHsweDgzNzMsICAgIDB4MDA4NH0sCit7MHg4Mzc0LCAgICAweDAwMGN9LCB7MHg4Mzc1LCAgICAweDAwODF9LCB7MHg4Mzc2LCAgICAweDAwMDh9LAorezB4ODM3NywgICAgMHgwMDI2fSwgezB4ODM3OCwgICAgMHgwMDBhfSwgezB4ODM3OSwgICAgMHgwMGM2fSwKK3sweDgzN2EsICAgIDB4MDA0OX0sIHsweDgzN2IsICAgIDB4MDBiZH0sIHsweDgzN2MsICAgIDB4MDBlNH0sCit7MHg4MzdkLCAgICAweDAwOTF9LCB7MHg4MzdlLCAgICAweDAwMjV9LCB7MHg4MzdmLCAgICAweDAwMDZ9LAorezB4ODM4MCwgICAgMHgwMDdlfSwgezB4ODM4MSwgICAgMHgwMDg0fSwgezB4ODM4MiwgICAgMHgwMDI1fSwKK3sweDgzODMsICAgIDB4MDA3ZX0sIHsweDgzODQsICAgIDB4MDA4NH0sIHsweDgzODUsICAgIDB4MDAxNn0sCit7MHg4Mzg2LCAgICAweDAwYmR9LCB7MHg4Mzg3LCAgICAweDAwZjd9LCB7MHg4Mzg4LCAgICAweDAwM2V9LAorezB4ODM4OSwgICAgMHgwMDI2fSwgezB4ODM4YSwgICAgMHgwMDBlfSwgezB4ODM4YiwgICAgMHgwMGJkfSwKK3sweDgzOGMsICAgIDB4MDBlNX0sIHsweDgzOGQsICAgIDB4MDAwOX0sIHsweDgzOGUsICAgIDB4MDAyNn0sCit7MHg4MzhmLCAgICAweDAwMDZ9LCB7MHg4MzkwLCAgICAweDAwY2V9LCB7MHg4MzkxLCAgICAweDAwODJ9LAorezB4ODM5MiwgICAgMHgwMGMxfSwgezB4ODM5MywgICAgMHgwMGZmfSwgezB4ODM5NCwgICAgMHgwMDAxfSwKK3sweDgzOTUsICAgIDB4MDAwZn0sIHsweDgzOTYsICAgIDB4MDA3ZX0sIHsweDgzOTcsICAgIDB4MDA4NH0sCit7MHg4Mzk4LCAgICAweDAwMjV9LCB7MHg4Mzk5LCAgICAweDAwZmV9LCB7MHg4MzlhLCAgICAweDAwOGZ9LAorezB4ODM5YiwgICAgMHgwMDU0fSwgezB4ODM5YywgICAgMHgwMGJkfSwgezB4ODM5ZCwgICAgMHgwMGVjfSwKK3sweDgzOWUsICAgIDB4MDA4ZX0sIHsweDgzOWYsICAgIDB4MDBiZH0sIHsweDgzYTAsICAgIDB4MDBmYX0sCit7MHg4M2ExLCAgICAweDAwZjd9LCB7MHg4M2EyLCAgICAweDAwYmR9LCB7MHg4M2EzLCAgICAweDAwZjd9LAorezB4ODNhNCwgICAgMHgwMDMzfSwgezB4ODNhNSwgICAgMHgwMDg2fSwgezB4ODNhNiwgICAgMHgwMDBmfSwKK3sweDgzYTcsICAgIDB4MDBjNn0sIHsweDgzYTgsICAgIDB4MDA1MX0sIHsweDgzYTksICAgIDB4MDBiZH0sCit7MHg4M2FhLCAgICAweDAwZTR9LCB7MHg4M2FiLCAgICAweDAwMTJ9LCB7MHg4M2FjLCAgICAweDAwY2V9LAorezB4ODNhZCwgICAgMHgwMDgzfSwgezB4ODNhZSwgICAgMHgwMGIyfSwgezB4ODNhZiwgICAgMHgwMGZmfSwKK3sweDgzYjAsICAgIDB4MDAwMX0sIHsweDgzYjEsICAgIDB4MDAwZn0sIHsweDgzYjIsICAgIDB4MDA5Nn0sCit7MHg4M2IzLCAgICAweDAwNDZ9LCB7MHg4M2I0LCAgICAweDAwODR9LCB7MHg4M2I1LCAgICAweDAwMGN9LAorezB4ODNiNiwgICAgMHgwMDgxfSwgezB4ODNiNywgICAgMHgwMDA4fSwgezB4ODNiOCwgICAgMHgwMDI2fSwKK3sweDgzYjksICAgIDB4MDA1Y30sIHsweDgzYmEsICAgIDB4MDBiNn0sIHsweDgzYmIsICAgIDB4MDAxMn0sCit7MHg4M2JjLCAgICAweDAwMjB9LCB7MHg4M2JkLCAgICAweDAwODR9LCB7MHg4M2JlLCAgICAweDAwM2Z9LAorezB4ODNiZiwgICAgMHgwMDgxfSwgezB4ODNjMCwgICAgMHgwMDNhfSwgezB4ODNjMSwgICAgMHgwMDI3fSwKK3sweDgzYzIsICAgIDB4MDAxY30sIHsweDgzYzMsICAgIDB4MDA5Nn0sIHsweDgzYzQsICAgIDB4MDAyM30sCit7MHg4M2M1LCAgICAweDAwODV9LCB7MHg4M2M2LCAgICAweDAwNDB9LCB7MHg4M2M3LCAgICAweDAwMjd9LAorezB4ODNjOCwgICAgMHgwMDAzfSwgezB4ODNjOSwgICAgMHgwMDdlfSwgezB4ODNjYSwgICAgMHgwMDg0fSwKK3sweDgzY2IsICAgIDB4MDAyNX0sIHsweDgzY2MsICAgIDB4MDBjNn0sIHsweDgzY2QsICAgIDB4MDA1MX0sCit7MHg4M2NlLCAgICAweDAwYmR9LCB7MHg4M2NmLCAgICAweDAwZTR9LCB7MHg4M2QwLCAgICAweDAwOTF9LAorezB4ODNkMSwgICAgMHgwMDI1fSwgezB4ODNkMiwgICAgMHgwMDAzfSwgezB4ODNkMywgICAgMHgwMDdlfSwKK3sweDgzZDQsICAgIDB4MDA4NH0sIHsweDgzZDUsICAgIDB4MDAyNX0sIHsweDgzZDYsICAgIDB4MDBjZX0sCit7MHg4M2Q3LCAgICAweDAwODJ9LCB7MHg4M2Q4LCAgICAweDAwYzF9LCB7MHg4M2Q5LCAgICAweDAwZmZ9LAorezB4ODNkYSwgICAgMHgwMDAxfSwgezB4ODNkYiwgICAgMHgwMDBmfSwgezB4ODNkYywgICAgMHgwMDdlfSwKK3sweDgzZGQsICAgIDB4MDA4NH0sIHsweDgzZGUsICAgIDB4MDAyNX0sIHsweDgzZGYsICAgIDB4MDBiZH0sCit7MHg4M2UwLCAgICAweDAwZjh9LCB7MHg4M2UxLCAgICAweDAwMzd9LCB7MHg4M2UyLCAgICAweDAwN2N9LAorezB4ODNlMywgICAgMHgwMDAwfSwgezB4ODNlNCwgICAgMHgwMDdhfSwgezB4ODNlNSwgICAgMHgwMGNlfSwKK3sweDgzZTYsICAgIDB4MDA4M30sIHsweDgzZTcsICAgIDB4MDBlZX0sIHsweDgzZTgsICAgIDB4MDBmZn0sCit7MHg4M2U5LCAgICAweDAwMDF9LCB7MHg4M2VhLCAgICAweDAwMGZ9LCB7MHg4M2ViLCAgICAweDAwN2V9LAorezB4ODNlYywgICAgMHgwMDg0fSwgezB4ODNlZCwgICAgMHgwMDI1fSwgezB4ODNlZSwgICAgMHgwMDk2fSwKK3sweDgzZWYsICAgIDB4MDA0Nn0sIHsweDgzZjAsICAgIDB4MDA4NH0sIHsweDgzZjEsICAgIDB4MDAwY30sCit7MHg4M2YyLCAgICAweDAwODF9LCB7MHg4M2YzLCAgICAweDAwMDh9LCB7MHg4M2Y0LCAgICAweDAwMjZ9LAorezB4ODNmNSwgICAgMHgwMDIwfSwgezB4ODNmNiwgICAgMHgwMDk2fSwgezB4ODNmNywgICAgMHgwMDI0fSwKK3sweDgzZjgsICAgIDB4MDA4NH0sIHsweDgzZjksICAgIDB4MDAwOH0sIHsweDgzZmEsICAgIDB4MDAyNn0sCit7MHg4M2ZiLCAgICAweDAwMjl9LCB7MHg4M2ZjLCAgICAweDAwYjZ9LCB7MHg4M2ZkLCAgICAweDAwMTh9LAorezB4ODNmZSwgICAgMHgwMDgyfSwgezB4ODNmZiwgICAgMHgwMGJifSwgezB4ODQwMCwgICAgMHgwMDE5fSwKK3sweDg0MDEsICAgIDB4MDA4Mn0sIHsweDg0MDIsICAgIDB4MDBiMX0sIHsweDg0MDMsICAgIDB4MDAwMX0sCit7MHg4NDA0LCAgICAweDAwM2J9LCB7MHg4NDA1LCAgICAweDAwMjJ9LCB7MHg4NDA2LCAgICAweDAwMDl9LAorezB4ODQwNywgICAgMHgwMGI2fSwgezB4ODQwOCwgICAgMHgwMDEyfSwgezB4ODQwOSwgICAgMHgwMDIwfSwKK3sweDg0MGEsICAgIDB4MDA4NH0sIHsweDg0MGIsICAgIDB4MDAzN30sIHsweDg0MGMsICAgIDB4MDA4MX0sCit7MHg4NDBkLCAgICAweDAwMzJ9LCB7MHg4NDBlLCAgICAweDAwMjd9LCB7MHg4NDBmLCAgICAweDAwMTV9LAorezB4ODQxMCwgICAgMHgwMGJkfSwgezB4ODQxMSwgICAgMHgwMGY4fSwgezB4ODQxMiwgICAgMHgwMDQ0fSwKK3sweDg0MTMsICAgIDB4MDA3ZX0sIHsweDg0MTQsICAgIDB4MDA4Mn0sIHsweDg0MTUsICAgIDB4MDBjMX0sCit7MHg4NDE2LCAgICAweDAwYmR9LCB7MHg4NDE3LCAgICAweDAwZjd9LCB7MHg4NDE4LCAgICAweDAwMWZ9LAorezB4ODQxOSwgICAgMHgwMGJkfSwgezB4ODQxYSwgICAgMHgwMGY4fSwgezB4ODQxYiwgICAgMHgwMDQ0fSwKK3sweDg0MWMsICAgIDB4MDBiZH0sIHsweDg0MWQsICAgIDB4MDBmY30sIHsweDg0MWUsICAgIDB4MDAyOX0sCit7MHg4NDFmLCAgICAweDAwY2V9LCB7MHg4NDIwLCAgICAweDAwODJ9LCB7MHg4NDIxLCAgICAweDAwMjV9LAorezB4ODQyMiwgICAgMHgwMGZmfSwgezB4ODQyMywgICAgMHgwMDAxfSwgezB4ODQyNCwgICAgMHgwMDBmfSwKK3sweDg0MjUsICAgIDB4MDAzOX0sIHsweDg0MjYsICAgIDB4MDA5Nn0sIHsweDg0MjcsICAgIDB4MDA0N30sCit7MHg4NDI4LCAgICAweDAwODR9LCB7MHg4NDI5LCAgICAweDAwZmN9LCB7MHg4NDJhLCAgICAweDAwOGF9LAorezB4ODQyYiwgICAgMHgwMDAwfSwgezB4ODQyYywgICAgMHgwMDk3fSwgezB4ODQyZCwgICAgMHgwMDQ3fSwKK3sweDg0MmUsICAgIDB4MDBjZX0sIHsweDg0MmYsICAgIDB4MDA4NH0sIHsweDg0MzAsICAgIDB4MDAzNH0sCit7MHg4NDMxLCAgICAweDAwZmZ9LCB7MHg4NDMyLCAgICAweDAwMDF9LCB7MHg4NDMzLCAgICAweDAwMTF9LAorezB4ODQzNCwgICAgMHgwMDk2fSwgezB4ODQzNSwgICAgMHgwMDQ2fSwgezB4ODQzNiwgICAgMHgwMDg0fSwKK3sweDg0MzcsICAgIDB4MDAwM30sIHsweDg0MzgsICAgIDB4MDA4MX0sIHsweDg0MzksICAgIDB4MDAwMn0sCit7MHg4NDNhLCAgICAweDAwMjd9LCB7MHg4NDNiLCAgICAweDAwMDN9LCB7MHg4NDNjLCAgICAweDAwN2V9LAorezB4ODQzZCwgICAgMHgwMDg1fSwgezB4ODQzZSwgICAgMHgwMDFlfSwgezB4ODQzZiwgICAgMHgwMDk2fSwKK3sweDg0NDAsICAgIDB4MDA0N30sIHsweDg0NDEsICAgIDB4MDA4NH0sIHsweDg0NDIsICAgIDB4MDBmY30sCit7MHg4NDQzLCAgICAweDAwOGF9LCB7MHg4NDQ0LCAgICAweDAwMDJ9LCB7MHg4NDQ1LCAgICAweDAwOTd9LAorezB4ODQ0NiwgICAgMHgwMDQ3fSwgezB4ODQ0NywgICAgMHgwMGRlfSwgezB4ODQ0OCwgICAgMHgwMGUxfSwKK3sweDg0NDksICAgIDB4MDBhZH0sIHsweDg0NGEsICAgIDB4MDAwMH0sIHsweDg0NGIsICAgIDB4MDA4Nn0sCit7MHg4NDRjLCAgICAweDAwMDF9LCB7MHg4NDRkLCAgICAweDAwYjd9LCB7MHg4NDRlLCAgICAweDAwMTJ9LAorezB4ODQ0ZiwgICAgMHgwMDUxfSwgezB4ODQ1MCwgICAgMHgwMGJkfSwgezB4ODQ1MSwgICAgMHgwMGY3fSwKK3sweDg0NTIsICAgIDB4MDAxNH0sIHsweDg0NTMsICAgIDB4MDBiNn0sIHsweDg0NTQsICAgIDB4MDAxMH0sCit7MHg4NDU1LCAgICAweDAwMzF9LCB7MHg4NDU2LCAgICAweDAwODR9LCB7MHg4NDU3LCAgICAweDAwZmR9LAorezB4ODQ1OCwgICAgMHgwMGI3fSwgezB4ODQ1OSwgICAgMHgwMDEwfSwgezB4ODQ1YSwgICAgMHgwMDMxfSwKK3sweDg0NWIsICAgIDB4MDBiZH0sIHsweDg0NWMsICAgIDB4MDBmOH0sIHsweDg0NWQsICAgIDB4MDAxZX0sCit7MHg4NDVlLCAgICAweDAwOTZ9LCB7MHg4NDVmLCAgICAweDAwODF9LCB7MHg4NDYwLCAgICAweDAwZDZ9LAorezB4ODQ2MSwgICAgMHgwMDgyfSwgezB4ODQ2MiwgICAgMHgwMGZlfSwgezB4ODQ2MywgICAgMHgwMDhmfSwKK3sweDg0NjQsICAgIDB4MDA1YX0sIHsweDg0NjUsICAgIDB4MDBiZH0sIHsweDg0NjYsICAgIDB4MDBmN30sCit7MHg4NDY3LCAgICAweDAwYjZ9LCB7MHg4NDY4LCAgICAweDAwZmV9LCB7MHg4NDY5LCAgICAweDAwOGZ9LAorezB4ODQ2YSwgICAgMHgwMDVjfSwgezB4ODQ2YiwgICAgMHgwMGJkfSwgezB4ODQ2YywgICAgMHgwMGVjfSwKK3sweDg0NmQsICAgIDB4MDA4ZX0sIHsweDg0NmUsICAgIDB4MDBiZH0sIHsweDg0NmYsICAgIDB4MDBmYX0sCit7MHg4NDcwLCAgICAweDAwZjd9LCB7MHg4NDcxLCAgICAweDAwODZ9LCB7MHg4NDcyLCAgICAweDAwMDh9LAorezB4ODQ3MywgICAgMHgwMGQ2fSwgezB4ODQ3NCwgICAgMHgwMDAwfSwgezB4ODQ3NSwgICAgMHgwMGM1fSwKK3sweDg0NzYsICAgIDB4MDAxMH0sIHsweDg0NzcsICAgIDB4MDAyNn0sIHsweDg0NzgsICAgIDB4MDAwMn0sCit7MHg4NDc5LCAgICAweDAwOGJ9LCB7MHg4NDdhLCAgICAweDAwMjB9LCB7MHg4NDdiLCAgICAweDAwYzZ9LAorezB4ODQ3YywgICAgMHgwMDUxfSwgezB4ODQ3ZCwgICAgMHgwMGJkfSwgezB4ODQ3ZSwgICAgMHgwMGU0fSwKK3sweDg0N2YsICAgIDB4MDAxMn0sIHsweDg0ODAsICAgIDB4MDBjZX0sIHsweDg0ODEsICAgIDB4MDA4NH0sCit7MHg4NDgyLCAgICAweDAwODZ9LCB7MHg4NDgzLCAgICAweDAwZmZ9LCB7MHg4NDg0LCAgICAweDAwMDF9LAorezB4ODQ4NSwgICAgMHgwMDExfSwgezB4ODQ4NiwgICAgMHgwMDk2fSwgezB4ODQ4NywgICAgMHgwMDQ2fSwKK3sweDg0ODgsICAgIDB4MDA4NH0sIHsweDg0ODksICAgIDB4MDAwM30sIHsweDg0OGEsICAgIDB4MDA4MX0sCit7MHg4NDhiLCAgICAweDAwMDJ9LCB7MHg4NDhjLCAgICAweDAwMjd9LCB7MHg4NDhkLCAgICAweDAwMDN9LAorezB4ODQ4ZSwgICAgMHgwMDdlfSwgezB4ODQ4ZiwgICAgMHgwMDg1fSwgezB4ODQ5MCwgICAgMHgwMDBmfSwKK3sweDg0OTEsICAgIDB4MDBjNn0sIHsweDg0OTIsICAgIDB4MDA1MX0sIHsweDg0OTMsICAgIDB4MDBiZH0sCit7MHg4NDk0LCAgICAweDAwZTR9LCB7MHg4NDk1LCAgICAweDAwOTF9LCB7MHg4NDk2LCAgICAweDAwMjV9LAorezB4ODQ5NywgICAgMHgwMDAzfSwgezB4ODQ5OCwgICAgMHgwMDdlfSwgezB4ODQ5OSwgICAgMHgwMDg1fSwKK3sweDg0OWEsICAgIDB4MDAxZX0sIHsweDg0OWIsICAgIDB4MDA5Nn0sIHsweDg0OWMsICAgIDB4MDA0NH0sCit7MHg4NDlkLCAgICAweDAwODV9LCB7MHg4NDllLCAgICAweDAwMTB9LCB7MHg4NDlmLCAgICAweDAwMjZ9LAorezB4ODRhMCwgICAgMHgwMDBhfSwgezB4ODRhMSwgICAgMHgwMGI2fSwgezB4ODRhMiwgICAgMHgwMDEyfSwKK3sweDg0YTMsICAgIDB4MDA1MH0sIHsweDg0YTQsICAgIDB4MDBiYX0sIHsweDg0YTUsICAgIDB4MDAwMX0sCit7MHg4NGE2LCAgICAweDAwM2N9LCB7MHg4NGE3LCAgICAweDAwODV9LCB7MHg4NGE4LCAgICAweDAwMTB9LAorezB4ODRhOSwgICAgMHgwMDI3fSwgezB4ODRhYSwgICAgMHgwMGE4fSwgezB4ODRhYiwgICAgMHgwMGJkfSwKK3sweDg0YWMsICAgIDB4MDBmN30sIHsweDg0YWQsICAgIDB4MDA2Nn0sIHsweDg0YWUsICAgIDB4MDBjZX0sCit7MHg4NGFmLCAgICAweDAwODR9LCB7MHg4NGIwLCAgICAweDAwYjd9LCB7MHg4NGIxLCAgICAweDAwZmZ9LAorezB4ODRiMiwgICAgMHgwMDAxfSwgezB4ODRiMywgICAgMHgwMDExfSwgezB4ODRiNCwgICAgMHgwMDdlfSwKK3sweDg0YjUsICAgIDB4MDA4NX0sIHsweDg0YjYsICAgIDB4MDAxZX0sIHsweDg0YjcsICAgIDB4MDA5Nn0sCit7MHg4NGI4LCAgICAweDAwNDZ9LCB7MHg4NGI5LCAgICAweDAwODR9LCB7MHg4NGJhLCAgICAweDAwMDN9LAorezB4ODRiYiwgICAgMHgwMDgxfSwgezB4ODRiYywgICAgMHgwMDAyfSwgezB4ODRiZCwgICAgMHgwMDI2fSwKK3sweDg0YmUsICAgIDB4MDA1MH0sIHsweDg0YmYsICAgIDB4MDBiNn0sIHsweDg0YzAsICAgIDB4MDAxMn0sCit7MHg4NGMxLCAgICAweDAwMzB9LCB7MHg4NGMyLCAgICAweDAwODR9LCB7MHg4NGMzLCAgICAweDAwMDN9LAorezB4ODRjNCwgICAgMHgwMDgxfSwgezB4ODRjNSwgICAgMHgwMDAxfSwgezB4ODRjNiwgICAgMHgwMDI3fSwKK3sweDg0YzcsICAgIDB4MDAwM30sIHsweDg0YzgsICAgIDB4MDA3ZX0sIHsweDg0YzksICAgIDB4MDA4NX0sCit7MHg4NGNhLCAgICAweDAwMWV9LCB7MHg4NGNiLCAgICAweDAwOTZ9LCB7MHg4NGNjLCAgICAweDAwNDR9LAorezB4ODRjZCwgICAgMHgwMDg1fSwgezB4ODRjZSwgICAgMHgwMDEwfSwgezB4ODRjZiwgICAgMHgwMDI2fSwKK3sweDg0ZDAsICAgIDB4MDAxM30sIHsweDg0ZDEsICAgIDB4MDBiNn0sIHsweDg0ZDIsICAgIDB4MDAxMn0sCit7MHg4NGQzLCAgICAweDAwNTB9LCB7MHg4NGQ0LCAgICAweDAwYmF9LCB7MHg4NGQ1LCAgICAweDAwMDF9LAorezB4ODRkNiwgICAgMHgwMDNjfSwgezB4ODRkNywgICAgMHgwMDg1fSwgezB4ODRkOCwgICAgMHgwMDEwfSwKK3sweDg0ZDksICAgIDB4MDAyNn0sIHsweDg0ZGEsICAgIDB4MDAwOX0sIHsweDg0ZGIsICAgIDB4MDBjZX0sCit7MHg4NGRjLCAgICAweDAwODR9LCB7MHg4NGRkLCAgICAweDAwNTN9LCB7MHg4NGRlLCAgICAweDAwZmZ9LAorezB4ODRkZiwgICAgMHgwMDAxfSwgezB4ODRlMCwgICAgMHgwMDExfSwgezB4ODRlMSwgICAgMHgwMDdlfSwKK3sweDg0ZTIsICAgIDB4MDA4NX0sIHsweDg0ZTMsICAgIDB4MDAxZX0sIHsweDg0ZTQsICAgIDB4MDBiNn0sCit7MHg4NGU1LCAgICAweDAwMTB9LCB7MHg4NGU2LCAgICAweDAwMzF9LCB7MHg4NGU3LCAgICAweDAwOGF9LAorezB4ODRlOCwgICAgMHgwMDAyfSwgezB4ODRlOSwgICAgMHgwMGI3fSwgezB4ODRlYSwgICAgMHgwMDEwfSwKK3sweDg0ZWIsICAgIDB4MDAzMX0sIHsweDg0ZWMsICAgIDB4MDBiZH0sIHsweDg0ZWQsICAgIDB4MDA4NX0sCit7MHg4NGVlLCAgICAweDAwMWZ9LCB7MHg4NGVmLCAgICAweDAwYmR9LCB7MHg4NGYwLCAgICAweDAwZjh9LAorezB4ODRmMSwgICAgMHgwMDM3fSwgezB4ODRmMiwgICAgMHgwMDdjfSwgezB4ODRmMywgICAgMHgwMDAwfSwKK3sweDg0ZjQsICAgIDB4MDA4MH0sIHsweDg0ZjUsICAgIDB4MDBjZX0sIHsweDg0ZjYsICAgIDB4MDA4NH0sCit7MHg4NGY3LCAgICAweDAwZmV9LCB7MHg4NGY4LCAgICAweDAwZmZ9LCB7MHg4NGY5LCAgICAweDAwMDF9LAorezB4ODRmYSwgICAgMHgwMDExfSwgezB4ODRmYiwgICAgMHgwMDdlfSwgezB4ODRmYywgICAgMHgwMDg1fSwKK3sweDg0ZmQsICAgIDB4MDAxZX0sIHsweDg0ZmUsICAgIDB4MDA5Nn0sIHsweDg0ZmYsICAgIDB4MDA0Nn0sCit7MHg4NTAwLCAgICAweDAwODR9LCB7MHg4NTAxLCAgICAweDAwMDN9LCB7MHg4NTAyLCAgICAweDAwODF9LAorezB4ODUwMywgICAgMHgwMDAyfSwgezB4ODUwNCwgICAgMHgwMDI2fSwgezB4ODUwNSwgICAgMHgwMDA5fSwKK3sweDg1MDYsICAgIDB4MDBiNn0sIHsweDg1MDcsICAgIDB4MDAxMn0sIHsweDg1MDgsICAgIDB4MDAzMH0sCit7MHg4NTA5LCAgICAweDAwODR9LCB7MHg4NTBhLCAgICAweDAwMDN9LCB7MHg4NTBiLCAgICAweDAwODF9LAorezB4ODUwYywgICAgMHgwMDAxfSwgezB4ODUwZCwgICAgMHgwMDI3fSwgezB4ODUwZSwgICAgMHgwMDBmfSwKK3sweDg1MGYsICAgIDB4MDBiZH0sIHsweDg1MTAsICAgIDB4MDBmOH0sIHsweDg1MTEsICAgIDB4MDA0NH0sCit7MHg4NTEyLCAgICAweDAwYmR9LCB7MHg4NTEzLCAgICAweDAwZjd9LCB7MHg4NTE0LCAgICAweDAwMGJ9LAorezB4ODUxNSwgICAgMHgwMGJkfSwgezB4ODUxNiwgICAgMHgwMGZjfSwgezB4ODUxNywgICAgMHgwMDI5fSwKK3sweDg1MTgsICAgIDB4MDBjZX0sIHsweDg1MTksICAgIDB4MDA4NH0sIHsweDg1MWEsICAgIDB4MDAyNn0sCit7MHg4NTFiLCAgICAweDAwZmZ9LCB7MHg4NTFjLCAgICAweDAwMDF9LCB7MHg4NTFkLCAgICAweDAwMTF9LAorezB4ODUxZSwgICAgMHgwMDM5fSwgezB4ODUxZiwgICAgMHgwMGQ2fSwgezB4ODUyMCwgICAgMHgwMDIyfSwKK3sweDg1MjEsICAgIDB4MDBjNH0sIHsweDg1MjIsICAgIDB4MDAwZn0sIHsweDg1MjMsICAgIDB4MDBiNn0sCit7MHg4NTI0LCAgICAweDAwMTJ9LCB7MHg4NTI1LCAgICAweDAwMzB9LCB7MHg4NTI2LCAgICAweDAwYmF9LAorezB4ODUyNywgICAgMHgwMDEyfSwgezB4ODUyOCwgICAgMHgwMDMyfSwgezB4ODUyOSwgICAgMHgwMDg0fSwKK3sweDg1MmEsICAgIDB4MDAwNH0sIHsweDg1MmIsICAgIDB4MDAyN30sIHsweDg1MmMsICAgIDB4MDAwZH0sCit7MHg4NTJkLCAgICAweDAwOTZ9LCB7MHg4NTJlLCAgICAweDAwMjJ9LCB7MHg4NTJmLCAgICAweDAwODV9LAorezB4ODUzMCwgICAgMHgwMDA0fSwgezB4ODUzMSwgICAgMHgwMDI3fSwgezB4ODUzMiwgICAgMHgwMDA1fSwKK3sweDg1MzMsICAgIDB4MDBjYX0sIHsweDg1MzQsICAgIDB4MDAxMH0sIHsweDg1MzUsICAgIDB4MDA3ZX0sCit7MHg4NTM2LCAgICAweDAwODV9LCB7MHg4NTM3LCAgICAweDAwM2F9LCB7MHg4NTM4LCAgICAweDAwY2F9LAorezB4ODUzOSwgICAgMHgwMDIwfSwgezB4ODUzYSwgICAgMHgwMGQ3fSwgezB4ODUzYiwgICAgMHgwMDIyfSwKK3sweDg1M2MsICAgIDB4MDAzOX0sIHsweDg1M2QsICAgIDB4MDA4Nn0sIHsweDg1M2UsICAgIDB4MDAwMH0sCit7MHg4NTNmLCAgICAweDAwOTd9LCB7MHg4NTQwLCAgICAweDAwODN9LCB7MHg4NTQxLCAgICAweDAwMTh9LAorezB4ODU0MiwgICAgMHgwMGNlfSwgezB4ODU0MywgICAgMHgwMDFjfSwgezB4ODU0NCwgICAgMHgwMDAwfSwKK3sweDg1NDUsICAgIDB4MDBiZH0sIHsweDg1NDYsICAgIDB4MDBlYn0sIHsweDg1NDcsICAgIDB4MDA0Nn0sCit7MHg4NTQ4LCAgICAweDAwOTZ9LCB7MHg4NTQ5LCAgICAweDAwNTd9LCB7MHg4NTRhLCAgICAweDAwODV9LAorezB4ODU0YiwgICAgMHgwMDAxfSwgezB4ODU0YywgICAgMHgwMDI3fSwgezB4ODU0ZCwgICAgMHgwMDAyfSwKK3sweDg1NGUsICAgIDB4MDA0Zn0sIHsweDg1NGYsICAgIDB4MDAzOX0sIHsweDg1NTAsICAgIDB4MDA4NX0sCit7MHg4NTUxLCAgICAweDAwMDJ9LCB7MHg4NTUyLCAgICAweDAwMjd9LCB7MHg4NTUzLCAgICAweDAwMDF9LAorezB4ODU1NCwgICAgMHgwMDM5fSwgezB4ODU1NSwgICAgMHgwMDdmfSwgezB4ODU1NiwgICAgMHgwMDhmfSwKK3sweDg1NTcsICAgIDB4MDA3ZH0sIHsweDg1NTgsICAgIDB4MDA4Nn0sIHsweDg1NTksICAgIDB4MDAwNH0sCit7MHg4NTVhLCAgICAweDAwYjd9LCB7MHg4NTViLCAgICAweDAwMTJ9LCB7MHg4NTVjLCAgICAweDAwMDR9LAorezB4ODU1ZCwgICAgMHgwMDg2fSwgezB4ODU1ZSwgICAgMHgwMDA4fSwgezB4ODU1ZiwgICAgMHgwMGI3fSwKK3sweDg1NjAsICAgIDB4MDAxMn0sIHsweDg1NjEsICAgIDB4MDAwN30sIHsweDg1NjIsICAgIDB4MDA4Nn0sCit7MHg4NTYzLCAgICAweDAwMTB9LCB7MHg4NTY0LCAgICAweDAwYjd9LCB7MHg4NTY1LCAgICAweDAwMTJ9LAorezB4ODU2NiwgICAgMHgwMDBjfSwgezB4ODU2NywgICAgMHgwMDg2fSwgezB4ODU2OCwgICAgMHgwMDA3fSwKK3sweDg1NjksICAgIDB4MDBiN30sIHsweDg1NmEsICAgIDB4MDAxMn0sIHsweDg1NmIsICAgIDB4MDAwNn0sCit7MHg4NTZjLCAgICAweDAwYjZ9LCB7MHg4NTZkLCAgICAweDAwOGZ9LCB7MHg4NTZlLCAgICAweDAwN2R9LAorezB4ODU2ZiwgICAgMHgwMGI3fSwgezB4ODU3MCwgICAgMHgwMDEyfSwgezB4ODU3MSwgICAgMHgwMDcwfSwKK3sweDg1NzIsICAgIDB4MDA4Nn0sIHsweDg1NzMsICAgIDB4MDAwMX0sIHsweDg1NzQsICAgIDB4MDBiYX0sCit7MHg4NTc1LCAgICAweDAwMTJ9LCB7MHg4NTc2LCAgICAweDAwMDR9LCB7MHg4NTc3LCAgICAweDAwYjd9LAorezB4ODU3OCwgICAgMHgwMDEyfSwgezB4ODU3OSwgICAgMHgwMDA0fSwgezB4ODU3YSwgICAgMHgwMDAxfSwKK3sweDg1N2IsICAgIDB4MDAwMX0sIHsweDg1N2MsICAgIDB4MDAwMX0sIHsweDg1N2QsICAgIDB4MDAwMX0sCit7MHg4NTdlLCAgICAweDAwMDF9LCB7MHg4NTdmLCAgICAweDAwMDF9LCB7MHg4NTgwLCAgICAweDAwYjZ9LAorezB4ODU4MSwgICAgMHgwMDEyfSwgezB4ODU4MiwgICAgMHgwMDA0fSwgezB4ODU4MywgICAgMHgwMDg0fSwKK3sweDg1ODQsICAgIDB4MDBmZX0sIHsweDg1ODUsICAgIDB4MDA4YX0sIHsweDg1ODYsICAgIDB4MDAwMn0sCit7MHg4NTg3LCAgICAweDAwYjd9LCB7MHg4NTg4LCAgICAweDAwMTJ9LCB7MHg4NTg5LCAgICAweDAwMDR9LAorezB4ODU4YSwgICAgMHgwMDAxfSwgezB4ODU4YiwgICAgMHgwMDAxfSwgezB4ODU4YywgICAgMHgwMDAxfSwKK3sweDg1OGQsICAgIDB4MDAwMX0sIHsweDg1OGUsICAgIDB4MDAwMX0sIHsweDg1OGYsICAgIDB4MDAwMX0sCit7MHg4NTkwLCAgICAweDAwODZ9LCB7MHg4NTkxLCAgICAweDAwZmR9LCB7MHg4NTkyLCAgICAweDAwYjR9LAorezB4ODU5MywgICAgMHgwMDEyfSwgezB4ODU5NCwgICAgMHgwMDA0fSwgezB4ODU5NSwgICAgMHgwMGI3fSwKK3sweDg1OTYsICAgIDB4MDAxMn0sIHsweDg1OTcsICAgIDB4MDAwNH0sIHsweDg1OTgsICAgIDB4MDBiNn0sCit7MHg4NTk5LCAgICAweDAwMTJ9LCB7MHg4NTlhLCAgICAweDAwMDB9LCB7MHg4NTliLCAgICAweDAwODR9LAorezB4ODU5YywgICAgMHgwMDA4fSwgezB4ODU5ZCwgICAgMHgwMDgxfSwgezB4ODU5ZSwgICAgMHgwMDA4fSwKK3sweDg1OWYsICAgIDB4MDAyN30sIHsweDg1YTAsICAgIDB4MDAxNn0sIHsweDg1YTEsICAgIDB4MDBiNn0sCit7MHg4NWEyLCAgICAweDAwOGZ9LCB7MHg4NWEzLCAgICAweDAwN2R9LCB7MHg4NWE0LCAgICAweDAwODF9LAorezB4ODVhNSwgICAgMHgwMDBjfSwgezB4ODVhNiwgICAgMHgwMDI3fSwgezB4ODVhNywgICAgMHgwMDA4fSwKK3sweDg1YTgsICAgIDB4MDA4Yn0sIHsweDg1YTksICAgIDB4MDAwNH0sIHsweDg1YWEsICAgIDB4MDBiN30sCit7MHg4NWFiLCAgICAweDAwOGZ9LCB7MHg4NWFjLCAgICAweDAwN2R9LCB7MHg4NWFkLCAgICAweDAwN2V9LAorezB4ODVhZSwgICAgMHgwMDg1fSwgezB4ODVhZiwgICAgMHgwMDZjfSwgezB4ODViMCwgICAgMHgwMDg2fSwKK3sweDg1YjEsICAgIDB4MDAwM30sIHsweDg1YjIsICAgIDB4MDA5N30sIHsweDg1YjMsICAgIDB4MDA0MH0sCit7MHg4NWI0LCAgICAweDAwN2V9LCB7MHg4NWI1LCAgICAweDAwODl9LCB7MHg4NWI2LCAgICAweDAwNmV9LAorezB4ODViNywgICAgMHgwMDg2fSwgezB4ODViOCwgICAgMHgwMDA3fSwgezB4ODViOSwgICAgMHgwMGI3fSwKK3sweDg1YmEsICAgIDB4MDAxMn0sIHsweDg1YmIsICAgIDB4MDAwNn0sIHsweDg1YmMsICAgIDB4MDA1Zn0sCit7MHg4NWJkLCAgICAweDAwZjd9LCB7MHg4NWJlLCAgICAweDAwOGZ9LCB7MHg4NWJmLCAgICAweDAwODJ9LAorezB4ODVjMCwgICAgMHgwMDVmfSwgezB4ODVjMSwgICAgMHgwMGY3fSwgezB4ODVjMiwgICAgMHgwMDhmfSwKK3sweDg1YzMsICAgIDB4MDA3Zn0sIHsweDg1YzQsICAgIDB4MDBmN30sIHsweDg1YzUsICAgIDB4MDA4Zn0sCit7MHg4NWM2LCAgICAweDAwNzB9LCB7MHg4NWM3LCAgICAweDAwZjd9LCB7MHg4NWM4LCAgICAweDAwOGZ9LAorezB4ODVjOSwgICAgMHgwMDcxfSwgezB4ODVjYSwgICAgMHgwMGY3fSwgezB4ODVjYiwgICAgMHgwMDhmfSwKK3sweDg1Y2MsICAgIDB4MDA3Mn0sIHsweDg1Y2QsICAgIDB4MDBmN30sIHsweDg1Y2UsICAgIDB4MDA4Zn0sCit7MHg4NWNmLCAgICAweDAwNzN9LCB7MHg4NWQwLCAgICAweDAwZjd9LCB7MHg4NWQxLCAgICAweDAwOGZ9LAorezB4ODVkMiwgICAgMHgwMDc0fSwgezB4ODVkMywgICAgMHgwMGY3fSwgezB4ODVkNCwgICAgMHgwMDhmfSwKK3sweDg1ZDUsICAgIDB4MDA3NX0sIHsweDg1ZDYsICAgIDB4MDBmN30sIHsweDg1ZDcsICAgIDB4MDA4Zn0sCit7MHg4NWQ4LCAgICAweDAwNzZ9LCB7MHg4NWQ5LCAgICAweDAwZjd9LCB7MHg4NWRhLCAgICAweDAwOGZ9LAorezB4ODVkYiwgICAgMHgwMDc3fSwgezB4ODVkYywgICAgMHgwMGY3fSwgezB4ODVkZCwgICAgMHgwMDhmfSwKK3sweDg1ZGUsICAgIDB4MDA3OH0sIHsweDg1ZGYsICAgIDB4MDBmN30sIHsweDg1ZTAsICAgIDB4MDA4Zn0sCit7MHg4NWUxLCAgICAweDAwNzl9LCB7MHg4NWUyLCAgICAweDAwZjd9LCB7MHg4NWUzLCAgICAweDAwOGZ9LAorezB4ODVlNCwgICAgMHgwMDdhfSwgezB4ODVlNSwgICAgMHgwMGY3fSwgezB4ODVlNiwgICAgMHgwMDhmfSwKK3sweDg1ZTcsICAgIDB4MDA3Yn0sIHsweDg1ZTgsICAgIDB4MDBiNn0sIHsweDg1ZTksICAgIDB4MDAxMn0sCit7MHg4NWVhLCAgICAweDAwMDR9LCB7MHg4NWViLCAgICAweDAwOGF9LCB7MHg4NWVjLCAgICAweDAwMTB9LAorezB4ODVlZCwgICAgMHgwMGI3fSwgezB4ODVlZSwgICAgMHgwMDEyfSwgezB4ODVlZiwgICAgMHgwMDA0fSwKK3sweDg1ZjAsICAgIDB4MDA4Nn0sIHsweDg1ZjEsICAgIDB4MDBlNH0sIHsweDg1ZjIsICAgIDB4MDBiN30sCit7MHg4NWYzLCAgICAweDAwMTJ9LCB7MHg4NWY0LCAgICAweDAwNzB9LCB7MHg4NWY1LCAgICAweDAwYjd9LAorezB4ODVmNiwgICAgMHgwMDEyfSwgezB4ODVmNywgICAgMHgwMDA3fSwgezB4ODVmOCwgICAgMHgwMGY3fSwKK3sweDg1ZjksICAgIDB4MDAxMn0sIHsweDg1ZmEsICAgIDB4MDAwNX0sIHsweDg1ZmIsICAgIDB4MDBmN30sCit7MHg4NWZjLCAgICAweDAwMTJ9LCB7MHg4NWZkLCAgICAweDAwMDl9LCB7MHg4NWZlLCAgICAweDAwODZ9LAorezB4ODVmZiwgICAgMHgwMDA4fSwgezB4ODYwMCwgICAgMHgwMGJhfSwgezB4ODYwMSwgICAgMHgwMDEyfSwKK3sweDg2MDIsICAgIDB4MDAwNH0sIHsweDg2MDMsICAgIDB4MDBiN30sIHsweDg2MDQsICAgIDB4MDAxMn0sCit7MHg4NjA1LCAgICAweDAwMDR9LCB7MHg4NjA2LCAgICAweDAwODZ9LCB7MHg4NjA3LCAgICAweDAwZjd9LAorezB4ODYwOCwgICAgMHgwMGI0fSwgezB4ODYwOSwgICAgMHgwMDEyfSwgezB4ODYwYSwgICAgMHgwMDA0fSwKK3sweDg2MGIsICAgIDB4MDBiN30sIHsweDg2MGMsICAgIDB4MDAxMn0sIHsweDg2MGQsICAgIDB4MDAwNH0sCit7MHg4NjBlLCAgICAweDAwMDF9LCB7MHg4NjBmLCAgICAweDAwMDF9LCB7MHg4NjEwLCAgICAweDAwMDF9LAorezB4ODYxMSwgICAgMHgwMDAxfSwgezB4ODYxMiwgICAgMHgwMDAxfSwgezB4ODYxMywgICAgMHgwMDAxfSwKK3sweDg2MTQsICAgIDB4MDBiNn0sIHsweDg2MTUsICAgIDB4MDAxMn0sIHsweDg2MTYsICAgIDB4MDAwOH0sCit7MHg4NjE3LCAgICAweDAwMjd9LCB7MHg4NjE4LCAgICAweDAwN2Z9LCB7MHg4NjE5LCAgICAweDAwODF9LAorezB4ODYxYSwgICAgMHgwMDgwfSwgezB4ODYxYiwgICAgMHgwMDI2fSwgezB4ODYxYywgICAgMHgwMDBifSwKK3sweDg2MWQsICAgIDB4MDA4Nn0sIHsweDg2MWUsICAgIDB4MDAwOH0sIHsweDg2MWYsICAgIDB4MDBjZX0sCit7MHg4NjIwLCAgICAweDAwOGZ9LCB7MHg4NjIxLCAgICAweDAwNzl9LCB7MHg4NjIyLCAgICAweDAwYmR9LAorezB4ODYyMywgICAgMHgwMDg5fSwgezB4ODYyNCwgICAgMHgwMDdifSwgezB4ODYyNSwgICAgMHgwMDdlfSwKK3sweDg2MjYsICAgIDB4MDA4Nn0sIHsweDg2MjcsICAgIDB4MDA4ZX0sIHsweDg2MjgsICAgIDB4MDA4MX0sCit7MHg4NjI5LCAgICAweDAwNDB9LCB7MHg4NjJhLCAgICAweDAwMjZ9LCB7MHg4NjJiLCAgICAweDAwMGJ9LAorezB4ODYyYywgICAgMHgwMDg2fSwgezB4ODYyZCwgICAgMHgwMDA0fSwgezB4ODYyZSwgICAgMHgwMGNlfSwKK3sweDg2MmYsICAgIDB4MDA4Zn0sIHsweDg2MzAsICAgIDB4MDA3Nn0sIHsweDg2MzEsICAgIDB4MDBiZH0sCit7MHg4NjMyLCAgICAweDAwODl9LCB7MHg4NjMzLCAgICAweDAwN2J9LCB7MHg4NjM0LCAgICAweDAwN2V9LAorezB4ODYzNSwgICAgMHgwMDg2fSwgezB4ODYzNiwgICAgMHgwMDhlfSwgezB4ODYzNywgICAgMHgwMDgxfSwKK3sweDg2MzgsICAgIDB4MDAyMH0sIHsweDg2MzksICAgIDB4MDAyNn0sIHsweDg2M2EsICAgIDB4MDAwYn0sCit7MHg4NjNiLCAgICAweDAwODZ9LCB7MHg4NjNjLCAgICAweDAwMDJ9LCB7MHg4NjNkLCAgICAweDAwY2V9LAorezB4ODYzZSwgICAgMHgwMDhmfSwgezB4ODYzZiwgICAgMHgwMDczfSwgezB4ODY0MCwgICAgMHgwMGJkfSwKK3sweDg2NDEsICAgIDB4MDA4OX0sIHsweDg2NDIsICAgIDB4MDA3Yn0sIHsweDg2NDMsICAgIDB4MDA3ZX0sCit7MHg4NjQ0LCAgICAweDAwODZ9LCB7MHg4NjQ1LCAgICAweDAwOGV9LCB7MHg4NjQ2LCAgICAweDAwODF9LAorezB4ODY0NywgICAgMHgwMDEwfSwgezB4ODY0OCwgICAgMHgwMDI2fSwgezB4ODY0OSwgICAgMHgwMDBifSwKK3sweDg2NGEsICAgIDB4MDA4Nn0sIHsweDg2NGIsICAgIDB4MDAwMX0sIHsweDg2NGMsICAgIDB4MDBjZX0sCit7MHg4NjRkLCAgICAweDAwOGZ9LCB7MHg4NjRlLCAgICAweDAwNzB9LCB7MHg4NjRmLCAgICAweDAwYmR9LAorezB4ODY1MCwgICAgMHgwMDg5fSwgezB4ODY1MSwgICAgMHgwMDdifSwgezB4ODY1MiwgICAgMHgwMDdlfSwKK3sweDg2NTMsICAgIDB4MDA4Nn0sIHsweDg2NTQsICAgIDB4MDA4ZX0sIHsweDg2NTUsICAgIDB4MDA4MX0sCit7MHg4NjU2LCAgICAweDAwMDh9LCB7MHg4NjU3LCAgICAweDAwMjZ9LCB7MHg4NjU4LCAgICAweDAwMGJ9LAorezB4ODY1OSwgICAgMHgwMDg2fSwgezB4ODY1YSwgICAgMHgwMDA4fSwgezB4ODY1YiwgICAgMHgwMGNlfSwKK3sweDg2NWMsICAgIDB4MDA4Zn0sIHsweDg2NWQsICAgIDB4MDA3OX0sIHsweDg2NWUsICAgIDB4MDBiZH0sCit7MHg4NjVmLCAgICAweDAwODl9LCB7MHg4NjYwLCAgICAweDAwN2Z9LCB7MHg4NjYxLCAgICAweDAwN2V9LAorezB4ODY2MiwgICAgMHgwMDg2fSwgezB4ODY2MywgICAgMHgwMDhlfSwgezB4ODY2NCwgICAgMHgwMDgxfSwKK3sweDg2NjUsICAgIDB4MDAwNH0sIHsweDg2NjYsICAgIDB4MDAyNn0sIHsweDg2NjcsICAgIDB4MDAwYn0sCit7MHg4NjY4LCAgICAweDAwODZ9LCB7MHg4NjY5LCAgICAweDAwMDR9LCB7MHg4NjZhLCAgICAweDAwY2V9LAorezB4ODY2YiwgICAgMHgwMDhmfSwgezB4ODY2YywgICAgMHgwMDc2fSwgezB4ODY2ZCwgICAgMHgwMGJkfSwKK3sweDg2NmUsICAgIDB4MDA4OX0sIHsweDg2NmYsICAgIDB4MDA3Zn0sIHsweDg2NzAsICAgIDB4MDA3ZX0sCit7MHg4NjcxLCAgICAweDAwODZ9LCB7MHg4NjcyLCAgICAweDAwOGV9LCB7MHg4NjczLCAgICAweDAwODF9LAorezB4ODY3NCwgICAgMHgwMDAyfSwgezB4ODY3NSwgICAgMHgwMDI2fSwgezB4ODY3NiwgICAgMHgwMDBifSwKK3sweDg2NzcsICAgIDB4MDA4YX0sIHsweDg2NzgsICAgIDB4MDAwMn0sIHsweDg2NzksICAgIDB4MDBjZX0sCit7MHg4NjdhLCAgICAweDAwOGZ9LCB7MHg4NjdiLCAgICAweDAwNzN9LCB7MHg4NjdjLCAgICAweDAwYmR9LAorezB4ODY3ZCwgICAgMHgwMDg5fSwgezB4ODY3ZSwgICAgMHgwMDdmfSwgezB4ODY3ZiwgICAgMHgwMDdlfSwKK3sweDg2ODAsICAgIDB4MDA4Nn0sIHsweDg2ODEsICAgIDB4MDA4ZX0sIHsweDg2ODIsICAgIDB4MDA4MX0sCit7MHg4NjgzLCAgICAweDAwMDF9LCB7MHg4Njg0LCAgICAweDAwMjZ9LCB7MHg4Njg1LCAgICAweDAwMDh9LAorezB4ODY4NiwgICAgMHgwMDg2fSwgezB4ODY4NywgICAgMHgwMDAxfSwgezB4ODY4OCwgICAgMHgwMGNlfSwKK3sweDg2ODksICAgIDB4MDA4Zn0sIHsweDg2OGEsICAgIDB4MDA3MH0sIHsweDg2OGIsICAgIDB4MDBiZH0sCit7MHg4NjhjLCAgICAweDAwODl9LCB7MHg4NjhkLCAgICAweDAwN2Z9LCB7MHg4NjhlLCAgICAweDAwYjZ9LAorezB4ODY4ZiwgICAgMHgwMDhmfSwgezB4ODY5MCwgICAgMHgwMDdmfSwgezB4ODY5MSwgICAgMHgwMDgxfSwKK3sweDg2OTIsICAgIDB4MDAwZn0sIHsweDg2OTMsICAgIDB4MDAyNn0sIHsweDg2OTQsICAgIDB4MDAwM30sCit7MHg4Njk1LCAgICAweDAwN2V9LCB7MHg4Njk2LCAgICAweDAwODd9LCB7MHg4Njk3LCAgICAweDAwNDd9LAorezB4ODY5OCwgICAgMHgwMGI2fSwgezB4ODY5OSwgICAgMHgwMDEyfSwgezB4ODY5YSwgICAgMHgwMDA5fSwKK3sweDg2OWIsICAgIDB4MDA4NH0sIHsweDg2OWMsICAgIDB4MDAwM30sIHsweDg2OWQsICAgIDB4MDA4MX0sCit7MHg4NjllLCAgICAweDAwMDN9LCB7MHg4NjlmLCAgICAweDAwMjd9LCB7MHg4NmEwLCAgICAweDAwMDZ9LAorezB4ODZhMSwgICAgMHgwMDdjfSwgezB4ODZhMiwgICAgMHgwMDEyfSwgezB4ODZhMywgICAgMHgwMDA5fSwKK3sweDg2YTQsICAgIDB4MDA3ZX0sIHsweDg2YTUsICAgIDB4MDA4NX0sIHsweDg2YTYsICAgIDB4MDBmZX0sCit7MHg4NmE3LCAgICAweDAwYjZ9LCB7MHg4NmE4LCAgICAweDAwMTJ9LCB7MHg4NmE5LCAgICAweDAwMDZ9LAorezB4ODZhYSwgICAgMHgwMDg0fSwgezB4ODZhYiwgICAgMHgwMDA3fSwgezB4ODZhYywgICAgMHgwMDgxfSwKK3sweDg2YWQsICAgIDB4MDAwN30sIHsweDg2YWUsICAgIDB4MDAyN30sIHsweDg2YWYsICAgIDB4MDAwOH0sCit7MHg4NmIwLCAgICAweDAwOGJ9LCB7MHg4NmIxLCAgICAweDAwMDF9LCB7MHg4NmIyLCAgICAweDAwYjd9LAorezB4ODZiMywgICAgMHgwMDEyfSwgezB4ODZiNCwgICAgMHgwMDA2fSwgezB4ODZiNSwgICAgMHgwMDdlfSwKK3sweDg2YjYsICAgIDB4MDA4Nn0sIHsweDg2YjcsICAgIDB4MDBkNX0sIHsweDg2YjgsICAgIDB4MDBiNn0sCit7MHg4NmI5LCAgICAweDAwOGZ9LCB7MHg4NmJhLCAgICAweDAwODJ9LCB7MHg4NmJiLCAgICAweDAwMjZ9LAorezB4ODZiYywgICAgMHgwMDBhfSwgezB4ODZiZCwgICAgMHgwMDdjfSwgezB4ODZiZSwgICAgMHgwMDhmfSwKK3sweDg2YmYsICAgIDB4MDA4Mn0sIHsweDg2YzAsICAgIDB4MDA0Zn0sIHsweDg2YzEsICAgIDB4MDBiN30sCit7MHg4NmMyLCAgICAweDAwMTJ9LCB7MHg4NmMzLCAgICAweDAwMDZ9LCB7MHg4NmM0LCAgICAweDAwN2V9LAorezB4ODZjNSwgICAgMHgwMDg1fSwgezB4ODZjNiwgICAgMHgwMGMwfSwgezB4ODZjNywgICAgMHgwMGI2fSwKK3sweDg2YzgsICAgIDB4MDAxMn0sIHsweDg2YzksICAgIDB4MDAwNn0sIHsweDg2Y2EsICAgIDB4MDA4NH0sCit7MHg4NmNiLCAgICAweDAwM2Z9LCB7MHg4NmNjLCAgICAweDAwODF9LCB7MHg4NmNkLCAgICAweDAwM2Z9LAorezB4ODZjZSwgICAgMHgwMDI3fSwgezB4ODZjZiwgICAgMHgwMDEwfSwgezB4ODZkMCwgICAgMHgwMDhifSwKK3sweDg2ZDEsICAgIDB4MDAwOH0sIHsweDg2ZDIsICAgIDB4MDBiN30sIHsweDg2ZDMsICAgIDB4MDAxMn0sCit7MHg4NmQ0LCAgICAweDAwMDZ9LCB7MHg4NmQ1LCAgICAweDAwYjZ9LCB7MHg4NmQ2LCAgICAweDAwMTJ9LAorezB4ODZkNywgICAgMHgwMDA5fSwgezB4ODZkOCwgICAgMHgwMDg0fSwgezB4ODZkOSwgICAgMHgwMGZjfSwKK3sweDg2ZGEsICAgIDB4MDBiN30sIHsweDg2ZGIsICAgIDB4MDAxMn0sIHsweDg2ZGMsICAgIDB4MDAwOX0sCit7MHg4NmRkLCAgICAweDAwN2V9LCB7MHg4NmRlLCAgICAweDAwODV9LCB7MHg4NmRmLCAgICAweDAwZmV9LAorezB4ODZlMCwgICAgMHgwMGNlfSwgezB4ODZlMSwgICAgMHgwMDhmfSwgezB4ODZlMiwgICAgMHgwMDcwfSwKK3sweDg2ZTMsICAgIDB4MDAxOH0sIHsweDg2ZTQsICAgIDB4MDBjZX0sIHsweDg2ZTUsICAgIDB4MDA4Zn0sCit7MHg4NmU2LCAgICAweDAwODR9LCB7MHg4NmU3LCAgICAweDAwYzZ9LCB7MHg4NmU4LCAgICAweDAwMGN9LAorezB4ODZlOSwgICAgMHgwMGJkfSwgezB4ODZlYSwgICAgMHgwMDg5fSwgezB4ODZlYiwgICAgMHgwMDZmfSwKK3sweDg2ZWMsICAgIDB4MDBjZX0sIHsweDg2ZWQsICAgIDB4MDA4Zn0sIHsweDg2ZWUsICAgIDB4MDA4NH0sCit7MHg4NmVmLCAgICAweDAwMTh9LCB7MHg4NmYwLCAgICAweDAwY2V9LCB7MHg4NmYxLCAgICAweDAwOGZ9LAorezB4ODZmMiwgICAgMHgwMDcwfSwgezB4ODZmMywgICAgMHgwMGM2fSwgezB4ODZmNCwgICAgMHgwMDBjfSwKK3sweDg2ZjUsICAgIDB4MDBiZH0sIHsweDg2ZjYsICAgIDB4MDA4OX0sIHsweDg2ZjcsICAgIDB4MDA2Zn0sCit7MHg4NmY4LCAgICAweDAwZDZ9LCB7MHg4NmY5LCAgICAweDAwODN9LCB7MHg4NmZhLCAgICAweDAwYzF9LAorezB4ODZmYiwgICAgMHgwMDRmfSwgezB4ODZmYywgICAgMHgwMDJkfSwgezB4ODZmZCwgICAgMHgwMDAzfSwKK3sweDg2ZmUsICAgIDB4MDA3ZX0sIHsweDg2ZmYsICAgIDB4MDA4N30sIHsweDg3MDAsICAgIDB4MDA0MH0sCit7MHg4NzAxLCAgICAweDAwYjZ9LCB7MHg4NzAyLCAgICAweDAwOGZ9LCB7MHg4NzAzLCAgICAweDAwN2Z9LAorezB4ODcwNCwgICAgMHgwMDgxfSwgezB4ODcwNSwgICAgMHgwMDA3fSwgezB4ODcwNiwgICAgMHgwMDI3fSwKK3sweDg3MDcsICAgIDB4MDAwZn0sIHsweDg3MDgsICAgIDB4MDA4MX0sIHsweDg3MDksICAgIDB4MDAwYn0sCit7MHg4NzBhLCAgICAweDAwMjd9LCB7MHg4NzBiLCAgICAweDAwMTV9LCB7MHg4NzBjLCAgICAweDAwODF9LAorezB4ODcwZCwgICAgMHgwMDBkfSwgezB4ODcwZSwgICAgMHgwMDI3fSwgezB4ODcwZiwgICAgMHgwMDFifSwKK3sweDg3MTAsICAgIDB4MDA4MX0sIHsweDg3MTEsICAgIDB4MDAwZX0sIHsweDg3MTIsICAgIDB4MDAyN30sCit7MHg4NzEzLCAgICAweDAwMjF9LCB7MHg4NzE0LCAgICAweDAwN2V9LCB7MHg4NzE1LCAgICAweDAwODd9LAorezB4ODcxNiwgICAgMHgwMDQwfSwgezB4ODcxNywgICAgMHgwMGY3fSwgezB4ODcxOCwgICAgMHgwMDhmfSwKK3sweDg3MTksICAgIDB4MDA3Yn0sIHsweDg3MWEsICAgIDB4MDA4Nn0sIHsweDg3MWIsICAgIDB4MDAwMn0sCit7MHg4NzFjLCAgICAweDAwYjd9LCB7MHg4NzFkLCAgICAweDAwOGZ9LCB7MHg4NzFlLCAgICAweDAwN2F9LAorezB4ODcxZiwgICAgMHgwMDIwfSwgezB4ODcyMCwgICAgMHgwMDFjfSwgezB4ODcyMSwgICAgMHgwMGY3fSwKK3sweDg3MjIsICAgIDB4MDA4Zn0sIHsweDg3MjMsICAgIDB4MDA3OH0sIHsweDg3MjQsICAgIDB4MDA4Nn0sCit7MHg4NzI1LCAgICAweDAwMDJ9LCB7MHg4NzI2LCAgICAweDAwYjd9LCB7MHg4NzI3LCAgICAweDAwOGZ9LAorezB4ODcyOCwgICAgMHgwMDc3fSwgezB4ODcyOSwgICAgMHgwMDIwfSwgezB4ODcyYSwgICAgMHgwMDEyfSwKK3sweDg3MmIsICAgIDB4MDBmN30sIHsweDg3MmMsICAgIDB4MDA4Zn0sIHsweDg3MmQsICAgIDB4MDA3NX0sCit7MHg4NzJlLCAgICAweDAwODZ9LCB7MHg4NzJmLCAgICAweDAwMDJ9LCB7MHg4NzMwLCAgICAweDAwYjd9LAorezB4ODczMSwgICAgMHgwMDhmfSwgezB4ODczMiwgICAgMHgwMDc0fSwgezB4ODczMywgICAgMHgwMDIwfSwKK3sweDg3MzQsICAgIDB4MDAwOH0sIHsweDg3MzUsICAgIDB4MDBmN30sIHsweDg3MzYsICAgIDB4MDA4Zn0sCit7MHg4NzM3LCAgICAweDAwNzJ9LCB7MHg4NzM4LCAgICAweDAwODZ9LCB7MHg4NzM5LCAgICAweDAwMDJ9LAorezB4ODczYSwgICAgMHgwMGI3fSwgezB4ODczYiwgICAgMHgwMDhmfSwgezB4ODczYywgICAgMHgwMDcxfSwKK3sweDg3M2QsICAgIDB4MDA3ZX0sIHsweDg3M2UsICAgIDB4MDA4N30sIHsweDg3M2YsICAgIDB4MDA0N30sCit7MHg4NzQwLCAgICAweDAwODZ9LCB7MHg4NzQxLCAgICAweDAwMDR9LCB7MHg4NzQyLCAgICAweDAwOTd9LAorezB4ODc0MywgICAgMHgwMDQwfSwgezB4ODc0NCwgICAgMHgwMDdlfSwgezB4ODc0NSwgICAgMHgwMDg5fSwKK3sweDg3NDYsICAgIDB4MDA2ZX0sIHsweDg3NDcsICAgIDB4MDBjZX0sIHsweDg3NDgsICAgIDB4MDA4Zn0sCit7MHg4NzQ5LCAgICAweDAwNzJ9LCB7MHg4NzRhLCAgICAweDAwYmR9LCB7MHg4NzRiLCAgICAweDAwODl9LAorezB4ODc0YywgICAgMHgwMGY3fSwgezB4ODc0ZCwgICAgMHgwMGNlfSwgezB4ODc0ZSwgICAgMHgwMDhmfSwKK3sweDg3NGYsICAgIDB4MDA3NX0sIHsweDg3NTAsICAgIDB4MDBiZH0sIHsweDg3NTEsICAgIDB4MDA4OX0sCit7MHg4NzUyLCAgICAweDAwZjd9LCB7MHg4NzUzLCAgICAweDAwY2V9LCB7MHg4NzU0LCAgICAweDAwOGZ9LAorezB4ODc1NSwgICAgMHgwMDc4fSwgezB4ODc1NiwgICAgMHgwMGJkfSwgezB4ODc1NywgICAgMHgwMDg5fSwKK3sweDg3NTgsICAgIDB4MDBmN30sIHsweDg3NTksICAgIDB4MDBjZX0sIHsweDg3NWEsICAgIDB4MDA4Zn0sCit7MHg4NzViLCAgICAweDAwN2J9LCB7MHg4NzVjLCAgICAweDAwYmR9LCB7MHg4NzVkLCAgICAweDAwODl9LAorezB4ODc1ZSwgICAgMHgwMGY3fSwgezB4ODc1ZiwgICAgMHgwMDRmfSwgezB4ODc2MCwgICAgMHgwMGI3fSwKK3sweDg3NjEsICAgIDB4MDA4Zn0sIHsweDg3NjIsICAgIDB4MDA3ZH0sIHsweDg3NjMsICAgIDB4MDBiN30sCit7MHg4NzY0LCAgICAweDAwOGZ9LCB7MHg4NzY1LCAgICAweDAwODF9LCB7MHg4NzY2LCAgICAweDAwYjZ9LAorezB4ODc2NywgICAgMHgwMDhmfSwgezB4ODc2OCwgICAgMHgwMDcyfSwgezB4ODc2OSwgICAgMHgwMDI3fSwKK3sweDg3NmEsICAgIDB4MDA0N30sIHsweDg3NmIsICAgIDB4MDA3Y30sIHsweDg3NmMsICAgIDB4MDA4Zn0sCit7MHg4NzZkLCAgICAweDAwN2R9LCB7MHg4NzZlLCAgICAweDAwYjZ9LCB7MHg4NzZmLCAgICAweDAwOGZ9LAorezB4ODc3MCwgICAgMHgwMDc1fSwgezB4ODc3MSwgICAgMHgwMDI3fSwgezB4ODc3MiwgICAgMHgwMDNmfSwKK3sweDg3NzMsICAgIDB4MDA3Y30sIHsweDg3NzQsICAgIDB4MDA4Zn0sIHsweDg3NzUsICAgIDB4MDA3ZH0sCit7MHg4Nzc2LCAgICAweDAwYjZ9LCB7MHg4Nzc3LCAgICAweDAwOGZ9LCB7MHg4Nzc4LCAgICAweDAwNzh9LAorezB4ODc3OSwgICAgMHgwMDI3fSwgezB4ODc3YSwgICAgMHgwMDM3fSwgezB4ODc3YiwgICAgMHgwMDdjfSwKK3sweDg3N2MsICAgIDB4MDA4Zn0sIHsweDg3N2QsICAgIDB4MDA3ZH0sIHsweDg3N2UsICAgIDB4MDBiNn0sCit7MHg4NzdmLCAgICAweDAwOGZ9LCB7MHg4NzgwLCAgICAweDAwN2J9LCB7MHg4NzgxLCAgICAweDAwMjd9LAorezB4ODc4MiwgICAgMHgwMDJmfSwgezB4ODc4MywgICAgMHgwMDdmfSwgezB4ODc4NCwgICAgMHgwMDhmfSwKK3sweDg3ODUsICAgIDB4MDA3ZH0sIHsweDg3ODYsICAgIDB4MDA3Y30sIHsweDg3ODcsICAgIDB4MDA4Zn0sCit7MHg4Nzg4LCAgICAweDAwODF9LCB7MHg4Nzg5LCAgICAweDAwN2F9LCB7MHg4NzhhLCAgICAweDAwOGZ9LAorezB4ODc4YiwgICAgMHgwMDcyfSwgezB4ODc4YywgICAgMHgwMDI3fSwgezB4ODc4ZCwgICAgMHgwMDFifSwKK3sweDg3OGUsICAgIDB4MDA3Y30sIHsweDg3OGYsICAgIDB4MDA4Zn0sIHsweDg3OTAsICAgIDB4MDA3ZH0sCit7MHg4NzkxLCAgICAweDAwN2F9LCB7MHg4NzkyLCAgICAweDAwOGZ9LCB7MHg4NzkzLCAgICAweDAwNzV9LAorezB4ODc5NCwgICAgMHgwMDI3fSwgezB4ODc5NSwgICAgMHgwMDE2fSwgezB4ODc5NiwgICAgMHgwMDdjfSwKK3sweDg3OTcsICAgIDB4MDA4Zn0sIHsweDg3OTgsICAgIDB4MDA3ZH0sIHsweDg3OTksICAgIDB4MDA3YX0sCit7MHg4NzlhLCAgICAweDAwOGZ9LCB7MHg4NzliLCAgICAweDAwNzh9LCB7MHg4NzljLCAgICAweDAwMjd9LAorezB4ODc5ZCwgICAgMHgwMDExfSwgezB4ODc5ZSwgICAgMHgwMDdjfSwgezB4ODc5ZiwgICAgMHgwMDhmfSwKK3sweDg3YTAsICAgIDB4MDA3ZH0sIHsweDg3YTEsICAgIDB4MDA3YX0sIHsweDg3YTIsICAgIDB4MDA4Zn0sCit7MHg4N2EzLCAgICAweDAwN2J9LCB7MHg4N2E0LCAgICAweDAwMjd9LCB7MHg4N2E1LCAgICAweDAwMGN9LAorezB4ODdhNiwgICAgMHgwMDdlfSwgezB4ODdhNywgICAgMHgwMDg3fSwgezB4ODdhOCwgICAgMHgwMDgzfSwKK3sweDg3YTksICAgIDB4MDA3YX0sIHsweDg3YWEsICAgIDB4MDA4Zn0sIHsweDg3YWIsICAgIDB4MDA3NX0sCit7MHg4N2FjLCAgICAweDAwN2F9LCB7MHg4N2FkLCAgICAweDAwOGZ9LCB7MHg4N2FlLCAgICAweDAwNzh9LAorezB4ODdhZiwgICAgMHgwMDdhfSwgezB4ODdiMCwgICAgMHgwMDhmfSwgezB4ODdiMSwgICAgMHgwMDdifSwKK3sweDg3YjIsICAgIDB4MDBjZX0sIHsweDg3YjMsICAgIDB4MDBjMX0sIHsweDg3YjQsICAgIDB4MDBmY30sCit7MHg4N2I1LCAgICAweDAwZjZ9LCB7MHg4N2I2LCAgICAweDAwOGZ9LCB7MHg4N2I3LCAgICAweDAwN2R9LAorezB4ODdiOCwgICAgMHgwMDNhfSwgezB4ODdiOSwgICAgMHgwMGE2fSwgezB4ODdiYSwgICAgMHgwMDAwfSwKK3sweDg3YmIsICAgIDB4MDBiN30sIHsweDg3YmMsICAgIDB4MDAxMn0sIHsweDg3YmQsICAgIDB4MDA3MH0sCit7MHg4N2JlLCAgICAweDAwYjZ9LCB7MHg4N2JmLCAgICAweDAwOGZ9LCB7MHg4N2MwLCAgICAweDAwNzJ9LAorezB4ODdjMSwgICAgMHgwMDI2fSwgezB4ODdjMiwgICAgMHgwMDAzfSwgezB4ODdjMywgICAgMHgwMDdlfSwKK3sweDg3YzQsICAgIDB4MDA4N30sIHsweDg3YzUsICAgIDB4MDBmYX0sIHsweDg3YzYsICAgIDB4MDBiNn0sCit7MHg4N2M3LCAgICAweDAwOGZ9LCB7MHg4N2M4LCAgICAweDAwNzV9LCB7MHg4N2M5LCAgICAweDAwMjZ9LAorezB4ODdjYSwgICAgMHgwMDBhfSwgezB4ODdjYiwgICAgMHgwMDE4fSwgezB4ODdjYywgICAgMHgwMGNlfSwKK3sweDg3Y2QsICAgIDB4MDA4Zn0sIHsweDg3Y2UsICAgIDB4MDA3M30sIHsweDg3Y2YsICAgIDB4MDBiZH0sCit7MHg4N2QwLCAgICAweDAwODl9LCB7MHg4N2QxLCAgICAweDAwZDV9LCB7MHg4N2QyLCAgICAweDAwN2V9LAorezB4ODdkMywgICAgMHgwMDg3fSwgezB4ODdkNCwgICAgMHgwMGZhfSwgezB4ODdkNSwgICAgMHgwMGI2fSwKK3sweDg3ZDYsICAgIDB4MDA4Zn0sIHsweDg3ZDcsICAgIDB4MDA3OH0sIHsweDg3ZDgsICAgIDB4MDAyNn0sCit7MHg4N2Q5LCAgICAweDAwMGF9LCB7MHg4N2RhLCAgICAweDAwMTh9LCB7MHg4N2RiLCAgICAweDAwY2V9LAorezB4ODdkYywgICAgMHgwMDhmfSwgezB4ODdkZCwgICAgMHgwMDc2fSwgezB4ODdkZSwgICAgMHgwMGJkfSwKK3sweDg3ZGYsICAgIDB4MDA4OX0sIHsweDg3ZTAsICAgIDB4MDBkNX0sIHsweDg3ZTEsICAgIDB4MDA3ZX0sCit7MHg4N2UyLCAgICAweDAwODd9LCB7MHg4N2UzLCAgICAweDAwZmF9LCB7MHg4N2U0LCAgICAweDAwYjZ9LAorezB4ODdlNSwgICAgMHgwMDhmfSwgezB4ODdlNiwgICAgMHgwMDdifSwgezB4ODdlNywgICAgMHgwMDI2fSwKK3sweDg3ZTgsICAgIDB4MDAwYX0sIHsweDg3ZTksICAgIDB4MDAxOH0sIHsweDg3ZWEsICAgIDB4MDBjZX0sCit7MHg4N2ViLCAgICAweDAwOGZ9LCB7MHg4N2VjLCAgICAweDAwNzl9LCB7MHg4N2VkLCAgICAweDAwYmR9LAorezB4ODdlZSwgICAgMHgwMDg5fSwgezB4ODdlZiwgICAgMHgwMGQ1fSwgezB4ODdmMCwgICAgMHgwMDdlfSwKK3sweDg3ZjEsICAgIDB4MDA4N30sIHsweDg3ZjIsICAgIDB4MDBmYX0sIHsweDg3ZjMsICAgIDB4MDA4Nn0sCit7MHg4N2Y0LCAgICAweDAwMDV9LCB7MHg4N2Y1LCAgICAweDAwOTd9LCB7MHg4N2Y2LCAgICAweDAwNDB9LAorezB4ODdmNywgICAgMHgwMDdlfSwgezB4ODdmOCwgICAgMHgwMDg5fSwgezB4ODdmOSwgICAgMHgwMDAwfSwKK3sweDg3ZmEsICAgIDB4MDBiNn0sIHsweDg3ZmIsICAgIDB4MDA4Zn0sIHsweDg3ZmMsICAgIDB4MDA3NX0sCit7MHg4N2ZkLCAgICAweDAwODF9LCB7MHg4N2ZlLCAgICAweDAwMDd9LCB7MHg4N2ZmLCAgICAweDAwMmV9LAorezB4ODgwMCwgICAgMHgwMGYyfSwgezB4ODgwMSwgICAgMHgwMGY2fSwgezB4ODgwMiwgICAgMHgwMDEyfSwKK3sweDg4MDMsICAgIDB4MDAwNn0sIHsweDg4MDQsICAgIDB4MDBjNH0sIHsweDg4MDUsICAgIDB4MDBmOH0sCit7MHg4ODA2LCAgICAweDAwMWJ9LCB7MHg4ODA3LCAgICAweDAwYjd9LCB7MHg4ODA4LCAgICAweDAwMTJ9LAorezB4ODgwOSwgICAgMHgwMDA2fSwgezB4ODgwYSwgICAgMHgwMGI2fSwgezB4ODgwYiwgICAgMHgwMDhmfSwKK3sweDg4MGMsICAgIDB4MDA3OH0sIHsweDg4MGQsICAgIDB4MDA4MX0sIHsweDg4MGUsICAgIDB4MDAwN30sCit7MHg4ODBmLCAgICAweDAwMmV9LCB7MHg4ODEwLCAgICAweDAwZTJ9LCB7MHg4ODExLCAgICAweDAwNDh9LAorezB4ODgxMiwgICAgMHgwMDQ4fSwgezB4ODgxMywgICAgMHgwMDQ4fSwgezB4ODgxNCwgICAgMHgwMGY2fSwKK3sweDg4MTUsICAgIDB4MDAxMn0sIHsweDg4MTYsICAgIDB4MDAwNn0sIHsweDg4MTcsICAgIDB4MDBjNH0sCit7MHg4ODE4LCAgICAweDAwYzd9LCB7MHg4ODE5LCAgICAweDAwMWJ9LCB7MHg4ODFhLCAgICAweDAwYjd9LAorezB4ODgxYiwgICAgMHgwMDEyfSwgezB4ODgxYywgICAgMHgwMDA2fSwgezB4ODgxZCwgICAgMHgwMGI2fSwKK3sweDg4MWUsICAgIDB4MDA4Zn0sIHsweDg4MWYsICAgIDB4MDA3Yn0sIHsweDg4MjAsICAgIDB4MDA4MX0sCit7MHg4ODIxLCAgICAweDAwMDd9LCB7MHg4ODIyLCAgICAweDAwMmV9LCB7MHg4ODIzLCAgICAweDAwY2Z9LAorezB4ODgyNCwgICAgMHgwMGY2fSwgezB4ODgyNSwgICAgMHgwMDEyfSwgezB4ODgyNiwgICAgMHgwMDA1fSwKK3sweDg4MjcsICAgIDB4MDBjNH0sIHsweDg4MjgsICAgIDB4MDBmOH0sIHsweDg4MjksICAgIDB4MDAxYn0sCit7MHg4ODJhLCAgICAweDAwYjd9LCB7MHg4ODJiLCAgICAweDAwMTJ9LCB7MHg4ODJjLCAgICAweDAwMDV9LAorezB4ODgyZCwgICAgMHgwMDg2fSwgezB4ODgyZSwgICAgMHgwMDAwfSwgezB4ODgyZiwgICAgMHgwMGY2fSwKK3sweDg4MzAsICAgIDB4MDA4Zn0sIHsweDg4MzEsICAgIDB4MDA3MX0sIHsweDg4MzIsICAgIDB4MDBiZH0sCit7MHg4ODMzLCAgICAweDAwODl9LCB7MHg4ODM0LCAgICAweDAwOTR9LCB7MHg4ODM1LCAgICAweDAwODZ9LAorezB4ODgzNiwgICAgMHgwMDAxfSwgezB4ODgzNywgICAgMHgwMGY2fSwgezB4ODgzOCwgICAgMHgwMDhmfSwKK3sweDg4MzksICAgIDB4MDA3NH0sIHsweDg4M2EsICAgIDB4MDBiZH0sIHsweDg4M2IsICAgIDB4MDA4OX0sCit7MHg4ODNjLCAgICAweDAwOTR9LCB7MHg4ODNkLCAgICAweDAwODZ9LCB7MHg4ODNlLCAgICAweDAwMDJ9LAorezB4ODgzZiwgICAgMHgwMGY2fSwgezB4ODg0MCwgICAgMHgwMDhmfSwgezB4ODg0MSwgICAgMHgwMDc3fSwKK3sweDg4NDIsICAgIDB4MDBiZH0sIHsweDg4NDMsICAgIDB4MDA4OX0sIHsweDg4NDQsICAgIDB4MDA5NH0sCit7MHg4ODQ1LCAgICAweDAwODZ9LCB7MHg4ODQ2LCAgICAweDAwMDN9LCB7MHg4ODQ3LCAgICAweDAwZjZ9LAorezB4ODg0OCwgICAgMHgwMDhmfSwgezB4ODg0OSwgICAgMHgwMDdhfSwgezB4ODg0YSwgICAgMHgwMGJkfSwKK3sweDg4NGIsICAgIDB4MDA4OX0sIHsweDg4NGMsICAgIDB4MDA5NH0sIHsweDg4NGQsICAgIDB4MDBjZX0sCit7MHg4ODRlLCAgICAweDAwOGZ9LCB7MHg4ODRmLCAgICAweDAwNzB9LCB7MHg4ODUwLCAgICAweDAwYTZ9LAorezB4ODg1MSwgICAgMHgwMDAxfSwgezB4ODg1MiwgICAgMHgwMDgxfSwgezB4ODg1MywgICAgMHgwMDAxfSwKK3sweDg4NTQsICAgIDB4MDAyN30sIHsweDg4NTUsICAgIDB4MDAwN30sIHsweDg4NTYsICAgIDB4MDA4MX0sCit7MHg4ODU3LCAgICAweDAwMDN9LCB7MHg4ODU4LCAgICAweDAwMjd9LCB7MHg4ODU5LCAgICAweDAwMDN9LAorezB4ODg1YSwgICAgMHgwMDdlfSwgezB4ODg1YiwgICAgMHgwMDg4fSwgezB4ODg1YywgICAgMHgwMDY2fSwKK3sweDg4NWQsICAgIDB4MDBhNn0sIHsweDg4NWUsICAgIDB4MDAwMH0sIHsweDg4NWYsICAgIDB4MDBiOH0sCit7MHg4ODYwLCAgICAweDAwOGZ9LCB7MHg4ODYxLCAgICAweDAwODF9LCB7MHg4ODYyLCAgICAweDAwODR9LAorezB4ODg2MywgICAgMHgwMDAxfSwgezB4ODg2NCwgICAgMHgwMDI2fSwgezB4ODg2NSwgICAgMHgwMDBifSwKK3sweDg4NjYsICAgIDB4MDA4Y30sIHsweDg4NjcsICAgIDB4MDA4Zn0sIHsweDg4NjgsICAgIDB4MDA3OX0sCit7MHg4ODY5LCAgICAweDAwMmN9LCB7MHg4ODZhLCAgICAweDAwMGV9LCB7MHg4ODZiLCAgICAweDAwMDh9LAorezB4ODg2YywgICAgMHgwMDA4fSwgezB4ODg2ZCwgICAgMHgwMDA4fSwgezB4ODg2ZSwgICAgMHgwMDdlfSwKK3sweDg4NmYsICAgIDB4MDA4OH0sIHsweDg4NzAsICAgIDB4MDA1MH0sIHsweDg4NzEsICAgIDB4MDBiNn0sCit7MHg4ODcyLCAgICAweDAwMTJ9LCB7MHg4ODczLCAgICAweDAwMDR9LCB7MHg4ODc0LCAgICAweDAwOGF9LAorezB4ODg3NSwgICAgMHgwMDQwfSwgezB4ODg3NiwgICAgMHgwMGI3fSwgezB4ODg3NywgICAgMHgwMDEyfSwKK3sweDg4NzgsICAgIDB4MDAwNH0sIHsweDg4NzksICAgIDB4MDBiNn0sIHsweDg4N2EsICAgIDB4MDAxMn0sCit7MHg4ODdiLCAgICAweDAwMDR9LCB7MHg4ODdjLCAgICAweDAwODR9LCB7MHg4ODdkLCAgICAweDAwZmJ9LAorezB4ODg3ZSwgICAgMHgwMDg0fSwgezB4ODg3ZiwgICAgMHgwMGVmfSwgezB4ODg4MCwgICAgMHgwMGI3fSwKK3sweDg4ODEsICAgIDB4MDAxMn0sIHsweDg4ODIsICAgIDB4MDAwNH0sIHsweDg4ODMsICAgIDB4MDBiNn0sCit7MHg4ODg0LCAgICAweDAwMTJ9LCB7MHg4ODg1LCAgICAweDAwMDd9LCB7MHg4ODg2LCAgICAweDAwMzZ9LAorezB4ODg4NywgICAgMHgwMGI2fSwgezB4ODg4OCwgICAgMHgwMDhmfSwgezB4ODg4OSwgICAgMHgwMDdjfSwKK3sweDg4OGEsICAgIDB4MDA0OH0sIHsweDg4OGIsICAgIDB4MDA0OH0sIHsweDg4OGMsICAgIDB4MDBiN30sCit7MHg4ODhkLCAgICAweDAwMTJ9LCB7MHg4ODhlLCAgICAweDAwMDd9LCB7MHg4ODhmLCAgICAweDAwODZ9LAorezB4ODg5MCwgICAgMHgwMDAxfSwgezB4ODg5MSwgICAgMHgwMGJhfSwgezB4ODg5MiwgICAgMHgwMDEyfSwKK3sweDg4OTMsICAgIDB4MDAwNH0sIHsweDg4OTQsICAgIDB4MDBiN30sIHsweDg4OTUsICAgIDB4MDAxMn0sCit7MHg4ODk2LCAgICAweDAwMDR9LCB7MHg4ODk3LCAgICAweDAwMDF9LCB7MHg4ODk4LCAgICAweDAwMDF9LAorezB4ODg5OSwgICAgMHgwMDAxfSwgezB4ODg5YSwgICAgMHgwMDAxfSwgezB4ODg5YiwgICAgMHgwMDAxfSwKK3sweDg4OWMsICAgIDB4MDAwMX0sIHsweDg4OWQsICAgIDB4MDA4Nn0sIHsweDg4OWUsICAgIDB4MDBmZX0sCit7MHg4ODlmLCAgICAweDAwYjR9LCB7MHg4OGEwLCAgICAweDAwMTJ9LCB7MHg4OGExLCAgICAweDAwMDR9LAorezB4ODhhMiwgICAgMHgwMGI3fSwgezB4ODhhMywgICAgMHgwMDEyfSwgezB4ODhhNCwgICAgMHgwMDA0fSwKK3sweDg4YTUsICAgIDB4MDA4Nn0sIHsweDg4YTYsICAgIDB4MDAwMn0sIHsweDg4YTcsICAgIDB4MDBiYX0sCit7MHg4OGE4LCAgICAweDAwMTJ9LCB7MHg4OGE5LCAgICAweDAwMDR9LCB7MHg4OGFhLCAgICAweDAwYjd9LAorezB4ODhhYiwgICAgMHgwMDEyfSwgezB4ODhhYywgICAgMHgwMDA0fSwgezB4ODhhZCwgICAgMHgwMDg2fSwKK3sweDg4YWUsICAgIDB4MDBmZH0sIHsweDg4YWYsICAgIDB4MDBiNH0sIHsweDg4YjAsICAgIDB4MDAxMn0sCit7MHg4OGIxLCAgICAweDAwMDR9LCB7MHg4OGIyLCAgICAweDAwYjd9LCB7MHg4OGIzLCAgICAweDAwMTJ9LAorezB4ODhiNCwgICAgMHgwMDA0fSwgezB4ODhiNSwgICAgMHgwMDMyfSwgezB4ODhiNiwgICAgMHgwMGI3fSwKK3sweDg4YjcsICAgIDB4MDAxMn0sIHsweDg4YjgsICAgIDB4MDAwN30sIHsweDg4YjksICAgIDB4MDBiNn0sCit7MHg4OGJhLCAgICAweDAwMTJ9LCB7MHg4OGJiLCAgICAweDAwMDB9LCB7MHg4OGJjLCAgICAweDAwODR9LAorezB4ODhiZCwgICAgMHgwMDA4fSwgezB4ODhiZSwgICAgMHgwMDgxfSwgezB4ODhiZiwgICAgMHgwMDA4fSwKK3sweDg4YzAsICAgIDB4MDAyN30sIHsweDg4YzEsICAgIDB4MDAwZn0sIHsweDg4YzIsICAgIDB4MDA3Y30sCit7MHg4OGMzLCAgICAweDAwODJ9LCB7MHg4OGM0LCAgICAweDAwMDh9LCB7MHg4OGM1LCAgICAweDAwMjZ9LAorezB4ODhjNiwgICAgMHgwMDA3fSwgezB4ODhjNywgICAgMHgwMDg2fSwgezB4ODhjOCwgICAgMHgwMDc2fSwKK3sweDg4YzksICAgIDB4MDA5N30sIHsweDg4Y2EsICAgIDB4MDA0MH0sIHsweDg4Y2IsICAgIDB4MDA3ZX0sCit7MHg4OGNjLCAgICAweDAwODl9LCB7MHg4OGNkLCAgICAweDAwNmV9LCB7MHg4OGNlLCAgICAweDAwN2V9LAorezB4ODhjZiwgICAgMHgwMDg2fSwgezB4ODhkMCwgICAgMHgwMGVjfSwgezB4ODhkMSwgICAgMHgwMGI2fSwKK3sweDg4ZDIsICAgIDB4MDA4Zn0sIHsweDg4ZDMsICAgIDB4MDA3Zn0sIHsweDg4ZDQsICAgIDB4MDA4MX0sCit7MHg4OGQ1LCAgICAweDAwMGZ9LCB7MHg4OGQ2LCAgICAweDAwMjd9LCB7MHg4OGQ3LCAgICAweDAwM2N9LAorezB4ODhkOCwgICAgMHgwMGJkfSwgezB4ODhkOSwgICAgMHgwMGU2fSwgezB4ODhkYSwgICAgMHgwMGM3fSwKK3sweDg4ZGIsICAgIDB4MDBiN30sIHsweDg4ZGMsICAgIDB4MDAxMn0sIHsweDg4ZGQsICAgIDB4MDAwZH0sCit7MHg4OGRlLCAgICAweDAwYmR9LCB7MHg4OGRmLCAgICAweDAwZTZ9LCB7MHg4OGUwLCAgICAweDAwY2J9LAorezB4ODhlMSwgICAgMHgwMGI2fSwgezB4ODhlMiwgICAgMHgwMDEyfSwgezB4ODhlMywgICAgMHgwMDA0fSwKK3sweDg4ZTQsICAgIDB4MDA4YX0sIHsweDg4ZTUsICAgIDB4MDAyMH0sIHsweDg4ZTYsICAgIDB4MDBiN30sCit7MHg4OGU3LCAgICAweDAwMTJ9LCB7MHg4OGU4LCAgICAweDAwMDR9LCB7MHg4OGU5LCAgICAweDAwY2V9LAorezB4ODhlYSwgICAgMHgwMGZmfSwgezB4ODhlYiwgICAgMHgwMGZmfSwgezB4ODhlYywgICAgMHgwMGI2fSwKK3sweDg4ZWQsICAgIDB4MDAxMn0sIHsweDg4ZWUsICAgIDB4MDAwMH0sIHsweDg4ZWYsICAgIDB4MDA4MX0sCit7MHg4OGYwLCAgICAweDAwMGN9LCB7MHg4OGYxLCAgICAweDAwMjZ9LCB7MHg4OGYyLCAgICAweDAwMDV9LAorezB4ODhmMywgICAgMHgwMDA5fSwgezB4ODhmNCwgICAgMHgwMDI2fSwgezB4ODhmNSwgICAgMHgwMGY2fSwKK3sweDg4ZjYsICAgIDB4MDAyN30sIHsweDg4ZjcsICAgIDB4MDAxY30sIHsweDg4ZjgsICAgIDB4MDBiNn0sCit7MHg4OGY5LCAgICAweDAwMTJ9LCB7MHg4OGZhLCAgICAweDAwMDR9LCB7MHg4OGZiLCAgICAweDAwODR9LAorezB4ODhmYywgICAgMHgwMGRmfSwgezB4ODhmZCwgICAgMHgwMGI3fSwgezB4ODhmZSwgICAgMHgwMDEyfSwKK3sweDg4ZmYsICAgIDB4MDAwNH0sIHsweDg5MDAsICAgIDB4MDA5Nn0sIHsweDg5MDEsICAgIDB4MDA4M30sCit7MHg4OTAyLCAgICAweDAwODF9LCB7MHg4OTAzLCAgICAweDAwMDd9LCB7MHg4OTA0LCAgICAweDAwMmN9LAorezB4ODkwNSwgICAgMHgwMDA1fSwgezB4ODkwNiwgICAgMHgwMDdjfSwgezB4ODkwNywgICAgMHgwMDAwfSwKK3sweDg5MDgsICAgIDB4MDA4M30sIHsweDg5MDksICAgIDB4MDAyMH0sIHsweDg5MGEsICAgIDB4MDAwNn0sCit7MHg4OTBiLCAgICAweDAwOTZ9LCB7MHg4OTBjLCAgICAweDAwODN9LCB7MHg4OTBkLCAgICAweDAwOGJ9LAorezB4ODkwZSwgICAgMHgwMDA4fSwgezB4ODkwZiwgICAgMHgwMDk3fSwgezB4ODkxMCwgICAgMHgwMDgzfSwKK3sweDg5MTEsICAgIDB4MDA3ZX0sIHsweDg5MTIsICAgIDB4MDA4NX0sIHsweDg5MTMsICAgIDB4MDA0MX0sCit7MHg4OTE0LCAgICAweDAwN2Z9LCB7MHg4OTE1LCAgICAweDAwOGZ9LCB7MHg4OTE2LCAgICAweDAwN2V9LAorezB4ODkxNywgICAgMHgwMDg2fSwgezB4ODkxOCwgICAgMHgwMDgwfSwgezB4ODkxOSwgICAgMHgwMGI3fSwKK3sweDg5MWEsICAgIDB4MDAxMn0sIHsweDg5MWIsICAgIDB4MDAwY30sIHsweDg5MWMsICAgIDB4MDA4Nn0sCit7MHg4OTFkLCAgICAweDAwMDF9LCB7MHg4OTFlLCAgICAweDAwYjd9LCB7MHg4OTFmLCAgICAweDAwOGZ9LAorezB4ODkyMCwgICAgMHgwMDdkfSwgezB4ODkyMSwgICAgMHgwMGI2fSwgezB4ODkyMiwgICAgMHgwMDEyfSwKK3sweDg5MjMsICAgIDB4MDAwY30sIHsweDg5MjQsICAgIDB4MDA4NH0sIHsweDg5MjUsICAgIDB4MDA3Zn0sCit7MHg4OTI2LCAgICAweDAwYjd9LCB7MHg4OTI3LCAgICAweDAwMTJ9LCB7MHg4OTI4LCAgICAweDAwMGN9LAorezB4ODkyOSwgICAgMHgwMDhhfSwgezB4ODkyYSwgICAgMHgwMDgwfSwgezB4ODkyYiwgICAgMHgwMGI3fSwKK3sweDg5MmMsICAgIDB4MDAxMn0sIHsweDg5MmQsICAgIDB4MDAwY30sIHsweDg5MmUsICAgIDB4MDA4Nn0sCit7MHg4OTJmLCAgICAweDAwMGF9LCB7MHg4OTMwLCAgICAweDAwYmR9LCB7MHg4OTMxLCAgICAweDAwOGF9LAorezB4ODkzMiwgICAgMHgwMDA2fSwgezB4ODkzMywgICAgMHgwMGI2fSwgezB4ODkzNCwgICAgMHgwMDEyfSwKK3sweDg5MzUsICAgIDB4MDAwYX0sIHsweDg5MzYsICAgIDB4MDAyYX0sIHsweDg5MzcsICAgIDB4MDAwOX0sCit7MHg4OTM4LCAgICAweDAwYjZ9LCB7MHg4OTM5LCAgICAweDAwMTJ9LCB7MHg4OTNhLCAgICAweDAwMGN9LAorezB4ODkzYiwgICAgMHgwMGJhfSwgezB4ODkzYywgICAgMHgwMDhmfSwgezB4ODkzZCwgICAgMHgwMDdkfSwKK3sweDg5M2UsICAgIDB4MDBiN30sIHsweDg5M2YsICAgIDB4MDAxMn0sIHsweDg5NDAsICAgIDB4MDAwY30sCit7MHg4OTQxLCAgICAweDAwYjZ9LCB7MHg4OTQyLCAgICAweDAwOGZ9LCB7MHg4OTQzLCAgICAweDAwN2V9LAorezB4ODk0NCwgICAgMHgwMDgxfSwgezB4ODk0NSwgICAgMHgwMDYwfSwgezB4ODk0NiwgICAgMHgwMDI3fSwKK3sweDg5NDcsICAgIDB4MDAxYX0sIHsweDg5NDgsICAgIDB4MDA4Yn0sIHsweDg5NDksICAgIDB4MDAyMH0sCit7MHg4OTRhLCAgICAweDAwYjd9LCB7MHg4OTRiLCAgICAweDAwOGZ9LCB7MHg4OTRjLCAgICAweDAwN2V9LAorezB4ODk0ZCwgICAgMHgwMGI2fSwgezB4ODk0ZSwgICAgMHgwMDEyfSwgezB4ODk0ZiwgICAgMHgwMDBjfSwKK3sweDg5NTAsICAgIDB4MDA4NH0sIHsweDg5NTEsICAgIDB4MDA5Zn0sIHsweDg5NTIsICAgIDB4MDBiYX0sCit7MHg4OTUzLCAgICAweDAwOGZ9LCB7MHg4OTU0LCAgICAweDAwN2V9LCB7MHg4OTU1LCAgICAweDAwYjd9LAorezB4ODk1NiwgICAgMHgwMDEyfSwgezB4ODk1NywgICAgMHgwMDBjfSwgezB4ODk1OCwgICAgMHgwMGI2fSwKK3sweDg5NTksICAgIDB4MDA4Zn0sIHsweDg5NWEsICAgIDB4MDA3ZH0sIHsweDg5NWIsICAgIDB4MDA0OH0sCit7MHg4OTVjLCAgICAweDAwYjd9LCB7MHg4OTVkLCAgICAweDAwOGZ9LCB7MHg4OTVlLCAgICAweDAwN2R9LAorezB4ODk1ZiwgICAgMHgwMDdlfSwgezB4ODk2MCwgICAgMHgwMDg5fSwgezB4ODk2MSwgICAgMHgwMDIxfSwKK3sweDg5NjIsICAgIDB4MDBiNn0sIHsweDg5NjMsICAgIDB4MDAxMn0sIHsweDg5NjQsICAgIDB4MDAwNH0sCit7MHg4OTY1LCAgICAweDAwOGF9LCB7MHg4OTY2LCAgICAweDAwMjB9LCB7MHg4OTY3LCAgICAweDAwYjd9LAorezB4ODk2OCwgICAgMHgwMDEyfSwgezB4ODk2OSwgICAgMHgwMDA0fSwgezB4ODk2YSwgICAgMHgwMGJkfSwKK3sweDg5NmIsICAgIDB4MDA4YX0sIHsweDg5NmMsICAgIDB4MDAwYX0sIHsweDg5NmQsICAgIDB4MDA0Zn0sCit7MHg4OTZlLCAgICAweDAwMzl9LCB7MHg4OTZmLCAgICAweDAwYTZ9LCB7MHg4OTcwLCAgICAweDAwMDB9LAorezB4ODk3MSwgICAgMHgwMDE4fSwgezB4ODk3MiwgICAgMHgwMGE3fSwgezB4ODk3MywgICAgMHgwMDAwfSwKK3sweDg5NzQsICAgIDB4MDAwOH0sIHsweDg5NzUsICAgIDB4MDAxOH0sIHsweDg5NzYsICAgIDB4MDAwOH0sCit7MHg4OTc3LCAgICAweDAwNWF9LCB7MHg4OTc4LCAgICAweDAwMjZ9LCB7MHg4OTc5LCAgICAweDAwZjV9LAorezB4ODk3YSwgICAgMHgwMDM5fSwgezB4ODk3YiwgICAgMHgwMDM2fSwgezB4ODk3YywgICAgMHgwMDZjfSwKK3sweDg5N2QsICAgIDB4MDAwMH0sIHsweDg5N2UsICAgIDB4MDAzMn0sIHsweDg5N2YsICAgIDB4MDBiYX0sCit7MHg4OTgwLCAgICAweDAwOGZ9LCB7MHg4OTgxLCAgICAweDAwN2Z9LCB7MHg4OTgyLCAgICAweDAwYjd9LAorezB4ODk4MywgICAgMHgwMDhmfSwgezB4ODk4NCwgICAgMHgwMDdmfSwgezB4ODk4NSwgICAgMHgwMGI2fSwKK3sweDg5ODYsICAgIDB4MDAxMn0sIHsweDg5ODcsICAgIDB4MDAwOX0sIHsweDg5ODgsICAgIDB4MDA4NH0sCit7MHg4OTg5LCAgICAweDAwMDN9LCB7MHg4OThhLCAgICAweDAwYTd9LCB7MHg4OThiLCAgICAweDAwMDF9LAorezB4ODk4YywgICAgMHgwMGI2fSwgezB4ODk4ZCwgICAgMHgwMDEyfSwgezB4ODk4ZSwgICAgMHgwMDA2fSwKK3sweDg5OGYsICAgIDB4MDA4NH0sIHsweDg5OTAsICAgIDB4MDAzZn0sIHsweDg5OTEsICAgIDB4MDBhN30sCit7MHg4OTkyLCAgICAweDAwMDJ9LCB7MHg4OTkzLCAgICAweDAwMzl9LCB7MHg4OTk0LCAgICAweDAwMzZ9LAorezB4ODk5NSwgICAgMHgwMDg2fSwgezB4ODk5NiwgICAgMHgwMDAzfSwgezB4ODk5NywgICAgMHgwMGI3fSwKK3sweDg5OTgsICAgIDB4MDA4Zn0sIHsweDg5OTksICAgIDB4MDA4MH0sIHsweDg5OWEsICAgIDB4MDAzMn0sCit7MHg4OTliLCAgICAweDAwYzF9LCB7MHg4OTljLCAgICAweDAwMDB9LCB7MHg4OTlkLCAgICAweDAwMjZ9LAorezB4ODk5ZSwgICAgMHgwMDA2fSwgezB4ODk5ZiwgICAgMHgwMGI3fSwgezB4ODlhMCwgICAgMHgwMDhmfSwKK3sweDg5YTEsICAgIDB4MDA3Y30sIHsweDg5YTIsICAgIDB4MDA3ZX0sIHsweDg5YTMsICAgIDB4MDA4OX0sCit7MHg4OWE0LCAgICAweDAwYzl9LCB7MHg4OWE1LCAgICAweDAwYzF9LCB7MHg4OWE2LCAgICAweDAwMDF9LAorezB4ODlhNywgICAgMHgwMDI3fSwgezB4ODlhOCwgICAgMHgwMDE4fSwgezB4ODlhOSwgICAgMHgwMGMxfSwKK3sweDg5YWEsICAgIDB4MDAwMn0sIHsweDg5YWIsICAgIDB4MDAyN30sIHsweDg5YWMsICAgIDB4MDAwY30sCit7MHg4OWFkLCAgICAweDAwYzF9LCB7MHg4OWFlLCAgICAweDAwMDN9LCB7MHg4OWFmLCAgICAweDAwMjd9LAorezB4ODliMCwgICAgMHgwMDAwfSwgezB4ODliMSwgICAgMHgwMGY2fSwgezB4ODliMiwgICAgMHgwMDhmfSwKK3sweDg5YjMsICAgIDB4MDA4MH0sIHsweDg5YjQsICAgIDB4MDAwNX0sIHsweDg5YjUsICAgIDB4MDAwNX0sCit7MHg4OWI2LCAgICAweDAwZjd9LCB7MHg4OWI3LCAgICAweDAwOGZ9LCB7MHg4OWI4LCAgICAweDAwODB9LAorezB4ODliOSwgICAgMHgwMGY2fSwgezB4ODliYSwgICAgMHgwMDhmfSwgezB4ODliYiwgICAgMHgwMDgwfSwKK3sweDg5YmMsICAgIDB4MDAwNX0sIHsweDg5YmQsICAgIDB4MDAwNX0sIHsweDg5YmUsICAgIDB4MDBmN30sCit7MHg4OWJmLCAgICAweDAwOGZ9LCB7MHg4OWMwLCAgICAweDAwODB9LCB7MHg4OWMxLCAgICAweDAwZjZ9LAorezB4ODljMiwgICAgMHgwMDhmfSwgezB4ODljMywgICAgMHgwMDgwfSwgezB4ODljNCwgICAgMHgwMDA1fSwKK3sweDg5YzUsICAgIDB4MDAwNX0sIHsweDg5YzYsICAgIDB4MDBmN30sIHsweDg5YzcsICAgIDB4MDA4Zn0sCit7MHg4OWM4LCAgICAweDAwODB9LCB7MHg4OWM5LCAgICAweDAwZjZ9LCB7MHg4OWNhLCAgICAweDAwOGZ9LAorezB4ODljYiwgICAgMHgwMDgwfSwgezB4ODljYywgICAgMHgwMDUzfSwgezB4ODljZCwgICAgMHgwMGY0fSwKK3sweDg5Y2UsICAgIDB4MDAxMn0sIHsweDg5Y2YsICAgIDB4MDAwN30sIHsweDg5ZDAsICAgIDB4MDAxYn0sCit7MHg4OWQxLCAgICAweDAwYjd9LCB7MHg4OWQyLCAgICAweDAwMTJ9LCB7MHg4OWQzLCAgICAweDAwMDd9LAorezB4ODlkNCwgICAgMHgwMDM5fSwgezB4ODlkNSwgICAgMHgwMGNlfSwgezB4ODlkNiwgICAgMHgwMDhmfSwKK3sweDg5ZDcsICAgIDB4MDA3MH0sIHsweDg5ZDgsICAgIDB4MDBhNn0sIHsweDg5ZDksICAgIDB4MDAwMH0sCit7MHg4OWRhLCAgICAweDAwMTh9LCB7MHg4OWRiLCAgICAweDAwZTZ9LCB7MHg4OWRjLCAgICAweDAwMDB9LAorezB4ODlkZCwgICAgMHgwMDE4fSwgezB4ODlkZSwgICAgMHgwMGE3fSwgezB4ODlkZiwgICAgMHgwMDAwfSwKK3sweDg5ZTAsICAgIDB4MDBlN30sIHsweDg5ZTEsICAgIDB4MDAwMH0sIHsweDg5ZTIsICAgIDB4MDBhNn0sCit7MHg4OWUzLCAgICAweDAwMDF9LCB7MHg4OWU0LCAgICAweDAwMTh9LCB7MHg4OWU1LCAgICAweDAwZTZ9LAorezB4ODllNiwgICAgMHgwMDAxfSwgezB4ODllNywgICAgMHgwMDE4fSwgezB4ODllOCwgICAgMHgwMGE3fSwKK3sweDg5ZTksICAgIDB4MDAwMX0sIHsweDg5ZWEsICAgIDB4MDBlN30sIHsweDg5ZWIsICAgIDB4MDAwMX0sCit7MHg4OWVjLCAgICAweDAwYTZ9LCB7MHg4OWVkLCAgICAweDAwMDJ9LCB7MHg4OWVlLCAgICAweDAwMTh9LAorezB4ODllZiwgICAgMHgwMGU2fSwgezB4ODlmMCwgICAgMHgwMDAyfSwgezB4ODlmMSwgICAgMHgwMDE4fSwKK3sweDg5ZjIsICAgIDB4MDBhN30sIHsweDg5ZjMsICAgIDB4MDAwMn0sIHsweDg5ZjQsICAgIDB4MDBlN30sCit7MHg4OWY1LCAgICAweDAwMDJ9LCB7MHg4OWY2LCAgICAweDAwMzl9LCB7MHg4OWY3LCAgICAweDAwYTZ9LAorezB4ODlmOCwgICAgMHgwMDAwfSwgezB4ODlmOSwgICAgMHgwMDg0fSwgezB4ODlmYSwgICAgMHgwMDA3fSwKK3sweDg5ZmIsICAgIDB4MDBlNn0sIHsweDg5ZmMsICAgIDB4MDAwMH0sIHsweDg5ZmQsICAgIDB4MDBjNH0sCit7MHg4OWZlLCAgICAweDAwMzh9LCB7MHg4OWZmLCAgICAweDAwNTR9LCB7MHg4YTAwLCAgICAweDAwNTR9LAorezB4OGEwMSwgICAgMHgwMDU0fSwgezB4OGEwMiwgICAgMHgwMDFifSwgezB4OGEwMywgICAgMHgwMGE3fSwKK3sweDhhMDQsICAgIDB4MDAwMH0sIHsweDhhMDUsICAgIDB4MDAzOX0sIHsweDhhMDYsICAgIDB4MDA0YX0sCit7MHg4YTA3LCAgICAweDAwMjZ9LCB7MHg4YTA4LCAgICAweDAwZmR9LCB7MHg4YTA5LCAgICAweDAwMzl9LAorezB4OGEwYSwgICAgMHgwMDk2fSwgezB4OGEwYiwgICAgMHgwMDIyfSwgezB4OGEwYywgICAgMHgwMDg0fSwKK3sweDhhMGQsICAgIDB4MDAwZn0sIHsweDhhMGUsICAgIDB4MDA5N30sIHsweDhhMGYsICAgIDB4MDAyMn0sCit7MHg4YTEwLCAgICAweDAwODZ9LCB7MHg4YTExLCAgICAweDAwMDF9LCB7MHg4YTEyLCAgICAweDAwYjd9LAorezB4OGExMywgICAgMHgwMDhmfSwgezB4OGExNCwgICAgMHgwMDcwfSwgezB4OGExNSwgICAgMHgwMGI2fSwKK3sweDhhMTYsICAgIDB4MDAxMn0sIHsweDhhMTcsICAgIDB4MDAwN30sIHsweDhhMTgsICAgIDB4MDBiN30sCit7MHg4YTE5LCAgICAweDAwOGZ9LCB7MHg4YTFhLCAgICAweDAwNzF9LCB7MHg4YTFiLCAgICAweDAwZjZ9LAorezB4OGExYywgICAgMHgwMDEyfSwgezB4OGExZCwgICAgMHgwMDBjfSwgezB4OGExZSwgICAgMHgwMGM0fSwKK3sweDhhMWYsICAgIDB4MDAwZn0sIHsweDhhMjAsICAgIDB4MDBjOH0sIHsweDhhMjEsICAgIDB4MDAwZn0sCit7MHg4YTIyLCAgICAweDAwZjd9LCB7MHg4YTIzLCAgICAweDAwOGZ9LCB7MHg4YTI0LCAgICAweDAwNzJ9LAorezB4OGEyNSwgICAgMHgwMGY2fSwgezB4OGEyNiwgICAgMHgwMDhmfSwgezB4OGEyNywgICAgMHgwMDcyfSwKK3sweDhhMjgsICAgIDB4MDBiNn0sIHsweDhhMjksICAgIDB4MDA4Zn0sIHsweDhhMmEsICAgIDB4MDA3MX0sCit7MHg4YTJiLCAgICAweDAwODR9LCB7MHg4YTJjLCAgICAweDAwMDN9LCB7MHg4YTJkLCAgICAweDAwMjd9LAorezB4OGEyZSwgICAgMHgwMDE0fSwgezB4OGEyZiwgICAgMHgwMDgxfSwgezB4OGEzMCwgICAgMHgwMDAxfSwKK3sweDhhMzEsICAgIDB4MDAyN30sIHsweDhhMzIsICAgIDB4MDAxY30sIHsweDhhMzMsICAgIDB4MDA4MX0sCit7MHg4YTM0LCAgICAweDAwMDJ9LCB7MHg4YTM1LCAgICAweDAwMjd9LCB7MHg4YTM2LCAgICAweDAwMjR9LAorezB4OGEzNywgICAgMHgwMGY0fSwgezB4OGEzOCwgICAgMHgwMDhmfSwgezB4OGEzOSwgICAgMHgwMDcwfSwKK3sweDhhM2EsICAgIDB4MDAyN30sIHsweDhhM2IsICAgIDB4MDAyYX0sIHsweDhhM2MsICAgIDB4MDA5Nn0sCit7MHg4YTNkLCAgICAweDAwMjJ9LCB7MHg4YTNlLCAgICAweDAwOGF9LCB7MHg4YTNmLCAgICAweDAwODB9LAorezB4OGE0MCwgICAgMHgwMDdlfSwgezB4OGE0MSwgICAgMHgwMDhhfSwgezB4OGE0MiwgICAgMHgwMDY0fSwKK3sweDhhNDMsICAgIDB4MDBmNH0sIHsweDhhNDQsICAgIDB4MDA4Zn0sIHsweDhhNDUsICAgIDB4MDA3MH0sCit7MHg4YTQ2LCAgICAweDAwMjd9LCB7MHg4YTQ3LCAgICAweDAwMWV9LCB7MHg4YTQ4LCAgICAweDAwOTZ9LAorezB4OGE0OSwgICAgMHgwMDIyfSwgezB4OGE0YSwgICAgMHgwMDhhfSwgezB4OGE0YiwgICAgMHgwMDEwfSwKK3sweDhhNGMsICAgIDB4MDA3ZX0sIHsweDhhNGQsICAgIDB4MDA4YX0sIHsweDhhNGUsICAgIDB4MDA2NH0sCit7MHg4YTRmLCAgICAweDAwZjR9LCB7MHg4YTUwLCAgICAweDAwOGZ9LCB7MHg4YTUxLCAgICAweDAwNzB9LAorezB4OGE1MiwgICAgMHgwMDI3fSwgezB4OGE1MywgICAgMHgwMDEyfSwgezB4OGE1NCwgICAgMHgwMDk2fSwKK3sweDhhNTUsICAgIDB4MDAyMn0sIHsweDhhNTYsICAgIDB4MDA4YX0sIHsweDhhNTcsICAgIDB4MDAyMH0sCit7MHg4YTU4LCAgICAweDAwN2V9LCB7MHg4YTU5LCAgICAweDAwOGF9LCB7MHg4YTVhLCAgICAweDAwNjR9LAorezB4OGE1YiwgICAgMHgwMGY0fSwgezB4OGE1YywgICAgMHgwMDhmfSwgezB4OGE1ZCwgICAgMHgwMDcwfSwKK3sweDhhNWUsICAgIDB4MDAyN30sIHsweDhhNWYsICAgIDB4MDAwNn0sIHsweDhhNjAsICAgIDB4MDA5Nn0sCit7MHg4YTYxLCAgICAweDAwMjJ9LCB7MHg4YTYyLCAgICAweDAwOGF9LCB7MHg4YTYzLCAgICAweDAwNDB9LAorezB4OGE2NCwgICAgMHgwMDk3fSwgezB4OGE2NSwgICAgMHgwMDIyfSwgezB4OGE2NiwgICAgMHgwMDc0fSwKK3sweDhhNjcsICAgIDB4MDA4Zn0sIHsweDhhNjgsICAgIDB4MDA3MX0sIHsweDhhNjksICAgIDB4MDA3NH0sCit7MHg4YTZhLCAgICAweDAwOGZ9LCB7MHg4YTZiLCAgICAweDAwNzF9LCB7MHg4YTZjLCAgICAweDAwNzh9LAorezB4OGE2ZCwgICAgMHgwMDhmfSwgezB4OGE2ZSwgICAgMHgwMDcwfSwgezB4OGE2ZiwgICAgMHgwMGI2fSwKK3sweDhhNzAsICAgIDB4MDA4Zn0sIHsweDhhNzEsICAgIDB4MDA3MH0sIHsweDhhNzIsICAgIDB4MDA4NX0sCit7MHg4YTczLCAgICAweDAwMTB9LCB7MHg4YTc0LCAgICAweDAwMjd9LCB7MHg4YTc1LCAgICAweDAwYWZ9LAorezB4OGE3NiwgICAgMHgwMGQ2fSwgezB4OGE3NywgICAgMHgwMDIyfSwgezB4OGE3OCwgICAgMHgwMGM0fSwKK3sweDhhNzksICAgIDB4MDAxMH0sIHsweDhhN2EsICAgIDB4MDA1OH0sIHsweDhhN2IsICAgIDB4MDBiNn0sCit7MHg4YTdjLCAgICAweDAwMTJ9LCB7MHg4YTdkLCAgICAweDAwNzB9LCB7MHg4YTdlLCAgICAweDAwODF9LAorezB4OGE3ZiwgICAgMHgwMGU0fSwgezB4OGE4MCwgICAgMHgwMDI3fSwgezB4OGE4MSwgICAgMHgwMDM2fSwKK3sweDhhODIsICAgIDB4MDA4MX0sIHsweDhhODMsICAgIDB4MDBlMX0sIHsweDhhODQsICAgIDB4MDAyNn0sCit7MHg4YTg1LCAgICAweDAwMGN9LCB7MHg4YTg2LCAgICAweDAwOTZ9LCB7MHg4YTg3LCAgICAweDAwMjJ9LAorezB4OGE4OCwgICAgMHgwMDg0fSwgezB4OGE4OSwgICAgMHgwMDIwfSwgezB4OGE4YSwgICAgMHgwMDQ0fSwKK3sweDhhOGIsICAgIDB4MDAxYn0sIHsweDhhOGMsICAgIDB4MDBkNn0sIHsweDhhOGQsICAgIDB4MDAyMn0sCit7MHg4YThlLCAgICAweDAwYzR9LCB7MHg4YThmLCAgICAweDAwY2Z9LCB7MHg4YTkwLCAgICAweDAwMjB9LAorezB4OGE5MSwgICAgMHgwMDIzfSwgezB4OGE5MiwgICAgMHgwMDU4fSwgezB4OGE5MywgICAgMHgwMDgxfSwKK3sweDhhOTQsICAgIDB4MDBjNn0sIHsweDhhOTUsICAgIDB4MDAyNn0sIHsweDhhOTYsICAgIDB4MDAwZH0sCit7MHg4YTk3LCAgICAweDAwOTZ9LCB7MHg4YTk4LCAgICAweDAwMjJ9LCB7MHg4YTk5LCAgICAweDAwODR9LAorezB4OGE5YSwgICAgMHgwMDQwfSwgezB4OGE5YiwgICAgMHgwMDQ0fSwgezB4OGE5YywgICAgMHgwMDQ0fSwKK3sweDhhOWQsICAgIDB4MDAxYn0sIHsweDhhOWUsICAgIDB4MDBkNn0sIHsweDhhOWYsICAgIDB4MDAyMn0sCit7MHg4YWEwLCAgICAweDAwYzR9LCB7MHg4YWExLCAgICAweDAwYWZ9LCB7MHg4YWEyLCAgICAweDAwMjB9LAorezB4OGFhMywgICAgMHgwMDExfSwgezB4OGFhNCwgICAgMHgwMDU4fSwgezB4OGFhNSwgICAgMHgwMDgxfSwKK3sweDhhYTYsICAgIDB4MDAyN30sIHsweDhhYTcsICAgIDB4MDAyNn0sIHsweDhhYTgsICAgIDB4MDAwZn0sCit7MHg4YWE5LCAgICAweDAwOTZ9LCB7MHg4YWFhLCAgICAweDAwMjJ9LCB7MHg4YWFiLCAgICAweDAwODR9LAorezB4OGFhYywgICAgMHgwMDgwfSwgezB4OGFhZCwgICAgMHgwMDQ0fSwgezB4OGFhZSwgICAgMHgwMDQ0fSwKK3sweDhhYWYsICAgIDB4MDA0NH0sIHsweDhhYjAsICAgIDB4MDAxYn0sIHsweDhhYjEsICAgIDB4MDBkNn0sCit7MHg4YWIyLCAgICAweDAwMjJ9LCB7MHg4YWIzLCAgICAweDAwYzR9LCB7MHg4YWI0LCAgICAweDAwNmZ9LAorezB4OGFiNSwgICAgMHgwMDFifSwgezB4OGFiNiwgICAgMHgwMDk3fSwgezB4OGFiNywgICAgMHgwMDIyfSwKK3sweDhhYjgsICAgIDB4MDAzOX0sIHsweDhhYjksICAgIDB4MDAyN30sIHsweDhhYmEsICAgIDB4MDAwY30sCit7MHg4YWJiLCAgICAweDAwN2N9LCB7MHg4YWJjLCAgICAweDAwODJ9LCB7MHg4YWJkLCAgICAweDAwMDZ9LAorezB4OGFiZSwgICAgMHgwMGJkfSwgezB4OGFiZiwgICAgMHgwMGQ5fSwgezB4OGFjMCwgICAgMHgwMGVkfSwKK3sweDhhYzEsICAgIDB4MDBiNn0sIHsweDhhYzIsICAgIDB4MDA4Mn0sIHsweDhhYzMsICAgIDB4MDAwN30sCit7MHg4YWM0LCAgICAweDAwN2V9LCB7MHg4YWM1LCAgICAweDAwOGF9LCB7MHg4YWM2LCAgICAweDAwYjl9LAorezB4OGFjNywgICAgMHgwMDdmfSwgezB4OGFjOCwgICAgMHgwMDgyfSwgezB4OGFjOSwgICAgMHgwMDA2fSwKK3sweDhhY2EsICAgIDB4MDAzOX0sIHsgMHgwLCAweDAgfQorfTsKKyNlbHNlCitjYXNfc2F0dXJuX3BhdGNoX3QgY2FzX3NhdHVybl9wYXRjaFtdID0geworezB4ODIwMCwgICAgMHgwMDdlfSwgezB4ODIwMSwgICAgMHgwMDgyfSwgezB4ODIwMiwgICAgMHgwMDA5fSwKK3sweDgyMDMsICAgIDB4MDAwMH0sIHsweDgyMDQsICAgIDB4MDAwMH0sIHsweDgyMDUsICAgIDB4MDAwMH0sCit7MHg4MjA2LCAgICAweDAwMDB9LCB7MHg4MjA3LCAgICAweDAwMDB9LCB7MHg4MjA4LCAgICAweDAwMDB9LAorezB4ODIwOSwgICAgMHgwMDhlfSwgezB4ODIwYSwgICAgMHgwMDhlfSwgezB4ODIwYiwgICAgMHgwMGZmfSwKK3sweDgyMGMsICAgIDB4MDBjZX0sIHsweDgyMGQsICAgIDB4MDA4Mn0sIHsweDgyMGUsICAgIDB4MDAyNX0sCit7MHg4MjBmLCAgICAweDAwZmZ9LCB7MHg4MjEwLCAgICAweDAwMDF9LCB7MHg4MjExLCAgICAweDAwMGZ9LAorezB4ODIxMiwgICAgMHgwMGNlfSwgezB4ODIxMywgICAgMHgwMDg0fSwgezB4ODIxNCwgICAgMHgwMDI2fSwKK3sweDgyMTUsICAgIDB4MDBmZn0sIHsweDgyMTYsICAgIDB4MDAwMX0sIHsweDgyMTcsICAgIDB4MDAxMX0sCit7MHg4MjE4LCAgICAweDAwY2V9LCB7MHg4MjE5LCAgICAweDAwODV9LCB7MHg4MjFhLCAgICAweDAwM2R9LAorezB4ODIxYiwgICAgMHgwMGRmfSwgezB4ODIxYywgICAgMHgwMGU1fSwgezB4ODIxZCwgICAgMHgwMDg2fSwKK3sweDgyMWUsICAgIDB4MDAzOX0sIHsweDgyMWYsICAgIDB4MDBiN30sIHsweDgyMjAsICAgIDB4MDA4Zn0sCit7MHg4MjIxLCAgICAweDAwZjh9LCB7MHg4MjIyLCAgICAweDAwN2V9LCB7MHg4MjIzLCAgICAweDAwYzN9LAorezB4ODIyNCwgICAgMHgwMGMyfSwgezB4ODIyNSwgICAgMHgwMDk2fSwgezB4ODIyNiwgICAgMHgwMDQ3fSwKK3sweDgyMjcsICAgIDB4MDA4NH0sIHsweDgyMjgsICAgIDB4MDBmM30sIHsweDgyMjksICAgIDB4MDA4YX0sCit7MHg4MjJhLCAgICAweDAwMDB9LCB7MHg4MjJiLCAgICAweDAwOTd9LCB7MHg4MjJjLCAgICAweDAwNDd9LAorezB4ODIyZCwgICAgMHgwMGNlfSwgezB4ODIyZSwgICAgMHgwMDgyfSwgezB4ODIyZiwgICAgMHgwMDMzfSwKK3sweDgyMzAsICAgIDB4MDBmZn0sIHsweDgyMzEsICAgIDB4MDAwMX0sIHsweDgyMzIsICAgIDB4MDAwZn0sCit7MHg4MjMzLCAgICAweDAwOTZ9LCB7MHg4MjM0LCAgICAweDAwNDZ9LCB7MHg4MjM1LCAgICAweDAwODR9LAorezB4ODIzNiwgICAgMHgwMDBjfSwgezB4ODIzNywgICAgMHgwMDgxfSwgezB4ODIzOCwgICAgMHgwMDA0fSwKK3sweDgyMzksICAgIDB4MDAyN30sIHsweDgyM2EsICAgIDB4MDAwYn0sIHsweDgyM2IsICAgIDB4MDA5Nn0sCit7MHg4MjNjLCAgICAweDAwNDZ9LCB7MHg4MjNkLCAgICAweDAwODR9LCB7MHg4MjNlLCAgICAweDAwMGN9LAorezB4ODIzZiwgICAgMHgwMDgxfSwgezB4ODI0MCwgICAgMHgwMDA4fSwgezB4ODI0MSwgICAgMHgwMDI3fSwKK3sweDgyNDIsICAgIDB4MDA1N30sIHsweDgyNDMsICAgIDB4MDA3ZX0sIHsweDgyNDQsICAgIDB4MDA4NH0sCit7MHg4MjQ1LCAgICAweDAwMjV9LCB7MHg4MjQ2LCAgICAweDAwOTZ9LCB7MHg4MjQ3LCAgICAweDAwNDd9LAorezB4ODI0OCwgICAgMHgwMDg0fSwgezB4ODI0OSwgICAgMHgwMGYzfSwgezB4ODI0YSwgICAgMHgwMDhhfSwKK3sweDgyNGIsICAgIDB4MDAwNH0sIHsweDgyNGMsICAgIDB4MDA5N30sIHsweDgyNGQsICAgIDB4MDA0N30sCit7MHg4MjRlLCAgICAweDAwY2V9LCB7MHg4MjRmLCAgICAweDAwODJ9LCB7MHg4MjUwLCAgICAweDAwNTR9LAorezB4ODI1MSwgICAgMHgwMGZmfSwgezB4ODI1MiwgICAgMHgwMDAxfSwgezB4ODI1MywgICAgMHgwMDBmfSwKK3sweDgyNTQsICAgIDB4MDA5Nn0sIHsweDgyNTUsICAgIDB4MDA0Nn0sIHsweDgyNTYsICAgIDB4MDA4NH0sCit7MHg4MjU3LCAgICAweDAwMGN9LCB7MHg4MjU4LCAgICAweDAwODF9LCB7MHg4MjU5LCAgICAweDAwMDR9LAorezB4ODI1YSwgICAgMHgwMDI2fSwgezB4ODI1YiwgICAgMHgwMDM4fSwgezB4ODI1YywgICAgMHgwMGI2fSwKK3sweDgyNWQsICAgIDB4MDAxMn0sIHsweDgyNWUsICAgIDB4MDAyMH0sIHsweDgyNWYsICAgIDB4MDA4NH0sCit7MHg4MjYwLCAgICAweDAwMjB9LCB7MHg4MjYxLCAgICAweDAwMjZ9LCB7MHg4MjYyLCAgICAweDAwMDN9LAorezB4ODI2MywgICAgMHgwMDdlfSwgezB4ODI2NCwgICAgMHgwMDg0fSwgezB4ODI2NSwgICAgMHgwMDI1fSwKK3sweDgyNjYsICAgIDB4MDA5Nn0sIHsweDgyNjcsICAgIDB4MDA3Yn0sIHsweDgyNjgsICAgIDB4MDBkNn0sCit7MHg4MjY5LCAgICAweDAwN2N9LCB7MHg4MjZhLCAgICAweDAwZmV9LCB7MHg4MjZiLCAgICAweDAwOGZ9LAorezB4ODI2YywgICAgMHgwMDU2fSwgezB4ODI2ZCwgICAgMHgwMGJkfSwgezB4ODI2ZSwgICAgMHgwMGY3fSwKK3sweDgyNmYsICAgIDB4MDBiNn0sIHsweDgyNzAsICAgIDB4MDBmZX0sIHsweDgyNzEsICAgIDB4MDA4Zn0sCit7MHg4MjcyLCAgICAweDAwNGV9LCB7MHg4MjczLCAgICAweDAwYmR9LCB7MHg4Mjc0LCAgICAweDAwZWN9LAorezB4ODI3NSwgICAgMHgwMDhlfSwgezB4ODI3NiwgICAgMHgwMGJkfSwgezB4ODI3NywgICAgMHgwMGZhfSwKK3sweDgyNzgsICAgIDB4MDBmN30sIHsweDgyNzksICAgIDB4MDBiZH0sIHsweDgyN2EsICAgIDB4MDBmN30sCit7MHg4MjdiLCAgICAweDAwMjh9LCB7MHg4MjdjLCAgICAweDAwY2V9LCB7MHg4MjdkLCAgICAweDAwODJ9LAorezB4ODI3ZSwgICAgMHgwMDgyfSwgezB4ODI3ZiwgICAgMHgwMGZmfSwgezB4ODI4MCwgICAgMHgwMDAxfSwKK3sweDgyODEsICAgIDB4MDAwZn0sIHsweDgyODIsICAgIDB4MDA5Nn0sIHsweDgyODMsICAgIDB4MDA0Nn0sCit7MHg4Mjg0LCAgICAweDAwODR9LCB7MHg4Mjg1LCAgICAweDAwMGN9LCB7MHg4Mjg2LCAgICAweDAwODF9LAorezB4ODI4NywgICAgMHgwMDA0fSwgezB4ODI4OCwgICAgMHgwMDI2fSwgezB4ODI4OSwgICAgMHgwMDBhfSwKK3sweDgyOGEsICAgIDB4MDBiNn0sIHsweDgyOGIsICAgIDB4MDAxMn0sIHsweDgyOGMsICAgIDB4MDAyMH0sCit7MHg4MjhkLCAgICAweDAwODR9LCB7MHg4MjhlLCAgICAweDAwMjB9LCB7MHg4MjhmLCAgICAweDAwMjd9LAorezB4ODI5MCwgICAgMHgwMGI1fSwgezB4ODI5MSwgICAgMHgwMDdlfSwgezB4ODI5MiwgICAgMHgwMDg0fSwKK3sweDgyOTMsICAgIDB4MDAyNX0sIHsweDgyOTQsICAgIDB4MDBiZH0sIHsweDgyOTUsICAgIDB4MDBmN30sCit7MHg4Mjk2LCAgICAweDAwMWZ9LCB7MHg4Mjk3LCAgICAweDAwN2V9LCB7MHg4Mjk4LCAgICAweDAwODR9LAorezB4ODI5OSwgICAgMHgwMDFmfSwgezB4ODI5YSwgICAgMHgwMDk2fSwgezB4ODI5YiwgICAgMHgwMDQ3fSwKK3sweDgyOWMsICAgIDB4MDA4NH0sIHsweDgyOWQsICAgIDB4MDBmM30sIHsweDgyOWUsICAgIDB4MDA4YX0sCit7MHg4MjlmLCAgICAweDAwMDh9LCB7MHg4MmEwLCAgICAweDAwOTd9LCB7MHg4MmExLCAgICAweDAwNDd9LAorezB4ODJhMiwgICAgMHgwMGRlfSwgezB4ODJhMywgICAgMHgwMGUxfSwgezB4ODJhNCwgICAgMHgwMGFkfSwKK3sweDgyYTUsICAgIDB4MDAwMH0sIHsweDgyYTYsICAgIDB4MDBjZX0sIHsweDgyYTcsICAgIDB4MDA4Mn0sCit7MHg4MmE4LCAgICAweDAwYWZ9LCB7MHg4MmE5LCAgICAweDAwZmZ9LCB7MHg4MmFhLCAgICAweDAwMDF9LAorezB4ODJhYiwgICAgMHgwMDBmfSwgezB4ODJhYywgICAgMHgwMDdlfSwgezB4ODJhZCwgICAgMHgwMDg0fSwKK3sweDgyYWUsICAgIDB4MDAyNX0sIHsweDgyYWYsICAgIDB4MDA5Nn0sIHsweDgyYjAsICAgIDB4MDA0MX0sCit7MHg4MmIxLCAgICAweDAwODV9LCB7MHg4MmIyLCAgICAweDAwMTB9LCB7MHg4MmIzLCAgICAweDAwMjZ9LAorezB4ODJiNCwgICAgMHgwMDA2fSwgezB4ODJiNSwgICAgMHgwMDk2fSwgezB4ODJiNiwgICAgMHgwMDIzfSwKK3sweDgyYjcsICAgIDB4MDA4NX0sIHsweDgyYjgsICAgIDB4MDA0MH0sIHsweDgyYjksICAgIDB4MDAyN30sCit7MHg4MmJhLCAgICAweDAwMDZ9LCB7MHg4MmJiLCAgICAweDAwYmR9LCB7MHg4MmJjLCAgICAweDAwZWR9LAorezB4ODJiZCwgICAgMHgwMDAwfSwgezB4ODJiZSwgICAgMHgwMDdlfSwgezB4ODJiZiwgICAgMHgwMDgzfSwKK3sweDgyYzAsICAgIDB4MDBhMn0sIHsweDgyYzEsICAgIDB4MDBkZX0sIHsweDgyYzIsICAgIDB4MDA0Mn0sCit7MHg4MmMzLCAgICAweDAwYmR9LCB7MHg4MmM0LCAgICAweDAwZWJ9LCB7MHg4MmM1LCAgICAweDAwOGV9LAorezB4ODJjNiwgICAgMHgwMDk2fSwgezB4ODJjNywgICAgMHgwMDI0fSwgezB4ODJjOCwgICAgMHgwMDg0fSwKK3sweDgyYzksICAgIDB4MDAwOH0sIHsweDgyY2EsICAgIDB4MDAyN30sIHsweDgyY2IsICAgIDB4MDAwM30sCit7MHg4MmNjLCAgICAweDAwN2V9LCB7MHg4MmNkLCAgICAweDAwODN9LCB7MHg4MmNlLCAgICAweDAwZGZ9LAorezB4ODJjZiwgICAgMHgwMDk2fSwgezB4ODJkMCwgICAgMHgwMDdifSwgezB4ODJkMSwgICAgMHgwMGQ2fSwKK3sweDgyZDIsICAgIDB4MDA3Y30sIHsweDgyZDMsICAgIDB4MDBmZX0sIHsweDgyZDQsICAgIDB4MDA4Zn0sCit7MHg4MmQ1LCAgICAweDAwNTZ9LCB7MHg4MmQ2LCAgICAweDAwYmR9LCB7MHg4MmQ3LCAgICAweDAwZjd9LAorezB4ODJkOCwgICAgMHgwMGI2fSwgezB4ODJkOSwgICAgMHgwMGZlfSwgezB4ODJkYSwgICAgMHgwMDhmfSwKK3sweDgyZGIsICAgIDB4MDA1MH0sIHsweDgyZGMsICAgIDB4MDBiZH0sIHsweDgyZGQsICAgIDB4MDBlY30sCit7MHg4MmRlLCAgICAweDAwOGV9LCB7MHg4MmRmLCAgICAweDAwYmR9LCB7MHg4MmUwLCAgICAweDAwZmF9LAorezB4ODJlMSwgICAgMHgwMGY3fSwgezB4ODJlMiwgICAgMHgwMDg2fSwgezB4ODJlMywgICAgMHgwMDExfSwKK3sweDgyZTQsICAgIDB4MDBjNn0sIHsweDgyZTUsICAgIDB4MDA0OX0sIHsweDgyZTYsICAgIDB4MDBiZH0sCit7MHg4MmU3LCAgICAweDAwZTR9LCB7MHg4MmU4LCAgICAweDAwMTJ9LCB7MHg4MmU5LCAgICAweDAwY2V9LAorezB4ODJlYSwgICAgMHgwMDgyfSwgezB4ODJlYiwgICAgMHgwMGVmfSwgezB4ODJlYywgICAgMHgwMGZmfSwKK3sweDgyZWQsICAgIDB4MDAwMX0sIHsweDgyZWUsICAgIDB4MDAwZn0sIHsweDgyZWYsICAgIDB4MDA5Nn0sCit7MHg4MmYwLCAgICAweDAwNDZ9LCB7MHg4MmYxLCAgICAweDAwODR9LCB7MHg4MmYyLCAgICAweDAwMGN9LAorezB4ODJmMywgICAgMHgwMDgxfSwgezB4ODJmNCwgICAgMHgwMDAwfSwgezB4ODJmNSwgICAgMHgwMDI3fSwKK3sweDgyZjYsICAgIDB4MDAxN30sIHsweDgyZjcsICAgIDB4MDBjNn0sIHsweDgyZjgsICAgIDB4MDA0OX0sCit7MHg4MmY5LCAgICAweDAwYmR9LCB7MHg4MmZhLCAgICAweDAwZTR9LCB7MHg4MmZiLCAgICAweDAwOTF9LAorezB4ODJmYywgICAgMHgwMDI0fSwgezB4ODJmZCwgICAgMHgwMDBkfSwgezB4ODJmZSwgICAgMHgwMGI2fSwKK3sweDgyZmYsICAgIDB4MDAxMn0sIHsweDgzMDAsICAgIDB4MDAyMH0sIHsweDgzMDEsICAgIDB4MDA4NX0sCit7MHg4MzAyLCAgICAweDAwMjB9LCB7MHg4MzAzLCAgICAweDAwMjZ9LCB7MHg4MzA0LCAgICAweDAwMGN9LAorezB4ODMwNSwgICAgMHgwMGNlfSwgezB4ODMwNiwgICAgMHgwMDgyfSwgezB4ODMwNywgICAgMHgwMGMxfSwKK3sweDgzMDgsICAgIDB4MDBmZn0sIHsweDgzMDksICAgIDB4MDAwMX0sIHsweDgzMGEsICAgIDB4MDAwZn0sCit7MHg4MzBiLCAgICAweDAwN2V9LCB7MHg4MzBjLCAgICAweDAwODR9LCB7MHg4MzBkLCAgICAweDAwMjV9LAorezB4ODMwZSwgICAgMHgwMDdlfSwgezB4ODMwZiwgICAgMHgwMDg0fSwgezB4ODMxMCwgICAgMHgwMDE2fSwKK3sweDgzMTEsICAgIDB4MDBmZX0sIHsweDgzMTIsICAgIDB4MDA4Zn0sIHsweDgzMTMsICAgIDB4MDA1Mn0sCit7MHg4MzE0LCAgICAweDAwYmR9LCB7MHg4MzE1LCAgICAweDAwZWN9LCB7MHg4MzE2LCAgICAweDAwOGV9LAorezB4ODMxNywgICAgMHgwMGJkfSwgezB4ODMxOCwgICAgMHgwMGZhfSwgezB4ODMxOSwgICAgMHgwMGY3fSwKK3sweDgzMWEsICAgIDB4MDA4Nn0sIHsweDgzMWIsICAgIDB4MDA2YX0sIHsweDgzMWMsICAgIDB4MDBjNn0sCit7MHg4MzFkLCAgICAweDAwNDl9LCB7MHg4MzFlLCAgICAweDAwYmR9LCB7MHg4MzFmLCAgICAweDAwZTR9LAorezB4ODMyMCwgICAgMHgwMDEyfSwgezB4ODMyMSwgICAgMHgwMGNlfSwgezB4ODMyMiwgICAgMHgwMDgzfSwKK3sweDgzMjMsICAgIDB4MDAyN30sIHsweDgzMjQsICAgIDB4MDBmZn0sIHsweDgzMjUsICAgIDB4MDAwMX0sCit7MHg4MzI2LCAgICAweDAwMGZ9LCB7MHg4MzI3LCAgICAweDAwOTZ9LCB7MHg4MzI4LCAgICAweDAwNDZ9LAorezB4ODMyOSwgICAgMHgwMDg0fSwgezB4ODMyYSwgICAgMHgwMDBjfSwgezB4ODMyYiwgICAgMHgwMDgxfSwKK3sweDgzMmMsICAgIDB4MDAwMH0sIHsweDgzMmQsICAgIDB4MDAyN30sIHsweDgzMmUsICAgIDB4MDAwYX0sCit7MHg4MzJmLCAgICAweDAwYzZ9LCB7MHg4MzMwLCAgICAweDAwNDl9LCB7MHg4MzMxLCAgICAweDAwYmR9LAorezB4ODMzMiwgICAgMHgwMGU0fSwgezB4ODMzMywgICAgMHgwMDkxfSwgezB4ODMzNCwgICAgMHgwMDI1fSwKK3sweDgzMzUsICAgIDB4MDAwNn0sIHsweDgzMzYsICAgIDB4MDA3ZX0sIHsweDgzMzcsICAgIDB4MDA4NH0sCit7MHg4MzM4LCAgICAweDAwMjV9LCB7MHg4MzM5LCAgICAweDAwN2V9LCB7MHg4MzNhLCAgICAweDAwODR9LAorezB4ODMzYiwgICAgMHgwMDE2fSwgezB4ODMzYywgICAgMHgwMGI2fSwgezB4ODMzZCwgICAgMHgwMDE4fSwKK3sweDgzM2UsICAgIDB4MDA3MH0sIHsweDgzM2YsICAgIDB4MDBiYn0sIHsweDgzNDAsICAgIDB4MDAxOX0sCit7MHg4MzQxLCAgICAweDAwNzB9LCB7MHg4MzQyLCAgICAweDAwMmF9LCB7MHg4MzQzLCAgICAweDAwMDR9LAorezB4ODM0NCwgICAgMHgwMDgxfSwgezB4ODM0NSwgICAgMHgwMGFmfSwgezB4ODM0NiwgICAgMHgwMDJlfSwKK3sweDgzNDcsICAgIDB4MDAxOX0sIHsweDgzNDgsICAgIDB4MDA5Nn0sIHsweDgzNDksICAgIDB4MDA3Yn0sCit7MHg4MzRhLCAgICAweDAwZjZ9LCB7MHg4MzRiLCAgICAweDAwMjB9LCB7MHg4MzRjLCAgICAweDAwMDd9LAorezB4ODM0ZCwgICAgMHgwMGZhfSwgezB4ODM0ZSwgICAgMHgwMDIwfSwgezB4ODM0ZiwgICAgMHgwMDI3fSwKK3sweDgzNTAsICAgIDB4MDBjNH0sIHsweDgzNTEsICAgIDB4MDAzOH0sIHsweDgzNTIsICAgIDB4MDA4MX0sCit7MHg4MzUzLCAgICAweDAwMzh9LCB7MHg4MzU0LCAgICAweDAwMjd9LCB7MHg4MzU1LCAgICAweDAwMGJ9LAorezB4ODM1NiwgICAgMHgwMGY2fSwgezB4ODM1NywgICAgMHgwMDIwfSwgezB4ODM1OCwgICAgMHgwMDA3fSwKK3sweDgzNTksICAgIDB4MDBmYX0sIHsweDgzNWEsICAgIDB4MDAyMH0sIHsweDgzNWIsICAgIDB4MDAyN30sCit7MHg4MzVjLCAgICAweDAwY2J9LCB7MHg4MzVkLCAgICAweDAwMDh9LCB7MHg4MzVlLCAgICAweDAwN2V9LAorezB4ODM1ZiwgICAgMHgwMDgyfSwgezB4ODM2MCwgICAgMHgwMGQzfSwgezB4ODM2MSwgICAgMHgwMGJkfSwKK3sweDgzNjIsICAgIDB4MDBmN30sIHsweDgzNjMsICAgIDB4MDA2Nn0sIHsweDgzNjQsICAgIDB4MDA4Nn0sCit7MHg4MzY1LCAgICAweDAwNzR9LCB7MHg4MzY2LCAgICAweDAwYzZ9LCB7MHg4MzY3LCAgICAweDAwNDl9LAorezB4ODM2OCwgICAgMHgwMGJkfSwgezB4ODM2OSwgICAgMHgwMGU0fSwgezB4ODM2YSwgICAgMHgwMDEyfSwKK3sweDgzNmIsICAgIDB4MDBjZX0sIHsweDgzNmMsICAgIDB4MDA4M30sIHsweDgzNmQsICAgIDB4MDA3MX0sCit7MHg4MzZlLCAgICAweDAwZmZ9LCB7MHg4MzZmLCAgICAweDAwMDF9LCB7MHg4MzcwLCAgICAweDAwMGZ9LAorezB4ODM3MSwgICAgMHgwMDk2fSwgezB4ODM3MiwgICAgMHgwMDQ2fSwgezB4ODM3MywgICAgMHgwMDg0fSwKK3sweDgzNzQsICAgIDB4MDAwY30sIHsweDgzNzUsICAgIDB4MDA4MX0sIHsweDgzNzYsICAgIDB4MDAwOH0sCit7MHg4Mzc3LCAgICAweDAwMjZ9LCB7MHg4Mzc4LCAgICAweDAwMGF9LCB7MHg4Mzc5LCAgICAweDAwYzZ9LAorezB4ODM3YSwgICAgMHgwMDQ5fSwgezB4ODM3YiwgICAgMHgwMGJkfSwgezB4ODM3YywgICAgMHgwMGU0fSwKK3sweDgzN2QsICAgIDB4MDA5MX0sIHsweDgzN2UsICAgIDB4MDAyNX0sIHsweDgzN2YsICAgIDB4MDAwNn0sCit7MHg4MzgwLCAgICAweDAwN2V9LCB7MHg4MzgxLCAgICAweDAwODR9LCB7MHg4MzgyLCAgICAweDAwMjV9LAorezB4ODM4MywgICAgMHgwMDdlfSwgezB4ODM4NCwgICAgMHgwMDg0fSwgezB4ODM4NSwgICAgMHgwMDE2fSwKK3sweDgzODYsICAgIDB4MDBiZH0sIHsweDgzODcsICAgIDB4MDBmN30sIHsweDgzODgsICAgIDB4MDAzZX0sCit7MHg4Mzg5LCAgICAweDAwMjZ9LCB7MHg4MzhhLCAgICAweDAwMGV9LCB7MHg4MzhiLCAgICAweDAwYmR9LAorezB4ODM4YywgICAgMHgwMGU1fSwgezB4ODM4ZCwgICAgMHgwMDA5fSwgezB4ODM4ZSwgICAgMHgwMDI2fSwKK3sweDgzOGYsICAgIDB4MDAwNn0sIHsweDgzOTAsICAgIDB4MDBjZX0sIHsweDgzOTEsICAgIDB4MDA4Mn0sCit7MHg4MzkyLCAgICAweDAwYzF9LCB7MHg4MzkzLCAgICAweDAwZmZ9LCB7MHg4Mzk0LCAgICAweDAwMDF9LAorezB4ODM5NSwgICAgMHgwMDBmfSwgezB4ODM5NiwgICAgMHgwMDdlfSwgezB4ODM5NywgICAgMHgwMDg0fSwKK3sweDgzOTgsICAgIDB4MDAyNX0sIHsweDgzOTksICAgIDB4MDBmZX0sIHsweDgzOWEsICAgIDB4MDA4Zn0sCit7MHg4MzliLCAgICAweDAwNTR9LCB7MHg4MzljLCAgICAweDAwYmR9LCB7MHg4MzlkLCAgICAweDAwZWN9LAorezB4ODM5ZSwgICAgMHgwMDhlfSwgezB4ODM5ZiwgICAgMHgwMGJkfSwgezB4ODNhMCwgICAgMHgwMGZhfSwKK3sweDgzYTEsICAgIDB4MDBmN30sIHsweDgzYTIsICAgIDB4MDBiZH0sIHsweDgzYTMsICAgIDB4MDBmN30sCit7MHg4M2E0LCAgICAweDAwMzN9LCB7MHg4M2E1LCAgICAweDAwODZ9LCB7MHg4M2E2LCAgICAweDAwMGZ9LAorezB4ODNhNywgICAgMHgwMGM2fSwgezB4ODNhOCwgICAgMHgwMDUxfSwgezB4ODNhOSwgICAgMHgwMGJkfSwKK3sweDgzYWEsICAgIDB4MDBlNH0sIHsweDgzYWIsICAgIDB4MDAxMn0sIHsweDgzYWMsICAgIDB4MDBjZX0sCit7MHg4M2FkLCAgICAweDAwODN9LCB7MHg4M2FlLCAgICAweDAwYjJ9LCB7MHg4M2FmLCAgICAweDAwZmZ9LAorezB4ODNiMCwgICAgMHgwMDAxfSwgezB4ODNiMSwgICAgMHgwMDBmfSwgezB4ODNiMiwgICAgMHgwMDk2fSwKK3sweDgzYjMsICAgIDB4MDA0Nn0sIHsweDgzYjQsICAgIDB4MDA4NH0sIHsweDgzYjUsICAgIDB4MDAwY30sCit7MHg4M2I2LCAgICAweDAwODF9LCB7MHg4M2I3LCAgICAweDAwMDh9LCB7MHg4M2I4LCAgICAweDAwMjZ9LAorezB4ODNiOSwgICAgMHgwMDVjfSwgezB4ODNiYSwgICAgMHgwMGI2fSwgezB4ODNiYiwgICAgMHgwMDEyfSwKK3sweDgzYmMsICAgIDB4MDAyMH0sIHsweDgzYmQsICAgIDB4MDA4NH0sIHsweDgzYmUsICAgIDB4MDAzZn0sCit7MHg4M2JmLCAgICAweDAwODF9LCB7MHg4M2MwLCAgICAweDAwM2F9LCB7MHg4M2MxLCAgICAweDAwMjd9LAorezB4ODNjMiwgICAgMHgwMDFjfSwgezB4ODNjMywgICAgMHgwMDk2fSwgezB4ODNjNCwgICAgMHgwMDIzfSwKK3sweDgzYzUsICAgIDB4MDA4NX0sIHsweDgzYzYsICAgIDB4MDA0MH0sIHsweDgzYzcsICAgIDB4MDAyN30sCit7MHg4M2M4LCAgICAweDAwMDN9LCB7MHg4M2M5LCAgICAweDAwN2V9LCB7MHg4M2NhLCAgICAweDAwODR9LAorezB4ODNjYiwgICAgMHgwMDI1fSwgezB4ODNjYywgICAgMHgwMGM2fSwgezB4ODNjZCwgICAgMHgwMDUxfSwKK3sweDgzY2UsICAgIDB4MDBiZH0sIHsweDgzY2YsICAgIDB4MDBlNH0sIHsweDgzZDAsICAgIDB4MDA5MX0sCit7MHg4M2QxLCAgICAweDAwMjV9LCB7MHg4M2QyLCAgICAweDAwMDN9LCB7MHg4M2QzLCAgICAweDAwN2V9LAorezB4ODNkNCwgICAgMHgwMDg0fSwgezB4ODNkNSwgICAgMHgwMDI1fSwgezB4ODNkNiwgICAgMHgwMGNlfSwKK3sweDgzZDcsICAgIDB4MDA4Mn0sIHsweDgzZDgsICAgIDB4MDBjMX0sIHsweDgzZDksICAgIDB4MDBmZn0sCit7MHg4M2RhLCAgICAweDAwMDF9LCB7MHg4M2RiLCAgICAweDAwMGZ9LCB7MHg4M2RjLCAgICAweDAwN2V9LAorezB4ODNkZCwgICAgMHgwMDg0fSwgezB4ODNkZSwgICAgMHgwMDI1fSwgezB4ODNkZiwgICAgMHgwMGJkfSwKK3sweDgzZTAsICAgIDB4MDBmOH0sIHsweDgzZTEsICAgIDB4MDAzN30sIHsweDgzZTIsICAgIDB4MDA3Y30sCit7MHg4M2UzLCAgICAweDAwMDB9LCB7MHg4M2U0LCAgICAweDAwN2F9LCB7MHg4M2U1LCAgICAweDAwY2V9LAorezB4ODNlNiwgICAgMHgwMDgzfSwgezB4ODNlNywgICAgMHgwMGVlfSwgezB4ODNlOCwgICAgMHgwMGZmfSwKK3sweDgzZTksICAgIDB4MDAwMX0sIHsweDgzZWEsICAgIDB4MDAwZn0sIHsweDgzZWIsICAgIDB4MDA3ZX0sCit7MHg4M2VjLCAgICAweDAwODR9LCB7MHg4M2VkLCAgICAweDAwMjV9LCB7MHg4M2VlLCAgICAweDAwOTZ9LAorezB4ODNlZiwgICAgMHgwMDQ2fSwgezB4ODNmMCwgICAgMHgwMDg0fSwgezB4ODNmMSwgICAgMHgwMDBjfSwKK3sweDgzZjIsICAgIDB4MDA4MX0sIHsweDgzZjMsICAgIDB4MDAwOH0sIHsweDgzZjQsICAgIDB4MDAyNn0sCit7MHg4M2Y1LCAgICAweDAwMjB9LCB7MHg4M2Y2LCAgICAweDAwOTZ9LCB7MHg4M2Y3LCAgICAweDAwMjR9LAorezB4ODNmOCwgICAgMHgwMDg0fSwgezB4ODNmOSwgICAgMHgwMDA4fSwgezB4ODNmYSwgICAgMHgwMDI2fSwKK3sweDgzZmIsICAgIDB4MDAyOX0sIHsweDgzZmMsICAgIDB4MDBiNn0sIHsweDgzZmQsICAgIDB4MDAxOH0sCit7MHg4M2ZlLCAgICAweDAwODJ9LCB7MHg4M2ZmLCAgICAweDAwYmJ9LCB7MHg4NDAwLCAgICAweDAwMTl9LAorezB4ODQwMSwgICAgMHgwMDgyfSwgezB4ODQwMiwgICAgMHgwMGIxfSwgezB4ODQwMywgICAgMHgwMDAxfSwKK3sweDg0MDQsICAgIDB4MDAzYn0sIHsweDg0MDUsICAgIDB4MDAyMn0sIHsweDg0MDYsICAgIDB4MDAwOX0sCit7MHg4NDA3LCAgICAweDAwYjZ9LCB7MHg4NDA4LCAgICAweDAwMTJ9LCB7MHg4NDA5LCAgICAweDAwMjB9LAorezB4ODQwYSwgICAgMHgwMDg0fSwgezB4ODQwYiwgICAgMHgwMDM3fSwgezB4ODQwYywgICAgMHgwMDgxfSwKK3sweDg0MGQsICAgIDB4MDAzMn0sIHsweDg0MGUsICAgIDB4MDAyN30sIHsweDg0MGYsICAgIDB4MDAxNX0sCit7MHg4NDEwLCAgICAweDAwYmR9LCB7MHg4NDExLCAgICAweDAwZjh9LCB7MHg4NDEyLCAgICAweDAwNDR9LAorezB4ODQxMywgICAgMHgwMDdlfSwgezB4ODQxNCwgICAgMHgwMDgyfSwgezB4ODQxNSwgICAgMHgwMGMxfSwKK3sweDg0MTYsICAgIDB4MDBiZH0sIHsweDg0MTcsICAgIDB4MDBmN30sIHsweDg0MTgsICAgIDB4MDAxZn0sCit7MHg4NDE5LCAgICAweDAwYmR9LCB7MHg4NDFhLCAgICAweDAwZjh9LCB7MHg4NDFiLCAgICAweDAwNDR9LAorezB4ODQxYywgICAgMHgwMGJkfSwgezB4ODQxZCwgICAgMHgwMGZjfSwgezB4ODQxZSwgICAgMHgwMDI5fSwKK3sweDg0MWYsICAgIDB4MDBjZX0sIHsweDg0MjAsICAgIDB4MDA4Mn0sIHsweDg0MjEsICAgIDB4MDAyNX0sCit7MHg4NDIyLCAgICAweDAwZmZ9LCB7MHg4NDIzLCAgICAweDAwMDF9LCB7MHg4NDI0LCAgICAweDAwMGZ9LAorezB4ODQyNSwgICAgMHgwMDM5fSwgezB4ODQyNiwgICAgMHgwMDk2fSwgezB4ODQyNywgICAgMHgwMDQ3fSwKK3sweDg0MjgsICAgIDB4MDA4NH0sIHsweDg0MjksICAgIDB4MDBmY30sIHsweDg0MmEsICAgIDB4MDA4YX0sCit7MHg4NDJiLCAgICAweDAwMDB9LCB7MHg4NDJjLCAgICAweDAwOTd9LCB7MHg4NDJkLCAgICAweDAwNDd9LAorezB4ODQyZSwgICAgMHgwMGNlfSwgezB4ODQyZiwgICAgMHgwMDg0fSwgezB4ODQzMCwgICAgMHgwMDM0fSwKK3sweDg0MzEsICAgIDB4MDBmZn0sIHsweDg0MzIsICAgIDB4MDAwMX0sIHsweDg0MzMsICAgIDB4MDAxMX0sCit7MHg4NDM0LCAgICAweDAwOTZ9LCB7MHg4NDM1LCAgICAweDAwNDZ9LCB7MHg4NDM2LCAgICAweDAwODR9LAorezB4ODQzNywgICAgMHgwMDAzfSwgezB4ODQzOCwgICAgMHgwMDgxfSwgezB4ODQzOSwgICAgMHgwMDAyfSwKK3sweDg0M2EsICAgIDB4MDAyN30sIHsweDg0M2IsICAgIDB4MDAwM30sIHsweDg0M2MsICAgIDB4MDA3ZX0sCit7MHg4NDNkLCAgICAweDAwODV9LCB7MHg4NDNlLCAgICAweDAwMWV9LCB7MHg4NDNmLCAgICAweDAwOTZ9LAorezB4ODQ0MCwgICAgMHgwMDQ3fSwgezB4ODQ0MSwgICAgMHgwMDg0fSwgezB4ODQ0MiwgICAgMHgwMGZjfSwKK3sweDg0NDMsICAgIDB4MDA4YX0sIHsweDg0NDQsICAgIDB4MDAwMn0sIHsweDg0NDUsICAgIDB4MDA5N30sCit7MHg4NDQ2LCAgICAweDAwNDd9LCB7MHg4NDQ3LCAgICAweDAwZGV9LCB7MHg4NDQ4LCAgICAweDAwZTF9LAorezB4ODQ0OSwgICAgMHgwMGFkfSwgezB4ODQ0YSwgICAgMHgwMDAwfSwgezB4ODQ0YiwgICAgMHgwMDg2fSwKK3sweDg0NGMsICAgIDB4MDAwMX0sIHsweDg0NGQsICAgIDB4MDBiN30sIHsweDg0NGUsICAgIDB4MDAxMn0sCit7MHg4NDRmLCAgICAweDAwNTF9LCB7MHg4NDUwLCAgICAweDAwYmR9LCB7MHg4NDUxLCAgICAweDAwZjd9LAorezB4ODQ1MiwgICAgMHgwMDE0fSwgezB4ODQ1MywgICAgMHgwMGI2fSwgezB4ODQ1NCwgICAgMHgwMDEwfSwKK3sweDg0NTUsICAgIDB4MDAzMX0sIHsweDg0NTYsICAgIDB4MDA4NH0sIHsweDg0NTcsICAgIDB4MDBmZH0sCit7MHg4NDU4LCAgICAweDAwYjd9LCB7MHg4NDU5LCAgICAweDAwMTB9LCB7MHg4NDVhLCAgICAweDAwMzF9LAorezB4ODQ1YiwgICAgMHgwMGJkfSwgezB4ODQ1YywgICAgMHgwMGY4fSwgezB4ODQ1ZCwgICAgMHgwMDFlfSwKK3sweDg0NWUsICAgIDB4MDA5Nn0sIHsweDg0NWYsICAgIDB4MDA4MX0sIHsweDg0NjAsICAgIDB4MDBkNn0sCit7MHg4NDYxLCAgICAweDAwODJ9LCB7MHg4NDYyLCAgICAweDAwZmV9LCB7MHg4NDYzLCAgICAweDAwOGZ9LAorezB4ODQ2NCwgICAgMHgwMDVhfSwgezB4ODQ2NSwgICAgMHgwMGJkfSwgezB4ODQ2NiwgICAgMHgwMGY3fSwKK3sweDg0NjcsICAgIDB4MDBiNn0sIHsweDg0NjgsICAgIDB4MDBmZX0sIHsweDg0NjksICAgIDB4MDA4Zn0sCit7MHg4NDZhLCAgICAweDAwNWN9LCB7MHg4NDZiLCAgICAweDAwYmR9LCB7MHg4NDZjLCAgICAweDAwZWN9LAorezB4ODQ2ZCwgICAgMHgwMDhlfSwgezB4ODQ2ZSwgICAgMHgwMGJkfSwgezB4ODQ2ZiwgICAgMHgwMGZhfSwKK3sweDg0NzAsICAgIDB4MDBmN30sIHsweDg0NzEsICAgIDB4MDA4Nn0sIHsweDg0NzIsICAgIDB4MDAwOH0sCit7MHg4NDczLCAgICAweDAwZDZ9LCB7MHg4NDc0LCAgICAweDAwMDB9LCB7MHg4NDc1LCAgICAweDAwYzV9LAorezB4ODQ3NiwgICAgMHgwMDEwfSwgezB4ODQ3NywgICAgMHgwMDI2fSwgezB4ODQ3OCwgICAgMHgwMDAyfSwKK3sweDg0NzksICAgIDB4MDA4Yn0sIHsweDg0N2EsICAgIDB4MDAyMH0sIHsweDg0N2IsICAgIDB4MDBjNn0sCit7MHg4NDdjLCAgICAweDAwNTF9LCB7MHg4NDdkLCAgICAweDAwYmR9LCB7MHg4NDdlLCAgICAweDAwZTR9LAorezB4ODQ3ZiwgICAgMHgwMDEyfSwgezB4ODQ4MCwgICAgMHgwMGNlfSwgezB4ODQ4MSwgICAgMHgwMDg0fSwKK3sweDg0ODIsICAgIDB4MDA4Nn0sIHsweDg0ODMsICAgIDB4MDBmZn0sIHsweDg0ODQsICAgIDB4MDAwMX0sCit7MHg4NDg1LCAgICAweDAwMTF9LCB7MHg4NDg2LCAgICAweDAwOTZ9LCB7MHg4NDg3LCAgICAweDAwNDZ9LAorezB4ODQ4OCwgICAgMHgwMDg0fSwgezB4ODQ4OSwgICAgMHgwMDAzfSwgezB4ODQ4YSwgICAgMHgwMDgxfSwKK3sweDg0OGIsICAgIDB4MDAwMn0sIHsweDg0OGMsICAgIDB4MDAyN30sIHsweDg0OGQsICAgIDB4MDAwM30sCit7MHg4NDhlLCAgICAweDAwN2V9LCB7MHg4NDhmLCAgICAweDAwODV9LCB7MHg4NDkwLCAgICAweDAwMGZ9LAorezB4ODQ5MSwgICAgMHgwMGM2fSwgezB4ODQ5MiwgICAgMHgwMDUxfSwgezB4ODQ5MywgICAgMHgwMGJkfSwKK3sweDg0OTQsICAgIDB4MDBlNH0sIHsweDg0OTUsICAgIDB4MDA5MX0sIHsweDg0OTYsICAgIDB4MDAyNX0sCit7MHg4NDk3LCAgICAweDAwMDN9LCB7MHg4NDk4LCAgICAweDAwN2V9LCB7MHg4NDk5LCAgICAweDAwODV9LAorezB4ODQ5YSwgICAgMHgwMDFlfSwgezB4ODQ5YiwgICAgMHgwMDk2fSwgezB4ODQ5YywgICAgMHgwMDQ0fSwKK3sweDg0OWQsICAgIDB4MDA4NX0sIHsweDg0OWUsICAgIDB4MDAxMH0sIHsweDg0OWYsICAgIDB4MDAyNn0sCit7MHg4NGEwLCAgICAweDAwMGF9LCB7MHg4NGExLCAgICAweDAwYjZ9LCB7MHg4NGEyLCAgICAweDAwMTJ9LAorezB4ODRhMywgICAgMHgwMDUwfSwgezB4ODRhNCwgICAgMHgwMGJhfSwgezB4ODRhNSwgICAgMHgwMDAxfSwKK3sweDg0YTYsICAgIDB4MDAzY30sIHsweDg0YTcsICAgIDB4MDA4NX0sIHsweDg0YTgsICAgIDB4MDAxMH0sCit7MHg4NGE5LCAgICAweDAwMjd9LCB7MHg4NGFhLCAgICAweDAwYTh9LCB7MHg4NGFiLCAgICAweDAwYmR9LAorezB4ODRhYywgICAgMHgwMGY3fSwgezB4ODRhZCwgICAgMHgwMDY2fSwgezB4ODRhZSwgICAgMHgwMGNlfSwKK3sweDg0YWYsICAgIDB4MDA4NH0sIHsweDg0YjAsICAgIDB4MDBiN30sIHsweDg0YjEsICAgIDB4MDBmZn0sCit7MHg4NGIyLCAgICAweDAwMDF9LCB7MHg4NGIzLCAgICAweDAwMTF9LCB7MHg4NGI0LCAgICAweDAwN2V9LAorezB4ODRiNSwgICAgMHgwMDg1fSwgezB4ODRiNiwgICAgMHgwMDFlfSwgezB4ODRiNywgICAgMHgwMDk2fSwKK3sweDg0YjgsICAgIDB4MDA0Nn0sIHsweDg0YjksICAgIDB4MDA4NH0sIHsweDg0YmEsICAgIDB4MDAwM30sCit7MHg4NGJiLCAgICAweDAwODF9LCB7MHg4NGJjLCAgICAweDAwMDJ9LCB7MHg4NGJkLCAgICAweDAwMjZ9LAorezB4ODRiZSwgICAgMHgwMDUwfSwgezB4ODRiZiwgICAgMHgwMGI2fSwgezB4ODRjMCwgICAgMHgwMDEyfSwKK3sweDg0YzEsICAgIDB4MDAzMH0sIHsweDg0YzIsICAgIDB4MDA4NH0sIHsweDg0YzMsICAgIDB4MDAwM30sCit7MHg4NGM0LCAgICAweDAwODF9LCB7MHg4NGM1LCAgICAweDAwMDF9LCB7MHg4NGM2LCAgICAweDAwMjd9LAorezB4ODRjNywgICAgMHgwMDAzfSwgezB4ODRjOCwgICAgMHgwMDdlfSwgezB4ODRjOSwgICAgMHgwMDg1fSwKK3sweDg0Y2EsICAgIDB4MDAxZX0sIHsweDg0Y2IsICAgIDB4MDA5Nn0sIHsweDg0Y2MsICAgIDB4MDA0NH0sCit7MHg4NGNkLCAgICAweDAwODV9LCB7MHg4NGNlLCAgICAweDAwMTB9LCB7MHg4NGNmLCAgICAweDAwMjZ9LAorezB4ODRkMCwgICAgMHgwMDEzfSwgezB4ODRkMSwgICAgMHgwMGI2fSwgezB4ODRkMiwgICAgMHgwMDEyfSwKK3sweDg0ZDMsICAgIDB4MDA1MH0sIHsweDg0ZDQsICAgIDB4MDBiYX0sIHsweDg0ZDUsICAgIDB4MDAwMX0sCit7MHg4NGQ2LCAgICAweDAwM2N9LCB7MHg4NGQ3LCAgICAweDAwODV9LCB7MHg4NGQ4LCAgICAweDAwMTB9LAorezB4ODRkOSwgICAgMHgwMDI2fSwgezB4ODRkYSwgICAgMHgwMDA5fSwgezB4ODRkYiwgICAgMHgwMGNlfSwKK3sweDg0ZGMsICAgIDB4MDA4NH0sIHsweDg0ZGQsICAgIDB4MDA1M30sIHsweDg0ZGUsICAgIDB4MDBmZn0sCit7MHg4NGRmLCAgICAweDAwMDF9LCB7MHg4NGUwLCAgICAweDAwMTF9LCB7MHg4NGUxLCAgICAweDAwN2V9LAorezB4ODRlMiwgICAgMHgwMDg1fSwgezB4ODRlMywgICAgMHgwMDFlfSwgezB4ODRlNCwgICAgMHgwMGI2fSwKK3sweDg0ZTUsICAgIDB4MDAxMH0sIHsweDg0ZTYsICAgIDB4MDAzMX0sIHsweDg0ZTcsICAgIDB4MDA4YX0sCit7MHg4NGU4LCAgICAweDAwMDJ9LCB7MHg4NGU5LCAgICAweDAwYjd9LCB7MHg4NGVhLCAgICAweDAwMTB9LAorezB4ODRlYiwgICAgMHgwMDMxfSwgezB4ODRlYywgICAgMHgwMGJkfSwgezB4ODRlZCwgICAgMHgwMDg1fSwKK3sweDg0ZWUsICAgIDB4MDAxZn0sIHsweDg0ZWYsICAgIDB4MDBiZH0sIHsweDg0ZjAsICAgIDB4MDBmOH0sCit7MHg4NGYxLCAgICAweDAwMzd9LCB7MHg4NGYyLCAgICAweDAwN2N9LCB7MHg4NGYzLCAgICAweDAwMDB9LAorezB4ODRmNCwgICAgMHgwMDgwfSwgezB4ODRmNSwgICAgMHgwMGNlfSwgezB4ODRmNiwgICAgMHgwMDg0fSwKK3sweDg0ZjcsICAgIDB4MDBmZX0sIHsweDg0ZjgsICAgIDB4MDBmZn0sIHsweDg0ZjksICAgIDB4MDAwMX0sCit7MHg4NGZhLCAgICAweDAwMTF9LCB7MHg4NGZiLCAgICAweDAwN2V9LCB7MHg4NGZjLCAgICAweDAwODV9LAorezB4ODRmZCwgICAgMHgwMDFlfSwgezB4ODRmZSwgICAgMHgwMDk2fSwgezB4ODRmZiwgICAgMHgwMDQ2fSwKK3sweDg1MDAsICAgIDB4MDA4NH0sIHsweDg1MDEsICAgIDB4MDAwM30sIHsweDg1MDIsICAgIDB4MDA4MX0sCit7MHg4NTAzLCAgICAweDAwMDJ9LCB7MHg4NTA0LCAgICAweDAwMjZ9LCB7MHg4NTA1LCAgICAweDAwMDl9LAorezB4ODUwNiwgICAgMHgwMGI2fSwgezB4ODUwNywgICAgMHgwMDEyfSwgezB4ODUwOCwgICAgMHgwMDMwfSwKK3sweDg1MDksICAgIDB4MDA4NH0sIHsweDg1MGEsICAgIDB4MDAwM30sIHsweDg1MGIsICAgIDB4MDA4MX0sCit7MHg4NTBjLCAgICAweDAwMDF9LCB7MHg4NTBkLCAgICAweDAwMjd9LCB7MHg4NTBlLCAgICAweDAwMGZ9LAorezB4ODUwZiwgICAgMHgwMGJkfSwgezB4ODUxMCwgICAgMHgwMGY4fSwgezB4ODUxMSwgICAgMHgwMDQ0fSwKK3sweDg1MTIsICAgIDB4MDBiZH0sIHsweDg1MTMsICAgIDB4MDBmN30sIHsweDg1MTQsICAgIDB4MDAwYn0sCit7MHg4NTE1LCAgICAweDAwYmR9LCB7MHg4NTE2LCAgICAweDAwZmN9LCB7MHg4NTE3LCAgICAweDAwMjl9LAorezB4ODUxOCwgICAgMHgwMGNlfSwgezB4ODUxOSwgICAgMHgwMDg0fSwgezB4ODUxYSwgICAgMHgwMDI2fSwKK3sweDg1MWIsICAgIDB4MDBmZn0sIHsweDg1MWMsICAgIDB4MDAwMX0sIHsweDg1MWQsICAgIDB4MDAxMX0sCit7MHg4NTFlLCAgICAweDAwMzl9LCB7MHg4NTFmLCAgICAweDAwZDZ9LCB7MHg4NTIwLCAgICAweDAwMjJ9LAorezB4ODUyMSwgICAgMHgwMGM0fSwgezB4ODUyMiwgICAgMHgwMDBmfSwgezB4ODUyMywgICAgMHgwMGI2fSwKK3sweDg1MjQsICAgIDB4MDAxMn0sIHsweDg1MjUsICAgIDB4MDAzMH0sIHsweDg1MjYsICAgIDB4MDBiYX0sCit7MHg4NTI3LCAgICAweDAwMTJ9LCB7MHg4NTI4LCAgICAweDAwMzJ9LCB7MHg4NTI5LCAgICAweDAwODR9LAorezB4ODUyYSwgICAgMHgwMDA0fSwgezB4ODUyYiwgICAgMHgwMDI3fSwgezB4ODUyYywgICAgMHgwMDBkfSwKK3sweDg1MmQsICAgIDB4MDA5Nn0sIHsweDg1MmUsICAgIDB4MDAyMn0sIHsweDg1MmYsICAgIDB4MDA4NX0sCit7MHg4NTMwLCAgICAweDAwMDR9LCB7MHg4NTMxLCAgICAweDAwMjd9LCB7MHg4NTMyLCAgICAweDAwMDV9LAorezB4ODUzMywgICAgMHgwMGNhfSwgezB4ODUzNCwgICAgMHgwMDEwfSwgezB4ODUzNSwgICAgMHgwMDdlfSwKK3sweDg1MzYsICAgIDB4MDA4NX0sIHsweDg1MzcsICAgIDB4MDAzYX0sIHsweDg1MzgsICAgIDB4MDBjYX0sCit7MHg4NTM5LCAgICAweDAwMjB9LCB7MHg4NTNhLCAgICAweDAwZDd9LCB7MHg4NTNiLCAgICAweDAwMjJ9LAorezB4ODUzYywgICAgMHgwMDM5fSwgezB4ODUzZCwgICAgMHgwMDg2fSwgezB4ODUzZSwgICAgMHgwMDAwfSwKK3sweDg1M2YsICAgIDB4MDA5N30sIHsweDg1NDAsICAgIDB4MDA4M30sIHsweDg1NDEsICAgIDB4MDAxOH0sCit7MHg4NTQyLCAgICAweDAwY2V9LCB7MHg4NTQzLCAgICAweDAwMWN9LCB7MHg4NTQ0LCAgICAweDAwMDB9LAorezB4ODU0NSwgICAgMHgwMGJkfSwgezB4ODU0NiwgICAgMHgwMGVifSwgezB4ODU0NywgICAgMHgwMDQ2fSwKK3sweDg1NDgsICAgIDB4MDA5Nn0sIHsweDg1NDksICAgIDB4MDA1N30sIHsweDg1NGEsICAgIDB4MDA4NX0sCit7MHg4NTRiLCAgICAweDAwMDF9LCB7MHg4NTRjLCAgICAweDAwMjd9LCB7MHg4NTRkLCAgICAweDAwMDJ9LAorezB4ODU0ZSwgICAgMHgwMDRmfSwgezB4ODU0ZiwgICAgMHgwMDM5fSwgezB4ODU1MCwgICAgMHgwMDg1fSwKK3sweDg1NTEsICAgIDB4MDAwMn0sIHsweDg1NTIsICAgIDB4MDAyN30sIHsweDg1NTMsICAgIDB4MDAwMX0sCit7MHg4NTU0LCAgICAweDAwMzl9LCB7MHg4NTU1LCAgICAweDAwN2Z9LCB7MHg4NTU2LCAgICAweDAwOGZ9LAorezB4ODU1NywgICAgMHgwMDdkfSwgezB4ODU1OCwgICAgMHgwMDg2fSwgezB4ODU1OSwgICAgMHgwMDA0fSwKK3sweDg1NWEsICAgIDB4MDBiN30sIHsweDg1NWIsICAgIDB4MDAxMn0sIHsweDg1NWMsICAgIDB4MDAwNH0sCit7MHg4NTVkLCAgICAweDAwODZ9LCB7MHg4NTVlLCAgICAweDAwMDh9LCB7MHg4NTVmLCAgICAweDAwYjd9LAorezB4ODU2MCwgICAgMHgwMDEyfSwgezB4ODU2MSwgICAgMHgwMDA3fSwgezB4ODU2MiwgICAgMHgwMDg2fSwKK3sweDg1NjMsICAgIDB4MDAxMH0sIHsweDg1NjQsICAgIDB4MDBiN30sIHsweDg1NjUsICAgIDB4MDAxMn0sCit7MHg4NTY2LCAgICAweDAwMGN9LCB7MHg4NTY3LCAgICAweDAwODZ9LCB7MHg4NTY4LCAgICAweDAwMDd9LAorezB4ODU2OSwgICAgMHgwMGI3fSwgezB4ODU2YSwgICAgMHgwMDEyfSwgezB4ODU2YiwgICAgMHgwMDA2fSwKK3sweDg1NmMsICAgIDB4MDBiNn0sIHsweDg1NmQsICAgIDB4MDA4Zn0sIHsweDg1NmUsICAgIDB4MDA3ZH0sCit7MHg4NTZmLCAgICAweDAwYjd9LCB7MHg4NTcwLCAgICAweDAwMTJ9LCB7MHg4NTcxLCAgICAweDAwNzB9LAorezB4ODU3MiwgICAgMHgwMDg2fSwgezB4ODU3MywgICAgMHgwMDAxfSwgezB4ODU3NCwgICAgMHgwMGJhfSwKK3sweDg1NzUsICAgIDB4MDAxMn0sIHsweDg1NzYsICAgIDB4MDAwNH0sIHsweDg1NzcsICAgIDB4MDBiN30sCit7MHg4NTc4LCAgICAweDAwMTJ9LCB7MHg4NTc5LCAgICAweDAwMDR9LCB7MHg4NTdhLCAgICAweDAwMDF9LAorezB4ODU3YiwgICAgMHgwMDAxfSwgezB4ODU3YywgICAgMHgwMDAxfSwgezB4ODU3ZCwgICAgMHgwMDAxfSwKK3sweDg1N2UsICAgIDB4MDAwMX0sIHsweDg1N2YsICAgIDB4MDAwMX0sIHsweDg1ODAsICAgIDB4MDBiNn0sCit7MHg4NTgxLCAgICAweDAwMTJ9LCB7MHg4NTgyLCAgICAweDAwMDR9LCB7MHg4NTgzLCAgICAweDAwODR9LAorezB4ODU4NCwgICAgMHgwMGZlfSwgezB4ODU4NSwgICAgMHgwMDhhfSwgezB4ODU4NiwgICAgMHgwMDAyfSwKK3sweDg1ODcsICAgIDB4MDBiN30sIHsweDg1ODgsICAgIDB4MDAxMn0sIHsweDg1ODksICAgIDB4MDAwNH0sCit7MHg4NThhLCAgICAweDAwMDF9LCB7MHg4NThiLCAgICAweDAwMDF9LCB7MHg4NThjLCAgICAweDAwMDF9LAorezB4ODU4ZCwgICAgMHgwMDAxfSwgezB4ODU4ZSwgICAgMHgwMDAxfSwgezB4ODU4ZiwgICAgMHgwMDAxfSwKK3sweDg1OTAsICAgIDB4MDA4Nn0sIHsweDg1OTEsICAgIDB4MDBmZH0sIHsweDg1OTIsICAgIDB4MDBiNH0sCit7MHg4NTkzLCAgICAweDAwMTJ9LCB7MHg4NTk0LCAgICAweDAwMDR9LCB7MHg4NTk1LCAgICAweDAwYjd9LAorezB4ODU5NiwgICAgMHgwMDEyfSwgezB4ODU5NywgICAgMHgwMDA0fSwgezB4ODU5OCwgICAgMHgwMGI2fSwKK3sweDg1OTksICAgIDB4MDAxMn0sIHsweDg1OWEsICAgIDB4MDAwMH0sIHsweDg1OWIsICAgIDB4MDA4NH0sCit7MHg4NTljLCAgICAweDAwMDh9LCB7MHg4NTlkLCAgICAweDAwODF9LCB7MHg4NTllLCAgICAweDAwMDh9LAorezB4ODU5ZiwgICAgMHgwMDI3fSwgezB4ODVhMCwgICAgMHgwMDE2fSwgezB4ODVhMSwgICAgMHgwMGI2fSwKK3sweDg1YTIsICAgIDB4MDA4Zn0sIHsweDg1YTMsICAgIDB4MDA3ZH0sIHsweDg1YTQsICAgIDB4MDA4MX0sCit7MHg4NWE1LCAgICAweDAwMGN9LCB7MHg4NWE2LCAgICAweDAwMjd9LCB7MHg4NWE3LCAgICAweDAwMDh9LAorezB4ODVhOCwgICAgMHgwMDhifSwgezB4ODVhOSwgICAgMHgwMDA0fSwgezB4ODVhYSwgICAgMHgwMGI3fSwKK3sweDg1YWIsICAgIDB4MDA4Zn0sIHsweDg1YWMsICAgIDB4MDA3ZH0sIHsweDg1YWQsICAgIDB4MDA3ZX0sCit7MHg4NWFlLCAgICAweDAwODV9LCB7MHg4NWFmLCAgICAweDAwNmN9LCB7MHg4NWIwLCAgICAweDAwODZ9LAorezB4ODViMSwgICAgMHgwMDAzfSwgezB4ODViMiwgICAgMHgwMDk3fSwgezB4ODViMywgICAgMHgwMDQwfSwKK3sweDg1YjQsICAgIDB4MDA3ZX0sIHsweDg1YjUsICAgIDB4MDA4OX0sIHsweDg1YjYsICAgIDB4MDA2ZX0sCit7MHg4NWI3LCAgICAweDAwODZ9LCB7MHg4NWI4LCAgICAweDAwMDd9LCB7MHg4NWI5LCAgICAweDAwYjd9LAorezB4ODViYSwgICAgMHgwMDEyfSwgezB4ODViYiwgICAgMHgwMDA2fSwgezB4ODViYywgICAgMHgwMDVmfSwKK3sweDg1YmQsICAgIDB4MDBmN30sIHsweDg1YmUsICAgIDB4MDA4Zn0sIHsweDg1YmYsICAgIDB4MDA4Mn0sCit7MHg4NWMwLCAgICAweDAwNWZ9LCB7MHg4NWMxLCAgICAweDAwZjd9LCB7MHg4NWMyLCAgICAweDAwOGZ9LAorezB4ODVjMywgICAgMHgwMDdmfSwgezB4ODVjNCwgICAgMHgwMGY3fSwgezB4ODVjNSwgICAgMHgwMDhmfSwKK3sweDg1YzYsICAgIDB4MDA3MH0sIHsweDg1YzcsICAgIDB4MDBmN30sIHsweDg1YzgsICAgIDB4MDA4Zn0sCit7MHg4NWM5LCAgICAweDAwNzF9LCB7MHg4NWNhLCAgICAweDAwZjd9LCB7MHg4NWNiLCAgICAweDAwOGZ9LAorezB4ODVjYywgICAgMHgwMDcyfSwgezB4ODVjZCwgICAgMHgwMGY3fSwgezB4ODVjZSwgICAgMHgwMDhmfSwKK3sweDg1Y2YsICAgIDB4MDA3M30sIHsweDg1ZDAsICAgIDB4MDBmN30sIHsweDg1ZDEsICAgIDB4MDA4Zn0sCit7MHg4NWQyLCAgICAweDAwNzR9LCB7MHg4NWQzLCAgICAweDAwZjd9LCB7MHg4NWQ0LCAgICAweDAwOGZ9LAorezB4ODVkNSwgICAgMHgwMDc1fSwgezB4ODVkNiwgICAgMHgwMGY3fSwgezB4ODVkNywgICAgMHgwMDhmfSwKK3sweDg1ZDgsICAgIDB4MDA3Nn0sIHsweDg1ZDksICAgIDB4MDBmN30sIHsweDg1ZGEsICAgIDB4MDA4Zn0sCit7MHg4NWRiLCAgICAweDAwNzd9LCB7MHg4NWRjLCAgICAweDAwZjd9LCB7MHg4NWRkLCAgICAweDAwOGZ9LAorezB4ODVkZSwgICAgMHgwMDc4fSwgezB4ODVkZiwgICAgMHgwMGY3fSwgezB4ODVlMCwgICAgMHgwMDhmfSwKK3sweDg1ZTEsICAgIDB4MDA3OX0sIHsweDg1ZTIsICAgIDB4MDBmN30sIHsweDg1ZTMsICAgIDB4MDA4Zn0sCit7MHg4NWU0LCAgICAweDAwN2F9LCB7MHg4NWU1LCAgICAweDAwZjd9LCB7MHg4NWU2LCAgICAweDAwOGZ9LAorezB4ODVlNywgICAgMHgwMDdifSwgezB4ODVlOCwgICAgMHgwMGI2fSwgezB4ODVlOSwgICAgMHgwMDEyfSwKK3sweDg1ZWEsICAgIDB4MDAwNH0sIHsweDg1ZWIsICAgIDB4MDA4YX0sIHsweDg1ZWMsICAgIDB4MDAxMH0sCit7MHg4NWVkLCAgICAweDAwYjd9LCB7MHg4NWVlLCAgICAweDAwMTJ9LCB7MHg4NWVmLCAgICAweDAwMDR9LAorezB4ODVmMCwgICAgMHgwMDg2fSwgezB4ODVmMSwgICAgMHgwMGU0fSwgezB4ODVmMiwgICAgMHgwMGI3fSwKK3sweDg1ZjMsICAgIDB4MDAxMn0sIHsweDg1ZjQsICAgIDB4MDA3MH0sIHsweDg1ZjUsICAgIDB4MDBiN30sCit7MHg4NWY2LCAgICAweDAwMTJ9LCB7MHg4NWY3LCAgICAweDAwMDd9LCB7MHg4NWY4LCAgICAweDAwZjd9LAorezB4ODVmOSwgICAgMHgwMDEyfSwgezB4ODVmYSwgICAgMHgwMDA1fSwgezB4ODVmYiwgICAgMHgwMGY3fSwKK3sweDg1ZmMsICAgIDB4MDAxMn0sIHsweDg1ZmQsICAgIDB4MDAwOX0sIHsweDg1ZmUsICAgIDB4MDA4Nn0sCit7MHg4NWZmLCAgICAweDAwMDh9LCB7MHg4NjAwLCAgICAweDAwYmF9LCB7MHg4NjAxLCAgICAweDAwMTJ9LAorezB4ODYwMiwgICAgMHgwMDA0fSwgezB4ODYwMywgICAgMHgwMGI3fSwgezB4ODYwNCwgICAgMHgwMDEyfSwKK3sweDg2MDUsICAgIDB4MDAwNH0sIHsweDg2MDYsICAgIDB4MDA4Nn0sIHsweDg2MDcsICAgIDB4MDBmN30sCit7MHg4NjA4LCAgICAweDAwYjR9LCB7MHg4NjA5LCAgICAweDAwMTJ9LCB7MHg4NjBhLCAgICAweDAwMDR9LAorezB4ODYwYiwgICAgMHgwMGI3fSwgezB4ODYwYywgICAgMHgwMDEyfSwgezB4ODYwZCwgICAgMHgwMDA0fSwKK3sweDg2MGUsICAgIDB4MDAwMX0sIHsweDg2MGYsICAgIDB4MDAwMX0sIHsweDg2MTAsICAgIDB4MDAwMX0sCit7MHg4NjExLCAgICAweDAwMDF9LCB7MHg4NjEyLCAgICAweDAwMDF9LCB7MHg4NjEzLCAgICAweDAwMDF9LAorezB4ODYxNCwgICAgMHgwMGI2fSwgezB4ODYxNSwgICAgMHgwMDEyfSwgezB4ODYxNiwgICAgMHgwMDA4fSwKK3sweDg2MTcsICAgIDB4MDAyN30sIHsweDg2MTgsICAgIDB4MDA3Zn0sIHsweDg2MTksICAgIDB4MDA4MX0sCit7MHg4NjFhLCAgICAweDAwODB9LCB7MHg4NjFiLCAgICAweDAwMjZ9LCB7MHg4NjFjLCAgICAweDAwMGJ9LAorezB4ODYxZCwgICAgMHgwMDg2fSwgezB4ODYxZSwgICAgMHgwMDA4fSwgezB4ODYxZiwgICAgMHgwMGNlfSwKK3sweDg2MjAsICAgIDB4MDA4Zn0sIHsweDg2MjEsICAgIDB4MDA3OX0sIHsweDg2MjIsICAgIDB4MDBiZH0sCit7MHg4NjIzLCAgICAweDAwODl9LCB7MHg4NjI0LCAgICAweDAwN2J9LCB7MHg4NjI1LCAgICAweDAwN2V9LAorezB4ODYyNiwgICAgMHgwMDg2fSwgezB4ODYyNywgICAgMHgwMDhlfSwgezB4ODYyOCwgICAgMHgwMDgxfSwKK3sweDg2MjksICAgIDB4MDA0MH0sIHsweDg2MmEsICAgIDB4MDAyNn0sIHsweDg2MmIsICAgIDB4MDAwYn0sCit7MHg4NjJjLCAgICAweDAwODZ9LCB7MHg4NjJkLCAgICAweDAwMDR9LCB7MHg4NjJlLCAgICAweDAwY2V9LAorezB4ODYyZiwgICAgMHgwMDhmfSwgezB4ODYzMCwgICAgMHgwMDc2fSwgezB4ODYzMSwgICAgMHgwMGJkfSwKK3sweDg2MzIsICAgIDB4MDA4OX0sIHsweDg2MzMsICAgIDB4MDA3Yn0sIHsweDg2MzQsICAgIDB4MDA3ZX0sCit7MHg4NjM1LCAgICAweDAwODZ9LCB7MHg4NjM2LCAgICAweDAwOGV9LCB7MHg4NjM3LCAgICAweDAwODF9LAorezB4ODYzOCwgICAgMHgwMDIwfSwgezB4ODYzOSwgICAgMHgwMDI2fSwgezB4ODYzYSwgICAgMHgwMDBifSwKK3sweDg2M2IsICAgIDB4MDA4Nn0sIHsweDg2M2MsICAgIDB4MDAwMn0sIHsweDg2M2QsICAgIDB4MDBjZX0sCit7MHg4NjNlLCAgICAweDAwOGZ9LCB7MHg4NjNmLCAgICAweDAwNzN9LCB7MHg4NjQwLCAgICAweDAwYmR9LAorezB4ODY0MSwgICAgMHgwMDg5fSwgezB4ODY0MiwgICAgMHgwMDdifSwgezB4ODY0MywgICAgMHgwMDdlfSwKK3sweDg2NDQsICAgIDB4MDA4Nn0sIHsweDg2NDUsICAgIDB4MDA4ZX0sIHsweDg2NDYsICAgIDB4MDA4MX0sCit7MHg4NjQ3LCAgICAweDAwMTB9LCB7MHg4NjQ4LCAgICAweDAwMjZ9LCB7MHg4NjQ5LCAgICAweDAwMGJ9LAorezB4ODY0YSwgICAgMHgwMDg2fSwgezB4ODY0YiwgICAgMHgwMDAxfSwgezB4ODY0YywgICAgMHgwMGNlfSwKK3sweDg2NGQsICAgIDB4MDA4Zn0sIHsweDg2NGUsICAgIDB4MDA3MH0sIHsweDg2NGYsICAgIDB4MDBiZH0sCit7MHg4NjUwLCAgICAweDAwODl9LCB7MHg4NjUxLCAgICAweDAwN2J9LCB7MHg4NjUyLCAgICAweDAwN2V9LAorezB4ODY1MywgICAgMHgwMDg2fSwgezB4ODY1NCwgICAgMHgwMDhlfSwgezB4ODY1NSwgICAgMHgwMDgxfSwKK3sweDg2NTYsICAgIDB4MDAwOH0sIHsweDg2NTcsICAgIDB4MDAyNn0sIHsweDg2NTgsICAgIDB4MDAwYn0sCit7MHg4NjU5LCAgICAweDAwODZ9LCB7MHg4NjVhLCAgICAweDAwMDh9LCB7MHg4NjViLCAgICAweDAwY2V9LAorezB4ODY1YywgICAgMHgwMDhmfSwgezB4ODY1ZCwgICAgMHgwMDc5fSwgezB4ODY1ZSwgICAgMHgwMGJkfSwKK3sweDg2NWYsICAgIDB4MDA4OX0sIHsweDg2NjAsICAgIDB4MDA3Zn0sIHsweDg2NjEsICAgIDB4MDA3ZX0sCit7MHg4NjYyLCAgICAweDAwODZ9LCB7MHg4NjYzLCAgICAweDAwOGV9LCB7MHg4NjY0LCAgICAweDAwODF9LAorezB4ODY2NSwgICAgMHgwMDA0fSwgezB4ODY2NiwgICAgMHgwMDI2fSwgezB4ODY2NywgICAgMHgwMDBifSwKK3sweDg2NjgsICAgIDB4MDA4Nn0sIHsweDg2NjksICAgIDB4MDAwNH0sIHsweDg2NmEsICAgIDB4MDBjZX0sCit7MHg4NjZiLCAgICAweDAwOGZ9LCB7MHg4NjZjLCAgICAweDAwNzZ9LCB7MHg4NjZkLCAgICAweDAwYmR9LAorezB4ODY2ZSwgICAgMHgwMDg5fSwgezB4ODY2ZiwgICAgMHgwMDdmfSwgezB4ODY3MCwgICAgMHgwMDdlfSwKK3sweDg2NzEsICAgIDB4MDA4Nn0sIHsweDg2NzIsICAgIDB4MDA4ZX0sIHsweDg2NzMsICAgIDB4MDA4MX0sCit7MHg4Njc0LCAgICAweDAwMDJ9LCB7MHg4Njc1LCAgICAweDAwMjZ9LCB7MHg4Njc2LCAgICAweDAwMGJ9LAorezB4ODY3NywgICAgMHgwMDhhfSwgezB4ODY3OCwgICAgMHgwMDAyfSwgezB4ODY3OSwgICAgMHgwMGNlfSwKK3sweDg2N2EsICAgIDB4MDA4Zn0sIHsweDg2N2IsICAgIDB4MDA3M30sIHsweDg2N2MsICAgIDB4MDBiZH0sCit7MHg4NjdkLCAgICAweDAwODl9LCB7MHg4NjdlLCAgICAweDAwN2Z9LCB7MHg4NjdmLCAgICAweDAwN2V9LAorezB4ODY4MCwgICAgMHgwMDg2fSwgezB4ODY4MSwgICAgMHgwMDhlfSwgezB4ODY4MiwgICAgMHgwMDgxfSwKK3sweDg2ODMsICAgIDB4MDAwMX0sIHsweDg2ODQsICAgIDB4MDAyNn0sIHsweDg2ODUsICAgIDB4MDAwOH0sCit7MHg4Njg2LCAgICAweDAwODZ9LCB7MHg4Njg3LCAgICAweDAwMDF9LCB7MHg4Njg4LCAgICAweDAwY2V9LAorezB4ODY4OSwgICAgMHgwMDhmfSwgezB4ODY4YSwgICAgMHgwMDcwfSwgezB4ODY4YiwgICAgMHgwMGJkfSwKK3sweDg2OGMsICAgIDB4MDA4OX0sIHsweDg2OGQsICAgIDB4MDA3Zn0sIHsweDg2OGUsICAgIDB4MDBiNn0sCit7MHg4NjhmLCAgICAweDAwOGZ9LCB7MHg4NjkwLCAgICAweDAwN2Z9LCB7MHg4NjkxLCAgICAweDAwODF9LAorezB4ODY5MiwgICAgMHgwMDBmfSwgezB4ODY5MywgICAgMHgwMDI2fSwgezB4ODY5NCwgICAgMHgwMDAzfSwKK3sweDg2OTUsICAgIDB4MDA3ZX0sIHsweDg2OTYsICAgIDB4MDA4N30sIHsweDg2OTcsICAgIDB4MDA0N30sCit7MHg4Njk4LCAgICAweDAwYjZ9LCB7MHg4Njk5LCAgICAweDAwMTJ9LCB7MHg4NjlhLCAgICAweDAwMDl9LAorezB4ODY5YiwgICAgMHgwMDg0fSwgezB4ODY5YywgICAgMHgwMDAzfSwgezB4ODY5ZCwgICAgMHgwMDgxfSwKK3sweDg2OWUsICAgIDB4MDAwM30sIHsweDg2OWYsICAgIDB4MDAyN30sIHsweDg2YTAsICAgIDB4MDAwNn0sCit7MHg4NmExLCAgICAweDAwN2N9LCB7MHg4NmEyLCAgICAweDAwMTJ9LCB7MHg4NmEzLCAgICAweDAwMDl9LAorezB4ODZhNCwgICAgMHgwMDdlfSwgezB4ODZhNSwgICAgMHgwMDg1fSwgezB4ODZhNiwgICAgMHgwMGZlfSwKK3sweDg2YTcsICAgIDB4MDBiNn0sIHsweDg2YTgsICAgIDB4MDAxMn0sIHsweDg2YTksICAgIDB4MDAwNn0sCit7MHg4NmFhLCAgICAweDAwODR9LCB7MHg4NmFiLCAgICAweDAwMDd9LCB7MHg4NmFjLCAgICAweDAwODF9LAorezB4ODZhZCwgICAgMHgwMDA3fSwgezB4ODZhZSwgICAgMHgwMDI3fSwgezB4ODZhZiwgICAgMHgwMDA4fSwKK3sweDg2YjAsICAgIDB4MDA4Yn0sIHsweDg2YjEsICAgIDB4MDAwMX0sIHsweDg2YjIsICAgIDB4MDBiN30sCit7MHg4NmIzLCAgICAweDAwMTJ9LCB7MHg4NmI0LCAgICAweDAwMDZ9LCB7MHg4NmI1LCAgICAweDAwN2V9LAorezB4ODZiNiwgICAgMHgwMDg2fSwgezB4ODZiNywgICAgMHgwMGQ1fSwgezB4ODZiOCwgICAgMHgwMGI2fSwKK3sweDg2YjksICAgIDB4MDA4Zn0sIHsweDg2YmEsICAgIDB4MDA4Mn0sIHsweDg2YmIsICAgIDB4MDAyNn0sCit7MHg4NmJjLCAgICAweDAwMGF9LCB7MHg4NmJkLCAgICAweDAwN2N9LCB7MHg4NmJlLCAgICAweDAwOGZ9LAorezB4ODZiZiwgICAgMHgwMDgyfSwgezB4ODZjMCwgICAgMHgwMDRmfSwgezB4ODZjMSwgICAgMHgwMGI3fSwKK3sweDg2YzIsICAgIDB4MDAxMn0sIHsweDg2YzMsICAgIDB4MDAwNn0sIHsweDg2YzQsICAgIDB4MDA3ZX0sCit7MHg4NmM1LCAgICAweDAwODV9LCB7MHg4NmM2LCAgICAweDAwYzB9LCB7MHg4NmM3LCAgICAweDAwYjZ9LAorezB4ODZjOCwgICAgMHgwMDEyfSwgezB4ODZjOSwgICAgMHgwMDA2fSwgezB4ODZjYSwgICAgMHgwMDg0fSwKK3sweDg2Y2IsICAgIDB4MDAzZn0sIHsweDg2Y2MsICAgIDB4MDA4MX0sIHsweDg2Y2QsICAgIDB4MDAzZn0sCit7MHg4NmNlLCAgICAweDAwMjd9LCB7MHg4NmNmLCAgICAweDAwMTB9LCB7MHg4NmQwLCAgICAweDAwOGJ9LAorezB4ODZkMSwgICAgMHgwMDA4fSwgezB4ODZkMiwgICAgMHgwMGI3fSwgezB4ODZkMywgICAgMHgwMDEyfSwKK3sweDg2ZDQsICAgIDB4MDAwNn0sIHsweDg2ZDUsICAgIDB4MDBiNn0sIHsweDg2ZDYsICAgIDB4MDAxMn0sCit7MHg4NmQ3LCAgICAweDAwMDl9LCB7MHg4NmQ4LCAgICAweDAwODR9LCB7MHg4NmQ5LCAgICAweDAwZmN9LAorezB4ODZkYSwgICAgMHgwMGI3fSwgezB4ODZkYiwgICAgMHgwMDEyfSwgezB4ODZkYywgICAgMHgwMDA5fSwKK3sweDg2ZGQsICAgIDB4MDA3ZX0sIHsweDg2ZGUsICAgIDB4MDA4NX0sIHsweDg2ZGYsICAgIDB4MDBmZX0sCit7MHg4NmUwLCAgICAweDAwY2V9LCB7MHg4NmUxLCAgICAweDAwOGZ9LCB7MHg4NmUyLCAgICAweDAwNzB9LAorezB4ODZlMywgICAgMHgwMDE4fSwgezB4ODZlNCwgICAgMHgwMGNlfSwgezB4ODZlNSwgICAgMHgwMDhmfSwKK3sweDg2ZTYsICAgIDB4MDA4NH0sIHsweDg2ZTcsICAgIDB4MDBjNn0sIHsweDg2ZTgsICAgIDB4MDAwY30sCit7MHg4NmU5LCAgICAweDAwYmR9LCB7MHg4NmVhLCAgICAweDAwODl9LCB7MHg4NmViLCAgICAweDAwNmZ9LAorezB4ODZlYywgICAgMHgwMGNlfSwgezB4ODZlZCwgICAgMHgwMDhmfSwgezB4ODZlZSwgICAgMHgwMDg0fSwKK3sweDg2ZWYsICAgIDB4MDAxOH0sIHsweDg2ZjAsICAgIDB4MDBjZX0sIHsweDg2ZjEsICAgIDB4MDA4Zn0sCit7MHg4NmYyLCAgICAweDAwNzB9LCB7MHg4NmYzLCAgICAweDAwYzZ9LCB7MHg4NmY0LCAgICAweDAwMGN9LAorezB4ODZmNSwgICAgMHgwMGJkfSwgezB4ODZmNiwgICAgMHgwMDg5fSwgezB4ODZmNywgICAgMHgwMDZmfSwKK3sweDg2ZjgsICAgIDB4MDBkNn0sIHsweDg2ZjksICAgIDB4MDA4M30sIHsweDg2ZmEsICAgIDB4MDBjMX0sCit7MHg4NmZiLCAgICAweDAwNGZ9LCB7MHg4NmZjLCAgICAweDAwMmR9LCB7MHg4NmZkLCAgICAweDAwMDN9LAorezB4ODZmZSwgICAgMHgwMDdlfSwgezB4ODZmZiwgICAgMHgwMDg3fSwgezB4ODcwMCwgICAgMHgwMDQwfSwKK3sweDg3MDEsICAgIDB4MDBiNn0sIHsweDg3MDIsICAgIDB4MDA4Zn0sIHsweDg3MDMsICAgIDB4MDA3Zn0sCit7MHg4NzA0LCAgICAweDAwODF9LCB7MHg4NzA1LCAgICAweDAwMDd9LCB7MHg4NzA2LCAgICAweDAwMjd9LAorezB4ODcwNywgICAgMHgwMDBmfSwgezB4ODcwOCwgICAgMHgwMDgxfSwgezB4ODcwOSwgICAgMHgwMDBifSwKK3sweDg3MGEsICAgIDB4MDAyN30sIHsweDg3MGIsICAgIDB4MDAxNX0sIHsweDg3MGMsICAgIDB4MDA4MX0sCit7MHg4NzBkLCAgICAweDAwMGR9LCB7MHg4NzBlLCAgICAweDAwMjd9LCB7MHg4NzBmLCAgICAweDAwMWJ9LAorezB4ODcxMCwgICAgMHgwMDgxfSwgezB4ODcxMSwgICAgMHgwMDBlfSwgezB4ODcxMiwgICAgMHgwMDI3fSwKK3sweDg3MTMsICAgIDB4MDAyMX0sIHsweDg3MTQsICAgIDB4MDA3ZX0sIHsweDg3MTUsICAgIDB4MDA4N30sCit7MHg4NzE2LCAgICAweDAwNDB9LCB7MHg4NzE3LCAgICAweDAwZjd9LCB7MHg4NzE4LCAgICAweDAwOGZ9LAorezB4ODcxOSwgICAgMHgwMDdifSwgezB4ODcxYSwgICAgMHgwMDg2fSwgezB4ODcxYiwgICAgMHgwMDAyfSwKK3sweDg3MWMsICAgIDB4MDBiN30sIHsweDg3MWQsICAgIDB4MDA4Zn0sIHsweDg3MWUsICAgIDB4MDA3YX0sCit7MHg4NzFmLCAgICAweDAwMjB9LCB7MHg4NzIwLCAgICAweDAwMWN9LCB7MHg4NzIxLCAgICAweDAwZjd9LAorezB4ODcyMiwgICAgMHgwMDhmfSwgezB4ODcyMywgICAgMHgwMDc4fSwgezB4ODcyNCwgICAgMHgwMDg2fSwKK3sweDg3MjUsICAgIDB4MDAwMn0sIHsweDg3MjYsICAgIDB4MDBiN30sIHsweDg3MjcsICAgIDB4MDA4Zn0sCit7MHg4NzI4LCAgICAweDAwNzd9LCB7MHg4NzI5LCAgICAweDAwMjB9LCB7MHg4NzJhLCAgICAweDAwMTJ9LAorezB4ODcyYiwgICAgMHgwMGY3fSwgezB4ODcyYywgICAgMHgwMDhmfSwgezB4ODcyZCwgICAgMHgwMDc1fSwKK3sweDg3MmUsICAgIDB4MDA4Nn0sIHsweDg3MmYsICAgIDB4MDAwMn0sIHsweDg3MzAsICAgIDB4MDBiN30sCit7MHg4NzMxLCAgICAweDAwOGZ9LCB7MHg4NzMyLCAgICAweDAwNzR9LCB7MHg4NzMzLCAgICAweDAwMjB9LAorezB4ODczNCwgICAgMHgwMDA4fSwgezB4ODczNSwgICAgMHgwMGY3fSwgezB4ODczNiwgICAgMHgwMDhmfSwKK3sweDg3MzcsICAgIDB4MDA3Mn0sIHsweDg3MzgsICAgIDB4MDA4Nn0sIHsweDg3MzksICAgIDB4MDAwMn0sCit7MHg4NzNhLCAgICAweDAwYjd9LCB7MHg4NzNiLCAgICAweDAwOGZ9LCB7MHg4NzNjLCAgICAweDAwNzF9LAorezB4ODczZCwgICAgMHgwMDdlfSwgezB4ODczZSwgICAgMHgwMDg3fSwgezB4ODczZiwgICAgMHgwMDQ3fSwKK3sweDg3NDAsICAgIDB4MDA4Nn0sIHsweDg3NDEsICAgIDB4MDAwNH0sIHsweDg3NDIsICAgIDB4MDA5N30sCit7MHg4NzQzLCAgICAweDAwNDB9LCB7MHg4NzQ0LCAgICAweDAwN2V9LCB7MHg4NzQ1LCAgICAweDAwODl9LAorezB4ODc0NiwgICAgMHgwMDZlfSwgezB4ODc0NywgICAgMHgwMGNlfSwgezB4ODc0OCwgICAgMHgwMDhmfSwKK3sweDg3NDksICAgIDB4MDA3Mn0sIHsweDg3NGEsICAgIDB4MDBiZH0sIHsweDg3NGIsICAgIDB4MDA4OX0sCit7MHg4NzRjLCAgICAweDAwZjd9LCB7MHg4NzRkLCAgICAweDAwY2V9LCB7MHg4NzRlLCAgICAweDAwOGZ9LAorezB4ODc0ZiwgICAgMHgwMDc1fSwgezB4ODc1MCwgICAgMHgwMGJkfSwgezB4ODc1MSwgICAgMHgwMDg5fSwKK3sweDg3NTIsICAgIDB4MDBmN30sIHsweDg3NTMsICAgIDB4MDBjZX0sIHsweDg3NTQsICAgIDB4MDA4Zn0sCit7MHg4NzU1LCAgICAweDAwNzh9LCB7MHg4NzU2LCAgICAweDAwYmR9LCB7MHg4NzU3LCAgICAweDAwODl9LAorezB4ODc1OCwgICAgMHgwMGY3fSwgezB4ODc1OSwgICAgMHgwMGNlfSwgezB4ODc1YSwgICAgMHgwMDhmfSwKK3sweDg3NWIsICAgIDB4MDA3Yn0sIHsweDg3NWMsICAgIDB4MDBiZH0sIHsweDg3NWQsICAgIDB4MDA4OX0sCit7MHg4NzVlLCAgICAweDAwZjd9LCB7MHg4NzVmLCAgICAweDAwNGZ9LCB7MHg4NzYwLCAgICAweDAwYjd9LAorezB4ODc2MSwgICAgMHgwMDhmfSwgezB4ODc2MiwgICAgMHgwMDdkfSwgezB4ODc2MywgICAgMHgwMGI3fSwKK3sweDg3NjQsICAgIDB4MDA4Zn0sIHsweDg3NjUsICAgIDB4MDA4MX0sIHsweDg3NjYsICAgIDB4MDBiNn0sCit7MHg4NzY3LCAgICAweDAwOGZ9LCB7MHg4NzY4LCAgICAweDAwNzJ9LCB7MHg4NzY5LCAgICAweDAwMjd9LAorezB4ODc2YSwgICAgMHgwMDQ3fSwgezB4ODc2YiwgICAgMHgwMDdjfSwgezB4ODc2YywgICAgMHgwMDhmfSwKK3sweDg3NmQsICAgIDB4MDA3ZH0sIHsweDg3NmUsICAgIDB4MDBiNn0sIHsweDg3NmYsICAgIDB4MDA4Zn0sCit7MHg4NzcwLCAgICAweDAwNzV9LCB7MHg4NzcxLCAgICAweDAwMjd9LCB7MHg4NzcyLCAgICAweDAwM2Z9LAorezB4ODc3MywgICAgMHgwMDdjfSwgezB4ODc3NCwgICAgMHgwMDhmfSwgezB4ODc3NSwgICAgMHgwMDdkfSwKK3sweDg3NzYsICAgIDB4MDBiNn0sIHsweDg3NzcsICAgIDB4MDA4Zn0sIHsweDg3NzgsICAgIDB4MDA3OH0sCit7MHg4Nzc5LCAgICAweDAwMjd9LCB7MHg4NzdhLCAgICAweDAwMzd9LCB7MHg4NzdiLCAgICAweDAwN2N9LAorezB4ODc3YywgICAgMHgwMDhmfSwgezB4ODc3ZCwgICAgMHgwMDdkfSwgezB4ODc3ZSwgICAgMHgwMGI2fSwKK3sweDg3N2YsICAgIDB4MDA4Zn0sIHsweDg3ODAsICAgIDB4MDA3Yn0sIHsweDg3ODEsICAgIDB4MDAyN30sCit7MHg4NzgyLCAgICAweDAwMmZ9LCB7MHg4NzgzLCAgICAweDAwN2Z9LCB7MHg4Nzg0LCAgICAweDAwOGZ9LAorezB4ODc4NSwgICAgMHgwMDdkfSwgezB4ODc4NiwgICAgMHgwMDdjfSwgezB4ODc4NywgICAgMHgwMDhmfSwKK3sweDg3ODgsICAgIDB4MDA4MX0sIHsweDg3ODksICAgIDB4MDA3YX0sIHsweDg3OGEsICAgIDB4MDA4Zn0sCit7MHg4NzhiLCAgICAweDAwNzJ9LCB7MHg4NzhjLCAgICAweDAwMjd9LCB7MHg4NzhkLCAgICAweDAwMWJ9LAorezB4ODc4ZSwgICAgMHgwMDdjfSwgezB4ODc4ZiwgICAgMHgwMDhmfSwgezB4ODc5MCwgICAgMHgwMDdkfSwKK3sweDg3OTEsICAgIDB4MDA3YX0sIHsweDg3OTIsICAgIDB4MDA4Zn0sIHsweDg3OTMsICAgIDB4MDA3NX0sCit7MHg4Nzk0LCAgICAweDAwMjd9LCB7MHg4Nzk1LCAgICAweDAwMTZ9LCB7MHg4Nzk2LCAgICAweDAwN2N9LAorezB4ODc5NywgICAgMHgwMDhmfSwgezB4ODc5OCwgICAgMHgwMDdkfSwgezB4ODc5OSwgICAgMHgwMDdhfSwKK3sweDg3OWEsICAgIDB4MDA4Zn0sIHsweDg3OWIsICAgIDB4MDA3OH0sIHsweDg3OWMsICAgIDB4MDAyN30sCit7MHg4NzlkLCAgICAweDAwMTF9LCB7MHg4NzllLCAgICAweDAwN2N9LCB7MHg4NzlmLCAgICAweDAwOGZ9LAorezB4ODdhMCwgICAgMHgwMDdkfSwgezB4ODdhMSwgICAgMHgwMDdhfSwgezB4ODdhMiwgICAgMHgwMDhmfSwKK3sweDg3YTMsICAgIDB4MDA3Yn0sIHsweDg3YTQsICAgIDB4MDAyN30sIHsweDg3YTUsICAgIDB4MDAwY30sCit7MHg4N2E2LCAgICAweDAwN2V9LCB7MHg4N2E3LCAgICAweDAwODd9LCB7MHg4N2E4LCAgICAweDAwODN9LAorezB4ODdhOSwgICAgMHgwMDdhfSwgezB4ODdhYSwgICAgMHgwMDhmfSwgezB4ODdhYiwgICAgMHgwMDc1fSwKK3sweDg3YWMsICAgIDB4MDA3YX0sIHsweDg3YWQsICAgIDB4MDA4Zn0sIHsweDg3YWUsICAgIDB4MDA3OH0sCit7MHg4N2FmLCAgICAweDAwN2F9LCB7MHg4N2IwLCAgICAweDAwOGZ9LCB7MHg4N2IxLCAgICAweDAwN2J9LAorezB4ODdiMiwgICAgMHgwMGNlfSwgezB4ODdiMywgICAgMHgwMGMxfSwgezB4ODdiNCwgICAgMHgwMGZjfSwKK3sweDg3YjUsICAgIDB4MDBmNn0sIHsweDg3YjYsICAgIDB4MDA4Zn0sIHsweDg3YjcsICAgIDB4MDA3ZH0sCit7MHg4N2I4LCAgICAweDAwM2F9LCB7MHg4N2I5LCAgICAweDAwYTZ9LCB7MHg4N2JhLCAgICAweDAwMDB9LAorezB4ODdiYiwgICAgMHgwMGI3fSwgezB4ODdiYywgICAgMHgwMDEyfSwgezB4ODdiZCwgICAgMHgwMDcwfSwKK3sweDg3YmUsICAgIDB4MDBiNn0sIHsweDg3YmYsICAgIDB4MDA4Zn0sIHsweDg3YzAsICAgIDB4MDA3Mn0sCit7MHg4N2MxLCAgICAweDAwMjZ9LCB7MHg4N2MyLCAgICAweDAwMDN9LCB7MHg4N2MzLCAgICAweDAwN2V9LAorezB4ODdjNCwgICAgMHgwMDg3fSwgezB4ODdjNSwgICAgMHgwMGZhfSwgezB4ODdjNiwgICAgMHgwMGI2fSwKK3sweDg3YzcsICAgIDB4MDA4Zn0sIHsweDg3YzgsICAgIDB4MDA3NX0sIHsweDg3YzksICAgIDB4MDAyNn0sCit7MHg4N2NhLCAgICAweDAwMGF9LCB7MHg4N2NiLCAgICAweDAwMTh9LCB7MHg4N2NjLCAgICAweDAwY2V9LAorezB4ODdjZCwgICAgMHgwMDhmfSwgezB4ODdjZSwgICAgMHgwMDczfSwgezB4ODdjZiwgICAgMHgwMGJkfSwKK3sweDg3ZDAsICAgIDB4MDA4OX0sIHsweDg3ZDEsICAgIDB4MDBkNX0sIHsweDg3ZDIsICAgIDB4MDA3ZX0sCit7MHg4N2QzLCAgICAweDAwODd9LCB7MHg4N2Q0LCAgICAweDAwZmF9LCB7MHg4N2Q1LCAgICAweDAwYjZ9LAorezB4ODdkNiwgICAgMHgwMDhmfSwgezB4ODdkNywgICAgMHgwMDc4fSwgezB4ODdkOCwgICAgMHgwMDI2fSwKK3sweDg3ZDksICAgIDB4MDAwYX0sIHsweDg3ZGEsICAgIDB4MDAxOH0sIHsweDg3ZGIsICAgIDB4MDBjZX0sCit7MHg4N2RjLCAgICAweDAwOGZ9LCB7MHg4N2RkLCAgICAweDAwNzZ9LCB7MHg4N2RlLCAgICAweDAwYmR9LAorezB4ODdkZiwgICAgMHgwMDg5fSwgezB4ODdlMCwgICAgMHgwMGQ1fSwgezB4ODdlMSwgICAgMHgwMDdlfSwKK3sweDg3ZTIsICAgIDB4MDA4N30sIHsweDg3ZTMsICAgIDB4MDBmYX0sIHsweDg3ZTQsICAgIDB4MDBiNn0sCit7MHg4N2U1LCAgICAweDAwOGZ9LCB7MHg4N2U2LCAgICAweDAwN2J9LCB7MHg4N2U3LCAgICAweDAwMjZ9LAorezB4ODdlOCwgICAgMHgwMDBhfSwgezB4ODdlOSwgICAgMHgwMDE4fSwgezB4ODdlYSwgICAgMHgwMGNlfSwKK3sweDg3ZWIsICAgIDB4MDA4Zn0sIHsweDg3ZWMsICAgIDB4MDA3OX0sIHsweDg3ZWQsICAgIDB4MDBiZH0sCit7MHg4N2VlLCAgICAweDAwODl9LCB7MHg4N2VmLCAgICAweDAwZDV9LCB7MHg4N2YwLCAgICAweDAwN2V9LAorezB4ODdmMSwgICAgMHgwMDg3fSwgezB4ODdmMiwgICAgMHgwMGZhfSwgezB4ODdmMywgICAgMHgwMDg2fSwKK3sweDg3ZjQsICAgIDB4MDAwNX0sIHsweDg3ZjUsICAgIDB4MDA5N30sIHsweDg3ZjYsICAgIDB4MDA0MH0sCit7MHg4N2Y3LCAgICAweDAwN2V9LCB7MHg4N2Y4LCAgICAweDAwODl9LCB7MHg4N2Y5LCAgICAweDAwNmV9LAorezB4ODdmYSwgICAgMHgwMGI2fSwgezB4ODdmYiwgICAgMHgwMDhmfSwgezB4ODdmYywgICAgMHgwMDc1fSwKK3sweDg3ZmQsICAgIDB4MDA4MX0sIHsweDg3ZmUsICAgIDB4MDAwN30sIHsweDg3ZmYsICAgIDB4MDAyZX0sCit7MHg4ODAwLCAgICAweDAwZjJ9LCB7MHg4ODAxLCAgICAweDAwZjZ9LCB7MHg4ODAyLCAgICAweDAwMTJ9LAorezB4ODgwMywgICAgMHgwMDA2fSwgezB4ODgwNCwgICAgMHgwMGM0fSwgezB4ODgwNSwgICAgMHgwMGY4fSwKK3sweDg4MDYsICAgIDB4MDAxYn0sIHsweDg4MDcsICAgIDB4MDBiN30sIHsweDg4MDgsICAgIDB4MDAxMn0sCit7MHg4ODA5LCAgICAweDAwMDZ9LCB7MHg4ODBhLCAgICAweDAwYjZ9LCB7MHg4ODBiLCAgICAweDAwOGZ9LAorezB4ODgwYywgICAgMHgwMDc4fSwgezB4ODgwZCwgICAgMHgwMDgxfSwgezB4ODgwZSwgICAgMHgwMDA3fSwKK3sweDg4MGYsICAgIDB4MDAyZX0sIHsweDg4MTAsICAgIDB4MDBlMn0sIHsweDg4MTEsICAgIDB4MDA0OH0sCit7MHg4ODEyLCAgICAweDAwNDh9LCB7MHg4ODEzLCAgICAweDAwNDh9LCB7MHg4ODE0LCAgICAweDAwZjZ9LAorezB4ODgxNSwgICAgMHgwMDEyfSwgezB4ODgxNiwgICAgMHgwMDA2fSwgezB4ODgxNywgICAgMHgwMGM0fSwKK3sweDg4MTgsICAgIDB4MDBjN30sIHsweDg4MTksICAgIDB4MDAxYn0sIHsweDg4MWEsICAgIDB4MDBiN30sCit7MHg4ODFiLCAgICAweDAwMTJ9LCB7MHg4ODFjLCAgICAweDAwMDZ9LCB7MHg4ODFkLCAgICAweDAwYjZ9LAorezB4ODgxZSwgICAgMHgwMDhmfSwgezB4ODgxZiwgICAgMHgwMDdifSwgezB4ODgyMCwgICAgMHgwMDgxfSwKK3sweDg4MjEsICAgIDB4MDAwN30sIHsweDg4MjIsICAgIDB4MDAyZX0sIHsweDg4MjMsICAgIDB4MDBjZn0sCit7MHg4ODI0LCAgICAweDAwZjZ9LCB7MHg4ODI1LCAgICAweDAwMTJ9LCB7MHg4ODI2LCAgICAweDAwMDV9LAorezB4ODgyNywgICAgMHgwMGM0fSwgezB4ODgyOCwgICAgMHgwMGY4fSwgezB4ODgyOSwgICAgMHgwMDFifSwKK3sweDg4MmEsICAgIDB4MDBiN30sIHsweDg4MmIsICAgIDB4MDAxMn0sIHsweDg4MmMsICAgIDB4MDAwNX0sCit7MHg4ODJkLCAgICAweDAwODZ9LCB7MHg4ODJlLCAgICAweDAwMDB9LCB7MHg4ODJmLCAgICAweDAwZjZ9LAorezB4ODgzMCwgICAgMHgwMDhmfSwgezB4ODgzMSwgICAgMHgwMDcxfSwgezB4ODgzMiwgICAgMHgwMGJkfSwKK3sweDg4MzMsICAgIDB4MDA4OX0sIHsweDg4MzQsICAgIDB4MDA5NH0sIHsweDg4MzUsICAgIDB4MDA4Nn0sCit7MHg4ODM2LCAgICAweDAwMDF9LCB7MHg4ODM3LCAgICAweDAwZjZ9LCB7MHg4ODM4LCAgICAweDAwOGZ9LAorezB4ODgzOSwgICAgMHgwMDc0fSwgezB4ODgzYSwgICAgMHgwMGJkfSwgezB4ODgzYiwgICAgMHgwMDg5fSwKK3sweDg4M2MsICAgIDB4MDA5NH0sIHsweDg4M2QsICAgIDB4MDA4Nn0sIHsweDg4M2UsICAgIDB4MDAwMn0sCit7MHg4ODNmLCAgICAweDAwZjZ9LCB7MHg4ODQwLCAgICAweDAwOGZ9LCB7MHg4ODQxLCAgICAweDAwNzd9LAorezB4ODg0MiwgICAgMHgwMGJkfSwgezB4ODg0MywgICAgMHgwMDg5fSwgezB4ODg0NCwgICAgMHgwMDk0fSwKK3sweDg4NDUsICAgIDB4MDA4Nn0sIHsweDg4NDYsICAgIDB4MDAwM30sIHsweDg4NDcsICAgIDB4MDBmNn0sCit7MHg4ODQ4LCAgICAweDAwOGZ9LCB7MHg4ODQ5LCAgICAweDAwN2F9LCB7MHg4ODRhLCAgICAweDAwYmR9LAorezB4ODg0YiwgICAgMHgwMDg5fSwgezB4ODg0YywgICAgMHgwMDk0fSwgezB4ODg0ZCwgICAgMHgwMGNlfSwKK3sweDg4NGUsICAgIDB4MDA4Zn0sIHsweDg4NGYsICAgIDB4MDA3MH0sIHsweDg4NTAsICAgIDB4MDBhNn0sCit7MHg4ODUxLCAgICAweDAwMDF9LCB7MHg4ODUyLCAgICAweDAwODF9LCB7MHg4ODUzLCAgICAweDAwMDF9LAorezB4ODg1NCwgICAgMHgwMDI3fSwgezB4ODg1NSwgICAgMHgwMDA3fSwgezB4ODg1NiwgICAgMHgwMDgxfSwKK3sweDg4NTcsICAgIDB4MDAwM30sIHsweDg4NTgsICAgIDB4MDAyN30sIHsweDg4NTksICAgIDB4MDAwM30sCit7MHg4ODVhLCAgICAweDAwN2V9LCB7MHg4ODViLCAgICAweDAwODh9LCB7MHg4ODVjLCAgICAweDAwNjZ9LAorezB4ODg1ZCwgICAgMHgwMGE2fSwgezB4ODg1ZSwgICAgMHgwMDAwfSwgezB4ODg1ZiwgICAgMHgwMGI4fSwKK3sweDg4NjAsICAgIDB4MDA4Zn0sIHsweDg4NjEsICAgIDB4MDA4MX0sIHsweDg4NjIsICAgIDB4MDA4NH0sCit7MHg4ODYzLCAgICAweDAwMDF9LCB7MHg4ODY0LCAgICAweDAwMjZ9LCB7MHg4ODY1LCAgICAweDAwMGJ9LAorezB4ODg2NiwgICAgMHgwMDhjfSwgezB4ODg2NywgICAgMHgwMDhmfSwgezB4ODg2OCwgICAgMHgwMDc5fSwKK3sweDg4NjksICAgIDB4MDAyY30sIHsweDg4NmEsICAgIDB4MDAwZX0sIHsweDg4NmIsICAgIDB4MDAwOH0sCit7MHg4ODZjLCAgICAweDAwMDh9LCB7MHg4ODZkLCAgICAweDAwMDh9LCB7MHg4ODZlLCAgICAweDAwN2V9LAorezB4ODg2ZiwgICAgMHgwMDg4fSwgezB4ODg3MCwgICAgMHgwMDUwfSwgezB4ODg3MSwgICAgMHgwMGI2fSwKK3sweDg4NzIsICAgIDB4MDAxMn0sIHsweDg4NzMsICAgIDB4MDAwNH0sIHsweDg4NzQsICAgIDB4MDA4YX0sCit7MHg4ODc1LCAgICAweDAwNDB9LCB7MHg4ODc2LCAgICAweDAwYjd9LCB7MHg4ODc3LCAgICAweDAwMTJ9LAorezB4ODg3OCwgICAgMHgwMDA0fSwgezB4ODg3OSwgICAgMHgwMGI2fSwgezB4ODg3YSwgICAgMHgwMDEyfSwKK3sweDg4N2IsICAgIDB4MDAwNH0sIHsweDg4N2MsICAgIDB4MDA4NH0sIHsweDg4N2QsICAgIDB4MDBmYn0sCit7MHg4ODdlLCAgICAweDAwODR9LCB7MHg4ODdmLCAgICAweDAwZWZ9LCB7MHg4ODgwLCAgICAweDAwYjd9LAorezB4ODg4MSwgICAgMHgwMDEyfSwgezB4ODg4MiwgICAgMHgwMDA0fSwgezB4ODg4MywgICAgMHgwMGI2fSwKK3sweDg4ODQsICAgIDB4MDAxMn0sIHsweDg4ODUsICAgIDB4MDAwN30sIHsweDg4ODYsICAgIDB4MDAzNn0sCit7MHg4ODg3LCAgICAweDAwYjZ9LCB7MHg4ODg4LCAgICAweDAwOGZ9LCB7MHg4ODg5LCAgICAweDAwN2N9LAorezB4ODg4YSwgICAgMHgwMDQ4fSwgezB4ODg4YiwgICAgMHgwMDQ4fSwgezB4ODg4YywgICAgMHgwMGI3fSwKK3sweDg4OGQsICAgIDB4MDAxMn0sIHsweDg4OGUsICAgIDB4MDAwN30sIHsweDg4OGYsICAgIDB4MDA4Nn0sCit7MHg4ODkwLCAgICAweDAwMDF9LCB7MHg4ODkxLCAgICAweDAwYmF9LCB7MHg4ODkyLCAgICAweDAwMTJ9LAorezB4ODg5MywgICAgMHgwMDA0fSwgezB4ODg5NCwgICAgMHgwMGI3fSwgezB4ODg5NSwgICAgMHgwMDEyfSwKK3sweDg4OTYsICAgIDB4MDAwNH0sIHsweDg4OTcsICAgIDB4MDAwMX0sIHsweDg4OTgsICAgIDB4MDAwMX0sCit7MHg4ODk5LCAgICAweDAwMDF9LCB7MHg4ODlhLCAgICAweDAwMDF9LCB7MHg4ODliLCAgICAweDAwMDF9LAorezB4ODg5YywgICAgMHgwMDAxfSwgezB4ODg5ZCwgICAgMHgwMDg2fSwgezB4ODg5ZSwgICAgMHgwMGZlfSwKK3sweDg4OWYsICAgIDB4MDBiNH0sIHsweDg4YTAsICAgIDB4MDAxMn0sIHsweDg4YTEsICAgIDB4MDAwNH0sCit7MHg4OGEyLCAgICAweDAwYjd9LCB7MHg4OGEzLCAgICAweDAwMTJ9LCB7MHg4OGE0LCAgICAweDAwMDR9LAorezB4ODhhNSwgICAgMHgwMDg2fSwgezB4ODhhNiwgICAgMHgwMDAyfSwgezB4ODhhNywgICAgMHgwMGJhfSwKK3sweDg4YTgsICAgIDB4MDAxMn0sIHsweDg4YTksICAgIDB4MDAwNH0sIHsweDg4YWEsICAgIDB4MDBiN30sCit7MHg4OGFiLCAgICAweDAwMTJ9LCB7MHg4OGFjLCAgICAweDAwMDR9LCB7MHg4OGFkLCAgICAweDAwODZ9LAorezB4ODhhZSwgICAgMHgwMGZkfSwgezB4ODhhZiwgICAgMHgwMGI0fSwgezB4ODhiMCwgICAgMHgwMDEyfSwKK3sweDg4YjEsICAgIDB4MDAwNH0sIHsweDg4YjIsICAgIDB4MDBiN30sIHsweDg4YjMsICAgIDB4MDAxMn0sCit7MHg4OGI0LCAgICAweDAwMDR9LCB7MHg4OGI1LCAgICAweDAwMzJ9LCB7MHg4OGI2LCAgICAweDAwYjd9LAorezB4ODhiNywgICAgMHgwMDEyfSwgezB4ODhiOCwgICAgMHgwMDA3fSwgezB4ODhiOSwgICAgMHgwMGI2fSwKK3sweDg4YmEsICAgIDB4MDAxMn0sIHsweDg4YmIsICAgIDB4MDAwMH0sIHsweDg4YmMsICAgIDB4MDA4NH0sCit7MHg4OGJkLCAgICAweDAwMDh9LCB7MHg4OGJlLCAgICAweDAwODF9LCB7MHg4OGJmLCAgICAweDAwMDh9LAorezB4ODhjMCwgICAgMHgwMDI3fSwgezB4ODhjMSwgICAgMHgwMDBmfSwgezB4ODhjMiwgICAgMHgwMDdjfSwKK3sweDg4YzMsICAgIDB4MDA4Mn0sIHsweDg4YzQsICAgIDB4MDAwOH0sIHsweDg4YzUsICAgIDB4MDAyNn0sCit7MHg4OGM2LCAgICAweDAwMDd9LCB7MHg4OGM3LCAgICAweDAwODZ9LCB7MHg4OGM4LCAgICAweDAwNzZ9LAorezB4ODhjOSwgICAgMHgwMDk3fSwgezB4ODhjYSwgICAgMHgwMDQwfSwgezB4ODhjYiwgICAgMHgwMDdlfSwKK3sweDg4Y2MsICAgIDB4MDA4OX0sIHsweDg4Y2QsICAgIDB4MDA2ZX0sIHsweDg4Y2UsICAgIDB4MDA3ZX0sCit7MHg4OGNmLCAgICAweDAwODZ9LCB7MHg4OGQwLCAgICAweDAwZWN9LCB7MHg4OGQxLCAgICAweDAwYjZ9LAorezB4ODhkMiwgICAgMHgwMDhmfSwgezB4ODhkMywgICAgMHgwMDdmfSwgezB4ODhkNCwgICAgMHgwMDgxfSwKK3sweDg4ZDUsICAgIDB4MDAwZn0sIHsweDg4ZDYsICAgIDB4MDAyN30sIHsweDg4ZDcsICAgIDB4MDAzY30sCit7MHg4OGQ4LCAgICAweDAwYmR9LCB7MHg4OGQ5LCAgICAweDAwZTZ9LCB7MHg4OGRhLCAgICAweDAwYzd9LAorezB4ODhkYiwgICAgMHgwMGI3fSwgezB4ODhkYywgICAgMHgwMDEyfSwgezB4ODhkZCwgICAgMHgwMDBkfSwKK3sweDg4ZGUsICAgIDB4MDBiZH0sIHsweDg4ZGYsICAgIDB4MDBlNn0sIHsweDg4ZTAsICAgIDB4MDBjYn0sCit7MHg4OGUxLCAgICAweDAwYjZ9LCB7MHg4OGUyLCAgICAweDAwMTJ9LCB7MHg4OGUzLCAgICAweDAwMDR9LAorezB4ODhlNCwgICAgMHgwMDhhfSwgezB4ODhlNSwgICAgMHgwMDIwfSwgezB4ODhlNiwgICAgMHgwMGI3fSwKK3sweDg4ZTcsICAgIDB4MDAxMn0sIHsweDg4ZTgsICAgIDB4MDAwNH0sIHsweDg4ZTksICAgIDB4MDBjZX0sCit7MHg4OGVhLCAgICAweDAwZmZ9LCB7MHg4OGViLCAgICAweDAwZmZ9LCB7MHg4OGVjLCAgICAweDAwYjZ9LAorezB4ODhlZCwgICAgMHgwMDEyfSwgezB4ODhlZSwgICAgMHgwMDAwfSwgezB4ODhlZiwgICAgMHgwMDgxfSwKK3sweDg4ZjAsICAgIDB4MDAwY30sIHsweDg4ZjEsICAgIDB4MDAyNn0sIHsweDg4ZjIsICAgIDB4MDAwNX0sCit7MHg4OGYzLCAgICAweDAwMDl9LCB7MHg4OGY0LCAgICAweDAwMjZ9LCB7MHg4OGY1LCAgICAweDAwZjZ9LAorezB4ODhmNiwgICAgMHgwMDI3fSwgezB4ODhmNywgICAgMHgwMDFjfSwgezB4ODhmOCwgICAgMHgwMGI2fSwKK3sweDg4ZjksICAgIDB4MDAxMn0sIHsweDg4ZmEsICAgIDB4MDAwNH0sIHsweDg4ZmIsICAgIDB4MDA4NH0sCit7MHg4OGZjLCAgICAweDAwZGZ9LCB7MHg4OGZkLCAgICAweDAwYjd9LCB7MHg4OGZlLCAgICAweDAwMTJ9LAorezB4ODhmZiwgICAgMHgwMDA0fSwgezB4ODkwMCwgICAgMHgwMDk2fSwgezB4ODkwMSwgICAgMHgwMDgzfSwKK3sweDg5MDIsICAgIDB4MDA4MX0sIHsweDg5MDMsICAgIDB4MDAwN30sIHsweDg5MDQsICAgIDB4MDAyY30sCit7MHg4OTA1LCAgICAweDAwMDV9LCB7MHg4OTA2LCAgICAweDAwN2N9LCB7MHg4OTA3LCAgICAweDAwMDB9LAorezB4ODkwOCwgICAgMHgwMDgzfSwgezB4ODkwOSwgICAgMHgwMDIwfSwgezB4ODkwYSwgICAgMHgwMDA2fSwKK3sweDg5MGIsICAgIDB4MDA5Nn0sIHsweDg5MGMsICAgIDB4MDA4M30sIHsweDg5MGQsICAgIDB4MDA4Yn0sCit7MHg4OTBlLCAgICAweDAwMDh9LCB7MHg4OTBmLCAgICAweDAwOTd9LCB7MHg4OTEwLCAgICAweDAwODN9LAorezB4ODkxMSwgICAgMHgwMDdlfSwgezB4ODkxMiwgICAgMHgwMDg1fSwgezB4ODkxMywgICAgMHgwMDQxfSwKK3sweDg5MTQsICAgIDB4MDA3Zn0sIHsweDg5MTUsICAgIDB4MDA4Zn0sIHsweDg5MTYsICAgIDB4MDA3ZX0sCit7MHg4OTE3LCAgICAweDAwODZ9LCB7MHg4OTE4LCAgICAweDAwODB9LCB7MHg4OTE5LCAgICAweDAwYjd9LAorezB4ODkxYSwgICAgMHgwMDEyfSwgezB4ODkxYiwgICAgMHgwMDBjfSwgezB4ODkxYywgICAgMHgwMDg2fSwKK3sweDg5MWQsICAgIDB4MDAwMX0sIHsweDg5MWUsICAgIDB4MDBiN30sIHsweDg5MWYsICAgIDB4MDA4Zn0sCit7MHg4OTIwLCAgICAweDAwN2R9LCB7MHg4OTIxLCAgICAweDAwYjZ9LCB7MHg4OTIyLCAgICAweDAwMTJ9LAorezB4ODkyMywgICAgMHgwMDBjfSwgezB4ODkyNCwgICAgMHgwMDg0fSwgezB4ODkyNSwgICAgMHgwMDdmfSwKK3sweDg5MjYsICAgIDB4MDBiN30sIHsweDg5MjcsICAgIDB4MDAxMn0sIHsweDg5MjgsICAgIDB4MDAwY30sCit7MHg4OTI5LCAgICAweDAwOGF9LCB7MHg4OTJhLCAgICAweDAwODB9LCB7MHg4OTJiLCAgICAweDAwYjd9LAorezB4ODkyYywgICAgMHgwMDEyfSwgezB4ODkyZCwgICAgMHgwMDBjfSwgezB4ODkyZSwgICAgMHgwMDg2fSwKK3sweDg5MmYsICAgIDB4MDAwYX0sIHsweDg5MzAsICAgIDB4MDBiZH0sIHsweDg5MzEsICAgIDB4MDA4YX0sCit7MHg4OTMyLCAgICAweDAwMDZ9LCB7MHg4OTMzLCAgICAweDAwYjZ9LCB7MHg4OTM0LCAgICAweDAwMTJ9LAorezB4ODkzNSwgICAgMHgwMDBhfSwgezB4ODkzNiwgICAgMHgwMDJhfSwgezB4ODkzNywgICAgMHgwMDA5fSwKK3sweDg5MzgsICAgIDB4MDBiNn0sIHsweDg5MzksICAgIDB4MDAxMn0sIHsweDg5M2EsICAgIDB4MDAwY30sCit7MHg4OTNiLCAgICAweDAwYmF9LCB7MHg4OTNjLCAgICAweDAwOGZ9LCB7MHg4OTNkLCAgICAweDAwN2R9LAorezB4ODkzZSwgICAgMHgwMGI3fSwgezB4ODkzZiwgICAgMHgwMDEyfSwgezB4ODk0MCwgICAgMHgwMDBjfSwKK3sweDg5NDEsICAgIDB4MDBiNn0sIHsweDg5NDIsICAgIDB4MDA4Zn0sIHsweDg5NDMsICAgIDB4MDA3ZX0sCit7MHg4OTQ0LCAgICAweDAwODF9LCB7MHg4OTQ1LCAgICAweDAwNjB9LCB7MHg4OTQ2LCAgICAweDAwMjd9LAorezB4ODk0NywgICAgMHgwMDFhfSwgezB4ODk0OCwgICAgMHgwMDhifSwgezB4ODk0OSwgICAgMHgwMDIwfSwKK3sweDg5NGEsICAgIDB4MDBiN30sIHsweDg5NGIsICAgIDB4MDA4Zn0sIHsweDg5NGMsICAgIDB4MDA3ZX0sCit7MHg4OTRkLCAgICAweDAwYjZ9LCB7MHg4OTRlLCAgICAweDAwMTJ9LCB7MHg4OTRmLCAgICAweDAwMGN9LAorezB4ODk1MCwgICAgMHgwMDg0fSwgezB4ODk1MSwgICAgMHgwMDlmfSwgezB4ODk1MiwgICAgMHgwMGJhfSwKK3sweDg5NTMsICAgIDB4MDA4Zn0sIHsweDg5NTQsICAgIDB4MDA3ZX0sIHsweDg5NTUsICAgIDB4MDBiN30sCit7MHg4OTU2LCAgICAweDAwMTJ9LCB7MHg4OTU3LCAgICAweDAwMGN9LCB7MHg4OTU4LCAgICAweDAwYjZ9LAorezB4ODk1OSwgICAgMHgwMDhmfSwgezB4ODk1YSwgICAgMHgwMDdkfSwgezB4ODk1YiwgICAgMHgwMDQ4fSwKK3sweDg5NWMsICAgIDB4MDBiN30sIHsweDg5NWQsICAgIDB4MDA4Zn0sIHsweDg5NWUsICAgIDB4MDA3ZH0sCit7MHg4OTVmLCAgICAweDAwN2V9LCB7MHg4OTYwLCAgICAweDAwODl9LCB7MHg4OTYxLCAgICAweDAwMjF9LAorezB4ODk2MiwgICAgMHgwMGI2fSwgezB4ODk2MywgICAgMHgwMDEyfSwgezB4ODk2NCwgICAgMHgwMDA0fSwKK3sweDg5NjUsICAgIDB4MDA4YX0sIHsweDg5NjYsICAgIDB4MDAyMH0sIHsweDg5NjcsICAgIDB4MDBiN30sCit7MHg4OTY4LCAgICAweDAwMTJ9LCB7MHg4OTY5LCAgICAweDAwMDR9LCB7MHg4OTZhLCAgICAweDAwYmR9LAorezB4ODk2YiwgICAgMHgwMDhhfSwgezB4ODk2YywgICAgMHgwMDBhfSwgezB4ODk2ZCwgICAgMHgwMDRmfSwKK3sweDg5NmUsICAgIDB4MDAzOX0sIHsweDg5NmYsICAgIDB4MDBhNn0sIHsweDg5NzAsICAgIDB4MDAwMH0sCit7MHg4OTcxLCAgICAweDAwMTh9LCB7MHg4OTcyLCAgICAweDAwYTd9LCB7MHg4OTczLCAgICAweDAwMDB9LAorezB4ODk3NCwgICAgMHgwMDA4fSwgezB4ODk3NSwgICAgMHgwMDE4fSwgezB4ODk3NiwgICAgMHgwMDA4fSwKK3sweDg5NzcsICAgIDB4MDA1YX0sIHsweDg5NzgsICAgIDB4MDAyNn0sIHsweDg5NzksICAgIDB4MDBmNX0sCit7MHg4OTdhLCAgICAweDAwMzl9LCB7MHg4OTdiLCAgICAweDAwMzZ9LCB7MHg4OTdjLCAgICAweDAwNmN9LAorezB4ODk3ZCwgICAgMHgwMDAwfSwgezB4ODk3ZSwgICAgMHgwMDMyfSwgezB4ODk3ZiwgICAgMHgwMGJhfSwKK3sweDg5ODAsICAgIDB4MDA4Zn0sIHsweDg5ODEsICAgIDB4MDA3Zn0sIHsweDg5ODIsICAgIDB4MDBiN30sCit7MHg4OTgzLCAgICAweDAwOGZ9LCB7MHg4OTg0LCAgICAweDAwN2Z9LCB7MHg4OTg1LCAgICAweDAwYjZ9LAorezB4ODk4NiwgICAgMHgwMDEyfSwgezB4ODk4NywgICAgMHgwMDA5fSwgezB4ODk4OCwgICAgMHgwMDg0fSwKK3sweDg5ODksICAgIDB4MDAwM30sIHsweDg5OGEsICAgIDB4MDBhN30sIHsweDg5OGIsICAgIDB4MDAwMX0sCit7MHg4OThjLCAgICAweDAwYjZ9LCB7MHg4OThkLCAgICAweDAwMTJ9LCB7MHg4OThlLCAgICAweDAwMDZ9LAorezB4ODk4ZiwgICAgMHgwMDg0fSwgezB4ODk5MCwgICAgMHgwMDNmfSwgezB4ODk5MSwgICAgMHgwMGE3fSwKK3sweDg5OTIsICAgIDB4MDAwMn0sIHsweDg5OTMsICAgIDB4MDAzOX0sIHsweDg5OTQsICAgIDB4MDAzNn0sCit7MHg4OTk1LCAgICAweDAwODZ9LCB7MHg4OTk2LCAgICAweDAwMDN9LCB7MHg4OTk3LCAgICAweDAwYjd9LAorezB4ODk5OCwgICAgMHgwMDhmfSwgezB4ODk5OSwgICAgMHgwMDgwfSwgezB4ODk5YSwgICAgMHgwMDMyfSwKK3sweDg5OWIsICAgIDB4MDBjMX0sIHsweDg5OWMsICAgIDB4MDAwMH0sIHsweDg5OWQsICAgIDB4MDAyNn0sCit7MHg4OTllLCAgICAweDAwMDZ9LCB7MHg4OTlmLCAgICAweDAwYjd9LCB7MHg4OWEwLCAgICAweDAwOGZ9LAorezB4ODlhMSwgICAgMHgwMDdjfSwgezB4ODlhMiwgICAgMHgwMDdlfSwgezB4ODlhMywgICAgMHgwMDg5fSwKK3sweDg5YTQsICAgIDB4MDBjOX0sIHsweDg5YTUsICAgIDB4MDBjMX0sIHsweDg5YTYsICAgIDB4MDAwMX0sCit7MHg4OWE3LCAgICAweDAwMjd9LCB7MHg4OWE4LCAgICAweDAwMTh9LCB7MHg4OWE5LCAgICAweDAwYzF9LAorezB4ODlhYSwgICAgMHgwMDAyfSwgezB4ODlhYiwgICAgMHgwMDI3fSwgezB4ODlhYywgICAgMHgwMDBjfSwKK3sweDg5YWQsICAgIDB4MDBjMX0sIHsweDg5YWUsICAgIDB4MDAwM30sIHsweDg5YWYsICAgIDB4MDAyN30sCit7MHg4OWIwLCAgICAweDAwMDB9LCB7MHg4OWIxLCAgICAweDAwZjZ9LCB7MHg4OWIyLCAgICAweDAwOGZ9LAorezB4ODliMywgICAgMHgwMDgwfSwgezB4ODliNCwgICAgMHgwMDA1fSwgezB4ODliNSwgICAgMHgwMDA1fSwKK3sweDg5YjYsICAgIDB4MDBmN30sIHsweDg5YjcsICAgIDB4MDA4Zn0sIHsweDg5YjgsICAgIDB4MDA4MH0sCit7MHg4OWI5LCAgICAweDAwZjZ9LCB7MHg4OWJhLCAgICAweDAwOGZ9LCB7MHg4OWJiLCAgICAweDAwODB9LAorezB4ODliYywgICAgMHgwMDA1fSwgezB4ODliZCwgICAgMHgwMDA1fSwgezB4ODliZSwgICAgMHgwMGY3fSwKK3sweDg5YmYsICAgIDB4MDA4Zn0sIHsweDg5YzAsICAgIDB4MDA4MH0sIHsweDg5YzEsICAgIDB4MDBmNn0sCit7MHg4OWMyLCAgICAweDAwOGZ9LCB7MHg4OWMzLCAgICAweDAwODB9LCB7MHg4OWM0LCAgICAweDAwMDV9LAorezB4ODljNSwgICAgMHgwMDA1fSwgezB4ODljNiwgICAgMHgwMGY3fSwgezB4ODljNywgICAgMHgwMDhmfSwKK3sweDg5YzgsICAgIDB4MDA4MH0sIHsweDg5YzksICAgIDB4MDBmNn0sIHsweDg5Y2EsICAgIDB4MDA4Zn0sCit7MHg4OWNiLCAgICAweDAwODB9LCB7MHg4OWNjLCAgICAweDAwNTN9LCB7MHg4OWNkLCAgICAweDAwZjR9LAorezB4ODljZSwgICAgMHgwMDEyfSwgezB4ODljZiwgICAgMHgwMDA3fSwgezB4ODlkMCwgICAgMHgwMDFifSwKK3sweDg5ZDEsICAgIDB4MDBiN30sIHsweDg5ZDIsICAgIDB4MDAxMn0sIHsweDg5ZDMsICAgIDB4MDAwN30sCit7MHg4OWQ0LCAgICAweDAwMzl9LCB7MHg4OWQ1LCAgICAweDAwY2V9LCB7MHg4OWQ2LCAgICAweDAwOGZ9LAorezB4ODlkNywgICAgMHgwMDcwfSwgezB4ODlkOCwgICAgMHgwMGE2fSwgezB4ODlkOSwgICAgMHgwMDAwfSwKK3sweDg5ZGEsICAgIDB4MDAxOH0sIHsweDg5ZGIsICAgIDB4MDBlNn0sIHsweDg5ZGMsICAgIDB4MDAwMH0sCit7MHg4OWRkLCAgICAweDAwMTh9LCB7MHg4OWRlLCAgICAweDAwYTd9LCB7MHg4OWRmLCAgICAweDAwMDB9LAorezB4ODllMCwgICAgMHgwMGU3fSwgezB4ODllMSwgICAgMHgwMDAwfSwgezB4ODllMiwgICAgMHgwMGE2fSwKK3sweDg5ZTMsICAgIDB4MDAwMX0sIHsweDg5ZTQsICAgIDB4MDAxOH0sIHsweDg5ZTUsICAgIDB4MDBlNn0sCit7MHg4OWU2LCAgICAweDAwMDF9LCB7MHg4OWU3LCAgICAweDAwMTh9LCB7MHg4OWU4LCAgICAweDAwYTd9LAorezB4ODllOSwgICAgMHgwMDAxfSwgezB4ODllYSwgICAgMHgwMGU3fSwgezB4ODllYiwgICAgMHgwMDAxfSwKK3sweDg5ZWMsICAgIDB4MDBhNn0sIHsweDg5ZWQsICAgIDB4MDAwMn0sIHsweDg5ZWUsICAgIDB4MDAxOH0sCit7MHg4OWVmLCAgICAweDAwZTZ9LCB7MHg4OWYwLCAgICAweDAwMDJ9LCB7MHg4OWYxLCAgICAweDAwMTh9LAorezB4ODlmMiwgICAgMHgwMGE3fSwgezB4ODlmMywgICAgMHgwMDAyfSwgezB4ODlmNCwgICAgMHgwMGU3fSwKK3sweDg5ZjUsICAgIDB4MDAwMn0sIHsweDg5ZjYsICAgIDB4MDAzOX0sIHsweDg5ZjcsICAgIDB4MDBhNn0sCit7MHg4OWY4LCAgICAweDAwMDB9LCB7MHg4OWY5LCAgICAweDAwODR9LCB7MHg4OWZhLCAgICAweDAwMDd9LAorezB4ODlmYiwgICAgMHgwMGU2fSwgezB4ODlmYywgICAgMHgwMDAwfSwgezB4ODlmZCwgICAgMHgwMGM0fSwKK3sweDg5ZmUsICAgIDB4MDAzOH0sIHsweDg5ZmYsICAgIDB4MDA1NH0sIHsweDhhMDAsICAgIDB4MDA1NH0sCit7MHg4YTAxLCAgICAweDAwNTR9LCB7MHg4YTAyLCAgICAweDAwMWJ9LCB7MHg4YTAzLCAgICAweDAwYTd9LAorezB4OGEwNCwgICAgMHgwMDAwfSwgezB4OGEwNSwgICAgMHgwMDM5fSwgezB4OGEwNiwgICAgMHgwMDRhfSwKK3sweDhhMDcsICAgIDB4MDAyNn0sIHsweDhhMDgsICAgIDB4MDBmZH0sIHsweDhhMDksICAgIDB4MDAzOX0sCit7MHg4YTBhLCAgICAweDAwOTZ9LCB7MHg4YTBiLCAgICAweDAwMjJ9LCB7MHg4YTBjLCAgICAweDAwODR9LAorezB4OGEwZCwgICAgMHgwMDBmfSwgezB4OGEwZSwgICAgMHgwMDk3fSwgezB4OGEwZiwgICAgMHgwMDIyfSwKK3sweDhhMTAsICAgIDB4MDA4Nn0sIHsweDhhMTEsICAgIDB4MDAwMX0sIHsweDhhMTIsICAgIDB4MDBiN30sCit7MHg4YTEzLCAgICAweDAwOGZ9LCB7MHg4YTE0LCAgICAweDAwNzB9LCB7MHg4YTE1LCAgICAweDAwYjZ9LAorezB4OGExNiwgICAgMHgwMDEyfSwgezB4OGExNywgICAgMHgwMDA3fSwgezB4OGExOCwgICAgMHgwMGI3fSwKK3sweDhhMTksICAgIDB4MDA4Zn0sIHsweDhhMWEsICAgIDB4MDA3MX0sIHsweDhhMWIsICAgIDB4MDBmNn0sCit7MHg4YTFjLCAgICAweDAwMTJ9LCB7MHg4YTFkLCAgICAweDAwMGN9LCB7MHg4YTFlLCAgICAweDAwYzR9LAorezB4OGExZiwgICAgMHgwMDBmfSwgezB4OGEyMCwgICAgMHgwMGM4fSwgezB4OGEyMSwgICAgMHgwMDBmfSwKK3sweDhhMjIsICAgIDB4MDBmN30sIHsweDhhMjMsICAgIDB4MDA4Zn0sIHsweDhhMjQsICAgIDB4MDA3Mn0sCit7MHg4YTI1LCAgICAweDAwZjZ9LCB7MHg4YTI2LCAgICAweDAwOGZ9LCB7MHg4YTI3LCAgICAweDAwNzJ9LAorezB4OGEyOCwgICAgMHgwMGI2fSwgezB4OGEyOSwgICAgMHgwMDhmfSwgezB4OGEyYSwgICAgMHgwMDcxfSwKK3sweDhhMmIsICAgIDB4MDA4NH0sIHsweDhhMmMsICAgIDB4MDAwM30sIHsweDhhMmQsICAgIDB4MDAyN30sCit7MHg4YTJlLCAgICAweDAwMTR9LCB7MHg4YTJmLCAgICAweDAwODF9LCB7MHg4YTMwLCAgICAweDAwMDF9LAorezB4OGEzMSwgICAgMHgwMDI3fSwgezB4OGEzMiwgICAgMHgwMDFjfSwgezB4OGEzMywgICAgMHgwMDgxfSwKK3sweDhhMzQsICAgIDB4MDAwMn0sIHsweDhhMzUsICAgIDB4MDAyN30sIHsweDhhMzYsICAgIDB4MDAyNH0sCit7MHg4YTM3LCAgICAweDAwZjR9LCB7MHg4YTM4LCAgICAweDAwOGZ9LCB7MHg4YTM5LCAgICAweDAwNzB9LAorezB4OGEzYSwgICAgMHgwMDI3fSwgezB4OGEzYiwgICAgMHgwMDJhfSwgezB4OGEzYywgICAgMHgwMDk2fSwKK3sweDhhM2QsICAgIDB4MDAyMn0sIHsweDhhM2UsICAgIDB4MDA4YX0sIHsweDhhM2YsICAgIDB4MDA4MH0sCit7MHg4YTQwLCAgICAweDAwN2V9LCB7MHg4YTQxLCAgICAweDAwOGF9LCB7MHg4YTQyLCAgICAweDAwNjR9LAorezB4OGE0MywgICAgMHgwMGY0fSwgezB4OGE0NCwgICAgMHgwMDhmfSwgezB4OGE0NSwgICAgMHgwMDcwfSwKK3sweDhhNDYsICAgIDB4MDAyN30sIHsweDhhNDcsICAgIDB4MDAxZX0sIHsweDhhNDgsICAgIDB4MDA5Nn0sCit7MHg4YTQ5LCAgICAweDAwMjJ9LCB7MHg4YTRhLCAgICAweDAwOGF9LCB7MHg4YTRiLCAgICAweDAwMTB9LAorezB4OGE0YywgICAgMHgwMDdlfSwgezB4OGE0ZCwgICAgMHgwMDhhfSwgezB4OGE0ZSwgICAgMHgwMDY0fSwKK3sweDhhNGYsICAgIDB4MDBmNH0sIHsweDhhNTAsICAgIDB4MDA4Zn0sIHsweDhhNTEsICAgIDB4MDA3MH0sCit7MHg4YTUyLCAgICAweDAwMjd9LCB7MHg4YTUzLCAgICAweDAwMTJ9LCB7MHg4YTU0LCAgICAweDAwOTZ9LAorezB4OGE1NSwgICAgMHgwMDIyfSwgezB4OGE1NiwgICAgMHgwMDhhfSwgezB4OGE1NywgICAgMHgwMDIwfSwKK3sweDhhNTgsICAgIDB4MDA3ZX0sIHsweDhhNTksICAgIDB4MDA4YX0sIHsweDhhNWEsICAgIDB4MDA2NH0sCit7MHg4YTViLCAgICAweDAwZjR9LCB7MHg4YTVjLCAgICAweDAwOGZ9LCB7MHg4YTVkLCAgICAweDAwNzB9LAorezB4OGE1ZSwgICAgMHgwMDI3fSwgezB4OGE1ZiwgICAgMHgwMDA2fSwgezB4OGE2MCwgICAgMHgwMDk2fSwKK3sweDhhNjEsICAgIDB4MDAyMn0sIHsweDhhNjIsICAgIDB4MDA4YX0sIHsweDhhNjMsICAgIDB4MDA0MH0sCit7MHg4YTY0LCAgICAweDAwOTd9LCB7MHg4YTY1LCAgICAweDAwMjJ9LCB7MHg4YTY2LCAgICAweDAwNzR9LAorezB4OGE2NywgICAgMHgwMDhmfSwgezB4OGE2OCwgICAgMHgwMDcxfSwgezB4OGE2OSwgICAgMHgwMDc0fSwKK3sweDhhNmEsICAgIDB4MDA4Zn0sIHsweDhhNmIsICAgIDB4MDA3MX0sIHsweDhhNmMsICAgIDB4MDA3OH0sCit7MHg4YTZkLCAgICAweDAwOGZ9LCB7MHg4YTZlLCAgICAweDAwNzB9LCB7MHg4YTZmLCAgICAweDAwYjZ9LAorezB4OGE3MCwgICAgMHgwMDhmfSwgezB4OGE3MSwgICAgMHgwMDcwfSwgezB4OGE3MiwgICAgMHgwMDg1fSwKK3sweDhhNzMsICAgIDB4MDAxMH0sIHsweDhhNzQsICAgIDB4MDAyN30sIHsweDhhNzUsICAgIDB4MDBhZn0sCit7MHg4YTc2LCAgICAweDAwZDZ9LCB7MHg4YTc3LCAgICAweDAwMjJ9LCB7MHg4YTc4LCAgICAweDAwYzR9LAorezB4OGE3OSwgICAgMHgwMDEwfSwgezB4OGE3YSwgICAgMHgwMDU4fSwgezB4OGE3YiwgICAgMHgwMGI2fSwKK3sweDhhN2MsICAgIDB4MDAxMn0sIHsweDhhN2QsICAgIDB4MDA3MH0sIHsweDhhN2UsICAgIDB4MDA4MX0sCit7MHg4YTdmLCAgICAweDAwZTR9LCB7MHg4YTgwLCAgICAweDAwMjd9LCB7MHg4YTgxLCAgICAweDAwMzZ9LAorezB4OGE4MiwgICAgMHgwMDgxfSwgezB4OGE4MywgICAgMHgwMGUxfSwgezB4OGE4NCwgICAgMHgwMDI2fSwKK3sweDhhODUsICAgIDB4MDAwY30sIHsweDhhODYsICAgIDB4MDA5Nn0sIHsweDhhODcsICAgIDB4MDAyMn0sCit7MHg4YTg4LCAgICAweDAwODR9LCB7MHg4YTg5LCAgICAweDAwMjB9LCB7MHg4YThhLCAgICAweDAwNDR9LAorezB4OGE4YiwgICAgMHgwMDFifSwgezB4OGE4YywgICAgMHgwMGQ2fSwgezB4OGE4ZCwgICAgMHgwMDIyfSwKK3sweDhhOGUsICAgIDB4MDBjNH0sIHsweDhhOGYsICAgIDB4MDBjZn0sIHsweDhhOTAsICAgIDB4MDAyMH0sCit7MHg4YTkxLCAgICAweDAwMjN9LCB7MHg4YTkyLCAgICAweDAwNTh9LCB7MHg4YTkzLCAgICAweDAwODF9LAorezB4OGE5NCwgICAgMHgwMGM2fSwgezB4OGE5NSwgICAgMHgwMDI2fSwgezB4OGE5NiwgICAgMHgwMDBkfSwKK3sweDhhOTcsICAgIDB4MDA5Nn0sIHsweDhhOTgsICAgIDB4MDAyMn0sIHsweDhhOTksICAgIDB4MDA4NH0sCit7MHg4YTlhLCAgICAweDAwNDB9LCB7MHg4YTliLCAgICAweDAwNDR9LCB7MHg4YTljLCAgICAweDAwNDR9LAorezB4OGE5ZCwgICAgMHgwMDFifSwgezB4OGE5ZSwgICAgMHgwMGQ2fSwgezB4OGE5ZiwgICAgMHgwMDIyfSwKK3sweDhhYTAsICAgIDB4MDBjNH0sIHsweDhhYTEsICAgIDB4MDBhZn0sIHsweDhhYTIsICAgIDB4MDAyMH0sCit7MHg4YWEzLCAgICAweDAwMTF9LCB7MHg4YWE0LCAgICAweDAwNTh9LCB7MHg4YWE1LCAgICAweDAwODF9LAorezB4OGFhNiwgICAgMHgwMDI3fSwgezB4OGFhNywgICAgMHgwMDI2fSwgezB4OGFhOCwgICAgMHgwMDBmfSwKK3sweDhhYTksICAgIDB4MDA5Nn0sIHsweDhhYWEsICAgIDB4MDAyMn0sIHsweDhhYWIsICAgIDB4MDA4NH0sCit7MHg4YWFjLCAgICAweDAwODB9LCB7MHg4YWFkLCAgICAweDAwNDR9LCB7MHg4YWFlLCAgICAweDAwNDR9LAorezB4OGFhZiwgICAgMHgwMDQ0fSwgezB4OGFiMCwgICAgMHgwMDFifSwgezB4OGFiMSwgICAgMHgwMGQ2fSwKK3sweDhhYjIsICAgIDB4MDAyMn0sIHsweDhhYjMsICAgIDB4MDBjNH0sIHsweDhhYjQsICAgIDB4MDA2Zn0sCit7MHg4YWI1LCAgICAweDAwMWJ9LCB7MHg4YWI2LCAgICAweDAwOTd9LCB7MHg4YWI3LCAgICAweDAwMjJ9LAorezB4OGFiOCwgICAgMHgwMDM5fSwgezB4OGFiOSwgICAgMHgwMDI3fSwgezB4OGFiYSwgICAgMHgwMDBjfSwKK3sweDhhYmIsICAgIDB4MDA3Y30sIHsweDhhYmMsICAgIDB4MDA4Mn0sIHsweDhhYmQsICAgIDB4MDAwNn0sCit7MHg4YWJlLCAgICAweDAwYmR9LCB7MHg4YWJmLCAgICAweDAwZDl9LCB7MHg4YWMwLCAgICAweDAwZWR9LAorezB4OGFjMSwgICAgMHgwMGI2fSwgezB4OGFjMiwgICAgMHgwMDgyfSwgezB4OGFjMywgICAgMHgwMDA3fSwKK3sweDhhYzQsICAgIDB4MDA3ZX0sIHsweDhhYzUsICAgIDB4MDA4YX0sIHsweDhhYzYsICAgIDB4MDBiOX0sCit7MHg4YWM3LCAgICAweDAwN2Z9LCB7MHg4YWM4LCAgICAweDAwODJ9LCB7MHg4YWM5LCAgICAweDAwMDZ9LAorezB4OGFjYSwgICAgMHgwMDM5fSwgeyAweDAsIDB4MCB9Cit9OworI2VuZGlmCisKKworLyogcGh5IHR5cGVzICovCisjZGVmaW5lICAgQ0FTX1BIWV9VTktOT1dOICAgICAgIDB4MDAKKyNkZWZpbmUgICBDQVNfUEhZX1NFUkRFUyAgICAgICAgMHgwMQorI2RlZmluZSAgIENBU19QSFlfTUlJX01ESU8wICAgICAweDAyCisjZGVmaW5lICAgQ0FTX1BIWV9NSUlfTURJTzEgICAgIDB4MDQKKyNkZWZpbmUgICBDQVNfUEhZX01JSSh4KSAgICAgICAgKCh4KSAmIChDQVNfUEhZX01JSV9NRElPMCB8IENBU19QSFlfTUlJX01ESU8xKSkKKworLyogX1JJTkdfSU5ERVggaXMgdGhlIGluZGV4IGZvciB0aGUgcmluZyBzaXplcyB0byBiZSB1c2VkLiAgX1JJTkdfU0laRQorICogaXMgdGhlIGFjdHVhbCBzaXplLiB0aGUgZGVmYXVsdCBpbmRleCBmb3IgdGhlIHZhcmlvdXMgcmluZ3MgaXMKKyAqIDguIE5PVEU6IHRoZXJlIGEgYnVuY2ggb2YgYWxpZ25tZW50IGNvbnN0cmFpbnRzIGZvciB0aGUgcmluZ3MuIHRvCisgKiBkZWFsIHdpdGggdGhhdCwgaSBqdXN0IGFsbG9jYXRlIHJpbmdzIHRvIGNyZWF0ZSB0aGUgZGVzaXJlZAorICogYWxpZ25tZW50LiBoZXJlIGFyZSB0aGUgY29uc3RyYWludHM6CisgKiAgIFJYIERFU0MgYW5kIENPTVAgcmluZ3MgbXVzdCBiZSA4S0IgYWxpZ25lZAorICogICBUWCBERVNDIG11c3QgYmUgMktCIGFsaWduZWQuIAorICogaWYgeW91IGNoYW5nZSB0aGUgbnVtYmVycywgYmUgY29nbml6YW50IG9mIGhvdyB0aGUgYWxpZ25tZW50IHdpbGwgY2hhbmdlCisgKiBpbiBJTklUX0JMT0NLIGFzIHdlbGwuCisgKi8KKworI2RlZmluZSBERVNDX1JJTkdfSV9UT19TKHgpICAoMzIqKDEgPDwgKHgpKSkKKyNkZWZpbmUgQ09NUF9SSU5HX0lfVE9fUyh4KSAgKDEyOCooMSA8PCAoeCkpKQorI2RlZmluZSBUWF9ERVNDX1JJTkdfSU5ERVggNCAgLyogNTEyID0gOGsgKi8KKyNkZWZpbmUgUlhfREVTQ19SSU5HX0lOREVYIDQgIC8qIDUxMiA9IDhrICovCisjZGVmaW5lIFJYX0NPTVBfUklOR19JTkRFWCA0ICAvKiAyMDQ4ID0gNjRrOiBzaG91bGQgYmUgNHggcnggcmluZyBzaXplICovCisKKyNpZiAoVFhfREVTQ19SSU5HX0lOREVYID4gOCkgfHwgKFRYX0RFU0NfUklOR19JTkRFWCA8IDApCisjZXJyb3IgVFhfREVTQ19SSU5HX0lOREVYIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA4CisjZW5kaWYKKworI2lmIChSWF9ERVNDX1JJTkdfSU5ERVggPiA4KSB8fCAoUlhfREVTQ19SSU5HX0lOREVYIDwgMCkKKyNlcnJvciBSWF9ERVNDX1JJTkdfSU5ERVggbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDgKKyNlbmRpZgorCisjaWYgKFJYX0NPTVBfUklOR19JTkRFWCA+IDgpIHx8IChSWF9DT01QX1JJTkdfSU5ERVggPCAwKQorI2Vycm9yIFJYX0NPTVBfUklOR19JTkRFWCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgOAorI2VuZGlmCisKKyNkZWZpbmUgTl9UWF9SSU5HUyAgICAgICAgICAgICAgICAgICAgTUFYX1RYX1JJTkdTICAgICAgLyogZm9yIFFvUyAqLworI2RlZmluZSBOX1RYX1JJTkdTX01BU0sgICAgICAgICAgICAgICBNQVhfVFhfUklOR1NfTUFTSworI2RlZmluZSBOX1JYX0RFU0NfUklOR1MgICAgICAgICAgICAgICBNQVhfUlhfREVTQ19SSU5HUyAvKiAxIGZvciBpcHNlYyAqLworI2RlZmluZSBOX1JYX0NPTVBfUklOR1MgICAgICAgICAgICAgICAweDEgLyogZm9yIG11bHQuIFBDSSBpbnRlcnJ1cHRzICovCisKKy8qIG51bWJlciBvZiBmbG93cyB0aGF0IGNhbiBnbyB0aHJvdWdoIHJlLWFzc2VtYmx5ICovCisjZGVmaW5lIE5fUlhfRkxPV1MgICAgICAgICAgICAgICAgICAgIDY0CisKKyNkZWZpbmUgVFhfREVTQ19SSU5HX1NJWkUgIERFU0NfUklOR19JX1RPX1MoVFhfREVTQ19SSU5HX0lOREVYKQorI2RlZmluZSBSWF9ERVNDX1JJTkdfU0laRSAgREVTQ19SSU5HX0lfVE9fUyhSWF9ERVNDX1JJTkdfSU5ERVgpCisjZGVmaW5lIFJYX0NPTVBfUklOR19TSVpFICBDT01QX1JJTkdfSV9UT19TKFJYX0NPTVBfUklOR19JTkRFWCkKKyNkZWZpbmUgVFhfREVTQ19SSU5HTl9JTkRFWCh4KSBUWF9ERVNDX1JJTkdfSU5ERVgKKyNkZWZpbmUgUlhfREVTQ19SSU5HTl9JTkRFWCh4KSBSWF9ERVNDX1JJTkdfSU5ERVgKKyNkZWZpbmUgUlhfQ09NUF9SSU5HTl9JTkRFWCh4KSBSWF9DT01QX1JJTkdfSU5ERVgKKyNkZWZpbmUgVFhfREVTQ19SSU5HTl9TSVpFKHgpICBUWF9ERVNDX1JJTkdfU0laRQorI2RlZmluZSBSWF9ERVNDX1JJTkdOX1NJWkUoeCkgIFJYX0RFU0NfUklOR19TSVpFCisjZGVmaW5lIFJYX0NPTVBfUklOR05fU0laRSh4KSAgUlhfQ09NUF9SSU5HX1NJWkUKKworLyogY29udmVydCB2YWx1ZXMgKi8KKyNkZWZpbmUgQ0FTX0JBU0UoeCwgeSkgICAgICAgICAgICAgICAgKCgoeSkgPDwgKHggIyMgX1NISUZUKSkgJiAoeCAjIyBfTUFTSykpCisjZGVmaW5lIENBU19WQUwoeCwgeSkgICAgICAgICAgICAgICAgICgoKHkpICYgKHggIyMgX01BU0spKSA+PiAoeCAjIyBfU0hJRlQpKQorI2RlZmluZSBDQVNfVFhfUklOR05fQkFTRSh5KSAgICAgICAgICAoKFRYX0RFU0NfUklOR05fSU5ERVgoeSkgPDwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRYX0NGR19ERVNDX1JJTkdOX1NISUZUKHkpKSAmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUWF9DRkdfREVTQ19SSU5HTl9NQVNLKHkpKQorCisvKiBtaW4gaXMgMmssIGJ1dCB3ZSBjYW4ndCBkbyBqdW1ibyBmcmFtZXMgdW5sZXNzIGl0J3MgYXQgbGVhc3QgOGsgKi8KKyNkZWZpbmUgQ0FTX01JTl9QQUdFX1NISUZUICAgICAgICAgICAgMTEgLyogMjA0OCAqLworI2RlZmluZSBDQVNfSlVNQk9fUEFHRV9TSElGVCAgICAgICAgICAxMyAvKiA4MTkyICovCisjZGVmaW5lIENBU19NQVhfUEFHRV9TSElGVCAgICAgICAgICAgIDE0IC8qIDE2Mzg0ICovICAgICAgICAgICAgIAorCisjZGVmaW5lIFRYX0RFU0NfQlVGTEVOX01BU0sgICAgICAgICAweDAwMDAwMDAwMDAwMDNGRkZVTEwgLyogYnVmZmVyIGxlbmd0aCBpbgorCQkJCQkJCSAgICAgYnl0ZXMuIDAgLSA5MjU2ICovCisjZGVmaW5lIFRYX0RFU0NfQlVGTEVOX1NISUZUICAgICAgICAwCisjZGVmaW5lIFRYX0RFU0NfQ1NVTV9TVEFSVF9NQVNLICAgICAweDAwMDAwMDAwMDAxRjgwMDBVTEwgLyogY2hlY2tzdW0gc3RhcnQuICMKKwkJCQkJCQkgICAgIG9mIGJ5dGVzIHRvIGJlIAorCQkJCQkJCSAgICAgc2tpcHBlZCBiZWZvcmUKKwkJCQkJCQkgICAgIGNzdW0gY2FsYyBiZWdpbnMuCisJCQkJCQkJICAgICB2YWx1ZSBtdXN0IGJlCisJCQkJCQkJICAgICBldmVuICovCisjZGVmaW5lIFRYX0RFU0NfQ1NVTV9TVEFSVF9TSElGVCAgICAxNQorI2RlZmluZSBUWF9ERVNDX0NTVU1fU1RVRkZfTUFTSyAgICAgMHgwMDAwMDAwMDFGRTAwMDAwVUxMIC8qIGNoZWNrc3VtIHN0dWZmLgorCQkJCQkJCSAgICAgYnl0ZSBvZmZzZXQgdy9pbiAKKwkJCQkJCQkgICAgIHRoZSBwa3QgZm9yIHRoZQorCQkJCQkJCSAgICAgMXN0IGNzdW0gYnl0ZS4KKwkJCQkJCQkgICAgIG11c3QgYmUgPiA4ICovCisjZGVmaW5lIFRYX0RFU0NfQ1NVTV9TVFVGRl9TSElGVCAgICAyMQorI2RlZmluZSBUWF9ERVNDX0NTVU1fRU4gICAgICAgICAgICAgMHgwMDAwMDAwMDIwMDAwMDAwVUxMIC8qIGVuYWJsZSBjaGVja3N1bSAqLworI2RlZmluZSBUWF9ERVNDX0VPRiAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDQwMDAwMDAwVUxMIC8qIGVuZCBvZiBmcmFtZSAqLworI2RlZmluZSBUWF9ERVNDX1NPRiAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDgwMDAwMDAwVUxMIC8qIHN0YXJ0IG9mIGZyYW1lICovCisjZGVmaW5lIFRYX0RFU0NfSU5UTUUgICAgICAgICAgICAgICAweDAwMDAwMDAxMDAwMDAwMDBVTEwgLyogaW50ZXJydXB0IG1lICovCisjZGVmaW5lIFRYX0RFU0NfTk9fQ1JDICAgICAgICAgICAgICAweDAwMDAwMDAyMDAwMDAwMDBVTEwgLyogZGVidWdnaW5nIG9ubHkuCisJCQkJCQkJICAgICBDUkMgd2lsbCBub3QgYmUKKwkJCQkJCQkgICAgIGluc2VydGVkIGludG8KKwkJCQkJCQkgICAgIG91dGdvaW5nIGZyYW1lLiAqLworc3RydWN0IGNhc190eF9kZXNjIHsKKwl1NjQgICAgIGNvbnRyb2w7CisJdTY0ICAgICBidWZmZXI7Cit9OworCisvKiBkZXNjcmlwdG9yIHJpbmcgZm9yIGZyZWUgYnVmZmVycyBjb250YWlucyBwYWdlLXNpemVkIGJ1ZmZlcnMuIHRoZSBpbmRleAorICogdmFsdWUgaXMgbm90IHVzZWQgYnkgdGhlIGh3IGluIGFueSB3YXkuIGl0J3MganVzdCBzdG9yZWQgYW5kIHJldHVybmVkIGluCisgKiB0aGUgY29tcGxldGlvbiByaW5nLgorICovCitzdHJ1Y3QgY2FzX3J4X2Rlc2MgeworCXU2NCAgICAgaW5kZXg7CisJdTY0ICAgICBidWZmZXI7Cit9OworCisvKiByZWNlaXZlZCBwYWNrZXRzIGFyZSBwdXQgb24gdGhlIGNvbXBsZXRpb24gcmluZy4gKi8KKy8qIHdvcmQgMSAqLworI2RlZmluZSBSWF9DT01QMV9EQVRBX1NJWkVfTUFTSyAgICAgICAgICAgMHgwMDAwMDAwMDA3RkZFMDAwVUxMICAgCisjZGVmaW5lIFJYX0NPTVAxX0RBVEFfU0laRV9TSElGVCAgICAgICAgICAxMworI2RlZmluZSBSWF9DT01QMV9EQVRBX09GRl9NQVNLICAgICAgICAgICAgMHgwMDAwMDFGRkY4MDAwMDAwVUxMCisjZGVmaW5lIFJYX0NPTVAxX0RBVEFfT0ZGX1NISUZUICAgICAgICAgICAyNworI2RlZmluZSBSWF9DT01QMV9EQVRBX0lOREVYX01BU0sgICAgICAgICAgMHgwMDdGRkUwMDAwMDAwMDAwVUxMCisjZGVmaW5lIFJYX0NPTVAxX0RBVEFfSU5ERVhfU0hJRlQgICAgICAgICA0MQorI2RlZmluZSBSWF9DT01QMV9TS0lQX01BU0sgICAgICAgICAgICAgICAgMHgwMTgwMDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIFJYX0NPTVAxX1NLSVBfU0hJRlQgICAgICAgICAgICAgICA1NQorI2RlZmluZSBSWF9DT01QMV9SRUxFQVNFX05FWFQgICAgICAgICAgICAgMHgwMjAwMDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIFJYX0NPTVAxX1NQTElUX1BLVCAgICAgICAgICAgICAgICAweDA0MDAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgUlhfQ09NUDFfUkVMRUFTRV9GTE9XICAgICAgICAgICAgIDB4MDgwMDAwMDAwMDAwMDAwMFVMTCAgCisjZGVmaW5lIFJYX0NPTVAxX1JFTEVBU0VfREFUQSAgICAgICAgICAgICAweDEwMDAwMDAwMDAwMDAwMDBVTEwgIAorI2RlZmluZSBSWF9DT01QMV9SRUxFQVNFX0hEUiAgICAgICAgICAgICAgMHgyMDAwMDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIFJYX0NPTVAxX1RZUEVfTUFTSyAgICAgICAgICAgICAgICAweEMwMDAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgUlhfQ09NUDFfVFlQRV9TSElGVCAgICAgICAgICAgICAgIDYyCisKKy8qIHdvcmQgMiAqLworI2RlZmluZSBSWF9DT01QMl9ORVhUX0lOREVYX01BU0sgICAgICAgICAgMHgwMDAwMDAwN0ZGRTAwMDAwVUxMCisjZGVmaW5lIFJYX0NPTVAyX05FWFRfSU5ERVhfU0hJRlQgICAgICAgICAyMQorI2RlZmluZSBSWF9DT01QMl9IRFJfU0laRV9NQVNLICAgICAgICAgICAgMHgwMDAwMEZGODAwMDAwMDAwVUxMCisjZGVmaW5lIFJYX0NPTVAyX0hEUl9TSVpFX1NISUZUICAgICAgICAgICAzNQorI2RlZmluZSBSWF9DT01QMl9IRFJfT0ZGX01BU0sgICAgICAgICAgICAgMHgwMDAzRjAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIFJYX0NPTVAyX0hEUl9PRkZfU0hJRlQgICAgICAgICAgICA0NAorI2RlZmluZSBSWF9DT01QMl9IRFJfSU5ERVhfTUFTSyAgICAgICAgICAgMHhGRkZDMDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIFJYX0NPTVAyX0hEUl9JTkRFWF9TSElGVCAgICAgICAgICA1MAorCisvKiB3b3JkIDMgKi8KKyNkZWZpbmUgUlhfQ09NUDNfU01BTExfUEtUICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDAwMVVMTAorI2RlZmluZSBSWF9DT01QM19KVU1CT19QS1QgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAwMDAyVUxMCisjZGVmaW5lIFJYX0NPTVAzX0pVTUJPX0hEUl9TUExJVF9FTiAgICAgICAweDAwMDAwMDAwMDAwMDAwMDRVTEwKKyNkZWZpbmUgUlhfQ09NUDNfQ1NVTV9TVEFSVF9NQVNLICAgICAgICAgIDB4MDAwMDAwMDAwMDA3RjAwMFVMTAorI2RlZmluZSBSWF9DT01QM19DU1VNX1NUQVJUX1NISUZUICAgICAgICAgMTIKKyNkZWZpbmUgUlhfQ09NUDNfRkxPV0lEX01BU0sgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMUY4MDAwMFVMTAorI2RlZmluZSBSWF9DT01QM19GTE9XSURfU0hJRlQgICAgICAgICAgICAgMTkKKyNkZWZpbmUgUlhfQ09NUDNfT1BDT0RFX01BU0sgICAgICAgICAgICAgIDB4MDAwMDAwMDAwRTAwMDAwMFVMTAorI2RlZmluZSBSWF9DT01QM19PUENPREVfU0hJRlQgICAgICAgICAgICAgMjUKKyNkZWZpbmUgUlhfQ09NUDNfRk9SQ0VfRkxBRyAgICAgICAgICAgICAgIDB4MDAwMDAwMDAxMDAwMDAwMFVMTAorI2RlZmluZSBSWF9DT01QM19OT19BU1NJU1QgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDIwMDAwMDAwVUxMCisjZGVmaW5lIFJYX0NPTVAzX0xPQURfQkFMX01BU0sgICAgICAgICAgICAweDAwMDAwMUY4MDAwMDAwMDBVTEwKKyNkZWZpbmUgUlhfQ09NUDNfTE9BRF9CQUxfU0hJRlQgICAgICAgICAgIDM1CisjZGVmaW5lIFJYX1BMVVNfQ09NUDNfRU5DX1BLVCAgICAgICAgICAgICAweDAwMDAwMjAwMDAwMDAwMDBVTEwgLyogY2FzKyAqLworI2RlZmluZSBSWF9DT01QM19MM19IRUFEX09GRl9NQVNLICAgICAgICAgMHgwMDAwRkUwMDAwMDAwMDAwVUxMIC8qIGNhcyAqLworI2RlZmluZSBSWF9DT01QM19MM19IRUFEX09GRl9TSElGVCAgICAgICAgNDEKKyNkZWZpbmUgUlhfUExVU19DT01QX0wzX0hFQURfT0ZGX01BU0sgICAgIDB4MDAwMEZDMDAwMDAwMDAwMFVMTCAvKiBjYXMrICovCisjZGVmaW5lIFJYX1BMVVNfQ09NUF9MM19IRUFEX09GRl9TSElGVCAgICA0MgorI2RlZmluZSBSWF9DT01QM19TQVBfTUFTSyAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIFJYX0NPTVAzX1NBUF9TSElGVCAgICAgICAgICAgICAgICA0OAorCisvKiB3b3JkIDQgKi8KKyNkZWZpbmUgUlhfQ09NUDRfVENQX0NTVU1fTUFTSyAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwRkZGRlVMTAorI2RlZmluZSBSWF9DT01QNF9UQ1BfQ1NVTV9TSElGVCAgICAgICAgICAgMAorI2RlZmluZSBSWF9DT01QNF9QS1RfTEVOX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAwMDNGRkYwMDAwVUxMCisjZGVmaW5lIFJYX0NPTVA0X1BLVF9MRU5fU0hJRlQgICAgICAgICAgICAxNgorI2RlZmluZSBSWF9DT01QNF9QRVJGRUNUX01BVENIX01BU0sgICAgICAgMHgwMDAwMDAwM0MwMDAwMDAwVUxMCisjZGVmaW5lIFJYX0NPTVA0X1BFUkZFQ1RfTUFUQ0hfU0hJRlQgICAgICAzMAorI2RlZmluZSBSWF9DT01QNF9aRVJPICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMDAwMDAwMDAwVUxMCisjZGVmaW5lIFJYX0NPTVA0X0hBU0hfVkFMX01BU0sgICAgICAgICAgICAweDBGRkZGMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgUlhfQ09NUDRfSEFTSF9WQUxfU0hJRlQgICAgICAgICAgIDQ0CisjZGVmaW5lIFJYX0NPTVA0X0hBU0hfUEFTUyAgICAgICAgICAgICAgICAweDEwMDAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgUlhfQ09NUDRfQkFEICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAwMDAwMDAwMFVMTAorI2RlZmluZSBSWF9DT01QNF9MRU5fTUlTTUFUQ0ggICAgICAgICAgICAgMHg4MDAwMDAwMDAwMDAwMDAwVUxMCisKKy8qIHdlIGVuY29kZSB0aGUgZm9sbG93aW5nOiByaW5nL2luZGV4L3JlbGVhc2UuIG9ubHkgMTQgYml0cworICogYXJlIHVzYWJsZS4KKyAqIE5PVEU6IHRoZSBlbmNvZGluZyBpcyBkZXBlbmRlbnQgdXBvbiBSWF9ERVNDX1JJTkdfU0laRSBhbmQgCisgKiAgICAgICBNQVhfUlhfREVTQ19SSU5HUy4gKi8KKyNkZWZpbmUgUlhfSU5ERVhfTlVNX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMEZGRlVMTAorI2RlZmluZSBSWF9JTkRFWF9OVU1fU0hJRlQgICAgICAgICAgICAgICAgMAorI2RlZmluZSBSWF9JTkRFWF9SSU5HX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAxMDAwVUxMCisjZGVmaW5lIFJYX0lOREVYX1JJTkdfU0hJRlQgICAgICAgICAgICAgICAxMgorI2RlZmluZSBSWF9JTkRFWF9SRUxFQVNFICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAyMDAwVUxMCisKK3N0cnVjdCBjYXNfcnhfY29tcCB7CisJdTY0ICAgICB3b3JkMTsKKwl1NjQgICAgIHdvcmQyOworCXU2NCAgICAgd29yZDM7CisJdTY0ICAgICB3b3JkNDsKK307IAorCitlbnVtIGxpbmtfc3RhdGUgeworCWxpbmtfZG93biA9IDAsCS8qIE5vIGxpbmssIHdpbGwgcmV0cnkgKi8KKwlsaW5rX2FuZWcsCS8qIEF1dG9uZWcgaW4gcHJvZ3Jlc3MgKi8KKwlsaW5rX2ZvcmNlX3RyeSwJLyogVHJ5IEZvcmNlZCBsaW5rIHNwZWVkICovCisJbGlua19mb3JjZV9yZXQsCS8qIEZvcmNlZCBtb2RlIHdvcmtlZCwgcmV0cnlpbmcgYXV0b25lZyAqLworCWxpbmtfZm9yY2Vfb2ssCS8qIFN0YXkgaW4gZm9yY2VkIG1vZGUgKi8KKwlsaW5rX3VwCQkvKiBMaW5rIGlzIHVwICovCit9OworCit0eXBlZGVmIHN0cnVjdCBjYXNfcGFnZSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBwYWdlICpidWZmZXI7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwlpbnQgdXNlZDsKK30gY2FzX3BhZ2VfdDsKKworCisvKiBzb21lIGFsaWdubWVudCBjb25zdHJhaW50czoKKyAqIFRYIERFU0MsIFJYIERFU0MsIGFuZCBSWCBDT01QIG11c3QgZWFjaCBiZSA4SyBhbGlnbmVkLgorICogVFggQ09NUFdCIG11c3QgYmUgOC1ieXRlIGFsaWduZWQuIAorICogdG8gYWNjb21wbGlzaCB0aGlzLCBoZXJlJ3Mgd2hhdCB3ZSBkbzoKKyAqIAorICogSU5JVF9CTE9DS19SWF9DT01QICA9IDY0ayAoYWxyZWFkeSBhbGlnbmVkKQorICogSU5JVF9CTE9DS19SWF9ERVNDICA9IDhrCisgKiBJTklUX0JMT0NLX1RYICAgICAgID0gOGsKKyAqIElOSVRfQkxPQ0tfUlgxX0RFU0MgPSA4aworICogVFggQ09NUFdCCisgKi8KKyNkZWZpbmUgSU5JVF9CTE9DS19UWCAgICAgICAgICAgKFRYX0RFU0NfUklOR19TSVpFKQorI2RlZmluZSBJTklUX0JMT0NLX1JYX0RFU0MgICAgICAoUlhfREVTQ19SSU5HX1NJWkUpCisjZGVmaW5lIElOSVRfQkxPQ0tfUlhfQ09NUCAgICAgIChSWF9DT01QX1JJTkdfU0laRSkKKworc3RydWN0IGNhc19pbml0X2Jsb2NrIHsKKwlzdHJ1Y3QgY2FzX3J4X2NvbXAgcnhjc1tOX1JYX0NPTVBfUklOR1NdW0lOSVRfQkxPQ0tfUlhfQ09NUF07CisJc3RydWN0IGNhc19yeF9kZXNjIHJ4ZHNbTl9SWF9ERVNDX1JJTkdTXVtJTklUX0JMT0NLX1JYX0RFU0NdOyAKKwlzdHJ1Y3QgY2FzX3R4X2Rlc2MgdHhkc1tOX1RYX1JJTkdTXVtJTklUX0JMT0NLX1RYXTsKKwl1NjQgdHhfY29tcHdiOyAKK307CisKKy8qIHRpbnkgYnVmZmVycyB0byBkZWFsIHdpdGggdGFyZ2V0IGFib3J0IGlzc3VlLiB3ZSBhbGxvY2F0ZSBhIGJpdAorICogb3ZlciBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdGFyZ2V0IGFib3J0IGlzc3VlcyB3aXRoIHRoZXNlIGJ1ZmZlcnMKKyAqIGFzIHdlbGwuCisgKi8KKyNkZWZpbmUgVFhfVElOWV9CVUZfTEVOICAgIDB4MTAwCisjZGVmaW5lIFRYX1RJTllfQlVGX0JMT0NLICAoKElOSVRfQkxPQ0tfVFggKyAxKSpUWF9USU5ZX0JVRl9MRU4pCisKK3N0cnVjdCBjYXNfdGlueV9jb3VudCB7CisJaW50IG5idWZzOworCWludCB1c2VkOworfTsKKworc3RydWN0IGNhcyB7CisJc3BpbmxvY2tfdCBsb2NrOyAvKiBmb3IgbW9zdCBiaXRzICovCisJc3BpbmxvY2tfdCB0eF9sb2NrW05fVFhfUklOR1NdOyAvKiB0eCBiaXRzICovCisJc3BpbmxvY2tfdCBzdGF0X2xvY2tbTl9UWF9SSU5HUyArIDFdOyAvKiBmb3Igc3RhdCBnYXRoZXJpbmcgKi8KKwlzcGlubG9ja190IHJ4X2ludXNlX2xvY2s7IC8qIHJ4IGludXNlIGxpc3QgKi8KKwlzcGlubG9ja190IHJ4X3NwYXJlX2xvY2s7IC8qIHJ4IHNwYXJlIGxpc3QgKi8KKworCXZvaWQgX19pb21lbSAqcmVnczsKKwlpbnQgdHhfbmV3W05fVFhfUklOR1NdLCB0eF9vbGRbTl9UWF9SSU5HU107CisJaW50IHJ4X29sZFtOX1JYX0RFU0NfUklOR1NdOworCWludCByeF9jdXJbTl9SWF9DT01QX1JJTkdTXSwgcnhfbmV3W05fUlhfQ09NUF9SSU5HU107CisJaW50IHJ4X2xhc3RbTl9SWF9ERVNDX1JJTkdTXTsgCisKKwkvKiBTZXQgd2hlbiBjaGlwIGlzIGFjdHVhbGx5IGluIG9wZXJhdGlvbmFsIHN0YXRlCisJICogKGllLiBub3QgcG93ZXIgbWFuYWdlZCkgKi8KKwlpbnQgaHdfcnVubmluZzsKKwlpbnQgb3BlbmVkOworCXN0cnVjdCBzZW1hcGhvcmUgcG1fc2VtOyAvKiBvcGVuL2Nsb3NlL3N1c3BlbmQvcmVzdW1lICovCisKKwlzdHJ1Y3QgY2FzX2luaXRfYmxvY2sgKmluaXRfYmxvY2s7CisJc3RydWN0IGNhc190eF9kZXNjICppbml0X3R4ZHNbTUFYX1RYX1JJTkdTXTsKKwlzdHJ1Y3QgY2FzX3J4X2Rlc2MgKmluaXRfcnhkc1tNQVhfUlhfREVTQ19SSU5HU107CisJc3RydWN0IGNhc19yeF9jb21wICppbml0X3J4Y3NbTUFYX1JYX0NPTVBfUklOR1NdOworCisJLyogd2UgdXNlIHNrX2J1ZmZzIGZvciB0eCBhbmQgcGFnZXMgZm9yIHJ4LiB0aGUgcnggc2tidWZmcworCSAqIGFyZSB0aGVyZSBmb3IgZmxvdyByZS1hc3NlbWJseS4gKi8KKwlzdHJ1Y3Qgc2tfYnVmZiAgICAgICp0eF9za2JzW05fVFhfUklOR1NdW1RYX0RFU0NfUklOR19TSVpFXTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICByeF9mbG93c1tOX1JYX0ZMT1dTXTsKKwljYXNfcGFnZV90ICAgICAgICAgICpyeF9wYWdlc1tOX1JYX0RFU0NfUklOR1NdW1JYX0RFU0NfUklOR19TSVpFXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICByeF9zcGFyZV9saXN0LCByeF9pbnVzZV9saXN0OworCWludCAgICAgICAgICAgICAgICAgIHJ4X3NwYXJlc19uZWVkZWQ7CisKKwkvKiBmb3Igc21hbGwgcGFja2V0cyB3aGVuIGNvcHlpbmcgd291bGQgYmUgcXVpY2tlciB0aGFuCisJICAgbWFwcGluZyAqLworCXN0cnVjdCBjYXNfdGlueV9jb3VudCB0eF90aW55X3VzZVtOX1RYX1JJTkdTXVtUWF9ERVNDX1JJTkdfU0laRV07CisJdTggKnR4X3RpbnlfYnVmc1tOX1RYX1JJTkdTXTsKKworCXUzMgkJCW1zZ19lbmFibGU7CisKKwkvKiBOX1RYX1JJTkdTIG11c3QgYmUgPj0gTl9SWF9ERVNDX1JJTkdTICovCisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgbmV0X3N0YXRzW05fVFhfUklOR1MgKyAxXTsKKworCXUzMgkJCXBjaV9jZmdbNjQgPj4gMl07CisJdTggICAgICAgICAgICAgICAgICAgICAgcGNpX3JldmlzaW9uOworCisJaW50ICAgICAgICAgICAgICAgICAgICAgcGh5X3R5cGU7CisJaW50CQkJcGh5X2FkZHI7CisJdTMyICAgICAgICAgICAgICAgICAgICAgcGh5X2lkOworI2RlZmluZSBDQVNfRkxBR18xMDAwTUJfQ0FQICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENBU19GTEFHX1JFR19QTFVTICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ0FTX0ZMQUdfVEFSR0VUX0FCT1JUICAgMHgwMDAwMDAwNAorI2RlZmluZSBDQVNfRkxBR19TQVRVUk4gICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENBU19GTEFHX1JYRF9QT1NUX01BU0sgIDB4MDAwMDAwRjAKKyNkZWZpbmUgQ0FTX0ZMQUdfUlhEX1BPU1RfU0hJRlQgNAorI2RlZmluZSBDQVNfRkxBR19SWERfUE9TVCh4KSAgICAoKDEgPDwgKENBU19GTEFHX1JYRF9QT1NUX1NISUZUICsgKHgpKSkgJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQVNfRkxBR19SWERfUE9TVF9NQVNLKQorI2RlZmluZSBDQVNfRkxBR19FTlRST1BZX0RFViAgICAweDAwMDAwMTAwCisjZGVmaW5lIENBU19GTEFHX05PX0hXX0NTVU0gICAgIDB4MDAwMDAyMDAKKwl1MzIgICAgICAgICAgICAgICAgICAgICBjYXNfZmxhZ3M7CisJaW50ICAgICAgICAgICAgICAgICAgICAgcGFja2V0X21pbjsgLyogbWluaW11bSBwYWNrZXQgc2l6ZSAqLworCWludAkJCXR4X2ZpZm9fc2l6ZTsKKwlpbnQJCQlyeF9maWZvX3NpemU7CisJaW50CQkJcnhfcGF1c2Vfb2ZmOworCWludAkJCXJ4X3BhdXNlX29uOworCWludCAgICAgICAgICAgICAgICAgICAgIGNyY19zaXplOyAgICAgIC8qIDQgaWYgaGFsZi1kdXBsZXggKi8KKworCWludCAgICAgICAgICAgICAgICAgICAgIHBjaV9pcnFfSU5UQzsKKwlpbnQgICAgICAgICAgICAgICAgICAgICBtaW5fZnJhbWVfc2l6ZTsgLyogZm9yIHR4IGZpZm8gd29ya2Fyb3VuZCAqLworCisJLyogcGFnZSBzaXplIGFsbG9jYXRpb24gKi8KKwlpbnQgICAgICAgICAgICAgICAgICAgICBwYWdlX3NpemU7IAorCWludCAgICAgICAgICAgICAgICAgICAgIHBhZ2Vfb3JkZXI7CisJaW50ICAgICAgICAgICAgICAgICAgICAgbXR1X3N0cmlkZTsKKworCXUzMgkJCW1hY19yeF9jZmc7CisKKwkvKiBBdXRvbmVnICYgUEhZIGNvbnRyb2wgKi8KKwlpbnQJCQlsaW5rX2NudGw7CisJaW50CQkJbGlua19mY250bDsKKwllbnVtIGxpbmtfc3RhdGUJCWxzdGF0ZTsKKwlzdHJ1Y3QgdGltZXJfbGlzdAlsaW5rX3RpbWVyOworCWludAkJCXRpbWVyX3RpY2tzOworCXN0cnVjdCB3b3JrX3N0cnVjdAlyZXNldF90YXNrOworI2lmIDAKKwlhdG9taWNfdAkJcmVzZXRfdGFza19wZW5kaW5nOworI2Vsc2UKKwlhdG9taWNfdAkJcmVzZXRfdGFza19wZW5kaW5nOworCWF0b21pY190CQlyZXNldF90YXNrX3BlbmRpbmdfbXR1OworCWF0b21pY190CQlyZXNldF90YXNrX3BlbmRpbmdfc3BhcmU7CisJYXRvbWljX3QJCXJlc2V0X3Rhc2tfcGVuZGluZ19hbGw7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DQVNTSU5JX1FHRV9ERUJVRworCWF0b21pY190IGludGVycnVwdF9zZWVuOyAvKiAxIGlmIGFueSBpbnRlcnJ1cHRzIGFyZSBnZXR0aW5nIHRocm91Z2ggKi8KKyNlbmRpZgorCQorCS8qIExpbmstZG93biBwcm9ibGVtIHdvcmthcm91bmQgKi8KKyNkZWZpbmUgTElOS19UUkFOU0lUSU9OX1VOS05PV04gCTAKKyNkZWZpbmUgTElOS19UUkFOU0lUSU9OX09OX0ZBSUxVUkUgCTEKKyNkZWZpbmUgTElOS19UUkFOU0lUSU9OX1NUSUxMX0ZBSUxFRCAJMgorI2RlZmluZSBMSU5LX1RSQU5TSVRJT05fTElOS19VUCAJMworI2RlZmluZSBMSU5LX1RSQU5TSVRJT05fTElOS19DT05GSUcJNAorI2RlZmluZSBMSU5LX1RSQU5TSVRJT05fTElOS19ET1dOCTUKKyNkZWZpbmUgTElOS19UUkFOU0lUSU9OX1JFUVVFU1RFRF9SRVNFVAk2CisJaW50CQkJbGlua190cmFuc2l0aW9uOworCWludCAJCQlsaW5rX3RyYW5zaXRpb25famlmZmllc192YWxpZDsKKwl1bnNpZ25lZCBsb25nCQlsaW5rX3RyYW5zaXRpb25famlmZmllczsKKworCS8qIFR1bmluZyAqLworCXU4IG9yaWdfY2FjaGVsaW5lX3NpemU7CS8qIHZhbHVlIHdoZW4gbG9hZGVkICovCisjZGVmaW5lIENBU19QUkVGX0NBQ0hFTElORV9TSVpFCSAweDIwCS8qIE1pbmltdW0gZGVzaXJlZCAqLworCisJLyogRGlhZ25vc3RpYyBjb3VudGVycyBhbmQgc3RhdGUuICovCisJaW50IAkJCWNhc3JlZ19sZW47IC8qIHJlZy1zcGFjZSBzaXplIGZvciBkdW1waW5nICovCisJdTY0CQkJcGF1c2VfZW50ZXJlZDsKKwl1MTYJCQlwYXVzZV9sYXN0X3RpbWVfcmVjdmQ7CisgIAorCWRtYV9hZGRyX3QgYmxvY2tfZHZtYSwgdHhfdGlueV9kdm1hW05fVFhfUklOR1NdOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Cit9OworCisjZGVmaW5lIFRYX0RFU0NfTkVYVChyLCB4KSAgKCgoeCkgKyAxKSAmIChUWF9ERVNDX1JJTkdOX1NJWkUocikgLSAxKSkKKyNkZWZpbmUgUlhfREVTQ19FTlRSWShyLCB4KSAoKHgpICYgKFJYX0RFU0NfUklOR05fU0laRShyKSAtIDEpKQorI2RlZmluZSBSWF9DT01QX0VOVFJZKHIsIHgpICgoeCkgJiAoUlhfQ09NUF9SSU5HTl9TSVpFKHIpIC0gMSkpCisKKyNkZWZpbmUgVFhfQlVGRl9DT1VOVChyLCB4LCB5KSAgICAoKHgpIDw9ICh5KSA/ICgoeSkgLSAoeCkpIDogXAorICAgICAgICAoVFhfREVTQ19SSU5HTl9TSVpFKHIpIC0gKHgpICsgKHkpKSkgICAgCisKKyNkZWZpbmUgVFhfQlVGRlNfQVZBSUwoY3AsIGkpCSgoY3ApLT50eF9vbGRbKGkpXSA8PSAoY3ApLT50eF9uZXdbKGkpXSA/IFwKKyAgICAgICAgKGNwKS0+dHhfb2xkWyhpKV0gKyAoVFhfREVTQ19SSU5HTl9TSVpFKGkpIC0gMSkgLSAoY3ApLT50eF9uZXdbKGkpXSA6IFwKKyAgICAgICAgKGNwKS0+dHhfb2xkWyhpKV0gLSAoY3ApLT50eF9uZXdbKGkpXSAtIDEpCisKKyNkZWZpbmUgQ0FTX0FMSUdOKGFkZHIsIGFsaWduKSBcCisgICAgICgoKHVuc2lnbmVkIGxvbmcpIChhZGRyKSArICgoYWxpZ24pIC0gMVVMKSkgJiB+KChhbGlnbikgLSAxKSkKKworI2RlZmluZSBSWF9GSUZPX1NJWkUgICAgICAgICAgICAgICAgICAxNjM4NAorI2RlZmluZSBFWFBBTlNJT05fUk9NX1NJWkUgICAgICAgICAgICA2NTUzNgorCisjZGVmaW5lIENBU19NQ19FWEFDVF9NQVRDSF9TSVpFICAgICAgIDE1CisjZGVmaW5lIENBU19NQ19IQVNIX1NJWkUgICAgICAgICAgICAgIDI1NgorI2RlZmluZSBDQVNfTUNfSEFTSF9NQVggICAgICAgICAgICAgIChDQVNfTUNfRVhBQ1RfTUFUQ0hfU0laRSArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FTX01DX0hBU0hfU0laRSkKKworI2RlZmluZSBUWF9UQVJHRVRfQUJPUlRfTEVOICAgICAgICAgICAweDIwCisjZGVmaW5lIFJYX1NXSVZFTF9PRkZfVkFMICAgICAgICAgICAgIDB4MgorI2RlZmluZSBSWF9BRV9GUkVFTl9WQUwoeCkgICAgICAgICAgICAoUlhfREVTQ19SSU5HTl9TSVpFKHgpID4+IDEpCisjZGVmaW5lIFJYX0FFX0NPTVBfVkFMICAgICAgICAgICAgICAgIChSWF9DT01QX1JJTkdfU0laRSA+PiAxKQorI2RlZmluZSBSWF9CTEFOS19JTlRSX1BLVF9WQUwgICAgICAgICAweDA1CisjZGVmaW5lIFJYX0JMQU5LX0lOVFJfVElNRV9WQUwgICAgICAgIDB4MEYKKyNkZWZpbmUgSFBfVENQX1RIUkVTSF9WQUwgICAgICAgICAgICAgMTUzMCAvKiByZWR1Y2UgdG8gZW5hYmxlIHJlYXNzZW1ibHkgKi8KKworI2RlZmluZSBSWF9TUEFSRV9DT1VOVCAgICAgICAgICAgICAgICAoUlhfREVTQ19SSU5HX1NJWkUgPj4gMSkKKyNkZWZpbmUgUlhfU1BBUkVfUkVDT1ZFUl9WQUwgICAgICAgICAgKFJYX1NQQVJFX0NPVU5UID4+IDIpCisKKyNlbmRpZiAvKiBfQ0FTU0lOSV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jczg5eDAuYyBiL2RyaXZlcnMvbmV0L2NzODl4MC5jCmluZGV4IGNkYzA3Y2MuLmE2MDc4YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NzODl4MC5jCisrKyBiL2RyaXZlcnMvbmV0L2NzODl4MC5jCkBAIC0xNDAsNiArMTQwLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaWYgQUxMT1dfRE1BCiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwLmMgYi9kcml2ZXJzL25ldC9lMTAwLmMKaW5kZXggZmJmMWMwNi4uNDA4ODdmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAuYwpAQCAtOTAzLDggKzkwMyw4IEBACiAKIHN0YXRpYyB2b2lkIGUxMDBfZ2V0X2RlZmF1bHRzKHN0cnVjdCBuaWMgKm5pYykKIHsKLQlzdHJ1Y3QgcGFyYW1fcmFuZ2UgcmZkcyA9IHsgLm1pbiA9IDE2LCAubWF4ID0gMjU2LCAuY291bnQgPSAyNTYgfTsKLQlzdHJ1Y3QgcGFyYW1fcmFuZ2UgY2JzICA9IHsgLm1pbiA9IDY0LCAubWF4ID0gMjU2LCAuY291bnQgPSAxMjggfTsKKwlzdHJ1Y3QgcGFyYW1fcmFuZ2UgcmZkcyA9IHsgLm1pbiA9IDE2LCAubWF4ID0gMjU2LCAuY291bnQgPSA2NCB9OworCXN0cnVjdCBwYXJhbV9yYW5nZSBjYnMgID0geyAubWluID0gNjQsIC5tYXggPSAyNTYsIC5jb3VudCA9IDY0IH07CiAKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShuaWMtPnBkZXYsIFBDSV9SRVZJU0lPTl9JRCwgJm5pYy0+cmV2X2lkKTsKIAkvKiBNQUMgdHlwZSBpcyBlbmNvZGVkIGFzIHJldiBJRDsgZXhjZXB0aW9uOiBJQ0ggaXMgdHJlYXRlZCBhcyA4MjU1OSAqLwpAQCAtMTAwNywyMTMgKzEwMDcsMjUgQEAKIAkJY1sxNl0sIGNbMTddLCBjWzE4XSwgY1sxOV0sIGNbMjBdLCBjWzIxXSwgY1syMl0sIGNbMjNdKTsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIE1pY3JvIGNvZGUgZm9yIDgwODY6MTIyOSBSZXYgOCAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAgUGFyYW1ldGVyIHZhbHVlcyBmb3IgdGhlIEQxMDFNIEItc3RlcCAgKi8KLSNkZWZpbmUgRDEwMU1fQ1BVU0FWRVJfVElNRVJfRFdPUkQJCTc4Ci0jZGVmaW5lIEQxMDFNX0NQVVNBVkVSX0JVTkRMRV9EV09SRAkJNjUKLSNkZWZpbmUgRDEwMU1fQ1BVU0FWRVJfTUlOX1NJWkVfRFdPUkQJCTEyNgotCi0jZGVmaW5lIEQxMDFNX0JfUkNWQlVORExFX1VDT0RFIFwKLXtcCi0weDAwNTUwMjE1LCAweEZGRkYwNDM3LCAweEZGRkZGRkZGLCAweDA2QTcwNzg5LCAweEZGRkZGRkZGLCAweDA1NThGRkZGLCBcCi0weDAwMEMwMDAxLCAweDAwMTAxMzEyLCAweDAwMEMwMDA4LCAweDAwMzgwMjE2LCBcCi0weDAwMTAwMDlDLCAweDAwMjA0MDU2LCAweDAwMjM4MENDLCAweDAwMzgwMDU2LCBcCi0weDAwMTAwMDlDLCAweDAwMjQ0QzBCLCAweDAwMDAwODAwLCAweDAwMTI0ODE4LCBcCi0weDAwMzgwNDM4LCAweDAwMDAwMDAwLCAweDAwMTQwMDAwLCAweDAwMzgwNTU1LCBcCi0weDAwMzA4MDAwLCAweDAwMTAwNjYyLCAweDAwMTAwNTYxLCAweDAwMEUwNDA4LCBcCi0weDAwMTM0ODYxLCAweDAwMEMwMDAyLCAweDAwMTAzMDkzLCAweDAwMzA4MDAwLCBcCi0weDAwMTAwNjI0LCAweDAwMTAwNTYxLCAweDAwMEUwNDA4LCAweDAwMTAwODYxLCBcCi0weDAwMEMwMDdFLCAweDAwMjIyQzIxLCAweDAwMEMwMDAyLCAweDAwMTAzMDkzLCBcCi0weDAwMzgwQzdBLCAweDAwMDgwMDAwLCAweDAwMTAzMDkwLCAweDAwMzgwQzdBLCBcCi0weDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMTAwMDlDLCAweDAwMjQ0QzJELCAweDAwMDEwMDA0LCAweDAwMDQxMDAwLCBcCi0weDAwM0EwNDM3LCAweDAwMDQ0MDEwLCAweDAwMzgwNzhBLCAweDAwMDAwMDAwLCBcCi0weDAwMTAwMDk5LCAweDAwMjA2QzdBLCAweDAwMTAwMDlDLCAweDAwMjQ0QzQ4LCBcCi0weDAwMTMwODI0LCAweDAwMEMwMDAxLCAweDAwMTAxMjEzLCAweDAwMjYwQzc1LCBcCi0weDAwMDQxMDAwLCAweDAwMDEwMDA0LCAweDAwMTMwODI2LCAweDAwMEMwMDA2LCBcCi0weDAwMjIwNkE4LCAweDAwMTNDOTI2LCAweDAwMTAxMzEzLCAweDAwMzgwNkE4LCBcCi0weDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMDgwNjAwLCAweDAwMTAxQjEwLCAweDAwMDUwMDA0LCAweDAwMTAwODI2LCBcCi0weDAwMTAxMjEwLCAweDAwMzgwQzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMjExNTVCLCAweDAwMTAwMDk5LCAweDAwMjA2NTU5LCAweDAwMTAwMDlDLCBcCi0weDAwMjQ0NTU5LCAweDAwMTMwODM2LCAweDAwMEMwMDAwLCAweDAwMjIwQzYyLCBcCi0weDAwMEMwMDAxLCAweDAwMTAxQjEzLCAweDAwMjI5QzBFLCAweDAwMjEwQzBFLCBcCi0weDAwMjI2QzBFLCAweDAwMjE2QzBFLCAweDAwMjJGQzBFLCAweDAwMjE1QzBFLCBcCi0weDAwMjE0QzBFLCAweDAwMzgwNTU1LCAweDAwMDEwMDA0LCAweDAwMDQxMDAwLCBcCi0weDAwMjc4QzY3LCAweDAwMDQwODAwLCAweDAwMDE4MTAwLCAweDAwM0EwNDM3LCBcCi0weDAwMTMwODI2LCAweDAwMEMwMDAxLCAweDAwMjIwNTU5LCAweDAwMTAxMzEzLCBcCi0weDAwMzgwNTU5LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMDAwMDAwLCAweDAwMTMwODMxLCAweDAwMTAwOTBCLCAweDAwMTI0ODEzLCBcCi0weDAwMENGRjgwLCAweDAwMjYwNkFCLCAweDAwMDQxMDAwLCAweDAwMDEwMDA0LCBcCi0weDAwMzgwNkE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBNaWNybyBjb2RlIGZvciA4MDg2OjEyMjkgUmV2IDkgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogIFBhcmFtZXRlciB2YWx1ZXMgZm9yIHRoZSBEMTAxUyAgKi8KLSNkZWZpbmUgRDEwMVNfQ1BVU0FWRVJfVElNRVJfRFdPUkQJCTc4Ci0jZGVmaW5lIEQxMDFTX0NQVVNBVkVSX0JVTkRMRV9EV09SRAkJNjcKLSNkZWZpbmUgRDEwMVNfQ1BVU0FWRVJfTUlOX1NJWkVfRFdPUkQJCTEyOAotCi0jZGVmaW5lIEQxMDFTX1JDVkJVTkRMRV9VQ09ERSBcCi17XAotMHgwMDU1MDI0MiwgMHhGRkZGMDQ3RSwgMHhGRkZGRkZGRiwgMHgwNkZGMDgxOCwgMHhGRkZGRkZGRiwgMHgwNUE2RkZGRiwgXAotMHgwMDBDMDAwMSwgMHgwMDEwMTMxMiwgMHgwMDBDMDAwOCwgMHgwMDM4MDI0MywgXAotMHgwMDEwMDA5QywgMHgwMDIwNDA1NiwgMHgwMDIzODBEMCwgMHgwMDM4MDA1NiwgXAotMHgwMDEwMDA5QywgMHgwMDI0NEY4QiwgMHgwMDAwMDgwMCwgMHgwMDEyNDgxOCwgXAotMHgwMDM4MDQ3RiwgMHgwMDAwMDAwMCwgMHgwMDE0MDAwMCwgMHgwMDM4MDVBMywgXAotMHgwMDMwODAwMCwgMHgwMDEwMDYxMCwgMHgwMDEwMDU2MSwgMHgwMDBFMDQwOCwgXAotMHgwMDEzNDg2MSwgMHgwMDBDMDAwMiwgMHgwMDEwMzA5MywgMHgwMDMwODAwMCwgXAotMHgwMDEwMDYyNCwgMHgwMDEwMDU2MSwgMHgwMDBFMDQwOCwgMHgwMDEwMDg2MSwgXAotMHgwMDBDMDA3RSwgMHgwMDIyMkZBMSwgMHgwMDBDMDAwMiwgMHgwMDEwMzA5MywgXAotMHgwMDM4MEY5MCwgMHgwMDA4MDAwMCwgMHgwMDEwMzA5MCwgMHgwMDM4MEY5MCwgXAotMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgXAotMHgwMDEwMDA5QywgMHgwMDI0NEZBRCwgMHgwMDAxMDAwNCwgMHgwMDA0MTAwMCwgXAotMHgwMDNBMDQ3RSwgMHgwMDA0NDAxMCwgMHgwMDM4MDgxOSwgMHgwMDAwMDAwMCwgXAotMHgwMDEwMDA5OSwgMHgwMDIwNkZGRCwgMHgwMDEwMDA5QSwgMHgwMDIwQUZGRCwgXAotMHgwMDEwMDA5QywgMHgwMDI0NEZDOCwgMHgwMDEzMDgyNCwgMHgwMDBDMDAwMSwgXAotMHgwMDEwMTIxMywgMHgwMDI2MEZGNywgMHgwMDA0MTAwMCwgMHgwMDAxMDAwNCwgXAotMHgwMDEzMDgyNiwgMHgwMDBDMDAwNiwgMHgwMDIyMDcwMCwgMHgwMDEzQzkyNiwgXAotMHgwMDEwMTMxMywgMHgwMDM4MDcwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgXAotMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgXAotMHgwMDA4MDYwMCwgMHgwMDEwMUIxMCwgMHgwMDA1MDAwNCwgMHgwMDEwMDgyNiwgXAotMHgwMDEwMTIxMCwgMHgwMDM4MEZCNiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgXAotMHgwMDIxMTVBOSwgMHgwMDEwMDA5OSwgMHgwMDIwNjVBNywgMHgwMDEwMDA5QSwgXAotMHgwMDIwQTVBNywgMHgwMDEwMDA5QywgMHgwMDI0NDVBNywgMHgwMDEzMDgzNiwgXAotMHgwMDBDMDAwMCwgMHgwMDIyMEZFNCwgMHgwMDBDMDAwMSwgMHgwMDEwMUIxMywgXAotMHgwMDIyOUY4RSwgMHgwMDIxMEY4RSwgMHgwMDIyNkY4RSwgMHgwMDIxNkY4RSwgXAotMHgwMDIyRkY4RSwgMHgwMDIxNUY4RSwgMHgwMDIxNEY4RSwgMHgwMDM4MDVBMywgXAotMHgwMDAxMDAwNCwgMHgwMDA0MTAwMCwgMHgwMDI3OEZFOSwgMHgwMDA0MDgwMCwgXAotMHgwMDAxODEwMCwgMHgwMDNBMDQ3RSwgMHgwMDEzMDgyNiwgMHgwMDBDMDAwMSwgXAotMHgwMDIyMDVBNywgMHgwMDEwMTMxMywgMHgwMDM4MDVBNywgMHgwMDAwMDAwMCwgXAotMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgXAotMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDEzMDgzMSwgXAotMHgwMDEwMDkwQiwgMHgwMDEyNDgxMywgMHgwMDBDRkY4MCwgMHgwMDI2MDcwMywgXAotMHgwMDA0MTAwMCwgMHgwMDAxMDAwNCwgMHgwMDM4MDcwMCAgXAotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgTWljcm8gY29kZSBmb3IgdGhlIDgwODY6MTIyOSBSZXYgRi8xMCAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qICBQYXJhbWV0ZXIgdmFsdWVzIGZvciB0aGUgRDEwMiBFLXN0ZXAgICovCi0jZGVmaW5lIEQxMDJfRV9DUFVTQVZFUl9USU1FUl9EV09SRAkJNDIKLSNkZWZpbmUgRDEwMl9FX0NQVVNBVkVSX0JVTkRMRV9EV09SRAkJNTQKLSNkZWZpbmUgRDEwMl9FX0NQVVNBVkVSX01JTl9TSVpFX0RXT1JECQk0NgotCi0jZGVmaW5lICAgICBEMTAyX0VfUkNWQlVORExFX1VDT0RFIFwKLXtcCi0weDAwN0QwMjhGLCAweDBFNDIwNEY5LCAweDE0RUQwQzg1LCAweDE0RkExNEU5LCAweDBFRjcwRTM2LCAweDFGRkYxRkZGLCBcCi0weDAwRTAxNEI5LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwRTAxNEJELCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwRTAxNEQ1LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwRTAxNEMxLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwRTAxNEM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMjAwNjAwLCAweDAwRTAxNEVFLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMzBGRjgwLCAweDAwOTQwRTQ2LCAweDAwMDM4MjAwLCAweDAwMTAyMDAwLCBcCi0weDAwRTAwRTQzLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMzAwMDA2LCAweDAwRTAxNEZCLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwOTA2RTQxLCAweDAwODAwRTNDLCAweDAwRTAwRTM5LCAweDAwMDAwMDAwLCBcCi0weDAwOTA2RUZELCAweDAwOTAwRUZELCAweDAwRTAwRUY4LCAweDAwMDAwMDAwLCBcCi0weDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi0weDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBcCi19Ci0KIHN0YXRpYyB2b2lkIGUxMDBfbG9hZF91Y29kZShzdHJ1Y3QgbmljICpuaWMsIHN0cnVjdCBjYiAqY2IsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0vKiAqSU5ERU5ULU9GRiogKi8KLQlzdGF0aWMgc3RydWN0IHsKLQkJdTMyIHVjb2RlW1VDT0RFX1NJWkUgKyAxXTsKLQkJdTggbWFjOwotCQl1OCB0aW1lcl9kd29yZDsKLQkJdTggYnVuZGxlX2R3b3JkOwotCQl1OCBtaW5fc2l6ZV9kd29yZDsKLQl9IHVjb2RlX29wdHNbXSA9IHsKLQkJeyBEMTAxTV9CX1JDVkJVTkRMRV9VQ09ERSwKLQkJICBtYWNfODI1NTlfRDEwMU0sCi0JCSAgRDEwMU1fQ1BVU0FWRVJfVElNRVJfRFdPUkQsCi0JCSAgRDEwMU1fQ1BVU0FWRVJfQlVORExFX0RXT1JELAotCQkgIEQxMDFNX0NQVVNBVkVSX01JTl9TSVpFX0RXT1JEIH0sCi0JCXsgRDEwMVNfUkNWQlVORExFX1VDT0RFLAotCQkgIG1hY184MjU1OV9EMTAxUywKLQkJICBEMTAxU19DUFVTQVZFUl9USU1FUl9EV09SRCwKLQkJICBEMTAxU19DUFVTQVZFUl9CVU5ETEVfRFdPUkQsCi0JCSAgRDEwMVNfQ1BVU0FWRVJfTUlOX1NJWkVfRFdPUkQgfSwKLQkJeyBEMTAyX0VfUkNWQlVORExFX1VDT0RFLAotCQkgIG1hY184MjU1MV9GLAotCQkgIEQxMDJfRV9DUFVTQVZFUl9USU1FUl9EV09SRCwKLQkJICBEMTAyX0VfQ1BVU0FWRVJfQlVORExFX0RXT1JELAotCQkgIEQxMDJfRV9DUFVTQVZFUl9NSU5fU0laRV9EV09SRCB9LAotCQl7IEQxMDJfRV9SQ1ZCVU5ETEVfVUNPREUsCi0JCSAgbWFjXzgyNTUxXzEwLAotCQkgIEQxMDJfRV9DUFVTQVZFUl9USU1FUl9EV09SRCwKLQkJICBEMTAyX0VfQ1BVU0FWRVJfQlVORExFX0RXT1JELAotCQkgIEQxMDJfRV9DUFVTQVZFUl9NSU5fU0laRV9EV09SRCB9LAotCQl7IHswfSwgMCwgMCwgMCwgMH0KLQl9LCAqb3B0czsKLS8qICpJTkRFTlQtT04qICovCisJaW50IGk7CisJc3RhdGljIGNvbnN0IHUzMiB1Y29kZVtVQ09ERV9TSVpFXSA9IHsKKwkJLyogTkZTIHBhY2tldHMgYXJlIG1pc2ludGVycHJldGVkIGFzIFRDTyBwYWNrZXRzIGFuZAorCQkgKiBpbmNvcnJlY3RseSByb3V0ZWQgdG8gdGhlIEJNQyBvdmVyIFNNQnVzLiAgVGhpcworCQkgKiBtaWNyb2NvZGUgcGF0Y2ggY2hlY2tzIHRoZSBmcmFnbWVudGVkIElQIGJpdCBpbiB0aGUKKwkJICogTkZTL1VEUCBoZWFkZXIgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBORlMgYW5kIFRDTy4gKi8KKwkJMHgwRUY3MEUzNiwgMHgxRkZGMUZGRiwgMHgxRkZGMUZGRiwgMHgxRkZGMUZGRiwgMHgxRkZGMUZGRiwKKwkJMHgxRkZGMUZGRiwgMHgwMDkwNkU0MSwgMHgwMDgwMEUzQywgMHgwMEUwMEUzOSwgMHgwMDAwMDAwMCwKKwkJMHgwMDkwNkVGRCwgMHgwMDkwMEVGRCwJMHgwMEUwMEVGOCwKKwl9OwogCi0jZGVmaW5lIEJVTkRMRVNNQUxMIDEKLSNkZWZpbmUgQlVORExFTUFYIDUwCi0jZGVmaW5lIElOVERFTEFZIDE1MDAwCi0KLQlvcHRzID0gdWNvZGVfb3B0czsKLQotCS8qIGRvIG5vdCBsb2FkIHUtY29kZSBmb3IgSUNIIGRldmljZXMgKi8KLQlpZiAobmljLT5mbGFncyAmIGljaCkKLQkJcmV0dXJuOwotCi0JLyogU2VhcmNoIGZvciB1Y29kZSBtYXRjaCBhZ2FpbnN0IGgvdyByZXZfaWQgKi8KLQl3aGlsZSAob3B0cy0+bWFjKSB7Ci0JCWlmIChuaWMtPm1hYyA9PSBvcHRzLT5tYWMpIHsKLQkJCWludCBpOwotCQkJdTMyICp1Y29kZSA9IG9wdHMtPnVjb2RlOwotCi0JCQkvKiBJbnNlcnQgdXNlci10dW5hYmxlIHNldHRpbmdzICovCi0JCQl1Y29kZVtvcHRzLT50aW1lcl9kd29yZF0gJj0gMHhGRkZGMDAwMDsKLQkJCXVjb2RlW29wdHMtPnRpbWVyX2R3b3JkXSB8PQotCQkJCSh1MTYpIElOVERFTEFZOwotCQkJdWNvZGVbb3B0cy0+YnVuZGxlX2R3b3JkXSAmPSAweEZGRkYwMDAwOwotCQkJdWNvZGVbb3B0cy0+YnVuZGxlX2R3b3JkXSB8PSAodTE2KSBCVU5ETEVNQVg7Ci0JCQl1Y29kZVtvcHRzLT5taW5fc2l6ZV9kd29yZF0gJj0gMHhGRkZGMDAwMDsKLQkJCXVjb2RlW29wdHMtPm1pbl9zaXplX2R3b3JkXSB8PQotCQkJCShCVU5ETEVTTUFMTCkgPyAgMHhGRkZGIDogMHhGRjgwOwotCi0JCQlmb3IoaSA9IDA7IGkgPCBVQ09ERV9TSVpFOyBpKyspCi0JCQkJY2ItPnUudWNvZGVbaV0gPSBjcHVfdG9fbGUzMih1Y29kZVtpXSk7Ci0JCQljYi0+Y29tbWFuZCA9IGNwdV90b19sZTE2KGNiX3Vjb2RlKTsKLQkJCXJldHVybjsKLQkJfQotCQlvcHRzKys7Ci0JfQotCi0JY2ItPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihjYl9ub3ApOworCWlmKG5pYy0+bWFjID09IG1hY184MjU1MV9GIHx8IG5pYy0+bWFjID09IG1hY184MjU1MV8xMCkgeworCQlmb3IoaSA9IDA7IGkgPCBVQ09ERV9TSVpFOyBpKyspCisJCQljYi0+dS51Y29kZVtpXSA9IGNwdV90b19sZTMyKHVjb2RlW2ldKTsKKwkJY2ItPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihjYl91Y29kZSk7CisJfSBlbHNlCisJCWNiLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoY2Jfbm9wKTsKIH0KIAogc3RhdGljIHZvaWQgZTEwMF9zZXR1cF9pYWFkZHIoc3RydWN0IG5pYyAqbmljLCBzdHJ1Y3QgY2IgKmNiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfY29yZS5jIGIvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfY29yZS5jCmluZGV4IDBkZTNiYjkuLjE0ZTliNjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfY29yZS5jCkBAIC0xODc1LDYgKzE4NzUsOSBAQAogCQlyYyA9IC1FTk9ERVY7CiAJCWdvdG8gYmFpbDsKIAl9CisJCisJLyogRGlzYWJsZSBhbnkgUEhZIGZlYXR1cmVzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHBsYXRmb3JtICovCisJZXAtPnBoeV9taWkuZGVmLT5mZWF0dXJlcyAmPSB+ZW1hY2RhdGEtPnBoeV9mZWF0X2V4YzsKIAogCS8qIFNldHVwIGluaXRpYWwgUEhZIGNvbmZpZyAmIHN0YXJ0dXAgYW5lZyAqLwogCWlmIChlcC0+cGh5X21paS5kZWYtPm9wcy0+aW5pdCkKQEAgLTE4ODIsNiArMTg4NSwzNCBAQAogCW5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpOwogCWlmIChlcC0+cGh5X21paS5kZWYtPmZlYXR1cmVzICYgU1VQUE9SVEVEX0F1dG9uZWcpCiAJCWVwLT53YW50X2F1dG9uZWcgPSAxOworCWVsc2UgeworCQllcC0+d2FudF9hdXRvbmVnID0gMDsKKwkJCisJCS8qIFNlbGVjdCBoaWdoZXN0IHN1cHBvcnRlZCBzcGVlZC9kdXBsZXggKi8KKwkJaWYgKGVwLT5waHlfbWlpLmRlZi0+ZmVhdHVyZXMgJiBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwpIHsKKwkJCWVwLT5waHlfbWlpLnNwZWVkID0gU1BFRURfMTAwMDsKKwkJCWVwLT5waHlfbWlpLmR1cGxleCA9IERVUExFWF9GVUxMOworCQl9IGVsc2UgaWYgKGVwLT5waHlfbWlpLmRlZi0+ZmVhdHVyZXMgJiAKKwkJCSAgIFNVUFBPUlRFRF8xMDAwYmFzZVRfSGFsZikgeworCQkJZXAtPnBoeV9taWkuc3BlZWQgPSBTUEVFRF8xMDAwOworCQkJZXAtPnBoeV9taWkuZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisJCX0gZWxzZSBpZiAoZXAtPnBoeV9taWkuZGVmLT5mZWF0dXJlcyAmIAorCQkJICAgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwpIHsKKwkJCWVwLT5waHlfbWlpLnNwZWVkID0gU1BFRURfMTAwOworCQkJZXAtPnBoeV9taWkuZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCX0gZWxzZSBpZiAoZXAtPnBoeV9taWkuZGVmLT5mZWF0dXJlcyAmIAorCQkJICAgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYpIHsKKwkJCWVwLT5waHlfbWlpLnNwZWVkID0gU1BFRURfMTAwOworCQkJZXAtPnBoeV9taWkuZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisJCX0gZWxzZSBpZiAoZXAtPnBoeV9taWkuZGVmLT5mZWF0dXJlcyAmIAorCQkJICAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCkgeworCQkJZXAtPnBoeV9taWkuc3BlZWQgPSBTUEVFRF8xMDsKKwkJCWVwLT5waHlfbWlpLmR1cGxleCA9IERVUExFWF9GVUxMOworCQl9IGVsc2UgeworCQkJZXAtPnBoeV9taWkuc3BlZWQgPSBTUEVFRF8xMDsKKwkJCWVwLT5waHlfbWlpLmR1cGxleCA9IERVUExFWF9IQUxGOworCQl9CisJfQogCWVtYWNfc3RhcnRfbGluayhlcCwgTlVMTCk7CiAKIAkvKiByZWFkIHRoZSBNQUMgQWRkcmVzcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtdmV0aC5jIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5jCmluZGV4IDMyZDVmYWIuLmEyYzRkZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libXZldGguYworKysgYi9kcml2ZXJzL25ldC9pYm12ZXRoLmMKQEAgLTk5LDcgKzk5LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpYm12ZXRoX3NjaGVkdWxlX3JlcGxlbmlzaGluZyhzdHJ1Y3QgaWJtdmV0aF9hZGFwdGVyKik7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotI2RlZmluZSBJQk1WRVRIX1BST0NfRElSICJpYm12ZXRoIgorI2RlZmluZSBJQk1WRVRIX1BST0NfRElSICJuZXQvaWJtdmV0aCIKIHN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmlibXZldGhfcHJvY19kaXI7CiAjZW5kaWYKIApAQCAtMTAxMCw3ICsxMDEwLDcgQEAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogc3RhdGljIHZvaWQgaWJtdmV0aF9wcm9jX3JlZ2lzdGVyX2RyaXZlcih2b2lkKQogewotCWlibXZldGhfcHJvY19kaXIgPSBjcmVhdGVfcHJvY19lbnRyeShJQk1WRVRIX1BST0NfRElSLCBTX0lGRElSLCBwcm9jX25ldCk7CisJaWJtdmV0aF9wcm9jX2RpciA9IHByb2NfbWtkaXIoSUJNVkVUSF9QUk9DX0RJUiwgTlVMTCk7CiAJaWYgKGlibXZldGhfcHJvY19kaXIpIHsKIAkJU0VUX01PRFVMRV9PV05FUihpYm12ZXRoX3Byb2NfZGlyKTsKIAl9CkBAIC0xMDE4LDcgKzEwMTgsNyBAQAogCiBzdGF0aWMgdm9pZCBpYm12ZXRoX3Byb2NfdW5yZWdpc3Rlcl9kcml2ZXIodm9pZCkKIHsKLQlyZW1vdmVfcHJvY19lbnRyeShJQk1WRVRIX1BST0NfRElSLCBwcm9jX25ldCk7CisJcmVtb3ZlX3Byb2NfZW50cnkoSUJNVkVUSF9QUk9DX0RJUiwgTlVMTCk7CiB9CiAKIHN0YXRpYyB2b2lkICppYm12ZXRoX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYwppbmRleCA2ZDlkZTYyLi42NTFjNWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYwpAQCAtMTg3NSwxMSArMTg3NSwxMSBAQAogCiAJc2lycHVsc2UgPSAhIXNpcnB1bHNlOwogCi0JLyogY3JlYXRlX3Byb2NfZW50cnkgcmV0dXJucyBOVUxMIGlmICFDT05GSUdfUFJPQ19GUy4KKwkvKiBwcm9jX21rZGlyIHJldHVybnMgTlVMTCBpZiAhQ09ORklHX1BST0NfRlMuCiAJICogRmFpbHVyZSB0byBjcmVhdGUgdGhlIHByb2NmcyBlbnRyeSBpcyBoYW5kbGVkIGxpa2UgcnVubmluZwogCSAqIHdpdGhvdXQgcHJvY2ZzIC0gaXQncyBub3QgcmVxdWlyZWQgZm9yIHRoZSBkcml2ZXIgdG8gd29yay4KIAkgKi8KLQl2bHNpX3Byb2Nfcm9vdCA9IGNyZWF0ZV9wcm9jX2VudHJ5KFBST0NfRElSLCBTX0lGRElSLCBOVUxMKTsKKwl2bHNpX3Byb2Nfcm9vdCA9IHByb2NfbWtkaXIoUFJPQ19ESVIsIE5VTEwpOwogCWlmICh2bHNpX3Byb2Nfcm9vdCkgewogCQkvKiBwcm90ZWN0IHJlZ2lzdGVyZWQgcHJvY2RpciBhZ2FpbnN0IG1vZHVsZSByZW1vdmFsLgogCQkgKiBCZWNhdXNlIHdlIGFyZSBpbiB0aGUgbW9kdWxlIGluaXQgcGF0aCB0aGVyZSdzIG5vIHJhY2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25zODM4MjAuYyBiL2RyaXZlcnMvbmV0L25zODM4MjAuYwppbmRleCBlNjRkZjRkLi5lNDgxMWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uczgzODIwLmMKKysrIGIvZHJpdmVycy9uZXQvbnM4MzgyMC5jCkBAIC01ODQsNyArNTg0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgcnhfcmVmaWxsKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgZ2ZwKQorc3RhdGljIGlubGluZSBpbnQgcnhfcmVmaWxsKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBnZnBfdCBnZnApCiB7CiAJc3RydWN0IG5zODM4MjAgKmRldiA9IFBSSVYobmRldik7CiAJdW5zaWduZWQgaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMKaW5kZXggZDY1MmUxZWQuLmM3Y2NhODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCkBAIC0xODMyLDcgKzE4MzIsNyBAQAogewogICAgIHN0cnVjdCBkZXZfbWNfbGlzdAkqbWNfYWRkcjsKIAotICAgIGZvciAobWNfYWRkciA9IGFkZHJzOyAgbWNfYWRkciAmJiAtLWNvdW50ID4gMDsgIG1jX2FkZHIgPSBtY19hZGRyLT5uZXh0KSB7CisgICAgZm9yIChtY19hZGRyID0gYWRkcnM7ICBtY19hZGRyICYmIGNvdW50LS0gPiAwOyAgbWNfYWRkciA9IG1jX2FkZHItPm5leHQpIHsKIAl1X2ludCBwb3NpdGlvbiA9IGV0aGVyX2NyYyg2LCBtY19hZGRyLT5kbWlfYWRkcik7CiAjaWZuZGVmIGZpbmFsX3ZlcnNpb24JCS8qIFZlcmlmeSBtdWx0aWNhc3QgYWRkcmVzcy4gKi8KIAlpZiAoKG1jX2FkZHItPmRtaV9hZGRyWzBdICYgMSkgPT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcG9lLmMgYi9kcml2ZXJzL25ldC9wcHBvZS5jCmluZGV4IDgyZjIzNmMuLmE4NDJlY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcG9lLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwb2UuYwpAQCAtMTA3MCw3ICsxMDcwLDcgQEAKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnA7CiAKLQlwID0gY3JlYXRlX3Byb2NfZW50cnkoInBwcG9lIiwgU19JUlVHTywgcHJvY19uZXQpOworCXAgPSBjcmVhdGVfcHJvY19lbnRyeSgibmV0L3BwcG9lIiwgU19JUlVHTywgTlVMTCk7CiAJaWYgKCFwKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTE0Miw3ICsxMTQyLDcgQEAKIAlkZXZfcmVtb3ZlX3BhY2soJnBwcG9lc19wdHlwZSk7CiAJZGV2X3JlbW92ZV9wYWNrKCZwcHBvZWRfcHR5cGUpOwogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZwcHBvZV9ub3RpZmllcik7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoInBwcG9lIiwgcHJvY19uZXQpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJuZXQvcHBwb2UiLCBOVUxMKTsKIAlwcm90b191bnJlZ2lzdGVyKCZwcHBvZV9za19wcm90byk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3I4MTY5LmMgYi9kcml2ZXJzL25ldC9yODE2OS5jCmluZGV4IGYwNDcxZDEuLmFmYjNmMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3I4MTY5LmMKKysrIGIvZHJpdmVycy9uZXQvcjgxNjkuYwpAQCAtOTIsMTkgKzkyLDE4IEBACiAjZW5kaWYgLyogUlRMODE2OV9ERUJVRyAqLwogCiAjZGVmaW5lIFI4MTY5X01TR19ERUZBVUxUIFwKLQkoTkVUSUZfTVNHX0RSViB8IE5FVElGX01TR19QUk9CRSB8IE5FVElGX01TR19MSU5LIHwgTkVUSUZfTVNHX0lGVVAgfCBcCi0JIE5FVElGX01TR19JRkRPV04pCisJKE5FVElGX01TR19EUlYgfCBORVRJRl9NU0dfUFJPQkUgfCBORVRJRl9NU0dfSUZVUCB8IE5FVElGX01TR19JRkRPV04pCiAKICNkZWZpbmUgVFhfQlVGRlNfQVZBSUwodHApIFwKIAkodHAtPmRpcnR5X3R4ICsgTlVNX1RYX0RFU0MgLSB0cC0+Y3VyX3R4IC0gMSkKIAogI2lmZGVmIENPTkZJR19SODE2OV9OQVBJCiAjZGVmaW5lIHJ0bDgxNjlfcnhfc2tiCQkJbmV0aWZfcmVjZWl2ZV9za2IKLSNkZWZpbmUgcnRsODE2OV9yeF9od2FjY2VsX3NrYgkJdmxhbl9od2FjY2VsX3J4CisjZGVmaW5lIHJ0bDgxNjlfcnhfaHdhY2NlbF9za2IJCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYgogI2RlZmluZSBydGw4MTY5X3J4X3F1b3RhKGNvdW50LCBxdW90YSkJbWluKGNvdW50LCBxdW90YSkKICNlbHNlCiAjZGVmaW5lIHJ0bDgxNjlfcnhfc2tiCQkJbmV0aWZfcngKLSNkZWZpbmUgcnRsODE2OV9yeF9od2FjY2VsX3NrYgkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiCisjZGVmaW5lIHJ0bDgxNjlfcnhfaHdhY2NlbF9za2IJCXZsYW5faHdhY2NlbF9yeAogI2RlZmluZSBydGw4MTY5X3J4X3F1b3RhKGNvdW50LCBxdW90YSkJY291bnQKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL3NrZ2UuYyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZS5jCmluZGV4IDJlNzJkNzkuLmIxOGM5MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZS5jCkBAIC0yMzUsNyArMjM1LDcgQEAKICAqIEV4dGVybiBGdW5jdGlvbiBQcm90b3R5cGVzCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBjb25zdCBjaGFyIAlTS1Jvb3ROYW1lW10gPSAic2s5OGxpbiI7CitzdGF0aWMgY29uc3QgY2hhciAJU0tSb290TmFtZVtdID0gIm5ldC9zazk4bGluIjsKIHN0YXRpYyBzdHJ1Y3QJCXByb2NfZGlyX2VudHJ5ICpwU2tSb290RGlyOwogZXh0ZXJuIHN0cnVjdAlmaWxlX29wZXJhdGlvbnMgc2tfcHJvY19mb3BzOwogCkBAIC01MjQyLDIwICs1MjQyLDIwIEBACiB7CiAJaW50IGVycm9yOwogCi0JcFNrUm9vdERpciA9IHByb2NfbWtkaXIoU0tSb290TmFtZSwgcHJvY19uZXQpOworCXBTa1Jvb3REaXIgPSBwcm9jX21rZGlyKFNLUm9vdE5hbWUsIE5VTEwpOwogCWlmIChwU2tSb290RGlyKSAKIAkJcFNrUm9vdERpci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAkKIAllcnJvciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnNrZ2VfZHJpdmVyKTsKIAlpZiAoZXJyb3IpCi0JCXByb2NfbmV0X3JlbW92ZShTS1Jvb3ROYW1lKTsKKwkJcmVtb3ZlX3Byb2NfZW50cnkoU0tSb290TmFtZSwgTlVMTCk7CiAJcmV0dXJuIGVycm9yOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc2tnZV9leGl0KHZvaWQpCiB7CiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZza2dlX2RyaXZlcik7Ci0JcHJvY19uZXRfcmVtb3ZlKFNLUm9vdE5hbWUpOworCXJlbW92ZV9wcm9jX2VudHJ5KFNLUm9vdE5hbWUsIE5VTEwpOwogCiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZ2UuYyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwppbmRleCAwMjA4MjU4Li5jMmU2NDg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2dlLmMKKysrIGIvZHJpdmVycy9uZXQvc2tnZS5jCkBAIC00Miw3ICs0Miw3IEBACiAjaW5jbHVkZSAic2tnZS5oIgogCiAjZGVmaW5lIERSVl9OQU1FCQkic2tnZSIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjAiCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMS4xIgogI2RlZmluZSBQRlgJCQlEUlZfTkFNRSAiICIKIAogI2RlZmluZSBERUZBVUxUX1RYX1JJTkdfU0laRQkxMjgKQEAgLTEwNSw0MSArMTA1LDI4IEBACiBzdGF0aWMgY29uc3QgdTMyIHR4aXJxbWFza1tdID0geyBJU19YQTFfRiwgSVNfWEEyX0YgfTsKIHN0YXRpYyBjb25zdCB1MzIgcG9ydGlycW1hc2tbXSA9IHsgSVNfUE9SVF8xLCBJU19QT1JUXzIgfTsKIAotLyogRG9uJ3QgbmVlZCB0byBsb29rIGF0IHdob2xlIDE2Sy4KLSAqIGxhc3QgaW50ZXJlc3RpbmcgcmVnaXN0ZXIgaXMgZGVzY3JpcHRvciBwb2xsIHRpbWVyLgotICovCi0jZGVmaW5lIFNLR0VfUkVHU19MRU4JKDI5KjEyOCkKLQogc3RhdGljIGludCBza2dlX2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXJldHVybiBTS0dFX1JFR1NfTEVOOworCXJldHVybiAweDQwMDA7CiB9CiAKIC8qCi0gKiBSZXR1cm5zIGNvcHkgb2YgY29udHJvbCByZWdpc3RlciByZWdpb24KLSAqIEkvTyByZWdpb24gaXMgZGl2aWRlZCBpbnRvIGJhbmtzIGFuZCBjZXJ0YWluIHJlZ2lvbnMgYXJlIHVucmVhZGFibGUKKyAqIFJldHVybnMgY29weSBvZiB3aG9sZSBjb250cm9sIHJlZ2lzdGVyIHJlZ2lvbgorICogTm90ZTogc2tpcCBSQU0gYWRkcmVzcyByZWdpc3RlciBiZWNhdXNlIGFjY2Vzc2luZyBpdCB3aWxsCisgKiAJIGNhdXNlIGJ1cyBoYW5ncyEKICAqLwogc3RhdGljIHZvaWQgc2tnZV9nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLAogCQkJICB2b2lkICpwKQogewogCWNvbnN0IHN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgb2ZmczsKIAljb25zdCB2b2lkIF9faW9tZW0gKmlvID0gc2tnZS0+aHctPnJlZ3M7Ci0Jc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgYmFua21hcAotCQk9ICgxPDwwKSB8ICgxPDwyKSB8ICgxPDw4KSB8ICgxPDw5KQotCQkgIHwgKDE8PDEyKSB8ICgxPDwxMykgfCAoMTw8MTQpIHwgKDE8PDE1KSB8ICgxPDwxNikKLQkJICB8ICgxPDwxNykgfCAoMTw8MjApIHwgKDE8PDIxKSB8ICgxPDwyMikgfCAoMTw8MjMpCi0JCSAgfCAoMTw8MjQpICB8ICgxPDwyNSkgfCAoMTw8MjYpIHwgKDE8PDI3KSB8ICgxPDwyOCk7CiAKIAlyZWdzLT52ZXJzaW9uID0gMTsKLQlmb3IgKG9mZnMgPSAwOyBvZmZzIDwgcmVncy0+bGVuOyBvZmZzICs9IDEyOCkgewotCQl1MzIgbGVuID0gbWluX3QodTMyLCAxMjgsIHJlZ3MtPmxlbiAtIG9mZnMpOworCW1lbXNldChwLCAwLCByZWdzLT5sZW4pOworCW1lbWNweV9mcm9taW8ocCwgaW8sIEIzX1JBTV9BRERSKTsKIAotCQlpZiAoYmFua21hcCAmICgxPDwob2Zmcy8xMjgpKSkKLQkJCW1lbWNweV9mcm9taW8ocCArIG9mZnMsIGlvICsgb2ZmcywgbGVuKTsKLQkJZWxzZQotCQkJbWVtc2V0KHAgKyBvZmZzLCAwLCBsZW4pOwotCX0KKwltZW1jcHlfZnJvbWlvKHAgKyBCM19SSV9XVE9fUjEsIGlvICsgQjNfUklfV1RPX1IxLAorCQkgICAgICByZWdzLT5sZW4gLSBCM19SSV9XVE9fUjEpOwogfQogCiAvKiBXYWtlIG9uIExhbiBvbmx5IHN1cHBvcnRlZCBvbiBZdWtvbiBjaHBzIHdpdGggcmV2IDEgb3IgYWJvdmUgKi8KQEAgLTc3NSwxNyArNzYyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBza19idWZmICpza2dlX3J4X2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBzaXplKQotewotCXN0cnVjdCBza19idWZmICpza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemUpOwotCi0JaWYgKGxpa2VseShza2IpKSB7Ci0JCXNrYi0+ZGV2ID0gZGV2OwotCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7Ci0JfQotCXJldHVybiBza2I7Ci19Ci0KIC8qIEFsbG9jYXRlIGFuZCBzZXR1cCBhIG5ldyBidWZmZXIgZm9yIHJlY2VpdmluZyAqLwogc3RhdGljIHZvaWQgc2tnZV9yeF9zZXR1cChzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlLCBzdHJ1Y3Qgc2tnZV9lbGVtZW50ICplLAogCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgYnVmc2l6ZSkKQEAgLTg1OCwxNiArODM0LDE3IEBACiB7CiAJc3RydWN0IHNrZ2VfcmluZyAqcmluZyA9ICZza2dlLT5yeF9yaW5nOwogCXN0cnVjdCBza2dlX2VsZW1lbnQgKmU7Ci0JdW5zaWduZWQgaW50IGJ1ZnNpemUgPSBza2dlLT5yeF9idWZfc2l6ZTsKIAogCWUgPSByaW5nLT5zdGFydDsKIAlkbyB7Ci0JCXN0cnVjdCBza19idWZmICpza2IgPSBza2dlX3J4X2FsbG9jKHNrZ2UtPm5ldGRldiwgYnVmc2l6ZSk7CisJCXN0cnVjdCBza19idWZmICpza2I7CiAKKwkJc2tiID0gZGV2X2FsbG9jX3NrYihza2dlLT5yeF9idWZfc2l6ZSArIE5FVF9JUF9BTElHTik7CiAJCWlmICghc2tiKQogCQkJcmV0dXJuIC1FTk9NRU07CiAKLQkJc2tnZV9yeF9zZXR1cChza2dlLCBlLCBza2IsIGJ1ZnNpemUpOworCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CisJCXNrZ2Vfcnhfc2V0dXAoc2tnZSwgZSwgc2tiLCBza2dlLT5yeF9idWZfc2l6ZSk7CiAJfSB3aGlsZSAoIChlID0gZS0+bmV4dCkgIT0gcmluZy0+c3RhcnQpOwogCiAJcmluZy0+dG9fY2xlYW4gPSByaW5nLT5zdGFydDsKQEAgLTE2NjYsNiArMTY0MywyMiBAQAogCQkJIHwgR01fUlhDUl9VQ0ZfRU5BIHwgR01fUlhDUl9NQ0ZfRU5BKTsKIH0KIAorLyogQXBwYXJlbnRseSwgZWFybHkgdmVyc2lvbnMgb2YgWXVrb24tTGl0ZSBoYWQgd3JvbmcgY2hpcF9pZD8gKi8KK3N0YXRpYyBpbnQgaXNfeXVrb25fbGl0ZV9hMChzdHJ1Y3Qgc2tnZV9odyAqaHcpCit7CisJdTMyIHJlZzsKKwlpbnQgcmV0OworCisJaWYgKGh3LT5jaGlwX2lkICE9IENISVBfSURfWVVLT04pCisJCXJldHVybiAwOworCisJcmVnID0gc2tnZV9yZWFkMzIoaHcsIEIyX0ZBUik7CisJc2tnZV93cml0ZTgoaHcsIEIyX0ZBUiArIDMsIDB4ZmYpOworCXJldCA9IChza2dlX3JlYWQ4KGh3LCBCMl9GQVIgKyAzKSAhPSAwKTsKKwlza2dlX3dyaXRlMzIoaHcsIEIyX0ZBUiwgcmVnKTsKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgdm9pZCB5dWtvbl9tYWNfaW5pdChzdHJ1Y3Qgc2tnZV9odyAqaHcsIGludCBwb3J0KQogewogCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihody0+ZGV2W3BvcnRdKTsKQEAgLTE3ODEsOSArMTc3NCwxMSBAQAogCS8qIENvbmZpZ3VyZSBSeCBNQUMgRklGTyAqLwogCXNrZ2Vfd3JpdGUxNihodywgU0tfUkVHKHBvcnQsIFJYX0dNRl9GTF9NU0spLCBSWF9GRl9GTF9ERUZfTVNLKTsKIAlyZWcgPSBHTUZfT1BFUl9PTiB8IEdNRl9SWF9GX0ZMX09OOwotCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0xJVEUgJiYKLQkgICAgaHctPmNoaXBfcmV2ID49IENISVBfUkVWX1lVX0xJVEVfQTMpCisKKwkvKiBkaXNhYmxlIFJ4IEdNQUMgRklGTyBGbHVzaCBmb3IgWVVLT04tTGl0ZSBSZXYuIEEwIG9ubHkgKi8KKwlpZiAoaXNfeXVrb25fbGl0ZV9hMChodykpCiAJCXJlZyAmPSB+R01GX1JYX0ZfRkxfT047CisKIAlza2dlX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIFJYX0dNRl9DVFJMX1QpLCBHTUZfUlNUX0NMUik7CiAJc2tnZV93cml0ZTE2KGh3LCBTS19SRUcocG9ydCwgUlhfR01GX0NUUkxfVCksIHJlZyk7CiAJLyoKQEAgLTI0NDIsNiArMjQzNywxNCBAQAogCWdtYV93cml0ZTE2KGh3LCBwb3J0LCBHTV9SWF9DVFJMLCByZWcpOwogfQogCitzdGF0aWMgaW5saW5lIHUxNiBwaHlfbGVuZ3RoKGNvbnN0IHN0cnVjdCBza2dlX2h3ICpodywgdTMyIHN0YXR1cykKK3sKKwlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9HRU5FU0lTKQorCQlyZXR1cm4gc3RhdHVzID4+IFhNUl9GU19MRU5fU0hJRlQ7CisJZWxzZQorCQlyZXR1cm4gc3RhdHVzID4+IEdNUl9GU19MRU5fU0hJRlQ7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGJhZF9waHlfc3RhdHVzKGNvbnN0IHN0cnVjdCBza2dlX2h3ICpodywgdTMyIHN0YXR1cykKIHsKIAlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9HRU5FU0lTKQpAQCAtMjQ1MSwxNiArMjQ1NCw4MSBAQAogCQkJKHN0YXR1cyAmIEdNUl9GU19SWF9PSykgPT0gMDsKIH0KIAotc3RhdGljIHZvaWQgc2tnZV9yeF9lcnJvcihzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlLCBpbnQgc2xvdCwKLQkJCSAgdTMyIGNvbnRyb2wsIHUzMiBzdGF0dXMpCisKKy8qIEdldCByZWNlaXZlIGJ1ZmZlciBmcm9tIGRlc2NyaXB0b3IuCisgKiBIYW5kbGVzIGNvcHkgb2Ygc21hbGwgYnVmZmVycyBhbmQgcmVhbGxvY2F0aW9uIGZhaWx1cmVzCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnNrZ2VfcnhfZ2V0KHN0cnVjdCBza2dlX3BvcnQgKnNrZ2UsCisJCQkJCSAgc3RydWN0IHNrZ2VfZWxlbWVudCAqZSwKKwkJCQkJICB1MzIgY29udHJvbCwgdTMyIHN0YXR1cywgdTE2IGNzdW0pCiB7Ci0JaWYgKG5ldGlmX21zZ19yeF9lcnIoc2tnZSkpCi0JCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiJXM6IHJ4IGVyciwgc2xvdCAlZCBjb250cm9sIDB4JXggc3RhdHVzIDB4JXhcbiIsCi0JCSAgICAgICBza2dlLT5uZXRkZXYtPm5hbWUsIHNsb3QsIGNvbnRyb2wsIHN0YXR1cyk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MTYgbGVuID0gY29udHJvbCAmIEJNVV9CQkM7CisKKwlpZiAodW5saWtlbHkobmV0aWZfbXNnX3J4X3N0YXR1cyhza2dlKSkpCisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiJXM6IHJ4IHNsb3QgJXRkIHN0YXR1cyAweCV4IGxlbiAlZFxuIiwKKwkJICAgICAgIHNrZ2UtPm5ldGRldi0+bmFtZSwgZSAtIHNrZ2UtPnJ4X3Jpbmcuc3RhcnQsCisJCSAgICAgICBzdGF0dXMsIGxlbik7CisKKwlpZiAobGVuID4gc2tnZS0+cnhfYnVmX3NpemUpCisJCWdvdG8gZXJyb3I7CiAKIAlpZiAoKGNvbnRyb2wgJiAoQk1VX0VPRnxCTVVfU1RGKSkgIT0gKEJNVV9TVEZ8Qk1VX0VPRikpCi0JCXNrZ2UtPm5ldF9zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JZWxzZSBpZiAoc2tnZS0+aHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9HRU5FU0lTKSB7CisJCWdvdG8gZXJyb3I7CisKKwlpZiAoYmFkX3BoeV9zdGF0dXMoc2tnZS0+aHcsIHN0YXR1cykpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAocGh5X2xlbmd0aChza2dlLT5odywgc3RhdHVzKSAhPSBsZW4pCisJCWdvdG8gZXJyb3I7CisKKwlpZiAobGVuIDwgUlhfQ09QWV9USFJFU0hPTEQpIHsKKwkJc2tiID0gZGV2X2FsbG9jX3NrYihsZW4gKyAyKTsKKwkJaWYgKCFza2IpCisJCQlnb3RvIHJlc3VibWl0OworCisJCXNrYl9yZXNlcnZlKHNrYiwgMik7CisJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShza2dlLT5ody0+cGRldiwKKwkJCQkJICAgIHBjaV91bm1hcF9hZGRyKGUsIG1hcGFkZHIpLAorCQkJCQkgICAgbGVuLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQltZW1jcHkoc2tiLT5kYXRhLCBlLT5za2ItPmRhdGEsIGxlbik7CisJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShza2dlLT5ody0+cGRldiwKKwkJCQkJICAgICAgIHBjaV91bm1hcF9hZGRyKGUsIG1hcGFkZHIpLAorCQkJCQkgICAgICAgbGVuLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlza2dlX3J4X3JldXNlKGUsIHNrZ2UtPnJ4X2J1Zl9zaXplKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKKwkJbnNrYiA9IGRldl9hbGxvY19za2Ioc2tnZS0+cnhfYnVmX3NpemUgKyBORVRfSVBfQUxJR04pOworCQlpZiAoIW5za2IpCisJCQlnb3RvIHJlc3VibWl0OworCisJCXBjaV91bm1hcF9zaW5nbGUoc2tnZS0+aHctPnBkZXYsCisJCQkJIHBjaV91bm1hcF9hZGRyKGUsIG1hcGFkZHIpLAorCQkJCSBwY2lfdW5tYXBfbGVuKGUsIG1hcGxlbiksCisJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCXNrYiA9IGUtPnNrYjsKKyAgCQlwcmVmZXRjaChza2ItPmRhdGEpOworCQlza2dlX3J4X3NldHVwKHNrZ2UsIGUsIG5za2IsIHNrZ2UtPnJ4X2J1Zl9zaXplKTsKKwl9CisKKwlza2JfcHV0KHNrYiwgbGVuKTsKKwlza2ItPmRldiA9IHNrZ2UtPm5ldGRldjsKKwlpZiAoc2tnZS0+cnhfY3N1bSkgeworCQlza2ItPmNzdW0gPSBjc3VtOworCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX0hXOworCX0KKworCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHNrZ2UtPm5ldGRldik7CisKKwlyZXR1cm4gc2tiOworZXJyb3I6CisKKwlpZiAobmV0aWZfbXNnX3J4X2Vycihza2dlKSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICIlczogcnggZXJyLCBzbG90ICV0ZCBjb250cm9sIDB4JXggc3RhdHVzIDB4JXhcbiIsCisJCSAgICAgICBza2dlLT5uZXRkZXYtPm5hbWUsIGUgLSBza2dlLT5yeF9yaW5nLnN0YXJ0LAorCQkgICAgICAgY29udHJvbCwgc3RhdHVzKTsKKworCWlmIChza2dlLT5ody0+Y2hpcF9pZCA9PSBDSElQX0lEX0dFTkVTSVMpIHsKIAkJaWYgKHN0YXR1cyAmIChYTVJfRlNfUlVOVHxYTVJfRlNfTE5HX0VSUikpCiAJCQlza2dlLT5uZXRfc3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQlpZiAoc3RhdHVzICYgWE1SX0ZTX0ZSQV9FUlIpCkBAIC0yNDc1LDU2ICsyNTQzLDEwIEBACiAJCWlmIChzdGF0dXMgJiBHTVJfRlNfQ1JDX0VSUikKIAkJCXNrZ2UtPm5ldF9zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJfQotfQogCi0vKiBHZXQgcmVjZWl2ZSBidWZmZXIgZnJvbSBkZXNjcmlwdG9yLgotICogSGFuZGxlcyBjb3B5IG9mIHNtYWxsIGJ1ZmZlcnMgYW5kIHJlYWxsb2NhdGlvbiBmYWlsdXJlcwotICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpza2dlX3J4X2dldChzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlLAotCQkJCQkgIHN0cnVjdCBza2dlX2VsZW1lbnQgKmUsCi0JCQkJCSAgdW5zaWduZWQgaW50IGxlbikKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiwgKnNrYjsKLQotCWlmIChsZW4gPCBSWF9DT1BZX1RIUkVTSE9MRCkgewotCQluc2tiID0gc2tnZV9yeF9hbGxvYyhza2dlLT5uZXRkZXYsIGxlbiArIE5FVF9JUF9BTElHTik7Ci0JCWlmICh1bmxpa2VseSghbnNrYikpCi0JCQlyZXR1cm4gTlVMTDsKLQotCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc2tnZS0+aHctPnBkZXYsCi0JCQkJCSAgICBwY2lfdW5tYXBfYWRkcihlLCBtYXBhZGRyKSwKLQkJCQkJICAgIGxlbiwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJbWVtY3B5KG5za2ItPmRhdGEsIGUtPnNrYi0+ZGF0YSwgbGVuKTsKLQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHNrZ2UtPmh3LT5wZGV2LAotCQkJCQkgICAgICAgcGNpX3VubWFwX2FkZHIoZSwgbWFwYWRkciksCi0JCQkJCSAgICAgICBsZW4sIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0KLQkJaWYgKHNrZ2UtPnJ4X2NzdW0pIHsKLQkJCXN0cnVjdCBza2dlX3J4X2Rlc2MgKnJkID0gZS0+ZGVzYzsKLQkJCW5za2ItPmNzdW0gPSBsZTE2X3RvX2NwdShyZC0+Y3N1bTIpOwotCQkJbnNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fSFc7Ci0JCX0KLQkJc2tnZV9yeF9yZXVzZShlLCBza2dlLT5yeF9idWZfc2l6ZSk7Ci0JCXJldHVybiBuc2tiOwotCX0gZWxzZSB7Ci0JCW5za2IgPSBza2dlX3J4X2FsbG9jKHNrZ2UtPm5ldGRldiwgc2tnZS0+cnhfYnVmX3NpemUpOwotCQlpZiAodW5saWtlbHkoIW5za2IpKQotCQkJcmV0dXJuIE5VTEw7Ci0KLQkJcGNpX3VubWFwX3NpbmdsZShza2dlLT5ody0+cGRldiwKLQkJCQkgcGNpX3VubWFwX2FkZHIoZSwgbWFwYWRkciksCi0JCQkJIHBjaV91bm1hcF9sZW4oZSwgbWFwbGVuKSwKLQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJc2tiID0gZS0+c2tiOwotCQlpZiAoc2tnZS0+cnhfY3N1bSkgewotCQkJc3RydWN0IHNrZ2VfcnhfZGVzYyAqcmQgPSBlLT5kZXNjOwotCQkJc2tiLT5jc3VtID0gbGUxNl90b19jcHUocmQtPmNzdW0yKTsKLQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fSFc7Ci0JCX0KLQotCQlza2dlX3J4X3NldHVwKHNrZ2UsIGUsIG5za2IsIHNrZ2UtPnJ4X2J1Zl9zaXplKTsKLQkJcmV0dXJuIHNrYjsKLQl9CityZXN1Ym1pdDoKKwlza2dlX3J4X3JldXNlKGUsIHNrZ2UtPnJ4X2J1Zl9zaXplKTsKKwlyZXR1cm4gTlVMTDsKIH0KIAogCkBAIC0yNTQwLDMyICsyNTYyLDE2IEBACiAJZm9yIChlID0gcmluZy0+dG9fY2xlYW47IHdvcmtfZG9uZSA8IHRvX2RvOyBlID0gZS0+bmV4dCkgewogCQlzdHJ1Y3Qgc2tnZV9yeF9kZXNjICpyZCA9IGUtPmRlc2M7CiAJCXN0cnVjdCBza19idWZmICpza2I7Ci0JCXUzMiBjb250cm9sLCBsZW4sIHN0YXR1czsKKwkJdTMyIGNvbnRyb2w7CiAKIAkJcm1iKCk7CiAJCWNvbnRyb2wgPSByZC0+Y29udHJvbDsKIAkJaWYgKGNvbnRyb2wgJiBCTVVfT1dOKQogCQkJYnJlYWs7CiAKLQkJbGVuID0gY29udHJvbCAmIEJNVV9CQkM7Ci0JCXN0YXR1cyA9IHJkLT5zdGF0dXM7Ci0KLQkJaWYgKHVubGlrZWx5KChjb250cm9sICYgKEJNVV9FT0Z8Qk1VX1NURikpICE9IChCTVVfU1RGfEJNVV9FT0YpCi0JCQkgICAgIHx8IGJhZF9waHlfc3RhdHVzKGh3LCBzdGF0dXMpKSkgewotCQkJc2tnZV9yeF9lcnJvcihza2dlLCBlIC0gcmluZy0+c3RhcnQsIGNvbnRyb2wsIHN0YXR1cyk7Ci0JCQlza2dlX3J4X3JldXNlKGUsIHNrZ2UtPnJ4X2J1Zl9zaXplKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKG5ldGlmX21zZ19yeF9zdGF0dXMoc2tnZSkpCi0JCSAgICBwcmludGsoS0VSTl9ERUJVRyBQRlggIiVzOiByeCBzbG90ICV0ZCBzdGF0dXMgMHgleCBsZW4gJWRcbiIsCi0JCQkgICBkZXYtPm5hbWUsIGUgLSByaW5nLT5zdGFydCwgcmQtPnN0YXR1cywgbGVuKTsKLQotCQlza2IgPSBza2dlX3J4X2dldChza2dlLCBlLCBsZW4pOworIAkJc2tiID0gc2tnZV9yeF9nZXQoc2tnZSwgZSwgY29udHJvbCwgcmQtPnN0YXR1cywKKyAJCQkJICBsZTE2X3RvX2NwdShyZC0+Y3N1bTIpKTsKIAkJaWYgKGxpa2VseShza2IpKSB7Ci0JCQlza2JfcHV0KHNrYiwgbGVuKTsKLQkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7Ci0KIAkJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCkBAIC0yODMxLDIxICsyODM3LDI5IEBACiBzdGF0aWMgaW50IHNrZ2Vfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApCiB7CiAJc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKLQlpbnQgZXJyID0gMDsKKwlzdHJ1Y3Qgc2tnZV9odyAqaHcgPSBza2dlLT5odzsKKwl1bnNpZ25lZCBwb3J0ID0gc2tnZS0+cG9ydDsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOwogCiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQogCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiAKLQlza2dlX2Rvd24oZGV2KTsKKwlzcGluX2xvY2tfYmgoJmh3LT5waHlfbG9jayk7CiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIEVUSF9BTEVOKTsKLQltZW1jcHlfdG9pbyhza2dlLT5ody0+cmVncyArIEIyX01BQ18xICsgc2tnZS0+cG9ydCo4LAorCW1lbWNweV90b2lvKGh3LT5yZWdzICsgQjJfTUFDXzEgKyBwb3J0KjgsCiAJCSAgICBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5X3RvaW8oc2tnZS0+aHctPnJlZ3MgKyBCMl9NQUNfMiArIHNrZ2UtPnBvcnQqOCwKKwltZW1jcHlfdG9pbyhody0+cmVncyArIEIyX01BQ18yICsgcG9ydCo4LAogCQkgICAgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKQotCQllcnIgPSBza2dlX3VwKGRldik7Ci0JcmV0dXJuIGVycjsKKworCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX0dFTkVTSVMpCisJCXhtX291dGFkZHIoaHcsIHBvcnQsIFhNX1NBLCBkZXYtPmRldl9hZGRyKTsKKwllbHNlIHsKKwkJZ21hX3NldF9hZGRyKGh3LCBwb3J0LCBHTV9TUkNfQUREUl8xTCwgZGV2LT5kZXZfYWRkcik7CisJCWdtYV9zZXRfYWRkcihodywgcG9ydCwgR01fU1JDX0FERFJfMkwsIGRldi0+ZGV2X2FkZHIpOworCX0KKwlzcGluX3VubG9ja19iaCgmaHctPnBoeV9sb2NrKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZ2UuaCBiL2RyaXZlcnMvbmV0L3NrZ2UuaAppbmRleCBlZmJmOThjLi43MmMxNzViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2dlLmgKKysrIGIvZHJpdmVycy9uZXQvc2tnZS5oCkBAIC05NTMsNiArOTUzLDcgQEAKICAqLwogZW51bSB7CiAJWE1SX0ZTX0xFTgk9IDB4M2ZmZjw8MTgsCS8qIEJpdCAzMS4uMTg6CVJ4IEZyYW1lIExlbmd0aCAqLworCVhNUl9GU19MRU5fU0hJRlQgPSAxOCwKIAlYTVJfRlNfMkxfVkxBTgk9IDE8PDE3LCAvKiBCaXQgMTc6CXRhZ2dlZCB3aCAyTGV2IFZMQU4gSUQqLwogCVhNUl9GU18xX1ZMQU4JPSAxPDwxNiwgLyogQml0IDE2Ogl0YWdnZWQgd2ggMWV2IFZMQU4gSUQqLwogCVhNUl9GU19CQwk9IDE8PDE1LCAvKiBCaXQgMTU6CUJyb2FkY2FzdCBGcmFtZSAqLwpAQCAtMTg2OCw2ICsxODY5LDcgQEAKIC8qIFJlY2VpdmUgRnJhbWUgU3RhdHVzIEVuY29kaW5nICovCiBlbnVtIHsKIAlHTVJfRlNfTEVOCT0gMHhmZmZmPDwxNiwgLyogQml0IDMxLi4xNjoJUnggRnJhbWUgTGVuZ3RoICovCisJR01SX0ZTX0xFTl9TSElGVCA9IDE2LAogCUdNUl9GU19WTEFOCT0gMTw8MTMsIC8qIEJpdCAxMzoJVkxBTiBQYWNrZXQgKi8KIAlHTVJfRlNfSkFCQkVSCT0gMTw8MTIsIC8qIEJpdCAxMjoJSmFiYmVyIFBhY2tldCAqLwogCUdNUl9GU19VTl9TSVpFCT0gMTw8MTEsIC8qIEJpdCAxMToJVW5kZXJzaXplIFBhY2tldCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jIGIvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCmluZGV4IDRlMTkyMjAuLmM3OTZmNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYworKysgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKQEAgLTE4MTcsNiArMTgxNywxMCBAQAogCS8qIExFRHMgYWN0aXZlIGluIGJvdGggbW9kZXMsIGF1dG9zZW5zZSBwcmlvID0gZmliZXIgKi8KIAlzcGlkZXJfbmV0X3dyaXRlX3BoeShjYXJkLT5uZXRkZXYsIDEsIE1JSV9OQ09ORklHLCAweDk0NWYpOwogCisJLyogc3dpdGNoIG9mZiBmaWJyZSBhdXRvbmVnICovCisJc3BpZGVyX25ldF93cml0ZV9waHkoY2FyZC0+bmV0ZGV2LCAxLCBNSUlfTkNPTkZJRywgMHhmYzAxKTsKKwlzcGlkZXJfbmV0X3dyaXRlX3BoeShjYXJkLT5uZXRkZXYsIDEsIDB4MGIsIDB4MDAwNCk7CisKIAlwaHktPmRlZi0+b3BzLT5yZWFkX2xpbmsocGh5KTsKIAlwcl9pbmZvKCJGb3VuZCAlcyB3aXRoICVpIE1icHMsICVzLWR1cGxleC5cbiIsIHBoeS0+ZGVmLT5uYW1lLAogCQlwaHktPnNwZWVkLCBwaHktPmR1cGxleD09MSA/ICJGdWxsIiA6ICJIYWxmIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdGFyZmlyZS5jIGIvZHJpdmVycy9uZXQvc3RhcmZpcmUuYwppbmRleCA4OGI4OWRjLi5lZmRiMTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKQEAgLTEzMywxNCArMTMzLDE4IEBACiAJLSBmaW5hbGx5IGFkZGVkIGZpcm13YXJlIChHUEwnZWQgYnkgQWRhcHRlYykKIAktIHJlbW92ZWQgY29tcGF0aWJpbGl0eSBjb2RlIGZvciAyLjIueAogCisJTEsxLjQuMi4xIChJb24gQmFkdWxlc2N1KQorCS0gZml4ZWQgMzIvNjQgYml0IGlzc3VlcyBvbiBpMzg2ICsgQ09ORklHX0hJR0hNRU0KKwktIGFkZGVkIDMyLWJpdCBwYWRkaW5nIHRvIG91dGdvaW5nIHNrYidzLCByZW1vdmVkIHByZXZpb3VzIHdvcmthcm91bmQKKwogVE9ETzoJLSBmaXggZm9yY2VkIHNwZWVkL2R1cGxleGluZyBjb2RlIChicm9rZW4gYSBsb25nIHRpbWUgYWdvLCB3aGVuCiAJc29tZWJvZHkgY29udmVydGVkIHRoZSBkcml2ZXIgdG8gdXNlIHRoZSBnZW5lcmljIE1JSSBjb2RlKQogCS0gZml4IFZMQU4gc3VwcG9ydAogKi8KIAogI2RlZmluZSBEUlZfTkFNRQkic3RhcmZpcmUiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIxLjAzK0xLMS40LjIiCi0jZGVmaW5lIERSVl9SRUxEQVRFCSJKYW51YXJ5IDE5LCAyMDA1IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4wMytMSzEuNC4yLjEiCisjZGVmaW5lIERSVl9SRUxEQVRFCSJPY3RvYmVyIDMsIDIwMDUiCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CkBAIC0xNjUsNiArMTY5LDE0IEBACiAgKiBvZiBsZW5ndGggMS4gSWYgYW5kIHdoZW4gdGhpcyBpcyBmaXhlZCwgdGhlICNkZWZpbmUgYmVsb3cgY2FuIGJlIHJlbW92ZWQuCiAgKi8KICNkZWZpbmUgSEFTX0JST0tFTl9GSVJNV0FSRQorCisvKgorICogSWYgdXNpbmcgdGhlIGJyb2tlbiBmaXJtd2FyZSwgZGF0YSBtdXN0IGJlIHBhZGRlZCB0byB0aGUgbmV4dCAzMi1iaXQgYm91bmRhcnkuCisgKi8KKyNpZmRlZiBIQVNfQlJPS0VOX0ZJUk1XQVJFCisjZGVmaW5lIFBBRERJTkdfTUFTSyAzCisjZW5kaWYKKwogLyoKICAqIERlZmluZSB0aGlzIGlmIHVzaW5nIHRoZSBkcml2ZXIgd2l0aCB0aGUgemVyby1jb3B5IHBhdGNoCiAgKi8KQEAgLTI1Nyw5ICsyNjksMTAgQEAKICAqIFRoaXMgU1VDS1MuCiAgKiBXZSBuZWVkIGEgbXVjaCBiZXR0ZXIgbWV0aG9kIHRvIGRldGVybWluZSBpZiBkbWFfYWRkcl90IGlzIDY0LWJpdC4KICAqLwotI2lmIChkZWZpbmVkKF9faTM4Nl9fKSAmJiBkZWZpbmVkKENPTkZJR19ISUdITUVNKSAmJiAoTElOVVhfVkVSU0lPTl9DT0RFID4gMHgyMDUwMCB8fCBkZWZpbmVkKENPTkZJR19ISUdITUVNNjRHKSkpIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZCAoX19pYTY0X18pIHx8IGRlZmluZWQoX19taXBzNjRfXykgfHwgKGRlZmluZWQoX19taXBzX18pICYmIGRlZmluZWQoQ09ORklHX0hJR0hNRU0pICYmIGRlZmluZWQoQ09ORklHXzY0QklUX1BIWVNfQUREUikpCisjaWYgKGRlZmluZWQoX19pMzg2X18pICYmIGRlZmluZWQoQ09ORklHX0hJR0hNRU02NEcpKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQgKF9faWE2NF9fKSB8fCBkZWZpbmVkKF9fbWlwczY0X18pIHx8IChkZWZpbmVkKF9fbWlwc19fKSAmJiBkZWZpbmVkKENPTkZJR19ISUdITUVNKSAmJiBkZWZpbmVkKENPTkZJR182NEJJVF9QSFlTX0FERFIpKQogLyogNjQtYml0IGRtYV9hZGRyX3QgKi8KICNkZWZpbmUgQUREUl82NEJJVFMJLyogVGhpcyBjaGlwIHVzZXMgNjQgYml0IGFkZHJlc3Nlcy4gKi8KKyNkZWZpbmUgbmV0ZHJ2X2FkZHJfdCB1NjQKICNkZWZpbmUgY3B1X3RvX2RtYSh4KSBjcHVfdG9fbGU2NCh4KQogI2RlZmluZSBkbWFfdG9fY3B1KHgpIGxlNjRfdG9fY3B1KHgpCiAjZGVmaW5lIFJYX0RFU0NfUV9BRERSX1NJWkUgUnhEZXNjUUFkZHI2NGJpdApAQCAtMjY4LDYgKzI4MSw3IEBACiAjZGVmaW5lIFRYX0NPTVBMX1FfQUREUl9TSVpFIFR4Q29tcGxRQWRkcjY0Yml0CiAjZGVmaW5lIFJYX0RFU0NfQUREUl9TSVpFIFJ4RGVzY0FkZHI2NGJpdAogI2Vsc2UgIC8qIDMyLWJpdCBkbWFfYWRkcl90ICovCisjZGVmaW5lIG5ldGRydl9hZGRyX3QgdTMyCiAjZGVmaW5lIGNwdV90b19kbWEoeCkgY3B1X3RvX2xlMzIoeCkKICNkZWZpbmUgZG1hX3RvX2NwdSh4KSBsZTMyX3RvX2NwdSh4KQogI2RlZmluZSBSWF9ERVNDX1FfQUREUl9TSVpFIFJ4RGVzY1FBZGRyMzJiaXQKQEAgLTEzMzMsMjEgKzEzNDcsMTAgQEAKIAl9CiAKICNpZiBkZWZpbmVkKFpFUk9DT1BZKSAmJiBkZWZpbmVkKEhBU19CUk9LRU5fRklSTVdBUkUpCi0JewotCQlpbnQgaGFzX2JhZF9sZW5ndGggPSAwOwotCi0JCWlmIChza2JfZmlyc3RfZnJhZ19sZW4oc2tiKSA9PSAxKQotCQkJaGFzX2JhZF9sZW5ndGggPSAxOwotCQllbHNlIHsKLQkJCWZvciAoaSA9IDA7IGkgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBpKyspCi0JCQkJaWYgKHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZSA9PSAxKSB7Ci0JCQkJCWhhc19iYWRfbGVuZ3RoID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQl9Ci0KLQkJaWYgKGhhc19iYWRfbGVuZ3RoKQotCQkJc2tiX2NoZWNrc3VtX2hlbHAoc2tiLCAwKTsKKwlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcpIHsKKwkJc2tiID0gc2tiX3BhZHRvKHNrYiwgKHNrYi0+bGVuICsgUEFERElOR19NQVNLKSAmIH5QQURESU5HX01BU0spOworCQlpZiAoc2tiID09IE5VTEwpCisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KICNlbmRpZiAvKiBaRVJPQ09QWSAmJiBIQVNfQlJPS0VOX0ZJUk1XQVJFICovCiAKQEAgLTIxMjcsMTMgKzIxMzAsMTIgQEAKICNlbmRpZgogI2VuZGlmCiAKLSNpZm5kZWYgQUREUl82NEJJVFMKIAkvKiB3ZSBjYW4gZG8gdGhpcyB0ZXN0IG9ubHkgYXQgcnVuLXRpbWUuLi4gc2lnaCAqLwotCWlmIChzaXplb2YoZG1hX2FkZHJfdCkgPT0gc2l6ZW9mKHU2NCkpIHsKLQkJcHJpbnRrKCJUaGlzIGRyaXZlciBoYXMgbm90IGJlZW4gcG9ydGVkIHRvIHRoaXMgNjQtYml0IGFyY2hpdGVjdHVyZSB5ZXRcbiIpOworCWlmIChzaXplb2YoZG1hX2FkZHJfdCkgIT0gc2l6ZW9mKG5ldGRydl9hZGRyX3QpKSB7CisJCXByaW50aygiVGhpcyBkcml2ZXIgaGFzIGRtYV9hZGRyX3QgaXNzdWVzLCBwbGVhc2Ugc2VuZCBlbWFpbCB0byBtYWludGFpbmVyXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotI2VuZGlmIC8qIG5vdCBBRERSXzY0QklUUyAqLworCiAJcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCAoJnN0YXJmaXJlX2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmdlbS5oIGIvZHJpdmVycy9uZXQvc3VuZ2VtLmgKaW5kZXggZmY4YWU1Zi4uMTMwMDZkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuZ2VtLmgKKysrIGIvZHJpdmVycy9uZXQvc3VuZ2VtLmgKQEAgLTEwMzUsNyArMTAzNSw4IEBACiAJCQkKICNkZWZpbmUgQUxJR05FRF9SWF9TS0JfQUREUihhZGRyKSBcCiAgICAgICAgICgoKCh1bnNpZ25lZCBsb25nKShhZGRyKSArICg2NFVMIC0gMVVMKSkgJiB+KDY0VUwgLSAxVUwpKSAtICh1bnNpZ25lZCBsb25nKShhZGRyKSkKLXN0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBza19idWZmICpnZW1fYWxsb2Nfc2tiKGludCBzaXplLCBpbnQgZ2ZwX2ZsYWdzKQorc3RhdGljIF9faW5saW5lX18gc3RydWN0IHNrX2J1ZmYgKmdlbV9hbGxvY19za2IoaW50IHNpemUsCisJCQkJCQlnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGFsbG9jX3NrYihzaXplICsgNjQsIGdmcF9mbGFncyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5jIGIvZHJpdmVycy9uZXQvdGczLmMKaW5kZXggNzU5OWY1Mi4uMTgwMmMzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmMKKysrIGIvZHJpdmVycy9uZXQvdGczLmMKQEAgLTY3LDggKzY3LDggQEAKIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJ0ZzMiCiAjZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjMuMzkiCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiU2VwdGVtYmVyIDUsIDIwMDUiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMy40MiIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJPY3QgMywgMjAwNSIKIAogI2RlZmluZSBURzNfREVGX01BQ19NT0RFCTAKICNkZWZpbmUgVEczX0RFRl9SWF9NT0RFCQkwCkBAIC0zMzg5LDcgKzMzODksOCBAQAogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgdGczX2h3X3N0YXR1cyAqc2JsayA9IHRwLT5od19zdGF0dXM7CiAKLQlpZiAoc2Jsay0+c3RhdHVzICYgU0RfU1RBVFVTX1VQREFURUQpIHsKKwlpZiAoKHNibGstPnN0YXR1cyAmIFNEX1NUQVRVU19VUERBVEVEKSB8fAorCSAgICAhKHRyMzIoVEczUENJX1BDSVNUQVRFKSAmIFBDSVNUQVRFX0lOVF9OT1RfQUNUSVZFKSkgewogCQl0dzMyX21haWxib3goTUFJTEJPWF9JTlRFUlJVUFRfMCArIFRHM182NEJJVF9SRUdfTE9XLAogCQkJICAgICAweDAwMDAwMDAxKTsKIAkJcmV0dXJuIElSUV9SRVRWQUwoMSk7CkBAIC0zNDQyLDMxICszNDQzLDQ3IEBACiAJc2NoZWR1bGVfd29yaygmdHAtPnJlc2V0X3Rhc2spOwogfQogCisvKiBUZXN0IGZvciBETUEgYnVmZmVycyBjcm9zc2luZyBhbnkgNEdCIGJvdW5kYXJpZXM6IDRHLCA4RywgZXRjICovCitzdGF0aWMgaW5saW5lIGludCB0ZzNfNGdfb3ZlcmZsb3dfdGVzdChkbWFfYWRkcl90IG1hcHBpbmcsIGludCBsZW4pCit7CisJdTMyIGJhc2UgPSAodTMyKSBtYXBwaW5nICYgMHhmZmZmZmZmZjsKKworCXJldHVybiAoKGJhc2UgPiAweGZmZmZkY2MwKSAmJgorCQkoYmFzZSArIGxlbiArIDggPCBiYXNlKSk7Cit9CisKIHN0YXRpYyB2b2lkIHRnM19zZXRfdHhkKHN0cnVjdCB0ZzMgKiwgaW50LCBkbWFfYWRkcl90LCBpbnQsIHUzMiwgdTMyKTsKIAogc3RhdGljIGludCB0aWdvbjNfNGdiX2h3YnVnX3dvcmthcm91bmQoc3RydWN0IHRnMyAqdHAsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgICAgIHUzMiBndWlsdHlfZW50cnksIGludCBndWlsdHlfbGVuLAotCQkJCSAgICAgICB1MzIgbGFzdF9wbHVzX29uZSwgdTMyICpzdGFydCwgdTMyIG1zcykKKwkJCQkgICAgICAgdTMyIGxhc3RfcGx1c19vbmUsIHUzMiAqc3RhcnQsCisJCQkJICAgICAgIHUzMiBiYXNlX2ZsYWdzLCB1MzIgbXNzKQogewogCXN0cnVjdCBza19idWZmICpuZXdfc2tiID0gc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTsKLQlkbWFfYWRkcl90IG5ld19hZGRyOworCWRtYV9hZGRyX3QgbmV3X2FkZHIgPSAwOwogCXUzMiBlbnRyeSA9ICpzdGFydDsKLQlpbnQgaTsKKwlpbnQgaSwgcmV0ID0gMDsKIAogCWlmICghbmV3X3NrYikgewotCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAtMTsKKwkJcmV0ID0gLTE7CisJfSBlbHNlIHsKKwkJLyogTmV3IFNLQiBpcyBndWFyYW50ZWVkIHRvIGJlIGxpbmVhci4gKi8KKwkJZW50cnkgPSAqc3RhcnQ7CisJCW5ld19hZGRyID0gcGNpX21hcF9zaW5nbGUodHAtPnBkZXYsIG5ld19za2ItPmRhdGEsIG5ld19za2ItPmxlbiwKKwkJCQkJICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJLyogTWFrZSBzdXJlIG5ldyBza2IgZG9lcyBub3QgY3Jvc3MgYW55IDRHIGJvdW5kYXJpZXMuCisJCSAqIERyb3AgdGhlIHBhY2tldCBpZiBpdCBkb2VzLgorCQkgKi8KKwkJaWYgKHRnM180Z19vdmVyZmxvd190ZXN0KG5ld19hZGRyLCBuZXdfc2tiLT5sZW4pKSB7CisJCQlyZXQgPSAtMTsKKwkJCWRldl9rZnJlZV9za2IobmV3X3NrYik7CisJCQluZXdfc2tiID0gTlVMTDsKKwkJfSBlbHNlIHsKKwkJCXRnM19zZXRfdHhkKHRwLCBlbnRyeSwgbmV3X2FkZHIsIG5ld19za2ItPmxlbiwKKwkJCQkgICAgYmFzZV9mbGFncywgMSB8IChtc3MgPDwgMSkpOworCQkJKnN0YXJ0ID0gTkVYVF9UWChlbnRyeSk7CisJCX0KIAl9CiAKLQkvKiBOZXcgU0tCIGlzIGd1YXJhbnRlZWQgdG8gYmUgbGluZWFyLiAqLwotCWVudHJ5ID0gKnN0YXJ0OwotCW5ld19hZGRyID0gcGNpX21hcF9zaW5nbGUodHAtPnBkZXYsIG5ld19za2ItPmRhdGEsIG5ld19za2ItPmxlbiwKLQkJCQkgIFBDSV9ETUFfVE9ERVZJQ0UpOwotCXRnM19zZXRfdHhkKHRwLCBlbnRyeSwgbmV3X2FkZHIsIG5ld19za2ItPmxlbiwKLQkJICAgIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVykgPwotCQkgICAgVFhEX0ZMQUdfVENQVURQX0NTVU0gOiAwLCAxIHwgKG1zcyA8PCAxKSk7Ci0JKnN0YXJ0ID0gTkVYVF9UWChlbnRyeSk7Ci0KIAkvKiBOb3cgY2xlYW4gdXAgdGhlIHN3IHJpbmcgZW50cmllcy4gKi8KIAlpID0gMDsKIAl3aGlsZSAoZW50cnkgIT0gbGFzdF9wbHVzX29uZSkgewpAQCAtMzQ5MSw3ICszNTA4LDcgQEAKIAogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHRnM19zZXRfdHhkKHN0cnVjdCB0ZzMgKnRwLCBpbnQgZW50cnksCkBAIC0zNTE3LDE5ICszNTM0LDEwIEBACiAJdHhkLT52bGFuX3RhZyA9IHZsYW5fdGFnIDw8IFRYRF9WTEFOX1RBR19TSElGVDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdGczXzRnX292ZXJmbG93X3Rlc3QoZG1hX2FkZHJfdCBtYXBwaW5nLCBpbnQgbGVuKQotewotCXUzMiBiYXNlID0gKHUzMikgbWFwcGluZyAmIDB4ZmZmZmZmZmY7Ci0KLQlyZXR1cm4gKChiYXNlID4gMHhmZmZmZGNjMCkgJiYKLQkJKGJhc2UgKyBsZW4gKyA4IDwgYmFzZSkpOwotfQotCiBzdGF0aWMgaW50IHRnM19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWRtYV9hZGRyX3QgbWFwcGluZzsKLQl1bnNpZ25lZCBpbnQgaTsKIAl1MzIgbGVuLCBlbnRyeSwgYmFzZV9mbGFncywgbXNzOwogCWludCB3b3VsZF9oaXRfaHdidWc7CiAKQEAgLTM2MjQsNyArMzYzMiw3IEBACiAJd291bGRfaGl0X2h3YnVnID0gMDsKIAogCWlmICh0ZzNfNGdfb3ZlcmZsb3dfdGVzdChtYXBwaW5nLCBsZW4pKQotCQl3b3VsZF9oaXRfaHdidWcgPSBlbnRyeSArIDE7CisJCXdvdWxkX2hpdF9od2J1ZyA9IDE7CiAKIAl0ZzNfc2V0X3R4ZCh0cCwgZW50cnksIG1hcHBpbmcsIGxlbiwgYmFzZV9mbGFncywKIAkJICAgIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID09IDApIHwgKG1zcyA8PCAxKSk7CkBAIC0zNjQ4LDEyICszNjU2LDggQEAKIAkJCXRwLT50eF9idWZmZXJzW2VudHJ5XS5za2IgPSBOVUxMOwogCQkJcGNpX3VubWFwX2FkZHJfc2V0KCZ0cC0+dHhfYnVmZmVyc1tlbnRyeV0sIG1hcHBpbmcsIG1hcHBpbmcpOwogCi0JCQlpZiAodGczXzRnX292ZXJmbG93X3Rlc3QobWFwcGluZywgbGVuKSkgewotCQkJCS8qIE9ubHkgb25lIHNob3VsZCBtYXRjaC4gKi8KLQkJCQlpZiAod291bGRfaGl0X2h3YnVnKQotCQkJCQlCVUcoKTsKLQkJCQl3b3VsZF9oaXRfaHdidWcgPSBlbnRyeSArIDE7Ci0JCQl9CisJCQlpZiAodGczXzRnX292ZXJmbG93X3Rlc3QobWFwcGluZywgbGVuKSkKKwkJCQl3b3VsZF9oaXRfaHdidWcgPSAxOwogCiAJCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9IV19UU08pCiAJCQkJdGczX3NldF90eGQodHAsIGVudHJ5LCBtYXBwaW5nLCBsZW4sCkBAIC0zNjY5LDM0ICszNjczLDE1IEBACiAJaWYgKHdvdWxkX2hpdF9od2J1ZykgewogCQl1MzIgbGFzdF9wbHVzX29uZSA9IGVudHJ5OwogCQl1MzIgc3RhcnQ7Ci0JCXVuc2lnbmVkIGludCBsZW4gPSAwOwogCi0JCXdvdWxkX2hpdF9od2J1ZyAtPSAxOwotCQllbnRyeSA9IGVudHJ5IC0gMSAtIHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7Ci0JCWVudHJ5ICY9IChURzNfVFhfUklOR19TSVpFIC0gMSk7Ci0JCXN0YXJ0ID0gZW50cnk7Ci0JCWkgPSAwOwotCQl3aGlsZSAoZW50cnkgIT0gbGFzdF9wbHVzX29uZSkgewotCQkJaWYgKGkgPT0gMCkKLQkJCQlsZW4gPSBza2JfaGVhZGxlbihza2IpOwotCQkJZWxzZQotCQkJCWxlbiA9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaS0xXS5zaXplOwotCi0JCQlpZiAoZW50cnkgPT0gd291bGRfaGl0X2h3YnVnKQotCQkJCWJyZWFrOwotCi0JCQlpKys7Ci0JCQllbnRyeSA9IE5FWFRfVFgoZW50cnkpOwotCi0JCX0KKwkJc3RhcnQgPSBlbnRyeSAtIDEgLSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOworCQlzdGFydCAmPSAoVEczX1RYX1JJTkdfU0laRSAtIDEpOwogCiAJCS8qIElmIHRoZSB3b3JrYXJvdW5kIGZhaWxzIGR1ZSB0byBtZW1vcnkvbWFwcGluZwogCQkgKiBmYWlsdXJlLCBzaWxlbnRseSBkcm9wIHRoaXMgcGFja2V0LgogCQkgKi8KLQkJaWYgKHRpZ29uM180Z2JfaHdidWdfd29ya2Fyb3VuZCh0cCwgc2tiLAotCQkJCQkJZW50cnksIGxlbiwKLQkJCQkJCWxhc3RfcGx1c19vbmUsCi0JCQkJCQkmc3RhcnQsIG1zcykpCisJCWlmICh0aWdvbjNfNGdiX2h3YnVnX3dvcmthcm91bmQodHAsIHNrYiwgbGFzdF9wbHVzX29uZSwKKwkJCQkJCSZzdGFydCwgYmFzZV9mbGFncywgbXNzKSkKIAkJCWdvdG8gb3V0X3VubG9jazsKIAogCQllbnRyeSA9IHN0YXJ0OwpAQCAtNTQxMSw2ICs1Mzk2LDkgQEAKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKIAorCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLT5zYV9kYXRhKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CiAKIAlzcGluX2xvY2tfYmgoJnRwLT5sb2NrKTsKQEAgLTU4MjIsNiArNTgxMCwxMyBAQAogCX0KIAltZW1zZXQodHAtPmh3X3N0YXR1cywgMCwgVEczX0hXX1NUQVRVU19TSVpFKTsKIAorCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX01JSV9TRVJERVMpIHsKKwkJdHAtPnRnM19mbGFnczIgJj0gflRHM19GTEcyX1BBUkFMTEVMX0RFVEVDVDsKKwkJLyogcmVzZXQgdG8gcHJldmVudCBsb3NpbmcgMXN0IHJ4IHBhY2tldCBpbnRlcm1pdHRlbnRseSAqLworCQl0dzMyX2YoTUFDX1JYX01PREUsIFJYX01PREVfUkVTRVQpOworCQl1ZGVsYXkoMTApOworCX0KKwogCXRwLT5tYWNfbW9kZSA9IE1BQ19NT0RFX1RYU1RBVF9FTkFCTEUgfCBNQUNfTU9ERV9SWFNUQVRfRU5BQkxFIHwKIAkJTUFDX01PREVfVERFX0VOQUJMRSB8IE1BQ19NT0RFX1JERV9FTkFCTEUgfCBNQUNfTU9ERV9GSERFX0VOQUJMRTsKIAl0dzMyX2YoTUFDX01PREUsIHRwLT5tYWNfbW9kZSB8IE1BQ19NT0RFX1JYU1RBVF9DTEVBUiB8IE1BQ19NT0RFX1RYU1RBVF9DTEVBUik7CkBAIC01OTUzLDcgKzU5NDgsNyBAQAogCXR3MzIoTUFDX0xFRF9DVFJMLCB0cC0+bGVkX2N0cmwpOwogCiAJdHczMihNQUNfTUlfU1RBVCwgTUFDX01JX1NUQVRfTE5LU1RBVF9BVFROX0VOQUIpOwotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0FOWV9TRVJERVMpIHsKKwlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QSFlfU0VSREVTKSB7CiAJCXR3MzJfZihNQUNfUlhfTU9ERSwgUlhfTU9ERV9SRVNFVCk7CiAJCXVkZWxheSgxMCk7CiAJfQpAQCAtNzM3NiwxMiArNzM3MSwxNyBAQAogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAorCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BIWV9TRVJERVMpCisJCXJldHVybiAtRUlOVkFMOworCiAJc3Bpbl9sb2NrX2JoKCZ0cC0+bG9jayk7CiAJciA9IC1FSU5WQUw7CiAJdGczX3JlYWRwaHkodHAsIE1JSV9CTUNSLCAmYm1jcik7CiAJaWYgKCF0ZzNfcmVhZHBoeSh0cCwgTUlJX0JNQ1IsICZibWNyKSAmJgotCSAgICAoYm1jciAmIEJNQ1JfQU5FTkFCTEUpKSB7Ci0JCXRnM193cml0ZXBoeSh0cCwgTUlJX0JNQ1IsIGJtY3IgfCBCTUNSX0FOUkVTVEFSVCk7CisJICAgICgoYm1jciAmIEJNQ1JfQU5FTkFCTEUpIHx8CisJICAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QQVJBTExFTF9ERVRFQ1QpKSkgeworCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9CTUNSLCBibWNyIHwgQk1DUl9BTlJFU1RBUlQgfAorCQkJCQkgICBCTUNSX0FORU5BQkxFKTsKIAkJciA9IDA7CiAJfQogCXNwaW5fdW5sb2NrX2JoKCZ0cC0+bG9jayk7CkBAIC03OTQzLDE5ICs3OTQzLDMyIEBACiAJc3RydWN0IHRnM19yeF9idWZmZXJfZGVzYyAqZGVzYzsKIAogCWlmIChsb29wYmFja19tb2RlID09IFRHM19NQUNfTE9PUEJBQ0spIHsKKwkJLyogSFcgZXJyYXRhIC0gbWFjIGxvb3BiYWNrIGZhaWxzIGluIHNvbWUgY2FzZXMgb24gNTc4MC4KKwkJICogTm9ybWFsIHRyYWZmaWMgYW5kIFBIWSBsb29wYmFjayBhcmUgbm90IGFmZmVjdGVkIGJ5CisJCSAqIGVycmF0YS4KKwkJICovCisJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4MCkKKwkJCXJldHVybiAwOworCiAJCW1hY19tb2RlID0gKHRwLT5tYWNfbW9kZSAmIH5NQUNfTU9ERV9QT1JUX01PREVfTUFTSykgfAogCQkJICAgTUFDX01PREVfUE9SVF9JTlRfTFBCQUNLIHwgTUFDX01PREVfTElOS19QT0xBUklUWSB8CiAJCQkgICBNQUNfTU9ERV9QT1JUX01PREVfR01JSTsKIAkJdHczMihNQUNfTU9ERSwgbWFjX21vZGUpOwogCX0gZWxzZSBpZiAobG9vcGJhY2tfbW9kZSA9PSBURzNfUEhZX0xPT1BCQUNLKSB7CisJCXRnM193cml0ZXBoeSh0cCwgTUlJX0JNQ1IsIEJNQ1JfTE9PUEJBQ0sgfCBCTUNSX0ZVTExEUExYIHwKKwkJCQkJICAgQk1DUl9TUEVFRDEwMDApOworCQl1ZGVsYXkoNDApOworCQkvKiByZXNldCB0byBwcmV2ZW50IGxvc2luZyAxc3QgcnggcGFja2V0IGludGVybWl0dGVudGx5ICovCisJCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX01JSV9TRVJERVMpIHsKKwkJCXR3MzJfZihNQUNfUlhfTU9ERSwgUlhfTU9ERV9SRVNFVCk7CisJCQl1ZGVsYXkoMTApOworCQkJdHczMl9mKE1BQ19SWF9NT0RFLCB0cC0+cnhfbW9kZSk7CisJCX0KIAkJbWFjX21vZGUgPSAodHAtPm1hY19tb2RlICYgfk1BQ19NT0RFX1BPUlRfTU9ERV9NQVNLKSB8CiAJCQkgICBNQUNfTU9ERV9MSU5LX1BPTEFSSVRZIHwgTUFDX01PREVfUE9SVF9NT0RFX0dNSUk7CiAJCWlmICgodHAtPnBoeV9pZCAmIFBIWV9JRF9NQVNLKSA9PSBQSFlfSURfQkNNNTQwMSkKIAkJCW1hY19tb2RlICY9IH5NQUNfTU9ERV9MSU5LX1BPTEFSSVRZOwogCQl0dzMyKE1BQ19NT0RFLCBtYWNfbW9kZSk7Ci0KLQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfQk1DUiwgQk1DUl9MT09QQkFDSyB8IEJNQ1JfRlVMTERQTFggfAotCQkJCQkgICBCTUNSX1NQRUVEMTAwMCk7CiAJfQogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC05MjcxLDYgKzkyODQsOCBAQAogCXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB3cml0ZV9yZW9yZGVyX2NoaXBzZXRzW10gPSB7CiAJCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwKIAkJICAgICAgICAgICAgIFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwQykgfSwKKwkJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVklBLAorCQkJICAgICBQQ0lfREVWSUNFX0lEX1ZJQV84Mzg1XzApIH0sCiAJCXsgfSwKIAl9OwogCXUzMiBtaXNjX2N0cmxfcmVnOwpAQCAtOTI4NSwxNSArOTMwMCw2IEBACiAJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX1NVTl81NzBYOwogI2VuZGlmCiAKLQkvKiBJZiB3ZSBoYXZlIGFuIEFNRCA3NjIgY2hpcHNldCwgd3JpdGUKLQkgKiByZW9yZGVyaW5nIHRvIHRoZSBtYWlsYm94IHJlZ2lzdGVycyBkb25lIGJ5IHRoZSBob3N0Ci0JICogY29udHJvbGxlciBjYW4gY2F1c2UgbWFqb3IgdHJvdWJsZXMuICBXZSByZWFkIGJhY2sgZnJvbQotCSAqIGV2ZXJ5IG1haWxib3ggcmVnaXN0ZXIgd3JpdGUgdG8gZm9yY2UgdGhlIHdyaXRlcyB0byBiZQotCSAqIHBvc3RlZCB0byB0aGUgY2hpcCBpbiBvcmRlci4KLQkgKi8KLQlpZiAocGNpX2Rldl9wcmVzZW50KHdyaXRlX3Jlb3JkZXJfY2hpcHNldHMpKQotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX01CT1hfV1JJVEVfUkVPUkRFUjsKLQogCS8qIEZvcmNlIG1lbW9yeSB3cml0ZSBpbnZhbGlkYXRlIG9mZi4gIElmIHdlIGxlYXZlIGl0IG9uLAogCSAqIHRoZW4gb24gNTcwMF9CWCBjaGlwcyB3ZSBoYXZlIHRvIGVuYWJsZSBhIHdvcmthcm91bmQuCiAJICogVGhlIHdvcmthcm91bmQgaXMgdG8gc2V0IHRoZSBURzNQQ0lfRE1BX1JXX0NUUkwgYm91bmRhcnkKQEAgLTk0MjQsNiArOTQzMCwxNiBAQAogCWlmIChwY2lfZmluZF9jYXBhYmlsaXR5KHRwLT5wZGV2LCBQQ0lfQ0FQX0lEX0VYUCkgIT0gMCkKIAkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfUENJX0VYUFJFU1M7CiAKKwkvKiBJZiB3ZSBoYXZlIGFuIEFNRCA3NjIgb3IgVklBIEs4VDgwMCBjaGlwc2V0LCB3cml0ZQorCSAqIHJlb3JkZXJpbmcgdG8gdGhlIG1haWxib3ggcmVnaXN0ZXJzIGRvbmUgYnkgdGhlIGhvc3QKKwkgKiBjb250cm9sbGVyIGNhbiBjYXVzZSBtYWpvciB0cm91Ymxlcy4gIFdlIHJlYWQgYmFjayBmcm9tCisJICogZXZlcnkgbWFpbGJveCByZWdpc3RlciB3cml0ZSB0byBmb3JjZSB0aGUgd3JpdGVzIHRvIGJlCisJICogcG9zdGVkIHRvIHRoZSBjaGlwIGluIG9yZGVyLgorCSAqLworCWlmIChwY2lfZGV2X3ByZXNlbnQod3JpdGVfcmVvcmRlcl9jaGlwc2V0cykgJiYKKwkgICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BDSV9FWFBSRVNTKSkKKwkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19NQk9YX1dSSVRFX1JFT1JERVI7CisKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDMgJiYKIAkgICAgdHAtPnBjaV9sYXRfdGltZXIgPCA2NCkgewogCQl0cC0+cGNpX2xhdF90aW1lciA9IDY0OwpAQCAtOTUzMiw3ICs5NTQ4LDcgQEAKIAkJdHAtPndyaXRlMzJfcnhfbWJveCA9IHRnM193cml0ZV9pbmRpcmVjdF9tYm94OwogCiAJCWlvdW5tYXAodHAtPnJlZ3MpOwotCQl0cC0+cmVncyA9IDA7CisJCXRwLT5yZWdzID0gTlVMTDsKIAogCQlwY2lfcmVhZF9jb25maWdfd29yZCh0cC0+cGRldiwgUENJX0NPTU1BTkQsICZwY2lfY21kKTsKIAkJcGNpX2NtZCAmPSB+UENJX0NPTU1BTkRfTUVNT1JZOwpAQCAtMTAzMzgsNiArMTAzNTQsNDQgQEAKIAl9OwogfQogCitzdGF0aWMgY2hhciAqIF9fZGV2aW5pdCB0ZzNfYnVzX3N0cmluZyhzdHJ1Y3QgdGczICp0cCwgY2hhciAqc3RyKQoreworCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BDSV9FWFBSRVNTKSB7CisJCXN0cmNweShzdHIsICJQQ0kgRXhwcmVzcyIpOworCQlyZXR1cm4gc3RyOworCX0gZWxzZSBpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1BDSVhfTU9ERSkgeworCQl1MzIgY2xvY2tfY3RybCA9IHRyMzIoVEczUENJX0NMT0NLX0NUUkwpICYgMHgxZjsKKworCQlzdHJjcHkoc3RyLCAiUENJWDoiKTsKKworCQlpZiAoKGNsb2NrX2N0cmwgPT0gNykgfHwKKwkJICAgICgodHIzMihHUkNfTUlTQ19DRkcpICYgR1JDX01JU0NfQ0ZHX0JPQVJEX0lEX01BU0spID09CisJCSAgICAgR1JDX01JU0NfQ0ZHX0JPQVJEX0lEXzU3MDRDSU9CRSkpCisJCQlzdHJjYXQoc3RyLCAiMTMzTUh6Iik7CisJCWVsc2UgaWYgKGNsb2NrX2N0cmwgPT0gMCkKKwkJCXN0cmNhdChzdHIsICIzM01IeiIpOworCQllbHNlIGlmIChjbG9ja19jdHJsID09IDIpCisJCQlzdHJjYXQoc3RyLCAiNTBNSHoiKTsKKwkJZWxzZSBpZiAoY2xvY2tfY3RybCA9PSA0KQorCQkJc3RyY2F0KHN0ciwgIjY2TUh6Iik7CisJCWVsc2UgaWYgKGNsb2NrX2N0cmwgPT0gNikKKwkJCXN0cmNhdChzdHIsICIxMDBNSHoiKTsKKwkJZWxzZSBpZiAoY2xvY2tfY3RybCA9PSA3KQorCQkJc3RyY2F0KHN0ciwgIjEzM01IeiIpOworCX0gZWxzZSB7CisJCXN0cmNweShzdHIsICJQQ0k6Iik7CisJCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUENJX0hJR0hfU1BFRUQpCisJCQlzdHJjYXQoc3RyLCAiNjZNSHoiKTsKKwkJZWxzZQorCQkJc3RyY2F0KHN0ciwgIjMzTUh6Iik7CisJfQorCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUENJXzMyQklUKQorCQlzdHJjYXQoc3RyLCAiOjMyLWJpdCIpOworCWVsc2UKKwkJc3RyY2F0KHN0ciwgIjo2NC1iaXQiKTsKKwlyZXR1cm4gc3RyOworfQorCiBzdGF0aWMgc3RydWN0IHBjaV9kZXYgKiBfX2RldmluaXQgdGczX2ZpbmRfNTcwNF9wZWVyKHN0cnVjdCB0ZzMgKnRwKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZWVyOwpAQCAtMTA0MDAsNiArMTA0NTQsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHRnMyAqdHA7CiAJaW50IGksIGVyciwgcGNpX3VzaW5nX2RhYywgcG1fY2FwOworCWNoYXIgc3RyWzQwXTsKIAogCWlmICh0ZzNfdmVyc2lvbl9wcmludGVkKysgPT0gMCkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXMiLCB2ZXJzaW9uKTsKQEAgLTEwNjQ1LDE2ICsxMDcwMCwxMiBAQAogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogVGlnb24zIFtwYXJ0bm8oJXMpIHJldiAlMDR4IFBIWSglcyldIChQQ0klczolczolcykgJXNCYXNlVCBFdGhlcm5ldCAiLAorCXByaW50ayhLRVJOX0lORk8gIiVzOiBUaWdvbjMgW3BhcnRubyglcykgcmV2ICUwNHggUEhZKCVzKV0gKCVzKSAlc0Jhc2VUIEV0aGVybmV0ICIsCiAJICAgICAgIGRldi0+bmFtZSwKIAkgICAgICAgdHAtPmJvYXJkX3BhcnRfbnVtYmVyLAogCSAgICAgICB0cC0+cGNpX2NoaXBfcmV2X2lkLAogCSAgICAgICB0ZzNfcGh5X3N0cmluZyh0cCksCi0JICAgICAgICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1BDSVhfTU9ERSkgPyAiWCIgOiAiIiksCi0JICAgICAgICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1BDSV9ISUdIX1NQRUVEKSA/Ci0JCSgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1BDSVhfTU9ERSkgPyAiMTMzTUh6IiA6ICI2Nk1IeiIpIDoKLQkJKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUENJWF9NT0RFKSA/ICIxMDBNSHoiIDogIjMzTUh6IikpLAotCSAgICAgICAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19QQ0lfMzJCSVQpID8gIjMyLWJpdCIgOiAiNjQtYml0IiksCisJICAgICAgIHRnM19idXNfc3RyaW5nKHRwLCBzdHIpLAogCSAgICAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHXzEwXzEwMF9PTkxZKSA/ICIxMC8xMDAiIDogIjEwLzEwMC8xMDAwIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQpAQCAtMTA2ODAsNyArMTA3MzEsNyBAQAogZXJyX291dF9pb3VubWFwOgogCWlmICh0cC0+cmVncykgewogCQlpb3VubWFwKHRwLT5yZWdzKTsKLQkJdHAtPnJlZ3MgPSAwOworCQl0cC0+cmVncyA9IE5VTEw7CiAJfQogCiBlcnJfb3V0X2ZyZWVfZGV2OgpAQCAtMTA3MDUsNyArMTA3NTYsNyBAQAogCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCQlpZiAodHAtPnJlZ3MpIHsKIAkJCWlvdW5tYXAodHAtPnJlZ3MpOwotCQkJdHAtPnJlZ3MgPSAwOworCQkJdHAtPnJlZ3MgPSBOVUxMOwogCQl9CiAJCWZyZWVfbmV0ZGV2KGRldik7CiAJCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuaCBiL2RyaXZlcnMvbmV0L3RnMy5oCmluZGV4IGMxODRiNzcuLjJlNzMzYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5oCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5oCkBAIC0yMjQ2LDYgKzIyNDYsNyBAQAogCSAoWCkgPT0gUEhZX0lEX0JDTTU0MTEgfHwgKFgpID09IFBIWV9JRF9CQ001NzAxIHx8IFwKIAkgKFgpID09IFBIWV9JRF9CQ001NzAzIHx8IChYKSA9PSBQSFlfSURfQkNNNTcwNCB8fCBcCiAJIChYKSA9PSBQSFlfSURfQkNNNTcwNSB8fCAoWCkgPT0gUEhZX0lEX0JDTTU3NTAgfHwgXAorCSAoWCkgPT0gUEhZX0lEX0JDTTU3NTIgfHwgKFgpID09IFBIWV9JRF9CQ001NzgwIHx8IFwKIAkgKFgpID09IFBIWV9JRF9CQ004MDAyKQogCiAJc3RydWN0IHRnM19od19zdGF0cwkJKmh3X3N0YXRzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvaWJtdHIuYwppbmRleCBlN2IwMDEwLi4zMjA1N2U2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvaWJtdHIuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvaWJtdHIuYwpAQCAtNTMxLDcgKzUzMSw2IEBACiAJCQlpZiAoIXRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIGNvbnRpbnVlOwogCQkJRFBSSU5USyggIkhhcmR3YXJlIHRpbWVvdXQgZHVyaW5nIGluaXRpYWxpemF0aW9uLlxuIik7CiAJCQlpb3VubWFwKHRfbW1pbyk7Ci0JCQlrZnJlZSh0aSk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCQl0aS0+c3JhbV9waHlzID0KQEAgLTY0NSw3ICs2NDQsNiBAQAogCQkJRFBSSU5USygiVW5rbm93biBzaGFyZWQgcmFtIHBhZ2luZyBpbmZvICUwMVhcbiIsCiAJCQkJCQkJdGktPnNoYXJlZF9yYW1fcGFnaW5nKTsKIAkJCWlvdW5tYXAodF9tbWlvKTsgCi0JCQlrZnJlZSh0aSk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJCWJyZWFrOwogCQl9IC8qZW5kIHN3aXRjaCBzaGFyZWRfcmFtX3BhZ2luZyAqLwpAQCAtNjc1LDcgKzY3Myw2IEBACiAJCQkiZHJpdmVyIGxpbWl0ICglMDV4KSwgYWRhcHRlciBub3Qgc3RhcnRlZC5cbiIsCiAJCQljaGtfYmFzZSwgaWJtdHJfbWVtX2Jhc2UgKyBJQk1UUl9TSEFSRURfUkFNX1NJWkUpOwogCQkJaW91bm1hcCh0X21taW8pOwotCQkJa2ZyZWUodGkpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0gZWxzZSB7IC8qIHNlZW1zIGNvb2wsIHJlY29yZCB3aGF0IHdlIGhhdmUgZmlndXJlZCBvdXQgKi8KIAkJCXRpLT5zcmFtX2Jhc2UgPSBuZXdfYmFzZSA+PiAxMjsKQEAgLTY5MCw3ICs2ODcsNiBAQAogCQlEUFJJTlRLKCJDb3VsZCBub3QgZ3JhYiBpcnEgJWQuICBIYWx0aW5nIFRva2VuIFJpbmcgZHJpdmVyLlxuIiwKIAkJCQkJaXJxKTsKIAkJaW91bm1hcCh0X21taW8pOwotCQlrZnJlZSh0aSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAkvKj8/IE5vdywgYWxsb2NhdGUgc29tZSBvZiB0aGUgUElPIFBPUlRzIGZvciB0aGlzIGRyaXZlci4uICovCkBAIC02OTksNyArNjk1LDYgQEAKIAkJRFBSSU5USygiQ291bGQgbm90IGdyYWIgUElPIHJhbmdlLiBIYWx0aW5nIGRyaXZlci5cbiIpOwogCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKIAkJaW91bm1hcCh0X21taW8pOwotCQlrZnJlZSh0aSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC8yMTE0Mi5jIGIvZHJpdmVycy9uZXQvdHVsaXAvMjExNDIuYwppbmRleCA1ZGI2OTRjLi42ODNmMTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC8yMTE0Mi5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwLzIxMTQyLmMKQEAgLTE3Miw3ICsxNzIsNyBAQAogCQkJaW50IGk7CiAJCQlmb3IgKGkgPSAwOyBpIDwgdHAtPm10YWJsZS0+bGVhZmNvdW50OyBpKyspCiAJCQkJaWYgKHRwLT5tdGFibGUtPm1sZWFmW2ldLm1lZGlhID09IGRldi0+aWZfcG9ydCkgewotCQkJCQlpbnQgc3RhcnR1cCA9ICEgKCh0cC0+Y2hpcF9pZCA9PSBEQzIxMTQzICYmIHRwLT5yZXZpc2lvbiA9PSA2NSkpOworCQkJCQlpbnQgc3RhcnR1cCA9ICEgKCh0cC0+Y2hpcF9pZCA9PSBEQzIxMTQzICYmICh0cC0+cmV2aXNpb24gPT0gNDggfHwgdHAtPnJldmlzaW9uID09IDY1KSkpOwogCQkJCQl0cC0+Y3VyX2luZGV4ID0gaTsKIAkJCQkJdHVsaXBfc2VsZWN0X21lZGlhKGRldiwgc3RhcnR1cCk7CiAJCQkJCXNldHVwX2RvbmUgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfY2lzY28uYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2Npc2NvLmMKaW5kZXggNDhjMDNjMS4uYTAxZWZhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfY2lzY28uYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY19jaXNjby5jCkBAIC03Miw3ICs3Miw3IEBACiAJfQogCXNrYl9yZXNlcnZlKHNrYiwgNCk7CiAJY2lzY29faGFyZF9oZWFkZXIoc2tiLCBkZXYsIENJU0NPX0tFRVBBTElWRSwgTlVMTCwgTlVMTCwgMCk7Ci0JZGF0YSA9IChjaXNjb19wYWNrZXQqKXNrYi0+ZGF0YTsKKwlkYXRhID0gKGNpc2NvX3BhY2tldCopKHNrYi0+ZGF0YSArIDQpOwogCiAJZGF0YS0+dHlwZSA9IGh0b25sKHR5cGUpOwogCWRhdGEtPnBhcjEgPSBodG9ubChwYXIxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9zZGxhbWFpbi5jIGIvZHJpdmVycy9uZXQvd2FuL3NkbGFtYWluLmMKaW5kZXggNzRlMTUxYS4uN2E4YjIyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3NkbGFtYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3NkbGFtYWluLmMKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogcmVxdWVzdF9yZWdpb24oKSwgcmVsZWFzZV9yZWdpb24oKSAqLwogI2luY2x1ZGUgPGxpbnV4L3dhbnJvdXRlci5oPgkvKiBXQU4gcm91dGVyIGRlZmluaXRpb25zICovCiAjaW5jbHVkZSA8bGludXgvd2FucGlwZS5oPgkvKiBXQU5QSVBFIGNvbW1vbiB1c2VyIEFQSSBkZWZpbml0aW9ucyAqLworI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogcGh5c190b192aXJ0KCkgKi8KQEAgLTEyNjgsMzcgKzEyNjksNDEgQEAKIAkKIAlzdHJ1Y3QgaW5faWZhZGRyICppZmFkZHI7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OworCXVuc2lnbmVkIGxvbmcgYWRkciA9IDA7CiAKLQlpZiAoKGluX2RldiA9IF9faW5fZGV2X2dldChkZXYpKSA9PSBOVUxMKXsKLQkJcmV0dXJuIDA7CisJcmN1X3JlYWRfbG9jaygpOworCWlmICgoaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpKSA9PSBOVUxMKXsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKChpZmFkZHIgPSBpbl9kZXYtPmlmYV9saXN0KT09IE5VTEwgKXsKLQkJcmV0dXJuIDA7CisJCWdvdG8gb3V0OwogCX0KIAkKIAlzd2l0Y2ggKG9wdGlvbil7CiAKIAljYXNlIFdBTl9MT0NBTF9JUDoKLQkJcmV0dXJuIGlmYWRkci0+aWZhX2xvY2FsOworCQlhZGRyID0gaWZhZGRyLT5pZmFfbG9jYWw7CiAJCWJyZWFrOwogCQogCWNhc2UgV0FOX1BPSU5UT1BPSU5UX0lQOgotCQlyZXR1cm4gaWZhZGRyLT5pZmFfYWRkcmVzczsKKwkJYWRkciA9IGlmYWRkci0+aWZhX2FkZHJlc3M7CiAJCWJyZWFrOwkKIAogCWNhc2UgV0FOX05FVE1BU0tfSVA6Ci0JCXJldHVybiBpZmFkZHItPmlmYV9tYXNrOworCQlhZGRyID0gaWZhZGRyLT5pZmFfbWFzazsKIAkJYnJlYWs7CiAKIAljYXNlIFdBTl9CUk9BRENBU1RfSVA6Ci0JCXJldHVybiBpZmFkZHItPmlmYV9icm9hZGNhc3Q7CisJCWFkZHIgPSBpZmFkZHItPmlmYV9icm9hZGNhc3Q7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAwOworCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gMDsKK291dDoKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gYWRkcjsKIH0JCiAKIHZvaWQgYWRkX2dhdGV3YXkoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3N5bmNwcHAuYyBiL2RyaXZlcnMvbmV0L3dhbi9zeW5jcHBwLmMKaW5kZXggYjU2YTdiNS4uYTZkM2I1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3N5bmNwcHAuYworKysgYi9kcml2ZXJzL25ldC93YW4vc3luY3BwcC5jCkBAIC03NjksNyArNzY5LDcgQEAKIAkJdTMyIGFkZHIgPSAwLCBtYXNrID0gfjA7IC8qIEZJWE1FOiBpcyB0aGUgbWFzayBjb3JyZWN0PyAqLwogI2lmZGVmIENPTkZJR19JTkVUCiAJCXJjdV9yZWFkX2xvY2soKTsKLQkJaWYgKChpbl9kZXYgPSBfX2luX2Rldl9nZXQoZGV2KSkgIT0gTlVMTCkKKwkJaWYgKChpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldikpICE9IE5VTEwpCiAJCXsKIAkJCWZvciAoaWZhPWluX2Rldi0+aWZhX2xpc3Q7IGlmYSAhPSBOVUxMOwogCQkJCWlmYT1pZmEtPmlmYV9uZXh0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZwppbmRleCAwMGEwN2YzLi43MTg3OTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKQEAgLTI0Myw3ICsyNDMsNyBAQAogCiBjb25maWcgQUlSTwogCXRyaXN0YXRlICJDaXNjby9BaXJvbmV0IDM0WC8zNVgvNDUwMC80ODAwIElTQSBhbmQgUENJIGNhcmRzIgotCWRlcGVuZHMgb24gTkVUX1JBRElPICYmIElTQSAmJiAoUENJIHx8IEJST0tFTikKKwlkZXBlbmRzIG9uIE5FVF9SQURJTyAmJiBJU0FfRE1BX0FQSSAmJiAoUENJIHx8IEJST0tFTikKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIHRoZSBzdGFuZGFyZCBMaW51eCBkcml2ZXIgdG8gc3VwcG9ydCBDaXNjby9BaXJvbmV0IElTQSBhbmQKIAkgIFBDSSA4MDIuMTEgd2lyZWxlc3MgY2FyZHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvLmMKaW5kZXggOGRlNDlmZS4uMTVjZWFmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28uYwpAQCAtNTAzLDkgKzUwMywxNCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKiBMZW5ndGggb2YgdGhlIHBhY2tldCBib2R5ICovCi0JLyogRklYTUU6IHdoYXQgaWYgdGhlIHNrYiBpcyBzbWFsbGVyIHRoYW4gdGhpcz8gKi8KLQlsZW4gPSBtYXhfdChpbnQsc2tiLT5sZW4gLSBFVEhfSExFTiwgRVRIX1pMRU4gLSBFVEhfSExFTik7CisJLyogQ2hlY2sgcGFja2V0IGxlbmd0aCwgcGFkIHNob3J0IHBhY2tldHMsIHJvdW5kIHVwIG9kZCBsZW5ndGggKi8KKwlsZW4gPSBtYXhfdChpbnQsIEFMSUdOKHNrYi0+bGVuLCAyKSwgRVRIX1pMRU4pOworCWlmIChza2ItPmxlbiA8IGxlbikgeworCQlza2IgPSBza2JfcGFkdG8oc2tiLCBsZW4pOworCQlpZiAoc2tiID09IE5VTEwpCisJCQlnb3RvIGZhaWw7CisJfQorCWxlbiAtPSBFVEhfSExFTjsKIAogCWVoID0gKHN0cnVjdCBldGhoZHIgKilza2ItPmRhdGE7CiAKQEAgLTU1Nyw4ICs1NjIsNyBAQAogCQlwID0gc2tiLT5kYXRhOwogCX0KIAotCS8qIFJvdW5kIHVwIGZvciBvZGQgbGVuZ3RoIHBhY2tldHMgKi8KLQllcnIgPSBoZXJtZXNfYmFwX3B3cml0ZShodywgVVNFUl9CQVAsIHAsIEFMSUdOKGRhdGFfbGVuLCAyKSwKKwllcnIgPSBoZXJtZXNfYmFwX3B3cml0ZShodywgVVNFUl9CQVAsIHAsIGRhdGFfbGVuLAogCQkJCXR4ZmlkLCBkYXRhX29mZik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCB3cml0aW5nIHBhY2tldCB0byBCQVBcbiIsCkBAIC01NzQsOCArNTc4LDkgQEAKIAkJCQl0eGZpZCwgTlVMTCk7CiAJaWYgKGVycikgewogCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCB0cmFuc21pdHRpbmcgcGFja2V0XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgdHJhbnNtaXR0aW5nIHBhY2tldFxuIiwKKwkJCQlkZXYtPm5hbWUsIGVycik7CiAJCXN0YXRzLT50eF9lcnJvcnMrKzsKIAkJZ290byBmYWlsOwogCX0KQEAgLTI0NTgsNyArMjQ2Myw2IEBACiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IEhaOyAvKiAxIHNlY29uZCB0aW1lb3V0ICovCiAJZGV2LT5nZXRfc3RhdHMgPSBvcmlub2NvX2dldF9zdGF0czsKIAlkZXYtPmV0aHRvb2xfb3BzID0gJm9yaW5vY29fZXRodG9vbF9vcHM7Ci0JZGV2LT5nZXRfd2lyZWxlc3Nfc3RhdHMgPSBvcmlub2NvX2dldF93aXJlbGVzc19zdGF0czsKIAlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gKHN0cnVjdCBpd19oYW5kbGVyX2RlZiAqKSZvcmlub2NvX2hhbmRsZXJfZGVmOwogCWRldi0+Y2hhbmdlX210dSA9IG9yaW5vY29fY2hhbmdlX210dTsKIAlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IG9yaW5vY29fc2V0X211bHRpY2FzdF9saXN0OwpAQCAtNDM5OSw2ICs0NDAzLDcgQEAKIAkuc3RhbmRhcmQgPSBvcmlub2NvX2hhbmRsZXIsCiAJLnByaXZhdGUgPSBvcmlub2NvX3ByaXZhdGVfaGFuZGxlciwKIAkucHJpdmF0ZV9hcmdzID0gb3Jpbm9jb19wcml2dGFiLAorCS5nZXRfd2lyZWxlc3Nfc3RhdHMgPSBvcmlub2NvX2dldF93aXJlbGVzc19zdGF0cywKIH07CiAKIHN0YXRpYyB2b2lkIG9yaW5vY29fZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3N0cmlwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jCmluZGV4IDRiMGFjYWUuLjdiYzdmYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3N0cmlwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3RyaXAuYwpAQCAtMTM1Miw3ICsxMzUyLDcgQEAKIAkJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCiAJCXJjdV9yZWFkX2xvY2soKTsKLQkJaW5fZGV2ID0gX19pbl9kZXZfZ2V0KHN0cmlwX2luZm8tPmRldik7CisJCWluX2RldiA9IF9faW5fZGV2X2dldF9yY3Uoc3RyaXBfaW5mby0+ZGV2KTsKIAkJaWYgKGluX2RldiA9PSBOVUxMKSB7CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXJldHVybiBOVUxMOwpAQCAtMTUwOCw3ICsxNTA4LDcgQEAKIAogCQlicmQgPSBhZGRyID0gMDsKIAkJcmN1X3JlYWRfbG9jaygpOwotCQlpbl9kZXYgPSBfX2luX2Rldl9nZXQoc3RyaXBfaW5mby0+ZGV2KTsKKwkJaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShzdHJpcF9pbmZvLT5kZXYpOwogCQlpZiAoaW5fZGV2KSB7CiAJCQlpZiAoaW5fZGV2LT5pZmFfbGlzdCkgewogCQkJCWJyZCA9IGluX2Rldi0+aWZhX2xpc3QtPmlmYV9icm9hZGNhc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9sZWQuYyBiL2RyaXZlcnMvcGFyaXNjL2xlZC5jCmluZGV4IGU5MGZiNzIuLjI4NjkwMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2xlZC5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL2xlZC5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CkBAIC0zNTgsOSArMzU5LDEwIEBACiAJLyogd2UgYXJlIHJ1bm5pbmcgYXMgdGFza2xldCwgc28gbG9ja2luZyBkZXZfYmFzZSAKIAkgKiBmb3IgcmVhZGluZyBzaG91bGQgYmUgT0sgKi8KIAlyZWFkX2xvY2soJmRldl9iYXNlX2xvY2spOworCXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKGRldiA9IGRldl9iYXNlOyBkZXY7IGRldiA9IGRldi0+bmV4dCkgewogCSAgICBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHM7Ci0JICAgIHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IF9faW5fZGV2X2dldChkZXYpOworCSAgICBzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7CiAJICAgIGlmICghaW5fZGV2IHx8ICFpbl9kZXYtPmlmYV9saXN0KQogCQljb250aW51ZTsKIAkgICAgaWYgKExPT1BCQUNLKGluX2Rldi0+aWZhX2xpc3QtPmlmYV9sb2NhbCkpCkBAIC0zNzEsNiArMzczLDcgQEAKIAkgICAgcnhfdG90YWwgKz0gc3RhdHMtPnJ4X3BhY2tldHM7CiAJICAgIHR4X3RvdGFsICs9IHN0YXRzLT50eF9wYWNrZXRzOwogCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKIAlyZWFkX3VubG9jaygmZGV2X2Jhc2VfbG9jayk7CiAKIAlyZXR2YWwgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvLmdpdGlnbm9yZSBiL2RyaXZlcnMvcGNpLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI5N2NhOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNpLy5naXRpZ25vcmUKQEAgLTAsMCArMSw0IEBACitjbGFzc2xpc3QuaAorZGV2bGlzdC5oCitnZW4tZGV2bGlzdAorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnLmMKaW5kZXggMTA0NDQ5OC4uZTE3NDNiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcuYwpAQCAtNyw3ICs3LDYgQEAKIAkJIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwotCWNoYXIgKnNjcmF0Y2g7CiAJaW50IGkgPSAwOwogCWludCBsZW5ndGggPSAwOwogCkBAIC0xOCw5ICsxNyw2IEBACiAJaWYgKCFwZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXNjcmF0Y2ggPSBidWZmZXI7Ci0KLQogCWlmIChhZGRfaG90cGx1Z19lbnZfdmFyKGVudnAsIG51bV9lbnZwLCAmaSwKIAkJCQlidWZmZXIsIGJ1ZmZlcl9zaXplLCAmbGVuZ3RoLAogCQkJCSJQQ0lfQ0xBU1M9JTA0WCIsIHBkZXYtPmNsYXNzKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX3BjaS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfcGNpLmMKaW5kZXggODEyMmZlNy4uYjFiYTQyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfcGNpLmMKQEAgLTU1OCw3ICs1NTgsNyBAQAogCXBjaV9idXNfd3JpdGVfY29uZmlnX2J5dGUgKGlibXBocF9wY2lfYnVzLCBkZXZmbiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgQ0FDSEUpOwogCXBjaV9idXNfd3JpdGVfY29uZmlnX2J5dGUgKGlibXBocF9wY2lfYnVzLCBkZXZmbiwgUENJX0xBVEVOQ1lfVElNRVIsIExBVEVOQ1kpOwogCi0JcGNpX2J1c193cml0ZV9jb25maWdfd29yZCAoaWJtcGhwX3BjaV9idXMsIGRldmZuLCBQQ0lfUk9NX0FERFJFU1MsIDB4MDBMKTsKKwlwY2lfYnVzX3dyaXRlX2NvbmZpZ19kd29yZCAoaWJtcGhwX3BjaV9idXMsIGRldmZuLCBQQ0lfUk9NX0FERFJFU1MsIDB4MDBMKTsKIAlwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkIChpYm1waHBfcGNpX2J1cywgZGV2Zm4sIFBDSV9DT01NQU5ELCBERVZJQ0VFTkFCTEUpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jdHJsLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jdHJsLmMKaW5kZXggMGUwOTQ3Ni4uODk4ZjZkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY3RybC5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2N0cmwuYwpAQCAtMjUyNiw3ICsyNTI2LDYgQEAKIAlpbnQgY2xvb3A7CiAJdTggdGVtcF9ieXRlOwogCXU4IGNsYXNzX2NvZGU7Ci0JdTE2IHRlbXBfd29yZDsKIAl1MzIgcmM7CiAJdTMyIHRlbXBfcmVnaXN0ZXI7CiAJdTMyIGJhc2U7CkBAIC0yNjgyLDggKzI2ODEsNyBAQAogCQl9CQkvKiBFbmQgb2YgYmFzZSByZWdpc3RlciBsb29wICovCiAKIAkJLyogZGlzYWJsZSBST00gYmFzZSBBZGRyZXNzICovCi0JCXRlbXBfd29yZCA9IDB4MDBMOwotCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQgKHBjaV9idXMsIGRldmZuLCBQQ0lfUk9NX0FERFJFU1MsIHRlbXBfd29yZCk7CisJCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfZHdvcmQgKHBjaV9idXMsIGRldmZuLCBQQ0lfUk9NX0FERFJFU1MsIDB4MDApOwogCiAJCS8qIFNldCBIUCBwYXJhbWV0ZXJzIChDYWNoZSBMaW5lIFNpemUsIExhdGVuY3kgVGltZXIpICovCiAJCXJjID0gcGNpZWhwcm1fc2V0X2hwcChjdHJsLCBmdW5jLCBQQ0lfSEVBREVSX1RZUEVfTk9STUFMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhZGxwYXJfc3lzZnMuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhZGxwYXJfc3lzZnMuYwppbmRleCA3NTJlNjUxLi5kYjY5YmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYWRscGFyX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFkbHBhcl9zeXNmcy5jCkBAIC02Miw3ICs2Miw3IEBACiAJY2hhciBkcmNfbmFtZVtNQVhfRFJDX05BTUVfTEVOXTsKIAljaGFyICplbmQ7CiAKLQlpZiAobmJ5dGVzID4gTUFYX0RSQ19OQU1FX0xFTikKKwlpZiAobmJ5dGVzID49IE1BWF9EUkNfTkFNRV9MRU4pCiAJCXJldHVybiAwOwogCiAJbWVtY3B5KGRyY19uYW1lLCBidWYsIG5ieXRlcyk7CkBAIC04Myw3ICs4Myw3IEBACiAJY2hhciBkcmNfbmFtZVtNQVhfRFJDX05BTUVfTEVOXTsKIAljaGFyICplbmQ7CiAKLQlpZiAobmJ5dGVzID4gTUFYX0RSQ19OQU1FX0xFTikKKwlpZiAobmJ5dGVzID49IE1BWF9EUkNfTkFNRV9MRU4pCiAJCXJldHVybiAwOwogCiAJbWVtY3B5KGRyY19uYW1lLCBidWYsIG5ieXRlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NnaV9ob3RwbHVnLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NnaV9ob3RwbHVnLmMKaW5kZXggYjE0MDk0NC4uYTMyYWU4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zZ2lfaG90cGx1Zy5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2dpX2hvdHBsdWcuYwpAQCAtMTU5LDcgKzE1OSw3IEBACiAKIAlwY2lidXNfaW5mbyA9IFNOX1BDSUJVU19CVVNTT0ZUX0lORk8ocGNpX2J1cyk7CiAKLQlzbG90ID0ga2NhbGxvYygxLCBzaXplb2YoKnNsb3QpLCBHRlBfS0VSTkVMKTsKKwlzbG90ID0ga3phbGxvYyhzaXplb2YoKnNsb3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNsb3QpCiAJCXJldHVybiAtRU5PTUVNOwogCWJzc19ob3RwbHVnX3Nsb3QtPnByaXZhdGUgPSBzbG90OwpAQCAtNDkxLDcgKzQ5MSw3IEBACiAJCWlmIChzbl9wY2lfc2xvdF92YWxpZChwY2lfYnVzLCBkZXZpY2UpICE9IDEpCiAJCQljb250aW51ZTsKIAotCQlic3NfaG90cGx1Z19zbG90ID0ga2NhbGxvYygxLCBzaXplb2YoKmJzc19ob3RwbHVnX3Nsb3QpLAorCQlic3NfaG90cGx1Z19zbG90ID0ga3phbGxvYyhzaXplb2YoKmJzc19ob3RwbHVnX3Nsb3QpLAogCQkJCQkgICBHRlBfS0VSTkVMKTsKIAkJaWYgKCFic3NfaG90cGx1Z19zbG90KSB7CiAJCQlyYyA9IC1FTk9NRU07CkBAIC00OTksNyArNDk5LDcgQEAKIAkJfQogCiAJCWJzc19ob3RwbHVnX3Nsb3QtPmluZm8gPQotCQkJa2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IGhvdHBsdWdfc2xvdF9pbmZvKSwKKwkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbyksCiAJCQkJR0ZQX0tFUk5FTCk7CiAJCWlmICghYnNzX2hvdHBsdWdfc2xvdC0+aW5mbykgewogCQkJcmMgPSAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfY3RybC5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfY3RybC5jCmluZGV4IDc4M2I1YWIuLjkxYzk5MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2N0cmwuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9jdHJsLmMKQEAgLTI4MjQsOCArMjgyNCw3IEBACiAJCX0KICNlbmRpZgogCQkvKiBEaXNhYmxlIFJPTSBiYXNlIEFkZHJlc3MgKi8KLQkJdGVtcF93b3JkID0gMHgwMEw7Ci0JCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfd29yZCAocGNpX2J1cywgZGV2Zm4sIFBDSV9ST01fQUREUkVTUywgdGVtcF93b3JkKTsKKwkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19kd29yZCAocGNpX2J1cywgZGV2Zm4sIFBDSV9ST01fQUREUkVTUywgMHgwMCk7CiAKIAkJLyogU2V0IEhQIHBhcmFtZXRlcnMgKENhY2hlIExpbmUgU2l6ZSwgTGF0ZW5jeSBUaW1lcikgKi8KIAkJcmMgPSBzaHBjaHBybV9zZXRfaHBwKGN0cmwsIGZ1bmMsIFBDSV9IRUFERVJfVFlQRV9OT1JNQUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYwppbmRleCA1NmEzYjM5Li4yODk4ODMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYwpAQCAtMzYwLDcgKzM2MCw3IEBACiAJCQljb250aW51ZTsKIAogCQkvKiBhbGxvY2F0ZSBhdHRyaWJ1dGUgc3RydWN0dXJlLCBwaWdneWJhY2sgYXR0cmlidXRlIG5hbWUgKi8KLQkJcmVzX2F0dHIgPSBrY2FsbG9jKDEsIHNpemVvZigqcmVzX2F0dHIpICsgMTAsIEdGUF9BVE9NSUMpOworCQlyZXNfYXR0ciA9IGt6YWxsb2Moc2l6ZW9mKCpyZXNfYXR0cikgKyAxMCwgR0ZQX0FUT01JQyk7CiAJCWlmIChyZXNfYXR0cikgewogCQkJY2hhciAqcmVzX2F0dHJfbmFtZSA9IChjaGFyICopKHJlc19hdHRyICsgMSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3Byb2JlLmMgYi9kcml2ZXJzL3BjaS9wcm9iZS5jCmluZGV4IDI2YTU1ZDAuLjAwNTc4NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3Byb2JlLmMKKysrIGIvZHJpdmVycy9wY2kvcHJvYmUuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJCWlmIChsID09IDB4ZmZmZmZmZmYpCiAJCQlsID0gMDsKIAkJaWYgKChsICYgUENJX0JBU0VfQUREUkVTU19TUEFDRSkgPT0gUENJX0JBU0VfQUREUkVTU19TUEFDRV9NRU1PUlkpIHsKLQkJCXN6ID0gcGNpX3NpemUobCwgc3osIFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0spOworCQkJc3ogPSBwY2lfc2l6ZShsLCBzeiwgKHUzMilQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLKTsKIAkJCWlmICghc3opCiAJCQkJY29udGludWU7CiAJCQlyZXMtPnN0YXJ0ID0gbCAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0s7CkBAIC0yMTUsNyArMjE1LDcgQEAKIAkJaWYgKGwgPT0gMHhmZmZmZmZmZikKIAkJCWwgPSAwOwogCQlpZiAoc3ogJiYgc3ogIT0gMHhmZmZmZmZmZikgewotCQkJc3ogPSBwY2lfc2l6ZShsLCBzeiwgUENJX1JPTV9BRERSRVNTX01BU0spOworCQkJc3ogPSBwY2lfc2l6ZShsLCBzeiwgKHUzMilQQ0lfUk9NX0FERFJFU1NfTUFTSyk7CiAJCQlpZiAoc3opIHsKIAkJCQlyZXMtPmZsYWdzID0gKGwgJiBJT1JFU09VUkNFX1JPTV9FTkFCTEUpIHwKIAkJCQkgIElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9QUkVGRVRDSCB8CkBAIC00MDIsNiArNDAyLDEyIEBACiBzdGF0aWMgdm9pZCBfX2RldmluaXQgcGNpX2ZpeHVwX3BhcmVudF9zdWJvcmRpbmF0ZV9idXNucihzdHJ1Y3QgcGNpX2J1cyAqY2hpbGQsIGludCBtYXgpCiB7CiAJc3RydWN0IHBjaV9idXMgKnBhcmVudCA9IGNoaWxkLT5wYXJlbnQ7CisKKwkvKiBBdHRlbXB0cyB0byBmaXggdGhhdCB1cCBhcmUgcmVhbGx5IGRhbmdlcm91cyB1bmxlc3MKKwkgICB3ZSdyZSBnb2luZyB0byByZS1hc3NpZ24gYWxsIGJ1cyBudW1iZXJzLiAqLworCWlmICghcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpKQorCQlyZXR1cm47CisKIAl3aGlsZSAocGFyZW50LT5wYXJlbnQgJiYgcGFyZW50LT5zdWJvcmRpbmF0ZSA8IG1heCkgewogCQlwYXJlbnQtPnN1Ym9yZGluYXRlID0gbWF4OwogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGFyZW50LT5zZWxmLCBQQ0lfU1VCT1JESU5BVEVfQlVTLCBtYXgpOwpAQCAtNDc4LDggKzQ4NCwxOCBAQAogCQkgKiBXZSBuZWVkIHRvIGFzc2lnbiBhIG51bWJlciB0byB0aGlzIGJ1cyB3aGljaCB3ZSBhbHdheXMKIAkJICogZG8gaW4gdGhlIHNlY29uZCBwYXNzLgogCQkgKi8KLQkJaWYgKCFwYXNzKQorCQlpZiAoIXBhc3MpIHsKKwkJCWlmIChwY2liaW9zX2Fzc2lnbl9hbGxfYnVzc2VzKCkpCisJCQkJLyogVGVtcG9yYXJpbHkgZGlzYWJsZSBmb3J3YXJkaW5nIG9mIHRoZQorCQkJCSAgIGNvbmZpZ3VyYXRpb24gY3ljbGVzIG9uIGFsbCBicmlkZ2VzIGluCisJCQkJICAgdGhpcyBidXMgc2VnbWVudCB0byBhdm9pZCBwb3NzaWJsZQorCQkJCSAgIGNvbmZsaWN0cyBpbiB0aGUgc2Vjb25kIHBhc3MgYmV0d2VlbiB0d28KKwkJCQkgICBicmlkZ2VzIHByb2dyYW1tZWQgd2l0aCBvdmVybGFwcGluZworCQkJCSAgIGJ1cyByYW5nZXMuICovCisJCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9QUklNQVJZX0JVUywKKwkJCQkJCSAgICAgICBidXNlcyAmIH4weGZmZmZmZik7CiAJCQlyZXR1cm4gbWF4OworCQl9CiAKIAkJLyogQ2xlYXIgZXJyb3JzICovCiAJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9TVEFUVVMsIDB4ZmZmZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCmluZGV4IDExY2E0NDM4Li43OTkyYmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9xdWlya3MuYworKysgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwpAQCAtMjQxLDcgKzI0MSw4IEBACiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9TMywJUENJX0RFVklDRV9JRF9TM184NjgsCQlxdWlya19zM182NE0gKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX1MzLAlQQ0lfREVWSUNFX0lEX1MzXzk2OCwJCXF1aXJrX3MzXzY0TSApOwogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfaW9fcmVnaW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHVuc2lnbmVkIHJlZ2lvbiwgdW5zaWduZWQgc2l6ZSwgaW50IG5yKQorc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX2lvX3JlZ2lvbihzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1bnNpZ25lZCByZWdpb24sCisJdW5zaWduZWQgc2l6ZSwgaW50IG5yLCBjb25zdCBjaGFyICpuYW1lKQogewogCXJlZ2lvbiAmPSB+KHNpemUtMSk7CiAJaWYgKHJlZ2lvbikgewpAQCAtMjU5LDYgKzI2MCw3IEBACiAJCXBjaWJpb3NfYnVzX3RvX3Jlc291cmNlKGRldiwgcmVzLCAmYnVzX3JlZ2lvbik7CiAKIAkJcGNpX2NsYWltX3Jlc291cmNlKGRldiwgbnIpOworCQlwcmludGsoIlBDSSBxdWlyazogcmVnaW9uICUwNHgtJTA0eCBjbGFpbWVkIGJ5ICVzXG4iLCByZWdpb24sIHJlZ2lvbiArIHNpemUgLSAxLCBuYW1lKTsKIAl9CiB9CQogCkBAIC0yOTEsMjUgKzI5Myw5OCBAQAogCXUxNiByZWdpb247CiAKIAlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIDB4RTAsICZyZWdpb24pOwotCXF1aXJrX2lvX3JlZ2lvbihkZXYsIHJlZ2lvbiwgNjQsIFBDSV9CUklER0VfUkVTT1VSQ0VTKTsKKwlxdWlya19pb19yZWdpb24oZGV2LCByZWdpb24sIDY0LCBQQ0lfQlJJREdFX1JFU09VUkNFUywgImFsaTcxMDEgQUNQSSIpOwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgMHhFMiwgJnJlZ2lvbik7Ci0JcXVpcmtfaW9fcmVnaW9uKGRldiwgcmVnaW9uLCAzMiwgUENJX0JSSURHRV9SRVNPVVJDRVMrMSk7CisJcXVpcmtfaW9fcmVnaW9uKGRldiwgcmVnaW9uLCAzMiwgUENJX0JSSURHRV9SRVNPVVJDRVMrMSwgImFsaTcxMDEgU01CIik7CiB9CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BTCwJUENJX0RFVklDRV9JRF9BTF9NNzEwMSwJCXF1aXJrX2FsaTcxMDFfYWNwaSApOwogCitzdGF0aWMgdm9pZCBwaWl4NF9pb19xdWlyayhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IGVuYWJsZSkKK3sKKwl1MzIgZGV2cmVzOworCXUzMiBtYXNrLCBzaXplLCBiYXNlOworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9ydCwgJmRldnJlcyk7CisJaWYgKChkZXZyZXMgJiBlbmFibGUpICE9IGVuYWJsZSkKKwkJcmV0dXJuOworCW1hc2sgPSAoZGV2cmVzID4+IDE2KSAmIDE1OworCWJhc2UgPSBkZXZyZXMgJiAweGZmZmY7CisJc2l6ZSA9IDE2OworCWZvciAoOzspIHsKKwkJdW5zaWduZWQgYml0ID0gc2l6ZSA+PiAxOworCQlpZiAoKGJpdCAmIG1hc2spID09IGJpdCkKKwkJCWJyZWFrOworCQlzaXplID0gYml0OworCX0KKwkvKgorCSAqIEZvciBub3cgd2Ugb25seSBwcmludCBpdCBvdXQuIEV2ZW50dWFsbHkgd2UnbGwgd2FudCB0bworCSAqIHJlc2VydmUgaXQgKGF0IGxlYXN0IGlmIGl0J3MgaW4gdGhlIDB4MTAwMCsgcmFuZ2UpLCBidXQKKwkgKiBsZXQncyBnZXQgZW5vdWdoIGNvbmZpcm1hdGlvbiByZXBvcnRzIGZpcnN0LiAKKwkgKi8KKwliYXNlICY9IC1zaXplOworCXByaW50aygiJXMgUElPIGF0ICUwNHgtJTA0eFxuIiwgbmFtZSwgYmFzZSwgYmFzZSArIHNpemUgLSAxKTsKK30KKworc3RhdGljIHZvaWQgcGlpeDRfbWVtX3F1aXJrKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgZW5hYmxlKQoreworCXUzMiBkZXZyZXM7CisJdTMyIG1hc2ssIHNpemUsIGJhc2U7CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3J0LCAmZGV2cmVzKTsKKwlpZiAoKGRldnJlcyAmIGVuYWJsZSkgIT0gZW5hYmxlKQorCQlyZXR1cm47CisJYmFzZSA9IGRldnJlcyAmIDB4ZmZmZjAwMDA7CisJbWFzayA9IChkZXZyZXMgJiAweDNmKSA8PCAxNjsKKwlzaXplID0gMTI4IDw8IDE2OworCWZvciAoOzspIHsKKwkJdW5zaWduZWQgYml0ID0gc2l6ZSA+PiAxOworCQlpZiAoKGJpdCAmIG1hc2spID09IGJpdCkKKwkJCWJyZWFrOworCQlzaXplID0gYml0OworCX0KKwkvKgorCSAqIEZvciBub3cgd2Ugb25seSBwcmludCBpdCBvdXQuIEV2ZW50dWFsbHkgd2UnbGwgd2FudCB0bworCSAqIHJlc2VydmUgaXQsIGJ1dCBsZXQncyBnZXQgZW5vdWdoIGNvbmZpcm1hdGlvbiByZXBvcnRzIGZpcnN0LiAKKwkgKi8KKwliYXNlICY9IC1zaXplOworCXByaW50aygiJXMgTU1JTyBhdCAlMDR4LSUwNHhcbiIsIG5hbWUsIGJhc2UsIGJhc2UgKyBzaXplIC0gMSk7Cit9CisKIC8qCiAgKiBQSUlYNCBBQ1BJOiBUd28gSU8gcmVnaW9ucyBwb2ludGVkIHRvIGJ5IGxvbmd3b3JkcyBhdAogICoJMHg0MCAoNjQgYnl0ZXMgb2YgQUNQSSByZWdpc3RlcnMpCiAgKgkweDkwICgzMiBieXRlcyBvZiBTTUIgcmVnaXN0ZXJzKQorICogYW5kIGEgZmV3IHN0cmFuZ2UgcHJvZ3JhbW1hYmxlIFBJSVg0IGRldmljZSByZXNvdXJjZXMuCiAgKi8KIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBxdWlya19waWl4NF9hY3BpKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0JdTMyIHJlZ2lvbjsKKwl1MzIgcmVnaW9uLCByZXNfYTsKIAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4NDAsICZyZWdpb24pOwotCXF1aXJrX2lvX3JlZ2lvbihkZXYsIHJlZ2lvbiwgNjQsIFBDSV9CUklER0VfUkVTT1VSQ0VTKTsKKwlxdWlya19pb19yZWdpb24oZGV2LCByZWdpb24sIDY0LCBQQ0lfQlJJREdFX1JFU09VUkNFUywgIlBJSVg0IEFDUEkiKTsKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDkwLCAmcmVnaW9uKTsKLQlxdWlya19pb19yZWdpb24oZGV2LCByZWdpb24sIDMyLCBQQ0lfQlJJREdFX1JFU09VUkNFUysxKTsKKwlxdWlya19pb19yZWdpb24oZGV2LCByZWdpb24sIDMyLCBQQ0lfQlJJREdFX1JFU09VUkNFUysxLCAiUElJWDQgU01CIik7CisKKwkvKiBEZXZpY2UgcmVzb3VyY2UgQSBoYXMgZW5hYmxlcyBmb3Igc29tZSBvZiB0aGUgb3RoZXIgb25lcyAqLworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4NWMsICZyZXNfYSk7CisKKwlwaWl4NF9pb19xdWlyayhkZXYsICJQSUlYNCBkZXZyZXMgQiIsIDB4NjAsIDMgPDwgMjEpOworCXBpaXg0X2lvX3F1aXJrKGRldiwgIlBJSVg0IGRldnJlcyBDIiwgMHg2NCwgMyA8PCAyMSk7CisKKwkvKiBEZXZpY2UgcmVzb3VyY2UgRCBpcyBqdXN0IGJpdGZpZWxkcyBmb3Igc3RhdGljIHJlc291cmNlcyAqLworCisJLyogRGV2aWNlIDEyIGVuYWJsZWQ/ICovCisJaWYgKHJlc19hICYgKDEgPDwgMjkpKSB7CisJCXBpaXg0X2lvX3F1aXJrKGRldiwgIlBJSVg0IGRldnJlcyBFIiwgMHg2OCwgMSA8PCAyMCk7CisJCXBpaXg0X21lbV9xdWlyayhkZXYsICJQSUlYNCBkZXZyZXMgRiIsIDB4NmMsIDEgPDwgNyk7CisJfQorCS8qIERldmljZSAxMyBlbmFibGVkPyAqLworCWlmIChyZXNfYSAmICgxIDw8IDMwKSkgeworCQlwaWl4NF9pb19xdWlyayhkZXYsICJQSUlYNCBkZXZyZXMgRyIsIDB4NzAsIDEgPDwgMjApOworCQlwaWl4NF9tZW1fcXVpcmsoZGV2LCAiUElJWDQgZGV2cmVzIEgiLCAweDc0LCAxIDw8IDcpOworCX0KKwlwaWl4NF9pb19xdWlyayhkZXYsICJQSUlYNCBkZXZyZXMgSSIsIDB4NzgsIDEgPDwgMjApOworCXBpaXg0X2lvX3F1aXJrKGRldiwgIlBJSVg0IGRldnJlcyBKIiwgMHg3YywgMSA8PCAyMCk7CiB9CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF84MjM3MUFCXzMsCXF1aXJrX3BpaXg0X2FjcGkgKTsKIApAQCAtMzIzLDEwICszOTgsMTAgQEAKIAl1MzIgcmVnaW9uOwogCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHg0MCwgJnJlZ2lvbik7Ci0JcXVpcmtfaW9fcmVnaW9uKGRldiwgcmVnaW9uLCAxMjgsIFBDSV9CUklER0VfUkVTT1VSQ0VTKTsKKwlxdWlya19pb19yZWdpb24oZGV2LCByZWdpb24sIDEyOCwgUENJX0JSSURHRV9SRVNPVVJDRVMsICJJQ0g0IEFDUEkvR1BJTy9UQ08iKTsKIAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4NTgsICZyZWdpb24pOwotCXF1aXJrX2lvX3JlZ2lvbihkZXYsIHJlZ2lvbiwgNjQsIFBDSV9CUklER0VfUkVTT1VSQ0VTKzEpOworCXF1aXJrX2lvX3JlZ2lvbihkZXYsIHJlZ2lvbiwgNjQsIFBDSV9CUklER0VfUkVTT1VSQ0VTKzEsICJJQ0g0IEdQSU8iKTsKIH0KIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLCAgICBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfMCwJCXF1aXJrX2ljaDRfbHBjX2FjcGkgKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLCAgICBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUJfMCwJCXF1aXJrX2ljaDRfbHBjX2FjcGkgKTsKQEAgLTM1Miw3ICs0MjcsNyBAQAogCWlmIChyZXYgJiAweDEwKSB7CiAJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4NDgsICZyZWdpb24pOwogCQlyZWdpb24gJj0gUENJX0JBU0VfQUREUkVTU19JT19NQVNLOwotCQlxdWlya19pb19yZWdpb24oZGV2LCByZWdpb24sIDI1NiwgUENJX0JSSURHRV9SRVNPVVJDRVMpOworCQlxdWlya19pb19yZWdpb24oZGV2LCByZWdpb24sIDI1NiwgUENJX0JSSURHRV9SRVNPVVJDRVMsICJ2dDgyYzU4NiBBQ1BJIik7CiAJfQogfQogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfVklBLAlQQ0lfREVWSUNFX0lEX1ZJQV84MkM1ODZfMywJcXVpcmtfdnQ4MmM1ODZfYWNwaSApOwpAQCAtMzcyLDExICs0NDcsMTEgQEAKIAogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgMHg3MCwgJmhtKTsKIAlobSAmPSBQQ0lfQkFTRV9BRERSRVNTX0lPX01BU0s7Ci0JcXVpcmtfaW9fcmVnaW9uKGRldiwgaG0sIDEyOCwgUENJX0JSSURHRV9SRVNPVVJDRVMgKyAxKTsKKwlxdWlya19pb19yZWdpb24oZGV2LCBobSwgMTI4LCBQQ0lfQlJJREdFX1JFU09VUkNFUyArIDEsICJ2dDgyYzg2OCBIVy1tb24iKTsKIAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4OTAsICZzbWIpOwogCXNtYiAmPSBQQ0lfQkFTRV9BRERSRVNTX0lPX01BU0s7Ci0JcXVpcmtfaW9fcmVnaW9uKGRldiwgc21iLCAxNiwgUENJX0JSSURHRV9SRVNPVVJDRVMgKyAyKTsKKwlxdWlya19pb19yZWdpb24oZGV2LCBzbWIsIDE2LCBQQ0lfQlJJREdFX1JFU09VUkNFUyArIDIsICJ2dDgyYzg2OCBTTUIiKTsKIH0KIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX1ZJQSwJUENJX0RFVklDRV9JRF9WSUFfODJDNjg2XzQsCXF1aXJrX3Z0ODJjNjg2X2FjcGkgKTsKIApAQCAtMzkxLDExICs0NjYsMTEgQEAKIAogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgMHg4OCwgJnBtKTsKIAlwbSAmPSBQQ0lfQkFTRV9BRERSRVNTX0lPX01BU0s7Ci0JcXVpcmtfaW9fcmVnaW9uKGRldiwgcG0sIDEyOCwgUENJX0JSSURHRV9SRVNPVVJDRVMpOworCXF1aXJrX2lvX3JlZ2lvbihkZXYsIHBtLCAxMjgsIFBDSV9CUklER0VfUkVTT1VSQ0VTLCAidnQ4MjM1IFBNIik7CiAKIAlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIDB4ZDAsICZzbWIpOwogCXNtYiAmPSBQQ0lfQkFTRV9BRERSRVNTX0lPX01BU0s7Ci0JcXVpcmtfaW9fcmVnaW9uKGRldiwgc21iLCAxNiwgUENJX0JSSURHRV9SRVNPVVJDRVMgKyAxKTsKKwlxdWlya19pb19yZWdpb24oZGV2LCBzbWIsIDE2LCBQQ0lfQlJJREdFX1JFU09VUkNFUyArIDEsICJ2dDgyMzUgU01CIik7CiB9CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9WSUEsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzUsCXF1aXJrX3Z0ODIzNV9hY3BpKTsKIApAQCAtMTIzMyw3ICsxMzA4LDcgQEAKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLAlQQ0lfREVWSUNFX0lEX0lOVEVMX0VFU1NDLAlxdWlya19hbGRlcl9pb2FwaWMgKTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1NDU0lfU0FUQQorI2lmZGVmIENPTkZJR19TQ1NJX1NBVEFfSU5URUxfQ09NQklORUQKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBxdWlya19pbnRlbF9pZGVfY29tYmluZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJdTggcHJvZywgY29tYiwgdG1wOwpAQCAtMTMxMCw3ICsxMzg1LDcgQEAKIAkJcmVxdWVzdF9yZWdpb24oMHgxNzAsIDgsICJsaWJhdGEiKTsJLyogcG9ydCAxICovCiB9CiBERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0lOVEVMLCAgICBQQ0lfQU5ZX0lELAkgIHF1aXJrX2ludGVsX2lkZV9jb21iaW5lZCApOwotI2VuZGlmIC8qIENPTkZJR19TQ1NJX1NBVEEgKi8KKyNlbmRpZiAvKiBDT05GSUdfU0NTSV9TQVRBX0lOVEVMX0NPTUJJTkVEICovCiAKIAogaW50IHBjaWVfbWNoX3F1aXJrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwppbmRleCA2NTdiZTk0Li4yOGNlM2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwpAQCAtNDAsNyArNDAsNyBAQAogICogRklYTUU6IElPIHNob3VsZCBiZSBtYXggMjU2IGJ5dGVzLiAgSG93ZXZlciwgc2luY2Ugd2UgbWF5CiAgKiBoYXZlIGEgUDJQIGJyaWRnZSBiZWxvdyBhIGNhcmRidXMgYnJpZGdlLCB3ZSBuZWVkIDRLLgogICovCi0jZGVmaW5lIENBUkRCVVNfSU9fU0laRQkJKDQqMTAyNCkKKyNkZWZpbmUgQ0FSREJVU19JT19TSVpFCQkoMjU2KQogI2RlZmluZSBDQVJEQlVTX01FTV9TSVpFCSgzMioxMDI0KjEwMjQpCiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvS2NvbmZpZyBiL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKaW5kZXggZGRjNzQxZS4uMzZjYzlhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvS2NvbmZpZworKysgYi9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAogY29uZmlnIFRDSUMKIAl0cmlzdGF0ZSAiRGF0YWJvb2sgVENJQyBob3N0IGJyaWRnZSBzdXBwb3J0IgotCWRlcGVuZHMgb24gUENNQ0lBCisJZGVwZW5kcyBvbiBQQ01DSUEgJiYgSVNBCiAJc2VsZWN0IFBDQ0FSRF9OT05TVEFUSUMKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIERhdGFib29rIFRDSUMgZmFtaWx5IG9mIFBDTUNJQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvY2FyZGJ1cy5jIGIvZHJpdmVycy9wY21jaWEvY2FyZGJ1cy5jCmluZGV4IDFkNzU1ZTIuLjNmNmQ1MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2NhcmRidXMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9jYXJkYnVzLmMKQEAgLTIyOCw2ICsyMjgsMTEgQEAKIAlwY2lfYnVzX3NpemVfYnJpZGdlcyhidXMpOwogCXBjaV9idXNfYXNzaWduX3Jlc291cmNlcyhidXMpOwogCWNhcmRidXNfYXNzaWduX2lycXMoYnVzLCBzLT5wY2lfaXJxKTsKKworCS8qIHNvY2tldCBzcGVjaWZpYyB0dW5lIGZ1bmN0aW9uICovCisJaWYgKHMtPnR1bmVfYnJpZGdlKQorCQlzLT50dW5lX2JyaWRnZShzLCBidXMpOworCiAJcGNpX2VuYWJsZV9icmlkZ2VzKGJ1cyk7CiAJcGNpX2J1c19hZGRfZGV2aWNlcyhidXMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jcy5jIGIvZHJpdmVycy9wY21jaWEvY3MuYwppbmRleCBmYWJkMzUyLi5kNWU3NjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2NzLmMKQEAgLTY4OSw2ICs2ODksOSBAQAogCQlzY2hlZHVsZSgpOwogCQl0cnlfdG9fZnJlZXplKCk7CiAJfQorCS8qIG1ha2Ugc3VyZSB3ZSBhcmUgcnVubmluZyBiZWZvcmUgd2UgZXhpdCAqLworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmc2t0LT50aHJlYWRfd2FpdCwgJndhaXQpOwogCiAJLyogcmVtb3ZlIGZyb20gdGhlIGRldmljZSBjb3JlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmMgYi9kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmMKaW5kZXggMDhkMWM5Mi4uOTRiZTllNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvb21hcF9jZi5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL29tYXBfY2YuYwpAQCAtMjIsNyArMjIsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMKaW5kZXggYzQyNDU1ZC4uZjlhNWM3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jCkBAIC02OTEsNyArNjkxLDcgQEAKIAl1bnNpZ25lZCBsb25nIHNpemUgPSBlbmQgLSBzdGFydCArIDE7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoZW5kIDw9IHN0YXJ0KQorCWlmIChlbmQgPCBzdGFydCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlkb3duKCZyc3JjX3NlbSk7CkBAIC03MjQsNyArNzI0LDcgQEAKIAl1bnNpZ25lZCBsb25nIHNpemUgPSBlbmQgLSBzdGFydCArIDE7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoZW5kIDw9IHN0YXJ0KQorCWlmIChlbmQgPCBzdGFydCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoZW5kID4gSU9fU1BBQ0VfTElNSVQpCkBAIC04MTcsNyArODE3LDcgQEAKIAogCS8qIGlmIHdlIGdvdCBhdCBsZWFzdCBvbmUgb2YgSU8sIGFuZCBvbmUgb2YgTUVNLCB3ZSBjYW4gYmUgZ2xhZCBhbmQKIAkgKiBhY3RpdmF0ZSB0aGUgUENNQ0lBIHN1YnN5c3RlbSAqLwotCWlmIChkb25lICYgKElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9JTykpCisJaWYgKGRvbmUgPT0gKElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9JTykpCiAJCXMtPnJlc291cmNlX3NldHVwX2RvbmUgPSAxOwogCiAJcmV0dXJuIDA7CkBAIC05MjUsNyArOTI1LDcgQEAKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KLQlpZiAoZW5kX2FkZHIgPD0gc3RhcnRfYWRkcikKKwlpZiAoZW5kX2FkZHIgPCBzdGFydF9hZGRyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldCA9IGFkanVzdF9pbyhzLCBhZGQsIHN0YXJ0X2FkZHIsIGVuZF9hZGRyKTsKQEAgLTk3Nyw3ICs5NzcsNyBAQAogCQkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQotCWlmIChlbmRfYWRkciA8PSBzdGFydF9hZGRyKQorCWlmIChlbmRfYWRkciA8IHN0YXJ0X2FkZHIpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0ID0gYWRqdXN0X21lbW9yeShzLCBhZGQsIHN0YXJ0X2FkZHIsIGVuZF9hZGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYyBiL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYwppbmRleCA4ODhiNzBlLi45ZTdjY2Q4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMKKysrIGIvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jCkBAIC02Niw3ICs2Niw3IEBACiAJaWYgKHBjX2RlYnVnID4gbHZsKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJza3QldTogJXM6ICIsIHNrdC0+bnIsIGZ1bmMpOwogCQl2YV9zdGFydChhcmdzLCBmbXQpOwotCQlwcmludGsoZm10LCBhcmdzKTsKKwkJdnByaW50ayhmbXQsIGFyZ3MpOwogCQl2YV9lbmQoYXJncyk7CiAJfQogfQpAQCAtMzIxLDggKzMyMSw2IEBACiAgKiBsZXNzIHB1bnQgYWxsIG9mIHRoaXMgd29yayBhbmQgbGV0IHRoZSBrZXJuZWwgaGFuZGxlIHRoZSBkZXRhaWxzCiAgKiBvZiBwb3dlciBjb25maWd1cmF0aW9uLCByZXNldCwgJmMuIFdlIGFsc28gcmVjb3JkIHRoZSB2YWx1ZSBvZgogICogYHN0YXRlJyBpbiBvcmRlciB0byByZWd1cmdpdGF0ZSBpdCB0byB0aGUgUENNQ0lBIGNvcmUgbGF0ZXIuCi0gKgotICogUmV0dXJuczogMAogICovCiBzdGF0aWMgaW50CiBzb2NfY29tbW9uX3BjbWNpYV9zZXRfc29ja2V0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrLCBzb2NrZXRfc3RhdGVfdCAqc3RhdGUpCkBAIC00MDcsNyArNDA1LDcgQEAKICAqIHRoZSBtYXAgc3BlZWQgYXMgcmVxdWVzdGVkLCBidXQgb3ZlcnJpZGUgdGhlIGFkZHJlc3MgcmFuZ2VzCiAgKiBzdXBwbGllZCBieSBDYXJkIFNlcnZpY2VzLgogICoKLSAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKyAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgLUVSUk5PIG9uIGVycm9yCiAgKi8KIHN0YXRpYyBpbnQKIHNvY19jb21tb25fcGNtY2lhX3NldF9tZW1fbWFwKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcGNjYXJkX21lbV9tYXAgKm1hcCkKQEAgLTY1NSw4ICs2NTMsOCBAQAogfQogCiAjZWxzZQotI2RlZmluZSBzb2NfcGNtY2lhX2NwdWZyZXFfcmVnaXN0ZXIoKQotI2RlZmluZSBzb2NfcGNtY2lhX2NwdWZyZXFfdW5yZWdpc3RlcigpCitzdGF0aWMgaW50IHNvY19wY21jaWFfY3B1ZnJlcV9yZWdpc3Rlcih2b2lkKSB7IHJldHVybiAwOyB9CitzdGF0aWMgdm9pZCBzb2NfcGNtY2lhX2NwdWZyZXFfdW5yZWdpc3Rlcih2b2lkKSB7fQogI2VuZGlmCiAKIGludCBzb2NfY29tbW9uX2Rydl9wY21jaWFfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGNtY2lhX2xvd19sZXZlbCAqb3BzLCBpbnQgZmlyc3QsIGludCBucikKQEAgLTczOCw3ICs3MzYsNyBAQAogCQkJZ290byBvdXRfZXJyXzU7CiAJCX0KIAotCQlpZiAoIGxpc3RfZW1wdHkoJnNvY19wY21jaWFfc29ja2V0cykgKQorCQlpZiAobGlzdF9lbXB0eSgmc29jX3BjbWNpYV9zb2NrZXRzKSkKIAkJCXNvY19wY21jaWFfY3B1ZnJlcV9yZWdpc3RlcigpOwogCiAJCWxpc3RfYWRkKCZza3QtPm5vZGUsICZzb2NfcGNtY2lhX3NvY2tldHMpOwpAQCAtODM5LDcgKzgzNyw3IEBACiAJCXJlbGVhc2VfcmVzb3VyY2UoJnNrdC0+cmVzX2lvKTsKIAkJcmVsZWFzZV9yZXNvdXJjZSgmc2t0LT5yZXNfc2t0KTsKIAl9Ci0JaWYgKCBsaXN0X2VtcHR5KCZzb2NfcGNtY2lhX3NvY2tldHMpICkKKwlpZiAobGlzdF9lbXB0eSgmc29jX3BjbWNpYV9zb2NrZXRzKSkKIAkJc29jX3BjbWNpYV9jcHVmcmVxX3VucmVnaXN0ZXIoKTsKIAogCXVwKCZzb2NfcGNtY2lhX3NvY2tldHNfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS90aTExM3guaCBiL2RyaXZlcnMvcGNtY2lhL3RpMTEzeC5oCmluZGV4IGZiZTIzM2UuLjUzOWI1Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3RpMTEzeC5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL3RpMTEzeC5oCkBAIC01OSw2ICs1OSw3IEBACiAKICNkZWZpbmUgIFRJMTIyWF9TQ1JfU0VSX1NURVAJCTB4YzAwMDAwMDAKICNkZWZpbmUgIFRJMTIyWF9TQ1JfSU5UUlRJRQkJMHgyMDAwMDAwMAorI2RlZmluZSAgVElYWDIxX1NDUl9USUVBTEwJCTB4MTAwMDAwMDAKICNkZWZpbmUgIFRJMTIyWF9TQ1JfQ0JSU1ZECQkweDAwNDAwMDAwCiAjZGVmaW5lICBUSTEyMlhfU0NSX01SQlVSU1RETgkJMHgwMDAwODAwMAogI2RlZmluZSAgVEkxMjJYX1NDUl9NUkJVUlNUVVAJCTB4MDAwMDQwMDAKQEAgLTE1Myw2ICsxNTQsMTIgQEAKIC8qIEVuRSB0ZXN0IHJlZ2lzdGVyICovCiAjZGVmaW5lIEVORV9URVNUX0M5CQkJMHhjOQkvKiA4Yml0ICovCiAjZGVmaW5lIEVORV9URVNUX0M5X1RMVEVOQUJMRQkJMHgwMgorI2RlZmluZSBFTkVfVEVTVF9DOV9QRkVOQUJMRV9GMAkJMHgwNAorI2RlZmluZSBFTkVfVEVTVF9DOV9QRkVOQUJMRV9GMQkJMHgwOAorI2RlZmluZSBFTkVfVEVTVF9DOV9QRkVOQUJMRQkJKEVORV9URVNUX0M5X1BGRU5BQkxFX0YwIHwgRU5FX1RFU1RfQzlfUEZFTkFCTEVfRjApCisjZGVmaW5lIEVORV9URVNUX0M5X1dQRElTQUxCTEVfRjAJMHg0MAorI2RlZmluZSBFTkVfVEVTVF9DOV9XUERJU0FMQkxFX0YxCTB4ODAKKyNkZWZpbmUgRU5FX1RFU1RfQzlfV1BESVNBTEJMRQkJKEVORV9URVNUX0M5X1dQRElTQUxCTEVfRjAgfCBFTkVfVEVTVF9DOV9XUERJU0FMQkxFX0YxKQogCiAvKgogICogVGV4YXMgSW5zdHJ1bWVudHMgQ2FyZEJ1cyBjb250cm9sbGVyIG92ZXJyaWRlcy4KQEAgLTYxOCw2ICs2MjUsNyBAQAogCWludCBkZXZmbjsKIAl1bnNpZ25lZCBpbnQgc3RhdGU7CiAJaW50IHJldCA9IDE7CisJdTMyIHN5c2N0bDsKIAogCS8qIGNhdGNoIHRoZSB0d28tc2xvdCBjb250cm9sbGVycyAqLwogCXN3aXRjaCAoc29ja2V0LT5kZXYtPmRldmljZSkgewpAQCAtNjQwLDYgKzY0OCwyNCBAQAogCQkgKi8KIAkJYnJlYWs7CiAKKwljYXNlIFBDSV9ERVZJQ0VfSURfVElfWDUxNToKKwljYXNlIFBDSV9ERVZJQ0VfSURfVElfWDQyMDoKKwljYXNlIFBDSV9ERVZJQ0VfSURfVElfWDYyMDoKKwljYXNlIFBDSV9ERVZJQ0VfSURfVElfWFgyMV9YWDExOgorCWNhc2UgUENJX0RFVklDRV9JRF9USV83NDEwOgorCWNhc2UgUENJX0RFVklDRV9JRF9USV83NjEwOgorCQkvKgorCQkgKiB0aG9zZSBhcmUgZWl0aGVyIHNpbmdsZSBvciBkdWFsIHNsb3QgQ0Igd2l0aCBhZGRpdGlvbmFsIGZ1bmN0aW9ucworCQkgKiBsaWtlIDEzOTQsIHNtYXJ0Y2FyZCByZWFkZXIsIGV0Yy4gY2hlY2sgdGhlIFRJRUFMTCBmbGFnIGZvciB0aGVtCisJCSAqIHRoZSBUSUVBTEwgZmxhZyBiaW5kcyB0aGUgSVJRIG9mIGFsbCBmdW5jdGlvbnMgdG9naGV0aGVyLgorCQkgKiB3ZSBjYXRjaCB0aGUgc2luZ2xlIHNsb3QgdmFyaWFudHMgbGF0ZXIuCisJCSAqLworCQlzeXNjdGwgPSBjb25maWdfcmVhZGwoc29ja2V0LCBUSTExM1hfU1lTVEVNX0NPTlRST0wpOworCQlpZiAoc3lzY3RsICYgVElYWDIxX1NDUl9USUVBTEwpCisJCQlyZXR1cm4gMDsKKworCQlicmVhazsKKwogCS8qIHNpbmdsZS1zbG90IGNvbnRyb2xsZXJzIGhhdmUgdGhlIDJuZCBzbG90IGVtcHR5IGFsd2F5cyA6KSAqLwogCWRlZmF1bHQ6CiAJCXJldHVybiAxOwpAQCAtNjUyLDYgKzY3OCwxNSBAQAogCWlmICghZnVuYykKIAkJcmV0dXJuIDE7CiAKKwkvKgorCSAqIGNoZWNrIHRoYXQgdGhlIGRldmljZSBpZCBvZiBib3RoIHNsb3RzIG1hdGNoLiB0aGlzIGlzIG5lZWRlZCBmb3IgdGhlCisJICogWFgyMSBhbmQgdGhlIFhYMTEgY29udHJvbGxlciB0aGF0IHNoYXJlIHRoZSBzYW1lIGRldmljZSBpZCBmb3Igc2luZ2xlCisJICogYW5kIGR1YWwgc2xvdCBjb250cm9sbGVycy4gcmV0dXJuICcybmQgc2xvdCBlbXB0eScuIHdlIGFscmVhZHkgY2hlY2tlZAorCSAqIGlmIHRoZSBpbnRlcnJ1cHQgaXMgdGllZCB0byBhbm90aGVyIGZ1bmN0aW9uLgorCSAqLworCWlmIChzb2NrZXQtPmRldi0+ZGV2aWNlICE9IGZ1bmMtPmRldmljZSkKKwkJZ290byBvdXQ7CisKIAlzbG90MiA9IHBjaV9nZXRfZHJ2ZGF0YShmdW5jKTsKIAlpZiAoIXNsb3QyKQogCQlnb3RvIG91dDsKQEAgLTc5MSwxNiArODI2LDYgQEAKIAkJY29uZmlnX3dyaXRlbChzb2NrZXQsIFRJMTEzWF9TWVNURU1fQ09OVFJPTCwgdmFsKTsKIAogCS8qCi0JICogZm9yIEVuRSBicmlkZ2VzIG9ubHk6IGNsZWFyIHRlc3RiaXQgVExURW5hYmxlLiB0aGlzIG1ha2VzIHRoZQotCSAqIFJNRSBIYW1tZXJmYWxsIERTUCBzb3VuZCBjYXJkIHdvcmtpbmcuCi0JICovCi0JaWYgKHNvY2tldC0+ZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9FTkUpIHsKLQkJdTggdGVzdF9jOSA9IGNvbmZpZ19yZWFkYihzb2NrZXQsIEVORV9URVNUX0M5KTsKLQkJdGVzdF9jOSAmPSB+RU5FX1RFU1RfQzlfVExURU5BQkxFOwotCQljb25maWdfd3JpdGViKHNvY2tldCwgRU5FX1RFU1RfQzksIHRlc3RfYzkpOwotCX0KLQotCS8qCiAJICogWWVudGEgZXhwZWN0cyBjb250cm9sbGVycyB0byB1c2UgQ1NDSU5UIHRvIHJvdXRlCiAJICogQ1NDIGludGVycnVwdHMgdG8gUENJIHJhdGhlciB0aGFuIElOVFZBTC4KIAkgKi8KQEAgLTg0MSw1ICs4NjYsNzggQEAKIAlyZXR1cm4gdGkxMnh4X292ZXJyaWRlKHNvY2tldCk7CiB9CiAKKworLyoqCisgKiBFbkUgc3BlY2lmaWMgcGFydC4gRW5FIGJyaWRnZXMgYXJlIHJlZ2lzdGVyIGNvbXBhdGlibGUgd2l0aCBUSSBicmlkZ2VzIGJ1dAorICogaGF2ZSB0aGVpciBvd24gdGVzdCByZWdpc3RlcnMgYW5kIG1vcmUgaW1wb3J0YW50IHRoZWlyIG93biBsaXR0bGUgcHJvYmxlbXMuCisgKiBTb21lIGZpeHVwIGNvZGUgdG8gbWFrZSBldmVyeWJvZHkgaGFwcHkgKFRNKS4KKyAqLworCisjaWZkZWYgQ09ORklHX0NBUkRCVVMKKy8qKgorICogc2V0L2NsZWFyIHZhcmlvdXMgdGVzdCBiaXRzOgorICogRGVmYXVsdHMgdG8gY2xlYXIgdGhlIGJpdC4KKyAqIC0gbWFzayAodTgpIGRlZmluZXMgd2hhdCBiaXRzIHRvIGNoYW5nZQorICogLSBiaXRzICh1OCkgaXMgdGhlIHZhbHVlcyB0byBjaGFuZ2UgdGhlbSB0bworICogLT4gaXQncworICogCWN1cnJlbnQgPSAoY3VycmVudCAmIH5tYXNrKSB8IGJpdHMKKyAqLworLyogcGNpIGlkcyBvZiBkZXZpY2VzIHRoYXQgd2FudHMgdG8gaGF2ZSB0aGUgYml0IHNldCAqLworI2RlZmluZSBERVZJRChfdmVuZCxfZGV2LF9zdWJ2ZW5kLF9zdWJkZXYsbWFzayxiaXRzKSB7CQlcCisJCS52ZW5kb3IJCT0gX3ZlbmQsCQkJXAorCQkuZGV2aWNlCQk9IF9kZXYsCQkJCVwKKwkJLnN1YnZlbmRvcgk9IF9zdWJ2ZW5kLAkJCVwKKwkJLnN1YmRldmljZQk9IF9zdWJkZXYsCQkJXAorCQkuZHJpdmVyX2RhdGEJPSAoKG1hc2spIDw8IDggfCAoYml0cykpLAlcCisJfQorc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGVuZV90dW5lX3RibFtdID0geworCS8qIEVjaG8gQXVkaW8gcHJvZHVjdHMgYmFzZWQgb24gbW90b3JvbGEgRFNQNTYzMDEgYW5kIERTUDU2MzYxICovCisJREVWSUQoUENJX1ZFTkRPUl9JRF9NT1RPUk9MQSwgMHgxODAxLCAweEVDQzAsIFBDSV9BTllfSUQsCisJCUVORV9URVNUX0M5X1RMVEVOQUJMRSB8IEVORV9URVNUX0M5X1BGRU5BQkxFLCBFTkVfVEVTVF9DOV9UTFRFTkFCTEUpLAorCURFVklEKFBDSV9WRU5ET1JfSURfTU9UT1JPTEEsIDB4MzQxMCwgMHhFQ0MwLCBQQ0lfQU5ZX0lELAorCQlFTkVfVEVTVF9DOV9UTFRFTkFCTEUgfCBFTkVfVEVTVF9DOV9QRkVOQUJMRSwgRU5FX1RFU1RfQzlfVExURU5BQkxFKSwKKworCXt9Cit9OworCitzdGF0aWMgdm9pZCBlbmVfdHVuZV9icmlkZ2Uoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2ssIHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJc3RydWN0IHllbnRhX3NvY2tldCAqc29ja2V0ID0gY29udGFpbmVyX29mKHNvY2ssIHN0cnVjdCB5ZW50YV9zb2NrZXQsIHNvY2tldCk7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKwlzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQgPSBOVUxMOworCXU4IHRlc3RfYzksIG9sZF9jOSwgbWFzaywgYml0czsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgeworCQlpZCA9IChzdHJ1Y3QgcGNpX2RldmljZV9pZCAqKSBwY2lfbWF0Y2hfaWQoZW5lX3R1bmVfdGJsLCBkZXYpOworCQlpZiAoaWQpCisJCQlicmVhazsKKwl9CisKKwl0ZXN0X2M5ID0gb2xkX2M5ID0gY29uZmlnX3JlYWRiKHNvY2tldCwgRU5FX1RFU1RfQzkpOworCWlmIChpZCkgeworCQltYXNrID0gKGlkLT5kcml2ZXJfZGF0YSA+PiA4KSAmIDB4RkY7CisJCWJpdHMgPSBpZC0+ZHJpdmVyX2RhdGEgJiAweEZGOworCisJCXRlc3RfYzkgPSAodGVzdF9jOSAmIH5tYXNrKSB8IGJpdHM7CisJfQorCWVsc2UKKwkJLyogZGVmYXVsdCB0byBjbGVhciBUTFRFbmFibGUgYml0LCBvbGQgYmVoYXZpb3VyICovCisJCXRlc3RfYzkgJj0gfkVORV9URVNUX0M5X1RMVEVOQUJMRTsKKworCXByaW50ayhLRVJOX0lORk8gInllbnRhIEVuRTogY2hhbmluZyB0ZXN0cmVnaXN0ZXIgMHhDOSwgJTAyeCAtPiAlMDJ4XG4iLCBvbGRfYzksIHRlc3RfYzkpOworCWNvbmZpZ193cml0ZWIoc29ja2V0LCBFTkVfVEVTVF9DOSwgdGVzdF9jOSk7Cit9CisKK3N0YXRpYyBpbnQgZW5lX292ZXJyaWRlKHN0cnVjdCB5ZW50YV9zb2NrZXQgKnNvY2tldCkKK3sKKwkvKiBpbnN0YWxsIHR1bmVfYnJpZGdlKCkgZnVuY3Rpb24gKi8KKwlzb2NrZXQtPnNvY2tldC50dW5lX2JyaWRnZSA9IGVuZV90dW5lX2JyaWRnZTsKKworCXJldHVybiB0aTEyNTBfb3ZlcnJpZGUoc29ja2V0KTsKK30KKyNlbHNlCisjICBkZWZpbmUgZW5lX292ZXJyaWRlIHRpMTI1MF9vdmVycmlkZQorI2VuZGlmCisKICNlbmRpZiAvKiBfTElOVVhfVEkxMTNYX0ggKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMgYi9kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYwppbmRleCBiYTRkNzhlLi5kYjlmOTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYworKysgYi9kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYwpAQCAtNTU5LDEyICs1NTksNiBAQAogc3RhdGljIGludCB5ZW50YV9zb2NrX2luaXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2spCiB7CiAJc3RydWN0IHllbnRhX3NvY2tldCAqc29ja2V0ID0gY29udGFpbmVyX29mKHNvY2ssIHN0cnVjdCB5ZW50YV9zb2NrZXQsIHNvY2tldCk7Ci0JdTE2IGJyaWRnZTsKLQotCWJyaWRnZSA9IGNvbmZpZ19yZWFkdyhzb2NrZXQsIENCX0JSSURHRV9DT05UUk9MKSAmIH5DQl9CUklER0VfSU5UUjsKLQlpZiAoIXNvY2tldC0+Y2JfaXJxKQotCQlicmlkZ2UgfD0gQ0JfQlJJREdFX0lOVFI7Ci0JY29uZmlnX3dyaXRldyhzb2NrZXQsIENCX0JSSURHRV9DT05UUk9MLCBicmlkZ2UpOwogCiAJZXhjYV93cml0ZWIoc29ja2V0LCBJMzY1X0dCTENUTCwgMHgwMCk7CiAJZXhjYV93cml0ZWIoc29ja2V0LCBJMzY1X0dFTkNUTCwgMHgwMCk7CkBAIC04MTksNiArODEzLDcgQEAKIAlDQVJEQlVTX1RZUEVfVE9QSUM5NSwKIAlDQVJEQlVTX1RZUEVfVE9QSUM5NywKIAlDQVJEQlVTX1RZUEVfTzJNSUNSTywKKwlDQVJEQlVTX1RZUEVfRU5FLAogfTsKIAogLyoKQEAgLTg2NSw2ICs4NjAsMTIgQEAKIAkJLm92ZXJyaWRlCT0gbzJtaWNyb19vdmVycmlkZSwKIAkJLnJlc3RvcmVfc3RhdGUJPSBvMm1pY3JvX3Jlc3RvcmVfc3RhdGUsCiAJfSwKKwlbQ0FSREJVU19UWVBFX0VORV0JPSB7CisJCS5vdmVycmlkZQk9IGVuZV9vdmVycmlkZSwKKwkJLnNhdmVfc3RhdGUJPSB0aV9zYXZlX3N0YXRlLAorCQkucmVzdG9yZV9zdGF0ZQk9IHRpX3Jlc3RvcmVfc3RhdGUsCisJCS5zb2NrX2luaXQJPSB0aV9pbml0LAorCX0sCiB9OwogCiAKQEAgLTg4MywxNiArODg0LDggQEAKIHsKIAlpbnQgaTsKIAl1bnNpZ25lZCBsb25nIHZhbDsKLQl1MTYgYnJpZGdlX2N0cmw7CiAJdTMyIG1hc2s7CiAKLQkvKiBTZXQgdXAgSVNBIGlycSByb3V0aW5nIHRvIHByb2JlIHRoZSBJU0EgaXJxcy4uICovCi0JYnJpZGdlX2N0cmwgPSBjb25maWdfcmVhZHcoc29ja2V0LCBDQl9CUklER0VfQ09OVFJPTCk7Ci0JaWYgKCEoYnJpZGdlX2N0cmwgJiBDQl9CUklER0VfSU5UUikpIHsKLQkJYnJpZGdlX2N0cmwgfD0gQ0JfQlJJREdFX0lOVFI7Ci0JCWNvbmZpZ193cml0ZXcoc29ja2V0LCBDQl9CUklER0VfQ09OVFJPTCwgYnJpZGdlX2N0cmwpOwotCX0KLQogCS8qCiAJICogUHJvYmUgZm9yIHVzYWJsZSBpbnRlcnJ1cHRzIHVzaW5nIHRoZSBmb3JjZQogCSAqIHJlZ2lzdGVyIHRvIGdlbmVyYXRlIGJvZ3VzIGNhcmQgc3RhdHVzIGV2ZW50cy4KQEAgLTkxNCw5ICs5MDcsNiBAQAogCiAJbWFzayA9IHByb2JlX2lycV9tYXNrKHZhbCkgJiAweGZmZmY7CiAKLQlicmlkZ2VfY3RybCAmPSB+Q0JfQlJJREdFX0lOVFI7Ci0JY29uZmlnX3dyaXRldyhzb2NrZXQsIENCX0JSSURHRV9DT05UUk9MLCBicmlkZ2VfY3RybCk7Ci0KIAlyZXR1cm4gbWFzazsKIH0KIApAQCAtOTQ0LDE4ICs5MzQsMTEgQEAKIC8qIHByb2JlcyB0aGUgUENJIGludGVycnVwdCwgdXNlIG9ubHkgb24gb3ZlcnJpZGUgZnVuY3Rpb25zICovCiBzdGF0aWMgaW50IHllbnRhX3Byb2JlX2NiX2lycShzdHJ1Y3QgeWVudGFfc29ja2V0ICpzb2NrZXQpCiB7Ci0JdTE2IGJyaWRnZV9jdHJsOwotCiAJaWYgKCFzb2NrZXQtPmNiX2lycSkKIAkJcmV0dXJuIC0xOwogCiAJc29ja2V0LT5wcm9iZV9zdGF0dXMgPSAwOwogCi0JLyogZGlzYWJsZSBJU0EgaW50ZXJydXB0cyAqLwotCWJyaWRnZV9jdHJsID0gY29uZmlnX3JlYWR3KHNvY2tldCwgQ0JfQlJJREdFX0NPTlRST0wpOwotCWJyaWRnZV9jdHJsICY9IH5DQl9CUklER0VfSU5UUjsKLQljb25maWdfd3JpdGV3KHNvY2tldCwgQ0JfQlJJREdFX0NPTlRST0wsIGJyaWRnZV9jdHJsKTsKLQogCWlmIChyZXF1ZXN0X2lycShzb2NrZXQtPmNiX2lycSwgeWVudGFfcHJvYmVfaGFuZGxlciwgU0FfU0hJUlEsICJ5ZW50YSIsIHNvY2tldCkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiWWVudGE6IHJlcXVlc3RfaXJxKCkgaW4geWVudGFfcHJvYmVfY2JfaXJxKCkgZmFpbGVkIVxuIik7CiAJCXJldHVybiAtMTsKQEAgLTk2Niw3ICs5NDksNyBAQAogCWNiX3dyaXRlbChzb2NrZXQsIENCX1NPQ0tFVF9FVkVOVCwgLTEpOwogCWNiX3dyaXRlbChzb2NrZXQsIENCX1NPQ0tFVF9NQVNLLCBDQl9DU1RTTUFTSyk7CiAJY2Jfd3JpdGVsKHNvY2tldCwgQ0JfU09DS0VUX0ZPUkNFLCBDQl9GQ0FSRFNUUyk7Ci0JCisKIAltc2xlZXAoMTAwKTsKIAogCS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLwpAQCAtMTAwNCwxMSArOTg3LDEyIEBACiB7CiAJdTE2IGJyaWRnZTsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gc29ja2V0LT5kZXY7CisJc3RydWN0IHBjaV9idXNfcmVnaW9uIHJlZ2lvbjsKIAotCXBjaV9zZXRfcG93ZXJfc3RhdGUoc29ja2V0LT5kZXYsIDApOworCXBjaWJpb3NfcmVzb3VyY2VfdG9fYnVzKHNvY2tldC0+ZGV2LCAmcmVnaW9uLCAmZGV2LT5yZXNvdXJjZVswXSk7CiAKIAljb25maWdfd3JpdGVsKHNvY2tldCwgQ0JfTEVHQUNZX01PREVfQkFTRSwgMCk7Ci0JY29uZmlnX3dyaXRlbChzb2NrZXQsIFBDSV9CQVNFX0FERFJFU1NfMCwgZGV2LT5yZXNvdXJjZVswXS5zdGFydCk7CisJY29uZmlnX3dyaXRlbChzb2NrZXQsIFBDSV9CQVNFX0FERFJFU1NfMCwgcmVnaW9uLnN0YXJ0KTsKIAljb25maWdfd3JpdGV3KHNvY2tldCwgUENJX0NPTU1BTkQsCiAJCQlQQ0lfQ09NTUFORF9JTyB8CiAJCQlQQ0lfQ09NTUFORF9NRU1PUlkgfApAQCAtMTAzMSw4ICsxMDE1LDggQEAKIAkgKiAgLSBQQ0kgaW50ZXJydXB0cyBlbmFibGVkIGlmIGEgUENJIGludGVycnVwdCBleGlzdHMuLgogCSAqLwogCWJyaWRnZSA9IGNvbmZpZ19yZWFkdyhzb2NrZXQsIENCX0JSSURHRV9DT05UUk9MKTsKLQlicmlkZ2UgJj0gfihDQl9CUklER0VfQ1JTVCB8IENCX0JSSURHRV9QUkVGRVRDSDEgfCBDQl9CUklER0VfSU5UUiB8IENCX0JSSURHRV9JU0FFTiB8IENCX0JSSURHRV9WR0FFTik7Ci0JYnJpZGdlIHw9IENCX0JSSURHRV9QUkVGRVRDSDAgfCBDQl9CUklER0VfUE9TVEVOIHwgQ0JfQlJJREdFX0lOVFI7CisJYnJpZGdlICY9IH4oQ0JfQlJJREdFX0NSU1QgfCBDQl9CUklER0VfUFJFRkVUQ0gxIHwgQ0JfQlJJREdFX0lTQUVOIHwgQ0JfQlJJREdFX1ZHQUVOKTsKKwlicmlkZ2UgfD0gQ0JfQlJJREdFX1BSRUZFVENIMCB8IENCX0JSSURHRV9QT1NURU47CiAJY29uZmlnX3dyaXRldyhzb2NrZXQsIENCX0JSSURHRV9DT05UUk9MLCBicmlkZ2UpOwogfQogCkBAIC0xMjY1LDEwICsxMjQ5LDIyIEBACiAJQ0JfSUQoUENJX1ZFTkRPUl9JRF9USSwgUENJX0RFVklDRV9JRF9USV8xMjUwLCBUSTEyNTApLAogCUNCX0lEKFBDSV9WRU5ET1JfSURfVEksIFBDSV9ERVZJQ0VfSURfVElfMTQxMCwgVEkxMjUwKSwKIAotCUNCX0lEKFBDSV9WRU5ET1JfSURfRU5FLCBQQ0lfREVWSUNFX0lEX0VORV8xMjExLCBUSTEyWFgpLAotCUNCX0lEKFBDSV9WRU5ET1JfSURfRU5FLCBQQ0lfREVWSUNFX0lEX0VORV8xMjI1LCBUSTEyWFgpLAotCUNCX0lEKFBDSV9WRU5ET1JfSURfRU5FLCBQQ0lfREVWSUNFX0lEX0VORV8xNDEwLCBUSTEyNTApLAotCUNCX0lEKFBDSV9WRU5ET1JfSURfRU5FLCBQQ0lfREVWSUNFX0lEX0VORV8xNDIwLCBUSTEyWFgpLAorCUNCX0lEKFBDSV9WRU5ET1JfSURfVEksIFBDSV9ERVZJQ0VfSURfVElfWFgyMV9YWDExLCBUSTEyWFgpLAorCUNCX0lEKFBDSV9WRU5ET1JfSURfVEksIFBDSV9ERVZJQ0VfSURfVElfWDUxNSwgVEkxMlhYKSwKKwlDQl9JRChQQ0lfVkVORE9SX0lEX1RJLCBQQ0lfREVWSUNFX0lEX1RJX1g0MjAsIFRJMTJYWCksCisJQ0JfSUQoUENJX1ZFTkRPUl9JRF9USSwgUENJX0RFVklDRV9JRF9USV9YNjIwLCBUSTEyWFgpLAorCUNCX0lEKFBDSV9WRU5ET1JfSURfVEksIFBDSV9ERVZJQ0VfSURfVElfNzQxMCwgVEkxMlhYKSwKKwlDQl9JRChQQ0lfVkVORE9SX0lEX1RJLCBQQ0lfREVWSUNFX0lEX1RJXzc1MTAsIFRJMTJYWCksCisJQ0JfSUQoUENJX1ZFTkRPUl9JRF9USSwgUENJX0RFVklDRV9JRF9USV83NjEwLCBUSTEyWFgpLAorCisJQ0JfSUQoUENJX1ZFTkRPUl9JRF9FTkUsIFBDSV9ERVZJQ0VfSURfRU5FXzcxMCwgVEkxMlhYKSwKKwlDQl9JRChQQ0lfVkVORE9SX0lEX0VORSwgUENJX0RFVklDRV9JRF9FTkVfNzEyLCBUSTEyWFgpLAorCUNCX0lEKFBDSV9WRU5ET1JfSURfRU5FLCBQQ0lfREVWSUNFX0lEX0VORV83MjAsIFRJMTJYWCksCisJQ0JfSUQoUENJX1ZFTkRPUl9JRF9FTkUsIFBDSV9ERVZJQ0VfSURfRU5FXzcyMiwgVEkxMlhYKSwKKwlDQl9JRChQQ0lfVkVORE9SX0lEX0VORSwgUENJX0RFVklDRV9JRF9FTkVfMTIxMSwgRU5FKSwKKwlDQl9JRChQQ0lfVkVORE9SX0lEX0VORSwgUENJX0RFVklDRV9JRF9FTkVfMTIyNSwgRU5FKSwKKwlDQl9JRChQQ0lfVkVORE9SX0lEX0VORSwgUENJX0RFVklDRV9JRF9FTkVfMTQxMCwgRU5FKSwKKwlDQl9JRChQQ0lfVkVORE9SX0lEX0VORSwgUENJX0RFVklDRV9JRF9FTkVfMTQyMCwgRU5FKSwKIAogCUNCX0lEKFBDSV9WRU5ET1JfSURfUklDT0gsIFBDSV9ERVZJQ0VfSURfUklDT0hfUkw1QzQ2NSwgUklDT0gpLAogCUNCX0lEKFBDSV9WRU5ET1JfSURfUklDT0gsIFBDSV9ERVZJQ0VfSURfUklDT0hfUkw1QzQ2NiwgUklDT0gpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYyBiL2RyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMKaW5kZXggYWFjODNjZS4uYTFjNTJhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBkcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jCiAgKiAgIFMvMzkwIGNvbW1vbiBJL08gcm91dGluZXMgLS0gYmxhY2tsaXN0aW5nIG9mIHNwZWNpZmljIGRldmljZXMKLSAqICAgJFJldmlzaW9uOiAxLjM0ICQKKyAqICAgJFJldmlzaW9uOiAxLjM1ICQKICAqCiAgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwKICAqCQkJICAgICAgSUJNIENvcnBvcmF0aW9uCkBAIC0zNSw3ICszNSw3IEBACiAgKi8KIAogLyogNjU1MzYgYml0cyB0byBpbmRpY2F0ZSBpZiBhIGRldm5vIGlzIGJsYWNrbGlzdGVkIG9yIG5vdCAqLwotI2RlZmluZSBfX0JMX0RFVl9XT1JEUyAoX19NQVhfU1VCQ0hBTk5FTFMgKyAoOCpzaXplb2YobG9uZykgLSAxKSAvIFwKKyNkZWZpbmUgX19CTF9ERVZfV09SRFMgKChfX01BWF9TVUJDSEFOTkVMUyArICg4KnNpemVvZihsb25nKSAtIDEpKSAvIFwKIAkJCSAoOCpzaXplb2YobG9uZykpKQogc3RhdGljIHVuc2lnbmVkIGxvbmcgYmxfZGV2W19fQkxfREVWX1dPUkRTXTsKIHR5cGVkZWYgZW51bSB7YWRkLCBmcmVlfSByYW5nZV9hY3Rpb247CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Njd2dyb3VwLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Njd2dyb3VwLmMKaW5kZXggOTFlYThlNC4uZGJiM2ViMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jY3dncm91cC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2N3Z3JvdXAuYwpAQCAtNDM3LDcgKzQzNyw3IEBACiAJaWYgKGNkZXYtPmRldi5kcml2ZXJfZGF0YSkgewogCQlnZGV2ID0gKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKiljZGV2LT5kZXYuZHJpdmVyX2RhdGE7CiAJCWlmIChnZXRfZGV2aWNlKCZnZGV2LT5kZXYpKSB7Ci0JCQlpZiAoa2xpc3Rfbm9kZV9hdHRhY2hlZCgmZ2Rldi0+ZGV2Lmtub2RlX2J1cykpCisJCQlpZiAoZGV2aWNlX2lzX3JlZ2lzdGVyZWQoJmdkZXYtPmRldikpCiAJCQkJcmV0dXJuIGdkZXY7CiAJCQlwdXRfZGV2aWNlKCZnZGV2LT5kZXYpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYwppbmRleCAxNGM3NmY1Li45YWRjMTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKQEAgLTU0NCw3ICs1NDQsNyBAQAogCQkuc2libGluZyA9IHNpYmxpbmcsCiAJfTsKIAotCWRldiA9IGJ1c19maW5kX2RldmljZSgmY3NzX2J1c190eXBlLCBOVUxMLCAmZGF0YSwgbWF0Y2hfZGV2bm8pOworCWRldiA9IGJ1c19maW5kX2RldmljZSgmY2N3X2J1c190eXBlLCBOVUxMLCAmZGF0YSwgbWF0Y2hfZGV2bm8pOwogCiAJcmV0dXJuIGRldiA/IHRvX2Njd2RldihkZXYpIDogTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vejkwbWFpbi5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by96OTBtYWluLmMKaW5kZXggNmFlZWYzYi4uMGNiNDdlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by96OTBtYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96OTBtYWluLmMKQEAgLTY4Miw5ICs2ODIsNiBAQAogCWRlbF90aW1lcigmY29uZmlnX3RpbWVyKTsKIAlkZWxfdGltZXIoJmNsZWFudXBfdGltZXIpOwogCi0JaWYgKHo5MF9kZXZpY2Vfd29yaykKLQkJZGVzdHJveV93b3JrcXVldWUoejkwX2RldmljZV93b3JrKTsKLQogCWRlc3Ryb3lfejkwY3J5cHQoKTsKIAogCVBSSU5US04oIlVubG9hZGVkLlxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGguaCBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aC5oCmluZGV4IDNhMDI4NTYuLjk5NjM0NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aC5oCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aC5oCkBAIC0yNCw3ICsyNCw3IEBACiAKICNpbmNsdWRlICJxZXRoX21wYy5oIgogCi0jZGVmaW5lIFZFUlNJT05fUUVUSF9IIAkJIiRSZXZpc2lvbjogMS4xMzkgJCIKKyNkZWZpbmUgVkVSU0lPTl9RRVRIX0ggCQkiJFJldmlzaW9uOiAxLjE0MiAkIgogCiAjaWZkZWYgQ09ORklHX1FFVEhfSVBWNgogI2RlZmluZSBRRVRIX1ZFUlNJT05fSVBWNiAJIjpJUHY2IgpAQCAtNjg2LDYgKzY4Niw3IEBACiAJX191MzIgcGR1X2hkcjsKIAlfX3UzMiBwZHVfaGRyX2FjazsKIAlfX3UxNiBpcGE7CisJX191MzIgcGt0X3NlcW5vOwogfTsKIAogc3RydWN0IHFldGhfcmVwbHkgewpAQCAtODQ4LDYgKzg0OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9uIGludGVyZmFjZSAlcyIsIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CiAgICAgICAgICAgICAgICAgfQorCQlrZnJlZV9za2IoKnNrYik7CiAgICAgICAgICAgICAgICAgKnNrYiA9IG5ld19za2I7CiAJfQogCXJldHVybiAwOwpAQCAtMTE3Miw3ICsxMTc0LDcgQEAKIHFldGhfcmVhbGxvY19idWZmZXJfcG9vbChzdHJ1Y3QgcWV0aF9jYXJkICosIGludCk7CiAKIGV4dGVybiBpbnQKLXFldGhfc2V0X2xhcmdlX3NlbmQoc3RydWN0IHFldGhfY2FyZCAqKTsKK3FldGhfc2V0X2xhcmdlX3NlbmQoc3RydWN0IHFldGhfY2FyZCAqLCBlbnVtIHFldGhfbGFyZ2Vfc2VuZF90eXBlcyk7CiAKIGV4dGVybiB2b2lkCiBxZXRoX2ZpbGxfaGVhZGVyKHN0cnVjdCBxZXRoX2NhcmQgKiwgc3RydWN0IHFldGhfaGRyICosCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX21haW4uYwppbmRleCA3OWM3NGYzLi5iZDI4ZTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICoKLSAqIGxpbnV4L2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMgKCRSZXZpc2lvbjogMS4yMTQgJCkKKyAqIGxpbnV4L2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMgKCRSZXZpc2lvbjogMS4yMjQgJCkKICAqCiAgKiBMaW51eCBvbiB6U2VyaWVzIE9TQSBFeHByZXNzIGFuZCBIaXBlclNvY2tldHMgc3VwcG9ydAogICoKQEAgLTEyLDcgKzEyLDcgQEAKICAqCQkJICBGcmFuayBQYXZsaWMgKHBhdmxpY0BkZS5pYm0uY29tKSBhbmQKICAqCQkgCSAgVGhvbWFzIFNwYXR6aWVyIDx0c3BhdEBkZS5pYm0uY29tPgogICoKLSAqICAgICRSZXZpc2lvbjogMS4yMTQgJAkgJERhdGU6IDIwMDUvMDUvMDQgMjA6MTk6MTggJAorICogICAgJFJldmlzaW9uOiAxLjIyNCAkCSAkRGF0ZTogMjAwNS8wNS8wNCAyMDoxOToxOCAkCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yOSwxNCArMjksNiBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotLyoqKgotICogZXllIGNhdGNoZXI7IGp1c3QgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcwotICovCi12b2lkIHZvbGF0aWxlCi1xZXRoX2V5ZWNhdGNoZXIodm9pZCkKLXsKLQlyZXR1cm47Ci19CiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTgwLDcgKzcyLDcgQEAKICNpbmNsdWRlICJxZXRoX2VkZHAuaCIKICNpbmNsdWRlICJxZXRoX3Rzby5oIgogCi0jZGVmaW5lIFZFUlNJT05fUUVUSF9DICIkUmV2aXNpb246IDEuMjE0ICQiCisjZGVmaW5lIFZFUlNJT05fUUVUSF9DICIkUmV2aXNpb246IDEuMjI0ICQiCiBzdGF0aWMgY29uc3QgY2hhciAqdmVyc2lvbiA9ICJxZXRoIFMvMzkwIE9TQS1FeHByZXNzIGRyaXZlciI7CiAKIC8qKgpAQCAtNTE5LDcgKzUxMSw3IEBACiBfX3FldGhfc2V0X29mZmxpbmUoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqY2dkZXYsIGludCByZWNvdmVyeV9tb2RlKQogewogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSAoc3RydWN0IHFldGhfY2FyZCAqKSBjZ2Rldi0+ZGV2LmRyaXZlcl9kYXRhOwotCWludCByYyA9IDA7CisJaW50IHJjID0gMCwgcmMyID0gMCwgcmMzID0gMDsKIAllbnVtIHFldGhfY2FyZF9zdGF0ZXMgcmVjb3Zlcl9mbGFnOwogCiAJUUVUSF9EQkZfVEVYVChzZXR1cCwgMywgInNldG9mZmwiKTsKQEAgLTUzMSwxMSArNTIzLDEzIEBACiAJCQkgICBDQVJEX0JVU19JRChjYXJkKSk7CiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJfQotCWlmICgocmMgPSBjY3dfZGV2aWNlX3NldF9vZmZsaW5lKENBUkRfRERFVihjYXJkKSkpIHx8Ci0JICAgIChyYyA9IGNjd19kZXZpY2Vfc2V0X29mZmxpbmUoQ0FSRF9XREVWKGNhcmQpKSkgfHwKLQkgICAgKHJjID0gY2N3X2RldmljZV9zZXRfb2ZmbGluZShDQVJEX1JERVYoY2FyZCkpKSkgeworCXJjICA9IGNjd19kZXZpY2Vfc2V0X29mZmxpbmUoQ0FSRF9EREVWKGNhcmQpKTsKKwlyYzIgPSBjY3dfZGV2aWNlX3NldF9vZmZsaW5lKENBUkRfV0RFVihjYXJkKSk7CisJcmMzID0gY2N3X2RldmljZV9zZXRfb2ZmbGluZShDQVJEX1JERVYoY2FyZCkpOworCWlmICghcmMpCisJCXJjID0gKHJjMikgPyByYzIgOiByYzM7CisJaWYgKHJjKQogCQlRRVRIX0RCRl9URVhUXyhzZXR1cCwgMiwgIjFlcnIlZCIsIHJjKTsKLQl9CiAJaWYgKHJlY292ZXJfZmxhZyA9PSBDQVJEX1NUQVRFX1VQKQogCQljYXJkLT5zdGF0ZSA9IENBUkRfU1RBVEVfUkVDT1ZFUjsKIAlxZXRoX25vdGlmeV9wcm9jZXNzZXMoKTsKQEAgLTEwNTQsNiArMTA0OCw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPnZsYW5sb2NrKTsKIAljYXJkLT52bGFuZ3JwID0gTlVMTDsKICNlbmRpZgorCXNwaW5fbG9ja19pbml0KCZjYXJkLT5sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmY2FyZC0+aXBfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPnRocmVhZF9tYXNrX2xvY2spOwogCWNhcmQtPnRocmVhZF9zdGFydF9tYXNrID0gMDsKQEAgLTE2MzQsMTYgKzE2MjksNiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJlcGx5LT5jYXJkLT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkCi1xZXRoX3Jlc2V0X2lwX2FkZHJlc3NlcyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJyc3RpcGFkZCIpOwotCi0JcWV0aF9jbGVhcl9pcF9saXN0KGNhcmQsIDAsIDEpOwotCS8qIHRoaXMgZnVuY3Rpb24gd2lsbCBhbHNvIHNjaGVkdWxlIHRoZSBTRVRfSVBfVEhSRUFEICovCi0JcWV0aF9zZXRfbXVsdGljYXN0X2xpc3QoY2FyZC0+ZGV2KTsKLX0KLQogc3RhdGljIHN0cnVjdCBxZXRoX2lwYV9jbWQgKgogcWV0aF9jaGVja19pcGFfZGF0YShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2IpCiB7CkBAIC0xNjcyLDkgKzE2NTcsOCBAQAogCQkJCQkgICAiSVAgYWRkcmVzcyByZXNldC5cbiIsCiAJCQkJCSAgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksCiAJCQkJCSAgIGNhcmQtPmluZm8uY2hwaWQpOwotCQkJCWNhcmQtPmxhbl9vbmxpbmUgPSAxOwogCQkJCW5ldGlmX2NhcnJpZXJfb24oY2FyZC0+ZGV2KTsKLQkJCQlxZXRoX3Jlc2V0X2lwX2FkZHJlc3NlcyhjYXJkKTsKKwkJCQlxZXRoX3NjaGVkdWxlX3JlY292ZXJ5KGNhcmQpOwogCQkJCXJldHVybiBOVUxMOwogCQkJY2FzZSBJUEFfQ01EX1JFR0lTVEVSX0xPQ0FMX0FERFI6CiAJCQkJUUVUSF9EQkZfVEVYVCh0cmFjZSwzLCAiaXJsYSIpOwpAQCAtMjM5NSw2ICsyMzc5LDcgQEAKIAkJc2tiX3B1bGwoc2tiLCBWTEFOX0hMRU4pOwogCX0KICNlbmRpZgorCSooKF9fdTMyICopc2tiLT5jYikgPSArK2NhcmQtPnNlcW5vLnBrdF9zZXFubzsKIAlyZXR1cm4gdmxhbl9pZDsKIH0KIApAQCAtMjc1OSwxMSArMjc0NCw5IEBACiAJCXF1ZXVlLT5jYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX2RvX3FkaW9fc3RhcnRfdGltZTsKICNlbmRpZgogCWlmIChyYyl7Ci0JCVFFVEhfREJGX1NQUklOVEYodHJhY2UsIDAsICJxZXRoX2ZsdXNoX2J1ZmZlcnM6IGRvX1FESU8gIgotCQkJCSAicmV0dXJuZWQgZXJyb3IgKCVpKSBvbiBkZXZpY2UgJXMuIiwKLQkJCQkgcmMsIENBUkRfRERFVl9JRChxdWV1ZS0+Y2FyZCkpOwogCQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiZmx1c2hidWYiKTsKIAkJUUVUSF9EQkZfVEVYVF8odHJhY2UsIDIsICIgZXJyJWQiLCByYyk7CisJCVFFVEhfREJGX1RFWFRfKHRyYWNlLCAyLCAiJXMiLCBDQVJEX0RERVZfSUQocXVldWUtPmNhcmQpKTsKIAkJcXVldWUtPmNhcmQtPnN0YXRzLnR4X2Vycm9ycyArPSBjb3VudDsKIAkJLyogdGhpcyBtdXN0IG5vdCBoYXBwZW4gdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMuIGlmIGl0CiAJCSAqIGhhcHBlbnMgc29tZXRoaW5nIGlzIHJlYWxseSB3cm9uZyAtPiByZWNvdmVyICovCkBAIC0yOTA5LDExICsyODkyLDggQEAKIAlRRVRIX0RCRl9URVhUKHRyYWNlLCA2LCAicWRvdWhkbCIpOwogCWlmIChzdGF0dXMgJiBRRElPX1NUQVRVU19MT09LX0ZPUl9FUlJPUikgewogCQlpZiAoc3RhdHVzICYgUURJT19TVEFUVVNfQUNUSVZBVEVfQ0hFQ0tfQ09ORElUSU9OKXsKLQkJCVFFVEhfREJGX1NQUklOVEYodHJhY2UsIDIsICJPbiBkZXZpY2UgJXM6ICIKLQkJCQkJICJyZWNlaXZlZCBhY3RpdmUgY2hlY2sgIgotCQkJCSAgICAgICAgICJjb25kaXRpb24gKDB4JTA4eCkuIiwKLQkJCQkJIENBUkRfQlVTX0lEKGNhcmQpLCBzdGF0dXMpOwotCQkJUUVUSF9EQkZfVEVYVCh0cmFjZSwgMiwgImNoa2NvbmQiKTsKKwkJCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJhY2hrY29uZCIpOworCQkJUUVUSF9EQkZfVEVYVF8odHJhY2UsIDIsICIlcyIsIENBUkRfQlVTX0lEKGNhcmQpKTsKIAkJCVFFVEhfREJGX1RFWFRfKHRyYWNlLCAyLCAiJTA4eCIsIHN0YXR1cyk7CiAJCQluZXRpZl9zdG9wX3F1ZXVlKGNhcmQtPmRldik7CiAJCQlxZXRoX3NjaGVkdWxlX3JlY292ZXJ5KGNhcmQpOwpAQCAtMzAyNyw3ICszMDA3LDcgQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCWZvcihqID0gMDsgaiA8IFFFVEhfTUFYX0JVRkZFUl9FTEVNRU5UUyhjYXJkKTsgKytqKXsKLQkJCXB0ciA9ICh2b2lkICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwkJCXB0ciA9ICh2b2lkICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMfEdGUF9ETUEpOwogCQkJaWYgKCFwdHIpIHsKIAkJCQl3aGlsZSAoaiA+IDApCiAJCQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykKQEAgLTMwNzEsNyArMzA1MSw4IEBACiAJaWYgKGNhcmQtPnFkaW8uc3RhdGUgPT0gUUVUSF9RRElPX0FMTE9DQVRFRCkKIAkJcmV0dXJuIDA7CiAKLQljYXJkLT5xZGlvLmluX3EgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF9xZGlvX3EpLCBHRlBfS0VSTkVMKTsKKwljYXJkLT5xZGlvLmluX3EgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF9xZGlvX3EpLCAKKwkJCQkgIEdGUF9LRVJORUx8R0ZQX0RNQSk7CiAJaWYgKCFjYXJkLT5xZGlvLmluX3EpCiAJCXJldHVybiAtIEVOT01FTTsKIAlRRVRIX0RCRl9URVhUKHNldHVwLCAyLCAiaW5xIik7CkBAIC0zMDk2LDcgKzMwNzcsNyBAQAogCX0KIAlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+cWRpby5ub19vdXRfcXVldWVzOyArK2kpewogCQljYXJkLT5xZGlvLm91dF9xc1tpXSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EpLAotCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJCQkJCSAgICAgICBHRlBfS0VSTkVMfEdGUF9ETUEpOwogCQlpZiAoIWNhcmQtPnFkaW8ub3V0X3FzW2ldKXsKIAkJCXdoaWxlIChpID4gMCkKIAkJCQlrZnJlZShjYXJkLT5xZGlvLm91dF9xc1stLWldKTsKQEAgLTMzNTYsMjYgKzMzMzcsMzIgQEAKIHN0YXRpYyBpbnQKIHFldGhfaGFsdF9jaGFubmVscyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQogewotCWludCByYyA9IDA7CisJaW50IHJjMSA9IDAsIHJjMj0wLCByYzMgPSAwOwogCiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwzLCJoYWx0Y2hzIik7Ci0JaWYgKChyYyA9IHFldGhfaGFsdF9jaGFubmVsKCZjYXJkLT5yZWFkKSkpCi0JCXJldHVybiByYzsKLQlpZiAoKHJjID0gcWV0aF9oYWx0X2NoYW5uZWwoJmNhcmQtPndyaXRlKSkpCi0JCXJldHVybiByYzsKLQlyZXR1cm4gIHFldGhfaGFsdF9jaGFubmVsKCZjYXJkLT5kYXRhKTsKKwlyYzEgPSBxZXRoX2hhbHRfY2hhbm5lbCgmY2FyZC0+cmVhZCk7CisJcmMyID0gcWV0aF9oYWx0X2NoYW5uZWwoJmNhcmQtPndyaXRlKTsKKwlyYzMgPSBxZXRoX2hhbHRfY2hhbm5lbCgmY2FyZC0+ZGF0YSk7CisJaWYgKHJjMSkKKwkJcmV0dXJuIHJjMTsKKwlpZiAocmMyKSAKKwkJcmV0dXJuIHJjMjsKKwlyZXR1cm4gcmMzOwogfQogc3RhdGljIGludAogcWV0aF9jbGVhcl9jaGFubmVscyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQogewotCWludCByYyA9IDA7CisJaW50IHJjMSA9IDAsIHJjMj0wLCByYzMgPSAwOwogCiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwzLCJjbGVhcmNocyIpOwotCWlmICgocmMgPSBxZXRoX2NsZWFyX2NoYW5uZWwoJmNhcmQtPnJlYWQpKSkKLQkJcmV0dXJuIHJjOwotCWlmICgocmMgPSBxZXRoX2NsZWFyX2NoYW5uZWwoJmNhcmQtPndyaXRlKSkpCi0JCXJldHVybiByYzsKLQlyZXR1cm4gIHFldGhfY2xlYXJfY2hhbm5lbCgmY2FyZC0+ZGF0YSk7CisJcmMxID0gcWV0aF9jbGVhcl9jaGFubmVsKCZjYXJkLT5yZWFkKTsKKwlyYzIgPSBxZXRoX2NsZWFyX2NoYW5uZWwoJmNhcmQtPndyaXRlKTsKKwlyYzMgPSBxZXRoX2NsZWFyX2NoYW5uZWwoJmNhcmQtPmRhdGEpOworCWlmIChyYzEpCisJCXJldHVybiByYzE7CisJaWYgKHJjMikgCisJCXJldHVybiByYzI7CisJcmV0dXJuIHJjMzsKIH0KIAogc3RhdGljIGludApAQCAtMzQ0NSwyMyArMzQzMiwyMyBAQAogCX0KIAlpZiAoKHJjID0gcWV0aF9jbV9lbmFibGUoY2FyZCkpKXsKIAkJUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICIyZXJyJWQiLCByYyk7Ci0JCXJldHVybiByYzsKKwkJZ290byBvdXRfcWRpbzsKIAl9CiAJaWYgKChyYyA9IHFldGhfY21fc2V0dXAoY2FyZCkpKXsKIAkJUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICIzZXJyJWQiLCByYyk7Ci0JCXJldHVybiByYzsKKwkJZ290byBvdXRfcWRpbzsKIAl9CiAJaWYgKChyYyA9IHFldGhfdWxwX2VuYWJsZShjYXJkKSkpewogCQlRRVRIX0RCRl9URVhUXyhzZXR1cCwgMiwgIjRlcnIlZCIsIHJjKTsKLQkJcmV0dXJuIHJjOworCQlnb3RvIG91dF9xZGlvOwogCX0KIAlpZiAoKHJjID0gcWV0aF91bHBfc2V0dXAoY2FyZCkpKXsKIAkJUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICI1ZXJyJWQiLCByYyk7Ci0JCXJldHVybiByYzsKKwkJZ290byBvdXRfcWRpbzsKIAl9CiAJaWYgKChyYyA9IHFldGhfYWxsb2NfcWRpb19idWZmZXJzKGNhcmQpKSl7CiAJCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiNWVyciVkIiwgcmMpOwotCQlyZXR1cm4gcmM7CisJCWdvdG8gb3V0X3FkaW87CiAJfQogCWlmICgocmMgPSBxZXRoX3FkaW9fZXN0YWJsaXNoKGNhcmQpKSl7CiAJCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiNmVyciVkIiwgcmMpOwpAQCAtMzc5NSwxMiArMzc4MiwxNiBAQAogcWV0aF9wcmVwYXJlX3NrYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYiwKIAkJIHN0cnVjdCBxZXRoX2hkciAqKmhkciwgaW50IGlwdikKIHsKKwlpbnQgcmM7CiAjaWZkZWYgQ09ORklHX1FFVEhfVkxBTgogCXUxNiAqdGFnOwogI2VuZGlmCiAKIAlRRVRIX0RCRl9URVhUKHRyYWNlLCA2LCAicHJlcHNrYiIpOwogCisgICAgICAgIHJjID0gcWV0aF9yZWFsbG9jX2hlYWRyb29tKGNhcmQsIHNrYiwgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikpOworICAgICAgICBpZiAocmMpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJjOwogI2lmZGVmIENPTkZJR19RRVRIX1ZMQU4KIAlpZiAoY2FyZC0+dmxhbmdycCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KCpza2IpICYmCiAJICAgICgoaXB2ID09IDYpIHx8IGNhcmQtPm9wdGlvbnMubGF5ZXIyKSApIHsKQEAgLTQyNTEsNyArNDI0Miw4IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1xZXRoX2dldF9lbGVtZW50c19ubyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCB2b2lkICpoZHIsIHN0cnVjdCBza19idWZmICpza2IpCitxZXRoX2dldF9lbGVtZW50c19ubyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCB2b2lkICpoZHIsIAorCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBlbGVtcykKIHsKIAlpbnQgZWxlbWVudHNfbmVlZGVkID0gMDsKIApAQCAtNDI2MSw5ICs0MjUzLDEwIEBACiAgICAgICAgIGlmIChlbGVtZW50c19uZWVkZWQgPT0gMCApCiAgICAgICAgICAgICAgICAgZWxlbWVudHNfbmVlZGVkID0gMSArICgoKCgodW5zaWduZWQgbG9uZykgaGRyKSAlIFBBR0VfU0laRSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNrYi0+bGVuKSA+PiBQQUdFX1NISUZUKTsKLSAgICAgICAgaWYgKGVsZW1lbnRzX25lZWRlZCA+IFFFVEhfTUFYX0JVRkZFUl9FTEVNRU5UUyhjYXJkKSl7CisJaWYgKChlbGVtZW50c19uZWVkZWQgKyBlbGVtcykgPiBRRVRIX01BWF9CVUZGRVJfRUxFTUVOVFMoY2FyZCkpewogICAgICAgICAgICAgICAgIFBSSU5UX0VSUigicWV0aF9kb19zZW5kX3BhY2tldDogaW52YWxpZCBzaXplIG9mICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIklQIHBhY2tldC4gRGlzY2FyZGVkLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAiSVAgcGFja2V0IChOdW1iZXI9JWQgLyBMZW5ndGg9JWQpLiBEaXNjYXJkZWQuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoZWxlbWVudHNfbmVlZGVkK2VsZW1zKSwgc2tiLT5sZW4pOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBlbGVtZW50c19uZWVkZWQ7CkBAIC00Mjc1LDcgKzQyNjgsNyBAQAogCWludCBpcHYgPSAwOwogCWludCBjYXN0X3R5cGU7CiAJc3RydWN0IHFldGhfcWRpb19vdXRfcSAqcXVldWU7Ci0Jc3RydWN0IHFldGhfaGRyICpoZHI7CisJc3RydWN0IHFldGhfaGRyICpoZHIgPSBOVUxMOwogCWludCBlbGVtZW50c19uZWVkZWQgPSAwOwogCWVudW0gcWV0aF9sYXJnZV9zZW5kX3R5cGVzIGxhcmdlX3NlbmQgPSBRRVRIX0xBUkdFX1NFTkRfTk87CiAJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHggPSBOVUxMOwpAQCAtNDMzNyw5ICs0MzMwLDExIEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0gZWxzZSB7Ci0JCWVsZW1lbnRzX25lZWRlZCArPSBxZXRoX2dldF9lbGVtZW50c19ubyhjYXJkLCh2b2lkKikgaGRyLCBza2IpOwotCQlpZiAoIWVsZW1lbnRzX25lZWRlZCkKKwkJaW50IGVsZW1zID0gcWV0aF9nZXRfZWxlbWVudHNfbm8oY2FyZCwodm9pZCopIGhkciwgc2tiLAorCQkJCQkJIGVsZW1lbnRzX25lZWRlZCk7CisJCWlmICghZWxlbXMpCiAJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZWxlbWVudHNfbmVlZGVkICs9IGVsZW1zOwogCX0KIAogCWlmIChjYXJkLT5pbmZvLnR5cGUgIT0gUUVUSF9DQVJEX1RZUEVfSVFEKQpAQCAtNDUwNCw3ICs0NDk5LDExIEBACiAKIAlRRVRIX0RCRl9URVhUKHRyYWNlLDMsImFycHN0bm9lIik7CiAKLQkvKiBUT0RPOiByZWFsbHkgbm90IHN1cHBvcnRlZCBieSBHdWVzdExBTj8gKi8KKwkvKgorCSAqIGN1cnJlbnRseSBHdWVzdExBTiBvbmx5IHN1cHBvcnRzIHRoZSBBUlAgYXNzaXN0IGZ1bmN0aW9uCisJICogSVBBX0NNRF9BU1NfQVJQX1FVRVJZX0lORk8sIGJ1dCBub3QgSVBBX0NNRF9BU1NfQVJQX1NFVF9OT19FTlRSSUVTOworCSAqIHRodXMgd2Ugc2F5IEVPUE5PVFNVUFAgZm9yIHRoaXMgQVJQIGZ1bmN0aW9uCisJICovCiAJaWYgKGNhcmQtPmluZm8uZ3Vlc3RsYW4pCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAlpZiAoIXFldGhfaXNfc3VwcG9ydGVkKGNhcmQsSVBBX0FSUF9QUk9DRVNTSU5HKSkgewpAQCAtNDY4MSwxNCArNDY4MCw2IEBACiAKIAlRRVRIX0RCRl9URVhUKHRyYWNlLDMsImFycHF1ZXJ5Iik7CiAKLQkvKgotCSAqIGN1cnJlbnRseSBHdWVzdExBTiAgZG9lcyBvbmx5IGRlbGl2ZXIgYWxsIHplcm9zIG9uIHF1ZXJ5IGFycCwKLQkgKiBldmVuIHRob3VnaCBhcnAgcHJvY2Vzc2luZyBpcyBzdXBwb3J0ZWQgKGFjY29yZGluZyB0byBJUEEgc3VwcC4KLQkgKiBmdW5jcyBmbGFncyk7IHNpbmNlIGFsbCB6ZXJvcyBpcyBubyB2YWx1ZWFibGUgaW5mb3JtYXRpb24sCi0JICogd2Ugc2F5IEVPUE5PVFNVUFAgZm9yIGFsbCBBUlAgZnVuY3Rpb25zCi0JICovCi0JLyppZiAoY2FyZC0+aW5mby5ndWVzdGxhbikKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOyAqLwogCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwvKklQQV9RVUVSWV9BUlBfQUREUl9JTkZPKi8KIAkJCSAgICAgICBJUEFfQVJQX1BST0NFU1NJTkcpKSB7CiAJCVBSSU5UX1dBUk4oIkFSUCBwcm9jZXNzaW5nIG5vdCBzdXBwb3J0ZWQgIgpAQCAtNDg5NCwxMCArNDg4NSw5IEBACiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwzLCJhcnBhZGVudCIpOwogCiAJLyoKLQkgKiBjdXJyZW50bHkgR3Vlc3RMQU4gIGRvZXMgb25seSBkZWxpdmVyIGFsbCB6ZXJvcyBvbiBxdWVyeSBhcnAsCi0JICogZXZlbiB0aG91Z2ggYXJwIHByb2Nlc3NpbmcgaXMgc3VwcG9ydGVkIChhY2NvcmRpbmcgdG8gSVBBIHN1cHAuCi0JICogZnVuY3MgZmxhZ3MpOyBzaW5jZSBhbGwgemVyb3MgaXMgbm8gdmFsdWVhYmxlIGluZm9ybWF0aW9uLAotCSAqIHdlIHNheSBFT1BOT1RTVVBQIGZvciBhbGwgQVJQIGZ1bmN0aW9ucworCSAqIGN1cnJlbnRseSBHdWVzdExBTiBvbmx5IHN1cHBvcnRzIHRoZSBBUlAgYXNzaXN0IGZ1bmN0aW9uCisJICogSVBBX0NNRF9BU1NfQVJQX1FVRVJZX0lORk8sIGJ1dCBub3QgSVBBX0NNRF9BU1NfQVJQX0FERF9FTlRSWTsKKwkgKiB0aHVzIHdlIHNheSBFT1BOT1RTVVBQIGZvciB0aGlzIEFSUCBmdW5jdGlvbgogCSAqLwogCWlmIChjYXJkLT5pbmZvLmd1ZXN0bGFuKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC00OTM3LDEwICs0OTI3LDkgQEAKIAlRRVRIX0RCRl9URVhUKHRyYWNlLDMsImFycHJtZW50Iik7CiAKIAkvKgotCSAqIGN1cnJlbnRseSBHdWVzdExBTiAgZG9lcyBvbmx5IGRlbGl2ZXIgYWxsIHplcm9zIG9uIHF1ZXJ5IGFycCwKLQkgKiBldmVuIHRob3VnaCBhcnAgcHJvY2Vzc2luZyBpcyBzdXBwb3J0ZWQgKGFjY29yZGluZyB0byBJUEEgc3VwcC4KLQkgKiBmdW5jcyBmbGFncyk7IHNpbmNlIGFsbCB6ZXJvcyBpcyBubyB2YWx1ZWFibGUgaW5mb3JtYXRpb24sCi0JICogd2Ugc2F5IEVPUE5PVFNVUFAgZm9yIGFsbCBBUlAgZnVuY3Rpb25zCisJICogY3VycmVudGx5IEd1ZXN0TEFOIG9ubHkgc3VwcG9ydHMgdGhlIEFSUCBhc3Npc3QgZnVuY3Rpb24KKwkgKiBJUEFfQ01EX0FTU19BUlBfUVVFUllfSU5GTywgYnV0IG5vdCBJUEFfQ01EX0FTU19BUlBfUkVNT1ZFX0VOVFJZOworCSAqIHRodXMgd2Ugc2F5IEVPUE5PVFNVUFAgZm9yIHRoaXMgQVJQIGZ1bmN0aW9uCiAJICovCiAJaWYgKGNhcmQtPmluZm8uZ3Vlc3RsYW4pCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTQ5NzgsMTEgKzQ5NjcsMTAgQEAKIAlRRVRIX0RCRl9URVhUKHRyYWNlLDMsImFycGZsdXNoIik7CiAKIAkvKgotCSAqIGN1cnJlbnRseSBHdWVzdExBTiAgZG9lcyBvbmx5IGRlbGl2ZXIgYWxsIHplcm9zIG9uIHF1ZXJ5IGFycCwKLQkgKiBldmVuIHRob3VnaCBhcnAgcHJvY2Vzc2luZyBpcyBzdXBwb3J0ZWQgKGFjY29yZGluZyB0byBJUEEgc3VwcC4KLQkgKiBmdW5jcyBmbGFncyk7IHNpbmNlIGFsbCB6ZXJvcyBpcyBubyB2YWx1ZWFibGUgaW5mb3JtYXRpb24sCi0JICogd2Ugc2F5IEVPUE5PVFNVUFAgZm9yIGFsbCBBUlAgZnVuY3Rpb25zCi0JICovCisJICogY3VycmVudGx5IEd1ZXN0TEFOIG9ubHkgc3VwcG9ydHMgdGhlIEFSUCBhc3Npc3QgZnVuY3Rpb24KKwkgKiBJUEFfQ01EX0FTU19BUlBfUVVFUllfSU5GTywgYnV0IG5vdCBJUEFfQ01EX0FTU19BUlBfRkxVU0hfQ0FDSEU7CisJICogdGh1cyB3ZSBzYXkgRU9QTk9UU1VQUCBmb3IgdGhpcyBBUlAgZnVuY3Rpb24KKwkqLwogCWlmIChjYXJkLT5pbmZvLmd1ZXN0bGFuIHx8IChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCxJUEFfQVJQX1BST0NFU1NJTkcpKSB7CkBAIC01MjA2LDcgKzUxOTQsNyBAQAogCWlmICghY2FyZC0+dmxhbmdycCkKIAkJcmV0dXJuOwogCXJjdV9yZWFkX2xvY2soKTsKLQlpbl9kZXYgPSBfX2luX2Rldl9nZXQoY2FyZC0+dmxhbmdycC0+dmxhbl9kZXZpY2VzW3ZpZF0pOworCWluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoY2FyZC0+dmxhbmdycC0+dmxhbl9kZXZpY2VzW3ZpZF0pOwogCWlmICghaW5fZGV2KQogCQlnb3RvIG91dDsKIAlmb3IgKGlmYSA9IGluX2Rldi0+aWZhX2xpc3Q7IGlmYTsgaWZhID0gaWZhLT5pZmFfbmV4dCkgewpAQCAtNjQ3Niw2ICs2NDY0LDkgQEAKIAlpZiAoY21kLT5oZHIucHJvdF92ZXJzaW9uID09IFFFVEhfUFJPVF9JUFY0KSB7CiAJCWNhcmQtPm9wdGlvbnMuaXBhNC5zdXBwb3J0ZWRfZnVuY3MgPSBjbWQtPmhkci5pcGFfc3VwcG9ydGVkOwogCQljYXJkLT5vcHRpb25zLmlwYTQuZW5hYmxlZF9mdW5jcyA9IGNtZC0+aGRyLmlwYV9lbmFibGVkOworCQkvKiBEaXNhYmxlIElQVjYgc3VwcG9ydCBoYXJkIGNvZGVkIGZvciBIaXBlcnNvY2tldHMgKi8KKwkJaWYoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkKKwkJCWNhcmQtPm9wdGlvbnMuaXBhNC5zdXBwb3J0ZWRfZnVuY3MgJj0gfklQQV9JUFY2OwogCX0gZWxzZSB7CiAjaWZkZWYgQ09ORklHX1FFVEhfSVBWNgogCQljYXJkLT5vcHRpb25zLmlwYTYuc3VwcG9ydGVkX2Z1bmNzID0gY21kLT5oZHIuaXBhX3N1cHBvcnRlZDsKQEAgLTcwMzgsMTQgKzcwMjksMTYgQEAKIH0KIAogaW50Ci1xZXRoX3NldF9sYXJnZV9zZW5kKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCitxZXRoX3NldF9sYXJnZV9zZW5kKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGVudW0gcWV0aF9sYXJnZV9zZW5kX3R5cGVzIHR5cGUpCiB7CiAJaW50IHJjID0gMDsKIAotCWlmIChjYXJkLT5kZXYgPT0gTlVMTCkKKwlpZiAoY2FyZC0+ZGV2ID09IE5VTEwpIHsKKwkJY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gdHlwZTsKIAkJcmV0dXJuIDA7Ci0KKwl9CiAJbmV0aWZfc3RvcF9xdWV1ZShjYXJkLT5kZXYpOworCWNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9IHR5cGU7CiAJc3dpdGNoIChjYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQpIHsKIAljYXNlIFFFVEhfTEFSR0VfU0VORF9FRERQOgogCQljYXJkLT5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9TRzsKQEAgLTcwNjYsNyArNzA1OSw2IEBACiAJCWNhcmQtPmRldi0+ZmVhdHVyZXMgJj0gfihORVRJRl9GX1RTTyB8IE5FVElGX0ZfU0cpOwogCQlicmVhazsKIAl9Ci0KIAluZXRpZl93YWtlX3F1ZXVlKGNhcmQtPmRldik7CiAJcmV0dXJuIHJjOwogfQpAQCAtNzczMCw3ICs3NzIyLDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JaW5fZGV2ID0gcmN1X2RlcmVmZXJlbmNlKF9faW5fZGV2X2dldChkZXYpKTsKKwlpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7CiAJaWYgKGluX2RldiA9PSBOVUxMKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTgyNTcsNyArODI0OSw2IEBACiB7CiAJaW50IHJjPTA7CiAKLQlxZXRoX2V5ZWNhdGNoZXIoKTsKIAlQUklOVF9JTkZPKCJsb2FkaW5nICVzICglcy8lcy8lcy8lcy8lcy8lcy8lcyAlcyAlcylcbiIsCiAJCSAgIHZlcnNpb24sIFZFUlNJT05fUUVUSF9DLCBWRVJTSU9OX1FFVEhfSCwKIAkJICAgVkVSU0lPTl9RRVRIX01QQ19ILCBWRVJTSU9OX1FFVEhfTVBDX0MsCkBAIC04MzM4LDcgKzgzMjksNiBAQAogCXByaW50aygicWV0aDogcmVtb3ZlZFxuIik7CiB9CiAKLUVYUE9SVF9TWU1CT0wocWV0aF9leWVjYXRjaGVyKTsKIG1vZHVsZV9pbml0KHFldGhfaW5pdCk7CiBtb2R1bGVfZXhpdChxZXRoX2V4aXQpOwogTU9EVUxFX0FVVEhPUigiRnJhbmsgUGF2bGljIDxwYXZsaWNAZGUuaWJtLmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9zeXMuYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9zeXMuYwppbmRleCA5OGJlZGIwLi5kZGExMDViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfc3lzLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX3N5cy5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqCi0gKiBsaW51eC9kcml2ZXJzL3MzOTAvbmV0L3FldGhfc3lzLmMgKCRSZXZpc2lvbjogMS41MSAkKQorICogbGludXgvZHJpdmVycy9zMzkwL25ldC9xZXRoX3N5cy5jICgkUmV2aXNpb246IDEuNTQgJCkKICAqCiAgKiBMaW51eCBvbiB6U2VyaWVzIE9TQSBFeHByZXNzIGFuZCBIaXBlclNvY2tldHMgc3VwcG9ydAogICogVGhpcyBmaWxlIGNvbnRhaW5zIGNvZGUgcmVsYXRlZCB0byBzeXNmcy4KQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJxZXRoX21wYy5oIgogI2luY2x1ZGUgInFldGhfZnMuaCIKIAotY29uc3QgY2hhciAqVkVSU0lPTl9RRVRIX1NZU19DID0gIiRSZXZpc2lvbjogMS41MSAkIjsKK2NvbnN0IGNoYXIgKlZFUlNJT05fUUVUSF9TWVNfQyA9ICIkUmV2aXNpb246IDEuNTQgJCI7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTcyMiwxMCArNzIyLDEzIEBACiAKIAlpZiAoIWNhcmQpCiAJCXJldHVybiAtRUlOVkFMOworCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKSB7CisgICAgICAgICAgICAgICAgUFJJTlRfV0FSTigiTGF5ZXIyIG9uIEhpcGVyc29ja2V0cyBpcyBub3Qgc3VwcG9ydGVkISBcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiAtRVBFUk07CisgICAgICAgIH0KIAogCWlmICgoKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfRE9XTikgJiYKLQkgICAgIChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX1JFQ09WRVIpKSB8fAotCSAgICAoY2FyZC0+aW5mby50eXBlICE9IFFFVEhfQ0FSRF9UWVBFX09TQUUpKQorCSAgICAgKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfUkVDT1ZFUikpKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJaSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJnRtcCwgMTYpOwpAQCAtNzcxLDkgKzc3NCw3IEBACiAKIAlpZiAoIWNhcmQpCiAJCXJldHVybiAtRUlOVkFMOwotCiAJdG1wID0gc3Ryc2VwKChjaGFyICoqKSAmYnVmLCAiXG4iKTsKLQogCWlmICghc3RyY21wKHRtcCwgIm5vIikpewogCQl0eXBlID0gUUVUSF9MQVJHRV9TRU5EX05POwogCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJFRERQIikpIHsKQEAgLTc4NiwxMCArNzg3LDggQEAKIAl9CiAJaWYgKGNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9PSB0eXBlKQogCQlyZXR1cm4gY291bnQ7Ci0JY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gdHlwZTsKLQlpZiAoKHJjID0gcWV0aF9zZXRfbGFyZ2Vfc2VuZChjYXJkKSkpCisJaWYgKChyYyA9IHFldGhfc2V0X2xhcmdlX3NlbmQoY2FyZCwgdHlwZSkpKQkKIAkJcmV0dXJuIHJjOwotCiAJcmV0dXJuIGNvdW50OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS9NYWtlZmlsZSBiL2RyaXZlcnMvczM5MC9zY3NpL01ha2VmaWxlCmluZGV4IGZjMTQ1MzAuLmQ2YTc4ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogIwogCiB6ZmNwLW9ianMgOj0gemZjcF9hdXgubyB6ZmNwX2Njdy5vIHpmY3Bfc2NzaS5vIHpmY3BfZXJwLm8gemZjcF9xZGlvLm8gXAotCSAgICAgemZjcF9mc2YubyB6ZmNwX3N5c2ZzX2FkYXB0ZXIubyB6ZmNwX3N5c2ZzX3BvcnQubyBcCisJICAgICB6ZmNwX2ZzZi5vIHpmY3BfZGJmLm8gemZjcF9zeXNmc19hZGFwdGVyLm8gemZjcF9zeXNmc19wb3J0Lm8gXAogCSAgICAgemZjcF9zeXNmc191bml0Lm8gemZjcF9zeXNmc19kcml2ZXIubwogCiBvYmotJChDT05GSUdfWkZDUCkgKz0gemZjcC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYwppbmRleCBiZmUzYmE3Li5jYWIwOTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKQEAgLTEyMiw5NSArMTIyLDYgQEAKIAogI2RlZmluZSBaRkNQX0xPR19BUkVBCQkJWkZDUF9MT0dfQVJFQV9PVEhFUgogCi1zdGF0aWMgaW5saW5lIGludAotemZjcF9mc2ZfcmVxX2lzX3Njc2lfY21uZChzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQotewotCXJldHVybiAoKGZzZl9yZXEtPmZzZl9jb21tYW5kID09IEZTRl9RVENCX0ZDUF9DTU5EKSAmJgotCQkhKGZzZl9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9UQVNLX01BTkFHRU1FTlQpKTsKLX0KLQotdm9pZAotemZjcF9jbWRfZGJmX2V2ZW50X2ZzZihjb25zdCBjaGFyICp0ZXh0LCBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxLAotCQkgICAgICAgdm9pZCAqYWRkX2RhdGEsIGludCBhZGRfbGVuZ3RoKQotewotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBmc2ZfcmVxLT5hZGFwdGVyOwotCXN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21uZDsKLQlpbnQgbGV2ZWwgPSAzOwotCWludCBpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+ZGJmX2xvY2ssIGZsYWdzKTsKLQlpZiAoemZjcF9mc2ZfcmVxX2lzX3Njc2lfY21uZChmc2ZfcmVxKSkgewotCQlzY3NpX2NtbmQgPSBmc2ZfcmVxLT5kYXRhLnNlbmRfZmNwX2NvbW1hbmRfdGFzay5zY3NpX2NtbmQ7Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+Y21kX2RiZiwgbGV2ZWwsICJmc2ZlcnJvciIpOwotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmNtZF9kYmYsIGxldmVsLCB0ZXh0KTsKLQkJZGVidWdfZXZlbnQoYWRhcHRlci0+Y21kX2RiZiwgbGV2ZWwsICZmc2ZfcmVxLAotCQkJICAgIHNpemVvZiAodW5zaWduZWQgbG9uZykpOwotCQlkZWJ1Z19ldmVudChhZGFwdGVyLT5jbWRfZGJmLCBsZXZlbCwgJmZzZl9yZXEtPnNlcV9ubywKLQkJCSAgICBzaXplb2YgKHUzMikpOwotCQlkZWJ1Z19ldmVudChhZGFwdGVyLT5jbWRfZGJmLCBsZXZlbCwgJnNjc2lfY21uZCwKLQkJCSAgICBzaXplb2YgKHVuc2lnbmVkIGxvbmcpKTsKLQkJZGVidWdfZXZlbnQoYWRhcHRlci0+Y21kX2RiZiwgbGV2ZWwsICZzY3NpX2NtbmQtPmNtbmQsCi0JCQkgICAgbWluKFpGQ1BfQ01EX0RCRl9MRU5HVEgsIChpbnQpc2NzaV9jbW5kLT5jbWRfbGVuKSk7Ci0JCWZvciAoaSA9IDA7IGkgPCBhZGRfbGVuZ3RoOyBpICs9IFpGQ1BfQ01EX0RCRl9MRU5HVEgpCi0JCQlkZWJ1Z19ldmVudChhZGFwdGVyLT5jbWRfZGJmLAotCQkJCSAgICBsZXZlbCwKLQkJCQkgICAgKGNoYXIgKikgYWRkX2RhdGEgKyBpLAotCQkJCSAgICBtaW4oWkZDUF9DTURfREJGX0xFTkdUSCwgYWRkX2xlbmd0aCAtIGkpKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+ZGJmX2xvY2ssIGZsYWdzKTsKLX0KLQotLyogWFhYIGFkZGl0aW9uYWxseSBsb2cgdW5pdCBpZiBhdmFpbGFibGUgKi8KLS8qIC0tLT4gaW50cm9kdWNlIG5ldyBwYXJhbWV0ZXIgZm9yIHVuaXQsIHNlZSAyLjQgY29kZSAqLwotdm9pZAotemZjcF9jbWRfZGJmX2V2ZW50X3Njc2koY29uc3QgY2hhciAqdGV4dCwgc3RydWN0IHNjc2lfY21uZCAqc2NzaV9jbW5kKQotewotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXI7Ci0JdW5pb24gemZjcF9yZXFfZGF0YSAqcmVxX2RhdGE7Ci0Jc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcTsKLQlpbnQgbGV2ZWwgPSAoKGhvc3RfYnl0ZShzY3NpX2NtbmQtPnJlc3VsdCkgIT0gMCkgPyAxIDogNSk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWFkYXB0ZXIgPSAoc3RydWN0IHpmY3BfYWRhcHRlciAqKSBzY3NpX2NtbmQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF07Ci0JcmVxX2RhdGEgPSAodW5pb24gemZjcF9yZXFfZGF0YSAqKSBzY3NpX2NtbmQtPmhvc3Rfc2NyaWJibGU7Ci0JZnNmX3JlcSA9IChyZXFfZGF0YSA/IHJlcV9kYXRhLT5zZW5kX2ZjcF9jb21tYW5kX3Rhc2suZnNmX3JlcSA6IE5VTEwpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5kYmZfbG9jaywgZmxhZ3MpOwotCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+Y21kX2RiZiwgbGV2ZWwsICJob3N0Ynl0ZSIpOwotCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+Y21kX2RiZiwgbGV2ZWwsIHRleHQpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmNtZF9kYmYsIGxldmVsLCAmc2NzaV9jbW5kLT5yZXN1bHQsIHNpemVvZiAodTMyKSk7Ci0JZGVidWdfZXZlbnQoYWRhcHRlci0+Y21kX2RiZiwgbGV2ZWwsICZzY3NpX2NtbmQsCi0JCSAgICBzaXplb2YgKHVuc2lnbmVkIGxvbmcpKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5jbWRfZGJmLCBsZXZlbCwgJnNjc2lfY21uZC0+Y21uZCwKLQkJICAgIG1pbihaRkNQX0NNRF9EQkZfTEVOR1RILCAoaW50KXNjc2lfY21uZC0+Y21kX2xlbikpOwotCWlmIChsaWtlbHkoZnNmX3JlcSkpIHsKLQkJZGVidWdfZXZlbnQoYWRhcHRlci0+Y21kX2RiZiwgbGV2ZWwsICZmc2ZfcmVxLAotCQkJICAgIHNpemVvZiAodW5zaWduZWQgbG9uZykpOwotCQlkZWJ1Z19ldmVudChhZGFwdGVyLT5jbWRfZGJmLCBsZXZlbCwgJmZzZl9yZXEtPnNlcV9ubywKLQkJCSAgICBzaXplb2YgKHUzMikpOwotCX0gZWxzZSB7Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+Y21kX2RiZiwgbGV2ZWwsICIiKTsKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5jbWRfZGJmLCBsZXZlbCwgIiIpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5kYmZfbG9jaywgZmxhZ3MpOwotfQotCi12b2lkCi16ZmNwX2luX2Vsc19kYmZfZXZlbnQoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwgY29uc3QgY2hhciAqdGV4dCwKLQkJICAgICAgc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIgKnN0YXR1c19idWZmZXIsIGludCBsZW5ndGgpCi17Ci0JaW50IGxldmVsID0gMTsKLQlpbnQgaTsKLQotCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+aW5fZWxzX2RiZiwgbGV2ZWwsIHRleHQpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmluX2Vsc19kYmYsIGxldmVsLCAmc3RhdHVzX2J1ZmZlci0+ZF9pZCwgOCk7Ci0JZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSArPSBaRkNQX0lOX0VMU19EQkZfTEVOR1RIKQotCQlkZWJ1Z19ldmVudChhZGFwdGVyLT5pbl9lbHNfZGJmLAotCQkJICAgIGxldmVsLAotCQkJICAgIChjaGFyICopIHN0YXR1c19idWZmZXItPnBheWxvYWQgKyBpLAotCQkJICAgIG1pbihaRkNQX0lOX0VMU19EQkZfTEVOR1RILCBsZW5ndGggLSBpKSk7Ci19Ci0KIC8qKgogICogemZjcF9kZXZpY2Vfc2V0dXAgLSBzZXR1cCBmdW5jdGlvbgogICogQHN0cjogcG9pbnRlciB0byBwYXJhbWV0ZXIgc3RyaW5nCkBAIC05MjIsNyArODMzLDcgQEAKIH0KIAogc3RhdGljIHZvaWQgKgotemZjcF9tZW1wb29sX2FsbG9jKHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaywgdm9pZCAqc2l6ZSkKK3pmY3BfbWVtcG9vbF9hbGxvYyhnZnBfdCBnZnBfbWFzaywgdm9pZCAqc2l6ZSkKIHsKIAlyZXR1cm4ga21hbGxvYygoc2l6ZV90KSBzaXplLCBnZnBfbWFzayk7CiB9CkBAIC0xMDE3LDgxICs5MjgsNiBAQAogCQltZW1wb29sX2Rlc3Ryb3koYWRhcHRlci0+cG9vbC5kYXRhX2dpZF9wbik7CiB9CiAKLS8qKgotICogemZjcF9hZGFwdGVyX2RlYnVnX3JlZ2lzdGVyIC0gcmVnaXN0ZXJzIGRlYnVnIGZlYXR1cmUgZm9yIGFuIGFkYXB0ZXIKLSAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIGFkYXB0ZXIgZm9yIHdoaWNoIGRlYnVnIGZlYXR1cmVzIHNob3VsZCBiZSByZWdpc3RlcmVkCi0gKiByZXR1cm46IC1FTk9NRU0gb24gZXJyb3IsIDAgb3RoZXJ3aXNlCi0gKi8KLWludAotemZjcF9hZGFwdGVyX2RlYnVnX3JlZ2lzdGVyKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JY2hhciBkYmZfbmFtZVsyMF07Ci0KLQkvKiBkZWJ1ZyBmZWF0dXJlIGFyZWEgd2hpY2ggcmVjb3JkcyBTQ1NJIGNvbW1hbmQgZmFpbHVyZXMgKGhvc3RieXRlKSAqLwotCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5kYmZfbG9jayk7Ci0KLQlzcHJpbnRmKGRiZl9uYW1lLCBaRkNQX0NNRF9EQkZfTkFNRSAiJXMiLAotCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKLQlhZGFwdGVyLT5jbWRfZGJmID0gZGVidWdfcmVnaXN0ZXIoZGJmX25hbWUsIFpGQ1BfQ01EX0RCRl9JTkRFWCwKLQkJCQkJICBaRkNQX0NNRF9EQkZfQVJFQVMsCi0JCQkJCSAgWkZDUF9DTURfREJGX0xFTkdUSCk7Ci0JZGVidWdfcmVnaXN0ZXJfdmlldyhhZGFwdGVyLT5jbWRfZGJmLCAmZGVidWdfaGV4X2FzY2lpX3ZpZXcpOwotCWRlYnVnX3NldF9sZXZlbChhZGFwdGVyLT5jbWRfZGJmLCBaRkNQX0NNRF9EQkZfTEVWRUwpOwotCi0JLyogZGVidWcgZmVhdHVyZSBhcmVhIHdoaWNoIHJlY29yZHMgU0NTSSBjb21tYW5kIGFib3J0cyAqLwotCXNwcmludGYoZGJmX25hbWUsIFpGQ1BfQUJPUlRfREJGX05BTUUgIiVzIiwKLQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7Ci0JYWRhcHRlci0+YWJvcnRfZGJmID0gZGVidWdfcmVnaXN0ZXIoZGJmX25hbWUsIFpGQ1BfQUJPUlRfREJGX0lOREVYLAotCQkJCQkgICAgWkZDUF9BQk9SVF9EQkZfQVJFQVMsCi0JCQkJCSAgICBaRkNQX0FCT1JUX0RCRl9MRU5HVEgpOwotCWRlYnVnX3JlZ2lzdGVyX3ZpZXcoYWRhcHRlci0+YWJvcnRfZGJmLCAmZGVidWdfaGV4X2FzY2lpX3ZpZXcpOwotCWRlYnVnX3NldF9sZXZlbChhZGFwdGVyLT5hYm9ydF9kYmYsIFpGQ1BfQUJPUlRfREJGX0xFVkVMKTsKLQotCS8qIGRlYnVnIGZlYXR1cmUgYXJlYSB3aGljaCByZWNvcmRzIGluY29taW5nIEVMUyBjb21tYW5kcyAqLwotCXNwcmludGYoZGJmX25hbWUsIFpGQ1BfSU5fRUxTX0RCRl9OQU1FICIlcyIsCi0JCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwotCWFkYXB0ZXItPmluX2Vsc19kYmYgPSBkZWJ1Z19yZWdpc3RlcihkYmZfbmFtZSwgWkZDUF9JTl9FTFNfREJGX0lOREVYLAotCQkJCQkgICAgIFpGQ1BfSU5fRUxTX0RCRl9BUkVBUywKLQkJCQkJICAgICBaRkNQX0lOX0VMU19EQkZfTEVOR1RIKTsKLQlkZWJ1Z19yZWdpc3Rlcl92aWV3KGFkYXB0ZXItPmluX2Vsc19kYmYsICZkZWJ1Z19oZXhfYXNjaWlfdmlldyk7Ci0JZGVidWdfc2V0X2xldmVsKGFkYXB0ZXItPmluX2Vsc19kYmYsIFpGQ1BfSU5fRUxTX0RCRl9MRVZFTCk7Ci0KLQkvKiBkZWJ1ZyBmZWF0dXJlIGFyZWEgd2hpY2ggcmVjb3JkcyBlcnAgZXZlbnRzICovCi0Jc3ByaW50ZihkYmZfbmFtZSwgWkZDUF9FUlBfREJGX05BTUUgIiVzIiwKLQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7Ci0JYWRhcHRlci0+ZXJwX2RiZiA9IGRlYnVnX3JlZ2lzdGVyKGRiZl9uYW1lLCBaRkNQX0VSUF9EQkZfSU5ERVgsCi0JCQkJCSAgWkZDUF9FUlBfREJGX0FSRUFTLAotCQkJCQkgIFpGQ1BfRVJQX0RCRl9MRU5HVEgpOwotCWRlYnVnX3JlZ2lzdGVyX3ZpZXcoYWRhcHRlci0+ZXJwX2RiZiwgJmRlYnVnX2hleF9hc2NpaV92aWV3KTsKLQlkZWJ1Z19zZXRfbGV2ZWwoYWRhcHRlci0+ZXJwX2RiZiwgWkZDUF9FUlBfREJGX0xFVkVMKTsKLQotCWlmICghKGFkYXB0ZXItPmNtZF9kYmYgJiYgYWRhcHRlci0+YWJvcnRfZGJmICYmCi0JICAgICAgYWRhcHRlci0+aW5fZWxzX2RiZiAmJiBhZGFwdGVyLT5lcnBfZGJmKSkgewotCQl6ZmNwX2FkYXB0ZXJfZGVidWdfdW5yZWdpc3RlcihhZGFwdGVyKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLX0KLQotLyoqCi0gKiB6ZmNwX2FkYXB0ZXJfZGVidWdfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXJzIGRlYnVnIGZlYXR1cmUgZm9yIGFuIGFkYXB0ZXIKLSAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIGFkYXB0ZXIgZm9yIHdoaWNoIGRlYnVnIGZlYXR1cmVzIHNob3VsZCBiZSB1bnJlZ2lzdGVyZWQKLSAqLwotdm9pZAotemZjcF9hZGFwdGVyX2RlYnVnX3VucmVnaXN0ZXIoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKLXsKLSAJZGVidWdfdW5yZWdpc3RlcihhZGFwdGVyLT5hYm9ydF9kYmYpOwotIAlkZWJ1Z191bnJlZ2lzdGVyKGFkYXB0ZXItPmNtZF9kYmYpOwotIAlkZWJ1Z191bnJlZ2lzdGVyKGFkYXB0ZXItPmVycF9kYmYpOwotIAlkZWJ1Z191bnJlZ2lzdGVyKGFkYXB0ZXItPmluX2Vsc19kYmYpOwotCWFkYXB0ZXItPmFib3J0X2RiZiA9IE5VTEw7Ci0JYWRhcHRlci0+Y21kX2RiZiA9IE5VTEw7Ci0JYWRhcHRlci0+ZXJwX2RiZiA9IE5VTEw7Ci0JYWRhcHRlci0+aW5fZWxzX2RiZiA9IE5VTEw7Ci19Ci0KIHZvaWQKIHpmY3BfZHVtbXlfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC0xNDYyLDEwICsxMjk4LDYgQEAKIAkvKiBzZWUgRkMtRlMgKi8KIAlub19lbnRyaWVzID0gKGZjcF9yc2NuX2hlYWQtPnBheWxvYWRfbGVuIC8gNCk7CiAKLQl6ZmNwX2luX2Vsc19kYmZfZXZlbnQoYWRhcHRlciwgIiMjcnNjbiIsIHN0YXR1c19idWZmZXIsCi0JCQkgICAgICBmY3BfcnNjbl9oZWFkLT5wYXlsb2FkX2xlbik7Ci0KLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDEsICJ1bnNvbF9lbHNfcnNjbjoiKTsKIAlmb3IgKGkgPSAxOyBpIDwgbm9fZW50cmllczsgaSsrKSB7CiAJCS8qIHNraXAgaGVhZCBhbmQgc3RhcnQgd2l0aCAxc3QgZWxlbWVudCAqLwogCQlmY3BfcnNjbl9lbGVtZW50Kys7CkBAIC0xNDk3LDggKzEzMjksNiBAQAogCQkJICAgIChaRkNQX1NUQVRVU19QT1JUX0RJRF9ESUQsICZwb3J0LT5zdGF0dXMpKSB7CiAJCQkJWkZDUF9MT0dfSU5GTygiaW5jb21pbmcgUlNDTiwgdHJ5aW5nIHRvIG9wZW4gIgogCQkJCQkgICAgICAicG9ydCAweCUwMTZMeFxuIiwgcG9ydC0+d3dwbik7Ci0JCQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAxLAotCQkJCQkJICJ1bnNvbF9lbHNfcnNjbnU6Iik7CiAJCQkJemZjcF9lcnBfcG9ydF9yZW9wZW4ocG9ydCwKIAkJCQkJCSAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQpOwogCQkJCWNvbnRpbnVlOwpAQCAtMTUyNCw4ICsxMzU0LDYgQEAKIAkJCQkgKi8KIAkJCQlaRkNQX0xPR19JTkZPKCJpbmNvbWluZyBSU0NOLCB0cnlpbmcgdG8gb3BlbiAiCiAJCQkJCSAgICAgICJwb3J0IDB4JTAxNkx4XG4iLCBwb3J0LT53d3BuKTsKLQkJCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDEsCi0JCQkJCQkgInVuc29sX2Vsc19yc2NuazoiKTsKIAkJCQl6ZmNwX3Rlc3RfbGluayhwb3J0KTsKIAkJCX0KIAkJfQpAQCAtMTU0MSw4ICsxMzY5LDYgQEAKIAlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQl6ZmNwX2luX2Vsc19kYmZfZXZlbnQoYWRhcHRlciwgIiMjcGxvZ2kiLCBzdGF0dXNfYnVmZmVyLCAyOCk7Ci0KIAlyZWFkX2xvY2tfaXJxc2F2ZSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCAmYWRhcHRlci0+cG9ydF9saXN0X2hlYWQsIGxpc3QpIHsKIAkJaWYgKHBvcnQtPnd3cG4gPT0gKCood3duX3QgKikgJiBlbHNfbG9naS0+bnBvcnRfd3duKSkKQEAgLTE1NTYsOCArMTM4Miw2IEBACiAJCQkgICAgICAgc3RhdHVzX2J1ZmZlci0+ZF9pZCwKIAkJCSAgICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKIAl9IGVsc2UgewotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDEsICJ1bnNvbF9lbHNfcGxvZ2k6Iik7Ci0JCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDEsICZlbHNfbG9naS0+bnBvcnRfd3duLCA4KTsKIAkJemZjcF9lcnBfcG9ydF9mb3JjZWRfcmVvcGVuKHBvcnQsIDApOwogCX0KIH0KQEAgLTE1NzAsOCArMTM5NCw2IEBACiAJc3RydWN0IHpmY3BfcG9ydCAqcG9ydDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JemZjcF9pbl9lbHNfZGJmX2V2ZW50KGFkYXB0ZXIsICIjI2xvZ28iLCBzdGF0dXNfYnVmZmVyLCAxNik7Ci0KIAlyZWFkX2xvY2tfaXJxc2F2ZSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCAmYWRhcHRlci0+cG9ydF9saXN0X2hlYWQsIGxpc3QpIHsKIAkJaWYgKHBvcnQtPnd3cG4gPT0gZWxzX2xvZ28tPm5wb3J0X3d3cG4pCkBAIC0xNTg1LDggKzE0MDcsNiBAQAogCQkJICAgICAgIHN0YXR1c19idWZmZXItPmRfaWQsCiAJCQkgICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CiAJfSBlbHNlIHsKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAxLCAidW5zb2xfZWxzX2xvZ286Iik7Ci0JCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDEsICZlbHNfbG9nby0+bnBvcnRfd3dwbiwgOCk7CiAJCXpmY3BfZXJwX3BvcnRfZm9yY2VkX3Jlb3Blbihwb3J0LCAwKTsKIAl9CiB9CkBAIC0xNTk1LDcgKzE0MTUsNiBAQAogemZjcF9mc2ZfaW5jb21pbmdfZWxzX3Vua25vd24oc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKIAkJCSAgICAgIHN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyICpzdGF0dXNfYnVmZmVyKQogewotCXpmY3BfaW5fZWxzX2RiZl9ldmVudChhZGFwdGVyLCAiIyN1bmRlZiIsIHN0YXR1c19idWZmZXIsIDI0KTsKIAlaRkNQX0xPR19OT1JNQUwoIndhcm5pbmc6IHVua25vd24gaW5jb21pbmcgRUxTIDB4JTA4eCAiCiAJCQkiZm9yIGFkYXB0ZXIgJXNcbiIsICoodTMyICopIChzdGF0dXNfYnVmZmVyLT5wYXlsb2FkKSwKIAkJCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwpAQCAtMTYwOSwxMCArMTQyOCwxMSBAQAogCXUzMiBlbHNfdHlwZTsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyOwogCi0Jc3RhdHVzX2J1ZmZlciA9IGZzZl9yZXEtPmRhdGEuc3RhdHVzX3JlYWQuYnVmZmVyOworCXN0YXR1c19idWZmZXIgPSAoc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIgKikgZnNmX3JlcS0+ZGF0YTsKIAllbHNfdHlwZSA9ICoodTMyICopIChzdGF0dXNfYnVmZmVyLT5wYXlsb2FkKTsKIAlhZGFwdGVyID0gZnNmX3JlcS0+YWRhcHRlcjsKIAorCXpmY3Bfc2FuX2RiZl9ldmVudF9pbmNvbWluZ19lbHMoZnNmX3JlcSk7CiAJaWYgKGVsc190eXBlID09IExTX1BMT0dJKQogCQl6ZmNwX2ZzZl9pbmNvbWluZ19lbHNfcGxvZ2koYWRhcHRlciwgc3RhdHVzX2J1ZmZlcik7CiAJZWxzZSBpZiAoZWxzX3R5cGUgPT0gTFNfTE9HTykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jCmluZGV4IGIzMGFiYWIuLjBmYzQ2MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYwpAQCAtMjAyLDE5ICsyMDIsOSBAQAogemZjcF9jY3dfc2V0X29mZmxpbmUoc3RydWN0IGNjd19kZXZpY2UgKmNjd19kZXZpY2UpCiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcjsKLQlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0OwotCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQ7CiAKIAlkb3duKCZ6ZmNwX2RhdGEuY29uZmlnX3NlbWEpOwogCWFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoJmNjd19kZXZpY2UtPmRldik7Ci0JLyogbWlnaHQgYmUgcmFjeSwgYnV0IHdlIGNhbm5vdCB0YWtlIGNvbmZpZ19sb2NrIGR1ZSB0byB0aGUgZmFjdCB0aGF0Ci0JICAgZmNfcmVtb3RlX3BvcnRfZGVsZXRlIG1pZ2h0IHNsZWVwICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCAmYWRhcHRlci0+cG9ydF9saXN0X2hlYWQsIGxpc3QpCi0JCWlmIChwb3J0LT5ycG9ydCkgewotCQkJcnBvcnQgPSBwb3J0LT5ycG9ydDsKLQkJCXBvcnQtPnJwb3J0ID0gTlVMTDsKLQkJCWZjX3JlbW90ZV9wb3J0X2RlbGV0ZShycG9ydCk7Ci0JCX0KIAl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDApOwogCXpmY3BfZXJwX3dhaXQoYWRhcHRlcik7CiAJemZjcF9hZGFwdGVyX3Njc2lfdW5yZWdpc3RlcihhZGFwdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNmZiM2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5jCkBAIC0wLDAgKzEsOTk1IEBACisvKgorICoKKyAqIGxpbnV4L2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmMKKyAqCisgKiBGQ1AgYWRhcHRlciBkcml2ZXIgZm9yIElCTSBlU2VydmVyIHpTZXJpZXMKKyAqCisgKiBEZWJ1Z2dpbmcgZmFjaWxpdGllcworICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjZGVmaW5lIFpGQ1BfREJGX1JFVklTSU9OICIkUmV2aXNpb24kIgorCisjaW5jbHVkZSA8YXNtL2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlICJ6ZmNwX2V4dC5oIgorCitzdGF0aWMgdTMyIGRiZnNpemUgPSA0OworCittb2R1bGVfcGFyYW0oZGJmc2l6ZSwgdWludCwgMDQwMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRiZnNpemUsCisJCSAibnVtYmVyIG9mIHBhZ2VzIGZvciBlYWNoIGRlYnVnIGZlYXR1cmUgYXJlYSAoZGVmYXVsdCA0KSIpOworCisjZGVmaW5lIFpGQ1BfTE9HX0FSRUEJCQlaRkNQX0xPR19BUkVBX09USEVSCisKK3N0YXRpYyBpbmxpbmUgaW50Cit6ZmNwX2RiZl9zdGNrKGNoYXIgKm91dF9idWYsIGNvbnN0IGNoYXIgKmxhYmVsLCB1bnNpZ25lZCBsb25nIGxvbmcgc3RjaykKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgc2VjOworCXN0cnVjdCB0aW1lc3BlYyB4dGltZTsKKwlpbnQgbGVuID0gMDsKKworCXN0Y2sgLT0gMHg4MTI2ZDYwZTQ2MDAwMDAwTEwgLSAoMHgzYzI2NzAwTEwgKiAxMDAwMDAwICogNDA5Nik7CisJc2VjID0gc3RjayA+PiAxMjsKKwlkb19kaXYoc2VjLCAxMDAwMDAwKTsKKwl4dGltZS50dl9zZWMgPSBzZWM7CisJc3RjayAtPSAoc2VjICogMTAwMDAwMCkgPDwgMTI7CisJeHRpbWUudHZfbnNlYyA9ICgoc3RjayAqIDEwMDApID4+IDEyKTsKKwlsZW4gKz0gc3ByaW50ZihvdXRfYnVmICsgbGVuLCAiJS0yNHMlMDExbHU6JTA2bHVcbiIsCisJCSAgICAgICBsYWJlbCwgeHRpbWUudHZfc2VjLCB4dGltZS50dl9uc2VjKTsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQgemZjcF9kYmZfdGFnKGNoYXIgKm91dF9idWYsIGNvbnN0IGNoYXIgKmxhYmVsLCBjb25zdCBjaGFyICp0YWcpCit7CisJaW50IGxlbiA9IDAsIGk7CisKKwlsZW4gKz0gc3ByaW50ZihvdXRfYnVmICsgbGVuLCAiJS0yNHMiLCBsYWJlbCk7CisJZm9yIChpID0gMDsgaSA8IFpGQ1BfREJGX1RBR19TSVpFOyBpKyspCisJCWxlbiArPSBzcHJpbnRmKG91dF9idWYgKyBsZW4sICIlYyIsIHRhZ1tpXSk7CisJbGVuICs9IHNwcmludGYob3V0X2J1ZiArIGxlbiwgIlxuIik7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50Cit6ZmNwX2RiZl92aWV3KGNoYXIgKm91dF9idWYsIGNvbnN0IGNoYXIgKmxhYmVsLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKwl2YV9saXN0IGFyZzsKKwlpbnQgbGVuID0gMDsKKworCWxlbiArPSBzcHJpbnRmKG91dF9idWYgKyBsZW4sICIlLTI0cyIsIGxhYmVsKTsKKwl2YV9zdGFydChhcmcsIGZvcm1hdCk7CisJbGVuICs9IHZzcHJpbnRmKG91dF9idWYgKyBsZW4sIGZvcm1hdCwgYXJnKTsKKwl2YV9lbmQoYXJnKTsKKwlsZW4gKz0gc3ByaW50ZihvdXRfYnVmICsgbGVuLCAiXG4iKTsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQKK3pmY3BfZGJmX3ZpZXdfZHVtcChjaGFyICpvdXRfYnVmLCBjb25zdCBjaGFyICpsYWJlbCwKKwkJICAgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuLCBpbnQgb2Zmc2V0LCBpbnQgdG90YWxfc2l6ZSkKK3sKKwlpbnQgbGVuID0gMDsKKworCWlmIChvZmZzZXQgPT0gMCkKKwkJbGVuICs9IHNwcmludGYob3V0X2J1ZiArIGxlbiwgIiUtMjRzICAiLCBsYWJlbCk7CisKKwl3aGlsZSAoYnVmbGVuLS0pIHsKKwkJaWYgKG9mZnNldCA+IDApIHsKKwkJCWlmICgob2Zmc2V0ICUgMzIpID09IDApCisJCQkJbGVuICs9IHNwcmludGYob3V0X2J1ZiArIGxlbiwgIlxuJS0yNGMgICIsICcgJyk7CisJCQllbHNlIGlmICgob2Zmc2V0ICUgNCkgPT0gMCkKKwkJCQlsZW4gKz0gc3ByaW50ZihvdXRfYnVmICsgbGVuLCAiICIpOworCQl9CisJCWxlbiArPSBzcHJpbnRmKG91dF9idWYgKyBsZW4sICIlMDJ4IiwgKmJ1ZmZlcisrKTsKKwkJaWYgKCsrb2Zmc2V0ID09IHRvdGFsX3NpemUpIHsKKwkJCWxlbiArPSBzcHJpbnRmKG91dF9idWYgKyBsZW4sICJcbiIpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAodG90YWxfc2l6ZSA9PSAwKQorCQlsZW4gKz0gc3ByaW50ZihvdXRfYnVmICsgbGVuLCAiXG4iKTsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit6ZmNwX2RiZl92aWV3X2hlYWRlcihkZWJ1Z19pbmZvX3QgKiBpZCwgc3RydWN0IGRlYnVnX3ZpZXcgKnZpZXcsIGludCBhcmVhLAorCQkgICAgIGRlYnVnX2VudHJ5X3QgKiBlbnRyeSwgY2hhciAqb3V0X2J1ZikKK3sKKwlzdHJ1Y3QgemZjcF9kYmZfZHVtcCAqZHVtcCA9IChzdHJ1Y3QgemZjcF9kYmZfZHVtcCAqKURFQlVHX0RBVEEoZW50cnkpOworCWludCBsZW4gPSAwOworCisJaWYgKHN0cm5jbXAoZHVtcC0+dGFnLCAiZHVtcCIsIFpGQ1BfREJGX1RBR19TSVpFKSAhPSAwKSB7CisJCWxlbiArPSB6ZmNwX2RiZl9zdGNrKG91dF9idWYgKyBsZW4sICJ0aW1lc3RhbXAiLAorCQkJCSAgICAgZW50cnktPmlkLnN0Y2spOworCQlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAiY3B1IiwgIiUwMmkiLAorCQkJCSAgICAgZW50cnktPmlkLmZpZWxkcy5jcHVpZCk7CisJfSBlbHNlIHsKKwkJbGVuICs9IHpmY3BfZGJmX3ZpZXdfZHVtcChvdXRfYnVmICsgbGVuLCBOVUxMLAorCQkJCQkgIGR1bXAtPmRhdGEsCisJCQkJCSAgZHVtcC0+c2l6ZSwKKwkJCQkJICBkdW1wLT5vZmZzZXQsIGR1bXAtPnRvdGFsX3NpemUpOworCQlpZiAoKGR1bXAtPm9mZnNldCArIGR1bXAtPnNpemUpID09IGR1bXAtPnRvdGFsX3NpemUpCisJCQlsZW4gKz0gc3ByaW50ZihvdXRfYnVmICsgbGVuLCAiXG4iKTsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCitpbmxpbmUgdm9pZCB6ZmNwX2hiYV9kYmZfZXZlbnRfZnNmX3Jlc3BvbnNlKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCit7CisJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGZzZl9yZXEtPmFkYXB0ZXI7CisJc3RydWN0IGZzZl9xdGNiICpxdGNiID0gZnNmX3JlcS0+cXRjYjsKKwl1bmlvbiBmc2ZfcHJvdF9zdGF0dXNfcXVhbCAqcHJvdF9zdGF0dXNfcXVhbCA9CisJICAgICZxdGNiLT5wcmVmaXgucHJvdF9zdGF0dXNfcXVhbDsKKwl1bmlvbiBmc2Zfc3RhdHVzX3F1YWwgKmZzZl9zdGF0dXNfcXVhbCA9ICZxdGNiLT5oZWFkZXIuZnNmX3N0YXR1c19xdWFsOworCXN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21uZDsKKwlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0OworCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQ7CisJc3RydWN0IHpmY3Bfc2VuZF9lbHMgKnNlbmRfZWxzOworCXN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkICpyZWMgPSAmYWRhcHRlci0+aGJhX2RiZl9idWY7CisJc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmRfcmVzcG9uc2UgKnJlc3BvbnNlID0gJnJlYy0+dHlwZS5yZXNwb25zZTsKKwlpbnQgbGV2ZWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5oYmFfZGJmX2xvY2ssIGZsYWdzKTsKKwltZW1zZXQocmVjLCAwLCBzaXplb2Yoc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmQpKTsKKwlzdHJuY3B5KHJlYy0+dGFnLCAicmVzcCIsIFpGQ1BfREJGX1RBR19TSVpFKTsKKworCWlmICgocXRjYi0+cHJlZml4LnByb3Rfc3RhdHVzICE9IEZTRl9QUk9UX0dPT0QpICYmCisJICAgIChxdGNiLT5wcmVmaXgucHJvdF9zdGF0dXMgIT0gRlNGX1BST1RfRlNGX1NUQVRVU19QUkVTRU5URUQpKSB7CisJCXN0cm5jcHkocmVjLT50YWcyLCAicGVyciIsIFpGQ1BfREJGX1RBR19TSVpFKTsKKwkJbGV2ZWwgPSAxOworCX0gZWxzZSBpZiAocXRjYi0+aGVhZGVyLmZzZl9zdGF0dXMgIT0gRlNGX0dPT0QpIHsKKwkJc3RybmNweShyZWMtPnRhZzIsICJmZXJyIiwgWkZDUF9EQkZfVEFHX1NJWkUpOworCQlsZXZlbCA9IDE7CisJfSBlbHNlIGlmICgoZnNmX3JlcS0+ZnNmX2NvbW1hbmQgPT0gRlNGX1FUQ0JfT1BFTl9QT1JUX1dJVEhfRElEKSB8fAorCQkgICAoZnNmX3JlcS0+ZnNmX2NvbW1hbmQgPT0gRlNGX1FUQ0JfT1BFTl9MVU4pKSB7CisJCXN0cm5jcHkocmVjLT50YWcyLCAib3BlbiIsIFpGQ1BfREJGX1RBR19TSVpFKTsKKwkJbGV2ZWwgPSA0OworCX0gZWxzZSBpZiAoKHByb3Rfc3RhdHVzX3F1YWwtPmRvdWJsZXdvcmRbMF0gIT0gMCkgfHwKKwkJICAgKHByb3Rfc3RhdHVzX3F1YWwtPmRvdWJsZXdvcmRbMV0gIT0gMCkgfHwKKwkJICAgKGZzZl9zdGF0dXNfcXVhbC0+ZG91Ymxld29yZFswXSAhPSAwKSB8fAorCQkgICAoZnNmX3N0YXR1c19xdWFsLT5kb3VibGV3b3JkWzFdICE9IDApKSB7CisJCXN0cm5jcHkocmVjLT50YWcyLCAicXVhbCIsIFpGQ1BfREJGX1RBR19TSVpFKTsKKwkJbGV2ZWwgPSAzOworCX0gZWxzZSB7CisJCXN0cm5jcHkocmVjLT50YWcyLCAibm9ybSIsIFpGQ1BfREJGX1RBR19TSVpFKTsKKwkJbGV2ZWwgPSA2OworCX0KKworCXJlc3BvbnNlLT5mc2ZfY29tbWFuZCA9IGZzZl9yZXEtPmZzZl9jb21tYW5kOworCXJlc3BvbnNlLT5mc2ZfcmVxaWQgPSAodW5zaWduZWQgbG9uZylmc2ZfcmVxOworCXJlc3BvbnNlLT5mc2Zfc2Vxbm8gPSBmc2ZfcmVxLT5zZXFfbm87CisJcmVzcG9uc2UtPmZzZl9pc3N1ZWQgPSBmc2ZfcmVxLT5pc3N1ZWQ7CisJcmVzcG9uc2UtPmZzZl9wcm90X3N0YXR1cyA9IHF0Y2ItPnByZWZpeC5wcm90X3N0YXR1czsKKwlyZXNwb25zZS0+ZnNmX3N0YXR1cyA9IHF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzOworCW1lbWNweShyZXNwb25zZS0+ZnNmX3Byb3Rfc3RhdHVzX3F1YWwsCisJICAgICAgIHByb3Rfc3RhdHVzX3F1YWwsIEZTRl9QUk9UX1NUQVRVU19RVUFMX1NJWkUpOworCW1lbWNweShyZXNwb25zZS0+ZnNmX3N0YXR1c19xdWFsLAorCSAgICAgICBmc2Zfc3RhdHVzX3F1YWwsIEZTRl9TVEFUVVNfUVVBTElGSUVSX1NJWkUpOworCXJlc3BvbnNlLT5mc2ZfcmVxX3N0YXR1cyA9IGZzZl9yZXEtPnN0YXR1czsKKwlyZXNwb25zZS0+c2JhbF9maXJzdCA9IGZzZl9yZXEtPnNiYWxfZmlyc3Q7CisJcmVzcG9uc2UtPnNiYWxfY3VyciA9IGZzZl9yZXEtPnNiYWxfY3VycjsKKwlyZXNwb25zZS0+c2JhbF9sYXN0ID0gZnNmX3JlcS0+c2JhbF9sYXN0OworCXJlc3BvbnNlLT5wb29sID0gZnNmX3JlcS0+cG9vbCAhPSBOVUxMOworCXJlc3BvbnNlLT5lcnBfYWN0aW9uID0gKHVuc2lnbmVkIGxvbmcpZnNmX3JlcS0+ZXJwX2FjdGlvbjsKKworCXN3aXRjaCAoZnNmX3JlcS0+ZnNmX2NvbW1hbmQpIHsKKwljYXNlIEZTRl9RVENCX0ZDUF9DTU5EOgorCQlpZiAoZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX1RBU0tfTUFOQUdFTUVOVCkKKwkJCWJyZWFrOworCQlzY3NpX2NtbmQgPSAoc3RydWN0IHNjc2lfY21uZCAqKWZzZl9yZXEtPmRhdGE7CisJCWlmIChzY3NpX2NtbmQgIT0gTlVMTCkgeworCQkJcmVzcG9uc2UtPmRhdGEuc2VuZF9mY3Auc2NzaV9jbW5kCisJCQkgICAgPSAodW5zaWduZWQgbG9uZylzY3NpX2NtbmQ7CisJCQlyZXNwb25zZS0+ZGF0YS5zZW5kX2ZjcC5zY3NpX3NlcmlhbAorCQkJICAgID0gc2NzaV9jbW5kLT5zZXJpYWxfbnVtYmVyOworCQl9CisJCWJyZWFrOworCisJY2FzZSBGU0ZfUVRDQl9PUEVOX1BPUlRfV0lUSF9ESUQ6CisJY2FzZSBGU0ZfUVRDQl9DTE9TRV9QT1JUOgorCWNhc2UgRlNGX1FUQ0JfQ0xPU0VfUEhZU0lDQUxfUE9SVDoKKwkJcG9ydCA9IChzdHJ1Y3QgemZjcF9wb3J0ICopZnNmX3JlcS0+ZGF0YTsKKwkJcmVzcG9uc2UtPmRhdGEucG9ydC53d3BuID0gcG9ydC0+d3dwbjsKKwkJcmVzcG9uc2UtPmRhdGEucG9ydC5kX2lkID0gcG9ydC0+ZF9pZDsKKwkJcmVzcG9uc2UtPmRhdGEucG9ydC5wb3J0X2hhbmRsZSA9IHF0Y2ItPmhlYWRlci5wb3J0X2hhbmRsZTsKKwkJYnJlYWs7CisKKwljYXNlIEZTRl9RVENCX09QRU5fTFVOOgorCWNhc2UgRlNGX1FUQ0JfQ0xPU0VfTFVOOgorCQl1bml0ID0gKHN0cnVjdCB6ZmNwX3VuaXQgKilmc2ZfcmVxLT5kYXRhOworCQlwb3J0ID0gdW5pdC0+cG9ydDsKKwkJcmVzcG9uc2UtPmRhdGEudW5pdC53d3BuID0gcG9ydC0+d3dwbjsKKwkJcmVzcG9uc2UtPmRhdGEudW5pdC5mY3BfbHVuID0gdW5pdC0+ZmNwX2x1bjsKKwkJcmVzcG9uc2UtPmRhdGEudW5pdC5wb3J0X2hhbmRsZSA9IHF0Y2ItPmhlYWRlci5wb3J0X2hhbmRsZTsKKwkJcmVzcG9uc2UtPmRhdGEudW5pdC5sdW5faGFuZGxlID0gcXRjYi0+aGVhZGVyLmx1bl9oYW5kbGU7CisJCWJyZWFrOworCisJY2FzZSBGU0ZfUVRDQl9TRU5EX0VMUzoKKwkJc2VuZF9lbHMgPSAoc3RydWN0IHpmY3Bfc2VuZF9lbHMgKilmc2ZfcmVxLT5kYXRhOworCQlyZXNwb25zZS0+ZGF0YS5zZW5kX2Vscy5kX2lkID0gcXRjYi0+Ym90dG9tLnN1cHBvcnQuZF9pZDsKKwkJcmVzcG9uc2UtPmRhdGEuc2VuZF9lbHMubHNfY29kZSA9IHNlbmRfZWxzLT5sc19jb2RlID4+IDI0OworCQlicmVhazsKKworCWNhc2UgRlNGX1FUQ0JfQUJPUlRfRkNQX0NNTkQ6CisJY2FzZSBGU0ZfUVRDQl9TRU5EX0dFTkVSSUM6CisJY2FzZSBGU0ZfUVRDQl9FWENIQU5HRV9DT05GSUdfREFUQToKKwljYXNlIEZTRl9RVENCX0VYQ0hBTkdFX1BPUlRfREFUQToKKwljYXNlIEZTRl9RVENCX0RPV05MT0FEX0NPTlRST0xfRklMRToKKwljYXNlIEZTRl9RVENCX1VQTE9BRF9DT05UUk9MX0ZJTEU6CisJCWJyZWFrOworCX0KKworCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmhiYV9kYmYsIGxldmVsLAorCQkgICAgcmVjLCBzaXplb2Yoc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmQpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5oYmFfZGJmX2xvY2ssIGZsYWdzKTsKK30KKworaW5saW5lIHZvaWQKK3pmY3BfaGJhX2RiZl9ldmVudF9mc2ZfdW5zb2woY29uc3QgY2hhciAqdGFnLCBzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICBzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlciAqc3RhdHVzX2J1ZmZlcikKK3sKKwlzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZCAqcmVjID0gJmFkYXB0ZXItPmhiYV9kYmZfYnVmOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+aGJhX2RiZl9sb2NrLCBmbGFncyk7CisJbWVtc2V0KHJlYywgMCwgc2l6ZW9mKHN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkKSk7CisJc3RybmNweShyZWMtPnRhZywgInN0YXQiLCBaRkNQX0RCRl9UQUdfU0laRSk7CisJc3RybmNweShyZWMtPnRhZzIsIHRhZywgWkZDUF9EQkZfVEFHX1NJWkUpOworCisJcmVjLT50eXBlLnN0YXR1cy5mYWlsZWQgPSBhZGFwdGVyLT5zdGF0dXNfcmVhZF9mYWlsZWQ7CisJaWYgKHN0YXR1c19idWZmZXIgIT0gTlVMTCkgeworCQlyZWMtPnR5cGUuc3RhdHVzLnN0YXR1c190eXBlID0gc3RhdHVzX2J1ZmZlci0+c3RhdHVzX3R5cGU7CisJCXJlYy0+dHlwZS5zdGF0dXMuc3RhdHVzX3N1YnR5cGUgPSBzdGF0dXNfYnVmZmVyLT5zdGF0dXNfc3VidHlwZTsKKwkJbWVtY3B5KCZyZWMtPnR5cGUuc3RhdHVzLnF1ZXVlX2Rlc2lnbmF0b3IsCisJCSAgICAgICAmc3RhdHVzX2J1ZmZlci0+cXVldWVfZGVzaWduYXRvciwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgZnNmX3F1ZXVlX2Rlc2lnbmF0b3IpKTsKKworCQlzd2l0Y2ggKHN0YXR1c19idWZmZXItPnN0YXR1c190eXBlKSB7CisJCWNhc2UgRlNGX1NUQVRVU19SRUFEX1NFTlNFX0RBVEFfQVZBSUw6CisJCQlyZWMtPnR5cGUuc3RhdHVzLnBheWxvYWRfc2l6ZSA9CisJCQkgICAgWkZDUF9EQkZfVU5TT0xfUEFZTE9BRF9TRU5TRV9EQVRBX0FWQUlMOworCQkJYnJlYWs7CisKKwkJY2FzZSBGU0ZfU1RBVFVTX1JFQURfQklUX0VSUk9SX1RIUkVTSE9MRDoKKwkJCXJlYy0+dHlwZS5zdGF0dXMucGF5bG9hZF9zaXplID0KKwkJCSAgICBaRkNQX0RCRl9VTlNPTF9QQVlMT0FEX0JJVF9FUlJPUl9USFJFU0hPTEQ7CisJCQlicmVhazsKKworCQljYXNlIEZTRl9TVEFUVVNfUkVBRF9MSU5LX0RPV046CisJCQlzd2l0Y2ggKHN0YXR1c19idWZmZXItPnN0YXR1c19zdWJ0eXBlKSB7CisJCQljYXNlIEZTRl9TVEFUVVNfUkVBRF9TVUJfTk9fUEhZU0lDQUxfTElOSzoKKwkJCWNhc2UgRlNGX1NUQVRVU19SRUFEX1NVQl9GRElTQ19GQUlMRUQ6CisJCQkJcmVjLT50eXBlLnN0YXR1cy5wYXlsb2FkX3NpemUgPQorCQkJCQlzaXplb2Yoc3RydWN0IGZzZl9saW5rX2Rvd25faW5mbyk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIEZTRl9TVEFUVVNfUkVBRF9GRUFUVVJFX1VQREFURV9BTEVSVDoKKwkJCXJlYy0+dHlwZS5zdGF0dXMucGF5bG9hZF9zaXplID0KKwkJCSAgICBaRkNQX0RCRl9VTlNPTF9QQVlMT0FEX0ZFQVRVUkVfVVBEQVRFX0FMRVJUOworCQkJYnJlYWs7CisJCX0KKwkJbWVtY3B5KCZyZWMtPnR5cGUuc3RhdHVzLnBheWxvYWQsCisJCSAgICAgICAmc3RhdHVzX2J1ZmZlci0+cGF5bG9hZCwgcmVjLT50eXBlLnN0YXR1cy5wYXlsb2FkX3NpemUpOworCX0KKworCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmhiYV9kYmYsIDIsCisJCSAgICByZWMsIHNpemVvZihzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZCkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmhiYV9kYmZfbG9jaywgZmxhZ3MpOworfQorCitpbmxpbmUgdm9pZAoremZjcF9oYmFfZGJmX2V2ZW50X3FkaW8oc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwgdW5zaWduZWQgaW50IHN0YXR1cywKKwkJCXVuc2lnbmVkIGludCBxZGlvX2Vycm9yLCB1bnNpZ25lZCBpbnQgc2lnYV9lcnJvciwKKwkJCWludCBzYmFsX2luZGV4LCBpbnQgc2JhbF9jb3VudCkKK3sKKwlzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZCAqcmVjID0gJmFkYXB0ZXItPmhiYV9kYmZfYnVmOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+aGJhX2RiZl9sb2NrLCBmbGFncyk7CisJbWVtc2V0KHJlYywgMCwgc2l6ZW9mKHN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkKSk7CisJc3RybmNweShyZWMtPnRhZywgInFkaW8iLCBaRkNQX0RCRl9UQUdfU0laRSk7CisJcmVjLT50eXBlLnFkaW8uc3RhdHVzID0gc3RhdHVzOworCXJlYy0+dHlwZS5xZGlvLnFkaW9fZXJyb3IgPSBxZGlvX2Vycm9yOworCXJlYy0+dHlwZS5xZGlvLnNpZ2FfZXJyb3IgPSBzaWdhX2Vycm9yOworCXJlYy0+dHlwZS5xZGlvLnNiYWxfaW5kZXggPSBzYmFsX2luZGV4OworCXJlYy0+dHlwZS5xZGlvLnNiYWxfY291bnQgPSBzYmFsX2NvdW50OworCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmhiYV9kYmYsIDAsCisJCSAgICByZWMsIHNpemVvZihzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZCkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmhiYV9kYmZfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludAoremZjcF9oYmFfZGJmX3ZpZXdfcmVzcG9uc2UoY2hhciAqb3V0X2J1ZiwKKwkJCSAgIHN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkX3Jlc3BvbnNlICpyZWMpCit7CisJaW50IGxlbiA9IDA7CisKKwlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAiZnNmX2NvbW1hbmQiLCAiMHglMDh4IiwKKwkJCSAgICAgcmVjLT5mc2ZfY29tbWFuZCk7CisJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImZzZl9yZXFpZCIsICIweCUwTHgiLAorCQkJICAgICByZWMtPmZzZl9yZXFpZCk7CisJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImZzZl9zZXFubyIsICIweCUwOHgiLAorCQkJICAgICByZWMtPmZzZl9zZXFubyk7CisJbGVuICs9IHpmY3BfZGJmX3N0Y2sob3V0X2J1ZiArIGxlbiwgImZzZl9pc3N1ZWQiLCByZWMtPmZzZl9pc3N1ZWQpOworCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJmc2ZfcHJvdF9zdGF0dXMiLCAiMHglMDh4IiwKKwkJCSAgICAgcmVjLT5mc2ZfcHJvdF9zdGF0dXMpOworCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJmc2Zfc3RhdHVzIiwgIjB4JTA4eCIsCisJCQkgICAgIHJlYy0+ZnNmX3N0YXR1cyk7CisJbGVuICs9IHpmY3BfZGJmX3ZpZXdfZHVtcChvdXRfYnVmICsgbGVuLCAiZnNmX3Byb3Rfc3RhdHVzX3F1YWwiLAorCQkJCSAgcmVjLT5mc2ZfcHJvdF9zdGF0dXNfcXVhbCwKKwkJCQkgIEZTRl9QUk9UX1NUQVRVU19RVUFMX1NJWkUsCisJCQkJICAwLCBGU0ZfUFJPVF9TVEFUVVNfUVVBTF9TSVpFKTsKKwlsZW4gKz0gemZjcF9kYmZfdmlld19kdW1wKG91dF9idWYgKyBsZW4sICJmc2Zfc3RhdHVzX3F1YWwiLAorCQkJCSAgcmVjLT5mc2Zfc3RhdHVzX3F1YWwsCisJCQkJICBGU0ZfU1RBVFVTX1FVQUxJRklFUl9TSVpFLAorCQkJCSAgMCwgRlNGX1NUQVRVU19RVUFMSUZJRVJfU0laRSk7CisJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImZzZl9yZXFfc3RhdHVzIiwgIjB4JTA4eCIsCisJCQkgICAgIHJlYy0+ZnNmX3JlcV9zdGF0dXMpOworCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJzYmFsX2ZpcnN0IiwgIjB4JTAyeCIsCisJCQkgICAgIHJlYy0+c2JhbF9maXJzdCk7CisJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInNiYWxfY3VyciIsICIweCUwMngiLAorCQkJICAgICByZWMtPnNiYWxfY3Vycik7CisJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInNiYWxfbGFzdCIsICIweCUwMngiLAorCQkJICAgICByZWMtPnNiYWxfbGFzdCk7CisJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInBvb2wiLCAiMHglMDJ4IiwgcmVjLT5wb29sKTsKKworCXN3aXRjaCAocmVjLT5mc2ZfY29tbWFuZCkgeworCWNhc2UgRlNGX1FUQ0JfRkNQX0NNTkQ6CisJCWlmIChyZWMtPmZzZl9yZXFfc3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX1RBU0tfTUFOQUdFTUVOVCkKKwkJCWJyZWFrOworCQlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAic2NzaV9jbW5kIiwgIjB4JTBMeCIsCisJCQkJICAgICByZWMtPmRhdGEuc2VuZF9mY3Auc2NzaV9jbW5kKTsKKwkJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInNjc2lfc2VyaWFsIiwgIjB4JTAxNkx4IiwKKwkJCQkgICAgIHJlYy0+ZGF0YS5zZW5kX2ZjcC5zY3NpX3NlcmlhbCk7CisJCWJyZWFrOworCisJY2FzZSBGU0ZfUVRDQl9PUEVOX1BPUlRfV0lUSF9ESUQ6CisJY2FzZSBGU0ZfUVRDQl9DTE9TRV9QT1JUOgorCWNhc2UgRlNGX1FUQ0JfQ0xPU0VfUEhZU0lDQUxfUE9SVDoKKwkJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInd3cG4iLCAiMHglMDE2THgiLAorCQkJCSAgICAgcmVjLT5kYXRhLnBvcnQud3dwbik7CisJCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJkX2lkIiwgIjB4JTA2eCIsCisJCQkJICAgICByZWMtPmRhdGEucG9ydC5kX2lkKTsKKwkJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInBvcnRfaGFuZGxlIiwgIjB4JTA4eCIsCisJCQkJICAgICByZWMtPmRhdGEucG9ydC5wb3J0X2hhbmRsZSk7CisJCWJyZWFrOworCisJY2FzZSBGU0ZfUVRDQl9PUEVOX0xVTjoKKwljYXNlIEZTRl9RVENCX0NMT1NFX0xVTjoKKwkJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInd3cG4iLCAiMHglMDE2THgiLAorCQkJCSAgICAgcmVjLT5kYXRhLnVuaXQud3dwbik7CisJCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJmY3BfbHVuIiwgIjB4JTAxNkx4IiwKKwkJCQkgICAgIHJlYy0+ZGF0YS51bml0LmZjcF9sdW4pOworCQlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAicG9ydF9oYW5kbGUiLCAiMHglMDh4IiwKKwkJCQkgICAgIHJlYy0+ZGF0YS51bml0LnBvcnRfaGFuZGxlKTsKKwkJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImx1bl9oYW5kbGUiLCAiMHglMDh4IiwKKwkJCQkgICAgIHJlYy0+ZGF0YS51bml0Lmx1bl9oYW5kbGUpOworCQlicmVhazsKKworCWNhc2UgRlNGX1FUQ0JfU0VORF9FTFM6CisJCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJkX2lkIiwgIjB4JTA2eCIsCisJCQkJICAgICByZWMtPmRhdGEuc2VuZF9lbHMuZF9pZCk7CisJCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJsc19jb2RlIiwgIjB4JTAyeCIsCisJCQkJICAgICByZWMtPmRhdGEuc2VuZF9lbHMubHNfY29kZSk7CisJCWJyZWFrOworCisJY2FzZSBGU0ZfUVRDQl9BQk9SVF9GQ1BfQ01ORDoKKwljYXNlIEZTRl9RVENCX1NFTkRfR0VORVJJQzoKKwljYXNlIEZTRl9RVENCX0VYQ0hBTkdFX0NPTkZJR19EQVRBOgorCWNhc2UgRlNGX1FUQ0JfRVhDSEFOR0VfUE9SVF9EQVRBOgorCWNhc2UgRlNGX1FUQ0JfRE9XTkxPQURfQ09OVFJPTF9GSUxFOgorCWNhc2UgRlNGX1FUQ0JfVVBMT0FEX0NPTlRST0xfRklMRToKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3pmY3BfaGJhX2RiZl92aWV3X3N0YXR1cyhjaGFyICpvdXRfYnVmLCBzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZF9zdGF0dXMgKnJlYykKK3sKKwlpbnQgbGVuID0gMDsKKworCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJmYWlsZWQiLCAiMHglMDJ4IiwgcmVjLT5mYWlsZWQpOworCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJzdGF0dXNfdHlwZSIsICIweCUwOHgiLAorCQkJICAgICByZWMtPnN0YXR1c190eXBlKTsKKwlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAic3RhdHVzX3N1YnR5cGUiLCAiMHglMDh4IiwKKwkJCSAgICAgcmVjLT5zdGF0dXNfc3VidHlwZSk7CisJbGVuICs9IHpmY3BfZGJmX3ZpZXdfZHVtcChvdXRfYnVmICsgbGVuLCAicXVldWVfZGVzaWduYXRvciIsCisJCQkJICAoY2hhciAqKSZyZWMtPnF1ZXVlX2Rlc2lnbmF0b3IsCisJCQkJICBzaXplb2Yoc3RydWN0IGZzZl9xdWV1ZV9kZXNpZ25hdG9yKSwKKwkJCQkgIDAsIHNpemVvZihzdHJ1Y3QgZnNmX3F1ZXVlX2Rlc2lnbmF0b3IpKTsKKwlsZW4gKz0gemZjcF9kYmZfdmlld19kdW1wKG91dF9idWYgKyBsZW4sICJwYXlsb2FkIiwKKwkJCQkgIChjaGFyICopJnJlYy0+cGF5bG9hZCwKKwkJCQkgIHJlYy0+cGF5bG9hZF9zaXplLCAwLCByZWMtPnBheWxvYWRfc2l6ZSk7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW5saW5lIGludAoremZjcF9oYmFfZGJmX3ZpZXdfcWRpbyhjaGFyICpvdXRfYnVmLCBzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZF9xZGlvICpyZWMpCit7CisJaW50IGxlbiA9IDA7CisKKwlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAic3RhdHVzIiwgIjB4JTA4eCIsIHJlYy0+c3RhdHVzKTsKKwlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAicWRpb19lcnJvciIsICIweCUwOHgiLAorCQkJICAgICByZWMtPnFkaW9fZXJyb3IpOworCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJzaWdhX2Vycm9yIiwgIjB4JTA4eCIsCisJCQkgICAgIHJlYy0+c2lnYV9lcnJvcik7CisJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInNiYWxfaW5kZXgiLCAiMHglMDJ4IiwKKwkJCSAgICAgcmVjLT5zYmFsX2luZGV4KTsKKwlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAic2JhbF9jb3VudCIsICIweCUwMngiLAorCQkJICAgICByZWMtPnNiYWxfY291bnQpOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludAoremZjcF9oYmFfZGJmX3ZpZXdfZm9ybWF0KGRlYnVnX2luZm9fdCAqIGlkLCBzdHJ1Y3QgZGVidWdfdmlldyAqdmlldywKKwkJCSBjaGFyICpvdXRfYnVmLCBjb25zdCBjaGFyICppbl9idWYpCit7CisJc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmQgKnJlYyA9IChzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZCAqKWluX2J1ZjsKKwlpbnQgbGVuID0gMDsKKworCWlmIChzdHJuY21wKHJlYy0+dGFnLCAiZHVtcCIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKQorCQlyZXR1cm4gMDsKKworCWxlbiArPSB6ZmNwX2RiZl90YWcob3V0X2J1ZiArIGxlbiwgInRhZyIsIHJlYy0+dGFnKTsKKwlpZiAoaXNhbHBoYShyZWMtPnRhZzJbMF0pKQorCQlsZW4gKz0gemZjcF9kYmZfdGFnKG91dF9idWYgKyBsZW4sICJ0YWcyIiwgcmVjLT50YWcyKTsKKwlpZiAoc3RybmNtcChyZWMtPnRhZywgInJlc3AiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkKKwkJbGVuICs9IHpmY3BfaGJhX2RiZl92aWV3X3Jlc3BvbnNlKG91dF9idWYgKyBsZW4sCisJCQkJCQkgICZyZWMtPnR5cGUucmVzcG9uc2UpOworCWVsc2UgaWYgKHN0cm5jbXAocmVjLT50YWcsICJzdGF0IiwgWkZDUF9EQkZfVEFHX1NJWkUpID09IDApCisJCWxlbiArPSB6ZmNwX2hiYV9kYmZfdmlld19zdGF0dXMob3V0X2J1ZiArIGxlbiwKKwkJCQkJCSZyZWMtPnR5cGUuc3RhdHVzKTsKKwllbHNlIGlmIChzdHJuY21wKHJlYy0+dGFnLCAicWRpbyIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKQorCQlsZW4gKz0gemZjcF9oYmFfZGJmX3ZpZXdfcWRpbyhvdXRfYnVmICsgbGVuLCAmcmVjLT50eXBlLnFkaW8pOworCisJbGVuICs9IHNwcmludGYob3V0X2J1ZiArIGxlbiwgIlxuIik7CisKKwlyZXR1cm4gbGVuOworfQorCitzdHJ1Y3QgZGVidWdfdmlldyB6ZmNwX2hiYV9kYmZfdmlldyA9IHsKKwkic3RydWN0dXJlZCIsCisJTlVMTCwKKwkmemZjcF9kYmZfdmlld19oZWFkZXIsCisJJnpmY3BfaGJhX2RiZl92aWV3X2Zvcm1hdCwKKwlOVUxMLAorCU5VTEwKK307CisKK2lubGluZSB2b2lkCitfemZjcF9zYW5fZGJmX2V2ZW50X2NvbW1vbl9jdChjb25zdCBjaGFyICp0YWcsIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEsCisJCQkgICAgICB1MzIgc19pZCwgdTMyIGRfaWQsIHZvaWQgKmJ1ZmZlciwgaW50IGJ1ZmxlbikKK3sKKwlzdHJ1Y3QgemZjcF9zZW5kX2N0ICpzZW5kX2N0ID0gKHN0cnVjdCB6ZmNwX3NlbmRfY3QgKilmc2ZfcmVxLT5kYXRhOworCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSBzZW5kX2N0LT5wb3J0OworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOworCXN0cnVjdCBjdF9oZHIgKmhlYWRlciA9IChzdHJ1Y3QgY3RfaGRyICopYnVmZmVyOworCXN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkICpyZWMgPSAmYWRhcHRlci0+c2FuX2RiZl9idWY7CisJc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmRfY3QgKmN0ID0gJnJlYy0+dHlwZS5jdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnNhbl9kYmZfbG9jaywgZmxhZ3MpOworCW1lbXNldChyZWMsIDAsIHNpemVvZihzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZCkpOworCXN0cm5jcHkocmVjLT50YWcsIHRhZywgWkZDUF9EQkZfVEFHX1NJWkUpOworCXJlYy0+ZnNmX3JlcWlkID0gKHVuc2lnbmVkIGxvbmcpZnNmX3JlcTsKKwlyZWMtPmZzZl9zZXFubyA9IGZzZl9yZXEtPnNlcV9ubzsKKwlyZWMtPnNfaWQgPSBzX2lkOworCXJlYy0+ZF9pZCA9IGRfaWQ7CisJaWYgKHN0cm5jbXAodGFnLCAib2N0YyIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKSB7CisJCWN0LT50eXBlLnJlcXVlc3QuY21kX3JlcV9jb2RlID0gaGVhZGVyLT5jbWRfcnNwX2NvZGU7CisJCWN0LT50eXBlLnJlcXVlc3QucmV2aXNpb24gPSBoZWFkZXItPnJldmlzaW9uOworCQljdC0+dHlwZS5yZXF1ZXN0LmdzX3R5cGUgPSBoZWFkZXItPmdzX3R5cGU7CisJCWN0LT50eXBlLnJlcXVlc3QuZ3Nfc3VidHlwZSA9IGhlYWRlci0+Z3Nfc3VidHlwZTsKKwkJY3QtPnR5cGUucmVxdWVzdC5vcHRpb25zID0gaGVhZGVyLT5vcHRpb25zOworCQljdC0+dHlwZS5yZXF1ZXN0Lm1heF9yZXNfc2l6ZSA9IGhlYWRlci0+bWF4X3Jlc19zaXplOworCX0gZWxzZSBpZiAoc3RybmNtcCh0YWcsICJyY3RjIiwgWkZDUF9EQkZfVEFHX1NJWkUpID09IDApIHsKKwkJY3QtPnR5cGUucmVzcG9uc2UuY21kX3JzcF9jb2RlID0gaGVhZGVyLT5jbWRfcnNwX2NvZGU7CisJCWN0LT50eXBlLnJlc3BvbnNlLnJldmlzaW9uID0gaGVhZGVyLT5yZXZpc2lvbjsKKwkJY3QtPnR5cGUucmVzcG9uc2UucmVhc29uX2NvZGUgPSBoZWFkZXItPnJlYXNvbl9jb2RlOworCQljdC0+dHlwZS5yZXNwb25zZS5yZWFzb25fY29kZV9leHBsID0gaGVhZGVyLT5yZWFzb25fY29kZV9leHBsOworCQljdC0+dHlwZS5yZXNwb25zZS52ZW5kb3JfdW5pcXVlID0gaGVhZGVyLT52ZW5kb3JfdW5pcXVlOworCX0KKwljdC0+cGF5bG9hZF9zaXplID0KKwkgICAgbWluKGJ1ZmxlbiAtIChpbnQpc2l6ZW9mKHN0cnVjdCBjdF9oZHIpLCBaRkNQX0RCRl9DVF9QQVlMT0FEKTsKKwltZW1jcHkoY3QtPnBheWxvYWQsIGJ1ZmZlciArIHNpemVvZihzdHJ1Y3QgY3RfaGRyKSwgY3QtPnBheWxvYWRfc2l6ZSk7CisJZGVidWdfZXZlbnQoYWRhcHRlci0+c2FuX2RiZiwgMywKKwkJICAgIHJlYywgc2l6ZW9mKHN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+c2FuX2RiZl9sb2NrLCBmbGFncyk7Cit9CisKK2lubGluZSB2b2lkIHpmY3Bfc2FuX2RiZl9ldmVudF9jdF9yZXF1ZXN0KHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCit7CisJc3RydWN0IHpmY3Bfc2VuZF9jdCAqY3QgPSAoc3RydWN0IHpmY3Bfc2VuZF9jdCAqKWZzZl9yZXEtPmRhdGE7CisJc3RydWN0IHpmY3BfcG9ydCAqcG9ydCA9IGN0LT5wb3J0OworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOworCisJX3pmY3Bfc2FuX2RiZl9ldmVudF9jb21tb25fY3QoIm9jdGMiLCBmc2ZfcmVxLAorCQkJCSAgICAgIGZjX2hvc3RfcG9ydF9pZChhZGFwdGVyLT5zY3NpX2hvc3QpLAorCQkJCSAgICAgIHBvcnQtPmRfaWQsIHpmY3Bfc2dfdG9fYWRkcmVzcyhjdC0+cmVxKSwKKwkJCQkgICAgICBjdC0+cmVxLT5sZW5ndGgpOworfQorCitpbmxpbmUgdm9pZCB6ZmNwX3Nhbl9kYmZfZXZlbnRfY3RfcmVzcG9uc2Uoc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKK3sKKwlzdHJ1Y3QgemZjcF9zZW5kX2N0ICpjdCA9IChzdHJ1Y3QgemZjcF9zZW5kX2N0ICopZnNmX3JlcS0+ZGF0YTsKKwlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gY3QtPnBvcnQ7CisJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHBvcnQtPmFkYXB0ZXI7CisKKwlfemZjcF9zYW5fZGJmX2V2ZW50X2NvbW1vbl9jdCgicmN0YyIsIGZzZl9yZXEsIHBvcnQtPmRfaWQsCisJCQkJICAgICAgZmNfaG9zdF9wb3J0X2lkKGFkYXB0ZXItPnNjc2lfaG9zdCksCisJCQkJICAgICAgemZjcF9zZ190b19hZGRyZXNzKGN0LT5yZXNwKSwKKwkJCQkgICAgICBjdC0+cmVzcC0+bGVuZ3RoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitfemZjcF9zYW5fZGJmX2V2ZW50X2NvbW1vbl9lbHMoY29uc3QgY2hhciAqdGFnLCBpbnQgbGV2ZWwsCisJCQkgICAgICAgc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSwgdTMyIHNfaWQsCisJCQkgICAgICAgdTMyIGRfaWQsIHU4IGxzX2NvZGUsIHZvaWQgKmJ1ZmZlciwgaW50IGJ1ZmxlbikKK3sKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZnNmX3JlcS0+YWRhcHRlcjsKKwlzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZCAqcmVjID0gJmFkYXB0ZXItPnNhbl9kYmZfYnVmOworCXN0cnVjdCB6ZmNwX2RiZl9kdW1wICpkdW1wID0gKHN0cnVjdCB6ZmNwX2RiZl9kdW1wICopcmVjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IG9mZnNldCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+c2FuX2RiZl9sb2NrLCBmbGFncyk7CisJZG8geworCQltZW1zZXQocmVjLCAwLCBzaXplb2Yoc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmQpKTsKKwkJaWYgKG9mZnNldCA9PSAwKSB7CisJCQlzdHJuY3B5KHJlYy0+dGFnLCB0YWcsIFpGQ1BfREJGX1RBR19TSVpFKTsKKwkJCXJlYy0+ZnNmX3JlcWlkID0gKHVuc2lnbmVkIGxvbmcpZnNmX3JlcTsKKwkJCXJlYy0+ZnNmX3NlcW5vID0gZnNmX3JlcS0+c2VxX25vOworCQkJcmVjLT5zX2lkID0gc19pZDsKKwkJCXJlYy0+ZF9pZCA9IGRfaWQ7CisJCQlyZWMtPnR5cGUuZWxzLmxzX2NvZGUgPSBsc19jb2RlOworCQkJYnVmbGVuID0gbWluKGJ1ZmxlbiwgWkZDUF9EQkZfRUxTX01BWF9QQVlMT0FEKTsKKwkJCXJlYy0+dHlwZS5lbHMucGF5bG9hZF9zaXplID0gYnVmbGVuOworCQkJbWVtY3B5KHJlYy0+dHlwZS5lbHMucGF5bG9hZCwKKwkJCSAgICAgICBidWZmZXIsIG1pbihidWZsZW4sIFpGQ1BfREJGX0VMU19QQVlMT0FEKSk7CisJCQlvZmZzZXQgKz0gbWluKGJ1ZmxlbiwgWkZDUF9EQkZfRUxTX1BBWUxPQUQpOworCQl9IGVsc2UgeworCQkJc3RybmNweShkdW1wLT50YWcsICJkdW1wIiwgWkZDUF9EQkZfVEFHX1NJWkUpOworCQkJZHVtcC0+dG90YWxfc2l6ZSA9IGJ1ZmxlbjsKKwkJCWR1bXAtPm9mZnNldCA9IG9mZnNldDsKKwkJCWR1bXAtPnNpemUgPSBtaW4oYnVmbGVuIC0gb2Zmc2V0LAorCQkJCQkgKGludClzaXplb2Yoc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmQpCisJCQkJCSAtIChpbnQpc2l6ZW9mKHN0cnVjdCB6ZmNwX2RiZl9kdW1wKSk7CisJCQltZW1jcHkoZHVtcC0+ZGF0YSwgYnVmZmVyICsgb2Zmc2V0LCBkdW1wLT5zaXplKTsKKwkJCW9mZnNldCArPSBkdW1wLT5zaXplOworCQl9CisJCWRlYnVnX2V2ZW50KGFkYXB0ZXItPnNhbl9kYmYsIGxldmVsLAorCQkJICAgIHJlYywgc2l6ZW9mKHN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkKSk7CisJfSB3aGlsZSAob2Zmc2V0IDwgYnVmbGVuKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5zYW5fZGJmX2xvY2ssIGZsYWdzKTsKK30KKworaW5saW5lIHZvaWQgemZjcF9zYW5fZGJmX2V2ZW50X2Vsc19yZXF1ZXN0KHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCit7CisJc3RydWN0IHpmY3Bfc2VuZF9lbHMgKmVscyA9IChzdHJ1Y3QgemZjcF9zZW5kX2VscyAqKWZzZl9yZXEtPmRhdGE7CisKKwlfemZjcF9zYW5fZGJmX2V2ZW50X2NvbW1vbl9lbHMoIm9lbHMiLCAyLCBmc2ZfcmVxLAorCQkJCSAgICAgICBmY19ob3N0X3BvcnRfaWQoZWxzLT5hZGFwdGVyLT5zY3NpX2hvc3QpLAorCQkJCSAgICAgICBlbHMtPmRfaWQsCisJCQkJICAgICAgICoodTggKikgemZjcF9zZ190b19hZGRyZXNzKGVscy0+cmVxKSwKKwkJCQkgICAgICAgemZjcF9zZ190b19hZGRyZXNzKGVscy0+cmVxKSwKKwkJCQkgICAgICAgZWxzLT5yZXEtPmxlbmd0aCk7Cit9CisKK2lubGluZSB2b2lkIHpmY3Bfc2FuX2RiZl9ldmVudF9lbHNfcmVzcG9uc2Uoc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKK3sKKwlzdHJ1Y3QgemZjcF9zZW5kX2VscyAqZWxzID0gKHN0cnVjdCB6ZmNwX3NlbmRfZWxzICopZnNmX3JlcS0+ZGF0YTsKKworCV96ZmNwX3Nhbl9kYmZfZXZlbnRfY29tbW9uX2VscygicmVscyIsIDIsIGZzZl9yZXEsIGVscy0+ZF9pZCwKKwkJCQkgICAgICAgZmNfaG9zdF9wb3J0X2lkKGVscy0+YWRhcHRlci0+c2NzaV9ob3N0KSwKKwkJCQkgICAgICAgKih1OCAqKSB6ZmNwX3NnX3RvX2FkZHJlc3MoZWxzLT5yZXEpLAorCQkJCSAgICAgICB6ZmNwX3NnX3RvX2FkZHJlc3MoZWxzLT5yZXNwKSwKKwkJCQkgICAgICAgZWxzLT5yZXNwLT5sZW5ndGgpOworfQorCitpbmxpbmUgdm9pZCB6ZmNwX3Nhbl9kYmZfZXZlbnRfaW5jb21pbmdfZWxzKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCit7CisJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGZzZl9yZXEtPmFkYXB0ZXI7CisJc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIgKnN0YXR1c19idWZmZXIgPQorCSAgICAoc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIgKilmc2ZfcmVxLT5kYXRhOworCWludCBsZW5ndGggPSAoaW50KXN0YXR1c19idWZmZXItPmxlbmd0aCAtCisJICAgIChpbnQpKCh2b2lkICopJnN0YXR1c19idWZmZXItPnBheWxvYWQgLSAodm9pZCAqKXN0YXR1c19idWZmZXIpOworCisJX3pmY3Bfc2FuX2RiZl9ldmVudF9jb21tb25fZWxzKCJpZWxzIiwgMSwgZnNmX3JlcSwgc3RhdHVzX2J1ZmZlci0+ZF9pZCwKKwkJCQkgICAgICAgZmNfaG9zdF9wb3J0X2lkKGFkYXB0ZXItPnNjc2lfaG9zdCksCisJCQkJICAgICAgICoodTggKikgc3RhdHVzX2J1ZmZlci0+cGF5bG9hZCwKKwkJCQkgICAgICAgKHZvaWQgKilzdGF0dXNfYnVmZmVyLT5wYXlsb2FkLCBsZW5ndGgpOworfQorCitzdGF0aWMgaW50Cit6ZmNwX3Nhbl9kYmZfdmlld19mb3JtYXQoZGVidWdfaW5mb190ICogaWQsIHN0cnVjdCBkZWJ1Z192aWV3ICp2aWV3LAorCQkJIGNoYXIgKm91dF9idWYsIGNvbnN0IGNoYXIgKmluX2J1ZikKK3sKKwlzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZCAqcmVjID0gKHN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkICopaW5fYnVmOworCWNoYXIgKmJ1ZmZlciA9IE5VTEw7CisJaW50IGJ1ZmxlbiA9IDAsIHRvdGFsID0gMDsKKwlpbnQgbGVuID0gMDsKKworCWlmIChzdHJuY21wKHJlYy0+dGFnLCAiZHVtcCIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKQorCQlyZXR1cm4gMDsKKworCWxlbiArPSB6ZmNwX2RiZl90YWcob3V0X2J1ZiArIGxlbiwgInRhZyIsIHJlYy0+dGFnKTsKKwlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAiZnNmX3JlcWlkIiwgIjB4JTBMeCIsCisJCQkgICAgIHJlYy0+ZnNmX3JlcWlkKTsKKwlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAiZnNmX3NlcW5vIiwgIjB4JTA4eCIsCisJCQkgICAgIHJlYy0+ZnNmX3NlcW5vKTsKKwlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAic19pZCIsICIweCUwNngiLCByZWMtPnNfaWQpOworCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJkX2lkIiwgIjB4JTA2eCIsIHJlYy0+ZF9pZCk7CisKKwlpZiAoc3RybmNtcChyZWMtPnRhZywgIm9jdGMiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkgeworCQlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAiY21kX3JlcV9jb2RlIiwgIjB4JTA0eCIsCisJCQkJICAgICByZWMtPnR5cGUuY3QudHlwZS5yZXF1ZXN0LmNtZF9yZXFfY29kZSk7CisJCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJyZXZpc2lvbiIsICIweCUwMngiLAorCQkJCSAgICAgcmVjLT50eXBlLmN0LnR5cGUucmVxdWVzdC5yZXZpc2lvbik7CisJCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJnc190eXBlIiwgIjB4JTAyeCIsCisJCQkJICAgICByZWMtPnR5cGUuY3QudHlwZS5yZXF1ZXN0LmdzX3R5cGUpOworCQlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAiZ3Nfc3VidHlwZSIsICIweCUwMngiLAorCQkJCSAgICAgcmVjLT50eXBlLmN0LnR5cGUucmVxdWVzdC5nc19zdWJ0eXBlKTsKKwkJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgIm9wdGlvbnMiLCAiMHglMDJ4IiwKKwkJCQkgICAgIHJlYy0+dHlwZS5jdC50eXBlLnJlcXVlc3Qub3B0aW9ucyk7CisJCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJtYXhfcmVzX3NpemUiLCAiMHglMDR4IiwKKwkJCQkgICAgIHJlYy0+dHlwZS5jdC50eXBlLnJlcXVlc3QubWF4X3Jlc19zaXplKTsKKwkJdG90YWwgPSByZWMtPnR5cGUuY3QucGF5bG9hZF9zaXplOworCQlidWZmZXIgPSByZWMtPnR5cGUuY3QucGF5bG9hZDsKKwkJYnVmbGVuID0gbWluKHRvdGFsLCBaRkNQX0RCRl9DVF9QQVlMT0FEKTsKKwl9IGVsc2UgaWYgKHN0cm5jbXAocmVjLT50YWcsICJyY3RjIiwgWkZDUF9EQkZfVEFHX1NJWkUpID09IDApIHsKKwkJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImNtZF9yc3BfY29kZSIsICIweCUwNHgiLAorCQkJCSAgICAgcmVjLT50eXBlLmN0LnR5cGUucmVzcG9uc2UuY21kX3JzcF9jb2RlKTsKKwkJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInJldmlzaW9uIiwgIjB4JTAyeCIsCisJCQkJICAgICByZWMtPnR5cGUuY3QudHlwZS5yZXNwb25zZS5yZXZpc2lvbik7CisJCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJyZWFzb25fY29kZSIsICIweCUwMngiLAorCQkJCSAgICAgcmVjLT50eXBlLmN0LnR5cGUucmVzcG9uc2UucmVhc29uX2NvZGUpOworCQlsZW4gKz0KKwkJICAgIHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInJlYXNvbl9jb2RlX2V4cGwiLCAiMHglMDJ4IiwKKwkJCQkgIHJlYy0+dHlwZS5jdC50eXBlLnJlc3BvbnNlLnJlYXNvbl9jb2RlX2V4cGwpOworCQlsZW4gKz0KKwkJICAgIHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInZlbmRvcl91bmlxdWUiLCAiMHglMDJ4IiwKKwkJCQkgIHJlYy0+dHlwZS5jdC50eXBlLnJlc3BvbnNlLnZlbmRvcl91bmlxdWUpOworCQl0b3RhbCA9IHJlYy0+dHlwZS5jdC5wYXlsb2FkX3NpemU7CisJCWJ1ZmZlciA9IHJlYy0+dHlwZS5jdC5wYXlsb2FkOworCQlidWZsZW4gPSBtaW4odG90YWwsIFpGQ1BfREJGX0NUX1BBWUxPQUQpOworCX0gZWxzZSBpZiAoc3RybmNtcChyZWMtPnRhZywgIm9lbHMiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCB8fAorCQkgICBzdHJuY21wKHJlYy0+dGFnLCAicmVscyIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwIHx8CisJCSAgIHN0cm5jbXAocmVjLT50YWcsICJpZWxzIiwgWkZDUF9EQkZfVEFHX1NJWkUpID09IDApIHsKKwkJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImxzX2NvZGUiLCAiMHglMDJ4IiwKKwkJCQkgICAgIHJlYy0+dHlwZS5lbHMubHNfY29kZSk7CisJCXRvdGFsID0gcmVjLT50eXBlLmVscy5wYXlsb2FkX3NpemU7CisJCWJ1ZmZlciA9IHJlYy0+dHlwZS5lbHMucGF5bG9hZDsKKwkJYnVmbGVuID0gbWluKHRvdGFsLCBaRkNQX0RCRl9FTFNfUEFZTE9BRCk7CisJfQorCisJbGVuICs9IHpmY3BfZGJmX3ZpZXdfZHVtcChvdXRfYnVmICsgbGVuLCAicGF5bG9hZCIsCisJCQkJICBidWZmZXIsIGJ1ZmxlbiwgMCwgdG90YWwpOworCisJaWYgKGJ1ZmxlbiA9PSB0b3RhbCkKKwkJbGVuICs9IHNwcmludGYob3V0X2J1ZiArIGxlbiwgIlxuIik7CisKKwlyZXR1cm4gbGVuOworfQorCitzdHJ1Y3QgZGVidWdfdmlldyB6ZmNwX3Nhbl9kYmZfdmlldyA9IHsKKwkic3RydWN0dXJlZCIsCisJTlVMTCwKKwkmemZjcF9kYmZfdmlld19oZWFkZXIsCisJJnpmY3Bfc2FuX2RiZl92aWV3X2Zvcm1hdCwKKwlOVUxMLAorCU5VTEwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX3pmY3Bfc2NzaV9kYmZfZXZlbnRfY29tbW9uKGNvbnN0IGNoYXIgKnRhZywgY29uc3QgY2hhciAqdGFnMiwgaW50IGxldmVsLAorCQkJICAgIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgc3RydWN0IHNjc2lfY21uZCAqc2NzaV9jbW5kLAorCQkJICAgIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKm5ld19mc2ZfcmVxKQoreworCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEgPQorCSAgICAoc3RydWN0IHpmY3BfZnNmX3JlcSAqKXNjc2lfY21uZC0+aG9zdF9zY3JpYmJsZTsKKwlzdHJ1Y3QgemZjcF9zY3NpX2RiZl9yZWNvcmQgKnJlYyA9ICZhZGFwdGVyLT5zY3NpX2RiZl9idWY7CisJc3RydWN0IHpmY3BfZGJmX2R1bXAgKmR1bXAgPSAoc3RydWN0IHpmY3BfZGJmX2R1bXAgKilyZWM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZmNwX3JzcF9pdSAqZmNwX3JzcDsKKwljaGFyICpmY3BfcnNwX2luZm8gPSBOVUxMLCAqZmNwX3Nuc19pbmZvID0gTlVMTDsKKwlpbnQgb2Zmc2V0ID0gMCwgYnVmbGVuID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5zY3NpX2RiZl9sb2NrLCBmbGFncyk7CisJZG8geworCQltZW1zZXQocmVjLCAwLCBzaXplb2Yoc3RydWN0IHpmY3Bfc2NzaV9kYmZfcmVjb3JkKSk7CisJCWlmIChvZmZzZXQgPT0gMCkgeworCQkJc3RybmNweShyZWMtPnRhZywgdGFnLCBaRkNQX0RCRl9UQUdfU0laRSk7CisJCQlzdHJuY3B5KHJlYy0+dGFnMiwgdGFnMiwgWkZDUF9EQkZfVEFHX1NJWkUpOworCQkJaWYgKHNjc2lfY21uZC0+ZGV2aWNlKSB7CisJCQkJcmVjLT5zY3NpX2lkID0gc2NzaV9jbW5kLT5kZXZpY2UtPmlkOworCQkJCXJlYy0+c2NzaV9sdW4gPSBzY3NpX2NtbmQtPmRldmljZS0+bHVuOworCQkJfQorCQkJcmVjLT5zY3NpX3Jlc3VsdCA9IHNjc2lfY21uZC0+cmVzdWx0OworCQkJcmVjLT5zY3NpX2NtbmQgPSAodW5zaWduZWQgbG9uZylzY3NpX2NtbmQ7CisJCQlyZWMtPnNjc2lfc2VyaWFsID0gc2NzaV9jbW5kLT5zZXJpYWxfbnVtYmVyOworCQkJbWVtY3B5KHJlYy0+c2NzaV9vcGNvZGUsCisJCQkgICAgICAgJnNjc2lfY21uZC0+Y21uZCwKKwkJCSAgICAgICBtaW4oKGludClzY3NpX2NtbmQtPmNtZF9sZW4sCisJCQkJICAgWkZDUF9EQkZfU0NTSV9PUENPREUpKTsKKwkJCXJlYy0+c2NzaV9yZXRyaWVzID0gc2NzaV9jbW5kLT5yZXRyaWVzOworCQkJcmVjLT5zY3NpX2FsbG93ZWQgPSBzY3NpX2NtbmQtPmFsbG93ZWQ7CisJCQlpZiAoZnNmX3JlcSAhPSBOVUxMKSB7CisJCQkJZmNwX3JzcCA9IChzdHJ1Y3QgZmNwX3JzcF9pdSAqKQorCQkJCSAgICAmKGZzZl9yZXEtPnF0Y2ItPmJvdHRvbS5pby5mY3BfcnNwKTsKKwkJCQlmY3BfcnNwX2luZm8gPQorCQkJCSAgICB6ZmNwX2dldF9mY3BfcnNwX2luZm9fcHRyKGZjcF9yc3ApOworCQkJCWZjcF9zbnNfaW5mbyA9CisJCQkJICAgIHpmY3BfZ2V0X2ZjcF9zbnNfaW5mb19wdHIoZmNwX3JzcCk7CisKKwkJCQlyZWMtPnR5cGUuZmNwLnJzcF92YWxpZGl0eSA9CisJCQkJICAgIGZjcF9yc3AtPnZhbGlkaXR5LnZhbHVlOworCQkJCXJlYy0+dHlwZS5mY3AucnNwX3Njc2lfc3RhdHVzID0KKwkJCQkgICAgZmNwX3JzcC0+c2NzaV9zdGF0dXM7CisJCQkJcmVjLT50eXBlLmZjcC5yc3BfcmVzaWQgPSBmY3BfcnNwLT5mY3BfcmVzaWQ7CisJCQkJaWYgKGZjcF9yc3AtPnZhbGlkaXR5LmJpdHMuZmNwX3JzcF9sZW5fdmFsaWQpCisJCQkJCXJlYy0+dHlwZS5mY3AucnNwX2NvZGUgPQorCQkJCQkgICAgKihmY3BfcnNwX2luZm8gKyAzKTsKKwkJCQlpZiAoZmNwX3JzcC0+dmFsaWRpdHkuYml0cy5mY3Bfc25zX2xlbl92YWxpZCkgeworCQkJCQlidWZsZW4gPSBtaW4oKGludClmY3BfcnNwLT5mY3Bfc25zX2xlbiwKKwkJCQkJCSAgICAgWkZDUF9EQkZfU0NTSV9NQVhfRkNQX1NOU19JTkZPKTsKKwkJCQkJcmVjLT50eXBlLmZjcC5zbnNfaW5mb19sZW4gPSBidWZsZW47CisJCQkJCW1lbWNweShyZWMtPnR5cGUuZmNwLnNuc19pbmZvLAorCQkJCQkgICAgICAgZmNwX3Nuc19pbmZvLAorCQkJCQkgICAgICAgbWluKGJ1ZmxlbiwKKwkJCQkJCSAgIFpGQ1BfREJGX1NDU0lfRkNQX1NOU19JTkZPKSk7CisJCQkJCW9mZnNldCArPSBtaW4oYnVmbGVuLAorCQkJCQkJICAgICAgWkZDUF9EQkZfU0NTSV9GQ1BfU05TX0lORk8pOworCQkJCX0KKworCQkJCXJlYy0+ZnNmX3JlcWlkID0gKHVuc2lnbmVkIGxvbmcpZnNmX3JlcTsKKwkJCQlyZWMtPmZzZl9zZXFubyA9IGZzZl9yZXEtPnNlcV9ubzsKKwkJCQlyZWMtPmZzZl9pc3N1ZWQgPSBmc2ZfcmVxLT5pc3N1ZWQ7CisJCQl9CisJCQlpZiAobmV3X2ZzZl9yZXEgIT0gTlVMTCkgeworCQkJCXJlYy0+dHlwZS5uZXdfZnNmX3JlcS5mc2ZfcmVxaWQgPQorCQkJCSAgICAodW5zaWduZWQgbG9uZykKKwkJCQkgICAgbmV3X2ZzZl9yZXE7CisJCQkJcmVjLT50eXBlLm5ld19mc2ZfcmVxLmZzZl9zZXFubyA9CisJCQkJICAgIG5ld19mc2ZfcmVxLT5zZXFfbm87CisJCQkJcmVjLT50eXBlLm5ld19mc2ZfcmVxLmZzZl9pc3N1ZWQgPQorCQkJCSAgICBuZXdfZnNmX3JlcS0+aXNzdWVkOworCQkJfQorCQl9IGVsc2UgeworCQkJc3RybmNweShkdW1wLT50YWcsICJkdW1wIiwgWkZDUF9EQkZfVEFHX1NJWkUpOworCQkJZHVtcC0+dG90YWxfc2l6ZSA9IGJ1ZmxlbjsKKwkJCWR1bXAtPm9mZnNldCA9IG9mZnNldDsKKwkJCWR1bXAtPnNpemUgPSBtaW4oYnVmbGVuIC0gb2Zmc2V0LAorCQkJCQkgKGludClzaXplb2Yoc3RydWN0CisJCQkJCQkgICAgIHpmY3Bfc2NzaV9kYmZfcmVjb3JkKSAtCisJCQkJCSAoaW50KXNpemVvZihzdHJ1Y3QgemZjcF9kYmZfZHVtcCkpOworCQkJbWVtY3B5KGR1bXAtPmRhdGEsIGZjcF9zbnNfaW5mbyArIG9mZnNldCwgZHVtcC0+c2l6ZSk7CisJCQlvZmZzZXQgKz0gZHVtcC0+c2l6ZTsKKwkJfQorCQlkZWJ1Z19ldmVudChhZGFwdGVyLT5zY3NpX2RiZiwgbGV2ZWwsCisJCQkgICAgcmVjLCBzaXplb2Yoc3RydWN0IHpmY3Bfc2NzaV9kYmZfcmVjb3JkKSk7CisJfSB3aGlsZSAob2Zmc2V0IDwgYnVmbGVuKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5zY3NpX2RiZl9sb2NrLCBmbGFncyk7Cit9CisKK2lubGluZSB2b2lkCit6ZmNwX3Njc2lfZGJmX2V2ZW50X3Jlc3VsdChjb25zdCBjaGFyICp0YWcsIGludCBsZXZlbCwKKwkJCSAgIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICBzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtbmQpCit7CisJX3pmY3Bfc2NzaV9kYmZfZXZlbnRfY29tbW9uKCJyc2x0IiwKKwkJCQkgICAgdGFnLCBsZXZlbCwgYWRhcHRlciwgc2NzaV9jbW5kLCBOVUxMKTsKK30KKworaW5saW5lIHZvaWQKK3pmY3Bfc2NzaV9kYmZfZXZlbnRfYWJvcnQoY29uc3QgY2hhciAqdGFnLCBzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAorCQkJICBzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtbmQsCisJCQkgIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKm5ld19mc2ZfcmVxKQoreworCV96ZmNwX3Njc2lfZGJmX2V2ZW50X2NvbW1vbigiYWJydCIsCisJCQkJICAgIHRhZywgMSwgYWRhcHRlciwgc2NzaV9jbW5kLCBuZXdfZnNmX3JlcSk7Cit9CisKK2lubGluZSB2b2lkCit6ZmNwX3Njc2lfZGJmX2V2ZW50X2RldnJlc2V0KGNvbnN0IGNoYXIgKnRhZywgdTggZmxhZywgc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwKKwkJCSAgICAgc3RydWN0IHNjc2lfY21uZCAqc2NzaV9jbW5kKQoreworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSB1bml0LT5wb3J0LT5hZGFwdGVyOworCisJX3pmY3Bfc2NzaV9kYmZfZXZlbnRfY29tbW9uKGZsYWcgPT0gRkNQX1RBUkdFVF9SRVNFVCA/ICJ0cnN0IiA6ICJscnN0IiwKKwkJCQkgICAgdGFnLCAxLCBhZGFwdGVyLCBzY3NpX2NtbmQsIE5VTEwpOworfQorCitzdGF0aWMgaW50Cit6ZmNwX3Njc2lfZGJmX3ZpZXdfZm9ybWF0KGRlYnVnX2luZm9fdCAqIGlkLCBzdHJ1Y3QgZGVidWdfdmlldyAqdmlldywKKwkJCSAgY2hhciAqb3V0X2J1ZiwgY29uc3QgY2hhciAqaW5fYnVmKQoreworCXN0cnVjdCB6ZmNwX3Njc2lfZGJmX3JlY29yZCAqcmVjID0KKwkgICAgKHN0cnVjdCB6ZmNwX3Njc2lfZGJmX3JlY29yZCAqKWluX2J1ZjsKKwlpbnQgbGVuID0gMDsKKworCWlmIChzdHJuY21wKHJlYy0+dGFnLCAiZHVtcCIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKQorCQlyZXR1cm4gMDsKKworCWxlbiArPSB6ZmNwX2RiZl90YWcob3V0X2J1ZiArIGxlbiwgInRhZyIsIHJlYy0+dGFnKTsKKwlsZW4gKz0gemZjcF9kYmZfdGFnKG91dF9idWYgKyBsZW4sICJ0YWcyIiwgcmVjLT50YWcyKTsKKwlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAic2NzaV9pZCIsICIweCUwOHgiLCByZWMtPnNjc2lfaWQpOworCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJzY3NpX2x1biIsICIweCUwOHgiLAorCQkJICAgICByZWMtPnNjc2lfbHVuKTsKKwlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAic2NzaV9yZXN1bHQiLCAiMHglMDh4IiwKKwkJCSAgICAgcmVjLT5zY3NpX3Jlc3VsdCk7CisJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInNjc2lfY21uZCIsICIweCUwTHgiLAorCQkJICAgICByZWMtPnNjc2lfY21uZCk7CisJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInNjc2lfc2VyaWFsIiwgIjB4JTAxNkx4IiwKKwkJCSAgICAgcmVjLT5zY3NpX3NlcmlhbCk7CisJbGVuICs9IHpmY3BfZGJmX3ZpZXdfZHVtcChvdXRfYnVmICsgbGVuLCAic2NzaV9vcGNvZGUiLAorCQkJCSAgcmVjLT5zY3NpX29wY29kZSwKKwkJCQkgIFpGQ1BfREJGX1NDU0lfT1BDT0RFLAorCQkJCSAgMCwgWkZDUF9EQkZfU0NTSV9PUENPREUpOworCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJzY3NpX3JldHJpZXMiLCAiMHglMDJ4IiwKKwkJCSAgICAgcmVjLT5zY3NpX3JldHJpZXMpOworCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJzY3NpX2FsbG93ZWQiLCAiMHglMDJ4IiwKKwkJCSAgICAgcmVjLT5zY3NpX2FsbG93ZWQpOworCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJmc2ZfcmVxaWQiLCAiMHglMEx4IiwKKwkJCSAgICAgcmVjLT5mc2ZfcmVxaWQpOworCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJmc2Zfc2Vxbm8iLCAiMHglMDh4IiwKKwkJCSAgICAgcmVjLT5mc2Zfc2Vxbm8pOworCWxlbiArPSB6ZmNwX2RiZl9zdGNrKG91dF9idWYgKyBsZW4sICJmc2ZfaXNzdWVkIiwgcmVjLT5mc2ZfaXNzdWVkKTsKKwlpZiAoc3RybmNtcChyZWMtPnRhZywgInJzbHQiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkgeworCQlsZW4gKz0KKwkJICAgIHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImZjcF9yc3BfdmFsaWRpdHkiLCAiMHglMDJ4IiwKKwkJCQkgIHJlYy0+dHlwZS5mY3AucnNwX3ZhbGlkaXR5KTsKKwkJbGVuICs9CisJCSAgICB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJmY3BfcnNwX3Njc2lfc3RhdHVzIiwKKwkJCQkgICIweCUwMngiLCByZWMtPnR5cGUuZmNwLnJzcF9zY3NpX3N0YXR1cyk7CisJCWxlbiArPQorCQkgICAgemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAiZmNwX3JzcF9yZXNpZCIsICIweCUwOHgiLAorCQkJCSAgcmVjLT50eXBlLmZjcC5yc3BfcmVzaWQpOworCQlsZW4gKz0KKwkJICAgIHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImZjcF9yc3BfY29kZSIsICIweCUwOHgiLAorCQkJCSAgcmVjLT50eXBlLmZjcC5yc3BfY29kZSk7CisJCWxlbiArPQorCQkgICAgemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAiZmNwX3Nuc19pbmZvX2xlbiIsICIweCUwOHgiLAorCQkJCSAgcmVjLT50eXBlLmZjcC5zbnNfaW5mb19sZW4pOworCQlsZW4gKz0KKwkJICAgIHpmY3BfZGJmX3ZpZXdfZHVtcChvdXRfYnVmICsgbGVuLCAiZmNwX3Nuc19pbmZvIiwKKwkJCQkgICAgICAgcmVjLT50eXBlLmZjcC5zbnNfaW5mbywKKwkJCQkgICAgICAgbWluKChpbnQpcmVjLT50eXBlLmZjcC5zbnNfaW5mb19sZW4sCisJCQkJCSAgIFpGQ1BfREJGX1NDU0lfRkNQX1NOU19JTkZPKSwgMCwKKwkJCQkgICAgICAgcmVjLT50eXBlLmZjcC5zbnNfaW5mb19sZW4pOworCX0gZWxzZSBpZiAoc3RybmNtcChyZWMtPnRhZywgImFicnQiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkgeworCQlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAiZnNmX3JlcWlkX2Fib3J0IiwgIjB4JTBMeCIsCisJCQkJICAgICByZWMtPnR5cGUubmV3X2ZzZl9yZXEuZnNmX3JlcWlkKTsKKwkJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImZzZl9zZXFub19hYm9ydCIsICIweCUwOHgiLAorCQkJCSAgICAgcmVjLT50eXBlLm5ld19mc2ZfcmVxLmZzZl9zZXFubyk7CisJCWxlbiArPSB6ZmNwX2RiZl9zdGNrKG91dF9idWYgKyBsZW4sICJmc2ZfaXNzdWVkIiwKKwkJCQkgICAgIHJlYy0+dHlwZS5uZXdfZnNmX3JlcS5mc2ZfaXNzdWVkKTsKKwl9IGVsc2UgaWYgKChzdHJuY21wKHJlYy0+dGFnLCAidHJzdCIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKSB8fAorCQkgICAoc3RybmNtcChyZWMtPnRhZywgImxyc3QiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkpIHsKKwkJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImZzZl9yZXFpZF9yZXNldCIsICIweCUwTHgiLAorCQkJCSAgICAgcmVjLT50eXBlLm5ld19mc2ZfcmVxLmZzZl9yZXFpZCk7CisJCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJmc2Zfc2Vxbm9fcmVzZXQiLCAiMHglMDh4IiwKKwkJCQkgICAgIHJlYy0+dHlwZS5uZXdfZnNmX3JlcS5mc2Zfc2Vxbm8pOworCQlsZW4gKz0gemZjcF9kYmZfc3RjayhvdXRfYnVmICsgbGVuLCAiZnNmX2lzc3VlZCIsCisJCQkJICAgICByZWMtPnR5cGUubmV3X2ZzZl9yZXEuZnNmX2lzc3VlZCk7CisJfQorCisJbGVuICs9IHNwcmludGYob3V0X2J1ZiArIGxlbiwgIlxuIik7CisKKwlyZXR1cm4gbGVuOworfQorCitzdHJ1Y3QgZGVidWdfdmlldyB6ZmNwX3Njc2lfZGJmX3ZpZXcgPSB7CisJInN0cnVjdHVyZWQiLAorCU5VTEwsCisJJnpmY3BfZGJmX3ZpZXdfaGVhZGVyLAorCSZ6ZmNwX3Njc2lfZGJmX3ZpZXdfZm9ybWF0LAorCU5VTEwsCisJTlVMTAorfTsKKworLyoqCisgKiB6ZmNwX2FkYXB0ZXJfZGVidWdfcmVnaXN0ZXIgLSByZWdpc3RlcnMgZGVidWcgZmVhdHVyZSBmb3IgYW4gYWRhcHRlcgorICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gYWRhcHRlciBmb3Igd2hpY2ggZGVidWcgZmVhdHVyZXMgc2hvdWxkIGJlIHJlZ2lzdGVyZWQKKyAqIHJldHVybjogLUVOT01FTSBvbiBlcnJvciwgMCBvdGhlcndpc2UKKyAqLworaW50IHpmY3BfYWRhcHRlcl9kZWJ1Z19yZWdpc3RlcihzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQoreworCWNoYXIgZGJmX25hbWVbREVCVUdfTUFYX05BTUVfTEVOXTsKKworCS8qIGRlYnVnIGZlYXR1cmUgYXJlYSB3aGljaCByZWNvcmRzIHJlY292ZXJ5IGFjdGl2aXR5ICovCisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPmVycF9kYmZfbG9jayk7CisJc3ByaW50ZihkYmZfbmFtZSwgInpmY3BfJXNfZXJwIiwgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CisJYWRhcHRlci0+ZXJwX2RiZiA9IGRlYnVnX3JlZ2lzdGVyKGRiZl9uYW1lLCBkYmZzaXplLCAyLAorCQkJCQkgIHNpemVvZihzdHJ1Y3QgemZjcF9lcnBfZGJmX3JlY29yZCkpOworCWlmICghYWRhcHRlci0+ZXJwX2RiZikKKwkJZ290byBmYWlsZWQ7CisJZGVidWdfcmVnaXN0ZXJfdmlldyhhZGFwdGVyLT5lcnBfZGJmLCAmZGVidWdfaGV4X2FzY2lpX3ZpZXcpOworCWRlYnVnX3NldF9sZXZlbChhZGFwdGVyLT5lcnBfZGJmLCAzKTsKKworCS8qIGRlYnVnIGZlYXR1cmUgYXJlYSB3aGljaCByZWNvcmRzIEhCQSAoRlNGIGFuZCBRRElPKSBjb25kaXRpb25zICovCisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPmhiYV9kYmZfbG9jayk7CisJc3ByaW50ZihkYmZfbmFtZSwgInpmY3BfJXNfaGJhIiwgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CisJYWRhcHRlci0+aGJhX2RiZiA9IGRlYnVnX3JlZ2lzdGVyKGRiZl9uYW1lLCBkYmZzaXplLCAxLAorCQkJCQkgIHNpemVvZihzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZCkpOworCWlmICghYWRhcHRlci0+aGJhX2RiZikKKwkJZ290byBmYWlsZWQ7CisJZGVidWdfcmVnaXN0ZXJfdmlldyhhZGFwdGVyLT5oYmFfZGJmLCAmZGVidWdfaGV4X2FzY2lpX3ZpZXcpOworCWRlYnVnX3JlZ2lzdGVyX3ZpZXcoYWRhcHRlci0+aGJhX2RiZiwgJnpmY3BfaGJhX2RiZl92aWV3KTsKKwlkZWJ1Z19zZXRfbGV2ZWwoYWRhcHRlci0+aGJhX2RiZiwgMyk7CisKKwkvKiBkZWJ1ZyBmZWF0dXJlIGFyZWEgd2hpY2ggcmVjb3JkcyBTQU4gY29tbWFuZCBmYWlsdXJlcyBhbmQgcmVjb3ZlcnkgKi8KKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+c2FuX2RiZl9sb2NrKTsKKwlzcHJpbnRmKGRiZl9uYW1lLCAiemZjcF8lc19zYW4iLCB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKKwlhZGFwdGVyLT5zYW5fZGJmID0gZGVidWdfcmVnaXN0ZXIoZGJmX25hbWUsIGRiZnNpemUsIDEsCisJCQkJCSAgc2l6ZW9mKHN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkKSk7CisJaWYgKCFhZGFwdGVyLT5zYW5fZGJmKQorCQlnb3RvIGZhaWxlZDsKKwlkZWJ1Z19yZWdpc3Rlcl92aWV3KGFkYXB0ZXItPnNhbl9kYmYsICZkZWJ1Z19oZXhfYXNjaWlfdmlldyk7CisJZGVidWdfcmVnaXN0ZXJfdmlldyhhZGFwdGVyLT5zYW5fZGJmLCAmemZjcF9zYW5fZGJmX3ZpZXcpOworCWRlYnVnX3NldF9sZXZlbChhZGFwdGVyLT5zYW5fZGJmLCA2KTsKKworCS8qIGRlYnVnIGZlYXR1cmUgYXJlYSB3aGljaCByZWNvcmRzIFNDU0kgY29tbWFuZCBmYWlsdXJlcyBhbmQgcmVjb3ZlcnkgKi8KKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+c2NzaV9kYmZfbG9jayk7CisJc3ByaW50ZihkYmZfbmFtZSwgInpmY3BfJXNfc2NzaSIsIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOworCWFkYXB0ZXItPnNjc2lfZGJmID0gZGVidWdfcmVnaXN0ZXIoZGJmX25hbWUsIGRiZnNpemUsIDEsCisJCQkJCSAgIHNpemVvZihzdHJ1Y3QgemZjcF9zY3NpX2RiZl9yZWNvcmQpKTsKKwlpZiAoIWFkYXB0ZXItPnNjc2lfZGJmKQorCQlnb3RvIGZhaWxlZDsKKwlkZWJ1Z19yZWdpc3Rlcl92aWV3KGFkYXB0ZXItPnNjc2lfZGJmLCAmZGVidWdfaGV4X2FzY2lpX3ZpZXcpOworCWRlYnVnX3JlZ2lzdGVyX3ZpZXcoYWRhcHRlci0+c2NzaV9kYmYsICZ6ZmNwX3Njc2lfZGJmX3ZpZXcpOworCWRlYnVnX3NldF9sZXZlbChhZGFwdGVyLT5zY3NpX2RiZiwgMyk7CisKKwlyZXR1cm4gMDsKKworIGZhaWxlZDoKKwl6ZmNwX2FkYXB0ZXJfZGVidWdfdW5yZWdpc3RlcihhZGFwdGVyKTsKKworCXJldHVybiAtRU5PTUVNOworfQorCisvKioKKyAqIHpmY3BfYWRhcHRlcl9kZWJ1Z191bnJlZ2lzdGVyIC0gdW5yZWdpc3RlcnMgZGVidWcgZmVhdHVyZSBmb3IgYW4gYWRhcHRlcgorICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gYWRhcHRlciBmb3Igd2hpY2ggZGVidWcgZmVhdHVyZXMgc2hvdWxkIGJlIHVucmVnaXN0ZXJlZAorICovCit2b2lkIHpmY3BfYWRhcHRlcl9kZWJ1Z191bnJlZ2lzdGVyKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJZGVidWdfdW5yZWdpc3RlcihhZGFwdGVyLT5zY3NpX2RiZik7CisJZGVidWdfdW5yZWdpc3RlcihhZGFwdGVyLT5zYW5fZGJmKTsKKwlkZWJ1Z191bnJlZ2lzdGVyKGFkYXB0ZXItPmhiYV9kYmYpOworCWRlYnVnX3VucmVnaXN0ZXIoYWRhcHRlci0+ZXJwX2RiZik7CisJYWRhcHRlci0+c2NzaV9kYmYgPSBOVUxMOworCWFkYXB0ZXItPnNhbl9kYmYgPSBOVUxMOworCWFkYXB0ZXItPmhiYV9kYmYgPSBOVUxMOworCWFkYXB0ZXItPmVycF9kYmYgPSBOVUxMOworfQorCisjdW5kZWYgWkZDUF9MT0dfQVJFQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmgKaW5kZXggNDU1ZTkwMi4uZDgxYjczNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oCkBAIC02Niw3ICs2Niw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqIEdFTkVSQUwgREVGSU5FUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIHpmY3AgdmVyc2lvbiBudW1iZXIsIGl0IGNvbnNpc3RzIG9mIG1ham9yLCBtaW5vciwgYW5kIHBhdGNoLWxldmVsIG51bWJlciAqLwotI2RlZmluZSBaRkNQX1ZFUlNJT04JCSI0LjMuMCIKKyNkZWZpbmUgWkZDUF9WRVJTSU9OCQkiNC41LjAiCiAKIC8qKgogICogemZjcF9zZ190b19hZGRyZXNzIC0gZGV0ZXJtaW5lIGtlcm5lbCBhZGRyZXNzIGZyb20gc3RydWN0IHNjYXR0ZXJsaXN0CkBAIC0xNTQsMTMgKzE1NCwxNyBAQAogI2RlZmluZSBaRkNQX0VYQ0hBTkdFX0NPTkZJR19EQVRBX0ZJUlNUX1NMRUVQCTEwMAogI2RlZmluZSBaRkNQX0VYQ0hBTkdFX0NPTkZJR19EQVRBX1JFVFJJRVMJNwogCisvKiBSZXRyeSA1IHRpbWVzIGV2ZXJ5IDIgc2Vjb25kLCB0aGVuIGV2ZXJ5IG1pbnV0ZSAqLworI2RlZmluZSBaRkNQX0VYQ0hBTkdFX1BPUlRfREFUQV9TSE9SVF9SRVRSSUVTCTUKKyNkZWZpbmUgWkZDUF9FWENIQU5HRV9QT1JUX0RBVEFfU0hPUlRfU0xFRVAJMjAwCisjZGVmaW5lIFpGQ1BfRVhDSEFOR0VfUE9SVF9EQVRBX0xPTkdfU0xFRVAJNjAwMAorCiAvKiB0aW1lb3V0IHZhbHVlIGZvciAiZGVmYXVsdCB0aW1lciIgZm9yIGZzZiByZXF1ZXN0cyAqLwogI2RlZmluZSBaRkNQX0ZTRl9SRVFVRVNUX1RJTUVPVVQgKDYwKkhaKTsKIAogLyoqKioqKioqKioqKioqKiBGSUJSRSBDSEFOTkVMIFBST1RPQ09MIFNQRUNJRklDIERFRklORVMgKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHd3bl90OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgICAgZmNfaWRfdDsKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGZjcF9sdW5fdDsKIC8qIGRhdGEgbGVuZ3RoIGZpZWxkIG1heSBiZSBhdCB2YXJpYWJsZSBwb3NpdGlvbiBpbiBGQ1AtMiBGQ1BfQ01ORCBJVSAqLwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgICAgZmNwX2RsX3Q7CkBAIC0yODEsNiArMjg1LDE3MSBAQAogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogLyoKKyAqIERCRiBzdHVmZgorICovCisjZGVmaW5lIFpGQ1BfREJGX1RBR19TSVpFICAgICAgNAorCitzdHJ1Y3QgemZjcF9kYmZfZHVtcCB7CisJdTggdGFnW1pGQ1BfREJGX1RBR19TSVpFXTsKKwl1MzIgdG90YWxfc2l6ZTsJCS8qIHNpemUgb2YgdG90YWwgZHVtcCBkYXRhICovCisJdTMyIG9mZnNldDsJCS8qIGhvdyBtdWNoIGRhdGEgaGFzIGJlaW5nIGFscmVhZHkgZHVtcGVkICovCisJdTMyIHNpemU7CQkvKiBob3cgbXVjaCBkYXRhIGNvbWVzIHdpdGggdGhpcyByZWNvcmQgKi8KKwl1OCBkYXRhW107CQkvKiBkdW1wIGRhdGEgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBGSVhNRTogdG8gYmUgaW5mbGF0ZWQgd2hlbiByZXdvcmtpbmcgdGhlIGVycCBkYmYgKi8KK3N0cnVjdCB6ZmNwX2VycF9kYmZfcmVjb3JkIHsKKwl1OCBkdW1teVsxNl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmRfcmVzcG9uc2UgeworCXUzMiBmc2ZfY29tbWFuZDsKKwl1NjQgZnNmX3JlcWlkOworCXUzMiBmc2Zfc2Vxbm87CisJdTY0IGZzZl9pc3N1ZWQ7CisJdTMyIGZzZl9wcm90X3N0YXR1czsKKwl1MzIgZnNmX3N0YXR1czsKKwl1OCBmc2ZfcHJvdF9zdGF0dXNfcXVhbFtGU0ZfUFJPVF9TVEFUVVNfUVVBTF9TSVpFXTsKKwl1OCBmc2Zfc3RhdHVzX3F1YWxbRlNGX1NUQVRVU19RVUFMSUZJRVJfU0laRV07CisJdTMyIGZzZl9yZXFfc3RhdHVzOworCXU4IHNiYWxfZmlyc3Q7CisJdTggc2JhbF9jdXJyOworCXU4IHNiYWxfbGFzdDsKKwl1OCBwb29sOworCXU2NCBlcnBfYWN0aW9uOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXU2NCBzY3NpX2NtbmQ7CisJCQl1NjQgc2NzaV9zZXJpYWw7CisJCX0gc2VuZF9mY3A7CisJCXN0cnVjdCB7CisJCQl1NjQgd3dwbjsKKwkJCXUzMiBkX2lkOworCQkJdTMyIHBvcnRfaGFuZGxlOworCQl9IHBvcnQ7CisJCXN0cnVjdCB7CisJCQl1NjQgd3dwbjsKKwkJCXU2NCBmY3BfbHVuOworCQkJdTMyIHBvcnRfaGFuZGxlOworCQkJdTMyIGx1bl9oYW5kbGU7CisJCX0gdW5pdDsKKwkJc3RydWN0IHsKKwkJCXUzMiBkX2lkOworCQkJdTggbHNfY29kZTsKKwkJfSBzZW5kX2VsczsKKwl9IGRhdGE7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmRfc3RhdHVzIHsKKwl1OCBmYWlsZWQ7CisJdTMyIHN0YXR1c190eXBlOworCXUzMiBzdGF0dXNfc3VidHlwZTsKKwlzdHJ1Y3QgZnNmX3F1ZXVlX2Rlc2lnbmF0b3IKKwkgcXVldWVfZGVzaWduYXRvcjsKKwl1MzIgcGF5bG9hZF9zaXplOworI2RlZmluZSBaRkNQX0RCRl9VTlNPTF9QQVlMT0FECQkJCTgwCisjZGVmaW5lIFpGQ1BfREJGX1VOU09MX1BBWUxPQURfU0VOU0VfREFUQV9BVkFJTAkJMzIKKyNkZWZpbmUgWkZDUF9EQkZfVU5TT0xfUEFZTE9BRF9CSVRfRVJST1JfVEhSRVNIT0xECTU2CisjZGVmaW5lIFpGQ1BfREJGX1VOU09MX1BBWUxPQURfRkVBVFVSRV9VUERBVEVfQUxFUlQJMiAqIHNpemVvZih1MzIpCisJdTggcGF5bG9hZFtaRkNQX0RCRl9VTlNPTF9QQVlMT0FEXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZF9xZGlvIHsKKwl1MzIgc3RhdHVzOworCXUzMiBxZGlvX2Vycm9yOworCXUzMiBzaWdhX2Vycm9yOworCXU4IHNiYWxfaW5kZXg7CisJdTggc2JhbF9jb3VudDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZCB7CisJdTggdGFnW1pGQ1BfREJGX1RBR19TSVpFXTsKKwl1OCB0YWcyW1pGQ1BfREJGX1RBR19TSVpFXTsKKwl1bmlvbiB7CisJCXN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkX3Jlc3BvbnNlIHJlc3BvbnNlOworCQlzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZF9zdGF0dXMgc3RhdHVzOworCQlzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZF9xZGlvIHFkaW87CisJfSB0eXBlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkX2N0IHsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1MTYgY21kX3JlcV9jb2RlOworCQkJdTggcmV2aXNpb247CisJCQl1OCBnc190eXBlOworCQkJdTggZ3Nfc3VidHlwZTsKKwkJCXU4IG9wdGlvbnM7CisJCQl1MTYgbWF4X3Jlc19zaXplOworCQl9IHJlcXVlc3Q7CisJCXN0cnVjdCB7CisJCQl1MTYgY21kX3JzcF9jb2RlOworCQkJdTggcmV2aXNpb247CisJCQl1OCByZWFzb25fY29kZTsKKwkJCXU4IHJlYXNvbl9jb2RlX2V4cGw7CisJCQl1OCB2ZW5kb3JfdW5pcXVlOworCQl9IHJlc3BvbnNlOworCX0gdHlwZTsKKwl1MzIgcGF5bG9hZF9zaXplOworI2RlZmluZSBaRkNQX0RCRl9DVF9QQVlMT0FECTI0CisJdTggcGF5bG9hZFtaRkNQX0RCRl9DVF9QQVlMT0FEXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZF9lbHMgeworCXU4IGxzX2NvZGU7CisJdTMyIHBheWxvYWRfc2l6ZTsKKyNkZWZpbmUgWkZDUF9EQkZfRUxTX1BBWUxPQUQJMzIKKyNkZWZpbmUgWkZDUF9EQkZfRUxTX01BWF9QQVlMT0FEIDEwMjQKKwl1OCBwYXlsb2FkW1pGQ1BfREJGX0VMU19QQVlMT0FEXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZCB7CisJdTggdGFnW1pGQ1BfREJGX1RBR19TSVpFXTsKKwl1NjQgZnNmX3JlcWlkOworCXUzMiBmc2Zfc2Vxbm87CisJdTMyIHNfaWQ7CisJdTMyIGRfaWQ7CisJdW5pb24geworCQlzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZF9jdCBjdDsKKwkJc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmRfZWxzIGVsczsKKwl9IHR5cGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHpmY3Bfc2NzaV9kYmZfcmVjb3JkIHsKKwl1OCB0YWdbWkZDUF9EQkZfVEFHX1NJWkVdOworCXU4IHRhZzJbWkZDUF9EQkZfVEFHX1NJWkVdOworCXUzMiBzY3NpX2lkOworCXUzMiBzY3NpX2x1bjsKKwl1MzIgc2NzaV9yZXN1bHQ7CisJdTY0IHNjc2lfY21uZDsKKwl1NjQgc2NzaV9zZXJpYWw7CisjZGVmaW5lIFpGQ1BfREJGX1NDU0lfT1BDT0RFCTE2CisJdTggc2NzaV9vcGNvZGVbWkZDUF9EQkZfU0NTSV9PUENPREVdOworCXU4IHNjc2lfcmV0cmllczsKKwl1OCBzY3NpX2FsbG93ZWQ7CisJdTY0IGZzZl9yZXFpZDsKKwl1MzIgZnNmX3NlcW5vOworCXU2NCBmc2ZfaXNzdWVkOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXU2NCBmc2ZfcmVxaWQ7CisJCQl1MzIgZnNmX3NlcW5vOworCQkJdTY0IGZzZl9pc3N1ZWQ7CisJCX0gbmV3X2ZzZl9yZXE7CisJCXN0cnVjdCB7CisJCQl1OCByc3BfdmFsaWRpdHk7CisJCQl1OCByc3Bfc2NzaV9zdGF0dXM7CisJCQl1MzIgcnNwX3Jlc2lkOworCQkJdTggcnNwX2NvZGU7CisjZGVmaW5lIFpGQ1BfREJGX1NDU0lfRkNQX1NOU19JTkZPCTE2CisjZGVmaW5lIFpGQ1BfREJGX1NDU0lfTUFYX0ZDUF9TTlNfSU5GTwkyNTYKKwkJCXUzMiBzbnNfaW5mb19sZW47CisJCQl1OCBzbnNfaW5mb1taRkNQX0RCRl9TQ1NJX0ZDUF9TTlNfSU5GT107CisJCX0gZmNwOworCX0gdHlwZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgogICogRkMtRlMgc3R1ZmYKICAqLwogI2RlZmluZSBSX0FfVE9WCQkJCTEwIC8qIHNlY29uZHMgKi8KQEAgLTMzOSwzNCArNTA4LDYgQEAKICAqLwogI2RlZmluZSBaRkNQX0NUX1RJTUVPVVQJCQkoMyAqIFJfQV9UT1YpCiAKLQotLyoqKioqKioqKioqKioqKioqIFMzOTAgREVCVUcgRkVBVFVSRSBTUEVDSUZJQyBERUZJTkVTICoqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBkZWJ1ZyBmZWF0dXJlIGVudHJpZXMgcGVyIGFkYXB0ZXIgKi8KLSNkZWZpbmUgWkZDUF9FUlBfREJGX0lOREVYICAgICAxIAotI2RlZmluZSBaRkNQX0VSUF9EQkZfQVJFQVMgICAgIDIKLSNkZWZpbmUgWkZDUF9FUlBfREJGX0xFTkdUSCAgICAxNgotI2RlZmluZSBaRkNQX0VSUF9EQkZfTEVWRUwgICAgIDMKLSNkZWZpbmUgWkZDUF9FUlBfREJGX05BTUUgICAgICAiemZjcGVycCIKLQotI2RlZmluZSBaRkNQX0NNRF9EQkZfSU5ERVggICAgIDIKLSNkZWZpbmUgWkZDUF9DTURfREJGX0FSRUFTICAgICAxCi0jZGVmaW5lIFpGQ1BfQ01EX0RCRl9MRU5HVEggICAgOAotI2RlZmluZSBaRkNQX0NNRF9EQkZfTEVWRUwgICAgIDMKLSNkZWZpbmUgWkZDUF9DTURfREJGX05BTUUgICAgICAiemZjcGNtZCIKLQotI2RlZmluZSBaRkNQX0FCT1JUX0RCRl9JTkRFWCAgIDIKLSNkZWZpbmUgWkZDUF9BQk9SVF9EQkZfQVJFQVMgICAxCi0jZGVmaW5lIFpGQ1BfQUJPUlRfREJGX0xFTkdUSCAgOAotI2RlZmluZSBaRkNQX0FCT1JUX0RCRl9MRVZFTCAgIDYKLSNkZWZpbmUgWkZDUF9BQk9SVF9EQkZfTkFNRSAgICAiemZjcGFidCIKLQotI2RlZmluZSBaRkNQX0lOX0VMU19EQkZfSU5ERVggIDIKLSNkZWZpbmUgWkZDUF9JTl9FTFNfREJGX0FSRUFTICAxCi0jZGVmaW5lIFpGQ1BfSU5fRUxTX0RCRl9MRU5HVEggOAotI2RlZmluZSBaRkNQX0lOX0VMU19EQkZfTEVWRUwgIDYKLSNkZWZpbmUgWkZDUF9JTl9FTFNfREJGX05BTUUgICAiemZjcGVscyIKLQogLyoqKioqKioqKioqKioqKioqKioqIExPR0dJTkcgTUFDUk9TIEFORCBERUZJTkVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgpAQCAtNTAxLDYgKzY0Miw3IEBACiAjZGVmaW5lIFpGQ1BfU1RBVFVTX0FEQVBURVJfRVJQX1RIUkVBRF9LSUxMCTB4MDAwMDAwODAKICNkZWZpbmUgWkZDUF9TVEFUVVNfQURBUFRFUl9FUlBfUEVORElORwkJMHgwMDAwMDEwMAogI2RlZmluZSBaRkNQX1NUQVRVU19BREFQVEVSX0xJTktfVU5QTFVHR0VECTB4MDAwMDAyMDAKKyNkZWZpbmUgWkZDUF9TVEFUVVNfQURBUFRFUl9YUE9SVF9PSwkJMHgwMDAwMDgwMAogCiAjZGVmaW5lIFpGQ1BfU1RBVFVTX0FEQVBURVJfU0NTSV9VUAkJCVwKIAkJKFpGQ1BfU1RBVFVTX0NPTU1PTl9VTkJMT0NLRUQgfAlcCkBAIC02MzUsNDUgKzc3Nyw2IEBACiAJbWVtcG9vbF90ICpkYXRhX2dpZF9wbjsKIH07CiAKLXN0cnVjdCAgemZjcF9leGNoYW5nZV9jb25maWdfZGF0YXsKLX07Ci0KLXN0cnVjdCB6ZmNwX29wZW5fcG9ydCB7Ci0gICAgICAgIHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQ7Ci19OwotCi1zdHJ1Y3QgemZjcF9jbG9zZV9wb3J0IHsKLQlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0OwotfTsKLQotc3RydWN0IHpmY3Bfb3Blbl91bml0IHsKLQlzdHJ1Y3QgemZjcF91bml0ICp1bml0OwotfTsKLQotc3RydWN0IHpmY3BfY2xvc2VfdW5pdCB7Ci0Jc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKLX07Ci0KLXN0cnVjdCB6ZmNwX2Nsb3NlX3BoeXNpY2FsX3BvcnQgewotICAgICAgICBzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0OwotfTsKLQotc3RydWN0IHpmY3Bfc2VuZF9mY3BfY29tbWFuZF90YXNrIHsKLQlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxOwotCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQ7Ci0gCXN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21uZDsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0X2ppZmZpZXM7Ci19OwotCi1zdHJ1Y3QgemZjcF9zZW5kX2ZjcF9jb21tYW5kX3Rhc2tfbWFuYWdlbWVudCB7Ci0Jc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKLX07Ci0KLXN0cnVjdCB6ZmNwX2Fib3J0X2ZjcF9jb21tYW5kIHsKLQlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxOwotCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQ7Ci19OwotCiAvKgogICogaGVhZGVyIGZvciBDVF9JVQogICovCkBAIC03MDIsNyArODA1LDcgQEAKIC8qIEZTX0FDQyBJVSBhbmQgZGF0YSB1bml0IGZvciBHSURfUE4gbmFtZXNlcnZlciByZXF1ZXN0ICovCiBzdHJ1Y3QgY3RfaXVfZ2lkX3BuX3Jlc3AgewogCXN0cnVjdCBjdF9oZHIgaGVhZGVyOwotCWZjX2lkX3QgZF9pZDsKKwl1MzIgZF9pZDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiB0eXBlZGVmIHZvaWQgKCp6ZmNwX3NlbmRfY3RfaGFuZGxlcl90KSh1bnNpZ25lZCBsb25nKTsKQEAgLTc2OCw3ICs4NzEsNyBAQAogc3RydWN0IHpmY3Bfc2VuZF9lbHMgewogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXI7CiAJc3RydWN0IHpmY3BfcG9ydCAqcG9ydDsKLQlmY19pZF90IGRfaWQ7CisJdTMyIGRfaWQ7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpyZXE7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpyZXNwOwogCXVuc2lnbmVkIGludCByZXFfY291bnQ7CkBAIC03ODEsMzMgKzg4NCw2IEBACiAJaW50IHN0YXR1czsKIH07CiAKLXN0cnVjdCB6ZmNwX3N0YXR1c19yZWFkIHsKLQlzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlciAqYnVmZmVyOwotfTsKLQotc3RydWN0IHpmY3BfZnNmX2RvbmUgewotCXN0cnVjdCBjb21wbGV0aW9uICpjb21wbGV0ZTsKLQlpbnQgc3RhdHVzOwotfTsKLQotLyogcmVxdWVzdCBzcGVjaWZpYyBkYXRhICovCi11bmlvbiB6ZmNwX3JlcV9kYXRhIHsKLQlzdHJ1Y3QgemZjcF9leGNoYW5nZV9jb25maWdfZGF0YSBleGNoYW5nZV9jb25maWdfZGF0YTsKLQlzdHJ1Y3QgemZjcF9vcGVuX3BvcnQJCSAgb3Blbl9wb3J0OwotCXN0cnVjdCB6ZmNwX2Nsb3NlX3BvcnQJCSAgY2xvc2VfcG9ydDsKLQlzdHJ1Y3QgemZjcF9vcGVuX3VuaXQJCSAgb3Blbl91bml0OwotCXN0cnVjdCB6ZmNwX2Nsb3NlX3VuaXQJCSAgY2xvc2VfdW5pdDsKLQlzdHJ1Y3QgemZjcF9jbG9zZV9waHlzaWNhbF9wb3J0CSAgY2xvc2VfcGh5c2ljYWxfcG9ydDsKLQlzdHJ1Y3QgemZjcF9zZW5kX2ZjcF9jb21tYW5kX3Rhc2sgc2VuZF9mY3BfY29tbWFuZF90YXNrOwotICAgICAgICBzdHJ1Y3QgemZjcF9zZW5kX2ZjcF9jb21tYW5kX3Rhc2tfbWFuYWdlbWVudAotCQkJCQkgIHNlbmRfZmNwX2NvbW1hbmRfdGFza19tYW5hZ2VtZW50OwotCXN0cnVjdCB6ZmNwX2Fib3J0X2ZjcF9jb21tYW5kCSAgYWJvcnRfZmNwX2NvbW1hbmQ7Ci0Jc3RydWN0IHpmY3Bfc2VuZF9jdCAqc2VuZF9jdDsKLQlzdHJ1Y3QgemZjcF9zZW5kX2VscyAqc2VuZF9lbHM7Ci0Jc3RydWN0IHpmY3Bfc3RhdHVzX3JlYWQgCSAgc3RhdHVzX3JlYWQ7Ci0Jc3RydWN0IGZzZl9xdGNiX2JvdHRvbV9wb3J0ICpwb3J0X2RhdGE7Ci19OwotCiBzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlIHsKIAlzdHJ1Y3QgcWRpb19idWZmZXIgKmJ1ZmZlcltRRElPX01BWF9CVUZGRVJTX1BFUl9RXTsgLyogU0JBTHMgKi8KIAl1OAkJICAgZnJlZV9pbmRleDsJICAgICAgLyogaW5kZXggb2YgbmV4dCBmcmVlIGJmcgpAQCAtODM4LDIxICs5MTQsMTkgQEAKIAlhdG9taWNfdCAgICAgICAgICAgICAgICByZWZjb3VudDsgICAgICAgICAgLyogcmVmZXJlbmNlIGNvdW50ICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QJcmVtb3ZlX3dxOyAgICAgICAgIC8qIGNhbiBiZSB1c2VkIHRvIHdhaXQgZm9yCiAJCQkJCQkgICAgICByZWZjb3VudCBkcm9wIHRvIHplcm8gKi8KLQl3d25fdAkJCXd3bm47CSAgICAgICAgICAgLyogV1dOTiAqLwotCXd3bl90CQkJd3dwbjsJICAgICAgICAgICAvKiBXV1BOICovCi0JZmNfaWRfdAkJCXNfaWQ7CSAgICAgICAgICAgLyogTl9Qb3J0IElEICovCiAJd3duX3QJCQlwZWVyX3d3bm47CSAgIC8qIFAyUCBwZWVyIFdXTk4gKi8KIAl3d25fdAkJCXBlZXJfd3dwbjsJICAgLyogUDJQIHBlZXIgV1dQTiAqLwotCWZjX2lkX3QJCQlwZWVyX2RfaWQ7CSAgIC8qIFAyUCBwZWVyIERfSUQgKi8KKwl1MzIJCQlwZWVyX2RfaWQ7CSAgIC8qIFAyUCBwZWVyIERfSUQgKi8KKwl3d25fdAkJCXBoeXNpY2FsX3d3cG47ICAgICAvKiBXV1BOIG9mIHBoeXNpY2FsIHBvcnQgKi8KKwl1MzIJCQlwaHlzaWNhbF9zX2lkOyAgICAgLyogbG9jYWwgRkMgcG9ydCBJRCAqLwogCXN0cnVjdCBjY3dfZGV2aWNlICAgICAgICpjY3dfZGV2aWNlOwkgICAvKiBTLzM5MCBjY3cgZGV2aWNlICovCiAJdTgJCQlmY19zZXJ2aWNlX2NsYXNzOwogCXUzMgkJCWZjX3RvcG9sb2d5OwkgICAvKiBGQyB0b3BvbG9neSAqLwotCXUzMgkJCWZjX2xpbmtfc3BlZWQ7CSAgIC8qIEZDIGludGVyZmFjZSBzcGVlZCAqLwogCXUzMgkJCWh5ZHJhX3ZlcnNpb247CSAgIC8qIEh5ZHJhIHZlcnNpb24gKi8KIAl1MzIJCQlmc2ZfbGljX3ZlcnNpb247Ci0gICAgICAgIHUzMgkJCXN1cHBvcnRlZF9mZWF0dXJlczsvKiBvZiBGQ1AgY2hhbm5lbCAqLworCXUzMgkJCWFkYXB0ZXJfZmVhdHVyZXM7ICAvKiBGQ1AgY2hhbm5lbCBmZWF0dXJlcyAqLworCXUzMgkJCWNvbm5lY3Rpb25fZmVhdHVyZXM7IC8qIGhvc3QgY29ubmVjdGlvbiBmZWF0dXJlcyAqLwogICAgICAgICB1MzIJCQloYXJkd2FyZV92ZXJzaW9uOyAgLyogb2YgRkNQIGNoYW5uZWwgKi8KLSAgICAgICAgdTgJCQlzZXJpYWxfbnVtYmVyWzMyXTsgLyogb2YgaGFyZHdhcmUgKi8KIAlzdHJ1Y3QgU2NzaV9Ib3N0CSpzY3NpX2hvc3Q7CSAgIC8qIFBvaW50ZXIgdG8gbWlkLWxheWVyICovCiAJdW5zaWduZWQgc2hvcnQgICAgICAgICAgc2NzaV9ob3N0X25vOyAgICAgIC8qIEFzc2lnbmVkIGhvc3QgbnVtYmVyICovCiAJdW5zaWduZWQgY2hhcgkJbmFtZVs5XTsKQEAgLTg4OSwxMSArOTYzLDE4IEBACiAJdTMyCQkJZXJwX2xvd19tZW1fY291bnQ7IC8qIG5yIG9mIGVycCBhY3Rpb25zIHdhaXRpbmcKIAkJCQkJCSAgICAgIGZvciBtZW1vcnkgKi8KIAlzdHJ1Y3QgemZjcF9wb3J0CSpuYW1lc2VydmVyX3BvcnQ7ICAvKiBhZGFwdGVyJ3MgbmFtZXNlcnZlciAqLwotICAgICAgICBkZWJ1Z19pbmZvX3QgICAgICAgICAgICAqZXJwX2RiZjsgICAgICAgICAgLyogUy8zOTAgZGVidWcgZmVhdHVyZXMgKi8KLQlkZWJ1Z19pbmZvX3QgICAgICAgICAgICAqYWJvcnRfZGJmOwotCWRlYnVnX2luZm9fdCAgICAgICAgICAgICppbl9lbHNfZGJmOwotCWRlYnVnX2luZm9fdCAgICAgICAgICAgICpjbWRfZGJmOwotCXNwaW5sb2NrX3QgICAgICAgICAgICAgIGRiZl9sb2NrOworCWRlYnVnX2luZm9fdAkJKmVycF9kYmY7CisJZGVidWdfaW5mb190CQkqaGJhX2RiZjsKKwlkZWJ1Z19pbmZvX3QJCSpzYW5fZGJmOyAgICAgICAgICAvKiBkZWJ1ZyBmZWF0dXJlIGFyZWFzICovCisJZGVidWdfaW5mb190CQkqc2NzaV9kYmY7CisJc3BpbmxvY2tfdAkJZXJwX2RiZl9sb2NrOworCXNwaW5sb2NrX3QJCWhiYV9kYmZfbG9jazsKKwlzcGlubG9ja190CQlzYW5fZGJmX2xvY2s7CisJc3BpbmxvY2tfdAkJc2NzaV9kYmZfbG9jazsKKwlzdHJ1Y3QgemZjcF9lcnBfZGJmX3JlY29yZAllcnBfZGJmX2J1ZjsKKwlzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZAloYmFfZGJmX2J1ZjsKKwlzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZAlzYW5fZGJmX2J1ZjsKKwlzdHJ1Y3QgemZjcF9zY3NpX2RiZl9yZWNvcmQJc2NzaV9kYmZfYnVmOwogCXN0cnVjdCB6ZmNwX2FkYXB0ZXJfbWVtcG9vbAlwb29sOyAgICAgIC8qIEFkYXB0ZXIgbWVtb3J5IHBvb2xzICovCiAJc3RydWN0IHFkaW9faW5pdGlhbGl6ZSAgcWRpb19pbml0X2RhdGE7ICAgIC8qIGZvciBxZGlvX2VzdGFibGlzaCAqLwogCXN0cnVjdCBkZXZpY2UgICAgICAgICAgIGdlbmVyaWNfc2VydmljZXM7ICAvKiBkaXJlY3RvcnkgZm9yIFdLQSBwb3J0cyAqLwpAQCAtOTE5LDcgKzEwMDAsNyBAQAogCWF0b21pY190CSAgICAgICBzdGF0dXM7CSAgICAgICAvKiBzdGF0dXMgb2YgdGhpcyByZW1vdGUgcG9ydCAqLwogCXd3bl90CQkgICAgICAgd3dubjsJICAgICAgIC8qIFdXTk4gaWYga25vd24gKi8KIAl3d25fdAkJICAgICAgIHd3cG47CSAgICAgICAvKiBXV1BOICovCi0JZmNfaWRfdAkJICAgICAgIGRfaWQ7CSAgICAgICAvKiBEX0lEICovCisJdTMyCQkgICAgICAgZF9pZDsJICAgICAgIC8qIERfSUQgKi8KIAl1MzIJCSAgICAgICBoYW5kbGU7CSAgICAgICAvKiBoYW5kbGUgYXNzaWduZWQgYnkgRlNGICovCiAJc3RydWN0IHpmY3BfZXJwX2FjdGlvbiBlcnBfYWN0aW9uOyAgICAgLyogcGVuZGluZyBlcnJvciByZWNvdmVyeSAqLwogICAgICAgICBhdG9taWNfdCAgICAgICAgICAgICAgIGVycF9jb3VudGVyOwpAQCAtOTYzLDExICsxMDQ0LDEzIEBACiAJdTMyCQkgICAgICAgZnNmX2NvbW1hbmQ7ICAgIC8qIEZTRiBDb21tYW5kIGNvcHkgKi8KIAlzdHJ1Y3QgZnNmX3F0Y2IJICAgICAgICpxdGNiOwkgICAgICAgLyogYWRkcmVzcyBvZiBhc3NvY2lhdGVkIFFUQ0IgKi8KIAl1MzIJCSAgICAgICBzZXFfbm87ICAgICAgICAgLyogU2VxdWVuY2UgbnVtYmVyIG9mIHJlcXVlc3QgKi8KLSAgICAgICAgdW5pb24gemZjcF9yZXFfZGF0YSAgICBkYXRhOyAgICAgICAgICAgLyogSW5mbyBmaWVsZHMgb2YgcmVxdWVzdCAqLyAKKyAgICAgICAgdW5zaWduZWQgbG9uZyAgICAgICAgICBkYXRhOyAgICAgICAgICAgLyogcHJpdmF0ZSBkYXRhIG9mIHJlcXVlc3QgKi8gCiAJc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqZXJwX2FjdGlvbjsgICAgLyogdXNlZCBpZiB0aGlzIHJlcXVlc3QgaXMKIAkJCQkJCSAgaXNzdWVkIG9uIGJlaGFsZiBvZiBlcnAgKi8KIAltZW1wb29sX3QJICAgICAgICpwb29sOwkgICAgICAgLyogdXNlZCBpZiByZXF1ZXN0IHdhcyBhbGxvYWN0ZWQKIAkJCQkJCSAgZnJvbSBlbWVyZ2VuY3kgcG9vbCAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyAgICAgaXNzdWVkOyAgICAgICAgIC8qIHJlcXVlc3Qgc2VudCB0aW1lIChTVENLKSAqLworCXN0cnVjdCB6ZmNwX3VuaXQgICAgICAgKnVuaXQ7CiB9OwogCiB0eXBlZGVmIHZvaWQgemZjcF9mc2ZfcmVxX2hhbmRsZXJfdChzdHJ1Y3QgemZjcF9mc2ZfcmVxKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYwppbmRleCBjYjRmNjEyLi4wMjNmNGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKQEAgLTgyLDYgKzgyLDcgQEAKIHN0YXRpYyBpbnQgemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9vcGVuX3FkaW8oc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqKTsKIHN0YXRpYyBpbnQgemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9vcGVuX2ZzZihzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICopOwogc3RhdGljIGludCB6ZmNwX2VycF9hZGFwdGVyX3N0cmF0ZWd5X29wZW5fZnNmX3hjb25maWcoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqKTsKK3N0YXRpYyBpbnQgemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9vcGVuX2ZzZl94cG9ydChzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICopOwogc3RhdGljIGludCB6ZmNwX2VycF9hZGFwdGVyX3N0cmF0ZWd5X29wZW5fZnNmX3N0YXR1c3JlYWQoCiAJc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqKTsKIApAQCAtMzQ1LDEzICszNDYsMTMgQEAKIAogCS8qIGFjYy4gdG8gRkMtRlMsIGhhcmRfbnBvcnRfaWQgaW4gQURJU0Mgc2hvdWxkIG5vdCBiZSBzZXQgZm9yIHBvcnRzCiAJICAgd2l0aG91dCBGQy1BTC0yIGNhcGFiaWxpdHksIHNvIHdlIGRvbid0IHNldCBpdCAqLwotCWFkaXNjLT53d3BuID0gYWRhcHRlci0+d3dwbjsKLQlhZGlzYy0+d3dubiA9IGFkYXB0ZXItPnd3bm47Ci0JYWRpc2MtPm5wb3J0X2lkID0gYWRhcHRlci0+c19pZDsKKwlhZGlzYy0+d3dwbiA9IGZjX2hvc3RfcG9ydF9uYW1lKGFkYXB0ZXItPnNjc2lfaG9zdCk7CisJYWRpc2MtPnd3bm4gPSBmY19ob3N0X25vZGVfbmFtZShhZGFwdGVyLT5zY3NpX2hvc3QpOworCWFkaXNjLT5ucG9ydF9pZCA9IGZjX2hvc3RfcG9ydF9pZChhZGFwdGVyLT5zY3NpX2hvc3QpOwogCVpGQ1BfTE9HX0lORk8oIkFESVNDIHJlcXVlc3QgZnJvbSBzX2lkIDB4JTA4eCB0byBkX2lkIDB4JTA4eCAiCiAJCSAgICAgICIod3dwbj0weCUwMTZMeCwgd3dubj0weCUwMTZMeCwgIgogCQkgICAgICAiaGFyZF9ucG9ydF9pZD0weCUwOHgsIG5wb3J0X2lkPTB4JTA4eClcbiIsCi0JCSAgICAgIGFkYXB0ZXItPnNfaWQsIHNlbmRfZWxzLT5kX2lkLCAod3duX3QpIGFkaXNjLT53d3BuLAorCQkgICAgICBhZGlzYy0+bnBvcnRfaWQsIHNlbmRfZWxzLT5kX2lkLCAod3duX3QpIGFkaXNjLT53d3BuLAogCQkgICAgICAod3duX3QpIGFkaXNjLT53d25uLCBhZGlzYy0+aGFyZF9ucG9ydF9pZCwKIAkJICAgICAgYWRpc2MtPm5wb3J0X2lkKTsKIApAQCAtNDA0LDcgKzQwNSw3IEBACiAJc3RydWN0IHpmY3Bfc2VuZF9lbHMgKnNlbmRfZWxzOwogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQ7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcjsKLQlmY19pZF90IGRfaWQ7CisJdTMyIGRfaWQ7CiAJc3RydWN0IHpmY3BfbHNfYWRpc2NfYWNjICphZGlzYzsKIAogCXNlbmRfZWxzID0gKHN0cnVjdCB6ZmNwX3NlbmRfZWxzICopIGRhdGE7CkBAIC00MzUsOSArNDM2LDkgQEAKIAlaRkNQX0xPR19JTkZPKCJBRElTQyByZXNwb25zZSBmcm9tIGRfaWQgMHglMDh4IHRvIHNfaWQgIgogCQkgICAgICAiMHglMDh4ICh3d3BuPTB4JTAxNkx4LCB3d25uPTB4JTAxNkx4LCAiCiAJCSAgICAgICJoYXJkX25wb3J0X2lkPTB4JTA4eCwgbnBvcnRfaWQ9MHglMDh4KVxuIiwKLQkJICAgICAgZF9pZCwgYWRhcHRlci0+c19pZCwgKHd3bl90KSBhZGlzYy0+d3dwbiwKLQkJICAgICAgKHd3bl90KSBhZGlzYy0+d3dubiwgYWRpc2MtPmhhcmRfbnBvcnRfaWQsCi0JCSAgICAgIGFkaXNjLT5ucG9ydF9pZCk7CisJCSAgICAgIGRfaWQsIGZjX2hvc3RfcG9ydF9pZChhZGFwdGVyLT5zY3NpX2hvc3QpLAorCQkgICAgICAod3duX3QpIGFkaXNjLT53d3BuLCAod3duX3QpIGFkaXNjLT53d25uLAorCQkgICAgICBhZGlzYy0+aGFyZF9ucG9ydF9pZCwgYWRpc2MtPm5wb3J0X2lkKTsKIAogCS8qIHNldCB3d25uIGZvciBwb3J0ICovCiAJaWYgKHBvcnQtPnd3bm4gPT0gMCkKQEAgLTg4Niw3ICs4ODcsNyBAQAogemZjcF9lcnBfc3RyYXRlZ3lfY2hlY2tfZnNmcmVxKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24pCiB7CiAJaW50IHJldHZhbCA9IDA7Ci0Jc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcTsKKwlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxID0gTlVMTDsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZXJwX2FjdGlvbi0+YWRhcHRlcjsKIAogCWlmIChlcnBfYWN0aW9uLT5mc2ZfcmVxKSB7CkBAIC04OTYsNyArODk3LDcgQEAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShmc2ZfcmVxLCAmYWRhcHRlci0+ZnNmX3JlcV9saXN0X2hlYWQsIGxpc3QpCiAJCSAgICBpZiAoZnNmX3JlcSA9PSBlcnBfYWN0aW9uLT5mc2ZfcmVxKQogCQkJYnJlYWs7Ci0JCWlmIChmc2ZfcmVxID09IGVycF9hY3Rpb24tPmZzZl9yZXEpIHsKKwkJaWYgKGZzZl9yZXEgJiYgKGZzZl9yZXEtPmVycF9hY3Rpb24gPT0gZXJwX2FjdGlvbikpIHsKIAkJCS8qIGZzZl9yZXEgc3RpbGwgZXhpc3RzICovCiAJCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICJhX2NhX3JlcSIpOwogCQkJZGVidWdfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMywgJmZzZl9yZXEsCkBAIC0yMjU4LDE2ICsyMjU5LDIxIEBACiBzdGF0aWMgaW50CiB6ZmNwX2VycF9hZGFwdGVyX3N0cmF0ZWd5X29wZW5fZnNmKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24pCiB7Ci0JaW50IHJldHZhbDsKKwlpbnQgeGNvbmZpZywgeHBvcnQ7CiAKLQkvKiBkbyAnZXhjaGFuZ2UgY29uZmlndXJhdGlvbiBkYXRhJyAqLwotCXJldHZhbCA9IHpmY3BfZXJwX2FkYXB0ZXJfc3RyYXRlZ3lfb3Blbl9mc2ZfeGNvbmZpZyhlcnBfYWN0aW9uKTsKLQlpZiAocmV0dmFsID09IFpGQ1BfRVJQX0ZBSUxFRCkKLQkJcmV0dXJuIHJldHZhbDsKKwlpZiAoYXRvbWljX3Rlc3RfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX0xJTktfVU5QTFVHR0VELAorCQkJICAgICAmZXJwX2FjdGlvbi0+YWRhcHRlci0+c3RhdHVzKSkgeworCQl6ZmNwX2VycF9hZGFwdGVyX3N0cmF0ZWd5X29wZW5fZnNmX3hwb3J0KGVycF9hY3Rpb24pOworCQlhdG9taWNfc2V0KCZlcnBfYWN0aW9uLT5hZGFwdGVyLT5lcnBfY291bnRlciwgMCk7CisJCXJldHVybiBaRkNQX0VSUF9GQUlMRUQ7CisJfQogCi0JLyogc3RhcnQgdGhlIGRlc2lyZWQgbnVtYmVyIG9mIFN0YXR1cyBSZWFkcyAqLwotCXJldHZhbCA9IHpmY3BfZXJwX2FkYXB0ZXJfc3RyYXRlZ3lfb3Blbl9mc2Zfc3RhdHVzcmVhZChlcnBfYWN0aW9uKTsKLQlyZXR1cm4gcmV0dmFsOworCXhjb25maWcgPSB6ZmNwX2VycF9hZGFwdGVyX3N0cmF0ZWd5X29wZW5fZnNmX3hjb25maWcoZXJwX2FjdGlvbik7CisJeHBvcnQgICA9IHpmY3BfZXJwX2FkYXB0ZXJfc3RyYXRlZ3lfb3Blbl9mc2ZfeHBvcnQoZXJwX2FjdGlvbik7CisJaWYgKCh4Y29uZmlnID09IFpGQ1BfRVJQX0ZBSUxFRCkgfHwgKHhwb3J0ID09IFpGQ1BfRVJQX0ZBSUxFRCkpCisJCXJldHVybiBaRkNQX0VSUF9GQUlMRUQ7CisKKwlyZXR1cm4gemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9vcGVuX2ZzZl9zdGF0dXNyZWFkKGVycF9hY3Rpb24pOwogfQogCiAvKgpAQCAtMjI5MSw3ICsyMjk3LDkgQEAKIAkJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9IT1NUX0NPTl9JTklULAogCQkJCSAgJmFkYXB0ZXItPnN0YXR1cyk7CiAJCVpGQ1BfTE9HX0RFQlVHKCJEb2luZyBleGNoYW5nZSBjb25maWcgZGF0YVxuIik7CisJCXdyaXRlX2xvY2soJmFkYXB0ZXItPmVycF9sb2NrKTsKIAkJemZjcF9lcnBfYWN0aW9uX3RvX3J1bm5pbmcoZXJwX2FjdGlvbik7CisJCXdyaXRlX3VubG9jaygmYWRhcHRlci0+ZXJwX2xvY2spOwogCQl6ZmNwX2VycF90aW1lb3V0X2luaXQoZXJwX2FjdGlvbik7CiAJCWlmICh6ZmNwX2ZzZl9leGNoYW5nZV9jb25maWdfZGF0YShlcnBfYWN0aW9uKSkgewogCQkJcmV0dmFsID0gWkZDUF9FUlBfRkFJTEVEOwpAQCAtMjM0OCw2ICsyMzU2LDc2IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorc3RhdGljIGludAoremZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9vcGVuX2ZzZl94cG9ydChzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICplcnBfYWN0aW9uKQoreworCWludCByZXR2YWwgPSBaRkNQX0VSUF9TVUNDRUVERUQ7CisJaW50IHJldHJpZXM7CisJaW50IHNsZWVwOworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBlcnBfYWN0aW9uLT5hZGFwdGVyOworCisJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9YUE9SVF9PSywgJmFkYXB0ZXItPnN0YXR1cyk7CisKKwlmb3IgKHJldHJpZXMgPSAwOyA7IHJldHJpZXMrKykgeworCQlaRkNQX0xPR19ERUJVRygiRG9pbmcgZXhjaGFuZ2UgcG9ydCBkYXRhXG4iKTsKKwkJemZjcF9lcnBfYWN0aW9uX3RvX3J1bm5pbmcoZXJwX2FjdGlvbik7CisJCXpmY3BfZXJwX3RpbWVvdXRfaW5pdChlcnBfYWN0aW9uKTsKKwkJaWYgKHpmY3BfZnNmX2V4Y2hhbmdlX3BvcnRfZGF0YShlcnBfYWN0aW9uLCBhZGFwdGVyLCBOVUxMKSkgeworCQkJcmV0dmFsID0gWkZDUF9FUlBfRkFJTEVEOworCQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA1LCAiYV9mc3R4X3hmIik7CisJCQlaRkNQX0xPR19JTkZPKCJlcnJvcjogaW5pdGlhdGlvbiBvZiBleGNoYW5nZSBvZiAiCisJCQkJICAgICAgInBvcnQgZGF0YSBmYWlsZWQgZm9yIGFkYXB0ZXIgJXNcbiIsCisJCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CisJCQlicmVhazsKKwkJfQorCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDYsICJhX2ZzdHhfeG9rIik7CisJCVpGQ1BfTE9HX0RFQlVHKCJYY2hhbmdlIHVuZGVyd2F5XG4iKTsKKworCQkvKgorCQkgKiBXaHkgdGhpcyB3b3JrczoKKwkJICogQm90aCB0aGUgbm9ybWFsIGNvbXBsZXRpb24gaGFuZGxlciBhcyB3ZWxsIGFzIHRoZSB0aW1lb3V0CisJCSAqIGhhbmRsZXIgd2lsbCBkbyBhbiAndXAnIHdoZW4gdGhlICdleGNoYW5nZSBwb3J0IGRhdGEnCisJCSAqIHJlcXVlc3QgY29tcGxldGVzIG9yIHRpbWVzIG91dC4gVGh1cywgdGhlIHNpZ25hbCB0byBnbyBvbgorCQkgKiB3b24ndCBiZSBsb3N0IHV0aWxpemluZyB0aGlzIHNlbWFwaG9yZS4KKwkJICogRnVydGhlcm1vcmUsIHRoaXMgJ2FkYXB0ZXJfcmVvcGVuJyBhY3Rpb24gaXMKKwkJICogZ3VhcmFudGVlZCB0byBiZSB0aGUgb25seSBhY3Rpb24gYmVpbmcgdGhlcmUgKGhpZ2hlc3QgYWN0aW9uCisJCSAqIHdoaWNoIHByZXZlbnRzIG90aGVyIGFjdGlvbnMgZnJvbSBiZWluZyBjcmVhdGVkKS4KKwkJICogUmVzdWx0aW5nIGZyb20gdGhhdCwgdGhlIHdha2Ugc2lnbmFsIHJlY29nbml6ZWQgaGVyZQorCQkgKiBfbXVzdF8gYmUgdGhlIG9uZSBiZWxvbmdpbmcgdG8gdGhlICdleGNoYW5nZSBwb3J0CisJCSAqIGRhdGEnIHJlcXVlc3QuCisJCSAqLworCQlkb3duKCZhZGFwdGVyLT5lcnBfcmVhZHlfc2VtKTsKKwkJaWYgKGVycF9hY3Rpb24tPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0VSUF9USU1FRE9VVCkgeworCQkJWkZDUF9MT0dfSU5GTygiZXJyb3I6IGV4Y2hhbmdlIG9mIHBvcnQgZGF0YSAiCisJCQkJICAgICAgImZvciBhZGFwdGVyICVzIHRpbWVkIG91dFxuIiwKKwkJCQkgICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKCFhdG9taWNfdGVzdF9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfTElOS19VTlBMVUdHRUQsCisJCQkJICAgICAgJmFkYXB0ZXItPnN0YXR1cykpCisJCQlicmVhazsKKworCQlaRkNQX0xPR19ERUJVRygiaG9zdCBjb25uZWN0aW9uIHN0aWxsIGluaXRpYWxpc2luZy4uLiAiCisJCQkgICAgICAgIndhaXRpbmcgYW5kIHJldHJ5aW5nLi4uXG4iKTsKKwkJLyogc2xlZXAgYSBsaXR0bGUgYml0IGJlZm9yZSByZXRyeSAqLworCQlzbGVlcCA9IHJldHJpZXMgPCBaRkNQX0VYQ0hBTkdFX1BPUlRfREFUQV9TSE9SVF9SRVRSSUVTID8KKwkJCQlaRkNQX0VYQ0hBTkdFX1BPUlRfREFUQV9TSE9SVF9TTEVFUCA6CisJCQkJWkZDUF9FWENIQU5HRV9QT1JUX0RBVEFfTE9OR19TTEVFUDsKKwkJbXNsZWVwKGppZmZpZXNfdG9fbXNlY3Moc2xlZXApKTsKKwl9CisKKwlpZiAoYXRvbWljX3Rlc3RfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX0xJTktfVU5QTFVHR0VELAorCQkJICAgICAmYWRhcHRlci0+c3RhdHVzKSkgeworCQlaRkNQX0xPR19JTkZPKCJlcnJvcjogZXhjaGFuZ2Ugb2YgcG9ydCBkYXRhIGZvciAiCisJCQkgICAgICAiYWRhcHRlciAlcyBmYWlsZWRcbiIsCisJCQkgICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKKwkJcmV0dmFsID0gWkZDUF9FUlBfRkFJTEVEOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKIC8qCiAgKiBmdW5jdGlvbjoJCiAgKgpAQCAtMzE5NCwxMSArMzI3MiwxOSBAQAogCQkvKiBmYWxsIHRocm91Z2ggISEhICovCiAKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fUE9SVF9GT1JDRUQ6Ci0JCWlmIChhdG9taWNfdGVzdF9tYXNrCi0JCSAgICAoWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9JTlVTRSwgJnBvcnQtPnN0YXR1cykKLQkJICAgICYmIHBvcnQtPmVycF9hY3Rpb24uYWN0aW9uID09Ci0JCSAgICBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX1BPUlRfRk9SQ0VEKSB7Ci0JCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDQsICJwZl9hY3RlbnFfZHJwIik7CisJCWlmIChhdG9taWNfdGVzdF9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfSU5VU0UsCisJCQkJICAgICAmcG9ydC0+c3RhdHVzKSkgeworCQkJaWYgKHBvcnQtPmVycF9hY3Rpb24uYWN0aW9uICE9CisJCQkgICAgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9QT1JUX0ZPUkNFRCkgeworCQkJCVpGQ1BfTE9HX0lORk8oImRyb3BwZWQgZXJwIGFjdGlvbiAlaSAocG9ydCAiCisJCQkJCSAgICAgICIweCUwMTZMeCwgYWN0aW9uIGluIHVzZTogJWkpXG4iLAorCQkJCQkgICAgICBhY3Rpb24sIHBvcnQtPnd3cG4sCisJCQkJCSAgICAgIHBvcnQtPmVycF9hY3Rpb24uYWN0aW9uKTsKKwkJCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDQsCisJCQkJCQkgInBmX2FjdGVucV9kcnAiKTsKKwkJCX0gZWxzZSAKKwkJCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDQsCisJCQkJCQkgInBmX2FjdGVucV9kcnBjcCIpOwogCQkJZGVidWdfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNCwgJnBvcnQtPnd3cG4sCiAJCQkJICAgIHNpemVvZiAod3duX3QpKTsKIAkJCWdvdG8gb3V0OwpAQCAtMzU4OSw2ICszNjc1LDkgQEAKIAlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAoYWRhcHRlci0+Y29ubmVjdGlvbl9mZWF0dXJlcyAmIEZTRl9GRUFUVVJFX05QSVZfTU9ERSkKKwkJcmV0dXJuOworCiAJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCAiYV9hY2Nlc3NfcmVjb3ZlciIpOwogCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICZhZGFwdGVyLT5uYW1lLCA4KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmgKaW5kZXggY2Q5OGEyZC4uYzM3ODIyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oCkBAIC05Niw3ICs5Niw4IEBACiBleHRlcm4gaW50ICB6ZmNwX2ZzZl9jbG9zZV91bml0KHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKik7CiAKIGV4dGVybiBpbnQgIHpmY3BfZnNmX2V4Y2hhbmdlX2NvbmZpZ19kYXRhKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKik7Ci1leHRlcm4gaW50ICB6ZmNwX2ZzZl9leGNoYW5nZV9wb3J0X2RhdGEoc3RydWN0IHpmY3BfYWRhcHRlciAqLAorZXh0ZXJuIGludCAgemZjcF9mc2ZfZXhjaGFuZ2VfcG9ydF9kYXRhKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKiwKKwkJCQkJc3RydWN0IHpmY3BfYWRhcHRlciAqLAogCQkJCQlzdHJ1Y3QgZnNmX3F0Y2JfYm90dG9tX3BvcnQgKik7CiBleHRlcm4gaW50ICB6ZmNwX2ZzZl9jb250cm9sX2ZpbGUoc3RydWN0IHpmY3BfYWRhcHRlciAqLCBzdHJ1Y3QgemZjcF9mc2ZfcmVxICoqLAogCQkJCSAgdTMyLCB1MzIsIHN0cnVjdCB6ZmNwX3NnX2xpc3QgKik7CkBAIC0xMDksNyArMTEwLDYgQEAKIGV4dGVybiBpbnQgemZjcF9mc2Zfc2VuZF9jdChzdHJ1Y3QgemZjcF9zZW5kX2N0ICosIG1lbXBvb2xfdCAqLAogCQkJICAgIHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKik7CiBleHRlcm4gaW50IHpmY3BfZnNmX3NlbmRfZWxzKHN0cnVjdCB6ZmNwX3NlbmRfZWxzICopOwotZXh0ZXJuIGludCAgemZjcF9mc2ZfcmVxX3dhaXRfYW5kX2NsZWFudXAoc3RydWN0IHpmY3BfZnNmX3JlcSAqLCBpbnQsIHUzMiAqKTsKIGV4dGVybiBpbnQgIHpmY3BfZnNmX3NlbmRfZmNwX2NvbW1hbmRfdGFzayhzdHJ1Y3QgemZjcF9hZGFwdGVyICosCiAJCQkJCSAgIHN0cnVjdCB6ZmNwX3VuaXQgKiwKIAkJCQkJICAgc3RydWN0IHNjc2lfY21uZCAqLApAQCAtMTgyLDkgKzE4MiwyNSBAQAogZXh0ZXJuIHZvaWQgemZjcF9lcnBfdW5pdF9hY2Nlc3NfY2hhbmdlZChzdHJ1Y3QgemZjcF91bml0ICopOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogQVVYICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1leHRlcm4gdm9pZCB6ZmNwX2NtZF9kYmZfZXZlbnRfZnNmKGNvbnN0IGNoYXIgKiwgc3RydWN0IHpmY3BfZnNmX3JlcSAqLAotCQkJCSAgIHZvaWQgKiwgaW50KTsKLWV4dGVybiB2b2lkIHpmY3BfY21kX2RiZl9ldmVudF9zY3NpKGNvbnN0IGNoYXIgKiwgc3RydWN0IHNjc2lfY21uZCAqKTsKLWV4dGVybiB2b2lkIHpmY3BfaW5fZWxzX2RiZl9ldmVudChzdHJ1Y3QgemZjcF9hZGFwdGVyICosIGNvbnN0IGNoYXIgKiwKLQkJCQkgIHN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyICosIGludCk7CitleHRlcm4gdm9pZCB6ZmNwX2hiYV9kYmZfZXZlbnRfZnNmX3Jlc3BvbnNlKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7CitleHRlcm4gdm9pZCB6ZmNwX2hiYV9kYmZfZXZlbnRfZnNmX3Vuc29sKGNvbnN0IGNoYXIgKiwgc3RydWN0IHpmY3BfYWRhcHRlciAqLAorCQkJCQkgc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIgKik7CitleHRlcm4gdm9pZCB6ZmNwX2hiYV9kYmZfZXZlbnRfcWRpbyhzdHJ1Y3QgemZjcF9hZGFwdGVyICosCisJCQkJICAgIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsCisJCQkJICAgIGludCwgaW50KTsKKworZXh0ZXJuIHZvaWQgemZjcF9zYW5fZGJmX2V2ZW50X2N0X3JlcXVlc3Qoc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKK2V4dGVybiB2b2lkIHpmY3Bfc2FuX2RiZl9ldmVudF9jdF9yZXNwb25zZShzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOworZXh0ZXJuIHZvaWQgemZjcF9zYW5fZGJmX2V2ZW50X2Vsc19yZXF1ZXN0KHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7CitleHRlcm4gdm9pZCB6ZmNwX3Nhbl9kYmZfZXZlbnRfZWxzX3Jlc3BvbnNlKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7CitleHRlcm4gdm9pZCB6ZmNwX3Nhbl9kYmZfZXZlbnRfaW5jb21pbmdfZWxzKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7CisKK2V4dGVybiB2b2lkIHpmY3Bfc2NzaV9kYmZfZXZlbnRfcmVzdWx0KGNvbnN0IGNoYXIgKiwgaW50LCBzdHJ1Y3QgemZjcF9hZGFwdGVyICosCisJCQkJICAgICAgIHN0cnVjdCBzY3NpX2NtbmQgKik7CitleHRlcm4gdm9pZCB6ZmNwX3Njc2lfZGJmX2V2ZW50X2Fib3J0KGNvbnN0IGNoYXIgKiwgc3RydWN0IHpmY3BfYWRhcHRlciAqLAorCQkJCSAgICAgIHN0cnVjdCBzY3NpX2NtbmQgKiwKKwkJCQkgICAgICBzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOworZXh0ZXJuIHZvaWQgemZjcF9zY3NpX2RiZl9ldmVudF9kZXZyZXNldChjb25zdCBjaGFyICosIHU4LCBzdHJ1Y3QgemZjcF91bml0ICosCisJCQkJCSBzdHJ1Y3Qgc2NzaV9jbW5kICopOworCiAjZW5kaWYJLyogWkZDUF9FWFRfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKaW5kZXggYzAwN2I2NC4uM2IwZmMxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCkBAIC01OSw2ICs1OSw4IEBACiBzdGF0aWMgaW50IHpmY3BfZnNmX3Byb3RzdGF0dXNfZXZhbChzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOwogc3RhdGljIGludCB6ZmNwX2ZzZl9mc2ZzdGF0dXNfZXZhbChzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOwogc3RhdGljIGludCB6ZmNwX2ZzZl9mc2ZzdGF0dXNfcXVhbF9ldmFsKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7CitzdGF0aWMgdm9pZCB6ZmNwX2ZzZl9saW5rX2Rvd25faW5mb19ldmFsKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwKKwlzdHJ1Y3QgZnNmX2xpbmtfZG93bl9pbmZvICopOwogc3RhdGljIGludCB6ZmNwX2ZzZl9yZXFfZGlzcGF0Y2goc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKIHN0YXRpYyB2b2lkIHpmY3BfZnNmX3JlcV9kaXNtaXNzKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7CiAKQEAgLTI4NSw1MSArMjg3LDUxIEBACiB7CiAJaW50IHJldHZhbCA9IDA7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGZzZl9yZXEtPmFkYXB0ZXI7CisJc3RydWN0IGZzZl9xdGNiICpxdGNiID0gZnNmX3JlcS0+cXRjYjsKKwl1bmlvbiBmc2ZfcHJvdF9zdGF0dXNfcXVhbCAqcHJvdF9zdGF0dXNfcXVhbCA9CisJCSZxdGNiLT5wcmVmaXgucHJvdF9zdGF0dXNfcXVhbDsKIAotCVpGQ1BfTE9HX0RFQlVHKCJRVENCIGlzIGF0ICVwXG4iLCBmc2ZfcmVxLT5xdGNiKTsKKwl6ZmNwX2hiYV9kYmZfZXZlbnRfZnNmX3Jlc3BvbnNlKGZzZl9yZXEpOwogCiAJaWYgKGZzZl9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9ESVNNSVNTRUQpIHsKIAkJWkZDUF9MT0dfREVCVUcoImZzZl9yZXEgMHglbHggaGFzIGJlZW4gZGlzbWlzc2VkXG4iLAogCQkJICAgICAgICh1bnNpZ25lZCBsb25nKSBmc2ZfcmVxKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUiB8CiAJCQlaRkNQX1NUQVRVU19GU0ZSRVFfUkVUUlk7IC8qIG9ubHkgZm9yIFNDU0kgY21uZHMuICovCi0JCXpmY3BfY21kX2RiZl9ldmVudF9mc2YoImRpc21pc3MiLCBmc2ZfcmVxLCBOVUxMLCAwKTsKIAkJZ290byBza2lwX3Byb3RzdGF0dXM7CiAJfQogCiAJLyogbG9nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgRlNGIChpZiBhbnkpICovCi0JaWYgKHVubGlrZWx5KGZzZl9yZXEtPnF0Y2ItPmhlYWRlci5sb2dfbGVuZ3RoKSkgeworCWlmICh1bmxpa2VseShxdGNiLT5oZWFkZXIubG9nX2xlbmd0aCkpIHsKIAkJLyogZG8gbm90IHRydXN0IHRoZW0gOy0pICovCi0JCWlmIChmc2ZfcmVxLT5xdGNiLT5oZWFkZXIubG9nX3N0YXJ0ID4gc2l6ZW9mKHN0cnVjdCBmc2ZfcXRjYikpIHsKKwkJaWYgKHF0Y2ItPmhlYWRlci5sb2dfc3RhcnQgPiBzaXplb2Yoc3RydWN0IGZzZl9xdGNiKSkgewogCQkJWkZDUF9MT0dfTk9STUFMCiAJCQkgICAgKCJidWc6IFVMUCAoRlNGIGxvZ2dpbmcpIGxvZyBkYXRhIHN0YXJ0cyAiCiAJCQkgICAgICJiZXlvbmQgZW5kIG9mIHBhY2tldCBoZWFkZXIuIElnbm9yZWQuICIKIAkJCSAgICAgIihzdGFydD0laSwgc2l6ZT0lbGkpXG4iLAotCQkJICAgICBmc2ZfcmVxLT5xdGNiLT5oZWFkZXIubG9nX3N0YXJ0LAorCQkJICAgICBxdGNiLT5oZWFkZXIubG9nX3N0YXJ0LAogCQkJICAgICBzaXplb2Yoc3RydWN0IGZzZl9xdGNiKSk7CiAJCQlnb3RvIGZvcmdldF9sb2c7CiAJCX0KLQkJaWYgKChzaXplX3QpIChmc2ZfcmVxLT5xdGNiLT5oZWFkZXIubG9nX3N0YXJ0ICsKLQkJICAgICBmc2ZfcmVxLT5xdGNiLT5oZWFkZXIubG9nX2xlbmd0aCkKKwkJaWYgKChzaXplX3QpIChxdGNiLT5oZWFkZXIubG9nX3N0YXJ0ICsgcXRjYi0+aGVhZGVyLmxvZ19sZW5ndGgpCiAJCSAgICA+IHNpemVvZihzdHJ1Y3QgZnNmX3F0Y2IpKSB7CiAJCQlaRkNQX0xPR19OT1JNQUwoImJ1ZzogVUxQIChGU0YgbG9nZ2luZykgbG9nIGRhdGEgZW5kcyAiCiAJCQkJCSJiZXlvbmQgZW5kIG9mIHBhY2tldCBoZWFkZXIuIElnbm9yZWQuICIKIAkJCQkJIihzdGFydD0laSwgbGVuZ3RoPSVpLCBzaXplPSVsaSlcbiIsCi0JCQkJCWZzZl9yZXEtPnF0Y2ItPmhlYWRlci5sb2dfc3RhcnQsCi0JCQkJCWZzZl9yZXEtPnF0Y2ItPmhlYWRlci5sb2dfbGVuZ3RoLAorCQkJCQlxdGNiLT5oZWFkZXIubG9nX3N0YXJ0LAorCQkJCQlxdGNiLT5oZWFkZXIubG9nX2xlbmd0aCwKIAkJCQkJc2l6ZW9mKHN0cnVjdCBmc2ZfcXRjYikpOwogCQkJZ290byBmb3JnZXRfbG9nOwogCQl9CiAJCVpGQ1BfTE9HX1RSQUNFKCJVTFAgbG9nIGRhdGE6IFxuIik7CiAJCVpGQ1BfSEVYX0RVTVAoWkZDUF9MT0dfTEVWRUxfVFJBQ0UsCi0JCQkgICAgICAoY2hhciAqKSBmc2ZfcmVxLT5xdGNiICsKLQkJCSAgICAgIGZzZl9yZXEtPnF0Y2ItPmhlYWRlci5sb2dfc3RhcnQsCi0JCQkgICAgICBmc2ZfcmVxLT5xdGNiLT5oZWFkZXIubG9nX2xlbmd0aCk7CisJCQkgICAgICAoY2hhciAqKSBxdGNiICsgcXRjYi0+aGVhZGVyLmxvZ19zdGFydCwKKwkJCSAgICAgIHF0Y2ItPmhlYWRlci5sb2dfbGVuZ3RoKTsKIAl9CiAgZm9yZ2V0X2xvZzoKIAogCS8qIGV2YWx1YXRlIEZTRiBQcm90b2NvbCBTdGF0dXMgKi8KLQlzd2l0Y2ggKGZzZl9yZXEtPnF0Y2ItPnByZWZpeC5wcm90X3N0YXR1cykgeworCXN3aXRjaCAocXRjYi0+cHJlZml4LnByb3Rfc3RhdHVzKSB7CiAKIAljYXNlIEZTRl9QUk9UX0dPT0Q6CiAJY2FzZSBGU0ZfUFJPVF9GU0ZfU1RBVFVTX1BSRVNFTlRFRDoKQEAgLTM0MCwxNCArMzQyLDkgQEAKIAkJCQkibWljcm9jb2RlIG9mIHZlcnNpb24gMHgleCwgdGhlIGRldmljZSBkcml2ZXIgIgogCQkJCSJvbmx5IHN1cHBvcnRzIDB4JXguIEFib3J0aW5nLlxuIiwKIAkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpLAotCQkJCWZzZl9yZXEtPnF0Y2ItPnByZWZpeC5wcm90X3N0YXR1c19xdWFsLgotCQkJCXZlcnNpb25fZXJyb3IuZnNmX3ZlcnNpb24sIFpGQ1BfUVRDQl9WRVJTSU9OKTsKLQkJLyogc3RvcCBvcGVyYXRpb24gZm9yIHRoaXMgYWRhcHRlciAqLwotCQlkZWJ1Z190ZXh0X2V4Y2VwdGlvbihhZGFwdGVyLT5lcnBfZGJmLCAwLCAicHJvdF92ZXJfZXJyIik7CisJCQkJcHJvdF9zdGF0dXNfcXVhbC0+dmVyc2lvbl9lcnJvci5mc2ZfdmVyc2lvbiwKKwkJCQlaRkNQX1FUQ0JfVkVSU0lPTik7CiAJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCk7Ci0JCXpmY3BfY21kX2RiZl9ldmVudF9mc2YoInF2ZXJzZXJyIiwgZnNmX3JlcSwKLQkJCQkgICAgICAgJmZzZl9yZXEtPnF0Y2ItPnByZWZpeC5wcm90X3N0YXR1c19xdWFsLAotCQkJCSAgICAgICBzaXplb2YgKHVuaW9uIGZzZl9wcm90X3N0YXR1c19xdWFsKSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCkBAIC0zNTUsMTYgKzM1MiwxMCBAQAogCQlaRkNQX0xPR19OT1JNQUwoImJ1ZzogU2VxdWVuY2UgbnVtYmVyIG1pc21hdGNoIGJldHdlZW4gIgogCQkJCSJkcml2ZXIgKDB4JXgpIGFuZCBhZGFwdGVyICVzICgweCV4KS4gIgogCQkJCSJSZXN0YXJ0aW5nIGFsbCBvcGVyYXRpb25zIG9uIHRoaXMgYWRhcHRlci5cbiIsCi0JCQkJZnNmX3JlcS0+cXRjYi0+cHJlZml4LnJlcV9zZXFfbm8sCisJCQkJcXRjYi0+cHJlZml4LnJlcV9zZXFfbm8sCiAJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSwKLQkJCQlmc2ZfcmVxLT5xdGNiLT5wcmVmaXgucHJvdF9zdGF0dXNfcXVhbC4KLQkJCQlzZXF1ZW5jZV9lcnJvci5leHBfcmVxX3NlcV9ubyk7Ci0JCWRlYnVnX3RleHRfZXhjZXB0aW9uKGFkYXB0ZXItPmVycF9kYmYsIDAsICJwcm90X3NlcV9lcnIiKTsKLQkJLyogcmVzdGFydCBvcGVyYXRpb24gb24gdGhpcyBhZGFwdGVyICovCisJCQkJcHJvdF9zdGF0dXNfcXVhbC0+c2VxdWVuY2VfZXJyb3IuZXhwX3JlcV9zZXFfbm8pOwogCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwKTsKLQkJemZjcF9jbWRfZGJmX2V2ZW50X2ZzZigic2Vxbm9lcnIiLCBmc2ZfcmVxLAotCQkJCSAgICAgICAmZnNmX3JlcS0+cXRjYi0+cHJlZml4LnByb3Rfc3RhdHVzX3F1YWwsCi0JCQkJICAgICAgIHNpemVvZiAodW5pb24gZnNmX3Byb3Rfc3RhdHVzX3F1YWwpKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9SRVRSWTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CkBAIC0zNzUsMTE2ICszNjYsMzUgQEAKIAkJCQkidGhhdCB1c2VkIG9uIGFkYXB0ZXIgJXMuICIKIAkJCQkiU3RvcHBpbmcgYWxsIG9wZXJhdGlvbnMgb24gdGhpcyBhZGFwdGVyLlxuIiwKIAkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKLQkJZGVidWdfdGV4dF9leGNlcHRpb24oYWRhcHRlci0+ZXJwX2RiZiwgMCwgInByb3RfdW5zdXBfcXRjYiIpOwogCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDApOwotCQl6ZmNwX2NtZF9kYmZfZXZlbnRfZnNmKCJ1bnNxdGNidCIsIGZzZl9yZXEsCi0JCQkJICAgICAgICZmc2ZfcmVxLT5xdGNiLT5wcmVmaXgucHJvdF9zdGF0dXNfcXVhbCwKLQkJCQkgICAgICAgc2l6ZW9mICh1bmlvbiBmc2ZfcHJvdF9zdGF0dXNfcXVhbCkpOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIAogCWNhc2UgRlNGX1BST1RfSE9TVF9DT05ORUNUSU9OX0lOSVRJQUxJWklORzoKLQkJemZjcF9jbWRfZGJmX2V2ZW50X2ZzZigiaGNvbmluaXQiLCBmc2ZfcmVxLAotCQkJCSAgICAgICAmZnNmX3JlcS0+cXRjYi0+cHJlZml4LnByb3Rfc3RhdHVzX3F1YWwsCi0JCQkJICAgICAgIHNpemVvZiAodW5pb24gZnNmX3Byb3Rfc3RhdHVzX3F1YWwpKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfSE9TVF9DT05fSU5JVCwKIAkJCQkmKGFkYXB0ZXItPnN0YXR1cykpOwotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICJwcm90X2Nvbl9pbml0Iik7CiAJCWJyZWFrOwogCiAJY2FzZSBGU0ZfUFJPVF9EVVBMSUNBVEVfUkVRVUVTVF9JRDoKLQkJaWYgKGZzZl9yZXEtPnF0Y2IpIHsKIAkJCVpGQ1BfTE9HX05PUk1BTCgiYnVnOiBUaGUgcmVxdWVzdCBpZGVudGlmaWVyIDB4JUx4ICIKIAkJCQkJInRvIHRoZSBhZGFwdGVyICVzIGlzIGFtYmlndW91cy4gIgotCQkJCQkiU3RvcHBpbmcgYWxsIG9wZXJhdGlvbnMgb24gdGhpcyAiCi0JCQkJCSJhZGFwdGVyLlxuIiwKLQkJCQkJKih1bnNpZ25lZCBsb25nIGxvbmcgKikKLQkJCQkJKCZmc2ZfcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC4KLQkJCQkJIHJlcV9oYW5kbGUpLAorCQkJCSJTdG9wcGluZyBhbGwgb3BlcmF0aW9ucyBvbiB0aGlzIGFkYXB0ZXIuXG4iLAorCQkJCSoodW5zaWduZWQgbG9uZyBsb25nKikKKwkJCQkoJnF0Y2ItPmJvdHRvbS5zdXBwb3J0LnJlcV9oYW5kbGUpLAogCQkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKLQkJfSBlbHNlIHsKLQkJCVpGQ1BfTE9HX05PUk1BTCgiYnVnOiBUaGUgcmVxdWVzdCBpZGVudGlmaWVyICVwICIKLQkJCQkJInRvIHRoZSBhZGFwdGVyICVzIGlzIGFtYmlndW91cy4gIgotCQkJCQkiU3RvcHBpbmcgYWxsIG9wZXJhdGlvbnMgb24gdGhpcyAiCi0JCQkJCSJhZGFwdGVyLiAiCi0JCQkJCSIoYnVnOiBnb3QgdGhpcyBmb3IgYW4gdW5zb2xpY2l0ZWQgIgotCQkJCQkic3RhdHVzIHJlYWQgcmVxdWVzdClcbiIsCi0JCQkJCWZzZl9yZXEsCi0JCQkJCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwotCQl9Ci0JCWRlYnVnX3RleHRfZXhjZXB0aW9uKGFkYXB0ZXItPmVycF9kYmYsIDAsICJwcm90X2R1cF9pZCIpOwogCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDApOwotCQl6ZmNwX2NtZF9kYmZfZXZlbnRfZnNmKCJkdXByZXFpZCIsIGZzZl9yZXEsCi0JCQkJICAgICAgICZmc2ZfcmVxLT5xdGNiLT5wcmVmaXgucHJvdF9zdGF0dXNfcXVhbCwKLQkJCQkgICAgICAgc2l6ZW9mICh1bmlvbiBmc2ZfcHJvdF9zdGF0dXNfcXVhbCkpOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIAogCWNhc2UgRlNGX1BST1RfTElOS19ET1dOOgotCQkvKgotCQkgKiAndGVzdCBhbmQgc2V0JyBpcyBub3QgYXRvbWljIGhlcmUgLQotCQkgKiBpdCdzIG9rIGFzIGxvbmcgYXMgY2FsbHMgdG8gb3VyIHJlc3BvbnNlIHF1ZXVlIGhhbmRsZXIKLQkJICogKGFuZCB0aHVzIGV4ZWN1dGlvbiBvZiB0aGlzIGNvZGUgaGVyZSkgYXJlIHNlcmlhbGl6ZWQKLQkJICogYnkgdGhlIHFkaW8gbW9kdWxlCi0JCSAqLwotCQlpZiAoIWF0b21pY190ZXN0X21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9MSU5LX1VOUExVR0dFRCwKLQkJCQkgICAgICAmYWRhcHRlci0+c3RhdHVzKSkgewotCQkJc3dpdGNoIChmc2ZfcmVxLT5xdGNiLT5wcmVmaXgucHJvdF9zdGF0dXNfcXVhbC4KLQkJCQlsb2NhbGxpbmtfZXJyb3IuY29kZSkgewotCQkJY2FzZSBGU0ZfUFNRX0xJTktfTk9MSUdIVDoKLQkJCQlaRkNQX0xPR19JTkZPKCJUaGUgbG9jYWwgbGluayB0byBhZGFwdGVyICVzICIKLQkJCQkJICAgICAgImlzIGRvd24gKG5vIGxpZ2h0IGRldGVjdGVkKS5cbiIsCi0JCQkJCSAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoCi0JCQkJCQkgICAgICBhZGFwdGVyKSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEZTRl9QU1FfTElOS19XUkFQUExVRzoKLQkJCQlaRkNQX0xPR19JTkZPKCJUaGUgbG9jYWwgbGluayB0byBhZGFwdGVyICVzICIKLQkJCQkJICAgICAgImlzIGRvd24gKHdyYXAgcGx1ZyBkZXRlY3RlZCkuXG4iLAotCQkJCQkgICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKAotCQkJCQkJICAgICAgYWRhcHRlcikpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBGU0ZfUFNRX0xJTktfTk9GQ1A6Ci0JCQkJWkZDUF9MT0dfSU5GTygiVGhlIGxvY2FsIGxpbmsgdG8gYWRhcHRlciAlcyAiCi0JCQkJCSAgICAgICJpcyBkb3duIChhZGphY2VudCBub2RlIG9uICIKLQkJCQkJICAgICAgImxpbmsgZG9lcyBub3Qgc3VwcG9ydCBGQ1ApLlxuIiwKLQkJCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcigKLQkJCQkJCSAgICAgIGFkYXB0ZXIpKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJWkZDUF9MT0dfSU5GTygiVGhlIGxvY2FsIGxpbmsgdG8gYWRhcHRlciAlcyAiCi0JCQkJCSAgICAgICJpcyBkb3duICIKLQkJCQkJICAgICAgIih3YXJuaW5nOiB1bmtub3duIHJlYXNvbiAiCi0JCQkJCSAgICAgICJjb2RlKS5cbiIsCi0JCQkJCSAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoCi0JCQkJCQkgICAgICBhZGFwdGVyKSk7Ci0JCQkJYnJlYWs7Ci0KLQkJCX0KLQkJCS8qCi0JCQkgKiBEdWUgdG8gdGhlICdlcnAgZmFpbGVkJyBmbGFnIHRoZSBhZGFwdGVyIHdvbid0Ci0JCQkgKiBiZSByZWNvdmVyZWQgYnV0IHdpbGwgYmUganVzdCBzZXQgdG8gJ2Jsb2NrZWQnCi0JCQkgKiBzdGF0ZS4gQWxsIHN1Ym9yZGluYXJ5IGRldmljZXMgd2lsbCBoYXZlIHN0YXRlCi0JCQkgKiAnYmxvY2tlZCcgYW5kICdlcnAgZmFpbGVkJywgdG9vLgotCQkJICogVGh1cyB0aGUgYWRhcHRlciBpcyBzdGlsbCBhYmxlIHRvIHByb3ZpZGUKLQkJCSAqICdsaW5rIHVwJyBzdGF0dXMgd2l0aG91dCBiZWluZyBmbG9vZGVkIHdpdGgKLQkJCSAqIHJlcXVlc3RzLgotCQkJICogKG5vdGU6IGV2ZW4gJ2Nsb3NlIHBvcnQnIGlzIG5vdCBwZXJtaXR0ZWQpCi0JCQkgKi8KLQkJCVpGQ1BfTE9HX0lORk8oIlN0b3BwaW5nIGFsbCBvcGVyYXRpb25zIGZvciBhZGFwdGVyICIKLQkJCQkgICAgICAiJXMuXG4iLAotCQkJCSAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwotCQkJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfTElOS19VTlBMVUdHRUQgfAotCQkJCQlaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwKLQkJCQkJJmFkYXB0ZXItPnN0YXR1cyk7Ci0JCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwKTsKLQkJfQorCQl6ZmNwX2ZzZl9saW5rX2Rvd25faW5mb19ldmFsKGFkYXB0ZXIsCisJCQkJCSAgICAgJnByb3Rfc3RhdHVzX3F1YWwtPmxpbmtfZG93bl9pbmZvKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAKIAljYXNlIEZTRl9QUk9UX1JFRVNUX1FVRVVFOgotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDEsICJwcm90X3JlZXN0X3F1ZXVlIik7Ci0JCVpGQ1BfTE9HX0lORk8oIlRoZSBsb2NhbCBsaW5rIHRvIGFkYXB0ZXIgd2l0aCAiCisJCVpGQ1BfTE9HX05PUk1BTCgiVGhlIGxvY2FsIGxpbmsgdG8gYWRhcHRlciB3aXRoICIKIAkJCSAgICAgICIlcyB3YXMgcmUtcGx1Z2dlZC4gIgogCQkJICAgICAgIlJlLXN0YXJ0aW5nIG9wZXJhdGlvbnMgb24gdGhpcyBhZGFwdGVyLlxuIiwKIAkJCSAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwpAQCAtNDk1LDkgKzQwNSw2IEBACiAJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsCiAJCQkJCVpGQ1BfU1RBVFVTX0FEQVBURVJfTElOS19VTlBMVUdHRUQKIAkJCQkJfCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCk7Ci0JCXpmY3BfY21kX2RiZl9ldmVudF9mc2YoInJlZXN0cXVlIiwgZnNmX3JlcSwKLQkJCQkgICAgICAgJmZzZl9yZXEtPnF0Y2ItPnByZWZpeC5wcm90X3N0YXR1c19xdWFsLAotCQkJCSAgICAgICBzaXplb2YgKHVuaW9uIGZzZl9wcm90X3N0YXR1c19xdWFsKSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCkBAIC01MDcsMTIgKzQxNCw3IEBACiAJCQkJIlJlc3RhcnRpbmcgYWxsIG9wZXJhdGlvbnMgb24gdGhpcyAiCiAJCQkJImFkYXB0ZXIuXG4iLAogCQkJCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDAsICJwcm90X2Vycl9zdGEiKTsKLQkJLyogcmVzdGFydCBvcGVyYXRpb24gb24gdGhpcyBhZGFwdGVyICovCiAJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDApOwotCQl6ZmNwX2NtZF9kYmZfZXZlbnRfZnNmKCJwcm90ZXJycyIsIGZzZl9yZXEsCi0JCQkJICAgICAgICZmc2ZfcmVxLT5xdGNiLT5wcmVmaXgucHJvdF9zdGF0dXNfcXVhbCwKLQkJCQkgICAgICAgc2l6ZW9mICh1bmlvbiBmc2ZfcHJvdF9zdGF0dXNfcXVhbCkpOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX1JFVFJZOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKQEAgLTUyNCwxMSArNDI2LDcgQEAKIAkJCQkiU3RvcHBpbmcgYWxsIG9wZXJhdGlvbnMgb24gdGhpcyBhZGFwdGVyLiAiCiAJCQkJIihkZWJ1ZyBpbmZvIDB4JXgpLlxuIiwKIAkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpLAotCQkJCWZzZl9yZXEtPnF0Y2ItPnByZWZpeC5wcm90X3N0YXR1cyk7Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMCwgInByb3RfaW52YWw6Iik7Ci0JCWRlYnVnX2V4Y2VwdGlvbihhZGFwdGVyLT5lcnBfZGJmLCAwLAotCQkJCSZmc2ZfcmVxLT5xdGNiLT5wcmVmaXgucHJvdF9zdGF0dXMsCi0JCQkJc2l6ZW9mICh1MzIpKTsKKwkJCQlxdGNiLT5wcmVmaXgucHJvdF9zdGF0dXMpOwogCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDApOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCX0KQEAgLTU2OCwyOCArNDY2LDE4IEBACiAJCQkJIihkZWJ1ZyBpbmZvIDB4JXgpLlxuIiwKIAkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGZzZl9yZXEtPmFkYXB0ZXIpLAogCQkJCWZzZl9yZXEtPnF0Y2ItPmhlYWRlci5mc2ZfY29tbWFuZCk7Ci0JCWRlYnVnX3RleHRfZXhjZXB0aW9uKGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsCi0JCQkJICAgICAiZnNmX3NfdW5rbm93biIpOwogCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGZzZl9yZXEtPmFkYXB0ZXIsIDApOwotCQl6ZmNwX2NtZF9kYmZfZXZlbnRfZnNmKCJ1bmtub3duYyIsIGZzZl9yZXEsCi0JCQkJICAgICAgICZmc2ZfcmVxLT5xdGNiLT5oZWFkZXIuZnNmX3N0YXR1c19xdWFsLAotCQkJCSAgICAgICBzaXplb2YgKHVuaW9uIGZzZl9zdGF0dXNfcXVhbCkpOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIAogCWNhc2UgRlNGX0ZDUF9SU1BfQVZBSUxBQkxFOgogCQlaRkNQX0xPR19ERUJVRygiRkNQIFNlbnNlIGRhdGEgd2lsbCBiZSBwcmVzZW50ZWQgdG8gdGhlICIKIAkJCSAgICAgICAiU0NTSSBzdGFjay5cbiIpOwotCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDMsICJmc2Zfc19yc3AiKTsKIAkJYnJlYWs7CiAKIAljYXNlIEZTRl9BREFQVEVSX1NUQVRVU19BVkFJTEFCTEU6Ci0JCWRlYnVnX3RleHRfZXZlbnQoZnNmX3JlcS0+YWRhcHRlci0+ZXJwX2RiZiwgMiwgImZzZl9zX2FzdGF0dXMiKTsKIAkJemZjcF9mc2ZfZnNmc3RhdHVzX3F1YWxfZXZhbChmc2ZfcmVxKTsKIAkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlicmVhazsKIAl9CiAKICBza2lwX2ZzZnN0YXR1czoKQEAgLTYxNyw0NCArNTA1LDI4IEBACiAKIAlzd2l0Y2ggKGZzZl9yZXEtPnF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzX3F1YWwud29yZFswXSkgewogCWNhc2UgRlNGX1NRX0ZDUF9SU1BfQVZBSUxBQkxFOgotCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDQsICJmc2Zfc3FfcnNwIik7CiAJCWJyZWFrOwogCWNhc2UgRlNGX1NRX1JFVFJZX0lGX1BPU1NJQkxFOgogCQkvKiBUaGUgU0NTSS1zdGFjayBtYXkgbm93IGlzc3VlIHJldHJpZXMgb3IgZXNjYWxhdGUgKi8KLQkJZGVidWdfdGV4dF9ldmVudChmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAyLCAiZnNmX3NxX3JldHJ5Iik7Ci0JCXpmY3BfY21kX2RiZl9ldmVudF9mc2YoInNxcmV0cnkiLCBmc2ZfcmVxLAotCQkJCSAgICAgICAmZnNmX3JlcS0+cXRjYi0+aGVhZGVyLmZzZl9zdGF0dXNfcXVhbCwKLQkJCQkgICAgICAgc2l6ZW9mICh1bmlvbiBmc2Zfc3RhdHVzX3F1YWwpKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfU1FfQ09NTUFORF9BQk9SVEVEOgogCQkvKiBDYXJyeSB0aGUgYWJvcnRlZCBzdGF0ZSBvbiB0byB1cHBlciBsYXllciAqLwotCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDIsICJmc2Zfc3FfYWJvcnQiKTsKLQkJemZjcF9jbWRfZGJmX2V2ZW50X2ZzZigic3FhYm9ydCIsIGZzZl9yZXEsCi0JCQkJICAgICAgICZmc2ZfcmVxLT5xdGNiLT5oZWFkZXIuZnNmX3N0YXR1c19xdWFsLAotCQkJCSAgICAgICBzaXplb2YgKHVuaW9uIGZzZl9zdGF0dXNfcXVhbCkpOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0FCT1JURUQ7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCWNhc2UgRlNGX1NRX05PX1JFQ09NOgotCQlkZWJ1Z190ZXh0X2V4Y2VwdGlvbihmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAwLAotCQkJCSAgICAgImZzZl9zcV9ub19yZWMiKTsKIAkJWkZDUF9MT0dfTk9STUFMKCJidWc6IE5vIHJlY29tbWVuZGF0aW9uIGNvdWxkIGJlIGdpdmVuIGZvciBhIgogCQkJCSJwcm9ibGVtIG9uIHRoZSBhZGFwdGVyICVzICIKIAkJCQkiU3RvcHBpbmcgYWxsIG9wZXJhdGlvbnMgb24gdGhpcyBhZGFwdGVyLiAiLAogCQkJCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoZnNmX3JlcS0+YWRhcHRlcikpOwogCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGZzZl9yZXEtPmFkYXB0ZXIsIDApOwotCQl6ZmNwX2NtZF9kYmZfZXZlbnRfZnNmKCJzcW5yZWNvbSIsIGZzZl9yZXEsCi0JCQkJICAgICAgICZmc2ZfcmVxLT5xdGNiLT5oZWFkZXIuZnNmX3N0YXR1c19xdWFsLAotCQkJCSAgICAgICBzaXplb2YgKHVuaW9uIGZzZl9zdGF0dXNfcXVhbCkpOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIAljYXNlIEZTRl9TUV9VTFBfUFJPR1JBTU1JTkdfRVJST1I6CiAJCVpGQ1BfTE9HX05PUk1BTCgiZXJyb3I6IG5vdCBlbm91Z2ggU0JBTHMgZm9yIGRhdGEgdHJhbnNmZXIgIgogCQkJCSIoYWRhcHRlciAlcylcbiIsCiAJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihmc2ZfcmVxLT5hZGFwdGVyKSk7Ci0JCWRlYnVnX3RleHRfZXhjZXB0aW9uKGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsCi0JCQkJICAgICAiZnNmX3NxX3VscF9lcnIiKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfU1FfSU5WT0tFX0xJTktfVEVTVF9QUk9DRURVUkU6CkBAIC02NjgsMTMgKzU0MCw2IEBACiAJCVpGQ1BfSEVYX0RVTVAoWkZDUF9MT0dfTEVWRUxfTk9STUFMLAogCQkJICAgICAgKGNoYXIgKikgJmZzZl9yZXEtPnF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzX3F1YWwsCiAJCQkgICAgICBzaXplb2YgKHVuaW9uIGZzZl9zdGF0dXNfcXVhbCkpOwotCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsICJmc2Zfc3FfaW52YWw6Iik7Ci0JCWRlYnVnX2V4Y2VwdGlvbihmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAwLAotCQkJCSZmc2ZfcmVxLT5xdGNiLT5oZWFkZXIuZnNmX3N0YXR1c19xdWFsLndvcmRbMF0sCi0JCQkJc2l6ZW9mICh1MzIpKTsKLQkJemZjcF9jbWRfZGJmX2V2ZW50X2ZzZigic3F1bmRlZiIsIGZzZl9yZXEsCi0JCQkJICAgICAgICZmc2ZfcmVxLT5xdGNiLT5oZWFkZXIuZnNmX3N0YXR1c19xdWFsLAotCQkJCSAgICAgICBzaXplb2YgKHVuaW9uIGZzZl9zdGF0dXNfcXVhbCkpOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIAl9CkBAIC02ODIsNiArNTQ3LDExMCBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKKy8qKgorICogemZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbCAtIGV2YWx1YXRlIGxpbmsgZG93biBpbmZvcm1hdGlvbiBibG9jaworICovCitzdGF0aWMgdm9pZAoremZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICBzdHJ1Y3QgZnNmX2xpbmtfZG93bl9pbmZvICpsaW5rX2Rvd24pCit7CisJc3dpdGNoIChsaW5rX2Rvd24tPmVycm9yX2NvZGUpIHsKKwljYXNlIEZTRl9QU1FfTElOS19OT19MSUdIVDoKKwkJWkZDUF9MT0dfTk9STUFMKCJUaGUgbG9jYWwgbGluayB0byBhZGFwdGVyICVzIGlzIGRvd24gIgorCQkJCSIobm8gbGlnaHQgZGV0ZWN0ZWQpXG4iLAorCQkJCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOworCQlicmVhazsKKwljYXNlIEZTRl9QU1FfTElOS19XUkFQX1BMVUc6CisJCVpGQ1BfTE9HX05PUk1BTCgiVGhlIGxvY2FsIGxpbmsgdG8gYWRhcHRlciAlcyBpcyBkb3duICIKKwkJCQkiKHdyYXAgcGx1ZyBkZXRlY3RlZClcbiIsCisJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CisJCWJyZWFrOworCWNhc2UgRlNGX1BTUV9MSU5LX05PX0ZDUDoKKwkJWkZDUF9MT0dfTk9STUFMKCJUaGUgbG9jYWwgbGluayB0byBhZGFwdGVyICVzIGlzIGRvd24gIgorCQkJCSIoYWRqYWNlbnQgbm9kZSBvbiBsaW5rIGRvZXMgbm90IHN1cHBvcnQgRkNQKVxuIiwKKwkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKKwkJYnJlYWs7CisJY2FzZSBGU0ZfUFNRX0xJTktfRklSTVdBUkVfVVBEQVRFOgorCQlaRkNQX0xPR19OT1JNQUwoIlRoZSBsb2NhbCBsaW5rIHRvIGFkYXB0ZXIgJXMgaXMgZG93biAiCisJCQkJIihmaXJtd2FyZSB1cGRhdGUgaW4gcHJvZ3Jlc3MpXG4iLAorCQkJCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOworCQkJYnJlYWs7CisJY2FzZSBGU0ZfUFNRX0xJTktfSU5WQUxJRF9XV1BOOgorCQlaRkNQX0xPR19OT1JNQUwoIlRoZSBsb2NhbCBsaW5rIHRvIGFkYXB0ZXIgJXMgaXMgZG93biAiCisJCQkJIihkdXBsaWNhdGUgb3IgaW52YWxpZCBXV1BOIGRldGVjdGVkKVxuIiwKKwkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKKwkJYnJlYWs7CisJY2FzZSBGU0ZfUFNRX0xJTktfTk9fTlBJVl9TVVBQT1JUOgorCQlaRkNQX0xPR19OT1JNQUwoIlRoZSBsb2NhbCBsaW5rIHRvIGFkYXB0ZXIgJXMgaXMgZG93biAiCisJCQkJIihubyBzdXBwb3J0IGZvciBOUElWIGJ5IEZhYnJpYylcbiIsCisJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CisJCWJyZWFrOworCWNhc2UgRlNGX1BTUV9MSU5LX05PX0ZDUF9SRVNPVVJDRVM6CisJCVpGQ1BfTE9HX05PUk1BTCgiVGhlIGxvY2FsIGxpbmsgdG8gYWRhcHRlciAlcyBpcyBkb3duICIKKwkJCQkiKG91dCBvZiByZXNvdXJjZSBpbiBGQ1AgZGF1Z2h0ZXJjYXJkKVxuIiwKKwkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKKwkJYnJlYWs7CisJY2FzZSBGU0ZfUFNRX0xJTktfTk9fRkFCUklDX1JFU09VUkNFUzoKKwkJWkZDUF9MT0dfTk9STUFMKCJUaGUgbG9jYWwgbGluayB0byBhZGFwdGVyICVzIGlzIGRvd24gIgorCQkJCSIob3V0IG9mIHJlc291cmNlIGluIEZhYnJpYylcbiIsCisJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CisJCWJyZWFrOworCWNhc2UgRlNGX1BTUV9MSU5LX0ZBQlJJQ19MT0dJTl9VTkFCTEU6CisJCVpGQ1BfTE9HX05PUk1BTCgiVGhlIGxvY2FsIGxpbmsgdG8gYWRhcHRlciAlcyBpcyBkb3duICIKKwkJCQkiKHVuYWJsZSB0byBGYWJyaWMgbG9naW4pXG4iLAorCQkJCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOworCQlicmVhazsKKwljYXNlIEZTRl9QU1FfTElOS19XV1BOX0FTU0lHTk1FTlRfQ09SUlVQVEVEOgorCQlaRkNQX0xPR19OT1JNQUwoIldXUE4gYXNzaWdubWVudCBmaWxlIGNvcnJ1cHRlZCBvbiBhZGFwdGVyICVzXG4iLAorCQkJCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOworCQlicmVhazsKKwljYXNlIEZTRl9QU1FfTElOS19NT0RFX1RBQkxFX0NVUlJVUFRFRDoKKwkJWkZDUF9MT0dfTk9STUFMKCJNb2RlIHRhYmxlIGNvcnJ1cHRlZCBvbiBhZGFwdGVyICVzXG4iLAorCQkJCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOworCQlicmVhazsKKwljYXNlIEZTRl9QU1FfTElOS19OT19XV1BOX0FTU0lHTk1FTlQ6CisJCVpGQ1BfTE9HX05PUk1BTCgiTm8gV1dQTiBmb3IgYXNzaWdubWVudCB0YWJsZSBvbiBhZGFwdGVyICVzXG4iLAorCQkJCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlaRkNQX0xPR19OT1JNQUwoIlRoZSBsb2NhbCBsaW5rIHRvIGFkYXB0ZXIgJXMgaXMgZG93biAiCisJCQkJIih3YXJuaW5nOiB1bmtub3duIHJlYXNvbiBjb2RlICVkKVxuIiwKKwkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpLAorCQkJCWxpbmtfZG93bi0+ZXJyb3JfY29kZSk7CisJfQorCisJaWYgKGFkYXB0ZXItPmNvbm5lY3Rpb25fZmVhdHVyZXMgJiBGU0ZfRkVBVFVSRV9OUElWX01PREUpCisJCVpGQ1BfTE9HX0RFQlVHKCJEZWJ1ZyBpbmZvcm1hdGlvbiB0byBsaW5rIGRvd246ICIKKwkJICAgICAgICAgICAgICAgInByaW1hcnlfc3RhdHVzPTB4JTAyeCAiCisJCSAgICAgICAgICAgICAgICJpb2Vycl9jb2RlPTB4JTAyeCAiCisJCSAgICAgICAgICAgICAgICJhY3Rpb25fY29kZT0weCUwMnggIgorCQkgICAgICAgICAgICAgICAicmVhc29uX2NvZGU9MHglMDJ4ICIKKwkJICAgICAgICAgICAgICAgImV4cGxhbmF0aW9uX2NvZGU9MHglMDJ4ICIKKwkJICAgICAgICAgICAgICAgInZlbmRvcl9zcGVjaWZpY19jb2RlPTB4JTAyeFxuIiwKKwkJCQlsaW5rX2Rvd24tPnByaW1hcnlfc3RhdHVzLAorCQkJCWxpbmtfZG93bi0+aW9lcnJfY29kZSwKKwkJCQlsaW5rX2Rvd24tPmFjdGlvbl9jb2RlLAorCQkJCWxpbmtfZG93bi0+cmVhc29uX2NvZGUsCisJCQkJbGlua19kb3duLT5leHBsYW5hdGlvbl9jb2RlLAorCQkJCWxpbmtfZG93bi0+dmVuZG9yX3NwZWNpZmljX2NvZGUpOworCisJaWYgKCFhdG9taWNfdGVzdF9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfTElOS19VTlBMVUdHRUQsCisJCQkgICAgICAmYWRhcHRlci0+c3RhdHVzKSkgeworCQlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9MSU5LX1VOUExVR0dFRCwKKwkJCQkmYWRhcHRlci0+c3RhdHVzKTsKKwkJc3dpdGNoIChsaW5rX2Rvd24tPmVycm9yX2NvZGUpIHsKKwkJY2FzZSBGU0ZfUFNRX0xJTktfTk9fTElHSFQ6CisJCWNhc2UgRlNGX1BTUV9MSU5LX1dSQVBfUExVRzoKKwkJY2FzZSBGU0ZfUFNRX0xJTktfTk9fRkNQOgorCQljYXNlIEZTRl9QU1FfTElOS19GSVJNV0FSRV9VUERBVEU6CisJCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJemZjcF9lcnBfYWRhcHRlcl9mYWlsZWQoYWRhcHRlcik7CisJCX0KKwl9Cit9CisKIC8qCiAgKiBmdW5jdGlvbjoJemZjcF9mc2ZfcmVxX2Rpc3BhdGNoCiAgKgpAQCAtNjk2LDExICs2NjUsNiBAQAogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBmc2ZfcmVxLT5hZGFwdGVyOwogCWludCByZXR2YWwgPSAwOwogCi0JaWYgKHVubGlrZWx5KGZzZl9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUikpIHsKLQkJWkZDUF9MT0dfVFJBQ0UoImZzZl9yZXE9JXAsIFFUQ0I9JXBcbiIsIGZzZl9yZXEsIGZzZl9yZXEtPnF0Y2IpOwotCQlaRkNQX0hFWF9EVU1QKFpGQ1BfTE9HX0xFVkVMX1RSQUNFLAotCQkJICAgICAgKGNoYXIgKikgZnNmX3JlcS0+cXRjYiwgc2l6ZW9mKHN0cnVjdCBmc2ZfcXRjYikpOwotCX0KIAogCXN3aXRjaCAoZnNmX3JlcS0+ZnNmX2NvbW1hbmQpIHsKIApAQCAtNzYwLDEzICs3MjQsMTMgQEAKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJWkZDUF9MT0dfTk9STUFMKCJidWc6IENvbW1hbmQgaXNzdWVkIGJ5IHRoZSBkZXZpY2UgZHJpdmVyIGlzICIKIAkJCQkibm90IHN1cHBvcnRlZCBieSB0aGUgYWRhcHRlciAlc1xuIiwKLQkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGZzZl9yZXEtPmFkYXB0ZXIpKTsKKwkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKIAkJaWYgKGZzZl9yZXEtPmZzZl9jb21tYW5kICE9IGZzZl9yZXEtPnF0Y2ItPmhlYWRlci5mc2ZfY29tbWFuZCkKIAkJCVpGQ1BfTE9HX05PUk1BTAogCQkJICAgICgiYnVnOiBDb21tYW5kIGlzc3VlZCBieSB0aGUgZGV2aWNlIGRyaXZlciBkaWZmZXJzICIKIAkJCSAgICAgImZyb20gdGhlIGNvbW1hbmQgcmV0dXJuZWQgYnkgdGhlIGFkYXB0ZXIgJXMgIgogCQkJICAgICAiKGRlYnVnIGluZm8gMHgleCwgMHgleCkuXG4iLAotCQkJICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGZzZl9yZXEtPmFkYXB0ZXIpLAorCQkJICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpLAogCQkJICAgICBmc2ZfcmVxLT5mc2ZfY29tbWFuZCwKIAkJCSAgICAgZnNmX3JlcS0+cXRjYi0+aGVhZGVyLmZzZl9jb21tYW5kKTsKIAl9CkBAIC03NzQsOCArNzM4LDYgQEAKIAlpZiAoIWVycF9hY3Rpb24pCiAJCXJldHVybiByZXR2YWw7CiAKLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICJhX2ZyaCIpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICZlcnBfYWN0aW9uLT5hY3Rpb24sIHNpemVvZiAoaW50KSk7CiAJemZjcF9lcnBfYXN5bmNfaGFuZGxlcihlcnBfYWN0aW9uLCAwKTsKIAogCXJldHVybiByZXR2YWw7CkBAIC04MjEsNyArNzgzLDcgQEAKIAkJZ290byBmYWlsZWRfYnVmOwogCX0KIAltZW1zZXQoc3RhdHVzX2J1ZmZlciwgMCwgc2l6ZW9mIChzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlcikpOwotCWZzZl9yZXEtPmRhdGEuc3RhdHVzX3JlYWQuYnVmZmVyID0gc3RhdHVzX2J1ZmZlcjsKKwlmc2ZfcmVxLT5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHN0YXR1c19idWZmZXI7CiAKIAkvKiBpbnNlcnQgcG9pbnRlciB0byByZXNwZWN0aXZlIGJ1ZmZlciAqLwogCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX2N1cnIoZnNmX3JlcSk7CkBAIC04NDYsNiArODA4LDcgQEAKICBmYWlsZWRfYnVmOgogCXpmY3BfZnNmX3JlcV9mcmVlKGZzZl9yZXEpOwogIGZhaWxlZF9yZXFfY3JlYXRlOgorCXpmY3BfaGJhX2RiZl9ldmVudF9mc2ZfdW5zb2woImZhaWwiLCBhZGFwdGVyLCBOVUxMKTsKICBvdXQ6CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnJlcXVlc3RfcXVldWUucXVldWVfbG9jaywgbG9ja19mbGFncyk7CiAJcmV0dXJuIHJldHZhbDsKQEAgLTg1OSw3ICs4MjIsNyBAQAogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXN0YXR1c19idWZmZXIgPSBmc2ZfcmVxLT5kYXRhLnN0YXR1c19yZWFkLmJ1ZmZlcjsKKwlzdGF0dXNfYnVmZmVyID0gKHN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyICopIGZzZl9yZXEtPmRhdGE7CiAJYWRhcHRlciA9IGZzZl9yZXEtPmFkYXB0ZXI7CiAKIAlyZWFkX2xvY2tfaXJxc2F2ZSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrLCBmbGFncyk7CkBAIC05MTgsMzggKzg4MSwzMyBAQAogCWludCByZXR2YWwgPSAwOwogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBmc2ZfcmVxLT5hZGFwdGVyOwogCXN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyICpzdGF0dXNfYnVmZmVyID0KLQkgICAgZnNmX3JlcS0+ZGF0YS5zdGF0dXNfcmVhZC5idWZmZXI7CisJCShzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlciAqKSBmc2ZfcmVxLT5kYXRhOwogCiAJaWYgKGZzZl9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9ESVNNSVNTRUQpIHsKKwkJemZjcF9oYmFfZGJmX2V2ZW50X2ZzZl91bnNvbCgiZGlzbSIsIGFkYXB0ZXIsIHN0YXR1c19idWZmZXIpOwogCQltZW1wb29sX2ZyZWUoc3RhdHVzX2J1ZmZlciwgYWRhcHRlci0+cG9vbC5kYXRhX3N0YXR1c19yZWFkKTsKIAkJemZjcF9mc2ZfcmVxX2ZyZWUoZnNmX3JlcSk7CiAJCWdvdG8gb3V0OwogCX0KIAorCXpmY3BfaGJhX2RiZl9ldmVudF9mc2ZfdW5zb2woInJlYWQiLCBhZGFwdGVyLCBzdGF0dXNfYnVmZmVyKTsKKwogCXN3aXRjaCAoc3RhdHVzX2J1ZmZlci0+c3RhdHVzX3R5cGUpIHsKIAogCWNhc2UgRlNGX1NUQVRVU19SRUFEX1BPUlRfQ0xPU0VEOgotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICJ1bnNvbF9wY2xvc2VkOiIpOwotCQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLAotCQkJICAgICZzdGF0dXNfYnVmZmVyLT5kX2lkLCBzaXplb2YgKHUzMikpOwogCQl6ZmNwX2ZzZl9zdGF0dXNfcmVhZF9wb3J0X2Nsb3NlZChmc2ZfcmVxKTsKIAkJYnJlYWs7CiAKIAljYXNlIEZTRl9TVEFUVVNfUkVBRF9JTkNPTUlOR19FTFM6Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMywgInVuc29sX2VsczoiKTsKIAkJemZjcF9mc2ZfaW5jb21pbmdfZWxzKGZzZl9yZXEpOwogCQlicmVhazsKIAogCWNhc2UgRlNGX1NUQVRVU19SRUFEX1NFTlNFX0RBVEFfQVZBSUw6Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMywgInVuc29sX3NlbnNlOiIpOwogCQlaRkNQX0xPR19JTkZPKCJ1bnNvbGljaXRlZCBzZW5zZSBkYXRhIHJlY2VpdmVkIChhZGFwdGVyICVzKVxuIiwKIAkJCSAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwotICAgICAgICAgICAgICAgIFpGQ1BfSEVYX0RVTVAoWkZDUF9MT0dfTEVWRUxfTk9STUFMLCAoY2hhciAqKSBzdGF0dXNfYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyKSk7CiAJCWJyZWFrOwogCiAJY2FzZSBGU0ZfU1RBVFVTX1JFQURfQklUX0VSUk9SX1RIUkVTSE9MRDoKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCAidW5zb2xfYml0X2VycjoiKTsKIAkJWkZDUF9MT0dfTk9STUFMKCJCaXQgZXJyb3IgdGhyZXNob2xkIGRhdGEgcmVjZWl2ZWQ6XG4iKTsKIAkJWkZDUF9IRVhfRFVNUChaRkNQX0xPR19MRVZFTF9OT1JNQUwsCiAJCQkgICAgICAoY2hhciAqKSBzdGF0dXNfYnVmZmVyLApAQCAtOTU3LDE3ICs5MTUsMzIgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEZTRl9TVEFUVVNfUkVBRF9MSU5LX0RPV046Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMCwgInVuc29sX2xpbmtfZG93bjoiKTsKLQkJWkZDUF9MT0dfSU5GTygiTG9jYWwgbGluayB0byBhZGFwdGVyICVzIGlzIGRvd25cbiIsCisJCXN3aXRjaCAoc3RhdHVzX2J1ZmZlci0+c3RhdHVzX3N1YnR5cGUpIHsKKwkJY2FzZSBGU0ZfU1RBVFVTX1JFQURfU1VCX05PX1BIWVNJQ0FMX0xJTks6CisJCQlaRkNQX0xPR19JTkZPKCJQaHlzaWNhbCBsaW5rIHRvIGFkYXB0ZXIgJXMgaXMgZG93blxuIiwKKwkJCQkgICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKKwkJCWJyZWFrOworCQljYXNlIEZTRl9TVEFUVVNfUkVBRF9TVUJfRkRJU0NfRkFJTEVEOgorCQkJWkZDUF9MT0dfSU5GTygiTG9jYWwgbGluayB0byBhZGFwdGVyICVzIGlzIGRvd24gIgorCQkJCSAgICAgICJkdWUgdG8gZmFpbGVkIEZESVNDIGxvZ2luXG4iLAogCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7Ci0JCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX0xJTktfVU5QTFVHR0VELAotCQkJCSZhZGFwdGVyLT5zdGF0dXMpOwotCQl6ZmNwX2VycF9hZGFwdGVyX2ZhaWxlZChhZGFwdGVyKTsKKwkJCWJyZWFrOworCQljYXNlIEZTRl9TVEFUVVNfUkVBRF9TVUJfRklSTVdBUkVfVVBEQVRFOgorCQkJWkZDUF9MT0dfSU5GTygiTG9jYWwgbGluayB0byBhZGFwdGVyICVzIGlzIGRvd24gIgorCQkJCSAgICAgICJkdWUgdG8gZmlybXdhcmUgdXBkYXRlIG9uIGFkYXB0ZXJcbiIsCisJCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVpGQ1BfTE9HX0lORk8oIkxvY2FsIGxpbmsgdG8gYWRhcHRlciAlcyBpcyBkb3duICIKKwkJCQkgICAgICAiZHVlIHRvIHVua25vd24gcmVhc29uXG4iLAorCQkJCSAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOworCQl9OworCQl6ZmNwX2ZzZl9saW5rX2Rvd25faW5mb19ldmFsKGFkYXB0ZXIsCisJCQkoc3RydWN0IGZzZl9saW5rX2Rvd25faW5mbyAqKSAmc3RhdHVzX2J1ZmZlci0+cGF5bG9hZCk7CiAJCWJyZWFrOwogCiAJY2FzZSBGU0ZfU1RBVFVTX1JFQURfTElOS19VUDoKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAyLCAidW5zb2xfbGlua191cDoiKTsKLQkJWkZDUF9MT0dfSU5GTygiTG9jYWwgbGluayB0byBhZGFwdGVyICVzIHdhcyByZXBsdWdnZWQuICIKKwkJWkZDUF9MT0dfTk9STUFMKCJMb2NhbCBsaW5rIHRvIGFkYXB0ZXIgJXMgd2FzIHJlcGx1Z2dlZC4gIgogCQkJICAgICAgIlJlc3RhcnRpbmcgb3BlcmF0aW9ucyBvbiB0aGlzIGFkYXB0ZXJcbiIsCiAJCQkgICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKIAkJLyogQWxsIHBvcnRzIHNob3VsZCBiZSBtYXJrZWQgYXMgcmVhZHkgdG8gcnVuIGFnYWluICovCkBAIC05ODAsMzUgKzk1Myw0MCBAQAogCQlicmVhazsKIAogCWNhc2UgRlNGX1NUQVRVU19SRUFEX0NGRENfVVBEQVRFRDoKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAyLCAidW5zb2xfY2ZkY191cGRhdGU6Iik7Ci0JCVpGQ1BfTE9HX0lORk8oIkNGREMgaGFzIGJlZW4gdXBkYXRlZCBvbiB0aGUgYWRhcHRlciAlc1xuIiwKKwkJWkZDUF9MT0dfTk9STUFMKCJDRkRDIGhhcyBiZWVuIHVwZGF0ZWQgb24gdGhlIGFkYXB0ZXIgJXNcbiIsCiAJCQkgICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKIAkJemZjcF9lcnBfYWRhcHRlcl9hY2Nlc3NfY2hhbmdlZChhZGFwdGVyKTsKIAkJYnJlYWs7CiAKIAljYXNlIEZTRl9TVEFUVVNfUkVBRF9DRkRDX0hBUkRFTkVEOgotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDIsICJ1bnNvbF9jZmRjX2hhcmRlbjoiKTsKIAkJc3dpdGNoIChzdGF0dXNfYnVmZmVyLT5zdGF0dXNfc3VidHlwZSkgewogCQljYXNlIEZTRl9TVEFUVVNfUkVBRF9TVUJfQ0ZEQ19IQVJERU5FRF9PTl9TRToKLQkJCVpGQ1BfTE9HX0lORk8oIkNGREMgb2YgYWRhcHRlciAlcyBzYXZlZCBvbiBTRVxuIiwKKwkJCVpGQ1BfTE9HX05PUk1BTCgiQ0ZEQyBvZiBhZGFwdGVyICVzIHNhdmVkIG9uIFNFXG4iLAogCQkJCSAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwogCQkJYnJlYWs7CiAJCWNhc2UgRlNGX1NUQVRVU19SRUFEX1NVQl9DRkRDX0hBUkRFTkVEX09OX1NFMjoKLQkJCVpGQ1BfTE9HX0lORk8oIkNGREMgb2YgYWRhcHRlciAlcyBoYXMgYmVlbiBjb3BpZWQgIgorCQkJWkZDUF9MT0dfTk9STUFMKCJDRkRDIG9mIGFkYXB0ZXIgJXMgaGFzIGJlZW4gY29waWVkICIKIAkJCQkgICAgICAidG8gdGhlIHNlY29uZGFyeSBTRVxuIiwKIAkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJWkZDUF9MT0dfSU5GTygiQ0ZEQyBvZiBhZGFwdGVyICVzIGhhcyBiZWVuIGhhcmRlbmVkXG4iLAorCQkJWkZDUF9MT0dfTk9STUFMKCJDRkRDIG9mIGFkYXB0ZXIgJXMgaGFzIGJlZW4gaGFyZGVuZWRcbiIsCiAJCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CiAJCX0KIAkJYnJlYWs7CiAKKwljYXNlIEZTRl9TVEFUVVNfUkVBRF9GRUFUVVJFX1VQREFURV9BTEVSVDoKKwkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAyLCAidW5zb2xfZmVhdHVyZXM6Iik7CisJCVpGQ1BfTE9HX0lORk8oIkxpc3Qgb2Ygc3VwcG9ydGVkIGZlYXR1cmVzIG9uIGFkYXB0ZXIgJXMgaGFzICIKKwkJCSAgICAgICJiZWVuIGNoYW5nZWQgZnJvbSAweCUwOFggdG8gMHglMDhYXG4iLAorCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSwKKwkJCSAgICAgICoodTMyKikgKHN0YXR1c19idWZmZXItPnBheWxvYWQgKyA0KSwKKwkJCSAgICAgICoodTMyKikgKHN0YXR1c19idWZmZXItPnBheWxvYWQpKTsKKwkJYWRhcHRlci0+YWRhcHRlcl9mZWF0dXJlcyA9ICoodTMyKikgc3RhdHVzX2J1ZmZlci0+cGF5bG9hZDsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDAsICJ1bnNvbF91bmtub3duOiIpOwotCQlkZWJ1Z19leGNlcHRpb24oYWRhcHRlci0+ZXJwX2RiZiwgMCwKLQkJCQkmc3RhdHVzX2J1ZmZlci0+c3RhdHVzX3R5cGUsIHNpemVvZiAodTMyKSk7Ci0JCVpGQ1BfTE9HX05PUk1BTCgiYnVnOiBBbiB1bnNvbGljaXRlZCBzdGF0dXMgcGFja2V0IG9mIHVua25vd24gIgorCQlaRkNQX0xPR19OT1JNQUwoIndhcm5pbmc6IEFuIHVuc29saWNpdGVkIHN0YXR1cyBwYWNrZXQgb2YgdW5rbm93biAiCiAJCQkJInR5cGUgd2FzIHJlY2VpdmVkIChkZWJ1ZyBpbmZvIDB4JXgpXG4iLAogCQkJCXN0YXR1c19idWZmZXItPnN0YXR1c190eXBlKTsKIAkJWkZDUF9MT0dfREVCVUcoIkR1bXAgb2Ygc3RhdHVzX3JlYWRfYnVmZmVyICVwOlxuIiwKQEAgLTEwOTMsNyArMTA3MSw3IEBACiAgICAgICAgIHNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKICAgICAgICAgc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCi0JZnNmX3JlcS0+ZGF0YS5hYm9ydF9mY3BfY29tbWFuZC51bml0ID0gdW5pdDsKKwlmc2ZfcmVxLT5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHVuaXQ7CiAKIAkvKiBzZXQgaGFuZGxlcyBvZiB1bml0IGFuZCBpdHMgcGFyZW50IHBvcnQgaW4gUVRDQiAqLwogCWZzZl9yZXEtPnF0Y2ItPmhlYWRlci5sdW5faGFuZGxlID0gdW5pdC0+aGFuZGxlOwpAQCAtMTEzOSw3ICsxMTE3LDcgQEAKIHpmY3BfZnNmX2Fib3J0X2ZjcF9jb21tYW5kX2hhbmRsZXIoc3RydWN0IHpmY3BfZnNmX3JlcSAqbmV3X2ZzZl9yZXEpCiB7CiAJaW50IHJldHZhbCA9IC1FSU5WQUw7Ci0Jc3RydWN0IHpmY3BfdW5pdCAqdW5pdCA9IG5ld19mc2ZfcmVxLT5kYXRhLmFib3J0X2ZjcF9jb21tYW5kLnVuaXQ7CisJc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKIAl1bnNpZ25lZCBjaGFyIHN0YXR1c19xdWFsID0KIAkgICAgbmV3X2ZzZl9yZXEtPnF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzX3F1YWwud29yZFswXTsKIApAQCAtMTE1MCw2ICsxMTI4LDggQEAKIAkJZ290byBza2lwX2ZzZnN0YXR1czsKIAl9CiAKKwl1bml0ID0gKHN0cnVjdCB6ZmNwX3VuaXQgKikgbmV3X2ZzZl9yZXEtPmRhdGE7CisKIAkvKiBldmFsdWF0ZSBGU0Ygc3RhdHVzIGluIFFUQ0IgKi8KIAlzd2l0Y2ggKG5ld19mc2ZfcmVxLT5xdGNiLT5oZWFkZXIuZnNmX3N0YXR1cykgewogCkBAIC0xMzY0LDcgKzEzNDQsNyBAQAogICAgICAgICAgICAgICAgIHNiYWxlWzNdLmFkZHIgPSB6ZmNwX3NnX3RvX2FkZHJlc3MoJmN0LT5yZXNwWzBdKTsKICAgICAgICAgICAgICAgICBzYmFsZVszXS5sZW5ndGggPSBjdC0+cmVzcFswXS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgc2JhbGVbM10uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwotICAgICAgICB9IGVsc2UgaWYgKGFkYXB0ZXItPnN1cHBvcnRlZF9mZWF0dXJlcyAmCisJfSBlbHNlIGlmIChhZGFwdGVyLT5hZGFwdGVyX2ZlYXR1cmVzICYKICAgICAgICAgICAgICAgICAgICBGU0ZfRkVBVFVSRV9FTFNfQ1RfQ0hBSU5FRF9TQkFMUykgewogICAgICAgICAgICAgICAgIC8qIHRyeSB0byB1c2UgY2hhaW5lZCBTQkFMcyAqLwogICAgICAgICAgICAgICAgIGJ5dGVzID0gemZjcF9xZGlvX3NiYWxzX2Zyb21fc2coZnNmX3JlcSwKQEAgLTE0MTQsNyArMTM5NCw5IEBACiAJZnNmX3JlcS0+cXRjYi0+aGVhZGVyLnBvcnRfaGFuZGxlID0gcG9ydC0+aGFuZGxlOwogCWZzZl9yZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0LnNlcnZpY2VfY2xhc3MgPSBhZGFwdGVyLT5mY19zZXJ2aWNlX2NsYXNzOwogCWZzZl9yZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0LnRpbWVvdXQgPSBjdC0+dGltZW91dDsKLSAgICAgICAgZnNmX3JlcS0+ZGF0YS5zZW5kX2N0ID0gY3Q7CisgICAgICAgIGZzZl9yZXEtPmRhdGEgPSAodW5zaWduZWQgbG9uZykgY3Q7CisKKwl6ZmNwX3Nhbl9kYmZfZXZlbnRfY3RfcmVxdWVzdChmc2ZfcmVxKTsKIAogCS8qIHN0YXJ0IFFESU8gcmVxdWVzdCBmb3IgdGhpcyBGU0YgcmVxdWVzdCAqLwogCXJldCA9IHpmY3BfZnNmX3JlcV9zZW5kKGZzZl9yZXEsIGN0LT50aW1lcik7CkBAIC0xNDQ1LDEwICsxNDI3LDEwIEBACiAgKiB6ZmNwX2ZzZl9zZW5kX2N0X2hhbmRsZXIgLSBoYW5kbGVyIGZvciBHZW5lcmljIFNlcnZpY2UgcmVxdWVzdHMKICAqIEBmc2ZfcmVxOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX2ZzZl9yZXEKICAqCi0gKiBEYXRhIHNwZWNpZmljIGZvciB0aGUgR2VuZXJpYyBTZXJ2aWNlIHJlcXVlc3QgaXMgcGFzc2VkIGJ5Ci0gKiBmc2ZfcmVxLT5kYXRhLnNlbmRfY3QKLSAqIFVzdWFsbHkgYSBzcGVjaWZpYyBoYW5kbGVyIGZvciB0aGUgcmVxdWVzdCBpcyBjYWxsZWQgdmlhCi0gKiBmc2ZfcmVxLT5kYXRhLnNlbmRfY3QtPmhhbmRsZXIgYXQgZW5kIG9mIHRoaXMgZnVuY3Rpb24uCisgKiBEYXRhIHNwZWNpZmljIGZvciB0aGUgR2VuZXJpYyBTZXJ2aWNlIHJlcXVlc3QgaXMgcGFzc2VkIHVzaW5nCisgKiBmc2ZfcmVxLT5kYXRhLiBUaGVyZSB3ZSBmaW5kIHRoZSBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX3NlbmRfY3QuCisgKiBVc3VhbGx5IGEgc3BlY2lmaWMgaGFuZGxlciBmb3IgdGhlIENUIHJlcXVlc3QgaXMgY2FsbGVkIHdoaWNoIGlzCisgKiBmb3VuZCBpbiB0aGlzIHN0cnVjdHVyZS4KICAqLwogc3RhdGljIGludAogemZjcF9mc2Zfc2VuZF9jdF9oYW5kbGVyKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCkBAIC0xNDYyLDcgKzE0NDQsNyBAQAogCXUxNiBzdWJ0YWJsZSwgcnVsZSwgY291bnRlcjsKIAogCWFkYXB0ZXIgPSBmc2ZfcmVxLT5hZGFwdGVyOwotCXNlbmRfY3QgPSBmc2ZfcmVxLT5kYXRhLnNlbmRfY3Q7CisJc2VuZF9jdCA9IChzdHJ1Y3QgemZjcF9zZW5kX2N0ICopIGZzZl9yZXEtPmRhdGE7CiAJcG9ydCA9IHNlbmRfY3QtPnBvcnQ7CiAJaGVhZGVyID0gJmZzZl9yZXEtPnF0Y2ItPmhlYWRlcjsKIAlib3R0b20gPSAmZnNmX3JlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQ7CkBAIC0xNDc0LDYgKzE0NTYsNyBAQAogCXN3aXRjaCAoaGVhZGVyLT5mc2Zfc3RhdHVzKSB7CiAKICAgICAgICAgY2FzZSBGU0ZfR09PRDoKKwkJemZjcF9zYW5fZGJmX2V2ZW50X2N0X3Jlc3BvbnNlKGZzZl9yZXEpOwogICAgICAgICAgICAgICAgIHJldHZhbCA9IDA7CiAJCWJyZWFrOwogCkBAIC0xNjM0LDcgKzE2MTcsNyBAQAogewogCXZvbGF0aWxlIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKIAlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxOwotCWZjX2lkX3QgZF9pZDsKKwl1MzIgZF9pZDsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyOwogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKICAgICAgICAgaW50IGJ5dGVzOwpAQCAtMTY2NCw3ICsxNjQ3LDcgQEAKICAgICAgICAgICAgICAgICBzYmFsZVszXS5hZGRyID0gemZjcF9zZ190b19hZGRyZXNzKCZlbHMtPnJlc3BbMF0pOwogICAgICAgICAgICAgICAgIHNiYWxlWzNdLmxlbmd0aCA9IGVscy0+cmVzcFswXS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgc2JhbGVbM10uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwotICAgICAgICB9IGVsc2UgaWYgKGFkYXB0ZXItPnN1cHBvcnRlZF9mZWF0dXJlcyAmCisJfSBlbHNlIGlmIChhZGFwdGVyLT5hZGFwdGVyX2ZlYXR1cmVzICYKICAgICAgICAgICAgICAgICAgICBGU0ZfRkVBVFVSRV9FTFNfQ1RfQ0hBSU5FRF9TQkFMUykgewogICAgICAgICAgICAgICAgIC8qIHRyeSB0byB1c2UgY2hhaW5lZCBTQkFMcyAqLwogICAgICAgICAgICAgICAgIGJ5dGVzID0gemZjcF9xZGlvX3NiYWxzX2Zyb21fc2coZnNmX3JlcSwKQEAgLTE3MTQsMTAgKzE2OTcsMTIgQEAKIAlmc2ZfcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5kX2lkID0gZF9pZDsKIAlmc2ZfcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5zZXJ2aWNlX2NsYXNzID0gYWRhcHRlci0+ZmNfc2VydmljZV9jbGFzczsKIAlmc2ZfcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC50aW1lb3V0ID0gWkZDUF9FTFNfVElNRU9VVDsKLQlmc2ZfcmVxLT5kYXRhLnNlbmRfZWxzID0gZWxzOworCWZzZl9yZXEtPmRhdGEgPSAodW5zaWduZWQgbG9uZykgZWxzOwogCiAJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKGZzZl9yZXEsIGZzZl9yZXEtPnNiYWxfY3VyciwgMCk7CiAKKwl6ZmNwX3Nhbl9kYmZfZXZlbnRfZWxzX3JlcXVlc3QoZnNmX3JlcSk7CisKIAkvKiBzdGFydCBRRElPIHJlcXVlc3QgZm9yIHRoaXMgRlNGIHJlcXVlc3QgKi8KIAlyZXQgPSB6ZmNwX2ZzZl9yZXFfc2VuZChmc2ZfcmVxLCBlbHMtPnRpbWVyKTsKIAlpZiAocmV0KSB7CkBAIC0xNzQ2LDIzICsxNzMxLDIzIEBACiAgKiB6ZmNwX2ZzZl9zZW5kX2Vsc19oYW5kbGVyIC0gaGFuZGxlciBmb3IgRUxTIGNvbW1hbmRzCiAgKiBAZnNmX3JlcTogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9mc2ZfcmVxCiAgKgotICogRGF0YSBzcGVjaWZpYyBmb3IgdGhlIEVMUyBjb21tYW5kIGlzIHBhc3NlZCBieQotICogZnNmX3JlcS0+ZGF0YS5zZW5kX2VscwotICogVXN1YWxseSBhIHNwZWNpZmljIGhhbmRsZXIgZm9yIHRoZSBjb21tYW5kIGlzIGNhbGxlZCB2aWEKLSAqIGZzZl9yZXEtPmRhdGEuc2VuZF9lbHMtPmhhbmRsZXIgYXQgZW5kIG9mIHRoaXMgZnVuY3Rpb24uCisgKiBEYXRhIHNwZWNpZmljIGZvciB0aGUgRUxTIGNvbW1hbmQgaXMgcGFzc2VkIHVzaW5nCisgKiBmc2ZfcmVxLT5kYXRhLiBUaGVyZSB3ZSBmaW5kIHRoZSBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX3NlbmRfZWxzLgorICogVXN1YWxseSBhIHNwZWNpZmljIGhhbmRsZXIgZm9yIHRoZSBFTFMgY29tbWFuZCBpcyBjYWxsZWQgd2hpY2ggaXMKKyAqIGZvdW5kIGluIHRoaXMgc3RydWN0dXJlLgogICovCiBzdGF0aWMgaW50IHpmY3BfZnNmX3NlbmRfZWxzX2hhbmRsZXIoc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKIHsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyOwogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQ7Ci0JZmNfaWRfdCBkX2lkOworCXUzMiBkX2lkOwogCXN0cnVjdCBmc2ZfcXRjYl9oZWFkZXIgKmhlYWRlcjsKIAlzdHJ1Y3QgZnNmX3F0Y2JfYm90dG9tX3N1cHBvcnQgKmJvdHRvbTsKIAlzdHJ1Y3QgemZjcF9zZW5kX2VscyAqc2VuZF9lbHM7CiAJaW50IHJldHZhbCA9IC1FSU5WQUw7CiAJdTE2IHN1YnRhYmxlLCBydWxlLCBjb3VudGVyOwogCi0Jc2VuZF9lbHMgPSBmc2ZfcmVxLT5kYXRhLnNlbmRfZWxzOworCXNlbmRfZWxzID0gKHN0cnVjdCB6ZmNwX3NlbmRfZWxzICopIGZzZl9yZXEtPmRhdGE7CiAJYWRhcHRlciA9IHNlbmRfZWxzLT5hZGFwdGVyOwogCXBvcnQgPSBzZW5kX2Vscy0+cG9ydDsKIAlkX2lkID0gc2VuZF9lbHMtPmRfaWQ7CkBAIC0xNzc1LDYgKzE3NjAsNyBAQAogCXN3aXRjaCAoaGVhZGVyLT5mc2Zfc3RhdHVzKSB7CiAKIAljYXNlIEZTRl9HT09EOgorCQl6ZmNwX3Nhbl9kYmZfZXZlbnRfZWxzX3Jlc3BvbnNlKGZzZl9yZXEpOwogCQlyZXR2YWwgPSAwOwogCQlicmVhazsKIApAQCAtMTk1NCw3ICsxOTQwLDkgQEAKIAogCWVycF9hY3Rpb24tPmZzZl9yZXEtPmVycF9hY3Rpb24gPSBlcnBfYWN0aW9uOwogCWVycF9hY3Rpb24tPmZzZl9yZXEtPnF0Y2ItPmJvdHRvbS5jb25maWcuZmVhdHVyZV9zZWxlY3Rpb24gPQotCQkoRlNGX0ZFQVRVUkVfQ0ZEQyB8IEZTRl9GRUFUVVJFX0xVTl9TSEFSSU5HKTsKKwkJCUZTRl9GRUFUVVJFX0NGREMgfAorCQkJRlNGX0ZFQVRVUkVfTFVOX1NIQVJJTkcgfAorCQkJRlNGX0ZFQVRVUkVfVVBEQVRFX0FMRVJUOwogCiAJLyogc3RhcnQgUURJTyByZXF1ZXN0IGZvciB0aGlzIEZTRiByZXF1ZXN0ICovCiAJcmV0dmFsID0gemZjcF9mc2ZfcmVxX3NlbmQoZXJwX2FjdGlvbi0+ZnNmX3JlcSwgJmVycF9hY3Rpb24tPnRpbWVyKTsKQEAgLTE5OTAsMjkgKzE5NzgsMzYgQEAKIHsKIAlzdHJ1Y3QgZnNmX3F0Y2JfYm90dG9tX2NvbmZpZyAqYm90dG9tOwogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBmc2ZfcmVxLT5hZGFwdGVyOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gYWRhcHRlci0+c2NzaV9ob3N0OwogCiAJYm90dG9tID0gJmZzZl9yZXEtPnF0Y2ItPmJvdHRvbS5jb25maWc7CiAJWkZDUF9MT0dfREVCVUcoImxvdy9oaWdoIFFUQ0IgdmVyc2lvbiAweCV4LzB4JXggb2YgRlNGXG4iLAogCQkgICAgICAgYm90dG9tLT5sb3dfcXRjYl92ZXJzaW9uLCBib3R0b20tPmhpZ2hfcXRjYl92ZXJzaW9uKTsKIAlhZGFwdGVyLT5mc2ZfbGljX3ZlcnNpb24gPSBib3R0b20tPmxpY192ZXJzaW9uOwotCWFkYXB0ZXItPnN1cHBvcnRlZF9mZWF0dXJlcyA9IGJvdHRvbS0+c3VwcG9ydGVkX2ZlYXR1cmVzOworCWFkYXB0ZXItPmFkYXB0ZXJfZmVhdHVyZXMgPSBib3R0b20tPmFkYXB0ZXJfZmVhdHVyZXM7CisJYWRhcHRlci0+Y29ubmVjdGlvbl9mZWF0dXJlcyA9IGJvdHRvbS0+Y29ubmVjdGlvbl9mZWF0dXJlczsKIAlhZGFwdGVyLT5wZWVyX3d3cG4gPSAwOwogCWFkYXB0ZXItPnBlZXJfd3dubiA9IDA7CiAJYWRhcHRlci0+cGVlcl9kX2lkID0gMDsKIAogCWlmICh4Y2hnX29rKSB7Ci0JCWFkYXB0ZXItPnd3bm4gPSBib3R0b20tPm5wb3J0X3NlcnZfcGFyYW0ud3dubjsKLQkJYWRhcHRlci0+d3dwbiA9IGJvdHRvbS0+bnBvcnRfc2Vydl9wYXJhbS53d3BuOwotCQlhZGFwdGVyLT5zX2lkID0gYm90dG9tLT5zX2lkICYgWkZDUF9ESURfTUFTSzsKKwkJZmNfaG9zdF9ub2RlX25hbWUoc2hvc3QpID0gYm90dG9tLT5ucG9ydF9zZXJ2X3BhcmFtLnd3bm47CisJCWZjX2hvc3RfcG9ydF9uYW1lKHNob3N0KSA9IGJvdHRvbS0+bnBvcnRfc2Vydl9wYXJhbS53d3BuOworCQlmY19ob3N0X3BvcnRfaWQoc2hvc3QpID0gYm90dG9tLT5zX2lkICYgWkZDUF9ESURfTUFTSzsKKwkJZmNfaG9zdF9zcGVlZChzaG9zdCkgPSBib3R0b20tPmZjX2xpbmtfc3BlZWQ7CisJCWZjX2hvc3Rfc3VwcG9ydGVkX2NsYXNzZXMoc2hvc3QpID0gRkNfQ09TX0NMQVNTMiB8IEZDX0NPU19DTEFTUzM7CiAJCWFkYXB0ZXItPmZjX3RvcG9sb2d5ID0gYm90dG9tLT5mY190b3BvbG9neTsKLQkJYWRhcHRlci0+ZmNfbGlua19zcGVlZCA9IGJvdHRvbS0+ZmNfbGlua19zcGVlZDsKIAkJYWRhcHRlci0+aHlkcmFfdmVyc2lvbiA9IGJvdHRvbS0+YWRhcHRlcl90eXBlOworCQlpZiAoYWRhcHRlci0+cGh5c2ljYWxfd3dwbiA9PSAwKQorCQkJYWRhcHRlci0+cGh5c2ljYWxfd3dwbiA9IGZjX2hvc3RfcG9ydF9uYW1lKHNob3N0KTsKKwkJaWYgKGFkYXB0ZXItPnBoeXNpY2FsX3NfaWQgPT0gMCkKKwkJCWFkYXB0ZXItPnBoeXNpY2FsX3NfaWQgPSBmY19ob3N0X3BvcnRfaWQoc2hvc3QpOwogCX0gZWxzZSB7Ci0JCWFkYXB0ZXItPnd3bm4gPSAwOwotCQlhZGFwdGVyLT53d3BuID0gMDsKLQkJYWRhcHRlci0+c19pZCA9IDA7CisJCWZjX2hvc3Rfbm9kZV9uYW1lKHNob3N0KSA9IDA7CisJCWZjX2hvc3RfcG9ydF9uYW1lKHNob3N0KSA9IDA7CisJCWZjX2hvc3RfcG9ydF9pZChzaG9zdCkgPSAwOworCQlmY19ob3N0X3NwZWVkKHNob3N0KSA9IEZDX1BPUlRTUEVFRF9VTktOT1dOOwogCQlhZGFwdGVyLT5mY190b3BvbG9neSA9IDA7Ci0JCWFkYXB0ZXItPmZjX2xpbmtfc3BlZWQgPSAwOwogCQlhZGFwdGVyLT5oeWRyYV92ZXJzaW9uID0gMDsKIAl9CiAKQEAgLTIwMjIsMjYgKzIwMTcsMjggQEAKIAkJYWRhcHRlci0+cGVlcl93d25uID0gYm90dG9tLT5wbG9naV9wYXlsb2FkLnd3bm47CiAJfQogCi0JaWYoYWRhcHRlci0+c3VwcG9ydGVkX2ZlYXR1cmVzICYgRlNGX0ZFQVRVUkVfSEJBQVBJX01BTkFHRU1FTlQpeworCWlmIChhZGFwdGVyLT5hZGFwdGVyX2ZlYXR1cmVzICYgRlNGX0ZFQVRVUkVfSEJBQVBJX01BTkFHRU1FTlQpIHsKIAkJYWRhcHRlci0+aGFyZHdhcmVfdmVyc2lvbiA9IGJvdHRvbS0+aGFyZHdhcmVfdmVyc2lvbjsKLQkJbWVtY3B5KGFkYXB0ZXItPnNlcmlhbF9udW1iZXIsIGJvdHRvbS0+c2VyaWFsX251bWJlciwgMTcpOwotCQlFQkNBU0MoYWRhcHRlci0+c2VyaWFsX251bWJlciwgc2l6ZW9mKGFkYXB0ZXItPnNlcmlhbF9udW1iZXIpKTsKKwkJbWVtY3B5KGZjX2hvc3Rfc2VyaWFsX251bWJlcihzaG9zdCksIGJvdHRvbS0+c2VyaWFsX251bWJlciwKKwkJICAgICAgIG1pbihGQ19TRVJJQUxfTlVNQkVSX1NJWkUsIDE3KSk7CisJCUVCQ0FTQyhmY19ob3N0X3NlcmlhbF9udW1iZXIoc2hvc3QpLAorCQkgICAgICAgbWluKEZDX1NFUklBTF9OVU1CRVJfU0laRSwgMTcpKTsKIAl9CiAKIAlaRkNQX0xPR19OT1JNQUwoIlRoZSBhZGFwdGVyICVzIHJlcG9ydGVkIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyaXN0aWNzOlxuIgotCQkgICAgICAiV1dOTiAweCUwMTZMeCwgIgotCQkgICAgICAiV1dQTiAweCUwMTZMeCwgIgotCQkgICAgICAiU19JRCAweCUwOHgsXG4iCi0JCSAgICAgICJhZGFwdGVyIHZlcnNpb24gMHgleCwgIgotCQkgICAgICAiTElDIHZlcnNpb24gMHgleCwgIgotCQkgICAgICAiRkMgbGluayBzcGVlZCAlZCBHYi9zXG4iLAotCQkgICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpLAotCQkgICAgICBhZGFwdGVyLT53d25uLAotCQkgICAgICBhZGFwdGVyLT53d3BuLAotCQkgICAgICAodW5zaWduZWQgaW50KSBhZGFwdGVyLT5zX2lkLAotCQkgICAgICBhZGFwdGVyLT5oeWRyYV92ZXJzaW9uLAotCQkgICAgICBhZGFwdGVyLT5mc2ZfbGljX3ZlcnNpb24sCi0JCSAgICAgIGFkYXB0ZXItPmZjX2xpbmtfc3BlZWQpOworCQkJIldXTk4gMHglMDE2THgsICIKKwkJCSJXV1BOIDB4JTAxNkx4LCAiCisJCQkiU19JRCAweCUwOHgsXG4iCisJCQkiYWRhcHRlciB2ZXJzaW9uIDB4JXgsICIKKwkJCSJMSUMgdmVyc2lvbiAweCV4LCAiCisJCQkiRkMgbGluayBzcGVlZCAlZCBHYi9zXG4iLAorCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSwKKwkJCSh3d25fdCkgZmNfaG9zdF9ub2RlX25hbWUoc2hvc3QpLAorCQkJKHd3bl90KSBmY19ob3N0X3BvcnRfbmFtZShzaG9zdCksCisJCQlmY19ob3N0X3BvcnRfaWQoc2hvc3QpLAorCQkJYWRhcHRlci0+aHlkcmFfdmVyc2lvbiwKKwkJCWFkYXB0ZXItPmZzZl9saWNfdmVyc2lvbiwKKwkJCWZjX2hvc3Rfc3BlZWQoc2hvc3QpKTsKIAlpZiAoWkZDUF9RVENCX1ZFUlNJT04gPCBib3R0b20tPmxvd19xdGNiX3ZlcnNpb24pIHsKIAkJWkZDUF9MT0dfTk9STUFMKCJlcnJvcjogdGhlIGFkYXB0ZXIgJXMgIgogCQkJCSJvbmx5IHN1cHBvcnRzIG5ld2VyIGNvbnRyb2wgYmxvY2sgIgpAQCAtMjA2Miw3ICsyMDU5LDYgQEAKIAkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwKTsKIAkJcmV0dXJuIC1FSU87CiAJfQotCXpmY3Bfc2V0X2ZjX2hvc3RfYXR0cnMoYWRhcHRlcik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwNzgsMTEgKzIwNzQsMTIgQEAKIHsKIAlzdHJ1Y3QgZnNmX3F0Y2JfYm90dG9tX2NvbmZpZyAqYm90dG9tOwogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBmc2ZfcmVxLT5hZGFwdGVyOworCXN0cnVjdCBmc2ZfcXRjYiAqcXRjYiA9IGZzZl9yZXEtPnF0Y2I7CiAKIAlpZiAoZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SKQogCQlyZXR1cm4gLUVJTzsKIAotCXN3aXRjaCAoZnNmX3JlcS0+cXRjYi0+aGVhZGVyLmZzZl9zdGF0dXMpIHsKKwlzd2l0Y2ggKHF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzKSB7CiAKIAljYXNlIEZTRl9HT09EOgogCQlpZiAoemZjcF9mc2ZfZXhjaGFuZ2VfY29uZmlnX2V2YWx1YXRlKGZzZl9yZXEsIDEpKQpAQCAtMjExMiw3ICsyMTA5LDcgQEAKIAkJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJY2FzZSBGU0ZfVE9QT19GQUJSSUM6Ci0JCQlaRkNQX0xPR19JTkZPKCJTd2l0Y2hlZCBmYWJyaWMgZmlicmVjaGFubmVsICIKKwkJCVpGQ1BfTE9HX05PUk1BTCgiU3dpdGNoZWQgZmFicmljIGZpYnJlY2hhbm5lbCAiCiAJCQkJICAgICAgIm5ldHdvcmsgZGV0ZWN0ZWQgYXQgYWRhcHRlciAlcy5cbiIsCiAJCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CiAJCQlicmVhazsKQEAgLTIxMzAsNyArMjEyNyw3IEBACiAJCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDApOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KLQkJYm90dG9tID0gJmZzZl9yZXEtPnF0Y2ItPmJvdHRvbS5jb25maWc7CisJCWJvdHRvbSA9ICZxdGNiLT5ib3R0b20uY29uZmlnOwogCQlpZiAoYm90dG9tLT5tYXhfcXRjYl9zaXplIDwgc2l6ZW9mKHN0cnVjdCBmc2ZfcXRjYikpIHsKIAkJCVpGQ1BfTE9HX05PUk1BTCgiYnVnOiBNYXhpbXVtIFFUQ0Igc2l6ZSAoJWQgYnl0ZXMpICIKIAkJCQkJImFsbG93ZWQgYnkgdGhlIGFkYXB0ZXIgJXMgIgpAQCAtMjE1NSwxMiArMjE1MiwxMCBAQAogCQlpZiAoemZjcF9mc2ZfZXhjaGFuZ2VfY29uZmlnX2V2YWx1YXRlKGZzZl9yZXEsIDApKQogCQkJcmV0dXJuIC1FSU87CiAKLQkJWkZDUF9MT0dfSU5GTygiTG9jYWwgbGluayB0byBhZGFwdGVyICVzIGlzIGRvd25cbiIsCi0JCQkgICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKLQkJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfWENPTkZJR19PSyB8Ci0JCQkJWkZDUF9TVEFUVVNfQURBUFRFUl9MSU5LX1VOUExVR0dFRCwKLQkJCQkmYWRhcHRlci0+c3RhdHVzKTsKLQkJemZjcF9lcnBfYWRhcHRlcl9mYWlsZWQoYWRhcHRlcik7CisJCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX1hDT05GSUdfT0ssICZhZGFwdGVyLT5zdGF0dXMpOworCisJCXpmY3BfZnNmX2xpbmtfZG93bl9pbmZvX2V2YWwoYWRhcHRlciwKKwkJCSZxdGNiLT5oZWFkZXIuZnNmX3N0YXR1c19xdWFsLmxpbmtfZG93bl9pbmZvKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZGVidWdfdGV4dF9ldmVudChmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAwLCAiZnNmLXN0YXQtbmciKTsKQEAgLTIxNzQsMTEgKzIxNjksMTMgQEAKIAogLyoqCiAgKiB6ZmNwX2ZzZl9leGNoYW5nZV9wb3J0X2RhdGEgLSByZXF1ZXN0IGluZm9ybWF0aW9uIGFib3V0IGxvY2FsIHBvcnQKKyAqIEBlcnBfYWN0aW9uOiBFUlAgYWN0aW9uIGZvciB0aGUgYWRhcHRlciBmb3Igd2hpY2ggcG9ydCBkYXRhIGlzIHJlcXVlc3RlZAogICogQGFkYXB0ZXI6IGZvciB3aGljaCBwb3J0IGRhdGEgaXMgcmVxdWVzdGVkCiAgKiBAZGF0YTogcmVzcG9uc2UgdG8gZXhjaGFuZ2UgcG9ydCBkYXRhIHJlcXVlc3QKICAqLwogaW50Ci16ZmNwX2ZzZl9leGNoYW5nZV9wb3J0X2RhdGEoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKK3pmY3BfZnNmX2V4Y2hhbmdlX3BvcnRfZGF0YShzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICplcnBfYWN0aW9uLAorCQkJICAgIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkgICAgc3RydWN0IGZzZl9xdGNiX2JvdHRvbV9wb3J0ICpkYXRhKQogewogCXZvbGF0aWxlIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKQEAgLTIxODcsNyArMjE4NCw3IEBACiAgICAgICAgIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXE7CiAJc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyOwogCi0gICAgICAgIGlmKCEoYWRhcHRlci0+c3VwcG9ydGVkX2ZlYXR1cmVzICYgRlNGX0ZFQVRVUkVfSEJBQVBJX01BTkFHRU1FTlQpKXsKKwlpZiAoIShhZGFwdGVyLT5hZGFwdGVyX2ZlYXR1cmVzICYgRlNGX0ZFQVRVUkVfSEJBQVBJX01BTkFHRU1FTlQpKSB7CiAJCVpGQ1BfTE9HX0lORk8oImVycm9yOiBleGNoYW5nZSBwb3J0IGRhdGEgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQgbm90IHN1cHBvcnRlZCBieSBhZGFwdGVyICVzXG4iLAogCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CkBAIC0yMjExLDEyICsyMjA4LDE4IEBACiAJCWdvdG8gb3V0OwogCX0KIAorCWlmIChlcnBfYWN0aW9uKSB7CisJCWVycF9hY3Rpb24tPmZzZl9yZXEgPSBmc2ZfcmVxOworCQlmc2ZfcmVxLT5lcnBfYWN0aW9uID0gZXJwX2FjdGlvbjsKKwl9CisKKwlpZiAoZGF0YSkKKwlmc2ZfcmVxLT5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGRhdGE7CisKIAlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEoZnNmX3JlcSwgZnNmX3JlcS0+c2JhbF9jdXJyLCAwKTsKICAgICAgICAgc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOwogICAgICAgICBzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKLSAgICAgICAgZnNmX3JlcS0+ZGF0YS5wb3J0X2RhdGEgPSBkYXRhOwotCiAJaW5pdF90aW1lcih0aW1lcik7CiAJdGltZXItPmZ1bmN0aW9uID0gemZjcF9mc2ZfcmVxdWVzdF90aW1lb3V0X2hhbmRsZXI7CiAJdGltZXItPmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWRhcHRlcjsKQEAgLTIyMjgsNiArMjIzMSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCBvbiB0aGUgYWRhcHRlciAlc1xuIiwKIAkJCSAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwogCQl6ZmNwX2ZzZl9yZXFfZnJlZShmc2ZfcmVxKTsKKwkJaWYgKGVycF9hY3Rpb24pCisJCQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gTlVMTDsKIAkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnJlcXVlc3RfcXVldWUucXVldWVfbG9jaywKIAkJCQkJbG9ja19mbGFncyk7CiAJCWdvdG8gb3V0OwpAQCAtMjI1NiwyMSArMjI2MSw0MiBAQAogc3RhdGljIHZvaWQKIHpmY3BfZnNmX2V4Y2hhbmdlX3BvcnRfZGF0YV9oYW5kbGVyKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCiB7Ci0Jc3RydWN0IGZzZl9xdGNiX2JvdHRvbV9wb3J0ICpib3R0b207Ci0Jc3RydWN0IGZzZl9xdGNiX2JvdHRvbV9wb3J0ICpkYXRhID0gZnNmX3JlcS0+ZGF0YS5wb3J0X2RhdGE7CisJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGZzZl9yZXEtPmFkYXB0ZXI7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBhZGFwdGVyLT5zY3NpX2hvc3Q7CisJc3RydWN0IGZzZl9xdGNiICpxdGNiID0gZnNmX3JlcS0+cXRjYjsKKwlzdHJ1Y3QgZnNmX3F0Y2JfYm90dG9tX3BvcnQgKmJvdHRvbSwgKmRhdGE7CiAKIAlpZiAoZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SKQogCQlyZXR1cm47CiAKLQlzd2l0Y2ggKGZzZl9yZXEtPnF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzKSB7CisJc3dpdGNoIChxdGNiLT5oZWFkZXIuZnNmX3N0YXR1cykgewogICAgICAgICBjYXNlIEZTRl9HT09EOgotICAgICAgICAgICAgICAgIGJvdHRvbSA9ICZmc2ZfcmVxLT5xdGNiLT5ib3R0b20ucG9ydDsKLSAgICAgICAgICAgICAgICBtZW1jcHkoZGF0YSwgYm90dG9tLCBzaXplb2YoKmRhdGEpKTsKKwkJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfWFBPUlRfT0ssICZhZGFwdGVyLT5zdGF0dXMpOworCisJCWJvdHRvbSA9ICZxdGNiLT5ib3R0b20ucG9ydDsKKwkJZGF0YSA9IChzdHJ1Y3QgZnNmX3F0Y2JfYm90dG9tX3BvcnQqKSBmc2ZfcmVxLT5kYXRhOworCQlpZiAoZGF0YSkKKwkJCW1lbWNweShkYXRhLCBib3R0b20sIHNpemVvZihzdHJ1Y3QgZnNmX3F0Y2JfYm90dG9tX3BvcnQpKTsKKwkJaWYgKGFkYXB0ZXItPmNvbm5lY3Rpb25fZmVhdHVyZXMgJiBGU0ZfRkVBVFVSRV9OUElWX01PREUpIHsKKwkJCWFkYXB0ZXItPnBoeXNpY2FsX3d3cG4gPSBib3R0b20tPnd3cG47CisJCQlhZGFwdGVyLT5waHlzaWNhbF9zX2lkID0gYm90dG9tLT5mY19wb3J0X2lkOworCQl9IGVsc2UgeworCQkJYWRhcHRlci0+cGh5c2ljYWxfd3dwbiA9IGZjX2hvc3RfcG9ydF9uYW1lKHNob3N0KTsKKwkJCWFkYXB0ZXItPnBoeXNpY2FsX3NfaWQgPSBmY19ob3N0X3BvcnRfaWQoc2hvc3QpOworCQl9CisJCWZjX2hvc3RfbWF4ZnJhbWVfc2l6ZShzaG9zdCkgPSBib3R0b20tPm1heGltdW1fZnJhbWVfc2l6ZTsKKwkJYnJlYWs7CisKKwljYXNlIEZTRl9FWENIQU5HRV9DT05GSUdfREFUQV9JTkNPTVBMRVRFOgorCQlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9YUE9SVF9PSywgJmFkYXB0ZXItPnN0YXR1cyk7CisKKwkJemZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbChhZGFwdGVyLAorCQkJJnF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzX3F1YWwubGlua19kb3duX2luZm8pOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGRlZmF1bHQ6Ci0JCWRlYnVnX3RleHRfZXZlbnQoZnNmX3JlcS0+YWRhcHRlci0+ZXJwX2RiZiwgMCwgInhjaGctcG9ydC1uZyIpOwotICAgICAgICAgICAgICAgIGRlYnVnX2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsCisJCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMCwgInhjaGctcG9ydC1uZyIpOworCQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAwLAogCQkJICAgICZmc2ZfcmVxLT5xdGNiLT5oZWFkZXIuZnNmX3N0YXR1cywgc2l6ZW9mKHUzMikpOwogCX0KIH0KQEAgLTIzMTIsNyArMjMzOCw3IEBACiAKIAllcnBfYWN0aW9uLT5mc2ZfcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5kX2lkID0gZXJwX2FjdGlvbi0+cG9ydC0+ZF9pZDsKIAlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX09QRU5JTkcsICZlcnBfYWN0aW9uLT5wb3J0LT5zdGF0dXMpOwotCWVycF9hY3Rpb24tPmZzZl9yZXEtPmRhdGEub3Blbl9wb3J0LnBvcnQgPSBlcnBfYWN0aW9uLT5wb3J0OworCWVycF9hY3Rpb24tPmZzZl9yZXEtPmRhdGEgPSAodW5zaWduZWQgbG9uZykgZXJwX2FjdGlvbi0+cG9ydDsKIAllcnBfYWN0aW9uLT5mc2ZfcmVxLT5lcnBfYWN0aW9uID0gZXJwX2FjdGlvbjsKIAogCS8qIHN0YXJ0IFFESU8gcmVxdWVzdCBmb3IgdGhpcyBGU0YgcmVxdWVzdCAqLwpAQCAtMjM1Myw3ICsyMzc5LDcgQEAKIAlzdHJ1Y3QgZnNmX3F0Y2JfaGVhZGVyICpoZWFkZXI7CiAJdTE2IHN1YnRhYmxlLCBydWxlLCBjb3VudGVyOwogCi0JcG9ydCA9IGZzZl9yZXEtPmRhdGEub3Blbl9wb3J0LnBvcnQ7CisJcG9ydCA9IChzdHJ1Y3QgemZjcF9wb3J0ICopIGZzZl9yZXEtPmRhdGE7CiAJaGVhZGVyID0gJmZzZl9yZXEtPnF0Y2ItPmhlYWRlcjsKIAogCWlmIChmc2ZfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1IpIHsKQEAgLTI1NjYsNyArMjU5Miw3IEBACiAgICAgICAgIHNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIAogCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19DT01NT05fQ0xPU0lORywgJmVycF9hY3Rpb24tPnBvcnQtPnN0YXR1cyk7Ci0JZXJwX2FjdGlvbi0+ZnNmX3JlcS0+ZGF0YS5jbG9zZV9wb3J0LnBvcnQgPSBlcnBfYWN0aW9uLT5wb3J0OworCWVycF9hY3Rpb24tPmZzZl9yZXEtPmRhdGEgPSAodW5zaWduZWQgbG9uZykgZXJwX2FjdGlvbi0+cG9ydDsKIAllcnBfYWN0aW9uLT5mc2ZfcmVxLT5lcnBfYWN0aW9uID0gZXJwX2FjdGlvbjsKIAllcnBfYWN0aW9uLT5mc2ZfcmVxLT5xdGNiLT5oZWFkZXIucG9ydF9oYW5kbGUgPQogCSAgICBlcnBfYWN0aW9uLT5wb3J0LT5oYW5kbGU7CkBAIC0yNjA2LDcgKzI2MzIsNyBAQAogCWludCByZXR2YWwgPSAtRUlOVkFMOwogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQ7CiAKLQlwb3J0ID0gZnNmX3JlcS0+ZGF0YS5jbG9zZV9wb3J0LnBvcnQ7CisJcG9ydCA9IChzdHJ1Y3QgemZjcF9wb3J0ICopIGZzZl9yZXEtPmRhdGE7CiAKIAlpZiAoZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SKSB7CiAJCS8qIGRvbid0IGNoYW5nZSBwb3J0IHN0YXR1cyBpbiBvdXIgYm9va2tlZXBpbmcgKi8KQEAgLTI3MDMsOCArMjcyOSw4IEBACiAJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX1BPUlRfUEhZU19DTE9TSU5HLAogCQkJJmVycF9hY3Rpb24tPnBvcnQtPnN0YXR1cyk7CiAJLyogc2F2ZSBhIHBvaW50ZXIgdG8gdGhpcyBwb3J0ICovCi0JZXJwX2FjdGlvbi0+ZnNmX3JlcS0+ZGF0YS5jbG9zZV9waHlzaWNhbF9wb3J0LnBvcnQgPSBlcnBfYWN0aW9uLT5wb3J0OwotCS8qIHBvcnQgdG8gYmUgY2xvc2VlZCAqLworCWVycF9hY3Rpb24tPmZzZl9yZXEtPmRhdGEgPSAodW5zaWduZWQgbG9uZykgZXJwX2FjdGlvbi0+cG9ydDsKKwkvKiBwb3J0IHRvIGJlIGNsb3NlZCAqLwogCWVycF9hY3Rpb24tPmZzZl9yZXEtPnF0Y2ItPmhlYWRlci5wb3J0X2hhbmRsZSA9CiAJICAgIGVycF9hY3Rpb24tPnBvcnQtPmhhbmRsZTsKIAllcnBfYWN0aW9uLT5mc2ZfcmVxLT5lcnBfYWN0aW9uID0gZXJwX2FjdGlvbjsKQEAgLTI3NDcsNyArMjc3Myw3IEBACiAJc3RydWN0IGZzZl9xdGNiX2hlYWRlciAqaGVhZGVyOwogCXUxNiBzdWJ0YWJsZSwgcnVsZSwgY291bnRlcjsKIAotCXBvcnQgPSBmc2ZfcmVxLT5kYXRhLmNsb3NlX3BoeXNpY2FsX3BvcnQucG9ydDsKKwlwb3J0ID0gKHN0cnVjdCB6ZmNwX3BvcnQgKikgZnNmX3JlcS0+ZGF0YTsKIAloZWFkZXIgPSAmZnNmX3JlcS0+cXRjYi0+aGVhZGVyOwogCiAJaWYgKGZzZl9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUikgewpAQCAtMjkwOCwxMCArMjkzNCwxMSBAQAogCQllcnBfYWN0aW9uLT5wb3J0LT5oYW5kbGU7CiAJZXJwX2FjdGlvbi0+ZnNmX3JlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQuZmNwX2x1biA9CiAJCWVycF9hY3Rpb24tPnVuaXQtPmZjcF9sdW47CisJaWYgKCEoZXJwX2FjdGlvbi0+YWRhcHRlci0+Y29ubmVjdGlvbl9mZWF0dXJlcyAmIEZTRl9GRUFUVVJFX05QSVZfTU9ERSkpCiAJZXJwX2FjdGlvbi0+ZnNmX3JlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQub3B0aW9uID0KIAkJRlNGX09QRU5fTFVOX1NVUFBSRVNTX0JPWElORzsKIAlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX09QRU5JTkcsICZlcnBfYWN0aW9uLT51bml0LT5zdGF0dXMpOwotCWVycF9hY3Rpb24tPmZzZl9yZXEtPmRhdGEub3Blbl91bml0LnVuaXQgPSBlcnBfYWN0aW9uLT51bml0OworCWVycF9hY3Rpb24tPmZzZl9yZXEtPmRhdGEgPSAodW5zaWduZWQgbG9uZykgZXJwX2FjdGlvbi0+dW5pdDsKIAllcnBfYWN0aW9uLT5mc2ZfcmVxLT5lcnBfYWN0aW9uID0gZXJwX2FjdGlvbjsKIAogCS8qIHN0YXJ0IFFESU8gcmVxdWVzdCBmb3IgdGhpcyBGU0YgcmVxdWVzdCAqLwpAQCAtMjk1NSw5ICsyOTgyLDkgQEAKIAlzdHJ1Y3QgZnNmX3F0Y2JfYm90dG9tX3N1cHBvcnQgKmJvdHRvbTsKIAlzdHJ1Y3QgZnNmX3F1ZXVlX2Rlc2lnbmF0b3IgKnF1ZXVlX2Rlc2lnbmF0b3I7CiAJdTE2IHN1YnRhYmxlLCBydWxlLCBjb3VudGVyOwotCXUzMiBhbGxvd2VkLCBleGNsdXNpdmUsIHJlYWR3cml0ZTsKKwlpbnQgZXhjbHVzaXZlLCByZWFkd3JpdGU7CiAKLQl1bml0ID0gZnNmX3JlcS0+ZGF0YS5vcGVuX3VuaXQudW5pdDsKKwl1bml0ID0gKHN0cnVjdCB6ZmNwX3VuaXQgKikgZnNmX3JlcS0+ZGF0YTsKIAogCWlmIChmc2ZfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1IpIHsKIAkJLyogZG9uJ3QgY2hhbmdlIHVuaXQgc3RhdHVzIGluIG91ciBib29ra2VlcGluZyAqLwpAQCAtMjk2OSwxMCArMjk5Niw2IEBACiAJYm90dG9tID0gJmZzZl9yZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0OwogCXF1ZXVlX2Rlc2lnbmF0b3IgPSAmaGVhZGVyLT5mc2Zfc3RhdHVzX3F1YWwuZnNmX3F1ZXVlX2Rlc2lnbmF0b3I7CiAKLQlhbGxvd2VkICAgPSBib3R0b20tPmx1bl9hY2Nlc3NfaW5mbyAmIEZTRl9VTklUX0FDQ0VTU19PUEVOX0xVTl9BTExPV0VEOwotCWV4Y2x1c2l2ZSA9IGJvdHRvbS0+bHVuX2FjY2Vzc19pbmZvICYgRlNGX1VOSVRfQUNDRVNTX0VYQ0xVU0lWRTsKLQlyZWFkd3JpdGUgPSBib3R0b20tPmx1bl9hY2Nlc3NfaW5mbyAmIEZTRl9VTklUX0FDQ0VTU19PVVRCT1VORF9UUkFOU0ZFUjsKLQogCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9BQ0NFU1NfREVOSUVEIHwKIAkJCSAgWkZDUF9TVEFUVVNfVU5JVF9TSEFSRUQgfAogCQkJICBaRkNQX1NUQVRVU19VTklUX1JFQURPTkxZLApAQCAtMzE0NiwxMCArMzE2OSwxNSBAQAogCQkJICAgICAgIHVuaXQtPmhhbmRsZSk7CiAJCS8qIG1hcmsgdW5pdCBhcyBvcGVuICovCiAJCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19DT01NT05fT1BFTiwgJnVuaXQtPnN0YXR1cyk7Ci0JCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9BQ0NFU1NfREVOSUVEIHwKLQkJICAgICAgICAgICAgICAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX0FDQ0VTU19CT1hFRCwKLQkJICAgICAgICAgICAgICAgICAgJnVuaXQtPnN0YXR1cyk7Ci0JCWlmIChhZGFwdGVyLT5zdXBwb3J0ZWRfZmVhdHVyZXMgJiBGU0ZfRkVBVFVSRV9MVU5fU0hBUklORyl7CisKKwkJaWYgKCEoYWRhcHRlci0+Y29ubmVjdGlvbl9mZWF0dXJlcyAmIEZTRl9GRUFUVVJFX05QSVZfTU9ERSkgJiYKKwkJICAgIChhZGFwdGVyLT5hZGFwdGVyX2ZlYXR1cmVzICYgRlNGX0ZFQVRVUkVfTFVOX1NIQVJJTkcpICYmCisJCSAgICAoYWRhcHRlci0+Y2N3X2RldmljZS0+aWQuZGV2X21vZGVsICE9IFpGQ1BfREVWSUNFX01PREVMX1BSSVYpKSB7CisJCQlleGNsdXNpdmUgPSAoYm90dG9tLT5sdW5fYWNjZXNzX2luZm8gJgorCQkJCQlGU0ZfVU5JVF9BQ0NFU1NfRVhDTFVTSVZFKTsKKwkJCXJlYWR3cml0ZSA9IChib3R0b20tPmx1bl9hY2Nlc3NfaW5mbyAmCisJCQkJCUZTRl9VTklUX0FDQ0VTU19PVVRCT1VORF9UUkFOU0ZFUik7CisKIAkJCWlmICghZXhjbHVzaXZlKQogCQkgICAgICAgICAgICAgICAgYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX1VOSVRfU0hBUkVELAogCQkJCQkJJnVuaXQtPnN0YXR1cyk7CkBAIC0zMjQyLDcgKzMyNzAsNyBAQAogCSAgICBlcnBfYWN0aW9uLT5wb3J0LT5oYW5kbGU7CiAJZXJwX2FjdGlvbi0+ZnNmX3JlcS0+cXRjYi0+aGVhZGVyLmx1bl9oYW5kbGUgPSBlcnBfYWN0aW9uLT51bml0LT5oYW5kbGU7CiAJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9DTE9TSU5HLCAmZXJwX2FjdGlvbi0+dW5pdC0+c3RhdHVzKTsKLQllcnBfYWN0aW9uLT5mc2ZfcmVxLT5kYXRhLmNsb3NlX3VuaXQudW5pdCA9IGVycF9hY3Rpb24tPnVuaXQ7CisJZXJwX2FjdGlvbi0+ZnNmX3JlcS0+ZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBlcnBfYWN0aW9uLT51bml0OwogCWVycF9hY3Rpb24tPmZzZl9yZXEtPmVycF9hY3Rpb24gPSBlcnBfYWN0aW9uOwogCiAJLyogc3RhcnQgUURJTyByZXF1ZXN0IGZvciB0aGlzIEZTRiByZXF1ZXN0ICovCkBAIC0zMjgxLDcgKzMzMDksNyBAQAogCWludCByZXR2YWwgPSAtRUlOVkFMOwogCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQ7CiAKLQl1bml0ID0gZnNmX3JlcS0+ZGF0YS5jbG9zZV91bml0LnVuaXQ7CS8qIHJlc3RvcmUgdW5pdCAqLworCXVuaXQgPSAoc3RydWN0IHpmY3BfdW5pdCAqKSBmc2ZfcmVxLT5kYXRhOwogCiAJaWYgKGZzZl9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUikgewogCQkvKiBkb24ndCBjaGFuZ2UgdW5pdCBzdGF0dXMgaW4gb3VyIGJvb2trZWVwaW5nICovCkBAIC0zMzA1LDkgKzMzMzMsNiBAQAogCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDEsCiAJCQkJICJmc2Zfc19waGFuZF9udiIpOwogCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbih1bml0LT5wb3J0LT5hZGFwdGVyLCAwKTsKLQkJemZjcF9jbWRfZGJmX2V2ZW50X2ZzZigicG9ydGhpbnYiLCBmc2ZfcmVxLAotCQkJCSAgICAgICAmZnNmX3JlcS0+cXRjYi0+aGVhZGVyLmZzZl9zdGF0dXNfcXVhbCwKLQkJCQkgICAgICAgc2l6ZW9mICh1bmlvbiBmc2Zfc3RhdHVzX3F1YWwpKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAKQEAgLTMzMjYsOSArMzM1MSw2IEBACiAJCWRlYnVnX3RleHRfZXZlbnQoZnNmX3JlcS0+YWRhcHRlci0+ZXJwX2RiZiwgMSwKIAkJCQkgImZzZl9zX2xoYW5kX252Iik7CiAJCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHVuaXQtPnBvcnQsIDApOwotCQl6ZmNwX2NtZF9kYmZfZXZlbnRfZnNmKCJsdW5oaW52IiwgZnNmX3JlcSwKLQkJCQkgICAgICAgJmZzZl9yZXEtPnF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzX3F1YWwsCi0JCQkJICAgICAgIHNpemVvZiAodW5pb24gZnNmX3N0YXR1c19xdWFsKSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCkBAIC0zNDM2LDIxICszNDU4LDE0IEBACiAJCWdvdG8gZmFpbGVkX3JlcV9jcmVhdGU7CiAJfQogCi0JLyoKLQkgKiBhc3NvY2lhdGUgRlNGIHJlcXVlc3Qgd2l0aCBTQ1NJIHJlcXVlc3QKLQkgKiAobmVlZCB0aGlzIGZvciBsb29rIHVwIG9uIGFib3J0KQotCSAqLwotCWZzZl9yZXEtPmRhdGEuc2VuZF9mY3BfY29tbWFuZF90YXNrLmZzZl9yZXEgPSBmc2ZfcmVxOwotCXNjc2lfY21uZC0+aG9zdF9zY3JpYmJsZSA9IChjaGFyICopICYoZnNmX3JlcS0+ZGF0YSk7CisJemZjcF91bml0X2dldCh1bml0KTsKKwlmc2ZfcmVxLT51bml0ID0gdW5pdDsKIAotCS8qCi0JICogYXNzb2NpYXRlIFNDU0kgY29tbWFuZCB3aXRoIEZTRiByZXF1ZXN0Ci0JICogKG5lZWQgdGhpcyBmb3IgbG9vayB1cCBvbiBub3JtYWwgY29tbWFuZCBjb21wbGV0aW9uKQotCSAqLwotCWZzZl9yZXEtPmRhdGEuc2VuZF9mY3BfY29tbWFuZF90YXNrLnNjc2lfY21uZCA9IHNjc2lfY21uZDsKLQlmc2ZfcmVxLT5kYXRhLnNlbmRfZmNwX2NvbW1hbmRfdGFzay5zdGFydF9qaWZmaWVzID0gamlmZmllczsKLQlmc2ZfcmVxLT5kYXRhLnNlbmRfZmNwX2NvbW1hbmRfdGFzay51bml0ID0gdW5pdDsKLQlaRkNQX0xPR19ERUJVRygidW5pdD0lcCwgZmNwX2x1bj0weCUwMTZMeFxuIiwgdW5pdCwgdW5pdC0+ZmNwX2x1bik7CisJLyogYXNzb2NpYXRlIEZTRiByZXF1ZXN0IHdpdGggU0NTSSByZXF1ZXN0IChmb3IgbG9vayB1cCBvbiBhYm9ydCkgKi8KKwlzY3NpX2NtbmQtPmhvc3Rfc2NyaWJibGUgPSAoY2hhciAqKSBmc2ZfcmVxOworCisJLyogYXNzb2NpYXRlIFNDU0kgY29tbWFuZCB3aXRoIEZTRiByZXF1ZXN0ICovCisJZnNmX3JlcS0+ZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBzY3NpX2NtbmQ7CiAKIAkvKiBzZXQgaGFuZGxlcyBvZiB1bml0IGFuZCBpdHMgcGFyZW50IHBvcnQgaW4gUVRDQiAqLwogCWZzZl9yZXEtPnF0Y2ItPmhlYWRlci5sdW5faGFuZGxlID0gdW5pdC0+aGFuZGxlOwpAQCAtMzU4NCw2ICszNTk5LDcgQEAKICBzZW5kX2ZhaWxlZDoKICBub19maXQ6CiAgZmFpbGVkX3Njc2lfY21uZDoKKwl6ZmNwX3VuaXRfcHV0KHVuaXQpOwogCXpmY3BfZnNmX3JlcV9mcmVlKGZzZl9yZXEpOwogCWZzZl9yZXEgPSBOVUxMOwogCXNjc2lfY21uZC0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7CkBAIC0zNjQwLDcgKzM2NTYsNyBAQAogCSAqIGhvbGQgYSBwb2ludGVyIHRvIHRoZSB1bml0IGJlaW5nIHRhcmdldCBvZiB0aGlzCiAJICogdGFzayBtYW5hZ2VtZW50IHJlcXVlc3QKIAkgKi8KLQlmc2ZfcmVxLT5kYXRhLnNlbmRfZmNwX2NvbW1hbmRfdGFza19tYW5hZ2VtZW50LnVuaXQgPSB1bml0OworCWZzZl9yZXEtPmRhdGEgPSAodW5zaWduZWQgbG9uZykgdW5pdDsKIAogCS8qIHNldCBGU0YgcmVsYXRlZCBmaWVsZHMgaW4gUVRDQiAqLwogCWZzZl9yZXEtPnF0Y2ItPmhlYWRlci5sdW5faGFuZGxlID0gdW5pdC0+aGFuZGxlOwpAQCAtMzcwNiw5ICszNzIyLDkgQEAKIAloZWFkZXIgPSAmZnNmX3JlcS0+cXRjYi0+aGVhZGVyOwogCiAJaWYgKHVubGlrZWx5KGZzZl9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9UQVNLX01BTkFHRU1FTlQpKQotCQl1bml0ID0gZnNmX3JlcS0+ZGF0YS5zZW5kX2ZjcF9jb21tYW5kX3Rhc2tfbWFuYWdlbWVudC51bml0OworCQl1bml0ID0gKHN0cnVjdCB6ZmNwX3VuaXQgKikgZnNmX3JlcS0+ZGF0YTsKIAllbHNlCi0JCXVuaXQgPSBmc2ZfcmVxLT5kYXRhLnNlbmRfZmNwX2NvbW1hbmRfdGFzay51bml0OworCQl1bml0ID0gZnNmX3JlcS0+dW5pdDsKIAogCWlmICh1bmxpa2VseShmc2ZfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1IpKSB7CiAJCS8qIGdvIGRpcmVjdGx5IHRvIGNhbGxzIG9mIHNwZWNpYWwgaGFuZGxlcnMgKi8KQEAgLTM3NjUsMTAgKzM3ODEsNiBAQAogCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDEsCiAJCQkJICJmc2Zfc19oYW5kX21pcyIpOwogCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbih1bml0LT5wb3J0LT5hZGFwdGVyLCAwKTsKLQkJemZjcF9jbWRfZGJmX2V2ZW50X2ZzZigiaGFuZG1pc20iLAotCQkJCSAgICAgICBmc2ZfcmVxLAotCQkJCSAgICAgICAmaGVhZGVyLT5mc2Zfc3RhdHVzX3F1YWwsCi0JCQkJICAgICAgIHNpemVvZiAodW5pb24gZnNmX3N0YXR1c19xdWFsKSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCkBAIC0zNzg5LDEwICszODAxLDYgQEAKIAkJZGVidWdfdGV4dF9leGNlcHRpb24oZnNmX3JlcS0+YWRhcHRlci0+ZXJwX2RiZiwgMCwKIAkJCQkgICAgICJmc2Zfc19jbGFzc19uc3VwIik7CiAJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24odW5pdC0+cG9ydC0+YWRhcHRlciwgMCk7Ci0JCXpmY3BfY21kX2RiZl9ldmVudF9mc2YoInVuc2NsYXNzIiwKLQkJCQkgICAgICAgZnNmX3JlcSwKLQkJCQkgICAgICAgJmhlYWRlci0+ZnNmX3N0YXR1c19xdWFsLAotCQkJCSAgICAgICBzaXplb2YgKHVuaW9uIGZzZl9zdGF0dXNfcXVhbCkpOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIApAQCAtMzgxMSwxMCArMzgxOSw2IEBACiAJCWRlYnVnX3RleHRfZXZlbnQoZnNmX3JlcS0+YWRhcHRlci0+ZXJwX2RiZiwgMSwKIAkJCQkgImZzZl9zX2ZjcF9sdW5fbnYiKTsKIAkJemZjcF9lcnBfcG9ydF9yZW9wZW4odW5pdC0+cG9ydCwgMCk7Ci0JCXpmY3BfY21kX2RiZl9ldmVudF9mc2YoImZsdW5pbnYiLAotCQkJCSAgICAgICBmc2ZfcmVxLAotCQkJCSAgICAgICAmaGVhZGVyLT5mc2Zfc3RhdHVzX3F1YWwsCi0JCQkJICAgICAgIHNpemVvZiAodW5pb24gZnNmX3N0YXR1c19xdWFsKSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCkBAIC0zODUzLDEwICszODU3LDYgQEAKIAkJZGVidWdfdGV4dF9ldmVudChmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAwLAogCQkJCSAiZnNmX3NfZGlyX2luZF9udiIpOwogCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKHVuaXQtPnBvcnQtPmFkYXB0ZXIsIDApOwotCQl6ZmNwX2NtZF9kYmZfZXZlbnRfZnNmKCJkaXJpbnYiLAotCQkJCSAgICAgICBmc2ZfcmVxLAotCQkJCSAgICAgICAmaGVhZGVyLT5mc2Zfc3RhdHVzX3F1YWwsCi0JCQkJICAgICAgIHNpemVvZiAodW5pb24gZnNmX3N0YXR1c19xdWFsKSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCkBAIC0zODcyLDEwICszODcyLDYgQEAKIAkJZGVidWdfdGV4dF9ldmVudChmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAwLAogCQkJCSAiZnNmX3NfY21kX2xlbl9udiIpOwogCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKHVuaXQtPnBvcnQtPmFkYXB0ZXIsIDApOwotCQl6ZmNwX2NtZF9kYmZfZXZlbnRfZnNmKCJjbGVuaW52IiwKLQkJCQkgICAgICAgZnNmX3JlcSwKLQkJCQkgICAgICAgJmhlYWRlci0+ZnNmX3N0YXR1c19xdWFsLAotCQkJCSAgICAgICBzaXplb2YgKHVuaW9uIGZzZl9zdGF0dXNfcXVhbCkpOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIApAQCAtMzk0Nyw2ICszOTQzLDggQEAKIAkJICAgIHpmY3BfZnNmX3NlbmRfZmNwX2NvbW1hbmRfdGFza19tYW5hZ2VtZW50X2hhbmRsZXIoZnNmX3JlcSk7CiAJfSBlbHNlIHsKIAkJcmV0dmFsID0gemZjcF9mc2Zfc2VuZF9mY3BfY29tbWFuZF90YXNrX2hhbmRsZXIoZnNmX3JlcSk7CisJCWZzZl9yZXEtPnVuaXQgPSBOVUxMOworCQl6ZmNwX3VuaXRfcHV0KHVuaXQpOwogCX0KIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtMzk3MCwxMCArMzk2OCwxMCBAQAogCXUzMiBzbnNfbGVuOwogCWNoYXIgKmZjcF9yc3BfaW5mbyA9IHpmY3BfZ2V0X2ZjcF9yc3BfaW5mb19wdHIoZmNwX3JzcF9pdSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgemZjcF91bml0ICp1bml0ID0gZnNmX3JlcS0+ZGF0YS5zZW5kX2ZjcF9jb21tYW5kX3Rhc2sudW5pdDsKKwlzdHJ1Y3QgemZjcF91bml0ICp1bml0ID0gZnNmX3JlcS0+dW5pdDsKIAogCXJlYWRfbG9ja19pcnFzYXZlKCZmc2ZfcmVxLT5hZGFwdGVyLT5hYm9ydF9sb2NrLCBmbGFncyk7Ci0Jc2NwbnQgPSBmc2ZfcmVxLT5kYXRhLnNlbmRfZmNwX2NvbW1hbmRfdGFzay5zY3NpX2NtbmQ7CisJc2NwbnQgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBmc2ZfcmVxLT5kYXRhOwogCWlmICh1bmxpa2VseSghc2NwbnQpKSB7CiAJCVpGQ1BfTE9HX0RFQlVHCiAJCSAgICAoIkNvbW1hbmQgd2l0aCBmc2ZfcmVxICVwIGlzIG5vdCBhc3NvY2lhdGVkIHRvICIKQEAgLTQwNDMsNyArNDA0MSw2IEBACiAJCQlaRkNQX0hFWF9EVU1QKFpGQ1BfTE9HX0xFVkVMX0RFQlVHLAogCQkJCSAgICAgIChjaGFyICopICZmc2ZfcmVxLT5xdGNiLT4KIAkJCQkgICAgICBib3R0b20uaW8uZmNwX2NtbmQsIEZTRl9GQ1BfQ01ORF9TSVpFKTsKLQkJCXpmY3BfY21kX2RiZl9ldmVudF9mc2YoImNsZW5taXMiLCBmc2ZfcmVxLCBOVUxMLCAwKTsKIAkJCXNldF9ob3N0X2J5dGUoJnNjcG50LT5yZXN1bHQsIERJRF9FUlJPUik7CiAJCQlnb3RvIHNraXBfZnNmc3RhdHVzOwogCQljYXNlIFJTUF9DT0RFX0ZJRUxEX0lOVkFMSUQ6CkBAIC00MDYyLDcgKzQwNTksNiBAQAogCQkJCSAgICAgIChjaGFyICopICZmc2ZfcmVxLT5xdGNiLT4KIAkJCQkgICAgICBib3R0b20uaW8uZmNwX2NtbmQsIEZTRl9GQ1BfQ01ORF9TSVpFKTsKIAkJCXNldF9ob3N0X2J5dGUoJnNjcG50LT5yZXN1bHQsIERJRF9FUlJPUik7Ci0JCQl6ZmNwX2NtZF9kYmZfZXZlbnRfZnNmKCJjb2RlaW52IiwgZnNmX3JlcSwgTlVMTCwgMCk7CiAJCQlnb3RvIHNraXBfZnNmc3RhdHVzOwogCQljYXNlIFJTUF9DT0RFX1JPX01JU01BVENIOgogCQkJLyogaGFyZHdhcmUgYnVnICovCkBAIC00MDc5LDcgKzQwNzUsNiBAQAogCQkJWkZDUF9IRVhfRFVNUChaRkNQX0xPR19MRVZFTF9ERUJVRywKIAkJCQkgICAgICAoY2hhciAqKSAmZnNmX3JlcS0+cXRjYi0+CiAJCQkJICAgICAgYm90dG9tLmlvLmZjcF9jbW5kLCBGU0ZfRkNQX0NNTkRfU0laRSk7Ci0JCQl6ZmNwX2NtZF9kYmZfZXZlbnRfZnNmKCJjb2RlbWlzbSIsIGZzZl9yZXEsIE5VTEwsIDApOwogCQkJc2V0X2hvc3RfYnl0ZSgmc2NwbnQtPnJlc3VsdCwgRElEX0VSUk9SKTsKIAkJCWdvdG8gc2tpcF9mc2ZzdGF0dXM7CiAJCWRlZmF1bHQ6CkBAIC00MDk2LDcgKzQwOTEsNiBAQAogCQkJWkZDUF9IRVhfRFVNUChaRkNQX0xPR19MRVZFTF9ERUJVRywKIAkJCQkgICAgICAoY2hhciAqKSAmZnNmX3JlcS0+cXRjYi0+CiAJCQkJICAgICAgYm90dG9tLmlvLmZjcF9jbW5kLCBGU0ZfRkNQX0NNTkRfU0laRSk7Ci0JCQl6ZmNwX2NtZF9kYmZfZXZlbnRfZnNmKCJ1bmRlZmZjcCIsIGZzZl9yZXEsIE5VTEwsIDApOwogCQkJc2V0X2hvc3RfYnl0ZSgmc2NwbnQtPnJlc3VsdCwgRElEX0VSUk9SKTsKIAkJCWdvdG8gc2tpcF9mc2ZzdGF0dXM7CiAJCX0KQEAgLTQxNTgsMTkgKzQxNTIsMTcgQEAKICBza2lwX2ZzZnN0YXR1czoKIAlaRkNQX0xPR19ERUJVRygic2NwbnQtPnJlc3VsdCA9MHgleFxuIiwgc2NwbnQtPnJlc3VsdCk7CiAKLQl6ZmNwX2NtZF9kYmZfZXZlbnRfc2NzaSgicmVzcG9uc2UiLCBzY3BudCk7CisJaWYgKHNjcG50LT5yZXN1bHQgIT0gMCkKKwkJemZjcF9zY3NpX2RiZl9ldmVudF9yZXN1bHQoImVycm8iLCAzLCBmc2ZfcmVxLT5hZGFwdGVyLCBzY3BudCk7CisJZWxzZSBpZiAoc2NwbnQtPnJldHJpZXMgPiAwKQorCQl6ZmNwX3Njc2lfZGJmX2V2ZW50X3Jlc3VsdCgicmV0ciIsIDQsIGZzZl9yZXEtPmFkYXB0ZXIsIHNjcG50KTsKKwllbHNlCisJCXpmY3Bfc2NzaV9kYmZfZXZlbnRfcmVzdWx0KCJub3JtIiwgNiwgZnNmX3JlcS0+YWRhcHRlciwgc2NwbnQpOwogCiAJLyogY2xlYW51cCBwb2ludGVyIChuZWVkIHRoaXMgZXNwZWNpYWxseSBmb3IgYWJvcnQpICovCiAJc2NwbnQtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOwogCi0JLyoKLQkgKiBOT1RFOgotCSAqIGFjY29yZGluZyB0byB0aGUgb3V0Y29tZSBvZiBhIGRpc2N1c3Npb24gb24gbGludXgtc2NzaSB3ZQotCSAqIGRvbid0IG5lZWQgdG8gZ3JhYiB0aGUgaW9fcmVxdWVzdF9sb2NrIGhlcmUgc2luY2Ugd2UgdXNlCi0JICogdGhlIG5ldyBlaAotCSAqLwogCS8qIGFsd2F5cyBjYWxsIGJhY2sgKi8KLQogCShzY3BudC0+c2NzaV9kb25lKSAoc2NwbnQpOwogCiAJLyoKQEAgLTQxOTgsOCArNDE5MCw3IEBACiAJc3RydWN0IGZjcF9yc3BfaXUgKmZjcF9yc3BfaXUgPSAoc3RydWN0IGZjcF9yc3BfaXUgKikKIAkgICAgJihmc2ZfcmVxLT5xdGNiLT5ib3R0b20uaW8uZmNwX3JzcCk7CiAJY2hhciAqZmNwX3JzcF9pbmZvID0gemZjcF9nZXRfZmNwX3JzcF9pbmZvX3B0cihmY3BfcnNwX2l1KTsKLQlzdHJ1Y3QgemZjcF91bml0ICp1bml0ID0KLQkgICAgZnNmX3JlcS0+ZGF0YS5zZW5kX2ZjcF9jb21tYW5kX3Rhc2tfbWFuYWdlbWVudC51bml0OworCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQgPSAoc3RydWN0IHpmY3BfdW5pdCAqKSBmc2ZfcmVxLT5kYXRhOwogCiAJZGVsX3RpbWVyKCZmc2ZfcmVxLT5hZGFwdGVyLT5zY3NpX2VyX3RpbWVyKTsKIAlpZiAoZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SKSB7CkBAIC00Mjc2LDcgKzQyNjcsNyBAQAogCWludCBkaXJlY3Rpb247CiAJaW50IHJldHZhbCA9IDA7CiAKLQlpZiAoIShhZGFwdGVyLT5zdXBwb3J0ZWRfZmVhdHVyZXMgJiBGU0ZfRkVBVFVSRV9DRkRDKSkgeworCWlmICghKGFkYXB0ZXItPmFkYXB0ZXJfZmVhdHVyZXMgJiBGU0ZfRkVBVFVSRV9DRkRDKSkgewogCQlaRkNQX0xPR19JTkZPKCJjZmRjIG5vdCBzdXBwb3J0ZWQgKGFkYXB0ZXIgJXMpXG4iLAogCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CiAJCXJldHZhbCA9IC1FT1BOT1RTVVBQOwpAQCAtNDU0OSw1MiArNDU0MCw2IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotCi0vKgotICogZnVuY3Rpb246ICAgIHpmY3BfZnNmX3JlcV93YWl0X2FuZF9jbGVhbnVwCi0gKgotICogcHVycG9zZToKLSAqCi0gKiBGSVhNRShkZXNpZ24pOiBzaWduYWwgc2VlbXMgdG8gYmUgPDAgISEhCi0gKiByZXR1cm5zOgkwCS0gcmVxdWVzdCBjb21wbGV0ZWQgKCpzdGF0dXMgaXMgdmFsaWQpLCBjbGVhbnVwIHN1Y2MuCi0gKgkJPDAJLSByZXF1ZXN0IGNvbXBsZXRlZCAoKnN0YXR1cyBpcyB2YWxpZCksIGNsZWFudXAgZmFpbGVkCi0gKgkJPjAJLSBzaWduYWwgd2hpY2ggaW50ZXJydXB0ZWQgd2FpdGluZyAoKnN0YXR1cyBpbnZhbGlkKSwKLSAqCQkJICByZXF1ZXN0IG5vdCBjb21wbGV0ZWQsIG5vIGNsZWFudXAKLSAqCi0gKgkJKnN0YXR1cyBpcyBhIGNvcHkgb2Ygc3RhdHVzIG9mIGNvbXBsZXRlZCBmc2ZfcmVxCi0gKi8KLWludAotemZjcF9mc2ZfcmVxX3dhaXRfYW5kX2NsZWFudXAoc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSwKLQkJCSAgICAgIGludCBpbnRlcnJ1cHRpYmxlLCB1MzIgKiBzdGF0dXMpCi17Ci0JaW50IHJldHZhbCA9IDA7Ci0JaW50IHNpZ25hbCA9IDA7Ci0KLQlpZiAoaW50ZXJydXB0aWJsZSkgewotCQlfX3dhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShmc2ZfcmVxLT5jb21wbGV0aW9uX3dxLAotCQkJCQkgICBmc2ZfcmVxLT5zdGF0dXMgJgotCQkJCQkgICBaRkNQX1NUQVRVU19GU0ZSRVFfQ09NUExFVEVELAotCQkJCQkgICBzaWduYWwpOwotCQlpZiAoc2lnbmFsKSB7Ci0JCQlaRkNQX0xPR19ERUJVRygiQ2F1Z2h0IHNpZ25hbCAlaSB3aGlsZSB3YWl0aW5nIGZvciB0aGUgIgotCQkJCSAgICAgICAiY29tcGxldGlvbiBvZiB0aGUgcmVxdWVzdCBhdCAlcFxuIiwKLQkJCQkgICAgICAgc2lnbmFsLCBmc2ZfcmVxKTsKLQkJCXJldHZhbCA9IHNpZ25hbDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfSBlbHNlIHsKLQkJX193YWl0X2V2ZW50KGZzZl9yZXEtPmNvbXBsZXRpb25fd3EsCi0JCQkgICAgIGZzZl9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9DT01QTEVURUQpOwotCX0KLQotCSpzdGF0dXMgPSBmc2ZfcmVxLT5zdGF0dXM7Ci0KLQkvKiBjbGVhbnVwIHJlcXVlc3QgKi8KLQl6ZmNwX2ZzZl9yZXFfZnJlZShmc2ZfcmVxKTsKLSBvdXQ6Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQogc3RhdGljIGlubGluZSBpbnQKIHpmY3BfZnNmX3JlcV9zYmFsX2NoZWNrKHVuc2lnbmVkIGxvbmcgKmZsYWdzLAogCQkJc3RydWN0IHpmY3BfcWRpb19xdWV1ZSAqcXVldWUsIGludCBuZWVkZWQpCkBAIC00NjEwLDE1ICs0NTU1LDE2IEBACiAgKiBzZXQgcXRjYiBwb2ludGVyIGluIGZzZl9yZXEgYW5kIGluaXRpYWxpemUgUVRDQgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLXpmY3BfZnNmX3JlcV9xdGNiX2luaXQoc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSwgdTMyIGZzZl9jbWQpCit6ZmNwX2ZzZl9yZXFfcXRjYl9pbml0KHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCiB7CiAJaWYgKGxpa2VseShmc2ZfcmVxLT5xdGNiICE9IE5VTEwpKSB7CisJCWZzZl9yZXEtPnF0Y2ItPnByZWZpeC5yZXFfc2VxX25vID0gZnNmX3JlcS0+YWRhcHRlci0+ZnNmX3JlcV9zZXFfbm87CiAJCWZzZl9yZXEtPnF0Y2ItPnByZWZpeC5yZXFfaWQgPSAodW5zaWduZWQgbG9uZylmc2ZfcmVxOwogCQlmc2ZfcmVxLT5xdGNiLT5wcmVmaXgudWxwX2luZm8gPSBaRkNQX1VMUF9JTkZPX1ZFUlNJT047Ci0JCWZzZl9yZXEtPnF0Y2ItPnByZWZpeC5xdGNiX3R5cGUgPSBmc2ZfcXRjYl90eXBlW2ZzZl9jbWRdOworCQlmc2ZfcmVxLT5xdGNiLT5wcmVmaXgucXRjYl90eXBlID0gZnNmX3F0Y2JfdHlwZVtmc2ZfcmVxLT5mc2ZfY29tbWFuZF07CiAJCWZzZl9yZXEtPnF0Y2ItPnByZWZpeC5xdGNiX3ZlcnNpb24gPSBaRkNQX1FUQ0JfVkVSU0lPTjsKIAkJZnNmX3JlcS0+cXRjYi0+aGVhZGVyLnJlcV9oYW5kbGUgPSAodW5zaWduZWQgbG9uZylmc2ZfcmVxOwotCQlmc2ZfcmVxLT5xdGNiLT5oZWFkZXIuZnNmX2NvbW1hbmQgPSBmc2ZfY21kOworCQlmc2ZfcmVxLT5xdGNiLT5oZWFkZXIuZnNmX2NvbW1hbmQgPSBmc2ZfcmVxLT5mc2ZfY29tbWFuZDsKIAl9CiB9CiAKQEAgLTQ2ODYsNyArNDYzMiwxMCBAQAogCQlnb3RvIGZhaWxlZF9mc2ZfcmVxOwogCX0KIAotICAgICAgICB6ZmNwX2ZzZl9yZXFfcXRjYl9pbml0KGZzZl9yZXEsIGZzZl9jbWQpOworCWZzZl9yZXEtPmFkYXB0ZXIgPSBhZGFwdGVyOworCWZzZl9yZXEtPmZzZl9jb21tYW5kID0gZnNmX2NtZDsKKworICAgICAgICB6ZmNwX2ZzZl9yZXFfcXRjYl9pbml0KGZzZl9yZXEpOwogCiAJLyogaW5pdGlhbGl6ZSB3YWl0cXVldWUgd2hpY2ggbWF5IGJlIHVzZWQgdG8gd2FpdCBvbiAKIAkgICB0aGlzIHJlcXVlc3QgY29tcGxldGlvbiAqLwpAQCAtNDcwOCw4ICs0NjU3LDEwIEBACiAJCWdvdG8gZmFpbGVkX3NiYWxzOwogCX0KIAotCWZzZl9yZXEtPmFkYXB0ZXIgPSBhZGFwdGVyOwkvKiBwb2ludGVyIHRvICJwYXJlbnQiIGFkYXB0ZXIgKi8KLQlmc2ZfcmVxLT5mc2ZfY29tbWFuZCA9IGZzZl9jbWQ7CisJaWYgKGZzZl9yZXEtPnF0Y2IpIHsKKwkJZnNmX3JlcS0+c2VxX25vID0gYWRhcHRlci0+ZnNmX3JlcV9zZXFfbm87CisJCWZzZl9yZXEtPnF0Y2ItPnByZWZpeC5yZXFfc2VxX25vID0gYWRhcHRlci0+ZnNmX3JlcV9zZXFfbm87CisJfQogCWZzZl9yZXEtPnNiYWxfbnVtYmVyID0gMTsKIAlmc2ZfcmVxLT5zYmFsX2ZpcnN0ID0gcmVxX3F1ZXVlLT5mcmVlX2luZGV4OwogCWZzZl9yZXEtPnNiYWxfY3VyciA9IHJlcV9xdWV1ZS0+ZnJlZV9pbmRleDsKQEAgLTQ3NjAsOSArNDcxMSw5IEBACiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcjsKIAlzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlICpyZXFfcXVldWU7CiAJdm9sYXRpbGUgc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlOworCWludCBpbmNfc2VxX25vOwogCWludCBuZXdfZGlzdGFuY2VfZnJvbV9pbnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaW5jX3NlcV9ubyA9IDE7CiAJaW50IHJldHZhbCA9IDA7CiAKIAlhZGFwdGVyID0gZnNmX3JlcS0+YWRhcHRlcjsKQEAgLTQ3NzYsMjMgKzQ3MjcsMTMgQEAKIAlaRkNQX0hFWF9EVU1QKFpGQ1BfTE9HX0xFVkVMX1RSQUNFLCAoY2hhciAqKSBzYmFsZVsxXS5hZGRyLAogCQkgICAgICBzYmFsZVsxXS5sZW5ndGgpOwogCi0JLyogc2V0IHNlcXVlbmNlIGNvdW50ZXIgaW4gUVRDQiAqLwotCWlmIChsaWtlbHkoZnNmX3JlcS0+cXRjYikpIHsKLQkJZnNmX3JlcS0+cXRjYi0+cHJlZml4LnJlcV9zZXFfbm8gPSBhZGFwdGVyLT5mc2ZfcmVxX3NlcV9ubzsKLQkJZnNmX3JlcS0+c2VxX25vID0gYWRhcHRlci0+ZnNmX3JlcV9zZXFfbm87Ci0JCVpGQ1BfTE9HX1RSQUNFKCJGU0YgcmVxdWVzdCAlcCBvZiBhZGFwdGVyICVzIGdldHMgIgotCQkJICAgICAgICJGU0Ygc2VxdWVuY2UgY291bnRlciB2YWx1ZSBvZiAlaVxuIiwKLQkJCSAgICAgICBmc2ZfcmVxLAotCQkJICAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlciksCi0JCQkgICAgICAgZnNmX3JlcS0+cXRjYi0+cHJlZml4LnJlcV9zZXFfbm8pOwotCX0gZWxzZQotCQlpbmNfc2VxX25vID0gMDsKLQogCS8qIHB1dCBhbGxvY2F0ZWQgRlNGIHJlcXVlc3QgYXQgbGlzdCB0YWlsICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmZzZl9yZXFfbGlzdF9sb2NrLCBmbGFncyk7CiAJbGlzdF9hZGRfdGFpbCgmZnNmX3JlcS0+bGlzdCwgJmFkYXB0ZXItPmZzZl9yZXFfbGlzdF9oZWFkKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5mc2ZfcmVxX2xpc3RfbG9jaywgZmxhZ3MpOwogCisJaW5jX3NlcV9ubyA9IChmc2ZfcmVxLT5xdGNiICE9IE5VTEwpOworCiAJLyogZmlndXJlIG91dCBleHBpcmF0aW9uIHRpbWUgb2YgdGltZW91dCBhbmQgc3RhcnQgdGltZW91dCAqLwogCWlmICh1bmxpa2VseSh0aW1lcikpIHsKIAkJdGltZXItPmV4cGlyZXMgKz0gamlmZmllczsKQEAgLTQ4MjIsNiArNDc2Myw4IEBACiAJcmVxX3F1ZXVlLT5mcmVlX2luZGV4ICU9IFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7ICAvKiB3cmFwIGlmIG5lZWRlZCAqLwogCW5ld19kaXN0YW5jZV9mcm9tX2ludCA9IHpmY3BfcWRpb19kZXRlcm1pbmVfcGNpKHJlcV9xdWV1ZSwgZnNmX3JlcSk7CiAKKwlmc2ZfcmVxLT5pc3N1ZWQgPSBnZXRfY2xvY2soKTsKKwogCXJldHZhbCA9IGRvX1FESU8oYWRhcHRlci0+Y2N3X2RldmljZSwKIAkJCSBRRElPX0ZMQUdfU1lOQ19PVVRQVVQsCiAJCQkgMCwgZnNmX3JlcS0+c2JhbF9maXJzdCwgZnNmX3JlcS0+c2JhbF9udW1iZXIsIE5VTEwpOwpAQCAtNDg2MCwxNSArNDgwMywxMSBAQAogCQkgKiByb3V0aW5lcyAgcmVzdWx0aW5nIGluIG1pc3Npbmcgc2VxdWVuY2UgY291bnRlciB2YWx1ZXMKIAkJICogb3RoZXJ3aXNlLAogCQkgKi8KKwogCQkvKiBEb24ndCBpbmNyZWFzZSBmb3IgdW5zb2xpY2l0ZWQgc3RhdHVzICovCi0JCWlmIChsaWtlbHkoaW5jX3NlcV9ubykpIHsKKwkJaWYgKGluY19zZXFfbm8pCiAJCQlhZGFwdGVyLT5mc2ZfcmVxX3NlcV9ubysrOwotCQkJWkZDUF9MT0dfVFJBQ0UKLQkJCSAgICAoIkZTRiBzZXF1ZW5jZSBjb3VudGVyIHZhbHVlIG9mIGFkYXB0ZXIgJXMgIgotCQkJICAgICAiaW5jcmVhc2VkIHRvICVpXG4iLAotCQkJICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpLAotCQkJICAgICBhZGFwdGVyLT5mc2ZfcmVxX3NlcV9ubyk7Ci0JCX0KKwogCQkvKiBjb3VudCBGU0YgcmVxdWVzdHMgcGVuZGluZyAqLwogCQlhdG9taWNfaW5jKCZhZGFwdGVyLT5mc2ZfcmVxc19hY3RpdmUpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5oCmluZGV4IDA3MTQwZGYuLjQ4NzE5ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuaApAQCAtMTE2LDYgKzExNiw3IEBACiAjZGVmaW5lIEZTRl9JTlZBTElEX0NPTU1BTkRfT1BUSU9OICAgICAgICAgICAgICAweDAwMDAwMEU1CiAvKiAjZGVmaW5lIEZTRl9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRiAgKi8KIAorI2RlZmluZSBGU0ZfUFJPVF9TVEFUVVNfUVVBTF9TSVpFCQkxNgogI2RlZmluZSBGU0ZfU1RBVFVTX1FVQUxJRklFUl9TSVpFCQkxNgogCiAvKiBGU0Ygc3RhdHVzIHF1YWxpZmllciwgcmVjb21tZW5kYXRpb25zICovCkBAIC0xMzksOSArMTQwLDE4IEBACiAjZGVmaW5lIEZTRl9TUV9DRkRDX1NVQlRBQkxFX0xVTgkJMHgwMDA0CiAKIC8qIEZTRiBzdGF0dXMgcXVhbGlmaWVyIChtb3N0IHNpZ25pZmljYW50IDQgYnl0ZXMpLCBsb2NhbCBsaW5rIGRvd24gKi8KLSNkZWZpbmUgRlNGX1BTUV9MSU5LX05PTElHSFQJCQkweDAwMDAwMDA0Ci0jZGVmaW5lIEZTRl9QU1FfTElOS19XUkFQUExVRwkJCTB4MDAwMDAwMDgKLSNkZWZpbmUgRlNGX1BTUV9MSU5LX05PRkNQCQkJMHgwMDAwMDAxMAorI2RlZmluZSBGU0ZfUFNRX0xJTktfTk9fTElHSFQJCQkweDAwMDAwMDA0CisjZGVmaW5lIEZTRl9QU1FfTElOS19XUkFQX1BMVUcJCQkweDAwMDAwMDA4CisjZGVmaW5lIEZTRl9QU1FfTElOS19OT19GQ1AJCQkweDAwMDAwMDEwCisjZGVmaW5lIEZTRl9QU1FfTElOS19GSVJNV0FSRV9VUERBVEUJCTB4MDAwMDAwMjAKKyNkZWZpbmUgRlNGX1BTUV9MSU5LX0lOVkFMSURfV1dQTgkJMHgwMDAwMDEwMAorI2RlZmluZSBGU0ZfUFNRX0xJTktfTk9fTlBJVl9TVVBQT1JUCQkweDAwMDAwMjAwCisjZGVmaW5lIEZTRl9QU1FfTElOS19OT19GQ1BfUkVTT1VSQ0VTCQkweDAwMDAwNDAwCisjZGVmaW5lIEZTRl9QU1FfTElOS19OT19GQUJSSUNfUkVTT1VSQ0VTCTB4MDAwMDA4MDAKKyNkZWZpbmUgRlNGX1BTUV9MSU5LX0ZBQlJJQ19MT0dJTl9VTkFCTEUJMHgwMDAwMTAwMAorI2RlZmluZSBGU0ZfUFNRX0xJTktfV1dQTl9BU1NJR05NRU5UX0NPUlJVUFRFRAkweDAwMDAyMDAwCisjZGVmaW5lIEZTRl9QU1FfTElOS19NT0RFX1RBQkxFX0NVUlJVUFRFRAkweDAwMDA0MDAwCisjZGVmaW5lIEZTRl9QU1FfTElOS19OT19XV1BOX0FTU0lHTk1FTlQJCTB4MDAwMDgwMDAKIAogLyogcGF5bG9hZCBzaXplIGluIHN0YXR1cyByZWFkIGJ1ZmZlciAqLwogI2RlZmluZSBGU0ZfU1RBVFVTX1JFQURfUEFZTE9BRF9TSVpFCQk0MDMyCkBAIC0xNTQsMTUgKzE2NCwyMSBAQAogI2RlZmluZSBGU0ZfU1RBVFVTX1JFQURfSU5DT01JTkdfRUxTCQkweDAwMDAwMDAyCiAjZGVmaW5lIEZTRl9TVEFUVVNfUkVBRF9TRU5TRV9EQVRBX0FWQUlMICAgICAgICAweDAwMDAwMDAzCiAjZGVmaW5lIEZTRl9TVEFUVVNfUkVBRF9CSVRfRVJST1JfVEhSRVNIT0xECTB4MDAwMDAwMDQKLSNkZWZpbmUgRlNGX1NUQVRVU19SRUFEX0xJTktfRE9XTgkJMHgwMDAwMDAwNSAvKiBGSVhNRTogcmVhbGx5PyAqLworI2RlZmluZSBGU0ZfU1RBVFVTX1JFQURfTElOS19ET1dOCQkweDAwMDAwMDA1CiAjZGVmaW5lIEZTRl9TVEFUVVNfUkVBRF9MSU5LX1VQICAgICAgICAgIAkweDAwMDAwMDA2CiAjZGVmaW5lIEZTRl9TVEFUVVNfUkVBRF9DRkRDX1VQREFURUQJCTB4MDAwMDAwMEEKICNkZWZpbmUgRlNGX1NUQVRVU19SRUFEX0NGRENfSEFSREVORUQJCTB4MDAwMDAwMEIKKyNkZWZpbmUgRlNGX1NUQVRVU19SRUFEX0ZFQVRVUkVfVVBEQVRFX0FMRVJUCTB4MDAwMDAwMEMKIAogLyogc3RhdHVzIHN1YnR5cGVzIGluIHN0YXR1cyByZWFkIGJ1ZmZlciAqLwogI2RlZmluZSBGU0ZfU1RBVFVTX1JFQURfU1VCX0NMT1NFX1BIWVNfUE9SVAkweDAwMDAwMDAxCiAjZGVmaW5lIEZTRl9TVEFUVVNfUkVBRF9TVUJfRVJST1JfUE9SVAkJMHgwMDAwMDAwMgogCisvKiBzdGF0dXMgc3VidHlwZXMgZm9yIGxpbmsgZG93biAqLworI2RlZmluZSBGU0ZfU1RBVFVTX1JFQURfU1VCX05PX1BIWVNJQ0FMX0xJTksJMHgwMDAwMDAwMAorI2RlZmluZSBGU0ZfU1RBVFVTX1JFQURfU1VCX0ZESVNDX0ZBSUxFRAkweDAwMDAwMDAxCisjZGVmaW5lIEZTRl9TVEFUVVNfUkVBRF9TVUJfRklSTVdBUkVfVVBEQVRFCTB4MDAwMDAwMDIKKwogLyogc3RhdHVzIHN1YnR5cGVzIGZvciBDRkRDICovCiAjZGVmaW5lIEZTRl9TVEFUVVNfUkVBRF9TVUJfQ0ZEQ19IQVJERU5FRF9PTl9TRQkweDAwMDAwMDAyCiAjZGVmaW5lIEZTRl9TVEFUVVNfUkVBRF9TVUJfQ0ZEQ19IQVJERU5FRF9PTl9TRTIgMHgwMDAwMDAwRgpAQCAtMTkzLDExICsyMDksMTUgQEAKICNkZWZpbmUgRlNGX1FUQ0JfTE9HX1NJWkUJCQkxMDI0CiAKIC8qIGNoYW5uZWwgZmVhdHVyZXMgKi8KLSNkZWZpbmUgRlNGX0ZFQVRVUkVfUVRDQl9TVVBQUkVTU0lPTiAgICAgICAgICAgIDB4MDAwMDAwMDEKICNkZWZpbmUgRlNGX0ZFQVRVUkVfQ0ZEQwkJCTB4MDAwMDAwMDIKICNkZWZpbmUgRlNGX0ZFQVRVUkVfTFVOX1NIQVJJTkcJCQkweDAwMDAwMDA0CiAjZGVmaW5lIEZTRl9GRUFUVVJFX0hCQUFQSV9NQU5BR0VNRU5UICAgICAgICAgICAweDAwMDAwMDEwCiAjZGVmaW5lIEZTRl9GRUFUVVJFX0VMU19DVF9DSEFJTkVEX1NCQUxTICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEZTRl9GRUFUVVJFX1VQREFURV9BTEVSVAkJMHgwMDAwMDEwMAorCisvKiBob3N0IGNvbm5lY3Rpb24gZmVhdHVyZXMgKi8KKyNkZWZpbmUgRlNGX0ZFQVRVUkVfTlBJVl9NT0RFCQkJMHgwMDAwMDAwMQorI2RlZmluZSBGU0ZfRkVBVFVSRV9WTV9BU1NJR05FRF9XV1BOCQkweDAwMDAwMDAyCiAKIC8qIG9wdGlvbiAqLwogI2RlZmluZSBGU0ZfT1BFTl9MVU5fU1VQUFJFU1NfQk9YSU5HCQkweDAwMDAwMDAxCkBAIC0zMDUsMTUgKzMyNSwyMyBAQAogCXUzMiByZXMxWzNdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXN0cnVjdCBmc2ZfcXVhbF9sb2NhbGxpbmtfZXJyb3IgewotCXUzMiBjb2RlOwotCXUzMiByZXMxWzNdOworc3RydWN0IGZzZl9saW5rX2Rvd25faW5mbyB7CisJdTMyIGVycm9yX2NvZGU7CisJdTMyIHJlczE7CisJdTggcmVzMlsyXTsKKwl1OCBwcmltYXJ5X3N0YXR1czsKKwl1OCBpb2Vycl9jb2RlOworCXU4IGFjdGlvbl9jb2RlOworCXU4IHJlYXNvbl9jb2RlOworCXU4IGV4cGxhbmF0aW9uX2NvZGU7CisJdTggdmVuZG9yX3NwZWNpZmljX2NvZGU7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogdW5pb24gZnNmX3Byb3Rfc3RhdHVzX3F1YWwgeworCXU2NCBkb3VibGV3b3JkW0ZTRl9QUk9UX1NUQVRVU19RVUFMX1NJWkUgLyBzaXplb2YodTY0KV07CiAJc3RydWN0IGZzZl9xdWFsX3ZlcnNpb25fZXJyb3IgICB2ZXJzaW9uX2Vycm9yOwogCXN0cnVjdCBmc2ZfcXVhbF9zZXF1ZW5jZV9lcnJvciAgc2VxdWVuY2VfZXJyb3I7Ci0Jc3RydWN0IGZzZl9xdWFsX2xvY2FsbGlua19lcnJvciBsb2NhbGxpbmtfZXJyb3I7CisJc3RydWN0IGZzZl9saW5rX2Rvd25faW5mbyBsaW5rX2Rvd25faW5mbzsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgZnNmX3F0Y2JfcHJlZml4IHsKQEAgLTMzMSw3ICszNTksOSBAQAogCXU4ICBieXRlW0ZTRl9TVEFUVVNfUVVBTElGSUVSX1NJWkVdOwogCXUxNiBoYWxmd29yZFtGU0ZfU1RBVFVTX1FVQUxJRklFUl9TSVpFIC8gc2l6ZW9mICh1MTYpXTsKIAl1MzIgd29yZFtGU0ZfU1RBVFVTX1FVQUxJRklFUl9TSVpFIC8gc2l6ZW9mICh1MzIpXTsKKwl1NjQgZG91Ymxld29yZFtGU0ZfU1RBVFVTX1FVQUxJRklFUl9TSVpFIC8gc2l6ZW9mKHU2NCldOwogCXN0cnVjdCBmc2ZfcXVldWVfZGVzaWduYXRvciBmc2ZfcXVldWVfZGVzaWduYXRvcjsKKwlzdHJ1Y3QgZnNmX2xpbmtfZG93bl9pbmZvIGxpbmtfZG93bl9pbmZvOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBmc2ZfcXRjYl9oZWFkZXIgewpAQCAtNDA2LDggKzQzNiw4IEBACiAJdTMyIGxvd19xdGNiX3ZlcnNpb247CiAJdTMyIG1heF9xdGNiX3NpemU7CiAJdTMyIG1heF9kYXRhX3RyYW5zZmVyX3NpemU7Ci0JdTMyIHN1cHBvcnRlZF9mZWF0dXJlczsKLQl1OCAgcmVzMVs0XTsKKwl1MzIgYWRhcHRlcl9mZWF0dXJlczsKKwl1MzIgY29ubmVjdGlvbl9mZWF0dXJlczsKIAl1MzIgZmNfdG9wb2xvZ3k7CiAJdTMyIGZjX2xpbmtfc3BlZWQ7CiAJdTMyIGFkYXB0ZXJfdHlwZTsKQEAgLTQyNSw3ICs0NTUsNyBAQAogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBmc2ZfcXRjYl9ib3R0b21fcG9ydCB7Ci0JdTggcmVzMVs4XTsKKwl1NjQgd3dwbjsKIAl1MzIgZmNfcG9ydF9pZDsKIAl1MzIgcG9ydF90eXBlOwogCXUzMiBwb3J0X3N0YXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYwppbmRleCAyNGUxNmVjLi5kNzE5ZjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYwpAQCAtNTQsOCArNTQsNyBAQAogc3RhdGljIHFkaW9faGFuZGxlcl90IHpmY3BfcWRpb19yZXF1ZXN0X2hhbmRsZXI7CiBzdGF0aWMgcWRpb19oYW5kbGVyX3QgemZjcF9xZGlvX3Jlc3BvbnNlX2hhbmRsZXI7CiBzdGF0aWMgaW50IHpmY3BfcWRpb19oYW5kbGVyX2Vycm9yX2NoZWNrKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwKLQkJCQkJIHVuc2lnbmVkIGludCwKLQkJCQkJIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKKwl1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCBpbnQsIGludCk7CiAKICNkZWZpbmUgWkZDUF9MT0dfQVJFQSAgICAgICAgICAgICAgICAgICBaRkNQX0xPR19BUkVBX1FESU8KIApAQCAtMjE0LDIyICsyMTMsMTIgQEAKICAqCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50Ci16ZmNwX3FkaW9faGFuZGxlcl9lcnJvcl9jaGVjayhzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAotCQkJICAgICAgdW5zaWduZWQgaW50IHN0YXR1cywKLQkJCSAgICAgIHVuc2lnbmVkIGludCBxZGlvX2Vycm9yLCB1bnNpZ25lZCBpbnQgc2lnYV9lcnJvcikKK3pmY3BfcWRpb19oYW5kbGVyX2Vycm9yX2NoZWNrKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIHVuc2lnbmVkIGludCBzdGF0dXMsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgcWRpb19lcnJvciwgdW5zaWduZWQgaW50IHNpZ2FfZXJyb3IsCisJCQkgICAgICBpbnQgZmlyc3RfZWxlbWVudCwgaW50IGVsZW1lbnRzX3Byb2Nlc3NlZCkKIHsKIAlpbnQgcmV0dmFsID0gMDsKIAotCWlmIChaRkNQX0xPR19DSEVDSyhaRkNQX0xPR19MRVZFTF9UUkFDRSkpIHsKLQkJaWYgKHN0YXR1cyAmIFFESU9fU1RBVFVTX0lOQk9VTkRfSU5UKSB7Ci0JCQlaRkNQX0xPR19UUkFDRSgic3RhdHVzIGlzIgotCQkJCSAgICAgICAiIFFESU9fU1RBVFVTX0lOQk9VTkRfSU5UIFxuIik7Ci0JCX0KLQkJaWYgKHN0YXR1cyAmIFFESU9fU1RBVFVTX09VVEJPVU5EX0lOVCkgewotCQkJWkZDUF9MT0dfVFJBQ0UoInN0YXR1cyBpcyIKLQkJCQkgICAgICAgIiBRRElPX1NUQVRVU19PVVRCT1VORF9JTlQgXG4iKTsKLQkJfQotCX0KIAlpZiAodW5saWtlbHkoc3RhdHVzICYgUURJT19TVEFUVVNfTE9PS19GT1JfRVJST1IpKSB7CiAJCXJldHZhbCA9IC1FSU87CiAKQEAgLTIzNyw5ICsyMjYsMTAgQEAKIAkJCSAgICAgICJxZGlvX2Vycm9yPTB4JXgsIHNpZ2FfZXJyb3I9MHgleClcbiIsCiAJCQkgICAgICBzdGF0dXMsIHFkaW9fZXJyb3IsIHNpZ2FfZXJyb3IpOwogCi0JCS8qIFJlc3RhcnRpbmcgSU8gb24gdGhlIGZhaWxlZCBhZGFwdGVyIGZyb20gc2NyYXRjaCAqLwotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDEsICJxZGlvX2VyciIpOworCQl6ZmNwX2hiYV9kYmZfZXZlbnRfcWRpbyhhZGFwdGVyLCBzdGF0dXMsIHFkaW9fZXJyb3IsIHNpZ2FfZXJyb3IsCisJCQkJZmlyc3RfZWxlbWVudCwgZWxlbWVudHNfcHJvY2Vzc2VkKTsKICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAJKiBSZXN0YXJ0aW5nIElPIG9uIHRoZSBmYWlsZWQgYWRhcHRlciBmcm9tIHNjcmF0Y2guCiAgICAgICAgICAgICAgICAgKiBTaW5jZSB3ZSBoYXZlIGJlZW4gdXNpbmcgdGhpcyBhZGFwdGVyLCBpdCBpcyBzYXZlIHRvIGFzc3VtZQogICAgICAgICAgICAgICAgICogdGhhdCBpdCBpcyBub3QgZmFpbGVkIGJ1dCByZWNvdmVyYWJsZS4gVGhlIGNhcmQgc2VlbXMgdG8KICAgICAgICAgICAgICAgICAqIHJlcG9ydCBsaW5rLXVwIGV2ZW50cyBieSBzZWxmLWluaXRpYXRlZCBxdWV1ZSBzaHV0ZG93bi4KQEAgLTI4Miw3ICsyNzIsOCBAQAogCQkgICAgICAgZmlyc3RfZWxlbWVudCwgZWxlbWVudHNfcHJvY2Vzc2VkKTsKIAogCWlmICh1bmxpa2VseSh6ZmNwX3FkaW9faGFuZGxlcl9lcnJvcl9jaGVjayhhZGFwdGVyLCBzdGF0dXMsIHFkaW9fZXJyb3IsCi0JCQkJCSAgICAgICAgICAgc2lnYV9lcnJvcikpKQorCQkJCQkJICAgc2lnYV9lcnJvciwgZmlyc3RfZWxlbWVudCwKKwkJCQkJCSAgIGVsZW1lbnRzX3Byb2Nlc3NlZCkpKQogCQlnb3RvIG91dDsKIAkvKgogCSAqIHdlIHN0b3JlZCBhZGRyZXNzIG9mIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgIGRhdGEgc3RydWN0dXJlCkBAIC0zMzQsNyArMzI1LDggQEAKIAlxdWV1ZSA9ICZhZGFwdGVyLT5yZXNwb25zZV9xdWV1ZTsKIAogCWlmICh1bmxpa2VseSh6ZmNwX3FkaW9faGFuZGxlcl9lcnJvcl9jaGVjayhhZGFwdGVyLCBzdGF0dXMsIHFkaW9fZXJyb3IsCi0JCQkJCSAgICAgICAgICAgc2lnYV9lcnJvcikpKQorCQkJCQkJICAgc2lnYV9lcnJvciwgZmlyc3RfZWxlbWVudCwKKwkJCQkJCSAgIGVsZW1lbnRzX3Byb2Nlc3NlZCkpKQogCQlnb3RvIG91dDsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc2NzaS5jCmluZGV4IDMxYTc2MDYuLjNkY2QxYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc2NzaS5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc2NzaS5jCkBAIC00NCw3ICs0NCw4IEBACiBzdGF0aWMgaW50IHpmY3Bfc2NzaV9laF9kZXZpY2VfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICopOwogc3RhdGljIGludCB6ZmNwX3Njc2lfZWhfYnVzX3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqKTsKIHN0YXRpYyBpbnQgemZjcF9zY3NpX2VoX2hvc3RfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICopOwotc3RhdGljIGludCB6ZmNwX3Rhc2tfbWFuYWdlbWVudF9mdW5jdGlvbihzdHJ1Y3QgemZjcF91bml0ICosIHU4KTsKK3N0YXRpYyBpbnQgemZjcF90YXNrX21hbmFnZW1lbnRfZnVuY3Rpb24oc3RydWN0IHpmY3BfdW5pdCAqLCB1OCwKKwkJCQkJIHN0cnVjdCBzY3NpX2NtbmQgKik7CiAKIHN0YXRpYyBzdHJ1Y3QgemZjcF91bml0ICp6ZmNwX3VuaXRfbG9va3VwKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwgaW50LCBzY3NpX2lkX3QsCiAJCQkJCSAgc2NzaV9sdW5fdCk7CkBAIC0yNDIsNyArMjQzLDEwIEBACiB6ZmNwX3Njc2lfY29tbWFuZF9mYWlsKHN0cnVjdCBzY3NpX2NtbmQgKnNjcG50LCBpbnQgcmVzdWx0KQogewogCXNldF9ob3N0X2J5dGUoJnNjcG50LT5yZXN1bHQsIHJlc3VsdCk7Ci0JemZjcF9jbWRfZGJmX2V2ZW50X3Njc2koImZhaWxpbmciLCBzY3BudCk7CisJaWYgKChzY3BudC0+ZGV2aWNlICE9IE5VTEwpICYmIChzY3BudC0+ZGV2aWNlLT5ob3N0ICE9IE5VTEwpKQorCQl6ZmNwX3Njc2lfZGJmX2V2ZW50X3Jlc3VsdCgiZmFpbCIsIDQsCisJCQkoc3RydWN0IHpmY3BfYWRhcHRlciopIHNjcG50LT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhWzBdLAorCQkJc2NwbnQpOwogCS8qIHJldHVybiBkaXJlY3RseSAqLwogCXNjcG50LT5zY3NpX2RvbmUoc2NwbnQpOwogfQpAQCAtNDE0LDY3ICs0MTgsMzggQEAKIAlyZXR1cm4gKHN0cnVjdCB6ZmNwX3BvcnQgKikgTlVMTDsKIH0KIAotLyoKLSAqIGZ1bmN0aW9uOgl6ZmNwX3Njc2lfZWhfYWJvcnRfaGFuZGxlcgorLyoqCisgKiB6ZmNwX3Njc2lfZWhfYWJvcnRfaGFuZGxlciAtIGFib3J0IHRoZSBzcGVjaWZpZWQgU0NTSSBjb21tYW5kCisgKiBAc2NwbnQ6IHBvaW50ZXIgdG8gc2NzaV9jbW5kIHRvIGJlIGFib3J0ZWQgCisgKiBSZXR1cm46IFNVQ0NFU1MgLSBjb21tYW5kIGhhcyBiZWVuIGFib3J0ZWQgYW5kIGNsZWFuZWQgdXAgaW4gaW50ZXJuYWwKKyAqICAgICAgICAgIGJvb2trZWVwaW5nLCBTQ1NJIHN0YWNrIHdvbid0IGJlIGNhbGxlZCBmb3IgYWJvcnRlZCBjb21tYW5kCisgKiAgICAgICAgIEZBSUxFRCAtIG90aGVyd2lzZQogICoKLSAqIHB1cnBvc2U6CXRyaWVzIHRvIGFib3J0IHRoZSBzcGVjaWZpZWQgKHRpbWVkIG91dCkgU0NTSSBjb21tYW5kCi0gKgotICogbm90ZTogCVdlIGRvIG5vdCBuZWVkIHRvIGNhcmUgZm9yIGEgU0NTSSBjb21tYW5kIHdoaWNoIGNvbXBsZXRlcwotICoJCW5vcm1hbGx5IGJ1dCBsYXRlIGR1cmluZyB0aGlzIGFib3J0IHJvdXRpbmUgcnVucy4KLSAqCQlXZSBhcmUgYWxsb3dlZCB0byByZXR1cm4gbGF0ZSBjb21tYW5kcyB0byB0aGUgU0NTSSBzdGFjay4KLSAqCQlJdCB0cmFja3MgdGhlIHN0YXRlIG9mIGNvbW1hbmRzIGFuZCB3aWxsIGhhbmRsZSBsYXRlIGNvbW1hbmRzLgotICoJCShVc3VhbGx5LCB0aGUgbm9ybWFsIGNvbXBsZXRpb24gb2YgbGF0ZSBjb21tYW5kcyBpcyBpZ25vcmVkIHdpdGgKLSAqCQlyZXNwZWN0IHRvIHRoZSBydW5uaW5nIGFib3J0IG9wZXJhdGlvbi4gR3JlcCBmb3IgJ2RvbmVfbGF0ZScKLSAqCQlpbiB0aGUgU0NTSSBzdGFja3Mgc291cmNlcy4pCi0gKgotICogcmV0dXJuczoJU1VDQ0VTUwktIGNvbW1hbmQgaGFzIGJlZW4gYWJvcnRlZCBhbmQgY2xlYW5lZCB1cCBpbiBpbnRlcm5hbAotICoJCQkgIGJvb2trZWVwaW5nLAotICoJCQkgIFNDU0kgc3RhY2sgd29uJ3QgYmUgY2FsbGVkIGZvciBhYm9ydGVkIGNvbW1hbmQKLSAqCQlGQUlMRUQJLSBvdGhlcndpc2UKKyAqIFdlIGRvIG5vdCBuZWVkIHRvIGNhcmUgZm9yIGEgU0NTSSBjb21tYW5kIHdoaWNoIGNvbXBsZXRlcyBub3JtYWxseQorICogYnV0IGxhdGUgZHVyaW5nIHRoaXMgYWJvcnQgcm91dGluZSBydW5zLiAgV2UgYXJlIGFsbG93ZWQgdG8gcmV0dXJuCisgKiBsYXRlIGNvbW1hbmRzIHRvIHRoZSBTQ1NJIHN0YWNrLiAgSXQgdHJhY2tzIHRoZSBzdGF0ZSBvZiBjb21tYW5kcyBhbmQKKyAqIHdpbGwgaGFuZGxlIGxhdGUgY29tbWFuZHMuICAoVXN1YWxseSwgdGhlIG5vcm1hbCBjb21wbGV0aW9uIG9mIGxhdGUKKyAqIGNvbW1hbmRzIGlzIGlnbm9yZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBydW5uaW5nIGFib3J0IG9wZXJhdGlvbi4pCiAgKi8KIGludAotX196ZmNwX3Njc2lfZWhfYWJvcnRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY3BudCkKK3pmY3Bfc2NzaV9laF9hYm9ydF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjcG50KQogeworIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzY3NpX2hvc3Q7CisgCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXI7CisJc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKIAlpbnQgcmV0dmFsID0gU1VDQ0VTUzsKLQlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpuZXdfZnNmX3JlcSwgKm9sZF9mc2ZfcmVxOwotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IHpmY3BfYWRhcHRlciAqKSBzY3BudC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXTsKLQlzdHJ1Y3QgemZjcF91bml0ICp1bml0ID0gKHN0cnVjdCB6ZmNwX3VuaXQgKikgc2NwbnQtPmRldmljZS0+aG9zdGRhdGE7Ci0Jc3RydWN0IHpmY3BfcG9ydCAqcG9ydCA9IHVuaXQtPnBvcnQ7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2NzaV9ob3N0ID0gc2NwbnQtPmRldmljZS0+aG9zdDsKLQl1bmlvbiB6ZmNwX3JlcV9kYXRhICpyZXFfZGF0YSA9IE5VTEw7CisJc3RydWN0IHpmY3BfZnNmX3JlcSAqbmV3X2ZzZl9yZXEgPSBOVUxMOworCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKm9sZF9mc2ZfcmVxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTMyIHN0YXR1cyA9IDA7CiAKLQkvKiB0aGUgY29tcG9uZW50cyBvZiBhIGFib3J0X2RiZiByZWNvcmQgKGZpeGVkIHNpemUgcmVjb3JkKSAqLwotCXU2NCBkYmZfc2NzaV9jbW5kID0gKHVuc2lnbmVkIGxvbmcpIHNjcG50OwotCWNoYXIgZGJmX29wY29kZVtaRkNQX0FCT1JUX0RCRl9MRU5HVEhdOwotCXd3bl90IGRiZl93d24gPSBwb3J0LT53d3BuOwotCWZjcF9sdW5fdCBkYmZfZmNwX2x1biA9IHVuaXQtPmZjcF9sdW47Ci0JdTY0IGRiZl9yZXRyaWVzID0gc2NwbnQtPnJldHJpZXM7Ci0JdTY0IGRiZl9hbGxvd2VkID0gc2NwbnQtPmFsbG93ZWQ7Ci0JdTY0IGRiZl90aW1lb3V0ID0gMDsKLQl1NjQgZGJmX2ZzZl9yZXEgPSAwOwotCXU2NCBkYmZfZnNmX3N0YXR1cyA9IDA7Ci0JdTY0IGRiZl9mc2ZfcXVhbFsyXSA9IHsgMCwgMCB9OwotCWNoYXIgZGJmX3Jlc3VsdFtaRkNQX0FCT1JUX0RCRl9MRU5HVEhdID0gIiMjdW5kZWYiOwotCi0JbWVtc2V0KGRiZl9vcGNvZGUsIDAsIFpGQ1BfQUJPUlRfREJGX0xFTkdUSCk7Ci0JbWVtY3B5KGRiZl9vcGNvZGUsCi0JICAgICAgIHNjcG50LT5jbW5kLAotCSAgICAgICBtaW4oc2NwbnQtPmNtZF9sZW4sICh1bnNpZ25lZCBjaGFyKSBaRkNQX0FCT1JUX0RCRl9MRU5HVEgpKTsKKwlzY3NpX2hvc3QgPSBzY3BudC0+ZGV2aWNlLT5ob3N0OworCWFkYXB0ZXIgPSAoc3RydWN0IHpmY3BfYWRhcHRlciAqKSBzY3NpX2hvc3QtPmhvc3RkYXRhWzBdOworCXVuaXQgPSAoc3RydWN0IHpmY3BfdW5pdCAqKSBzY3BudC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAogCVpGQ1BfTE9HX0lORk8oImFib3J0aW5nIHNjc2lfY21uZD0lcCBvbiBhZGFwdGVyICVzXG4iLAogCQkgICAgICBzY3BudCwgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CiAKLQlzcGluX3VubG9ja19pcnEoc2NzaV9ob3N0LT5ob3N0X2xvY2spOwotCi0JLyoKLQkgKiBSYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIG5vcm1hbCAobGF0ZSkgY29tcGxldGlvbiBhbmQgYWJvcnQgaGFzCi0JICogdG8gYmUgYXZvaWRlZC4KLQkgKiBUaGUgZW50aXJpdHkgb2YgYWxsIGFjY2Vzc2VzIHRvIHNjc2lfcmVxIGhhdmUgdG8gYmUgYXRvbWljLgotCSAqIHNjc2lfcmVxIGlzIHVzdWFsbHkgcGFydCBvZiB0aGUgZnNmX3JlcSBhbmQgdGh1cyB3ZSBibG9jayB0aGUKLQkgKiByZWxlYXNlIG9mIGZzZl9yZXEgYXMgbG9uZyBhcyB3ZSBuZWVkIHRvIGFjY2VzcyBzY3NpX3JlcS4KLQkgKi8KKwkvKiBhdm9pZCByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGxhdGUgbm9ybWFsIGNvbXBsZXRpb24gYW5kIGFib3J0ICovCiAJd3JpdGVfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5hYm9ydF9sb2NrLCBmbGFncyk7CiAKIAkvKgpAQCAtNDg0LDE0NCArNDU5LDQ3IEBACiAJICogdGhpcyByb3V0aW5lIHJldHVybnMuIChzY3BudCBpcyBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRoaXMgcm91dGluZQogCSAqIGFuZCBtdXN0IG5vdCBkaXNhcHBlYXIgZHVyaW5nIGFib3J0IGV2ZW4gb24gbGF0ZSBjb21wbGV0aW9uLikKIAkgKi8KLQlyZXFfZGF0YSA9ICh1bmlvbiB6ZmNwX3JlcV9kYXRhICopIHNjcG50LT5ob3N0X3NjcmliYmxlOwotCS8qIERFQlVHICovCi0JWkZDUF9MT0dfREVCVUcoInJlcV9kYXRhPSVwXG4iLCByZXFfZGF0YSk7Ci0JaWYgKCFyZXFfZGF0YSkgewotCQlaRkNQX0xPR19ERUJVRygibGF0ZSBjb21tYW5kIGNvbXBsZXRpb24gb3ZlcnRvb2sgYWJvcnRcbiIpOwotCQkvKgotCQkgKiBUaGF0J3MgaXQuCi0JCSAqIERvIG5vdCBpbml0aWF0ZSBhYm9ydCBidXQgcmV0dXJuIFNVQ0NFU1MuCi0JCSAqLwotCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWJvcnRfbG9jaywgZmxhZ3MpOwotCQlyZXR2YWwgPSBTVUNDRVNTOwotCQlzdHJuY3B5KGRiZl9yZXN1bHQsICIjI2xhdGUxIiwgWkZDUF9BQk9SVF9EQkZfTEVOR1RIKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogRmlndXJlIG91dCB3aGljaCBmc2ZfcmVxIG5lZWRzIHRvIGJlIGFib3J0ZWQuICovCi0Jb2xkX2ZzZl9yZXEgPSByZXFfZGF0YS0+c2VuZF9mY3BfY29tbWFuZF90YXNrLmZzZl9yZXE7Ci0KLQlkYmZfZnNmX3JlcSA9ICh1bnNpZ25lZCBsb25nKSBvbGRfZnNmX3JlcTsKLQlkYmZfdGltZW91dCA9Ci0JICAgIChqaWZmaWVzIC0gcmVxX2RhdGEtPnNlbmRfZmNwX2NvbW1hbmRfdGFzay5zdGFydF9qaWZmaWVzKSAvIEhaOwotCi0JWkZDUF9MT0dfREVCVUcoIm9sZF9mc2ZfcmVxPSVwXG4iLCBvbGRfZnNmX3JlcSk7CisJb2xkX2ZzZl9yZXEgPSAoc3RydWN0IHpmY3BfZnNmX3JlcSAqKSBzY3BudC0+aG9zdF9zY3JpYmJsZTsKIAlpZiAoIW9sZF9mc2ZfcmVxKSB7CiAJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5hYm9ydF9sb2NrLCBmbGFncyk7Ci0JCVpGQ1BfTE9HX05PUk1BTCgiYnVnOiBubyBvbGQgZnNmIHJlcXVlc3QgZm91bmRcbiIpOwotCQlaRkNQX0xPR19OT1JNQUwoInJlcV9kYXRhOlxuIik7Ci0JCVpGQ1BfSEVYX0RVTVAoWkZDUF9MT0dfTEVWRUxfTk9STUFMLAotCQkJICAgICAgKGNoYXIgKikgcmVxX2RhdGEsIHNpemVvZiAodW5pb24gemZjcF9yZXFfZGF0YSkpOwotCQlaRkNQX0xPR19OT1JNQUwoInNjc2lfY21uZDpcbiIpOwotCQlaRkNQX0hFWF9EVU1QKFpGQ1BfTE9HX0xFVkVMX05PUk1BTCwKLQkJCSAgICAgIChjaGFyICopIHNjcG50LCBzaXplb2YgKHN0cnVjdCBzY3NpX2NtbmQpKTsKLQkJcmV0dmFsID0gRkFJTEVEOwotCQlzdHJuY3B5KGRiZl9yZXN1bHQsICIjI2J1ZzpyIiwgWkZDUF9BQk9SVF9EQkZfTEVOR1RIKTsKKwkJemZjcF9zY3NpX2RiZl9ldmVudF9hYm9ydCgibHRlMSIsIGFkYXB0ZXIsIHNjcG50LCBuZXdfZnNmX3JlcSk7CisJCXJldHZhbCA9IFNVQ0NFU1M7CiAJCWdvdG8gb3V0OwogCX0KLQlvbGRfZnNmX3JlcS0+ZGF0YS5zZW5kX2ZjcF9jb21tYW5kX3Rhc2suc2NzaV9jbW5kID0gTlVMTDsKLQkvKiBtYXJrIG9sZCByZXF1ZXN0IGFzIGJlaW5nIGFib3J0ZWQgKi8KKwlvbGRfZnNmX3JlcS0+ZGF0YSA9IDA7CiAJb2xkX2ZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQUJPUlRJTkc7Ci0JLyoKLQkgKiBXZSBoYXZlIHRvIGNvbGxlY3QgYWxsIGluZm9ybWF0aW9uIChlLmcuIHVuaXQpIG5lZWRlZCBieSAKLQkgKiB6ZmNwX2ZzZl9hYm9ydF9mY3BfY29tbWFuZCBiZWZvcmUgY2FsbGluZyB0aGF0IHJvdXRpbmUKLQkgKiBzaW5jZSB0aGF0IHJvdXRpbmUgaXMgbm90IGFsbG93ZWQgdG8gYWNjZXNzCi0JICogZnNmX3JlcSB3aGljaCBpdCBpcyBnb2luZyB0byBhYm9ydC4KLQkgKiBUaGlzIGlzIGJlY2F1c2Ugb2Ygd2UgbmVlZCB0byByZWxlYXNlIGZzZl9yZXFfbGlzdF9sb2NrCi0JICogYmVmb3JlIGNhbGxpbmcgemZjcF9mc2ZfYWJvcnRfZmNwX2NvbW1hbmQuCi0JICogU2luY2UgdGhpcyBsb2NrIHdpbGwgbm90IGJlIGhlbGQsIGZzZl9yZXEgbWF5IGNvbXBsZXRlCi0JICogbGF0ZSBhbmQgbWF5IGJlIHJlbGVhc2VkIG1lYW53aGlsZS4KLQkgKi8KLQlaRkNQX0xPR19ERUJVRygidW5pdCAweCUwMTZMeCAoJXApXG4iLCB1bml0LT5mY3BfbHVuLCB1bml0KTsKIAotCS8qCi0JICogV2UgYmxvY2sgKGNhbGwgc2NoZWR1bGUpCi0JICogVGhhdCdzIHdoeSB3ZSBtdXN0IHJlbGVhc2UgdGhlIGxvY2sgYW5kIGVuYWJsZSB0aGUKLQkgKiBpbnRlcnJ1cHRzIGJlZm9yZS4KLQkgKiBPbiB0aGUgb3RoZXIgaGFuZCB3ZSBkbyBub3QgbmVlZCB0aGUgbG9jayBhbnltb3JlIHNpbmNlCi0JICogYWxsIGNyaXRpY2FsIGFjY2Vzc2VzIHRvIHNjc2lfcmVxIGFyZSBkb25lLgotCSAqLworCS8qIGRvbid0IGFjY2VzcyBvbGRfZnNmX3JlcSBhZnRlciByZWxlYXNpbmcgdGhlIGFib3J0X2xvY2sgKi8KIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWJvcnRfbG9jaywgZmxhZ3MpOwogCS8qIGNhbGwgRlNGIHJvdXRpbmUgd2hpY2ggZG9lcyB0aGUgYWJvcnQgKi8KIAluZXdfZnNmX3JlcSA9IHpmY3BfZnNmX2Fib3J0X2ZjcF9jb21tYW5kKCh1bnNpZ25lZCBsb25nKSBvbGRfZnNmX3JlcSwKIAkJCQkJCSBhZGFwdGVyLCB1bml0LCAwKTsKLQlaRkNQX0xPR19ERUJVRygibmV3X2ZzZl9yZXE9JXBcbiIsIG5ld19mc2ZfcmVxKTsKIAlpZiAoIW5ld19mc2ZfcmVxKSB7CisJCVpGQ1BfTE9HX0lORk8oImVycm9yOiBpbml0aWF0aW9uIG9mIEFib3J0IEZDUCBDbW5kIGZhaWxlZFxuIik7CiAJCXJldHZhbCA9IEZBSUxFRDsKLQkJWkZDUF9MT0dfTk9STUFMKCJlcnJvcjogaW5pdGlhdGlvbiBvZiBBYm9ydCBGQ1AgQ21uZCAiCi0JCQkJImZhaWxlZFxuIik7Ci0JCXN0cm5jcHkoZGJmX3Jlc3VsdCwgIiMjbm9yZXMiLCBaRkNQX0FCT1JUX0RCRl9MRU5HVEgpOwogCQlnb3RvIG91dDsKIAl9CiAKIAkvKiB3YWl0IGZvciBjb21wbGV0aW9uIG9mIGFib3J0ICovCi0JWkZDUF9MT0dfREVCVUcoIndhaXRpbmcgZm9yIGNsZWFudXAuLi5cbiIpOwotI2lmIDEKLQkvKgotCSAqIEZJWE1FOgotCSAqIGNvcHlpbmcgemZjcF9mc2ZfcmVxX3dhaXRfYW5kX2NsZWFudXAgY29kZSBpcyBub3QgcmVhbGx5IG5pY2UKLQkgKi8KIAlfX3dhaXRfZXZlbnQobmV3X2ZzZl9yZXEtPmNvbXBsZXRpb25fd3EsCiAJCSAgICAgbmV3X2ZzZl9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9DT01QTEVURUQpOwotCXN0YXR1cyA9IG5ld19mc2ZfcmVxLT5zdGF0dXM7Ci0JZGJmX2ZzZl9zdGF0dXMgPSBuZXdfZnNmX3JlcS0+cXRjYi0+aGVhZGVyLmZzZl9zdGF0dXM7Ci0JLyoKLQkgKiBSYWxwaHMgc3BlY2lhbCBkZWJ1ZyBsb2FkIHByb3ZpZGVzIHRpbWVzdGFtcHMgaW4gdGhlIEZTRgotCSAqIHN0YXR1cyBxdWFsaWZpZXIuIFRoaXMgbWlnaHQgYmUgc3BlY2lmaWVkIGxhdGVyIGlmIGJlaW5nCi0JICogdXNlZnVsIGZvciBkZWJ1Z2dpbmcgYWJvcnRzLgotCSAqLwotCWRiZl9mc2ZfcXVhbFswXSA9Ci0JICAgICoodTY0ICopICYgbmV3X2ZzZl9yZXEtPnF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzX3F1YWwud29yZFswXTsKLQlkYmZfZnNmX3F1YWxbMV0gPQotCSAgICAqKHU2NCAqKSAmIG5ld19mc2ZfcmVxLT5xdGNiLT5oZWFkZXIuZnNmX3N0YXR1c19xdWFsLndvcmRbMl07Ci0JemZjcF9mc2ZfcmVxX2ZyZWUobmV3X2ZzZl9yZXEpOwotI2Vsc2UKLQlyZXR2YWwgPSB6ZmNwX2ZzZl9yZXFfd2FpdF9hbmRfY2xlYW51cChuZXdfZnNmX3JlcSwKLQkJCQkJICAgICAgIFpGQ1BfVU5JTlRFUlJVUFRJQkxFLCAmc3RhdHVzKTsKLSNlbmRpZgotCVpGQ1BfTE9HX0RFQlVHKCJXYWl0aW5nIGZvciBjbGVhbnVwIGNvbXBsZXRlLCBzdGF0dXM9MHgleFxuIiwgc3RhdHVzKTsKKwogCS8qIHN0YXR1cyBzaG91bGQgYmUgdmFsaWQgc2luY2Ugc2lnbmFscyB3ZXJlIG5vdCBwZXJtaXR0ZWQgKi8KLQlpZiAoc3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0FCT1JUU1VDQ0VFREVEKSB7CisJaWYgKG5ld19mc2ZfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfQUJPUlRTVUNDRUVERUQpIHsKKwkJemZjcF9zY3NpX2RiZl9ldmVudF9hYm9ydCgib2theSIsIGFkYXB0ZXIsIHNjcG50LCBuZXdfZnNmX3JlcSk7CiAJCXJldHZhbCA9IFNVQ0NFU1M7Ci0JCXN0cm5jcHkoZGJmX3Jlc3VsdCwgIiMjc3VjYyIsIFpGQ1BfQUJPUlRfREJGX0xFTkdUSCk7Ci0JfSBlbHNlIGlmIChzdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfQUJPUlROT1RORUVERUQpIHsKKwl9IGVsc2UgaWYgKG5ld19mc2ZfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfQUJPUlROT1RORUVERUQpIHsKKwkJemZjcF9zY3NpX2RiZl9ldmVudF9hYm9ydCgibHRlMiIsIGFkYXB0ZXIsIHNjcG50LCBuZXdfZnNmX3JlcSk7CiAJCXJldHZhbCA9IFNVQ0NFU1M7Ci0JCXN0cm5jcHkoZGJmX3Jlc3VsdCwgIiMjbGF0ZTIiLCBaRkNQX0FCT1JUX0RCRl9MRU5HVEgpOwogCX0gZWxzZSB7CisJCXpmY3Bfc2NzaV9kYmZfZXZlbnRfYWJvcnQoImZhaWwiLCBhZGFwdGVyLCBzY3BudCwgbmV3X2ZzZl9yZXEpOwogCQlyZXR2YWwgPSBGQUlMRUQ7Ci0JCXN0cm5jcHkoZGJmX3Jlc3VsdCwgIiMjZmFpbCIsIFpGQ1BfQUJPUlRfREJGX0xFTkdUSCk7CiAJfQotCisJemZjcF9mc2ZfcmVxX2ZyZWUobmV3X2ZzZl9yZXEpOwogIG91dDoKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5hYm9ydF9kYmYsIDEsICZkYmZfc2NzaV9jbW5kLCBzaXplb2YgKHU2NCkpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmFib3J0X2RiZiwgMSwgJmRiZl9vcGNvZGUsIFpGQ1BfQUJPUlRfREJGX0xFTkdUSCk7Ci0JZGVidWdfZXZlbnQoYWRhcHRlci0+YWJvcnRfZGJmLCAxLCAmZGJmX3d3biwgc2l6ZW9mICh3d25fdCkpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmFib3J0X2RiZiwgMSwgJmRiZl9mY3BfbHVuLCBzaXplb2YgKGZjcF9sdW5fdCkpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmFib3J0X2RiZiwgMSwgJmRiZl9yZXRyaWVzLCBzaXplb2YgKHU2NCkpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmFib3J0X2RiZiwgMSwgJmRiZl9hbGxvd2VkLCBzaXplb2YgKHU2NCkpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmFib3J0X2RiZiwgMSwgJmRiZl90aW1lb3V0LCBzaXplb2YgKHU2NCkpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmFib3J0X2RiZiwgMSwgJmRiZl9mc2ZfcmVxLCBzaXplb2YgKHU2NCkpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmFib3J0X2RiZiwgMSwgJmRiZl9mc2Zfc3RhdHVzLCBzaXplb2YgKHU2NCkpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmFib3J0X2RiZiwgMSwgJmRiZl9mc2ZfcXVhbFswXSwgc2l6ZW9mICh1NjQpKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5hYm9ydF9kYmYsIDEsICZkYmZfZnNmX3F1YWxbMV0sIHNpemVvZiAodTY0KSk7Ci0JZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5hYm9ydF9kYmYsIDEsIGRiZl9yZXN1bHQpOwotCi0Jc3Bpbl9sb2NrX2lycShzY3NpX2hvc3QtPmhvc3RfbG9jayk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIAotaW50Ci16ZmNwX3Njc2lfZWhfYWJvcnRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY3BudCkKLXsKLQlpbnQgcmM7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2NzaV9ob3N0ID0gc2NwbnQtPmRldmljZS0+aG9zdDsKLQlzcGluX2xvY2tfaXJxKHNjc2lfaG9zdC0+aG9zdF9sb2NrKTsKLQlyYyA9IF9femZjcF9zY3NpX2VoX2Fib3J0X2hhbmRsZXIoc2NwbnQpOwotCXNwaW5fdW5sb2NrX2lycShzY3NpX2hvc3QtPmhvc3RfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCiAvKgogICogZnVuY3Rpb246CXpmY3Bfc2NzaV9laF9kZXZpY2VfcmVzZXRfaGFuZGxlcgogICoKQEAgLTY1MSw4ICs1MjksOSBAQAogCSAqLwogCWlmICghYXRvbWljX3Rlc3RfbWFzayhaRkNQX1NUQVRVU19VTklUX05PVFNVUFBVTklUUkVTRVQsCiAJCQkgICAgICAmdW5pdC0+c3RhdHVzKSkgewotCQlyZXR2YWwgPQotCQkgICAgemZjcF90YXNrX21hbmFnZW1lbnRfZnVuY3Rpb24odW5pdCwgRkNQX0xPR0lDQUxfVU5JVF9SRVNFVCk7CisJCXJldHZhbCA9IHpmY3BfdGFza19tYW5hZ2VtZW50X2Z1bmN0aW9uKHVuaXQsCisJCQkJCQkgICAgICAgRkNQX0xPR0lDQUxfVU5JVF9SRVNFVCwKKwkJCQkJCSAgICAgICBzY3BudCk7CiAJCWlmIChyZXR2YWwpIHsKIAkJCVpGQ1BfTE9HX0RFQlVHKCJ1bml0IHJlc2V0IGZhaWxlZCAodW5pdD0lcClcbiIsIHVuaXQpOwogCQkJaWYgKHJldHZhbCA9PSAtRU5PVFNVUFApCkBAIC02NjgsNyArNTQ3LDcgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQotCXJldHZhbCA9IHpmY3BfdGFza19tYW5hZ2VtZW50X2Z1bmN0aW9uKHVuaXQsIEZDUF9UQVJHRVRfUkVTRVQpOworCXJldHZhbCA9IHpmY3BfdGFza19tYW5hZ2VtZW50X2Z1bmN0aW9uKHVuaXQsIEZDUF9UQVJHRVRfUkVTRVQsIHNjcG50KTsKIAlpZiAocmV0dmFsKSB7CiAJCVpGQ1BfTE9HX0RFQlVHKCJ0YXJnZXQgcmVzZXQgZmFpbGVkICh1bml0PSVwKVxuIiwgdW5pdCk7CiAJCXJldHZhbCA9IEZBSUxFRDsKQEAgLTY4MSwxMiArNTYwLDEyIEBACiB9CiAKIHN0YXRpYyBpbnQKLXpmY3BfdGFza19tYW5hZ2VtZW50X2Z1bmN0aW9uKHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQsIHU4IHRtX2ZsYWdzKQoremZjcF90YXNrX21hbmFnZW1lbnRfZnVuY3Rpb24oc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwgdTggdG1fZmxhZ3MsCisJCQkgICAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpzY3BudCkKIHsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gdW5pdC0+cG9ydC0+YWRhcHRlcjsKLQlpbnQgcmV0dmFsOwotCWludCBzdGF0dXM7CiAJc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcTsKKwlpbnQgcmV0dmFsID0gMDsKIAogCS8qIGlzc3VlIHRhc2sgbWFuYWdlbWVudCBmdW5jdGlvbiAqLwogCWZzZl9yZXEgPSB6ZmNwX2ZzZl9zZW5kX2ZjcF9jb21tYW5kX3Rhc2tfbWFuYWdlbWVudApAQCAtNjk2LDcwICs1NzUsNjMgQEAKIAkJCSAgICAgICJmYWlsZWQgZm9yIHVuaXQgMHglMDE2THggb24gcG9ydCAweCUwMTZMeCBvbiAgIgogCQkJICAgICAgImFkYXB0ZXIgJXNcbiIsIHVuaXQtPmZjcF9sdW4sIHVuaXQtPnBvcnQtPnd3cG4sCiAJCQkgICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKKwkJemZjcF9zY3NpX2RiZl9ldmVudF9kZXZyZXNldCgibnJlcyIsIHRtX2ZsYWdzLCB1bml0LCBzY3BudCk7CiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KIAotCXJldHZhbCA9IHpmY3BfZnNmX3JlcV93YWl0X2FuZF9jbGVhbnVwKGZzZl9yZXEsCi0JCQkJCSAgICAgICBaRkNQX1VOSU5URVJSVVBUSUJMRSwgJnN0YXR1cyk7CisJX193YWl0X2V2ZW50KGZzZl9yZXEtPmNvbXBsZXRpb25fd3EsCisJCSAgICAgZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0NPTVBMRVRFRCk7CisKIAkvKgogCSAqIGNoZWNrIGNvbXBsZXRpb24gc3RhdHVzIG9mIHRhc2sgbWFuYWdlbWVudCBmdW5jdGlvbgotCSAqIChzdGF0dXMgc2hvdWxkIGFsd2F5cyBiZSB2YWxpZCBzaW5jZSBubyBzaWduYWxzIHBlcm1pdHRlZCkKIAkgKi8KLQlpZiAoc3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX1RNRlVOQ0ZBSUxFRCkKKwlpZiAoZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX1RNRlVOQ0ZBSUxFRCkgeworCQl6ZmNwX3Njc2lfZGJmX2V2ZW50X2RldnJlc2V0KCJmYWlsIiwgdG1fZmxhZ3MsIHVuaXQsIHNjcG50KTsKIAkJcmV0dmFsID0gLUVJTzsKLQllbHNlIGlmIChzdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfVE1GVU5DTk9UU1VQUCkKKwl9IGVsc2UgaWYgKGZzZl9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9UTUZVTkNOT1RTVVBQKSB7CisJCXpmY3Bfc2NzaV9kYmZfZXZlbnRfZGV2cmVzZXQoIm5zdXAiLCB0bV9mbGFncywgdW5pdCwgc2NwbnQpOwogCQlyZXR2YWwgPSAtRU5PVFNVUFA7Ci0JZWxzZQotCQlyZXR2YWwgPSAwOworCX0gZWxzZQorCQl6ZmNwX3Njc2lfZGJmX2V2ZW50X2RldnJlc2V0KCJva2F5IiwgdG1fZmxhZ3MsIHVuaXQsIHNjcG50KTsKKworCXpmY3BfZnNmX3JlcV9mcmVlKGZzZl9yZXEpOwogIG91dDoKIAlyZXR1cm4gcmV0dmFsOwogfQogCi0vKgotICogZnVuY3Rpb246CXpmY3Bfc2NzaV9laF9idXNfcmVzZXRfaGFuZGxlcgotICoKLSAqIHB1cnBvc2U6Ci0gKgotICogcmV0dXJuczoKKy8qKgorICogemZjcF9zY3NpX2VoX2J1c19yZXNldF9oYW5kbGVyIC0gcmVzZXQgYnVzIChyZW9wZW4gYWRhcHRlcikKICAqLwogaW50CiB6ZmNwX3Njc2lfZWhfYnVzX3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc2NwbnQpCiB7Ci0JaW50IHJldHZhbCA9IDA7Ci0Jc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKKwlzdHJ1Y3QgemZjcF91bml0ICp1bml0ID0gKHN0cnVjdCB6ZmNwX3VuaXQqKSBzY3BudC0+ZGV2aWNlLT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gdW5pdC0+cG9ydC0+YWRhcHRlcjsKIAotCXVuaXQgPSAoc3RydWN0IHpmY3BfdW5pdCAqKSBzY3BudC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAlaRkNQX0xPR19OT1JNQUwoImJ1cyByZXNldCBiZWNhdXNlIG9mIHByb2JsZW1zIHdpdGggIgogCQkJInVuaXQgMHglMDE2THhcbiIsIHVuaXQtPmZjcF9sdW4pOwotCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHVuaXQtPnBvcnQtPmFkYXB0ZXIsIDApOwotCXpmY3BfZXJwX3dhaXQodW5pdC0+cG9ydC0+YWRhcHRlcik7Ci0JcmV0dmFsID0gU1VDQ0VTUzsKKwl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwKTsKKwl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOwogCi0JcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gU1VDQ0VTUzsKIH0KIAotLyoKLSAqIGZ1bmN0aW9uOgl6ZmNwX3Njc2lfZWhfaG9zdF9yZXNldF9oYW5kbGVyCi0gKgotICogcHVycG9zZToKLSAqCi0gKiByZXR1cm5zOgorLyoqCisgKiB6ZmNwX3Njc2lfZWhfaG9zdF9yZXNldF9oYW5kbGVyIC0gcmVzZXQgaG9zdCAocmVvcGVuIGFkYXB0ZXIpCiAgKi8KIGludAogemZjcF9zY3NpX2VoX2hvc3RfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY3BudCkKIHsKLQlpbnQgcmV0dmFsID0gMDsKLQlzdHJ1Y3QgemZjcF91bml0ICp1bml0OworCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQgPSAoc3RydWN0IHpmY3BfdW5pdCopIHNjcG50LT5kZXZpY2UtPmhvc3RkYXRhOworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSB1bml0LT5wb3J0LT5hZGFwdGVyOwogCi0JdW5pdCA9IChzdHJ1Y3QgemZjcF91bml0ICopIHNjcG50LT5kZXZpY2UtPmhvc3RkYXRhOwogCVpGQ1BfTE9HX05PUk1BTCgiaG9zdCByZXNldCBiZWNhdXNlIG9mIHByb2JsZW1zIHdpdGggIgogCQkJInVuaXQgMHglMDE2THhcbiIsIHVuaXQtPmZjcF9sdW4pOwotCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHVuaXQtPnBvcnQtPmFkYXB0ZXIsIDApOwotCXpmY3BfZXJwX3dhaXQodW5pdC0+cG9ydC0+YWRhcHRlcik7Ci0JcmV0dmFsID0gU1VDQ0VTUzsKKwl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwKTsKKwl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOwogCi0JcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gU1VDQ0VTUzsKIH0KIAogLyoKQEAgLTgyNiwxMCArNjk4LDE2IEBACiB6ZmNwX2FkYXB0ZXJfc2NzaV91bnJlZ2lzdGVyKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CisJc3RydWN0IHpmY3BfcG9ydCAqcG9ydDsKIAogCXNob3N0ID0gYWRhcHRlci0+c2NzaV9ob3N0OwogCWlmICghc2hvc3QpCiAJCXJldHVybjsKKwlyZWFkX2xvY2tfaXJxKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJmFkYXB0ZXItPnBvcnRfbGlzdF9oZWFkLCBsaXN0KQorCQlpZiAocG9ydC0+cnBvcnQpCisJCQlwb3J0LT5ycG9ydCA9IE5VTEw7CisJcmVhZF91bmxvY2tfaXJxKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2spOwogCWZjX3JlbW92ZV9ob3N0KHNob3N0KTsKIAlzY3NpX3JlbW92ZV9ob3N0KHNob3N0KTsKIAlzY3NpX2hvc3RfcHV0KHNob3N0KTsKQEAgLTkwNCwxOCArNzgyLDYgQEAKIAlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2ssIGZsYWdzKTsKIH0KIAotdm9pZAotemZjcF9zZXRfZmNfaG9zdF9hdHRycyhzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQotewotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gYWRhcHRlci0+c2NzaV9ob3N0OwotCi0JZmNfaG9zdF9ub2RlX25hbWUoc2hvc3QpID0gYWRhcHRlci0+d3dubjsKLQlmY19ob3N0X3BvcnRfbmFtZShzaG9zdCkgPSBhZGFwdGVyLT53d3BuOwotCXN0cm5jcHkoZmNfaG9zdF9zZXJpYWxfbnVtYmVyKHNob3N0KSwgYWRhcHRlci0+c2VyaWFsX251bWJlciwKLSAgICAgICAgICAgICAgICBtaW4oRkNfU0VSSUFMX05VTUJFUl9TSVpFLCAzMikpOwotCWZjX2hvc3Rfc3VwcG9ydGVkX2NsYXNzZXMoc2hvc3QpID0gRkNfQ09TX0NMQVNTMiB8IEZDX0NPU19DTEFTUzM7Ci19Ci0KIHN0cnVjdCBmY19mdW5jdGlvbl90ZW1wbGF0ZSB6ZmNwX3RyYW5zcG9ydF9mdW5jdGlvbnMgPSB7CiAJLmdldF9zdGFyZ2V0X3BvcnRfaWQgPSB6ZmNwX2dldF9wb3J0X2lkLAogCS5nZXRfc3RhcmdldF9wb3J0X25hbWUgPSB6ZmNwX2dldF9wb3J0X25hbWUsCkBAIC05MjcsNyArNzkzLDEwIEBACiAJLnNob3dfaG9zdF9ub2RlX25hbWUgPSAxLAogCS5zaG93X2hvc3RfcG9ydF9uYW1lID0gMSwKIAkuc2hvd19ob3N0X3N1cHBvcnRlZF9jbGFzc2VzID0gMSwKKwkuc2hvd19ob3N0X21heGZyYW1lX3NpemUgPSAxLAogCS5zaG93X2hvc3Rfc2VyaWFsX251bWJlciA9IDEsCisJLnNob3dfaG9zdF9zcGVlZCA9IDEsCisJLnNob3dfaG9zdF9wb3J0X2lkID0gMSwKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmc19hZGFwdGVyLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzX2FkYXB0ZXIuYwppbmRleCBlNzM0NWE3Li4wY2Q0MzUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzX2FkYXB0ZXIuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzX2FkYXB0ZXIuYwpAQCAtNjIsMjEgKzYyLDE4IEBACiBzdGF0aWMgREVWSUNFX0FUVFIoX25hbWUsIFNfSVJVR08sIHpmY3Bfc3lzZnNfYWRhcHRlcl8jI19uYW1lIyNfc2hvdywgTlVMTCk7CiAKIFpGQ1BfREVGSU5FX0FEQVBURVJfQVRUUihzdGF0dXMsICIweCUwOHhcbiIsIGF0b21pY19yZWFkKCZhZGFwdGVyLT5zdGF0dXMpKTsKLVpGQ1BfREVGSU5FX0FEQVBURVJfQVRUUih3d25uLCAiMHglMDE2bGx4XG4iLCBhZGFwdGVyLT53d25uKTsKLVpGQ1BfREVGSU5FX0FEQVBURVJfQVRUUih3d3BuLCAiMHglMDE2bGx4XG4iLCBhZGFwdGVyLT53d3BuKTsKLVpGQ1BfREVGSU5FX0FEQVBURVJfQVRUUihzX2lkLCAiMHglMDZ4XG4iLCBhZGFwdGVyLT5zX2lkKTsKIFpGQ1BfREVGSU5FX0FEQVBURVJfQVRUUihwZWVyX3d3bm4sICIweCUwMTZsbHhcbiIsIGFkYXB0ZXItPnBlZXJfd3dubik7CiBaRkNQX0RFRklORV9BREFQVEVSX0FUVFIocGVlcl93d3BuLCAiMHglMDE2bGx4XG4iLCBhZGFwdGVyLT5wZWVyX3d3cG4pOwogWkZDUF9ERUZJTkVfQURBUFRFUl9BVFRSKHBlZXJfZF9pZCwgIjB4JTA2eFxuIiwgYWRhcHRlci0+cGVlcl9kX2lkKTsKK1pGQ1BfREVGSU5FX0FEQVBURVJfQVRUUihwaHlzaWNhbF93d3BuLCAiMHglMDE2bGx4XG4iLCBhZGFwdGVyLT5waHlzaWNhbF93d3BuKTsKK1pGQ1BfREVGSU5FX0FEQVBURVJfQVRUUihwaHlzaWNhbF9zX2lkLCAiMHglMDZ4XG4iLCBhZGFwdGVyLT5waHlzaWNhbF9zX2lkKTsKIFpGQ1BfREVGSU5FX0FEQVBURVJfQVRUUihjYXJkX3ZlcnNpb24sICIweCUwNHhcbiIsIGFkYXB0ZXItPmh5ZHJhX3ZlcnNpb24pOwogWkZDUF9ERUZJTkVfQURBUFRFUl9BVFRSKGxpY192ZXJzaW9uLCAiMHglMDh4XG4iLCBhZGFwdGVyLT5mc2ZfbGljX3ZlcnNpb24pOwotWkZDUF9ERUZJTkVfQURBUFRFUl9BVFRSKGZjX2xpbmtfc3BlZWQsICIlZCBHYi9zXG4iLCBhZGFwdGVyLT5mY19saW5rX3NwZWVkKTsKIFpGQ1BfREVGSU5FX0FEQVBURVJfQVRUUihmY19zZXJ2aWNlX2NsYXNzLCAiJWRcbiIsIGFkYXB0ZXItPmZjX3NlcnZpY2VfY2xhc3MpOwogWkZDUF9ERUZJTkVfQURBUFRFUl9BVFRSKGZjX3RvcG9sb2d5LCAiJXNcbiIsCiAJCQkgZmNfdG9wb2xvZ2llc1thZGFwdGVyLT5mY190b3BvbG9neV0pOwogWkZDUF9ERUZJTkVfQURBUFRFUl9BVFRSKGhhcmR3YXJlX3ZlcnNpb24sICIweCUwOHhcbiIsCiAJCQkgYWRhcHRlci0+aGFyZHdhcmVfdmVyc2lvbik7Ci1aRkNQX0RFRklORV9BREFQVEVSX0FUVFIoc2VyaWFsX251bWJlciwgIiUxN3NcbiIsIGFkYXB0ZXItPnNlcmlhbF9udW1iZXIpOwogWkZDUF9ERUZJTkVfQURBUFRFUl9BVFRSKHNjc2lfaG9zdF9ubywgIjB4JXhcbiIsIGFkYXB0ZXItPnNjc2lfaG9zdF9ubyk7CiBaRkNQX0RFRklORV9BREFQVEVSX0FUVFIoaW5fcmVjb3ZlcnksICIlZFxuIiwgYXRvbWljX3Rlc3RfbWFzawogCQkJIChaRkNQX1NUQVRVU19DT01NT05fRVJQX0lOVVNFLCAmYWRhcHRlci0+c3RhdHVzKSk7CkBAIC0yNTUsMjEgKzI1MiwxOCBAQAogCSZkZXZfYXR0cl9pbl9yZWNvdmVyeS5hdHRyLAogCSZkZXZfYXR0cl9wb3J0X3JlbW92ZS5hdHRyLAogCSZkZXZfYXR0cl9wb3J0X2FkZC5hdHRyLAotCSZkZXZfYXR0cl93d25uLmF0dHIsCi0JJmRldl9hdHRyX3d3cG4uYXR0ciwKLQkmZGV2X2F0dHJfc19pZC5hdHRyLAogCSZkZXZfYXR0cl9wZWVyX3d3bm4uYXR0ciwKIAkmZGV2X2F0dHJfcGVlcl93d3BuLmF0dHIsCiAJJmRldl9hdHRyX3BlZXJfZF9pZC5hdHRyLAorCSZkZXZfYXR0cl9waHlzaWNhbF93d3BuLmF0dHIsCisJJmRldl9hdHRyX3BoeXNpY2FsX3NfaWQuYXR0ciwKIAkmZGV2X2F0dHJfY2FyZF92ZXJzaW9uLmF0dHIsCiAJJmRldl9hdHRyX2xpY192ZXJzaW9uLmF0dHIsCi0JJmRldl9hdHRyX2ZjX2xpbmtfc3BlZWQuYXR0ciwKIAkmZGV2X2F0dHJfZmNfc2VydmljZV9jbGFzcy5hdHRyLAogCSZkZXZfYXR0cl9mY190b3BvbG9neS5hdHRyLAogCSZkZXZfYXR0cl9zY3NpX2hvc3Rfbm8uYXR0ciwKIAkmZGV2X2F0dHJfc3RhdHVzLmF0dHIsCiAJJmRldl9hdHRyX2hhcmR3YXJlX3ZlcnNpb24uYXR0ciwKLQkmZGV2X2F0dHJfc2VyaWFsX251bWJlci5hdHRyLAogCU5VTEwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS8zdy05eHh4LmMgYi9kcml2ZXJzL3Njc2kvM3ctOXh4eC5jCmluZGV4IGE2YWM2MTYuLmE3NDhmYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS8zdy05eHh4LmMKKysrIGIvZHJpdmVycy9zY3NpLzN3LTl4eHguYwpAQCAtNjAsNiArNjAsNyBAQAogICAgICAgICAgICAgICAgICBSZW1vdmUgdW4tbmVlZGVkIGVoX2Fib3J0IGhhbmRsZXIuCiAgICAgICAgICAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBlbWJlZGRlZCBmaXJtd2FyZSBlcnJvciBzdHJpbmdzLgogICAgMi4yNi4wMi4wMDMgLSBDb3JyZWN0bHkgaGFuZGxlIHNpbmdsZSBzZ2wncyB3aXRoIHVzZV9zZz0xLgorICAgMi4yNi4wMi4wMDQgLSBBZGQgc3VwcG9ydCBmb3IgOTU1MFNYIGNvbnRyb2xsZXJzLgogKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtODIsNyArODMsNyBAQAogI2luY2x1ZGUgIjN3LTl4eHguaCIKIAogLyogR2xvYmFscyAqLwotI2RlZmluZSBUV19EUklWRVJfVkVSU0lPTiAiMi4yNi4wMi4wMDMiCisjZGVmaW5lIFRXX0RSSVZFUl9WRVJTSU9OICIyLjI2LjAyLjAwNCIKIHN0YXRpYyBUV19EZXZpY2VfRXh0ZW5zaW9uICp0d2FfZGV2aWNlX2V4dGVuc2lvbl9saXN0W1RXX01BWF9TTE9UXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHdhX2RldmljZV9leHRlbnNpb25fY291bnQ7CiBzdGF0aWMgaW50IHR3YV9tYWpvciA9IC0xOwpAQCAtODkyLDExICs4OTMsNiBAQAogCQl3cml0ZWwoVFdfQ09OVFJPTF9DTEVBUl9RVUVVRV9FUlJPUiwgVFdfQ09OVFJPTF9SRUdfQUREUih0d19kZXYpKTsKIAl9CiAKLQlpZiAoc3RhdHVzX3JlZ192YWx1ZSAmIFRXX1NUQVRVU19TQlVGX1dSSVRFX0VSUk9SKSB7Ci0JCVRXX1BSSU5USyh0d19kZXYtPmhvc3QsIFRXX0RSSVZFUiwgMHhmLCAiU0JVRiBXcml0ZSBFcnJvcjogY2xlYXJpbmciKTsKLQkJd3JpdGVsKFRXX0NPTlRST0xfQ0xFQVJfU0JVRl9XUklURV9FUlJPUiwgVFdfQ09OVFJPTF9SRUdfQUREUih0d19kZXYpKTsKLQl9Ci0KIAlpZiAoc3RhdHVzX3JlZ192YWx1ZSAmIFRXX1NUQVRVU19NSUNST0NPTlRST0xMRVJfRVJST1IpIHsKIAkJaWYgKHR3X2Rldi0+cmVzZXRfcHJpbnQgPT0gMCkgewogCQkJVFdfUFJJTlRLKHR3X2Rldi0+aG9zdCwgVFdfRFJJVkVSLCAweDEwLCAiTWljcm9jb250cm9sbGVyIEVycm9yOiBjbGVhcmluZyIpOwpAQCAtOTMwLDYgKzkyNiwzNiBAQAogCXJldHVybiByZXR2YWw7CiB9IC8qIEVuZCB0d2FfZW1wdHlfcmVzcG9uc2VfcXVldWUoKSAqLwogCisvKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2xlYXIgdGhlIHBjaGlwL3Jlc3BvbnNlIHF1ZXVlIG9uIDk1NTBTWCAqLworc3RhdGljIGludCB0d2FfZW1wdHlfcmVzcG9uc2VfcXVldWVfbGFyZ2UoVFdfRGV2aWNlX0V4dGVuc2lvbiAqdHdfZGV2KQoreworCXUzMiBzdGF0dXNfcmVnX3ZhbHVlLCByZXNwb25zZV9xdWVfdmFsdWU7CisJaW50IGNvdW50ID0gMCwgcmV0dmFsID0gMTsKKworCWlmICh0d19kZXYtPnR3X3BjaV9kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEXzNXQVJFXzk1NTBTWCkgeworCQlzdGF0dXNfcmVnX3ZhbHVlID0gcmVhZGwoVFdfU1RBVFVTX1JFR19BRERSKHR3X2RldikpOworCisJCXdoaWxlICgoKHN0YXR1c19yZWdfdmFsdWUgJiBUV19TVEFUVVNfUkVTUE9OU0VfUVVFVUVfRU1QVFkpID09IDApICYmIChjb3VudCA8IFRXX01BWF9SRVNQT05TRV9EUkFJTikpIHsKKwkJCXJlc3BvbnNlX3F1ZV92YWx1ZSA9IHJlYWRsKFRXX1JFU1BPTlNFX1FVRVVFX1JFR19BRERSX0xBUkdFKHR3X2RldikpOworCQkJaWYgKChyZXNwb25zZV9xdWVfdmFsdWUgJiBUV185NTUwU1hfRFJBSU5fQ09NUExFVEVEKSA9PSBUV185NTUwU1hfRFJBSU5fQ09NUExFVEVEKSB7CisJCQkJLyogUC1jaGlwIHNldHRsZSB0aW1lICovCisJCQkJbXNsZWVwKDUwMCk7CisJCQkJcmV0dmFsID0gMDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCXN0YXR1c19yZWdfdmFsdWUgPSByZWFkbChUV19TVEFUVVNfUkVHX0FERFIodHdfZGV2KSk7CisJCQljb3VudCsrOworCQl9CisJCWlmIChjb3VudCA9PSBUV19NQVhfUkVTUE9OU0VfRFJBSU4pCisJCQlnb3RvIG91dDsKKwkJCisJCXJldHZhbCA9IDA7CisJfSBlbHNlCisJCXJldHZhbCA9IDA7CitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30gLyogRW5kIHR3YV9lbXB0eV9yZXNwb25zZV9xdWV1ZV9sYXJnZSgpICovCisKIC8qIFRoaXMgZnVuY3Rpb24gcGFzc2VzIHNlbnNlIGtleXMgZnJvbSBmaXJtd2FyZSB0byBzY3NpIGxheWVyICovCiBzdGF0aWMgaW50IHR3YV9maWxsX3NlbnNlKFRXX0RldmljZV9FeHRlbnNpb24gKnR3X2RldiwgaW50IHJlcXVlc3RfaWQsIGludCBjb3B5X3NlbnNlLCBpbnQgcHJpbnRfaG9zdCkKIHsKQEAgLTE2MTMsOCArMTYzOSwxNiBAQAogCWludCB0cmllcyA9IDAsIHJldHZhbCA9IDEsIGZsYXNoZWQgPSAwLCBkb19zb2Z0X3Jlc2V0ID0gc29mdF9yZXNldDsKIAogCXdoaWxlICh0cmllcyA8IFRXX01BWF9SRVNFVF9UUklFUykgewotCQlpZiAoZG9fc29mdF9yZXNldCkKKwkJaWYgKGRvX3NvZnRfcmVzZXQpIHsKIAkJCVRXX1NPRlRfUkVTRVQodHdfZGV2KTsKKwkJCS8qIENsZWFyIHBjaGlwL3Jlc3BvbnNlIHF1ZXVlIG9uIDk1NTBTWCAqLworCQkJaWYgKHR3YV9lbXB0eV9yZXNwb25zZV9xdWV1ZV9sYXJnZSh0d19kZXYpKSB7CisJCQkJVFdfUFJJTlRLKHR3X2Rldi0+aG9zdCwgVFdfRFJJVkVSLCAweDM2LCAiUmVzcG9uc2UgcXVldWUgKGxhcmdlKSBlbXB0eSBmYWlsZWQgZHVyaW5nIHJlc2V0IHNlcXVlbmNlIik7CisJCQkJZG9fc29mdF9yZXNldCA9IDE7CisJCQkJdHJpZXMrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQogCiAJCS8qIE1ha2Ugc3VyZSBjb250cm9sbGVyIGlzIGluIGEgZ29vZCBzdGF0ZSAqLwogCQlpZiAodHdhX3BvbGxfc3RhdHVzKHR3X2RldiwgVFdfU1RBVFVTX01JQ1JPQ09OVFJPTExFUl9SRUFEWSB8IChkb19zb2Z0X3Jlc2V0ID09IDEgPyBUV19TVEFUVVNfQVRURU5USU9OX0lOVEVSUlVQVCA6IDApLCA2MCkpIHsKQEAgLTIwMzQsNyArMjA2OCwxMCBAQAogCQlnb3RvIG91dF9mcmVlX2RldmljZV9leHRlbnNpb247CiAJfQogCi0JbWVtX2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMSk7CisJaWYgKHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEXzNXQVJFXzkwMDApCisJCW1lbV9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOworCWVsc2UKKwkJbWVtX2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMik7CiAKIAkvKiBTYXZlIGJhc2UgYWRkcmVzcyAqLwogCXR3X2Rldi0+YmFzZV9hZGRyID0gaW9yZW1hcChtZW1fYWRkciwgUEFHRV9TSVpFKTsKQEAgLTIxNDgsNiArMjE4NSw4IEBACiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdHdhX3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0gewogCXsgUENJX1ZFTkRPUl9JRF8zV0FSRSwgUENJX0RFVklDRV9JRF8zV0FSRV85MDAwLAogCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJeyBQQ0lfVkVORE9SX0lEXzNXQVJFLCBQQ0lfREVWSUNFX0lEXzNXQVJFXzk1NTBTWCwKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB0d2FfcGNpX3RibCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvM3ctOXh4eC5oIGIvZHJpdmVycy9zY3NpLzN3LTl4eHguaAppbmRleCA4YzhlY2JlLi40NmYyMmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvM3ctOXh4eC5oCisrKyBiL2RyaXZlcnMvc2NzaS8zdy05eHh4LmgKQEAgLTI2Nyw3ICsyNjcsNiBAQAogI2RlZmluZSBUV19DT05UUk9MX0NMRUFSX1BBUklUWV9FUlJPUiAgICAgICAgICAweDAwODAwMDAwCiAjZGVmaW5lIFRXX0NPTlRST0xfQ0xFQVJfUVVFVUVfRVJST1IgICAgICAgICAgIDB4MDA0MDAwMDAKICNkZWZpbmUgVFdfQ09OVFJPTF9DTEVBUl9QQ0lfQUJPUlQgICAgICAgICAgICAgMHgwMDEwMDAwMAotI2RlZmluZSBUV19DT05UUk9MX0NMRUFSX1NCVUZfV1JJVEVfRVJST1IgICAgICAweDAwMDAwMDA4CiAKIC8qIFN0YXR1cyByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgVFdfU1RBVFVTX01BSk9SX1ZFUlNJT05fTUFTSwkgICAgICAgMHhGMDAwMDAwMApAQCAtMjg1LDkgKzI4NCw4IEBACiAjZGVmaW5lIFRXX1NUQVRVU19NSUNST0NPTlRST0xMRVJfUkVBRFkJICAgICAgIDB4MDAwMDIwMDAKICNkZWZpbmUgVFdfU1RBVFVTX0NPTU1BTkRfUVVFVUVfRU1QVFkJICAgICAgIDB4MDAwMDEwMDAKICNkZWZpbmUgVFdfU1RBVFVTX0VYUEVDVEVEX0JJVFMJCSAgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIFRXX1NUQVRVU19VTkVYUEVDVEVEX0JJVFMJICAgICAgIDB4MDBGMDAwMDgKLSNkZWZpbmUgVFdfU1RBVFVTX1NCVUZfV1JJVEVfRVJST1IgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBUV19TVEFUVVNfVkFMSURfSU5URVJSVVBUICAgICAgICAgICAgICAweDAwREYwMDA4CisjZGVmaW5lIFRXX1NUQVRVU19VTkVYUEVDVEVEX0JJVFMJICAgICAgIDB4MDBGMDAwMDAKKyNkZWZpbmUgVFdfU1RBVFVTX1ZBTElEX0lOVEVSUlVQVCAgICAgICAgICAgICAgMHgwMERGMDAwMAogCiAvKiBSRVNQT05TRSBRVUVVRSBCSVQgREVGSU5JVElPTlMgKi8KICNkZWZpbmUgVFdfUkVTUE9OU0VfSURfTUFTSwkJICAgICAgIDB4MDAwMDBGRjAKQEAgLTMyNCw5ICszMjIsOSBAQAogCiAvKiBDb21wYXRpYmlsaXR5IGRlZmluZXMgKi8KICNkZWZpbmUgVFdfOTAwMF9BUkNIX0lEIDB4NQotI2RlZmluZSBUV19DVVJSRU5UX0RSSVZFUl9TUkwgMjgKLSNkZWZpbmUgVFdfQ1VSUkVOVF9EUklWRVJfQlVJTEQgOQotI2RlZmluZSBUV19DVVJSRU5UX0RSSVZFUl9CUkFOQ0ggNAorI2RlZmluZSBUV19DVVJSRU5UX0RSSVZFUl9TUkwgMzAKKyNkZWZpbmUgVFdfQ1VSUkVOVF9EUklWRVJfQlVJTEQgODAKKyNkZWZpbmUgVFdfQ1VSUkVOVF9EUklWRVJfQlJBTkNIIDAKIAogLyogUGhhc2UgZGVmaW5lcyAqLwogI2RlZmluZSBUV19QSEFTRV9JTklUSUFMIDAKQEAgLTMzNCw2ICszMzIsNyBAQAogI2RlZmluZSBUV19QSEFTRV9TR0xJU1QgIDIKIAogLyogTWlzYyBkZWZpbmVzICovCisjZGVmaW5lIFRXXzk1NTBTWF9EUkFJTl9DT01QTEVURUQJICAgICAgMHhGRkZGCiAjZGVmaW5lIFRXX1NFQ1RPUl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgNTEyCiAjZGVmaW5lIFRXX0FMSUdOTUVOVF85MDAwICAgICAgICAgICAgICAgICAgICAgNCAgLyogNCBieXRlcyAqLwogI2RlZmluZSBUV19BTElHTk1FTlRfOTAwMF9TR0wgICAgICAgICAgICAgICAgIDB4MwpAQCAtNDE3LDYgKzQxNiw5IEBACiAjaWZuZGVmIFBDSV9ERVZJQ0VfSURfM1dBUkVfOTAwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNXQVJFXzkwMDAgMHgxMDAyCiAjZW5kaWYKKyNpZm5kZWYgUENJX0RFVklDRV9JRF8zV0FSRV85NTUwU1gKKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zV0FSRV85NTUwU1ggMHgxMDAzCisjZW5kaWYKIAogLyogQml0bWFzayBtYWNyb3MgdG8gZWxpbWluYXRlIGJpdGZpZWxkcyAqLwogCkBAIC00NDMsNiArNDQ1LDcgQEAKICNkZWZpbmUgVFdfU1RBVFVTX1JFR19BRERSKHgpICgodW5zaWduZWQgY2hhciBfX2lvbWVtICopeC0+YmFzZV9hZGRyICsgMHg0KQogI2RlZmluZSBUV19DT01NQU5EX1FVRVVFX1JFR19BRERSKHgpIChzaXplb2YoZG1hX2FkZHJfdCkgPiA0ID8gKCh1bnNpZ25lZCBjaGFyIF9faW9tZW0gKil4LT5iYXNlX2FkZHIgKyAweDIwKSA6ICgodW5zaWduZWQgY2hhciBfX2lvbWVtICopeC0+YmFzZV9hZGRyICsgMHg4KSkKICNkZWZpbmUgVFdfUkVTUE9OU0VfUVVFVUVfUkVHX0FERFIoeCkgKCh1bnNpZ25lZCBjaGFyIF9faW9tZW0gKil4LT5iYXNlX2FkZHIgKyAweEMpCisjZGVmaW5lIFRXX1JFU1BPTlNFX1FVRVVFX1JFR19BRERSX0xBUkdFKHgpICgodW5zaWduZWQgY2hhciBfX2lvbWVtICopeC0+YmFzZV9hZGRyICsgMHgzMCkKICNkZWZpbmUgVFdfQ0xFQVJfQUxMX0lOVEVSUlVQVFMoeCkgKHdyaXRlbChUV19TVEFUVVNfVkFMSURfSU5URVJSVVBULCBUV19DT05UUk9MX1JFR19BRERSKHgpKSkKICNkZWZpbmUgVFdfQ0xFQVJfQVRURU5USU9OX0lOVEVSUlVQVCh4KSAod3JpdGVsKFRXX0NPTlRST0xfQ0xFQVJfQVRURU5USU9OX0lOVEVSUlVQVCwgVFdfQ09OVFJPTF9SRUdfQUREUih4KSkpCiAjZGVmaW5lIFRXX0NMRUFSX0hPU1RfSU5URVJSVVBUKHgpICh3cml0ZWwoVFdfQ09OVFJPTF9DTEVBUl9IT1NUX0lOVEVSUlVQVCwgVFdfQ09OVFJPTF9SRUdfQUREUih4KSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvS2NvbmZpZyBiL2RyaXZlcnMvc2NzaS9LY29uZmlnCmluZGV4IDIwMDE5YjguLjNlZTliOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2NzaS9LY29uZmlnCkBAIC01NTMsNiArNTUzLDExIEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBTQ1NJX1NBVEFfSU5URUxfQ09NQklORUQKKwlib29sCisJZGVwZW5kcyBvbiBJREU9eSAmJiAhQkxLX0RFVl9JREVfU0FUQSAmJiAoU0NTSV9TQVRBX0FIQ0kgfHwgU0NTSV9BVEFfUElJWCkKKwlkZWZhdWx0IHkKKwogY29uZmlnIFNDU0lfQlVTTE9HSUMKIAl0cmlzdGF0ZSAiQnVzTG9naWMgU0NTSSBzdXBwb3J0IgogCWRlcGVuZHMgb24gKFBDSSB8fCBJU0EgfHwgTUNBKSAmJiBTQ1NJICYmIElTQV9ETUFfQVBJCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvTWFrZWZpbGUgYi9kcml2ZXJzL3Njc2kvTWFrZWZpbGUKaW5kZXggMWU0ZWRiZC4uNDg1MjlkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2NzaS9NYWtlZmlsZQpAQCAtOTksNiArOTksNyBAQAogb2JqLSQoQ09ORklHX1NDU0lfREMzOTBUKQkrPSB0bXNjc2ltLm8KIG9iai0kKENPTkZJR19NRUdBUkFJRF9MRUdBQ1kpCSs9IG1lZ2FyYWlkLm8KIG9iai0kKENPTkZJR19NRUdBUkFJRF9ORVdHRU4pCSs9IG1lZ2FyYWlkLworb2JqLSQoQ09ORklHX01FR0FSQUlEX1NBUykJKz0gbWVnYXJhaWQvCiBvYmotJChDT05GSUdfU0NTSV9BQ0FSRCkJKz0gYXRwODcwdS5vCiBvYmotJChDT05GSUdfU0NTSV9TVU5FU1ApCSs9IGVzcC5vCiBvYmotJChDT05GSUdfU0NTSV9HRFRIKQkJKz0gZ2R0aC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvTkNSNTM4MC5jIGIvZHJpdmVycy9zY3NpL05DUjUzODAuYwppbmRleCBkNDBiYTBiLi4yMzM5MmFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvTkNSNTM4MC5jCisrKyBiL2RyaXZlcnMvc2NzaS9OQ1I1MzgwLmMKQEAgLTkxLDcgKzkxLDcgQEAKICNpZm5kZWYgTkRFQlVHCiAjZGVmaW5lIE5ERUJVRyAwCiAjZW5kaWYKLSNpZm5kZWYgTkRFQlVHCisjaWZuZGVmIE5ERUJVR19BQk9SVAogI2RlZmluZSBOREVCVUdfQUJPUlQgMAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY2hiYS5jIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvYWFjaGJhLmMKaW5kZXggYThlM2RmYy4uOTM0MTZmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvYWFjaGJhLmMKKysrIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvYWFjaGJhLmMKQEAgLTMxMywxOCArMzEzLDM3IEBACiAJCX0KIAkJZHJlc3AgPSAoc3RydWN0IGFhY19tb3VudCAqKWZpYl9kYXRhKGZpYnB0cik7CiAKKwkJaWYgKChsZTMyX3RvX2NwdShkcmVzcC0+c3RhdHVzKSA9PSBTVF9PSykgJiYKKwkJICAgIChsZTMyX3RvX2NwdShkcmVzcC0+bW50WzBdLnZvbCkgPT0gQ1RfTk9ORSkpIHsKKwkJCWRpbmZvLT5jb21tYW5kID0gY3B1X3RvX2xlMzIoVk1fTmFtZVNlcnZlNjQpOworCQkJZGluZm8tPmNvdW50ID0gY3B1X3RvX2xlMzIoaW5kZXgpOworCQkJZGluZm8tPnR5cGUgPSBjcHVfdG9fbGUzMihGVF9GSUxFU1lTKTsKKworCQkJaWYgKGZpYl9zZW5kKENvbnRhaW5lckNvbW1hbmQsCisJCQkJICAgIGZpYnB0ciwKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBhYWNfcXVlcnlfbW91bnQpLAorCQkJCSAgICBGc2FOb3JtYWwsCisJCQkJICAgIDEsIDEsCisJCQkJICAgIE5VTEwsIE5VTEwpIDwgMCkKKwkJCQljb250aW51ZTsKKwkJfSBlbHNlCisJCQlkcmVzcC0+bW50WzBdLmNhcGFjaXR5aGlnaCA9IDA7CisKIAkJZHByaW50ayAoKEtFUk5fREVCVUcKLQkJICAiVk1fTmFtZVNlcnZlIGNpZD0lZCBzdGF0dXM9JWQgdm9sPSVkIHN0YXRlPSVkIGNhcD0ldVxuIiwKKwkJICAiVk1fTmFtZVNlcnZlIGNpZD0lZCBzdGF0dXM9JWQgdm9sPSVkIHN0YXRlPSVkIGNhcD0lbGx1XG4iLAogCQkgIChpbnQpaW5kZXgsIChpbnQpbGUzMl90b19jcHUoZHJlc3AtPnN0YXR1cyksCiAJCSAgKGludClsZTMyX3RvX2NwdShkcmVzcC0+bW50WzBdLnZvbCksCiAJCSAgKGludClsZTMyX3RvX2NwdShkcmVzcC0+bW50WzBdLnN0YXRlKSwKLQkJICAodW5zaWduZWQpbGUzMl90b19jcHUoZHJlc3AtPm1udFswXS5jYXBhY2l0eSkpKTsKKwkJICAoKHU2NClsZTMyX3RvX2NwdShkcmVzcC0+bW50WzBdLmNhcGFjaXR5KSkgKworCQkgICAgKCgodTY0KWxlMzJfdG9fY3B1KGRyZXNwLT5tbnRbMF0uY2FwYWNpdHloaWdoKSkgPDwgMzIpKSk7CiAJCWlmICgobGUzMl90b19jcHUoZHJlc3AtPnN0YXR1cykgPT0gU1RfT0spICYmCiAJCSAgICAobGUzMl90b19jcHUoZHJlc3AtPm1udFswXS52b2wpICE9IENUX05PTkUpICYmCiAJCSAgICAobGUzMl90b19jcHUoZHJlc3AtPm1udFswXS5zdGF0ZSkgIT0gRlNDU19ISURERU4pKSB7CiAJCQlmc2FfZGV2X3B0cltpbmRleF0udmFsaWQgPSAxOwogCQkJZnNhX2Rldl9wdHJbaW5kZXhdLnR5cGUgPSBsZTMyX3RvX2NwdShkcmVzcC0+bW50WzBdLnZvbCk7Ci0JCQlmc2FfZGV2X3B0cltpbmRleF0uc2l6ZSA9IGxlMzJfdG9fY3B1KGRyZXNwLT5tbnRbMF0uY2FwYWNpdHkpOworCQkJZnNhX2Rldl9wdHJbaW5kZXhdLnNpemUKKwkJCSAgPSAoKHU2NClsZTMyX3RvX2NwdShkcmVzcC0+bW50WzBdLmNhcGFjaXR5KSkgKworCQkJICAgICgoKHU2NClsZTMyX3RvX2NwdShkcmVzcC0+bW50WzBdLmNhcGFjaXR5aGlnaCkpIDw8IDMyKTsKIAkJCWlmIChsZTMyX3RvX2NwdShkcmVzcC0+bW50WzBdLnN0YXRlKSAmIEZTQ1NfUkVBRE9OTFkpCiAJCQkJICAgIGZzYV9kZXZfcHRyW2luZGV4XS5ybyA9IDE7CiAJCX0KQEAgLTQ2MCw3ICs0NzksNyBAQAogICoJaXMgdXBkYXRlZCBpbiB0aGUgc3RydWN0IGZzYV9kZXZfaW5mbyBzdHJ1Y3R1cmUgcmF0aGVyIHRoYW4gcmV0dXJuZWQuCiAgKi8KICAKLXN0YXRpYyBpbnQgcHJvYmVfY29udGFpbmVyKHN0cnVjdCBhYWNfZGV2ICpkZXYsIGludCBjaWQpCitpbnQgcHJvYmVfY29udGFpbmVyKHN0cnVjdCBhYWNfZGV2ICpkZXYsIGludCBjaWQpCiB7CiAJc3RydWN0IGZzYV9kZXZfaW5mbyAqZnNhX2Rldl9wdHI7CiAJaW50IHN0YXR1czsKQEAgLTQ5NywxMSArNTE2LDI5IEBACiAJZHJlc3AgPSAoc3RydWN0IGFhY19tb3VudCAqKSBmaWJfZGF0YShmaWJwdHIpOwogCiAJaWYgKChsZTMyX3RvX2NwdShkcmVzcC0+c3RhdHVzKSA9PSBTVF9PSykgJiYKKwkgICAgKGxlMzJfdG9fY3B1KGRyZXNwLT5tbnRbMF0udm9sKSA9PSBDVF9OT05FKSkgeworCQlkaW5mby0+Y29tbWFuZCA9IGNwdV90b19sZTMyKFZNX05hbWVTZXJ2ZTY0KTsKKwkJZGluZm8tPmNvdW50ID0gY3B1X3RvX2xlMzIoY2lkKTsKKwkJZGluZm8tPnR5cGUgPSBjcHVfdG9fbGUzMihGVF9GSUxFU1lTKTsKKworCQlpZiAoZmliX3NlbmQoQ29udGFpbmVyQ29tbWFuZCwKKwkJCSAgICBmaWJwdHIsCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBhYWNfcXVlcnlfbW91bnQpLAorCQkJICAgIEZzYU5vcm1hbCwKKwkJCSAgICAxLCAxLAorCQkJICAgIE5VTEwsIE5VTEwpIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJfSBlbHNlCisJCWRyZXNwLT5tbnRbMF0uY2FwYWNpdHloaWdoID0gMDsKKworCWlmICgobGUzMl90b19jcHUoZHJlc3AtPnN0YXR1cykgPT0gU1RfT0spICYmCiAJICAgIChsZTMyX3RvX2NwdShkcmVzcC0+bW50WzBdLnZvbCkgIT0gQ1RfTk9ORSkgJiYKIAkgICAgKGxlMzJfdG9fY3B1KGRyZXNwLT5tbnRbMF0uc3RhdGUpICE9IEZTQ1NfSElEREVOKSkgewogCQlmc2FfZGV2X3B0cltjaWRdLnZhbGlkID0gMTsKIAkJZnNhX2Rldl9wdHJbY2lkXS50eXBlID0gbGUzMl90b19jcHUoZHJlc3AtPm1udFswXS52b2wpOwotCQlmc2FfZGV2X3B0cltjaWRdLnNpemUgPSBsZTMyX3RvX2NwdShkcmVzcC0+bW50WzBdLmNhcGFjaXR5KTsKKwkJZnNhX2Rldl9wdHJbY2lkXS5zaXplCisJCSAgPSAoKHU2NClsZTMyX3RvX2NwdShkcmVzcC0+bW50WzBdLmNhcGFjaXR5KSkgKworCQkgICAgKCgodTY0KWxlMzJfdG9fY3B1KGRyZXNwLT5tbnRbMF0uY2FwYWNpdHloaWdoKSkgPDwgMzIpOwogCQlpZiAobGUzMl90b19jcHUoZHJlc3AtPm1udFswXS5zdGF0ZSkgJiBGU0NTX1JFQURPTkxZKQogCQkJZnNhX2Rldl9wdHJbY2lkXS5ybyA9IDE7CiAJfQpAQCAtNjU1LDcgKzY5Miw3IEBACiAJCQkgZmlicHRyLCAKIAkJCSBzaXplb2YoKmluZm8pLAogCQkJIEZzYU5vcm1hbCwgCi0JCQkgMSwgMSwgCisJCQkgLTEsIDEsIC8qIEZpcnN0IGBpbnRlcnJ1cHQnIGNvbW1hbmQgdXNlcyBzcGVjaWFsIHdhaXQgKi8KIAkJCSBOVUxMLCAKIAkJCSBOVUxMKTsKIApAQCAtODA2LDggKzg0Myw4IEBACiAJaWYgKCEoZGV2LT5yYXdfaW9faW50ZXJmYWNlKSkgewogCQlkZXYtPnNjc2lfaG9zdF9wdHItPnNnX3RhYmxlc2l6ZSA9IChkZXYtPm1heF9maWJfc2l6ZSAtCiAJCQlzaXplb2Yoc3RydWN0IGFhY19maWJoZHIpIC0KLQkJCXNpemVvZihzdHJ1Y3QgYWFjX3dyaXRlKSArIHNpemVvZihzdHJ1Y3Qgc2dtYXApKSAvCi0JCQkJc2l6ZW9mKHN0cnVjdCBzZ21hcCk7CisJCQlzaXplb2Yoc3RydWN0IGFhY193cml0ZSkgKyBzaXplb2Yoc3RydWN0IHNnZW50cnkpKSAvCisJCQkJc2l6ZW9mKHN0cnVjdCBzZ2VudHJ5KTsKIAkJaWYgKGRldi0+ZGFjX3N1cHBvcnQpIHsKIAkJCS8qIAogCQkJICogMzggc2NhdHRlciBnYXRoZXIgZWxlbWVudHMgCkBAIC04MTYsOCArODUzLDggQEAKIAkJCQkoZGV2LT5tYXhfZmliX3NpemUgLQogCQkJCXNpemVvZihzdHJ1Y3QgYWFjX2ZpYmhkcikgLQogCQkJCXNpemVvZihzdHJ1Y3QgYWFjX3dyaXRlNjQpICsKLQkJCQlzaXplb2Yoc3RydWN0IHNnbWFwNjQpKSAvCi0JCQkJCXNpemVvZihzdHJ1Y3Qgc2dtYXA2NCk7CisJCQkJc2l6ZW9mKHN0cnVjdCBzZ2VudHJ5NjQpKSAvCisJCQkJCXNpemVvZihzdHJ1Y3Qgc2dlbnRyeTY0KTsKIAkJfQogCQlkZXYtPnNjc2lfaG9zdF9wdHItPm1heF9zZWN0b3JzID0gQUFDX01BWF8zMkJJVF9TR0JDT1VOVDsKIAkJaWYoIShkZXYtPmFkYXB0ZXJfaW5mby5vcHRpb25zICYgQUFDX09QVF9ORVdfQ09NTSkpIHsKQEAgLTg1NCw3ICs4OTEsNDAgQEAKIAlkZXYgPSAoc3RydWN0IGFhY19kZXYgKilzY3NpY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwogCWNpZCA9IElEX0xVTl9UT19DT05UQUlORVIoc2NzaWNtZC0+ZGV2aWNlLT5pZCwgc2NzaWNtZC0+ZGV2aWNlLT5sdW4pOwogCi0JZHByaW50aygoS0VSTl9ERUJVRyAiaW9fY2FsbGJhY2tbY3B1ICVkXTogbGJhID0gJXUsIHQgPSAlbGQuXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksICgoc2NzaWNtZC0+Y21uZFsxXSAmIDB4MUYpIDw8IDE2KSB8IChzY3NpY21kLT5jbW5kWzJdIDw8IDgpIHwgc2NzaWNtZC0+Y21uZFszXSwgamlmZmllcykpOworCWlmIChuYmxhbmsoZHByaW50ayh4KSkpIHsKKwkJdTY0IGxiYTsKKwkJc3dpdGNoIChzY3NpY21kLT5jbW5kWzBdKSB7CisJCWNhc2UgV1JJVEVfNjoKKwkJY2FzZSBSRUFEXzY6CisJCQlsYmEgPSAoKHNjc2ljbWQtPmNtbmRbMV0gJiAweDFGKSA8PCAxNikgfAorCQkJICAgIChzY3NpY21kLT5jbW5kWzJdIDw8IDgpIHwgc2NzaWNtZC0+Y21uZFszXTsKKwkJCWJyZWFrOworCQljYXNlIFdSSVRFXzE2OgorCQljYXNlIFJFQURfMTY6CisJCQlsYmEgPSAoKHU2NClzY3NpY21kLT5jbW5kWzJdIDw8IDU2KSB8CisJCQkgICAgICAoKHU2NClzY3NpY21kLT5jbW5kWzNdIDw8IDQ4KSB8CisJCQkgICAgICAoKHU2NClzY3NpY21kLT5jbW5kWzRdIDw8IDQwKSB8CisJCQkgICAgICAoKHU2NClzY3NpY21kLT5jbW5kWzVdIDw8IDMyKSB8CisJCQkgICAgICAoKHU2NClzY3NpY21kLT5jbW5kWzZdIDw8IDI0KSB8CisJCQkgICAgICAoc2NzaWNtZC0+Y21uZFs3XSA8PCAxNikgfAorCQkJICAgICAgKHNjc2ljbWQtPmNtbmRbOF0gPDwgOCkgfCBzY3NpY21kLT5jbW5kWzldOworCQkJYnJlYWs7CisJCWNhc2UgV1JJVEVfMTI6CisJCWNhc2UgUkVBRF8xMjoKKwkJCWxiYSA9ICgodTY0KXNjc2ljbWQtPmNtbmRbMl0gPDwgMjQpIHwKKwkJCSAgICAgIChzY3NpY21kLT5jbW5kWzNdIDw8IDE2KSB8CisJCQkgICAgICAoc2NzaWNtZC0+Y21uZFs0XSA8PCA4KSB8IHNjc2ljbWQtPmNtbmRbNV07CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWxiYSA9ICgodTY0KXNjc2ljbWQtPmNtbmRbMl0gPDwgMjQpIHwKKwkJCSAgICAgICAoc2NzaWNtZC0+Y21uZFszXSA8PCAxNikgfAorCQkJICAgICAgIChzY3NpY21kLT5jbW5kWzRdIDw8IDgpIHwgc2NzaWNtZC0+Y21uZFs1XTsKKwkJCWJyZWFrOworCQl9CisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgImlvX2NhbGxiYWNrW2NwdSAlZF06IGxiYSA9ICVsbHUsIHQgPSAlbGQuXG4iLAorCQkgIHNtcF9wcm9jZXNzb3JfaWQoKSwgKHVuc2lnbmVkIGxvbmcgbG9uZylsYmEsIGppZmZpZXMpOworCX0KIAogCWlmIChmaWJwdHIgPT0gTlVMTCkKIAkJQlVHKCk7CkBAIC04OTUsNyArOTY1LDcgQEAKIAogc3RhdGljIGludCBhYWNfcmVhZChzdHJ1Y3Qgc2NzaV9jbW5kICogc2NzaWNtZCwgaW50IGNpZCkKIHsKLQl1MzIgbGJhOworCXU2NCBsYmE7CiAJdTMyIGNvdW50OwogCWludCBzdGF0dXM7CiAKQEAgLTkwNywyMyArOTc3LDY5IEBACiAJLyoKIAkgKglHZXQgYmxvY2sgYWRkcmVzcyBhbmQgdHJhbnNmZXIgbGVuZ3RoCiAJICovCi0JaWYgKHNjc2ljbWQtPmNtbmRbMF0gPT0gUkVBRF82KQkvKiA2IGJ5dGUgY29tbWFuZCAqLwotCXsKKwlzd2l0Y2ggKHNjc2ljbWQtPmNtbmRbMF0pIHsKKwljYXNlIFJFQURfNjoKIAkJZHByaW50aygoS0VSTl9ERUJVRyAiYWFjaGJhOiByZWNlaXZlZCBhIHJlYWQoNikgY29tbWFuZCBvbiBpZCAlZC5cbiIsIGNpZCkpOwogCi0JCWxiYSA9ICgoc2NzaWNtZC0+Y21uZFsxXSAmIDB4MUYpIDw8IDE2KSB8IChzY3NpY21kLT5jbW5kWzJdIDw8IDgpIHwgc2NzaWNtZC0+Y21uZFszXTsKKwkJbGJhID0gKChzY3NpY21kLT5jbW5kWzFdICYgMHgxRikgPDwgMTYpIHwgCisJCQkoc2NzaWNtZC0+Y21uZFsyXSA8PCA4KSB8IHNjc2ljbWQtPmNtbmRbM107CiAJCWNvdW50ID0gc2NzaWNtZC0+Y21uZFs0XTsKIAogCQlpZiAoY291bnQgPT0gMCkKIAkJCWNvdW50ID0gMjU2OwotCX0gZWxzZSB7CisJCWJyZWFrOworCWNhc2UgUkVBRF8xNjoKKwkJZHByaW50aygoS0VSTl9ERUJVRyAiYWFjaGJhOiByZWNlaXZlZCBhIHJlYWQoMTYpIGNvbW1hbmQgb24gaWQgJWQuXG4iLCBjaWQpKTsKKworCQlsYmEgPSAJKCh1NjQpc2NzaWNtZC0+Y21uZFsyXSA8PCA1NikgfAorCQkgCSgodTY0KXNjc2ljbWQtPmNtbmRbM10gPDwgNDgpIHwKKwkJCSgodTY0KXNjc2ljbWQtPmNtbmRbNF0gPDwgNDApIHwKKwkJCSgodTY0KXNjc2ljbWQtPmNtbmRbNV0gPDwgMzIpIHwKKwkJCSgodTY0KXNjc2ljbWQtPmNtbmRbNl0gPDwgMjQpIHwgCisJCQkoc2NzaWNtZC0+Y21uZFs3XSA8PCAxNikgfAorCQkJKHNjc2ljbWQtPmNtbmRbOF0gPDwgOCkgfCBzY3NpY21kLT5jbW5kWzldOworCQljb3VudCA9IChzY3NpY21kLT5jbW5kWzEwXSA8PCAyNCkgfCAKKwkJCShzY3NpY21kLT5jbW5kWzExXSA8PCAxNikgfAorCQkJKHNjc2ljbWQtPmNtbmRbMTJdIDw8IDgpIHwgc2NzaWNtZC0+Y21uZFsxM107CisJCWJyZWFrOworCWNhc2UgUkVBRF8xMjoKKwkJZHByaW50aygoS0VSTl9ERUJVRyAiYWFjaGJhOiByZWNlaXZlZCBhIHJlYWQoMTIpIGNvbW1hbmQgb24gaWQgJWQuXG4iLCBjaWQpKTsKKworCQlsYmEgPSAoKHU2NClzY3NpY21kLT5jbW5kWzJdIDw8IDI0KSB8IAorCQkJKHNjc2ljbWQtPmNtbmRbM10gPDwgMTYpIHwKKwkJICAgIAkoc2NzaWNtZC0+Y21uZFs0XSA8PCA4KSB8IHNjc2ljbWQtPmNtbmRbNV07CisJCWNvdW50ID0gKHNjc2ljbWQtPmNtbmRbNl0gPDwgMjQpIHwgCisJCQkoc2NzaWNtZC0+Y21uZFs3XSA8PCAxNikgfAorCQkgICAgICAJKHNjc2ljbWQtPmNtbmRbOF0gPDwgOCkgfCBzY3NpY21kLT5jbW5kWzldOworCQlicmVhazsKKwlkZWZhdWx0OgogCQlkcHJpbnRrKChLRVJOX0RFQlVHICJhYWNoYmE6IHJlY2VpdmVkIGEgcmVhZCgxMCkgY29tbWFuZCBvbiBpZCAlZC5cbiIsIGNpZCkpOwogCi0JCWxiYSA9IChzY3NpY21kLT5jbW5kWzJdIDw8IDI0KSB8IChzY3NpY21kLT5jbW5kWzNdIDw8IDE2KSB8IChzY3NpY21kLT5jbW5kWzRdIDw8IDgpIHwgc2NzaWNtZC0+Y21uZFs1XTsKKwkJbGJhID0gKCh1NjQpc2NzaWNtZC0+Y21uZFsyXSA8PCAyNCkgfCAKKwkJCShzY3NpY21kLT5jbW5kWzNdIDw8IDE2KSB8IAorCQkJKHNjc2ljbWQtPmNtbmRbNF0gPDwgOCkgfCBzY3NpY21kLT5jbW5kWzVdOwogCQljb3VudCA9IChzY3NpY21kLT5jbW5kWzddIDw8IDgpIHwgc2NzaWNtZC0+Y21uZFs4XTsKKwkJYnJlYWs7CiAJfQotCWRwcmludGsoKEtFUk5fREVCVUcgImFhY19yZWFkW2NwdSAlZF06IGxiYSA9ICV1LCB0ID0gJWxkLlxuIiwKKwlkcHJpbnRrKChLRVJOX0RFQlVHICJhYWNfcmVhZFtjcHUgJWRdOiBsYmEgPSAlbGx1LCB0ID0gJWxkLlxuIiwKIAkgIHNtcF9wcm9jZXNzb3JfaWQoKSwgKHVuc2lnbmVkIGxvbmcgbG9uZylsYmEsIGppZmZpZXMpKTsKKwlpZiAoKCEoZGV2LT5yYXdfaW9faW50ZXJmYWNlKSB8fCAhKGRldi0+cmF3X2lvXzY0KSkgJiYKKwkJKGxiYSAmIDB4ZmZmZmZmZmYwMDAwMDAwMExMKSkgeworCQlkcHJpbnRrKChLRVJOX0RFQlVHICJhYWNfcmVhZDogSWxsZWdhbCBsYmFcbiIpKTsKKwkJc2NzaWNtZC0+cmVzdWx0ID0gRElEX09LIDw8IDE2IHwgQ09NTUFORF9DT01QTEVURSA8PCA4IHwgCisJCQlTQU1fU1RBVF9DSEVDS19DT05ESVRJT047CisJCXNldF9zZW5zZSgodTggKikgJmRldi0+ZnNhX2RldltjaWRdLnNlbnNlX2RhdGEsCisJCQkgICAgSEFSRFdBUkVfRVJST1IsCisJCQkgICAgU0VOQ09ERV9JTlRFUk5BTF9UQVJHRVRfRkFJTFVSRSwKKwkJCSAgICBBU0VOQ09ERV9JTlRFUk5BTF9UQVJHRVRfRkFJTFVSRSwgMCwgMCwKKwkJCSAgICAwLCAwKTsKKwkJbWVtY3B5KHNjc2ljbWQtPnNlbnNlX2J1ZmZlciwgJmRldi0+ZnNhX2RldltjaWRdLnNlbnNlX2RhdGEsCisJCSAgKHNpemVvZihkZXYtPmZzYV9kZXZbY2lkXS5zZW5zZV9kYXRhKSA+IHNpemVvZihzY3NpY21kLT5zZW5zZV9idWZmZXIpKQorCQkgICAgPyBzaXplb2Yoc2NzaWNtZC0+c2Vuc2VfYnVmZmVyKQorCQkgICAgOiBzaXplb2YoZGV2LT5mc2FfZGV2W2NpZF0uc2Vuc2VfZGF0YSkpOworCQlzY3NpY21kLT5zY3NpX2RvbmUoc2NzaWNtZCk7CisJCXJldHVybiAwOworCX0KIAkvKgogCSAqCUFsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBGaWIKIAkgKi8KQEAgLTkzNiw4ICsxMDUyLDggQEAKIAlpZiAoZGV2LT5yYXdfaW9faW50ZXJmYWNlKSB7CiAJCXN0cnVjdCBhYWNfcmF3X2lvICpyZWFkY21kOwogCQlyZWFkY21kID0gKHN0cnVjdCBhYWNfcmF3X2lvICopIGZpYl9kYXRhKGNtZF9maWJjb250ZXh0KTsKLQkJcmVhZGNtZC0+YmxvY2tbMF0gPSBjcHVfdG9fbGUzMihsYmEpOwotCQlyZWFkY21kLT5ibG9ja1sxXSA9IDA7CisJCXJlYWRjbWQtPmJsb2NrWzBdID0gY3B1X3RvX2xlMzIoKHUzMikobGJhJjB4ZmZmZmZmZmYpKTsKKwkJcmVhZGNtZC0+YmxvY2tbMV0gPSBjcHVfdG9fbGUzMigodTMyKSgobGJhJjB4ZmZmZmZmZmYwMDAwMDAwMExMKT4+MzIpKTsKIAkJcmVhZGNtZC0+Y291bnQgPSBjcHVfdG9fbGUzMihjb3VudDw8OSk7CiAJCXJlYWRjbWQtPmNpZCA9IGNwdV90b19sZTE2KGNpZCk7CiAJCXJlYWRjbWQtPmZsYWdzID0gY3B1X3RvX2xlMTYoMSk7CkBAIC05NjQsNyArMTA4MCw3IEBACiAJCXJlYWRjbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUzMihWTV9DdEhvc3RSZWFkNjQpOwogCQlyZWFkY21kLT5jaWQgPSBjcHVfdG9fbGUxNihjaWQpOwogCQlyZWFkY21kLT5zZWN0b3JfY291bnQgPSBjcHVfdG9fbGUxNihjb3VudCk7Ci0JCXJlYWRjbWQtPmJsb2NrID0gY3B1X3RvX2xlMzIobGJhKTsKKwkJcmVhZGNtZC0+YmxvY2sgPSBjcHVfdG9fbGUzMigodTMyKShsYmEmMHhmZmZmZmZmZikpOwogCQlyZWFkY21kLT5wYWQgICA9IDA7CiAJCXJlYWRjbWQtPmZsYWdzID0gMDsgCiAKQEAgLTk4OSw3ICsxMTA1LDcgQEAKIAkJcmVhZGNtZCA9IChzdHJ1Y3QgYWFjX3JlYWQgKikgZmliX2RhdGEoY21kX2ZpYmNvbnRleHQpOwogCQlyZWFkY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMzIoVk1fQ3RCbG9ja1JlYWQpOwogCQlyZWFkY21kLT5jaWQgPSBjcHVfdG9fbGUzMihjaWQpOwotCQlyZWFkY21kLT5ibG9jayA9IGNwdV90b19sZTMyKGxiYSk7CisJCXJlYWRjbWQtPmJsb2NrID0gY3B1X3RvX2xlMzIoKHUzMikobGJhJjB4ZmZmZmZmZmYpKTsKIAkJcmVhZGNtZC0+Y291bnQgPSBjcHVfdG9fbGUzMihjb3VudCAqIDUxMik7CiAKIAkJYWFjX2J1aWxkX3NnKHNjc2ljbWQsICZyZWFkY21kLT5zZyk7CkBAIC0xMDMxLDcgKzExNDcsNyBAQAogCiBzdGF0aWMgaW50IGFhY193cml0ZShzdHJ1Y3Qgc2NzaV9jbW5kICogc2NzaWNtZCwgaW50IGNpZCkKIHsKLQl1MzIgbGJhOworCXU2NCBsYmE7CiAJdTMyIGNvdW50OwogCWludCBzdGF0dXM7CiAJdTE2IGZpYnNpemU7CkBAIC0xMDQ4LDEzICsxMTY0LDQ4IEBACiAJCWNvdW50ID0gc2NzaWNtZC0+Y21uZFs0XTsKIAkJaWYgKGNvdW50ID09IDApCiAJCQljb3VudCA9IDI1NjsKKwl9IGVsc2UgaWYgKHNjc2ljbWQtPmNtbmRbMF0gPT0gV1JJVEVfMTYpIHsgLyogMTYgYnl0ZSBjb21tYW5kICovCisJCWRwcmludGsoKEtFUk5fREVCVUcgImFhY2hiYTogcmVjZWl2ZWQgYSB3cml0ZSgxNikgY29tbWFuZCBvbiBpZCAlZC5cbiIsIGNpZCkpOworCisJCWxiYSA9IAkoKHU2NClzY3NpY21kLT5jbW5kWzJdIDw8IDU2KSB8CisJCQkoKHU2NClzY3NpY21kLT5jbW5kWzNdIDw8IDQ4KSB8CisJCQkoKHU2NClzY3NpY21kLT5jbW5kWzRdIDw8IDQwKSB8CisJCQkoKHU2NClzY3NpY21kLT5jbW5kWzVdIDw8IDMyKSB8CisJCQkoKHU2NClzY3NpY21kLT5jbW5kWzZdIDw8IDI0KSB8IAorCQkJKHNjc2ljbWQtPmNtbmRbN10gPDwgMTYpIHwKKwkJCShzY3NpY21kLT5jbW5kWzhdIDw8IDgpIHwgc2NzaWNtZC0+Y21uZFs5XTsKKwkJY291bnQgPSAoc2NzaWNtZC0+Y21uZFsxMF0gPDwgMjQpIHwgKHNjc2ljbWQtPmNtbmRbMTFdIDw8IDE2KSB8CisJCQkoc2NzaWNtZC0+Y21uZFsxMl0gPDwgOCkgfCBzY3NpY21kLT5jbW5kWzEzXTsKKwl9IGVsc2UgaWYgKHNjc2ljbWQtPmNtbmRbMF0gPT0gV1JJVEVfMTIpIHsgLyogMTIgYnl0ZSBjb21tYW5kICovCisJCWRwcmludGsoKEtFUk5fREVCVUcgImFhY2hiYTogcmVjZWl2ZWQgYSB3cml0ZSgxMikgY29tbWFuZCBvbiBpZCAlZC5cbiIsIGNpZCkpOworCisJCWxiYSA9ICgodTY0KXNjc2ljbWQtPmNtbmRbMl0gPDwgMjQpIHwgKHNjc2ljbWQtPmNtbmRbM10gPDwgMTYpCisJCSAgICB8IChzY3NpY21kLT5jbW5kWzRdIDw8IDgpIHwgc2NzaWNtZC0+Y21uZFs1XTsKKwkJY291bnQgPSAoc2NzaWNtZC0+Y21uZFs2XSA8PCAyNCkgfCAoc2NzaWNtZC0+Y21uZFs3XSA8PCAxNikKKwkJICAgICAgfCAoc2NzaWNtZC0+Y21uZFs4XSA8PCA4KSB8IHNjc2ljbWQtPmNtbmRbOV07CiAJfSBlbHNlIHsKIAkJZHByaW50aygoS0VSTl9ERUJVRyAiYWFjaGJhOiByZWNlaXZlZCBhIHdyaXRlKDEwKSBjb21tYW5kIG9uIGlkICVkLlxuIiwgY2lkKSk7Ci0JCWxiYSA9IChzY3NpY21kLT5jbW5kWzJdIDw8IDI0KSB8IChzY3NpY21kLT5jbW5kWzNdIDw8IDE2KSB8IChzY3NpY21kLT5jbW5kWzRdIDw8IDgpIHwgc2NzaWNtZC0+Y21uZFs1XTsKKwkJbGJhID0gKCh1NjQpc2NzaWNtZC0+Y21uZFsyXSA8PCAyNCkgfCAoc2NzaWNtZC0+Y21uZFszXSA8PCAxNikgfCAoc2NzaWNtZC0+Y21uZFs0XSA8PCA4KSB8IHNjc2ljbWQtPmNtbmRbNV07CiAJCWNvdW50ID0gKHNjc2ljbWQtPmNtbmRbN10gPDwgOCkgfCBzY3NpY21kLT5jbW5kWzhdOwogCX0KLQlkcHJpbnRrKChLRVJOX0RFQlVHICJhYWNfd3JpdGVbY3B1ICVkXTogbGJhID0gJXUsIHQgPSAlbGQuXG4iLAorCWRwcmludGsoKEtFUk5fREVCVUcgImFhY193cml0ZVtjcHUgJWRdOiBsYmEgPSAlbGx1LCB0ID0gJWxkLlxuIiwKIAkgIHNtcF9wcm9jZXNzb3JfaWQoKSwgKHVuc2lnbmVkIGxvbmcgbG9uZylsYmEsIGppZmZpZXMpKTsKKwlpZiAoKCEoZGV2LT5yYXdfaW9faW50ZXJmYWNlKSB8fCAhKGRldi0+cmF3X2lvXzY0KSkKKwkgJiYgKGxiYSAmIDB4ZmZmZmZmZmYwMDAwMDAwMExMKSkgeworCQlkcHJpbnRrKChLRVJOX0RFQlVHICJhYWNfd3JpdGU6IElsbGVnYWwgbGJhXG4iKSk7CisJCXNjc2ljbWQtPnJlc3VsdCA9IERJRF9PSyA8PCAxNiB8IENPTU1BTkRfQ09NUExFVEUgPDwgOCB8IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKKwkJc2V0X3NlbnNlKCh1OCAqKSAmZGV2LT5mc2FfZGV2W2NpZF0uc2Vuc2VfZGF0YSwKKwkJCSAgICBIQVJEV0FSRV9FUlJPUiwKKwkJCSAgICBTRU5DT0RFX0lOVEVSTkFMX1RBUkdFVF9GQUlMVVJFLAorCQkJICAgIEFTRU5DT0RFX0lOVEVSTkFMX1RBUkdFVF9GQUlMVVJFLCAwLCAwLAorCQkJICAgIDAsIDApOworCQltZW1jcHkoc2NzaWNtZC0+c2Vuc2VfYnVmZmVyLCAmZGV2LT5mc2FfZGV2W2NpZF0uc2Vuc2VfZGF0YSwKKwkJICAoc2l6ZW9mKGRldi0+ZnNhX2RldltjaWRdLnNlbnNlX2RhdGEpID4gc2l6ZW9mKHNjc2ljbWQtPnNlbnNlX2J1ZmZlcikpCisJCSAgICA/IHNpemVvZihzY3NpY21kLT5zZW5zZV9idWZmZXIpCisJCSAgICA6IHNpemVvZihkZXYtPmZzYV9kZXZbY2lkXS5zZW5zZV9kYXRhKSk7CisJCXNjc2ljbWQtPnNjc2lfZG9uZShzY3NpY21kKTsKKwkJcmV0dXJuIDA7CisJfQogCS8qCiAJICoJQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBGaWIgdGhlbiBzZXR1cCBhIEJsb2NrV3JpdGUgY29tbWFuZAogCSAqLwpAQCAtMTA2OCw4ICsxMjE5LDggQEAKIAlpZiAoZGV2LT5yYXdfaW9faW50ZXJmYWNlKSB7CiAJCXN0cnVjdCBhYWNfcmF3X2lvICp3cml0ZWNtZDsKIAkJd3JpdGVjbWQgPSAoc3RydWN0IGFhY19yYXdfaW8gKikgZmliX2RhdGEoY21kX2ZpYmNvbnRleHQpOwotCQl3cml0ZWNtZC0+YmxvY2tbMF0gPSBjcHVfdG9fbGUzMihsYmEpOwotCQl3cml0ZWNtZC0+YmxvY2tbMV0gPSAwOworCQl3cml0ZWNtZC0+YmxvY2tbMF0gPSBjcHVfdG9fbGUzMigodTMyKShsYmEmMHhmZmZmZmZmZikpOworCQl3cml0ZWNtZC0+YmxvY2tbMV0gPSBjcHVfdG9fbGUzMigodTMyKSgobGJhJjB4ZmZmZmZmZmYwMDAwMDAwMExMKT4+MzIpKTsKIAkJd3JpdGVjbWQtPmNvdW50ID0gY3B1X3RvX2xlMzIoY291bnQ8PDkpOwogCQl3cml0ZWNtZC0+Y2lkID0gY3B1X3RvX2xlMTYoY2lkKTsKIAkJd3JpdGVjbWQtPmZsYWdzID0gMDsgCkBAIC0xMDk2LDcgKzEyNDcsNyBAQAogCQl3cml0ZWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTMyKFZNX0N0SG9zdFdyaXRlNjQpOwogCQl3cml0ZWNtZC0+Y2lkID0gY3B1X3RvX2xlMTYoY2lkKTsKIAkJd3JpdGVjbWQtPnNlY3Rvcl9jb3VudCA9IGNwdV90b19sZTE2KGNvdW50KTsgCi0JCXdyaXRlY21kLT5ibG9jayA9IGNwdV90b19sZTMyKGxiYSk7CisJCXdyaXRlY21kLT5ibG9jayA9IGNwdV90b19sZTMyKCh1MzIpKGxiYSYweGZmZmZmZmZmKSk7CiAJCXdyaXRlY21kLT5wYWQJPSAwOwogCQl3cml0ZWNtZC0+ZmxhZ3MJPSAwOwogCkBAIC0xMTIxLDcgKzEyNzIsNyBAQAogCQl3cml0ZWNtZCA9IChzdHJ1Y3QgYWFjX3dyaXRlICopIGZpYl9kYXRhKGNtZF9maWJjb250ZXh0KTsKIAkJd3JpdGVjbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUzMihWTV9DdEJsb2NrV3JpdGUpOwogCQl3cml0ZWNtZC0+Y2lkID0gY3B1X3RvX2xlMzIoY2lkKTsKLQkJd3JpdGVjbWQtPmJsb2NrID0gY3B1X3RvX2xlMzIobGJhKTsKKwkJd3JpdGVjbWQtPmJsb2NrID0gY3B1X3RvX2xlMzIoKHUzMikobGJhJjB4ZmZmZmZmZmYpKTsKIAkJd3JpdGVjbWQtPmNvdW50ID0gY3B1X3RvX2xlMzIoY291bnQgKiA1MTIpOwogCQl3cml0ZWNtZC0+c2cuY291bnQgPSBjcHVfdG9fbGUzMigxKTsKIAkJLyogLT5zdGFibGUgaXMgbm90IHVzZWQgLSBpdCBkaWQgbWVhbiB3aGljaCB0eXBlIG9mIHdyaXRlICovCkBAIC0xMzEwLDExICsxNDYxLDE4IEBACiAJCQkgKi8KIAkJCWlmICgoZnNhX2Rldl9wdHJbY2lkXS52YWxpZCAmIDEpID09IDApIHsKIAkJCQlzd2l0Y2ggKHNjc2ljbWQtPmNtbmRbMF0pIHsKKwkJCQljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOOgorCQkJCQlpZiAoIShkZXYtPnJhd19pb19pbnRlcmZhY2UpIHx8CisJCQkJCSAgICAhKGRldi0+cmF3X2lvXzY0KSB8fAorCQkJCQkgICAgKChzY3NpY21kLT5jbW5kWzFdICYgMHgxZikgIT0gU0FJX1JFQURfQ0FQQUNJVFlfMTYpKQorCQkJCQkJYnJlYWs7CiAJCQkJY2FzZSBJTlFVSVJZOgogCQkJCWNhc2UgUkVBRF9DQVBBQ0lUWToKIAkJCQljYXNlIFRFU1RfVU5JVF9SRUFEWToKIAkJCQkJc3Bpbl91bmxvY2tfaXJxKGhvc3QtPmhvc3RfbG9jayk7CiAJCQkJCXByb2JlX2NvbnRhaW5lcihkZXYsIGNpZCk7CisJCQkJCWlmICgoZnNhX2Rldl9wdHJbY2lkXS52YWxpZCAmIDEpID09IDApCisJCQkJCQlmc2FfZGV2X3B0cltjaWRdLnZhbGlkID0gMDsKIAkJCQkJc3Bpbl9sb2NrX2lycShob3N0LT5ob3N0X2xvY2spOwogCQkJCQlpZiAoZnNhX2Rldl9wdHJbY2lkXS52YWxpZCA9PSAwKSB7CiAJCQkJCQlzY3NpY21kLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKQEAgLTEzNzUsNyArMTUzMyw2IEBACiAJCW1lbXNldCgmaW5xX2RhdGEsIDAsIHNpemVvZiAoc3RydWN0IGlucXVpcnlfZGF0YSkpOwogCiAJCWlucV9kYXRhLmlucWRfdmVyID0gMjsJLyogY2xhaW0gY29tcGxpYW5jZSB0byBTQ1NJLTIgKi8KLQkJaW5xX2RhdGEuaW5xZF9kdHEgPSAweDgwOwkvKiBzZXQgUk1CIGJpdCB0byBvbmUgaW5kaWNhdGluZyB0aGF0IHRoZSBtZWRpdW0gaXMgcmVtb3ZhYmxlICovCiAJCWlucV9kYXRhLmlucWRfcmRmID0gMjsJLyogQSByZXNwb25zZSBkYXRhIGZvcm1hdCB2YWx1ZSBvZiB0d28gaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgc2hhbGwgYmUgaW4gdGhlIGZvcm1hdCBzcGVjaWZpZWQgaW4gU0NTSS0yICovCiAJCWlucV9kYXRhLmlucWRfbGVuID0gMzE7CiAJCS8qRm9ybWF0IGZvciAicGFkMiIgaXMgIFJlbEFkciB8IFdCdXMzMiB8IFdCdXMxNiB8ICBTeW5jICB8IExpbmtlZCB8UmVzZXJ2ZWR8IENtZFF1ZSB8IFNmdFJlICovCkBAIC0xMzk3LDEzICsxNTU0LDU1IEBACiAJCWFhY19pbnRlcm5hbF90cmFuc2ZlcihzY3NpY21kLCAmaW5xX2RhdGEsIDAsIHNpemVvZihpbnFfZGF0YSkpOwogCQlyZXR1cm4gYWFjX2dldF9jb250YWluZXJfbmFtZShzY3NpY21kLCBjaWQpOwogCX0KKwljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOOgorCQlpZiAoIShkZXYtPnJhd19pb19pbnRlcmZhY2UpIHx8CisJCSAgICAhKGRldi0+cmF3X2lvXzY0KSB8fAorCQkgICAgKChzY3NpY21kLT5jbW5kWzFdICYgMHgxZikgIT0gU0FJX1JFQURfQ0FQQUNJVFlfMTYpKQorCQkJYnJlYWs7CisJeworCQl1NjQgY2FwYWNpdHk7CisJCWNoYXIgY3BbMTJdOworCQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMDsKKworCQlkcHJpbnRrKChLRVJOX0RFQlVHICJSRUFEIENBUEFDSVRZXzE2IGNvbW1hbmQuXG4iKSk7CisJCWNhcGFjaXR5ID0gZnNhX2Rldl9wdHJbY2lkXS5zaXplIC0gMTsKKwkJaWYgKHNjc2ljbWQtPmNtbmRbMTNdID4gMTIpIHsKKwkJCW9mZnNldCA9IHNjc2ljbWQtPmNtbmRbMTNdIC0gMTI7CisJCQlpZiAob2Zmc2V0ID4gc2l6ZW9mKGNwKSkKKwkJCQlicmVhazsKKwkJCW1lbXNldChjcCwgMCwgb2Zmc2V0KTsKKwkJCWFhY19pbnRlcm5hbF90cmFuc2ZlcihzY3NpY21kLCBjcCwgMCwgb2Zmc2V0KTsKKwkJfQorCQljcFswXSA9IChjYXBhY2l0eSA+PiA1NikgJiAweGZmOworCQljcFsxXSA9IChjYXBhY2l0eSA+PiA0OCkgJiAweGZmOworCQljcFsyXSA9IChjYXBhY2l0eSA+PiA0MCkgJiAweGZmOworCQljcFszXSA9IChjYXBhY2l0eSA+PiAzMikgJiAweGZmOworCQljcFs0XSA9IChjYXBhY2l0eSA+PiAyNCkgJiAweGZmOworCQljcFs1XSA9IChjYXBhY2l0eSA+PiAxNikgJiAweGZmOworCQljcFs2XSA9IChjYXBhY2l0eSA+PiA4KSAmIDB4ZmY7CisJCWNwWzddID0gKGNhcGFjaXR5ID4+IDApICYgMHhmZjsKKwkJY3BbOF0gPSAwOworCQljcFs5XSA9IDA7CisJCWNwWzEwXSA9IDI7CisJCWNwWzExXSA9IDA7CisJCWFhY19pbnRlcm5hbF90cmFuc2ZlcihzY3NpY21kLCBjcCwgb2Zmc2V0LCBzaXplb2YoY3ApKTsKKworCQkvKiBEbyBub3QgY2FjaGUgcGFydGl0aW9uIHRhYmxlIGZvciBhcnJheXMgKi8KKwkJc2NzaWNtZC0+ZGV2aWNlLT5yZW1vdmFibGUgPSAxOworCisJCXNjc2ljbWQtPnJlc3VsdCA9IERJRF9PSyA8PCAxNiB8IENPTU1BTkRfQ09NUExFVEUgPDwgOCB8IFNBTV9TVEFUX0dPT0Q7CisJCXNjc2ljbWQtPnNjc2lfZG9uZShzY3NpY21kKTsKKworCQlyZXR1cm4gMDsKKwl9CisKIAljYXNlIFJFQURfQ0FQQUNJVFk6CiAJewogCQl1MzIgY2FwYWNpdHk7CiAJCWNoYXIgY3BbOF07CiAKIAkJZHByaW50aygoS0VSTl9ERUJVRyAiUkVBRCBDQVBBQ0lUWSBjb21tYW5kLlxuIikpOwotCQlpZiAoZnNhX2Rldl9wdHJbY2lkXS5zaXplIDw9IDB4MTAwMDAwMDAwTEwpCisJCWlmIChmc2FfZGV2X3B0cltjaWRdLnNpemUgPD0gMHgxMDAwMDAwMDBVTEwpCiAJCQljYXBhY2l0eSA9IGZzYV9kZXZfcHRyW2NpZF0uc2l6ZSAtIDE7CiAJCWVsc2UKIAkJCWNhcGFjaXR5ID0gKHUzMiktMTsKQEAgLTE0MTcsNiArMTYxNiw4IEBACiAJCWNwWzZdID0gMjsKIAkJY3BbN10gPSAwOwogCQlhYWNfaW50ZXJuYWxfdHJhbnNmZXIoc2NzaWNtZCwgY3AsIDAsIHNpemVvZihjcCkpOworCQkvKiBEbyBub3QgY2FjaGUgcGFydGl0aW9uIHRhYmxlIGZvciBhcnJheXMgKi8KKwkJc2NzaWNtZC0+ZGV2aWNlLT5yZW1vdmFibGUgPSAxOwogCiAJCXNjc2ljbWQtPnJlc3VsdCA9IERJRF9PSyA8PCAxNiB8IENPTU1BTkRfQ09NUExFVEUgPDwgOCB8IFNBTV9TVEFUX0dPT0Q7CiAJCXNjc2ljbWQtPnNjc2lfZG9uZShzY3NpY21kKTsKQEAgLTE0OTcsNiArMTY5OCw4IEBACiAJewogCQljYXNlIFJFQURfNjoKIAkJY2FzZSBSRUFEXzEwOgorCQljYXNlIFJFQURfMTI6CisJCWNhc2UgUkVBRF8xNjoKIAkJCS8qCiAJCQkgKglIYWNrIHRvIGtlZXAgdHJhY2sgb2Ygb3JkaW5hbCBudW1iZXIgb2YgdGhlIGRldmljZSB0aGF0CiAJCQkgKgljb3JyZXNwb25kcyB0byBhIGNvbnRhaW5lci4gTmVlZGVkIHRvIGNvbnZlcnQKQEAgLTE1MDQsMTcgKzE3MDcsMTkgQEAKIAkJCSAqLwogCQkJIAogCQkJc3Bpbl91bmxvY2tfaXJxKGhvc3QtPmhvc3RfbG9jayk7Ci0JCQlpZiAgKHNjc2ljbWQtPnJlcXVlc3QtPnJxX2Rpc2spCi0JCQkJbWVtY3B5KGZzYV9kZXZfcHRyW2NpZF0uZGV2bmFtZSwKLQkJCQkJc2NzaWNtZC0+cmVxdWVzdC0+cnFfZGlzay0+ZGlza19uYW1lLAotCQkJCQk4KTsKLQorCQkJaWYgKHNjc2ljbWQtPnJlcXVlc3QtPnJxX2Rpc2spCisJCQkJc3RybGNweShmc2FfZGV2X3B0cltjaWRdLmRldm5hbWUsCisJCQkJc2NzaWNtZC0+cmVxdWVzdC0+cnFfZGlzay0+ZGlza19uYW1lLAorCQkJICAJbWluKHNpemVvZihmc2FfZGV2X3B0cltjaWRdLmRldm5hbWUpLAorCQkJCXNpemVvZihzY3NpY21kLT5yZXF1ZXN0LT5ycV9kaXNrLT5kaXNrX25hbWUpICsgMSkpOwogCQkJcmV0ID0gYWFjX3JlYWQoc2NzaWNtZCwgY2lkKTsKIAkJCXNwaW5fbG9ja19pcnEoaG9zdC0+aG9zdF9sb2NrKTsKIAkJCXJldHVybiByZXQ7CiAKIAkJY2FzZSBXUklURV82OgogCQljYXNlIFdSSVRFXzEwOgorCQljYXNlIFdSSVRFXzEyOgorCQljYXNlIFdSSVRFXzE2OgogCQkJc3Bpbl91bmxvY2tfaXJxKGhvc3QtPmhvc3RfbG9jayk7CiAJCQlyZXQgPSBhYWNfd3JpdGUoc2NzaWNtZCwgY2lkKTsKIAkJCXNwaW5fbG9ja19pcnEoaG9zdC0+aG9zdF9sb2NrKTsKQEAgLTE3NDUsNiArMTk1MCw4IEBACiAJCWNhc2UgIFdSSVRFXzEwOgogCQljYXNlICBSRUFEXzEyOgogCQljYXNlICBXUklURV8xMjoKKwkJY2FzZSAgUkVBRF8xNjoKKwkJY2FzZSAgV1JJVEVfMTY6CiAJCQlpZihsZTMyX3RvX2NwdShzcmJyZXBseS0+ZGF0YV94ZmVyX2xlbmd0aCkgPCBzY3NpY21kLT51bmRlcmZsb3cgKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyJhYWNyYWlkOiBTQ1NJIENNRCB1bmRlcmZsb3dcbiIpOwogCQkJfSBlbHNlIHsKQEAgLTE4NTAsOCArMjA1Nyw4IEBACiAJCQkJc2l6ZW9mKHNjc2ljbWQtPnNlbnNlX2J1ZmZlcikgOgogCQkJCWxlMzJfdG9fY3B1KHNyYnJlcGx5LT5zZW5zZV9kYXRhX3NpemUpOwogI2lmZGVmIEFBQ19ERVRBSUxFRF9TVEFUVVNfSU5GTwotCQlkcHJpbnRrKChLRVJOX1dBUk5JTkcgImFhY19zcmJfY2FsbGJhY2s6IGNoZWNrIGNvbmRpdGlvbiwgc3RhdHVzID0gJWQgbGVuPSVkXG4iLCAKLQkJCQkJbGUzMl90b19jcHUoc3JicmVwbHktPnN0YXR1cyksIGxlbikpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJhYWNfc3JiX2NhbGxiYWNrOiBjaGVjayBjb25kaXRpb24sIHN0YXR1cyA9ICVkIGxlbj0lZFxuIiwKKwkJCQkJbGUzMl90b19jcHUoc3JicmVwbHktPnN0YXR1cyksIGxlbik7CiAjZW5kaWYKIAkJbWVtY3B5KHNjc2ljbWQtPnNlbnNlX2J1ZmZlciwgc3JicmVwbHktPnNlbnNlX2RhdGEsIGxlbik7CiAJCQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvYWFjcmFpZC5oIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvYWFjcmFpZC5oCmluZGV4IGU0MDUyODEuLmQ1NGIxY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY3JhaWQuaAorKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNyYWlkLmgKQEAgLTEsNiArMSwxMCBAQAogI2lmICghZGVmaW5lZChkcHJpbnRrKSkKICMgZGVmaW5lIGRwcmludGsoeCkKICNlbmRpZgorLyogZWc6IGlmIChuYmxhbmsoZHByaW50ayh4KSkpICovCisjZGVmaW5lIF9uYmxhbmsoeCkgI3gKKyNkZWZpbmUgbmJsYW5rKHgpIF9uYmxhbmsoeClbMF0KKwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogICAgICAgICAgICAgIEQgRSBGIEkgTiBFIFMKQEAgLTE1LDcgKzE5LDcgQEAKICNkZWZpbmUgQUFDX01BWF9MVU4JCSg4KQogCiAjZGVmaW5lIEFBQ19NQVhfSE9TVFBIWVNNRU1QQUdFUyAoMHhmZmZmZikKLSNkZWZpbmUgQUFDX01BWF8zMkJJVF9TR0JDT1VOVAkoKHVuc2lnbmVkIHNob3J0KTUxMikKKyNkZWZpbmUgQUFDX01BWF8zMkJJVF9TR0JDT1VOVAkoKHVuc2lnbmVkIHNob3J0KTI1NikKIAogLyoKICAqIFRoZXNlIG1hY3JvcyBjb252ZXJ0IGZyb20gcGh5c2ljYWwgY2hhbm5lbHMgdG8gdmlydHVhbCBjaGFubmVscwpAQCAtMzAyLDcgKzMwNiw2IEBACiAgKi8KIAogI2RlZmluZQkJRnNhTm9ybWFsCTEKLSNkZWZpbmUJCUZzYUhpZ2gJCTIKIAogLyoKICAqIERlZmluZSB0aGUgRklCLiBUaGUgRklCIGlzIHRoZSB3aGVyZSBhbGwgdGhlIHJlcXVlc3RlZCBkYXRhIGFuZApAQCAtNTQ2LDggKzU0OSw2IEBACiAgICAgICAgICAgICAgICAgICAvKiBUaGlzIGlzIG9ubHkgdmFsaWQgZm9yIGFkYXB0ZXIgdG8gaG9zdCBjb21tYW5kIHF1ZXVlcy4gKi8gCiAJc3BpbmxvY2tfdAkgCSpsb2NrOwkJLyogU3BpbmxvY2sgZm9yIHRoaXMgcXVldWUgbXVzdCB0YWtlIHRoaXMgbG9jayBiZWZvcmUgYWNjZXNzaW5nIHRoZSBsb2NrICovCiAJc3BpbmxvY2tfdAkJbG9ja2RhdGE7CS8qIEFjdHVhbCBsb2NrICh1c2VkIG9ubHkgb24gb25lIHNpZGUgb2YgdGhlIGxvY2spICovCi0JdW5zaWduZWQgbG9uZwkJU2F2ZWRJcnFsOyAgICAgCS8qIFByZXZpb3VzIElSUUwgd2hlbiB0aGUgc3BpbiBsb2NrIGlzIHRha2VuICovCi0JdTMyCQkJcGFkZGluZzsJLyogUGFkZGluZyAtIEZJWE1FIC0gY2FuIHJlbW92ZSBJIGJlbGlldmUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIAljbWRxOwkgICAJLyogQSBxdWV1ZSBvZiBGSUJzIHdoaWNoIG5lZWQgdG8gYmUgcHJjZXNzZWQgYnkgdGhlIEZTIHRocmVhZC4gVGhpcyBpcyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCS8qIG9ubHkgdmFsaWQgZm9yIGNvbW1hbmQgcXVldWVzIHdoaWNoIHJlY2VpdmUgZW50cmllcyBmcm9tIHRoZSBhZGFwdGVyLiAqLwogCXN0cnVjdCBsaXN0X2hlYWQJcGVuZGluZ3E7CS8qIEEgcXVldWUgb2Ygb3V0c3RhbmRpbmcgZmliJ3MgdG8gdGhlIGFkYXB0ZXIuICovCkBAIC03NzYsNyArNzc3LDkgQEAKIAl1NjQJCWxhc3Q7CiAJdTY0CQlzaXplOwogCXUzMgkJdHlwZTsKKwl1MzIJCWNvbmZpZ193YWl0aW5nX29uOwogCXUxNgkJcXVldWVfZGVwdGg7CisJdTgJCWNvbmZpZ19uZWVkZWQ7CiAJdTgJCXZhbGlkOwogCXU4CQlybzsKIAl1OAkJbG9ja2VkOwpAQCAtMTAxMiw2ICsxMDE1LDcgQEAKIAkvKiBtYWNybyBzaWRlLWVmZmVjdHMgQkVXQVJFICovCiAjCWRlZmluZQkJCXJhd19pb19pbnRlcmZhY2UgXAogCSAgaW5pdC0+SW5pdFN0cnVjdFJldmlzaW9uPT1jcHVfdG9fbGUzMihBREFQVEVSX0lOSVRfU1RSVUNUX1JFVklTSU9OXzQpCisJdTgJCQlyYXdfaW9fNjQ7CiAJdTgJCQlwcmludGZfZW5hYmxlZDsKIH07CiAKQEAgLTEzNjIsOCArMTM2NiwxMCBAQAogI2RlZmluZQkJVk1fQ3RCbG9ja1ZlcmlmeTY0CTE4CiAjZGVmaW5lCQlWTV9DdEhvc3RSZWFkNjQJCTE5CiAjZGVmaW5lCQlWTV9DdEhvc3RXcml0ZTY0CTIwCisjZGVmaW5lCQlWTV9EcnZFcnJUYmxMb2cJCTIxCisjZGVmaW5lCQlWTV9OYW1lU2VydmU2NAkJMjIKIAotI2RlZmluZQkJTUFYX1ZNQ09NTUFORF9OVU0JMjEJLyogdXNlZCBmb3Igc2l6aW5nIHN0YXRzIGFycmF5IC0gbGVhdmUgbGFzdCAqLworI2RlZmluZQkJTUFYX1ZNQ09NTUFORF9OVU0JMjMJLyogdXNlZCBmb3Igc2l6aW5nIHN0YXRzIGFycmF5IC0gbGVhdmUgbGFzdCAqLwogCiAvKgogICoJRGVzY3JpcHRpdmUgaW5mb3JtYXRpb24gKGVnLCB2aXRhbCBzdGF0cykKQEAgLTE0NzIsNiArMTQ3OCw3IEBACiAJCQkJCQkgICBtYW5hZ2VyIChlZywgZmlsZXN5c3RlbSkgKi8KIAlfX2xlMzIJCQlhbHRvaWQ7CQkvKiAhPSBvaWQgPD09PiBzbmFwc2hvdCBvciAKIAkJCQkJCSAgIGJyb2tlbiBtaXJyb3IgZXhpc3RzICovCisJX19sZTMyCQkJY2FwYWNpdHloaWdoOwogfTsKIAogI2RlZmluZSBGU0NTX05PVENMRUFOCTB4MDAwMSAgLyogZnNjayBpcyBuZWNjZXNzYXJ5IGJlZm9yZSBtb3VudGluZyAqLwpAQCAtMTcwNyw2ICsxNzE0LDcgQEAKICNkZWZpbmUJCUFpZkNtZEpvYlByb2dyZXNzCTIJLyogUHJvZ3Jlc3MgcmVwb3J0ICovCiAjZGVmaW5lCQkJQWlmSm9iQ3RyWmVybwkxMDEJLyogQXJyYXkgWmVybyBwcm9ncmVzcyAqLwogI2RlZmluZQkJCUFpZkpvYlN0c1N1Y2Nlc3MgMQkvKiBKb2IgY29tcGxldGVzICovCisjZGVmaW5lCQkJQWlmSm9iU3RzUnVubmluZyAxMDIJLyogSm9iIHJ1bm5pbmcgKi8KICNkZWZpbmUJCUFpZkNtZEFQSVJlcG9ydAkJMwkvKiBSZXBvcnQgZnJvbSBvdGhlciB1c2VyIG9mIEFQSSAqLwogI2RlZmluZQkJQWlmQ21kRHJpdmVyTm90aWZ5CTQJLyogTm90aWZ5IGhvc3QgZHJpdmVyIG9mIGV2ZW50ICovCiAjZGVmaW5lCQkJQWlmRGVuTW9ycGhDb21wbGV0ZSAyMDAJLyogQSBtb3JwaCBvcGVyYXRpb24gY29tcGxldGVkICovCkBAIC0xNzc3LDYgKzE3ODUsNyBAQAogc3RydWN0IGFhY19kcml2ZXJfaWRlbnQqIGFhY19nZXRfZHJpdmVyX2lkZW50KGludCBkZXZ0eXBlKTsKIGludCBhYWNfZ2V0X2FkYXB0ZXJfaW5mbyhzdHJ1Y3QgYWFjX2RldiogZGV2KTsKIGludCBhYWNfc2VuZF9zaHV0ZG93bihzdHJ1Y3QgYWFjX2RldiAqZGV2KTsKK2ludCBwcm9iZV9jb250YWluZXIoc3RydWN0IGFhY19kZXYgKmRldiwgaW50IGNpZCk7CiBleHRlcm4gaW50IG51bWFjYjsKIGV4dGVybiBpbnQgYWNic2l6ZTsKIGV4dGVybiBjaGFyIGFhY19kcml2ZXJfdmVyc2lvbltdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbWluaXQuYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2NvbW1pbml0LmMKaW5kZXggNzVhYmQwNC4uNTlhMzQxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbWluaXQuYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9jb21taW5pdC5jCkBAIC0xOTUsNyArMTk1LDcgQEAKIAkJCSAgZmliY3R4LAogCQkJICBzaXplb2Yoc3RydWN0IGFhY19jbG9zZSksCiAJCQkgIEZzYU5vcm1hbCwKLQkJCSAgMSwgMSwKKwkJCSAgLTIgLyogVGltZW91dCBzaWxlbnRseSAqLywgMSwKIAkJCSAgTlVMTCwgTlVMTCk7CiAKIAlpZiAoc3RhdHVzID09IDApCkBAIC0zMTMsOCArMzEzLDE1IEBACiAJZGV2LT5tYXhfZmliX3NpemUgPSBzaXplb2Yoc3RydWN0IGh3X2ZpYik7CiAJZGV2LT5zZ190YWJsZXNpemUgPSBob3N0LT5zZ190YWJsZXNpemUgPSAoZGV2LT5tYXhfZmliX3NpemUKIAkJLSBzaXplb2Yoc3RydWN0IGFhY19maWJoZHIpCi0JCS0gc2l6ZW9mKHN0cnVjdCBhYWNfd3JpdGUpICsgc2l6ZW9mKHN0cnVjdCBzZ21hcCkpCi0JCQkvIHNpemVvZihzdHJ1Y3Qgc2dtYXApOworCQktIHNpemVvZihzdHJ1Y3QgYWFjX3dyaXRlKSArIHNpemVvZihzdHJ1Y3Qgc2dlbnRyeSkpCisJCQkvIHNpemVvZihzdHJ1Y3Qgc2dlbnRyeSk7CisJZGV2LT5yYXdfaW9fNjQgPSAwOworCWlmICgoIWFhY19hZGFwdGVyX3N5bmNfY21kKGRldiwgR0VUX0FEQVBURVJfUFJPUEVSVElFUywKKwkJMCwgMCwgMCwgMCwgMCwgMCwgc3RhdHVzKzAsIHN0YXR1cysxLCBzdGF0dXMrMiwgTlVMTCwgTlVMTCkpICYmCisJIAkJKHN0YXR1c1swXSA9PSAweDAwMDAwMDAxKSkgeworCQlpZiAoc3RhdHVzWzFdICYgQUFDX09QVF9ORVdfQ09NTV82NCkKKwkJCWRldi0+cmF3X2lvXzY0ID0gMTsKKwl9CiAJaWYgKCghYWFjX2FkYXB0ZXJfc3luY19jbWQoZGV2LCBHRVRfQ09NTV9QUkVGRVJSRURfU0VUVElOR1MsCiAJICAwLCAwLCAwLCAwLCAwLCAwLAogCSAgc3RhdHVzKzAsIHN0YXR1cysxLCBzdGF0dXMrMiwgc3RhdHVzKzMsIHN0YXR1cys0KSkKQEAgLTM0Miw4ICszNDksOCBAQAogCQkJZGV2LT5tYXhfZmliX3NpemUgPSA1MTI7CiAJCQlkZXYtPnNnX3RhYmxlc2l6ZSA9IGhvc3QtPnNnX3RhYmxlc2l6ZQogCQkJICA9ICg1MTIgLSBzaXplb2Yoc3RydWN0IGFhY19maWJoZHIpCi0JCQkgICAgLSBzaXplb2Yoc3RydWN0IGFhY193cml0ZSkgKyBzaXplb2Yoc3RydWN0IHNnbWFwKSkKLQkJCSAgICAgLyBzaXplb2Yoc3RydWN0IHNnbWFwKTsKKwkJCSAgICAtIHNpemVvZihzdHJ1Y3QgYWFjX3dyaXRlKSArIHNpemVvZihzdHJ1Y3Qgc2dlbnRyeSkpCisJCQkgICAgIC8gc2l6ZW9mKHN0cnVjdCBzZ2VudHJ5KTsKIAkJCWhvc3QtPmNhbl9xdWV1ZSA9IEFBQ19OVU1fSU9fRklCOwogCQl9IGVsc2UgaWYgKGFjYnNpemUgPT0gMjA0OCkgewogCQkJaG9zdC0+bWF4X3NlY3RvcnMgPSA1MTI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9jb21tc3VwLmMgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9jb21tc3VwLmMKaW5kZXggYTFkMzAzZjAuLmU0ZDU0M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2NvbW1zdXAuYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9jb21tc3VwLmMKQEAgLTM5LDcgKzM5LDkgQEAKICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogCiAjaW5jbHVkZSAiYWFjcmFpZC5oIgogCkBAIC0yNjksNDAgKzI3MSwyMiBAQAogCS8qIEludGVycnVwdCBNb2RlcmF0aW9uLCBvbmx5IGludGVycnVwdCBmb3IgZmlyc3QgdHdvIGVudHJpZXMgKi8KIAlpZiAoaWR4ICE9IGxlMzJfdG9fY3B1KCoocS0+aGVhZGVycy5jb25zdW1lcikpKSB7CiAJCWlmICgtLWlkeCA9PSAwKSB7Ci0JCQlpZiAocWlkID09IEFkYXBIaWdoQ21kUXVldWUpCi0JCQkJaWR4ID0gQURBUF9ISUdIX0NNRF9FTlRSSUVTOwotCQkJZWxzZSBpZiAocWlkID09IEFkYXBOb3JtQ21kUXVldWUpCisJCQlpZiAocWlkID09IEFkYXBOb3JtQ21kUXVldWUpCiAJCQkJaWR4ID0gQURBUF9OT1JNX0NNRF9FTlRSSUVTOwotCQkJZWxzZSBpZiAocWlkID09IEFkYXBIaWdoUmVzcFF1ZXVlKSAKLQkgICAgICAgIAkJaWR4ID0gQURBUF9ISUdIX1JFU1BfRU5UUklFUzsKLQkJCWVsc2UgaWYgKHFpZCA9PSBBZGFwTm9ybVJlc3BRdWV1ZSkgCisJCQllbHNlCiAJCQkJaWR4ID0gQURBUF9OT1JNX1JFU1BfRU5UUklFUzsKIAkJfQogCQlpZiAoaWR4ICE9IGxlMzJfdG9fY3B1KCoocS0+aGVhZGVycy5jb25zdW1lcikpKQogCQkJKm5vbm90aWZ5ID0gMTsgCiAJfQogCi0JaWYgKHFpZCA9PSBBZGFwSGlnaENtZFF1ZXVlKSB7Ci0JICAgICAgICBpZiAoKmluZGV4ID49IEFEQVBfSElHSF9DTURfRU5UUklFUykKLSAgICAgICAgCQkqaW5kZXggPSAwOwotCX0gZWxzZSBpZiAocWlkID09IEFkYXBOb3JtQ21kUXVldWUpIHsKKwlpZiAocWlkID09IEFkYXBOb3JtQ21kUXVldWUpIHsKIAkgICAgICAgIGlmICgqaW5kZXggPj0gQURBUF9OT1JNX0NNRF9FTlRSSUVTKSAKIAkJCSppbmRleCA9IDA7IC8qIFdyYXAgdG8gZnJvbnQgb2YgdGhlIFByb2R1Y2VyIFF1ZXVlLiAqLwotCX0KLQllbHNlIGlmIChxaWQgPT0gQWRhcEhpZ2hSZXNwUXVldWUpIAotCXsKLQkgICAgICAgIGlmICgqaW5kZXggPj0gQURBUF9ISUdIX1JFU1BfRU5UUklFUykKLQkJCSppbmRleCA9IDA7Ci0JfQotCWVsc2UgaWYgKHFpZCA9PSBBZGFwTm9ybVJlc3BRdWV1ZSkgCi0JeworCX0gZWxzZSB7CiAJCWlmICgqaW5kZXggPj0gQURBUF9OT1JNX1JFU1BfRU5UUklFUykgCiAJCQkqaW5kZXggPSAwOyAvKiBXcmFwIHRvIGZyb250IG9mIHRoZSBQcm9kdWNlciBRdWV1ZS4gKi8KIAl9Ci0JZWxzZSB7Ci0JCXByaW50aygiYWFjcmFpZDogaW52YWxpZCBxaWRcbiIpOwotCQlCVUcoKTsKLQl9CiAKICAgICAgICAgaWYgKCgqaW5kZXggKyAxKSA9PSBsZTMyX3RvX2NwdSgqKHEtPmhlYWRlcnMuY29uc3VtZXIpKSkgeyAvKiBRdWV1ZSBpcyBmdWxsICovCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIlF1ZXVlICVkIGZ1bGwsICV1IG91dHN0YW5kaW5nLlxuIiwKQEAgLTMzNCwxMiArMzE4LDggQEAKIHsKIAlzdHJ1Y3QgYWFjX2VudHJ5ICogZW50cnkgPSBOVUxMOwogCWludCBtYXAgPSAwOwotCXN0cnVjdCBhYWNfcXVldWUgKiBxID0gJmRldi0+cXVldWVzLT5xdWV1ZVtxaWRdOwotCQkKLQlzcGluX2xvY2tfaXJxc2F2ZShxLT5sb2NrLCBxLT5TYXZlZElycWwpOwogCSAgICAKLQlpZiAocWlkID09IEFkYXBIaWdoQ21kUXVldWUgfHwgcWlkID09IEFkYXBOb3JtQ21kUXVldWUpIAotCXsKKwlpZiAocWlkID09IEFkYXBOb3JtQ21kUXVldWUpIHsKIAkJLyogIGlmIG5vIGVudHJpZXMgd2FpdCBmb3Igc29tZSBpZiBjYWxsZXIgd2FudHMgdG8gKi8KICAgICAgICAgCXdoaWxlICghYWFjX2dldF9lbnRyeShkZXYsIHFpZCwgJmVudHJ5LCBpbmRleCwgbm9ub3RpZnkpKSAKICAgICAgICAgCXsKQEAgLTM1MCw5ICszMzAsNyBAQAogCSAgICAgICAgICovCiAJICAgICAgICBlbnRyeS0+c2l6ZSA9IGNwdV90b19sZTMyKGxlMTZfdG9fY3B1KGh3X2ZpYi0+aGVhZGVyLlNpemUpKTsKIAkgICAgICAgIG1hcCA9IDE7Ci0JfQotCWVsc2UgaWYgKHFpZCA9PSBBZGFwSGlnaFJlc3BRdWV1ZSB8fCBxaWQgPT0gQWRhcE5vcm1SZXNwUXVldWUpCi0JeworCX0gZWxzZSB7CiAJICAgICAgICB3aGlsZSghYWFjX2dldF9lbnRyeShkZXYsIHFpZCwgJmVudHJ5LCBpbmRleCwgbm9ub3RpZnkpKSAKIAkgICAgICAgIHsKIAkJCS8qIGlmIG5vIGVudHJpZXMgd2FpdCBmb3Igc29tZSBpZiBjYWxsZXIgd2FudHMgdG8gKi8KQEAgLTM3NSw0MiArMzUzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCi0vKioKLSAqCWFhY19pbnNlcnRfZW50cnkJLQlpbnNlcnQgYSBxdWV1ZSBlbnRyeQotICoJQGRldjogQWRhcHRlcgotICoJQGluZGV4OiBJbmRleCBvZiBlbnRyeSB0byBpbnNlcnQKLSAqCUBxaWQ6IFF1ZXVlIG51bWJlcgotICoJQG5vbm90aWZ5OiBTdXBwcmVzcyBhZGFwdGVyIG5vdGlmaWNhdGlvbgotICoKLSAqCUdldHMgdGhlIG5leHQgZnJlZSBRRSBvZmYgdGhlIHJlcXVlc3RlZCBwcmlvcnR5IGFkYXB0ZXIgY29tbWFuZAotICoJcXVldWUgYW5kIGFzc29jaWF0ZXMgdGhlIEZpYiB3aXRoIHRoZSBRRS4gVGhlIFFFIHJlcHJlc2VudGVkIGJ5Ci0gKglpbmRleCBpcyByZWFkeSB0byBpbnNlcnQgb24gdGhlIHF1ZXVlIHdoZW4gdGhpcyByb3V0aW5lIHJldHVybnMKLSAqCXN1Y2Nlc3MuCi0gKi8KLSAKLXN0YXRpYyBpbnQgYWFjX2luc2VydF9lbnRyeShzdHJ1Y3QgYWFjX2RldiAqIGRldiwgdTMyIGluZGV4LCB1MzIgcWlkLCB1bnNpZ25lZCBsb25nIG5vbm90aWZ5KSAKLXsKLQlzdHJ1Y3QgYWFjX3F1ZXVlICogcSA9ICZkZXYtPnF1ZXVlcy0+cXVldWVbcWlkXTsKLQotCWlmKHEgPT0gTlVMTCkKLQkJQlVHKCk7Ci0JKihxLT5oZWFkZXJzLnByb2R1Y2VyKSA9IGNwdV90b19sZTMyKGluZGV4ICsgMSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5sb2NrLCBxLT5TYXZlZElycWwpOwotCi0JaWYgKHFpZCA9PSBBZGFwSGlnaENtZFF1ZXVlIHx8Ci0JICAgIHFpZCA9PSBBZGFwTm9ybUNtZFF1ZXVlIHx8Ci0JICAgIHFpZCA9PSBBZGFwSGlnaFJlc3BRdWV1ZSB8fAotCSAgICBxaWQgPT0gQWRhcE5vcm1SZXNwUXVldWUpCi0JewotCQlpZiAoIW5vbm90aWZ5KQotCQkJYWFjX2FkYXB0ZXJfbm90aWZ5KGRldiwgcWlkKTsKLQl9Ci0JZWxzZQotCQlwcmludGsoIlN1cHJpc2UgaW5zZXJ0IVxuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKglEZWZpbmUgdGhlIGhpZ2hlc3QgbGV2ZWwgb2YgaG9zdCB0byBhZGFwdGVyIGNvbW11bmljYXRpb24gcm91dGluZXMuIAogICoJVGhlc2Ugcm91dGluZXMgd2lsbCBzdXBwb3J0IGhvc3QgdG8gYWRhcHRlciBGUyBjb21tdWljYXRpb24uIFRoZXNlIApAQCAtNDM5LDEyICszODEsMTMgQEAKIGludCBmaWJfc2VuZCh1MTYgY29tbWFuZCwgc3RydWN0IGZpYiAqIGZpYnB0ciwgdW5zaWduZWQgbG9uZyBzaXplLCAgaW50IHByaW9yaXR5LCBpbnQgd2FpdCwgaW50IHJlcGx5LCBmaWJfY2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKiBjYWxsYmFja19kYXRhKQogewogCXUzMiBpbmRleDsKLQl1MzIgcWlkOwogCXN0cnVjdCBhYWNfZGV2ICogZGV2ID0gZmlicHRyLT5kZXY7CiAJdW5zaWduZWQgbG9uZyBub2ludHIgPSAwOwogCXN0cnVjdCBod19maWIgKiBod19maWIgPSBmaWJwdHItPmh3X2ZpYjsKIAlzdHJ1Y3QgYWFjX3F1ZXVlICogcTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwl1bnNpZ25lZCBsb25nIHFmbGFnczsKKwogCWlmICghKGh3X2ZpYi0+aGVhZGVyLlhmZXJTdGF0ZSAmIGNwdV90b19sZTMyKEhvc3RPd25lZCkpKQogCQlyZXR1cm4gLUVCVVNZOwogCS8qCkBAIC00OTcsMjYgKzQ0MCw4IEBACiAJICoJR2V0IGEgcXVldWUgZW50cnkgY29ubmVjdCB0aGUgRklCIHRvIGl0IGFuZCBzZW5kIGFuIG5vdGlmeQogCSAqCXRoZSBhZGFwdGVyIGEgY29tbWFuZCBpcyByZWFkeS4KIAkgKi8KLQlpZiAocHJpb3JpdHkgPT0gRnNhSGlnaCkgewotCQlod19maWItPmhlYWRlci5YZmVyU3RhdGUgfD0gY3B1X3RvX2xlMzIoSGlnaFByaW9yaXR5KTsKLQkJcWlkID0gQWRhcEhpZ2hDbWRRdWV1ZTsKLQl9IGVsc2UgewotCQlod19maWItPmhlYWRlci5YZmVyU3RhdGUgfD0gY3B1X3RvX2xlMzIoTm9ybWFsUHJpb3JpdHkpOwotCQlxaWQgPSBBZGFwTm9ybUNtZFF1ZXVlOwotCX0KLQlxID0gJmRldi0+cXVldWVzLT5xdWV1ZVtxaWRdOworCWh3X2ZpYi0+aGVhZGVyLlhmZXJTdGF0ZSB8PSBjcHVfdG9fbGUzMihOb3JtYWxQcmlvcml0eSk7CiAKLQlpZih3YWl0KQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZmlicHRyLT5ldmVudF9sb2NrLCBmbGFncyk7Ci0JaWYoYWFjX3F1ZXVlX2dldCggZGV2LCAmaW5kZXgsIHFpZCwgaHdfZmliLCAxLCBmaWJwdHIsICZub2ludHIpPDApCi0JCXJldHVybiAtRVdPVUxEQkxPQ0s7Ci0JZHByaW50aygoS0VSTl9ERUJVRyAiZmliX3NlbmQ6IGluc2VydGluZyBhIHF1ZXVlIGVudHJ5IGF0IGluZGV4ICVkLlxuIixpbmRleCkpOwotCWRwcmludGsoKEtFUk5fREVCVUcgIkZpYiBjb250ZW50czouXG4iKSk7Ci0JZHByaW50aygoS0VSTl9ERUJVRyAiICBDb21tYW5kID0gICAgICAgICAgICAgICAlZC5cbiIsIGh3X2ZpYi0+aGVhZGVyLkNvbW1hbmQpKTsKLQlkcHJpbnRrKChLRVJOX0RFQlVHICIgIFhmZXJTdGF0ZSAgPSAgICAgICAgICAgICV4LlxuIiwgaHdfZmliLT5oZWFkZXIuWGZlclN0YXRlKSk7Ci0JZHByaW50aygoS0VSTl9ERUJVRyAiICBod19maWIgdmEgYmVpbmcgc2VudD0lcFxuIixmaWJwdHItPmh3X2ZpYikpOwotCWRwcmludGsoKEtFUk5fREVCVUcgIiAgaHdfZmliIHBhIGJlaW5nIHNlbnQ9JWx4XG4iLCh1bG9uZylmaWJwdHItPmh3X2ZpYl9wYSkpOwotCWRwcmludGsoKEtFUk5fREVCVUcgIiAgZmliIGJlaW5nIHNlbnQ9JXBcbiIsZmlicHRyKSk7CiAJLyoKIAkgKglGaWxsIGluIHRoZSBDYWxsYmFjayBhbmQgQ2FsbGJhY2tDb250ZXh0IGlmIHdlIGFyZSBub3QKIAkgKglnb2luZyB0byB3YWl0LgpAQCAtNTI1LDIyICs0NTAsNjcgQEAKIAkJZmlicHRyLT5jYWxsYmFjayA9IGNhbGxiYWNrOwogCQlmaWJwdHItPmNhbGxiYWNrX2RhdGEgPSBjYWxsYmFja19kYXRhOwogCX0KLQlGSUJfQ09VTlRFUl9JTkNSRU1FTlQoYWFjX2NvbmZpZy5GaWJzU2VudCk7Ci0JbGlzdF9hZGRfdGFpbCgmZmlicHRyLT5xdWV1ZSwgJnEtPnBlbmRpbmdxKTsKLQlxLT5udW1wZW5kaW5nKys7CiAKIAlmaWJwdHItPmRvbmUgPSAwOwogCWZpYnB0ci0+ZmxhZ3MgPSAwOwogCi0JaWYoYWFjX2luc2VydF9lbnRyeShkZXYsIGluZGV4LCBxaWQsIChub2ludHIgJiBhYWNfY29uZmlnLmlycV9tb2QpKSA8IDApCi0JCXJldHVybiAtRVdPVUxEQkxPQ0s7CisJRklCX0NPVU5URVJfSU5DUkVNRU5UKGFhY19jb25maWcuRmlic1NlbnQpOworCisJZHByaW50aygoS0VSTl9ERUJVRyAiZmliX3NlbmQ6IGluc2VydGluZyBhIHF1ZXVlIGVudHJ5IGF0IGluZGV4ICVkLlxuIixpbmRleCkpOworCWRwcmludGsoKEtFUk5fREVCVUcgIkZpYiBjb250ZW50czouXG4iKSk7CisJZHByaW50aygoS0VSTl9ERUJVRyAiICBDb21tYW5kID0gICAgICAgICAgICAgICAlZC5cbiIsIGh3X2ZpYi0+aGVhZGVyLkNvbW1hbmQpKTsKKwlkcHJpbnRrKChLRVJOX0RFQlVHICIgIFhmZXJTdGF0ZSAgPSAgICAgICAgICAgICV4LlxuIiwgaHdfZmliLT5oZWFkZXIuWGZlclN0YXRlKSk7CisJZHByaW50aygoS0VSTl9ERUJVRyAiICBod19maWIgdmEgYmVpbmcgc2VudD0lcFxuIixmaWJwdHItPmh3X2ZpYikpOworCWRwcmludGsoKEtFUk5fREVCVUcgIiAgaHdfZmliIHBhIGJlaW5nIHNlbnQ9JWx4XG4iLCh1bG9uZylmaWJwdHItPmh3X2ZpYl9wYSkpOworCWRwcmludGsoKEtFUk5fREVCVUcgIiAgZmliIGJlaW5nIHNlbnQ9JXBcbiIsZmlicHRyKSk7CisKKwlxID0gJmRldi0+cXVldWVzLT5xdWV1ZVtBZGFwTm9ybUNtZFF1ZXVlXTsKKworCWlmKHdhaXQpCisJCXNwaW5fbG9ja19pcnFzYXZlKCZmaWJwdHItPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZShxLT5sb2NrLCBxZmxhZ3MpOworCWFhY19xdWV1ZV9nZXQoIGRldiwgJmluZGV4LCBBZGFwTm9ybUNtZFF1ZXVlLCBod19maWIsIDEsIGZpYnB0ciwgJm5vaW50cik7CisKKwlsaXN0X2FkZF90YWlsKCZmaWJwdHItPnF1ZXVlLCAmcS0+cGVuZGluZ3EpOworCXEtPm51bXBlbmRpbmcrKzsKKwkqKHEtPmhlYWRlcnMucHJvZHVjZXIpID0gY3B1X3RvX2xlMzIoaW5kZXggKyAxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPmxvY2ssIHFmbGFncyk7CisJaWYgKCEobm9pbnRyICYgYWFjX2NvbmZpZy5pcnFfbW9kKSkKKwkJYWFjX2FkYXB0ZXJfbm90aWZ5KGRldiwgQWRhcE5vcm1DbWRRdWV1ZSk7CiAJLyoKIAkgKglJZiB0aGUgY2FsbGVyIHdhbnRlZCB1cyB0byB3YWl0IGZvciByZXNwb25zZSB3YWl0IG5vdy4gCiAJICovCiAgICAgCiAJaWYgKHdhaXQpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmlicHRyLT5ldmVudF9sb2NrLCBmbGFncyk7Ci0JCWRvd24oJmZpYnB0ci0+ZXZlbnRfd2FpdCk7CisJCS8qIE9ubHkgc2V0IGZvciBmaXJzdCBrbm93biBpbnRlcnJ1cHRhYmxlIGNvbW1hbmQgKi8KKwkJaWYgKHdhaXQgPCAwKSB7CisJCQkvKgorCQkJICogKlZFUlkqIERhbmdlcm91cyB0byB0aW1lIG91dCBhIGNvbW1hbmQsIHRoZQorCQkJICogYXNzdW1wdGlvbiBpcyBtYWRlIHRoYXQgd2UgaGF2ZSBubyBob3BlIG9mCisJCQkgKiBmdW5jdGlvbmluZyBiZWNhdXNlIGFuIGludGVycnVwdCByb3V0aW5nIG9yIG90aGVyCisJCQkgKiBoYXJkd2FyZSBmYWlsdXJlIGhhcyBvY2N1cnJlZC4KKwkJCSAqLworCQkJdW5zaWduZWQgbG9uZyBjb3VudCA9IDM2MDAwMDAwTDsgLyogMyBtaW51dGVzICovCisJCQl1bnNpZ25lZCBsb25nIHFmbGFnczsKKwkJCXdoaWxlIChkb3duX3RyeWxvY2soJmZpYnB0ci0+ZXZlbnRfd2FpdCkpIHsKKwkJCQlpZiAoLS1jb3VudCA9PSAwKSB7CisJCQkJCXNwaW5fbG9ja19pcnFzYXZlKHEtPmxvY2ssIHFmbGFncyk7CisJCQkJCXEtPm51bXBlbmRpbmctLTsKKwkJCQkJbGlzdF9kZWwoJmZpYnB0ci0+cXVldWUpOworCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPmxvY2ssIHFmbGFncyk7CisJCQkJCWlmICh3YWl0ID09IC0xKSB7CisJICAgICAgICAJCQkJcHJpbnRrKEtFUk5fRVJSICJhYWNyYWlkOiBmaWJfc2VuZDogZmlyc3QgYXN5bmNocm9ub3VzIGNvbW1hbmQgdGltZWQgb3V0LlxuIgorCQkJCQkJICAiVXN1YWxseSBhIHJlc3VsdCBvZiBhIFBDSSBpbnRlcnJ1cHQgcm91dGluZyBwcm9ibGVtO1xuIgorCQkJCQkJICAidXBkYXRlIG1vdGhlciBib2FyZCBCSU9TIG9yIGNvbnNpZGVyIHV0aWxpemluZyBvbmUgb2ZcbiIKKwkJCQkJCSAgInRoZSBTQUZFIG1vZGUga2VybmVsIG9wdGlvbnMgKGFjcGksIGFwaWMgZXRjKVxuIik7CisJCQkJCX0KKwkJCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCQkJfQorCQkJCXVkZWxheSg1KTsKKwkJCX0KKwkJfSBlbHNlCisJCQlkb3duKCZmaWJwdHItPmV2ZW50X3dhaXQpOwogCQlpZihmaWJwdHItPmRvbmUgPT0gMCkKIAkJCUJVRygpOwogCQkJCkBAIC02MjIsMTUgKzU5Miw5IEBACiAJCWNhc2UgSG9zdE5vcm1DbWRRdWV1ZToKIAkJCW5vdGlmeSA9IEhvc3ROb3JtQ21kTm90RnVsbDsKIAkJCWJyZWFrOwotCQljYXNlIEhvc3RIaWdoQ21kUXVldWU6Ci0JCQlub3RpZnkgPSBIb3N0SGlnaENtZE5vdEZ1bGw7Ci0JCQlicmVhazsKIAkJY2FzZSBIb3N0Tm9ybVJlc3BRdWV1ZToKIAkJCW5vdGlmeSA9IEhvc3ROb3JtUmVzcE5vdEZ1bGw7CiAJCQlicmVhazsKLQkJY2FzZSBIb3N0SGlnaFJlc3BRdWV1ZToKLQkJCW5vdGlmeSA9IEhvc3RIaWdoUmVzcE5vdEZ1bGw7Ci0JCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCUJVRygpOwogCQkJcmV0dXJuOwpAQCAtNjUyLDkgKzYxNiwxMyBAQAogewogCXN0cnVjdCBod19maWIgKiBod19maWIgPSBmaWJwdHItPmh3X2ZpYjsKIAlzdHJ1Y3QgYWFjX2RldiAqIGRldiA9IGZpYnB0ci0+ZGV2OworCXN0cnVjdCBhYWNfcXVldWUgKiBxOwogCXVuc2lnbmVkIGxvbmcgbm9pbnRyID0gMDsKLQlpZiAoaHdfZmliLT5oZWFkZXIuWGZlclN0YXRlID09IDApCisJdW5zaWduZWQgbG9uZyBxZmxhZ3M7CisKKwlpZiAoaHdfZmliLT5oZWFkZXIuWGZlclN0YXRlID09IDApIHsKICAgICAgICAgCXJldHVybiAwOworCX0KIAkvKgogCSAqCUlmIHdlIHBsYW4gdG8gZG8gYW55dGhpbmcgY2hlY2sgdGhlIHN0cnVjdHVyZSB0eXBlIGZpcnN0LgogCSAqLyAKQEAgLTY2OSwzNyArNjM3LDIxIEBACiAJICoJc2VuZCB0aGUgY29tcGxldGVkIGNkYiB0byB0aGUgYWRhcHRlci4KIAkgKi8KIAlpZiAoaHdfZmliLT5oZWFkZXIuWGZlclN0YXRlICYgY3B1X3RvX2xlMzIoU2VudEZyb21BZGFwdGVyKSkgeworCQl1MzIgaW5kZXg7CiAJICAgICAgICBod19maWItPmhlYWRlci5YZmVyU3RhdGUgfD0gY3B1X3RvX2xlMzIoSG9zdFByb2Nlc3NlZCk7Ci0JICAgICAgICBpZiAoaHdfZmliLT5oZWFkZXIuWGZlclN0YXRlICYgY3B1X3RvX2xlMzIoSGlnaFByaW9yaXR5KSkgewotICAgICAgICAJCXUzMiBpbmRleDsKLSAgICAgICAJCQlpZiAoc2l6ZSkgCi0JCQl7Ci0JCQkJc2l6ZSArPSBzaXplb2Yoc3RydWN0IGFhY19maWJoZHIpOwotCQkJCWlmIChzaXplID4gbGUxNl90b19jcHUoaHdfZmliLT5oZWFkZXIuU2VuZGVyU2l6ZSkpCi0JCQkJCXJldHVybiAtRU1TR1NJWkU7Ci0JCQkJaHdfZmliLT5oZWFkZXIuU2l6ZSA9IGNwdV90b19sZTE2KHNpemUpOwotCQkJfQotCQkJaWYoYWFjX3F1ZXVlX2dldChkZXYsICZpbmRleCwgQWRhcEhpZ2hSZXNwUXVldWUsIGh3X2ZpYiwgMSwgTlVMTCwgJm5vaW50cikgPCAwKSB7Ci0JCQkJcmV0dXJuIC1FV09VTERCTE9DSzsKLQkJCX0KLQkJCWlmIChhYWNfaW5zZXJ0X2VudHJ5KGRldiwgaW5kZXgsIEFkYXBIaWdoUmVzcFF1ZXVlLCAgKG5vaW50ciAmIChpbnQpYWFjX2NvbmZpZy5pcnFfbW9kKSkgIT0gMCkgewotCQkJfQotCQl9IGVsc2UgaWYgKGh3X2ZpYi0+aGVhZGVyLlhmZXJTdGF0ZSAmIAotCQkJCWNwdV90b19sZTMyKE5vcm1hbFByaW9yaXR5KSkgewotCQkJdTMyIGluZGV4OwotCi0JCQlpZiAoc2l6ZSkgewotCQkJCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCBhYWNfZmliaGRyKTsKLQkJCQlpZiAoc2l6ZSA+IGxlMTZfdG9fY3B1KGh3X2ZpYi0+aGVhZGVyLlNlbmRlclNpemUpKSAKLQkJCQkJcmV0dXJuIC1FTVNHU0laRTsKLQkJCQlod19maWItPmhlYWRlci5TaXplID0gY3B1X3RvX2xlMTYoc2l6ZSk7Ci0JCQl9Ci0JCQlpZiAoYWFjX3F1ZXVlX2dldChkZXYsICZpbmRleCwgQWRhcE5vcm1SZXNwUXVldWUsIGh3X2ZpYiwgMSwgTlVMTCwgJm5vaW50cikgPCAwKSAKLQkJCQlyZXR1cm4gLUVXT1VMREJMT0NLOwotCQkJaWYgKGFhY19pbnNlcnRfZW50cnkoZGV2LCBpbmRleCwgQWRhcE5vcm1SZXNwUXVldWUsIChub2ludHIgJiAoaW50KWFhY19jb25maWcuaXJxX21vZCkpICE9IDApIAotCQkJewotCQkJfQorCQlpZiAoc2l6ZSkgeworCQkJc2l6ZSArPSBzaXplb2Yoc3RydWN0IGFhY19maWJoZHIpOworCQkJaWYgKHNpemUgPiBsZTE2X3RvX2NwdShod19maWItPmhlYWRlci5TZW5kZXJTaXplKSkgCisJCQkJcmV0dXJuIC1FTVNHU0laRTsKKwkJCWh3X2ZpYi0+aGVhZGVyLlNpemUgPSBjcHVfdG9fbGUxNihzaXplKTsKIAkJfQorCQlxID0gJmRldi0+cXVldWVzLT5xdWV1ZVtBZGFwTm9ybVJlc3BRdWV1ZV07CisJCXNwaW5fbG9ja19pcnFzYXZlKHEtPmxvY2ssIHFmbGFncyk7CisJCWFhY19xdWV1ZV9nZXQoZGV2LCAmaW5kZXgsIEFkYXBOb3JtUmVzcFF1ZXVlLCBod19maWIsIDEsIE5VTEwsICZub2ludHIpOworCQkqKHEtPmhlYWRlcnMucHJvZHVjZXIpID0gY3B1X3RvX2xlMzIoaW5kZXggKyAxKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5sb2NrLCBxZmxhZ3MpOworCQlpZiAoIShub2ludHIgJiAoaW50KWFhY19jb25maWcuaXJxX21vZCkpCisJCQlhYWNfYWRhcHRlcl9ub3RpZnkoZGV2LCBBZGFwTm9ybVJlc3BRdWV1ZSk7CiAJfQogCWVsc2UgCiAJewpAQCAtNzkxLDYgKzc0MywyNjggQEAKIAltZW1zZXQoY3AsIDAsICAyNTYpOwogfQogCisKKy8qKgorICoJYWFjX2hhbmRsZV9haWYJCS0JSGFuZGxlIGEgbWVzc2FnZSBmcm9tIHRoZSBmaXJtd2FyZQorICoJQGRldjogV2hpY2ggYWRhcHRlciB0aGlzIGZpYiBpcyBmcm9tCisgKglAZmlicHRyOiBQb2ludGVyIHRvIGZpYnB0ciBmcm9tIGFkYXB0ZXIKKyAqCisgKglUaGlzIHJvdXRpbmUgaGFuZGxlcyBhIGRyaXZlciBub3RpZnkgZmliIGZyb20gdGhlIGFkYXB0ZXIgYW5kCisgKglkaXNwYXRjaGVzIGl0IHRvIHRoZSBhcHByb3ByaWF0ZSByb3V0aW5lIGZvciBoYW5kbGluZy4KKyAqLworCitzdGF0aWMgdm9pZCBhYWNfaGFuZGxlX2FpZihzdHJ1Y3QgYWFjX2RldiAqIGRldiwgc3RydWN0IGZpYiAqIGZpYnB0cikKK3sKKwlzdHJ1Y3QgaHdfZmliICogaHdfZmliID0gZmlicHRyLT5od19maWI7CisJc3RydWN0IGFhY19haWZjbWQgKiBhaWZjbWQgPSAoc3RydWN0IGFhY19haWZjbWQgKilod19maWItPmRhdGE7CisJaW50IGJ1c3k7CisJdTMyIGNvbnRhaW5lcjsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldmljZTsKKwllbnVtIHsKKwkJTk9USElORywKKwkJREVMRVRFLAorCQlBREQsCisJCUNIQU5HRQorCX0gZGV2aWNlX2NvbmZpZ19uZWVkZWQ7CisKKwkvKiBTbmlmZiBmb3IgY29udGFpbmVyIGNoYW5nZXMgKi8KKworCWlmICghZGV2KQorCQlyZXR1cm47CisJY29udGFpbmVyID0gKHUzMiktMTsKKworCS8qCisJICoJV2UgaGF2ZSBzZXQgdGhpcyB1cCB0byB0cnkgYW5kIG1pbmltaXplIHRoZSBudW1iZXIgb2YKKwkgKiByZS1jb25maWd1cmVzIHRoYXQgdGFrZSBwbGFjZS4gQXMgYSByZXN1bHQgb2YgdGhpcyB3aGVuCisJICogY2VydGFpbiBBSUYncyBjb21lIGluIHdlIHdpbGwgc2V0IGEgZmxhZyB3YWl0aW5nIGZvciBhbm90aGVyCisJICogdHlwZSBvZiBBSUYgYmVmb3JlIHNldHRpbmcgdGhlIHJlLWNvbmZpZyBmbGFnLgorCSAqLworCXN3aXRjaCAobGUzMl90b19jcHUoYWlmY21kLT5jb21tYW5kKSkgeworCWNhc2UgQWlmQ21kRHJpdmVyTm90aWZ5OgorCQlzd2l0Y2ggKGxlMzJfdG9fY3B1KCgodTMyICopYWlmY21kLT5kYXRhKVswXSkpIHsKKwkJLyoKKwkJICoJTW9ycGggb3IgRXhwYW5kIGNvbXBsZXRlCisJCSAqLworCQljYXNlIEFpZkRlbk1vcnBoQ29tcGxldGU6CisJCWNhc2UgQWlmRGVuVm9sdW1lRXh0ZW5kQ29tcGxldGU6CisJCQljb250YWluZXIgPSBsZTMyX3RvX2NwdSgoKHUzMiAqKWFpZmNtZC0+ZGF0YSlbMV0pOworCQkJaWYgKGNvbnRhaW5lciA+PSBkZXYtPm1heGltdW1fbnVtX2NvbnRhaW5lcnMpCisJCQkJYnJlYWs7CisKKwkJCS8qCisJCQkgKglGaW5kIHRoZSBTY3NpX0RldmljZSBhc3NvY2lhdGVkIHdpdGggdGhlIFNDU0kKKwkJCSAqIGFkZHJlc3MuIE1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBhcnJheSwgYW5kIGlmCisJCQkgKiBzbyBzZXQgdGhlIGZsYWcgdG8gaW5pdGlhdGUgYSBuZXcgcmUtY29uZmlnIG9uY2Ugd2UKKwkJCSAqIHNlZSBhbiBBaWZFbkNvbmZpZ0NoYW5nZSBBSUYgY29tZSB0aHJvdWdoLgorCQkJICovCisKKwkJCWlmICgoZGV2ICE9IE5VTEwpICYmIChkZXYtPnNjc2lfaG9zdF9wdHIgIT0gTlVMTCkpIHsKKwkJCQlkZXZpY2UgPSBzY3NpX2RldmljZV9sb29rdXAoZGV2LT5zY3NpX2hvc3RfcHRyLCAKKwkJCQkJQ09OVEFJTkVSX1RPX0NIQU5ORUwoY29udGFpbmVyKSwgCisJCQkJCUNPTlRBSU5FUl9UT19JRChjb250YWluZXIpLCAKKwkJCQkJQ09OVEFJTkVSX1RPX0xVTihjb250YWluZXIpKTsKKwkJCQlpZiAoZGV2aWNlKSB7CisJCQkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ19uZWVkZWQgPSBDSEFOR0U7CisJCQkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uID0gQWlmRW5Db25maWdDaGFuZ2U7CisJCQkJCXNjc2lfZGV2aWNlX3B1dChkZXZpY2UpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qCisJCSAqCUlmIHdlIGFyZSB3YWl0aW5nIG9uIHNvbWV0aGluZyBhbmQgdGhpcyBoYXBwZW5zIHRvIGJlCisJCSAqIHRoYXQgdGhpbmcgdGhlbiBzZXQgdGhlIHJlLWNvbmZpZ3VyZSBmbGFnLgorCQkgKi8KKwkJaWYgKGNvbnRhaW5lciAhPSAodTMyKS0xKSB7CisJCQlpZiAoY29udGFpbmVyID49IGRldi0+bWF4aW11bV9udW1fY29udGFpbmVycykKKwkJCQlicmVhazsKKwkJCWlmIChkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19vbiA9PQorCQkJICAgIGxlMzJfdG9fY3B1KCoodTMyICopYWlmY21kLT5kYXRhKSkKKwkJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19vbiA9IDA7CisJCX0gZWxzZSBmb3IgKGNvbnRhaW5lciA9IDA7CisJCSAgICBjb250YWluZXIgPCBkZXYtPm1heGltdW1fbnVtX2NvbnRhaW5lcnM7ICsrY29udGFpbmVyKSB7CisJCQlpZiAoZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPT0KKwkJCSAgICBsZTMyX3RvX2NwdSgqKHUzMiAqKWFpZmNtZC0+ZGF0YSkpCisJCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPSAwOworCQl9CisJCWJyZWFrOworCisJY2FzZSBBaWZDbWRFdmVudE5vdGlmeToKKwkJc3dpdGNoIChsZTMyX3RvX2NwdSgoKHUzMiAqKWFpZmNtZC0+ZGF0YSlbMF0pKSB7CisJCS8qCisJCSAqCUFkZCBhbiBBcnJheS4KKwkJICovCisJCWNhc2UgQWlmRW5BZGRDb250YWluZXI6CisJCQljb250YWluZXIgPSBsZTMyX3RvX2NwdSgoKHUzMiAqKWFpZmNtZC0+ZGF0YSlbMV0pOworCQkJaWYgKGNvbnRhaW5lciA+PSBkZXYtPm1heGltdW1fbnVtX2NvbnRhaW5lcnMpCisJCQkJYnJlYWs7CisJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfbmVlZGVkID0gQUREOworCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPQorCQkJCUFpZkVuQ29uZmlnQ2hhbmdlOworCQkJYnJlYWs7CisKKwkJLyoKKwkJICoJRGVsZXRlIGFuIEFycmF5LgorCQkgKi8KKwkJY2FzZSBBaWZFbkRlbGV0ZUNvbnRhaW5lcjoKKwkJCWNvbnRhaW5lciA9IGxlMzJfdG9fY3B1KCgodTMyICopYWlmY21kLT5kYXRhKVsxXSk7CisJCQlpZiAoY29udGFpbmVyID49IGRldi0+bWF4aW11bV9udW1fY29udGFpbmVycykKKwkJCQlicmVhazsKKwkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ19uZWVkZWQgPSBERUxFVEU7CisJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19vbiA9CisJCQkJQWlmRW5Db25maWdDaGFuZ2U7CisJCQlicmVhazsKKworCQkvKgorCQkgKglDb250YWluZXIgY2hhbmdlIGRldGVjdGVkLiBJZiB3ZSBjdXJyZW50bHkgYXJlIG5vdAorCQkgKiB3YWl0aW5nIG9uIHNvbWV0aGluZyBlbHNlLCBzZXR1cCB0byB3YWl0IG9uIGEgQ29uZmlnIENoYW5nZS4KKwkJICovCisJCWNhc2UgQWlmRW5Db250YWluZXJDaGFuZ2U6CisJCQljb250YWluZXIgPSBsZTMyX3RvX2NwdSgoKHUzMiAqKWFpZmNtZC0+ZGF0YSlbMV0pOworCQkJaWYgKGNvbnRhaW5lciA+PSBkZXYtPm1heGltdW1fbnVtX2NvbnRhaW5lcnMpCisJCQkJYnJlYWs7CisJCQlpZiAoZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24pCisJCQkJYnJlYWs7CisJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfbmVlZGVkID0gQ0hBTkdFOworCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPQorCQkJCUFpZkVuQ29uZmlnQ2hhbmdlOworCQkJYnJlYWs7CisKKwkJY2FzZSBBaWZFbkNvbmZpZ0NoYW5nZToKKwkJCWJyZWFrOworCisJCX0KKworCQkvKgorCQkgKglJZiB3ZSBhcmUgd2FpdGluZyBvbiBzb21ldGhpbmcgYW5kIHRoaXMgaGFwcGVucyB0byBiZQorCQkgKiB0aGF0IHRoaW5nIHRoZW4gc2V0IHRoZSByZS1jb25maWd1cmUgZmxhZy4KKwkJICovCisJCWlmIChjb250YWluZXIgIT0gKHUzMiktMSkgeworCQkJaWYgKGNvbnRhaW5lciA+PSBkZXYtPm1heGltdW1fbnVtX2NvbnRhaW5lcnMpCisJCQkJYnJlYWs7CisJCQlpZiAoZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPT0KKwkJCSAgICBsZTMyX3RvX2NwdSgqKHUzMiAqKWFpZmNtZC0+ZGF0YSkpCisJCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPSAwOworCQl9IGVsc2UgZm9yIChjb250YWluZXIgPSAwOworCQkgICAgY29udGFpbmVyIDwgZGV2LT5tYXhpbXVtX251bV9jb250YWluZXJzOyArK2NvbnRhaW5lcikgeworCQkJaWYgKGRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uID09CisJCQkgICAgbGUzMl90b19jcHUoKih1MzIgKilhaWZjbWQtPmRhdGEpKQorCQkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uID0gMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQWlmQ21kSm9iUHJvZ3Jlc3M6CisJCS8qCisJCSAqCVRoZXNlIGFyZSBqb2IgcHJvZ3Jlc3MgQUlGJ3MuIFdoZW4gYSBDbGVhciBpcyBiZWluZworCQkgKiBkb25lIG9uIGEgY29udGFpbmVyIGl0IGlzIGluaXRpYWxseSBjcmVhdGVkIHRoZW4gaGlkZGVuIGZyb20KKwkJICogdGhlIE9TLiBXaGVuIHRoZSBjbGVhciBjb21wbGV0ZXMgd2UgZG9uJ3QgZ2V0IGEgY29uZmlnCisJCSAqIGNoYW5nZSBzbyB3ZSBtb25pdG9yIHRoZSBqb2Igc3RhdHVzIGNvbXBsZXRlIG9uIGEgY2xlYXIgdGhlbgorCQkgKiB3YWl0IGZvciBhIGNvbnRhaW5lciBjaGFuZ2UuCisJCSAqLworCisJCWlmICgoKCh1MzIgKilhaWZjbWQtPmRhdGEpWzFdID09IGNwdV90b19sZTMyKEFpZkpvYkN0clplcm8pKQorCQkgJiYgKCgoKHUzMiAqKWFpZmNtZC0+ZGF0YSlbNl0gPT0gKCh1MzIgKilhaWZjbWQtPmRhdGEpWzVdKQorCQkgIHx8ICgoKHUzMiAqKWFpZmNtZC0+ZGF0YSlbNF0gPT0gY3B1X3RvX2xlMzIoQWlmSm9iU3RzU3VjY2VzcykpKSkgeworCQkJZm9yIChjb250YWluZXIgPSAwOworCQkJICAgIGNvbnRhaW5lciA8IGRldi0+bWF4aW11bV9udW1fY29udGFpbmVyczsKKwkJCSAgICArK2NvbnRhaW5lcikgeworCQkJCS8qCisJCQkJICogU3RvbXAgb24gYWxsIGNvbmZpZyBzZXF1ZW5jaW5nIGZvciBhbGwKKwkJCQkgKiBjb250YWluZXJzPworCQkJCSAqLworCQkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uID0KKwkJCQkJQWlmRW5Db250YWluZXJDaGFuZ2U7CisJCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX25lZWRlZCA9IEFERDsKKwkJCX0KKwkJfQorCQlpZiAoKCgodTMyICopYWlmY21kLT5kYXRhKVsxXSA9PSBjcHVfdG9fbGUzMihBaWZKb2JDdHJaZXJvKSkKKwkJICYmICgoKHUzMiAqKWFpZmNtZC0+ZGF0YSlbNl0gPT0gMCkKKwkJICYmICgoKHUzMiAqKWFpZmNtZC0+ZGF0YSlbNF0gPT0gY3B1X3RvX2xlMzIoQWlmSm9iU3RzUnVubmluZykpKSB7CisJCQlmb3IgKGNvbnRhaW5lciA9IDA7CisJCQkgICAgY29udGFpbmVyIDwgZGV2LT5tYXhpbXVtX251bV9jb250YWluZXJzOworCQkJICAgICsrY29udGFpbmVyKSB7CisJCQkJLyoKKwkJCQkgKiBTdG9tcCBvbiBhbGwgY29uZmlnIHNlcXVlbmNpbmcgZm9yIGFsbAorCQkJCSAqIGNvbnRhaW5lcnM/CisJCQkJICovCisJCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPQorCQkJCQlBaWZFbkNvbnRhaW5lckNoYW5nZTsKKwkJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfbmVlZGVkID0gREVMRVRFOworCQkJfQorCQl9CisJCWJyZWFrOworCX0KKworCWRldmljZV9jb25maWdfbmVlZGVkID0gTk9USElORzsKKwlmb3IgKGNvbnRhaW5lciA9IDA7IGNvbnRhaW5lciA8IGRldi0+bWF4aW11bV9udW1fY29udGFpbmVyczsKKwkgICAgKytjb250YWluZXIpIHsKKwkJaWYgKChkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19vbiA9PSAwKQorCQkgJiYgKGRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ19uZWVkZWQgIT0gTk9USElORykpIHsKKwkJCWRldmljZV9jb25maWdfbmVlZGVkID0KKwkJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfbmVlZGVkOworCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX25lZWRlZCA9IE5PVEhJTkc7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoZGV2aWNlX2NvbmZpZ19uZWVkZWQgPT0gTk9USElORykKKwkJcmV0dXJuOworCisJLyoKKwkgKglJZiB3ZSBkZWNpZGVkIHRoYXQgYSByZS1jb25maWd1cmF0aW9uIG5lZWRzIHRvIGJlIGRvbmUsCisJICogc2NoZWR1bGUgaXQgaGVyZSBvbiB0aGUgd2F5IG91dCB0aGUgZG9vciwgcGxlYXNlIGNsb3NlIHRoZSBkb29yCisJICogYmVoaW5kIHlvdS4KKwkgKi8KKworCWJ1c3kgPSAwOworCisKKwkvKgorCSAqCUZpbmQgdGhlIFNjc2lfRGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgU0NTSSBhZGRyZXNzLAorCSAqIGFuZCBtYXJrIGl0IGFzIGNoYW5nZWQsIGludmFsaWRhdGluZyB0aGUgY2FjaGUuIFRoaXMgZGVhbHMKKwkgKiB3aXRoIGNoYW5nZXMgdG8gZXhpc3RpbmcgZGV2aWNlIElEcy4KKwkgKi8KKworCWlmICghZGV2IHx8ICFkZXYtPnNjc2lfaG9zdF9wdHIpCisJCXJldHVybjsKKwkvKgorCSAqIGZvcmNlIHJlbG9hZCBvZiBkaXNrIGluZm8gdmlhIHByb2JlX2NvbnRhaW5lcgorCSAqLworCWlmICgoZGV2aWNlX2NvbmZpZ19uZWVkZWQgPT0gQ0hBTkdFKQorCSAmJiAoZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0udmFsaWQgPT0gMSkpCisJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLnZhbGlkID0gMjsKKwlpZiAoKGRldmljZV9jb25maWdfbmVlZGVkID09IENIQU5HRSkgfHwKKwkJCShkZXZpY2VfY29uZmlnX25lZWRlZCA9PSBBREQpKQorCQlwcm9iZV9jb250YWluZXIoZGV2LCBjb250YWluZXIpOworCWRldmljZSA9IHNjc2lfZGV2aWNlX2xvb2t1cChkZXYtPnNjc2lfaG9zdF9wdHIsIAorCQlDT05UQUlORVJfVE9fQ0hBTk5FTChjb250YWluZXIpLCAKKwkJQ09OVEFJTkVSX1RPX0lEKGNvbnRhaW5lciksIAorCQlDT05UQUlORVJfVE9fTFVOKGNvbnRhaW5lcikpOworCWlmIChkZXZpY2UpIHsKKwkJc3dpdGNoIChkZXZpY2VfY29uZmlnX25lZWRlZCkgeworCQljYXNlIERFTEVURToKKwkJCXNjc2lfcmVtb3ZlX2RldmljZShkZXZpY2UpOworCQkJYnJlYWs7CisJCWNhc2UgQ0hBTkdFOgorCQkJaWYgKCFkZXYtPmZzYV9kZXZbY29udGFpbmVyXS52YWxpZCkgeworCQkJCXNjc2lfcmVtb3ZlX2RldmljZShkZXZpY2UpOworCQkJCWJyZWFrOworCQkJfQorCQkJc2NzaV9yZXNjYW5fZGV2aWNlKCZkZXZpY2UtPnNkZXZfZ2VuZGV2KTsKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJc2NzaV9kZXZpY2VfcHV0KGRldmljZSk7CisJfQorCWlmIChkZXZpY2VfY29uZmlnX25lZWRlZCA9PSBBREQpIHsKKwkJc2NzaV9hZGRfZGV2aWNlKGRldi0+c2NzaV9ob3N0X3B0ciwKKwkJICBDT05UQUlORVJfVE9fQ0hBTk5FTChjb250YWluZXIpLAorCQkgIENPTlRBSU5FUl9UT19JRChjb250YWluZXIpLAorCQkgIENPTlRBSU5FUl9UT19MVU4oY29udGFpbmVyKSk7CisJfQorCit9CisKIC8qKgogICoJYWFjX2NvbW1hbmRfdGhyZWFkCS0JY29tbWFuZCBwcm9jZXNzaW5nIHRocmVhZAogICoJQGRldjogQWRhcHRlciB0byBtb25pdG9yCkBAIC04MDUsNyArMTAxOSw2IEBACiB7CiAJc3RydWN0IGh3X2ZpYiAqaHdfZmliLCAqaHdfbmV3ZmliOwogCXN0cnVjdCBmaWIgKmZpYiwgKm5ld2ZpYjsKLQlzdHJ1Y3QgYWFjX3F1ZXVlX2Jsb2NrICpxdWV1ZXMgPSBkZXYtPnF1ZXVlczsKIAlzdHJ1Y3QgYWFjX2ZpYl9jb250ZXh0ICpmaWJjdHg7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKQEAgLTgyNSwyMSArMTAzOCwyMiBAQAogCSAqCUxldCB0aGUgRFBDIGtub3cgaXQgaGFzIGEgcGxhY2UgdG8gc2VuZCB0aGUgQUlGJ3MgdG8uCiAJICovCiAJZGV2LT5haWZfdGhyZWFkID0gMTsKLQlhZGRfd2FpdF9xdWV1ZSgmcXVldWVzLT5xdWV1ZVtIb3N0Tm9ybUNtZFF1ZXVlXS5jbWRyZWFkeSwgJndhaXQpOworCWFkZF93YWl0X3F1ZXVlKCZkZXYtPnF1ZXVlcy0+cXVldWVbSG9zdE5vcm1DbWRRdWV1ZV0uY21kcmVhZHksICZ3YWl0KTsKIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCWRwcmludGsgKChLRVJOX0lORk8gImFhY19jb21tYW5kX3RocmVhZCBzdGFydFxuIikpOwogCXdoaWxlKDEpIAogCXsKLQkJc3Bpbl9sb2NrX2lycXNhdmUocXVldWVzLT5xdWV1ZVtIb3N0Tm9ybUNtZFF1ZXVlXS5sb2NrLCBmbGFncyk7Ci0JCXdoaWxlKCFsaXN0X2VtcHR5KCYocXVldWVzLT5xdWV1ZVtIb3N0Tm9ybUNtZFF1ZXVlXS5jbWRxKSkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoZGV2LT5xdWV1ZXMtPnF1ZXVlW0hvc3ROb3JtQ21kUXVldWVdLmxvY2ssIGZsYWdzKTsKKwkJd2hpbGUoIWxpc3RfZW1wdHkoJihkZXYtPnF1ZXVlcy0+cXVldWVbSG9zdE5vcm1DbWRRdWV1ZV0uY21kcSkpKSB7CiAJCQlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKIAkJCXN0cnVjdCBhYWNfYWlmY21kICogYWlmY21kOwogCiAJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCQkKLQkJCWVudHJ5ID0gcXVldWVzLT5xdWV1ZVtIb3N0Tm9ybUNtZFF1ZXVlXS5jbWRxLm5leHQ7CisJCisJCQllbnRyeSA9IGRldi0+cXVldWVzLT5xdWV1ZVtIb3N0Tm9ybUNtZFF1ZXVlXS5jbWRxLm5leHQ7CiAJCQlsaXN0X2RlbChlbnRyeSk7Ci0JCQkKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocXVldWVzLT5xdWV1ZVtIb3N0Tm9ybUNtZFF1ZXVlXS5sb2NrLCBmbGFncyk7CisJCQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShkZXYtPnF1ZXVlcy0+cXVldWVbSG9zdE5vcm1DbWRRdWV1ZV0ubG9jaywgZmxhZ3MpOwogCQkJZmliID0gbGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IGZpYiwgZmlibGluayk7CiAJCQkvKgogCQkJICoJV2Ugd2lsbCBwcm9jZXNzIHRoZSBGSUIgaGVyZSBvciBwYXNzIGl0IHRvIGEgCkBAIC04NjAsNiArMTA3NCw3IEBACiAJCQlhaWZjbWQgPSAoc3RydWN0IGFhY19haWZjbWQgKikgaHdfZmliLT5kYXRhOwogCQkJaWYgKGFpZmNtZC0+Y29tbWFuZCA9PSBjcHVfdG9fbGUzMihBaWZDbWREcml2ZXJOb3RpZnkpKSB7CiAJCQkJLyogSGFuZGxlIERyaXZlciBOb3RpZnkgRXZlbnRzICovCisJCQkJYWFjX2hhbmRsZV9haWYoZGV2LCBmaWIpOwogCQkJCSooX19sZTMyICopaHdfZmliLT5kYXRhID0gY3B1X3RvX2xlMzIoU1RfT0spOwogCQkJCWZpYl9hZGFwdGVyX2NvbXBsZXRlKGZpYiwgKHUxNilzaXplb2YodTMyKSk7CiAJCQl9IGVsc2UgewpAQCAtODY5LDkgKzEwODQsNjIgQEAKIAkJCQkgICAKIAkJCQl1MzIgdGltZV9ub3csIHRpbWVfbGFzdDsKIAkJCQl1bnNpZ25lZCBsb25nIGZsYWd2OwotCQkJCQorCQkJCXVuc2lnbmVkIG51bTsKKwkJCQlzdHJ1Y3QgaHdfZmliICoqIGh3X2ZpYl9wb29sLCAqKiBod19maWJfcDsKKwkJCQlzdHJ1Y3QgZmliICoqIGZpYl9wb29sLCAqKiBmaWJfcDsKKwkJCQorCQkJCS8qIFNuaWZmIGV2ZW50cyAqLworCQkJCWlmICgoYWlmY21kLT5jb21tYW5kID09IAorCQkJCSAgICAgY3B1X3RvX2xlMzIoQWlmQ21kRXZlbnROb3RpZnkpKSB8fAorCQkJCSAgICAoYWlmY21kLT5jb21tYW5kID09IAorCQkJCSAgICAgY3B1X3RvX2xlMzIoQWlmQ21kSm9iUHJvZ3Jlc3MpKSkgeworCQkJCQlhYWNfaGFuZGxlX2FpZihkZXYsIGZpYik7CisJCQkJfQorIAkJCQkKIAkJCQl0aW1lX25vdyA9IGppZmZpZXMvSFo7CiAKKwkJCQkvKgorCQkJCSAqIFdhcm5pbmc6IG5vIHNsZWVwIGFsbG93ZWQgd2hpbGUKKwkJCQkgKiBob2xkaW5nIHNwaW5sb2NrLiBXZSB0YWtlIHRoZSBlc3RpbWF0ZQorCQkJCSAqIGFuZCBwcmUtYWxsb2NhdGUgYSBzZXQgb2YgZmlicyBvdXRzaWRlIHRoZQorCQkJCSAqIGxvY2suCisJCQkJICovCisJCQkJbnVtID0gbGUzMl90b19jcHUoZGV2LT5pbml0LT5BZGFwdGVyRmlic1NpemUpCisJCQkJICAgIC8gc2l6ZW9mKHN0cnVjdCBod19maWIpOyAvKiBzb21lIGV4dHJhICovCisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZmliX2xvY2ssIGZsYWd2KTsKKwkJCQllbnRyeSA9IGRldi0+ZmliX2xpc3QubmV4dDsKKwkJCQl3aGlsZSAoZW50cnkgIT0gJmRldi0+ZmliX2xpc3QpIHsKKwkJCQkJZW50cnkgPSBlbnRyeS0+bmV4dDsKKwkJCQkJKytudW07CisJCQkJfQorCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZmliX2xvY2ssIGZsYWd2KTsKKwkJCQlod19maWJfcG9vbCA9IE5VTEw7CisJCQkJZmliX3Bvb2wgPSBOVUxMOworCQkJCWlmIChudW0KKwkJCQkgJiYgKChod19maWJfcG9vbCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBod19maWIgKikgKiBudW0sIEdGUF9LRVJORUwpKSkKKwkJCQkgJiYgKChmaWJfcG9vbCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBmaWIgKikgKiBudW0sIEdGUF9LRVJORUwpKSkpIHsKKwkJCQkJaHdfZmliX3AgPSBod19maWJfcG9vbDsKKwkJCQkJZmliX3AgPSBmaWJfcG9vbDsKKwkJCQkJd2hpbGUgKGh3X2ZpYl9wIDwgJmh3X2ZpYl9wb29sW251bV0pIHsKKwkJCQkJCWlmICghKCooaHdfZmliX3ArKykgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaHdfZmliKSwgR0ZQX0tFUk5FTCkpKSB7CisJCQkJCQkJLS1od19maWJfcDsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJCWlmICghKCooZmliX3ArKykgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZmliKSwgR0ZQX0tFUk5FTCkpKSB7CisJCQkJCQkJa2ZyZWUoKigtLWh3X2ZpYl9wKSk7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJaWYgKChudW0gPSBod19maWJfcCAtIGh3X2ZpYl9wb29sKSA9PSAwKSB7CisJCQkJCQlrZnJlZShmaWJfcG9vbCk7CisJCQkJCQlmaWJfcG9vbCA9IE5VTEw7CisJCQkJCQlrZnJlZShod19maWJfcG9vbCk7CisJCQkJCQlod19maWJfcG9vbCA9IE5VTEw7CisJCQkJCX0KKwkJCQl9IGVsc2UgaWYgKGh3X2ZpYl9wb29sKSB7CisJCQkJCWtmcmVlKGh3X2ZpYl9wb29sKTsKKwkJCQkJaHdfZmliX3Bvb2wgPSBOVUxMOworCQkJCX0KIAkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5maWJfbG9jaywgZmxhZ3YpOwogCQkJCWVudHJ5ID0gZGV2LT5maWJfbGlzdC5uZXh0OwogCQkJCS8qCkBAIC04ODAsNiArMTE0OCw4IEBACiAJCQkJICogZmliLCBhbmQgdGhlbiBzZXQgdGhlIGV2ZW50IHRvIHdha2UgdXAgdGhlCiAJCQkJICogdGhyZWFkIHRoYXQgaXMgd2FpdGluZyBmb3IgaXQuCiAJCQkJICovCisJCQkJaHdfZmliX3AgPSBod19maWJfcG9vbDsKKwkJCQlmaWJfcCA9IGZpYl9wb29sOwogCQkJCXdoaWxlIChlbnRyeSAhPSAmZGV2LT5maWJfbGlzdCkgewogCQkJCQkvKgogCQkJCQkgKiBFeHRyYWN0IHRoZSBmaWJjdHgKQEAgLTkxMiw5ICsxMTgyLDExIEBACiAJCQkJCSAqIFdhcm5pbmc6IG5vIHNsZWVwIGFsbG93ZWQgd2hpbGUKIAkJCQkJICogaG9sZGluZyBzcGlubG9jawogCQkJCQkgKi8KLQkJCQkJaHdfbmV3ZmliID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGh3X2ZpYiksIEdGUF9BVE9NSUMpOwotCQkJCQluZXdmaWIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZmliKSwgR0ZQX0FUT01JQyk7Ci0JCQkJCWlmIChuZXdmaWIgJiYgaHdfbmV3ZmliKSB7CisJCQkJCWlmIChod19maWJfcCA8ICZod19maWJfcG9vbFtudW1dKSB7CisJCQkJCQlod19uZXdmaWIgPSAqaHdfZmliX3A7CisJCQkJCQkqKGh3X2ZpYl9wKyspID0gTlVMTDsKKwkJCQkJCW5ld2ZpYiA9ICpmaWJfcDsKKwkJCQkJCSooZmliX3ArKykgPSBOVUxMOwogCQkJCQkJLyoKIAkJCQkJCSAqIE1ha2UgdGhlIGNvcHkgb2YgdGhlIEZJQgogCQkJCQkJICovCkBAIC05MjksMTUgKzEyMDEsMTEgQEAKIAkJCQkJCWZpYmN0eC0+Y291bnQrKzsKIAkJCQkJCS8qIAogCQkJCQkJICogU2V0IHRoZSBldmVudCB0byB3YWtlIHVwIHRoZQotCQkJCQkJICogdGhyZWFkIHRoYXQgd2lsbCB3YWl0aW5nLgorCQkJCQkJICogdGhyZWFkIHRoYXQgaXMgd2FpdGluZy4KIAkJCQkJCSAqLwogCQkJCQkJdXAoJmZpYmN0eC0+d2FpdF9zZW0pOwogCQkJCQl9IGVsc2UgewogCQkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYWlmZDogZGlkbid0IGFsbG9jYXRlIE5ld0ZpYi5cbiIpOwotCQkJCQkJaWYobmV3ZmliKQotCQkJCQkJCWtmcmVlKG5ld2ZpYik7Ci0JCQkJCQlpZihod19uZXdmaWIpCi0JCQkJCQkJa2ZyZWUoaHdfbmV3ZmliKTsKIAkJCQkJfQogCQkJCQllbnRyeSA9IGVudHJ5LT5uZXh0OwogCQkJCX0KQEAgLTk0NywyMSArMTIxNSwzOCBAQAogCQkJCSooX19sZTMyICopaHdfZmliLT5kYXRhID0gY3B1X3RvX2xlMzIoU1RfT0spOwogCQkJCWZpYl9hZGFwdGVyX2NvbXBsZXRlKGZpYiwgc2l6ZW9mKHUzMikpOwogCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZmliX2xvY2ssIGZsYWd2KTsKKwkJCQkvKiBGcmVlIHVwIHRoZSByZW1haW5pbmcgcmVzb3VyY2VzICovCisJCQkJaHdfZmliX3AgPSBod19maWJfcG9vbDsKKwkJCQlmaWJfcCA9IGZpYl9wb29sOworCQkJCXdoaWxlIChod19maWJfcCA8ICZod19maWJfcG9vbFtudW1dKSB7CisJCQkJCWlmICgqaHdfZmliX3ApCisJCQkJCQlrZnJlZSgqaHdfZmliX3ApOworCQkJCQlpZiAoKmZpYl9wKQorCQkJCQkJa2ZyZWUoKmZpYl9wKTsKKwkJCQkJKytmaWJfcDsKKwkJCQkJKytod19maWJfcDsKKwkJCQl9CisJCQkJaWYgKGh3X2ZpYl9wb29sKQorCQkJCQlrZnJlZShod19maWJfcG9vbCk7CisJCQkJaWYgKGZpYl9wb29sKQorCQkJCQlrZnJlZShmaWJfcG9vbCk7CiAJCQl9Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZShxdWV1ZXMtPnF1ZXVlW0hvc3ROb3JtQ21kUXVldWVdLmxvY2ssIGZsYWdzKTsKIAkJCWtmcmVlKGZpYik7CisJCQlzcGluX2xvY2tfaXJxc2F2ZShkZXYtPnF1ZXVlcy0+cXVldWVbSG9zdE5vcm1DbWRRdWV1ZV0ubG9jaywgZmxhZ3MpOwogCQl9CiAJCS8qCiAJCSAqCVRoZXJlIGFyZSBubyBtb3JlIEFJRidzCiAJCSAqLwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHF1ZXVlcy0+cXVldWVbSG9zdE5vcm1DbWRRdWV1ZV0ubG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGRldi0+cXVldWVzLT5xdWV1ZVtIb3N0Tm9ybUNtZFF1ZXVlXS5sb2NrLCBmbGFncyk7CiAJCXNjaGVkdWxlKCk7CiAKIAkJaWYoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQlicmVhazsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAl9Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJnF1ZXVlcy0+cXVldWVbSG9zdE5vcm1DbWRRdWV1ZV0uY21kcmVhZHksICZ3YWl0KTsKKwlpZiAoZGV2LT5xdWV1ZXMpCisJCXJlbW92ZV93YWl0X3F1ZXVlKCZkZXYtPnF1ZXVlcy0+cXVldWVbSG9zdE5vcm1DbWRRdWV1ZV0uY21kcmVhZHksICZ3YWl0KTsKIAlkZXYtPmFpZl90aHJlYWQgPSAwOwogCWNvbXBsZXRlX2FuZF9leGl0KCZkZXYtPmFpZl9jb21wbGV0aW9uLCAwKTsKKwlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2xpbml0LmMgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9saW5pdC5jCmluZGV4IDRmZjI5ZDcuLmExZjljZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2xpbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvbGluaXQuYwpAQCAtNDUzLDkgKzQ1Myw5IEBACiAJCS8qCiAJCSAqIFdlIGNhbiBleGl0IElmIGFsbCB0aGUgY29tbWFuZHMgYXJlIGNvbXBsZXRlCiAJCSAqLworCQlzcGluX3VubG9ja19pcnEoaG9zdC0+aG9zdF9sb2NrKTsKIAkJaWYgKGFjdGl2ZSA9PSAwKQogCQkJcmV0dXJuIFNVQ0NFU1M7Ci0JCXNwaW5fdW5sb2NrX2lycShob3N0LT5ob3N0X2xvY2spOwogCQlzc2xlZXAoMSk7CiAJCXNwaW5fbG9ja19pcnEoaG9zdC0+aG9zdF9sb2NrKTsKIAl9CkBAIC03NDgsNyArNzQ4LDggQEAKIAkJdW5pcXVlX2lkKys7CiAJfQogCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKQorCWVycm9yID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKIAogCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIDB4RkZGRkZGRkZVTEwpIHx8IApAQCAtNzcyLDYgKzc3Myw3IEBACiAJc2hvc3QtPmlycSA9IHBkZXYtPmlycTsKIAlzaG9zdC0+YmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKIAlzaG9zdC0+dW5pcXVlX2lkID0gdW5pcXVlX2lkOworCXNob3N0LT5tYXhfY21kX2xlbiA9IDE2OwogCiAJYWFjID0gKHN0cnVjdCBhYWNfZGV2ICopc2hvc3QtPmhvc3RkYXRhOwogCWFhYy0+c2NzaV9ob3N0X3B0ciA9IHNob3N0OwkKQEAgLTc5OSw3ICs4MDEsOSBAQAogCQkJZ290byBvdXRfZnJlZV9maWJzOwogCiAJYWFjLT5tYXhpbXVtX251bV9jaGFubmVscyA9IGFhY19kcml2ZXJzW2luZGV4XS5jaGFubmVsczsKLQlhYWNfZ2V0X2FkYXB0ZXJfaW5mbyhhYWMpOworCWVycm9yID0gYWFjX2dldF9hZGFwdGVyX2luZm8oYWFjKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlnb3RvIG91dF9kZWluaXQ7CiAKIAkvKgogIAkgKiBMZXRzIG92ZXJyaWRlIG5lZ290aWF0aW9ucyBhbmQgZHJvcCB0aGUgbWF4aW11bSBTRyBsaW1pdCB0byAzNApAQCAtOTI3LDggKzkzMSw4IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiQWRhcHRlYyAlcyBkcml2ZXIgKCVzKVxuIiwKIAkgIEFBQ19EUklWRVJOQU1FLCBhYWNfZHJpdmVyX3ZlcnNpb24pOwogCi0JZXJyb3IgPSBwY2lfbW9kdWxlX2luaXQoJmFhY19wY2lfZHJpdmVyKTsKLQlpZiAoZXJyb3IpCisJZXJyb3IgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhYWNfcGNpX2RyaXZlcik7CisJaWYgKGVycm9yIDwgMCkKIAkJcmV0dXJuIGVycm9yOwogCiAJYWFjX2NmZ19tYWpvciA9IHJlZ2lzdGVyX2NocmRldiggMCwgImFhYyIsICZhYWNfY2ZnX2ZvcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzc3MF9vc20uYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc3NzBfb3NtLmMKaW5kZXggNzBjNWZiNS4uZDc1NGIzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzc3MF9vc20uYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3NzcwX29zbS5jCkBAIC0xMTIsNiArMTEyLDkgQEAKIAlzdHJ1Y3QgYWhjX3NvZnRjICphaGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAl1X2xvbmcgczsKIAorCWlmIChhaGMtPnBsYXRmb3JtX2RhdGEgJiYgYWhjLT5wbGF0Zm9ybV9kYXRhLT5ob3N0KQorCQkJc2NzaV9yZW1vdmVfaG9zdChhaGMtPnBsYXRmb3JtX2RhdGEtPmhvc3QpOworCiAJYWhjX2xvY2soYWhjLCAmcyk7CiAJYWhjX2ludHJfZW5hYmxlKGFoYywgRkFMU0UpOwogCWFoY191bmxvY2soYWhjLCAmcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uYwppbmRleCA2YjZkNGUyLi45NWMyODVjYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uYwpAQCAtMTE5MiwxMSArMTE5Miw2IEBACiAJaW50IGksIGo7CiAKIAlpZiAoYWhkLT5wbGF0Zm9ybV9kYXRhICE9IE5VTEwpIHsKLQkJaWYgKGFoZC0+cGxhdGZvcm1fZGF0YS0+aG9zdCAhPSBOVUxMKSB7Ci0JCQlzY3NpX3JlbW92ZV9ob3N0KGFoZC0+cGxhdGZvcm1fZGF0YS0+aG9zdCk7Ci0JCQlzY3NpX2hvc3RfcHV0KGFoZC0+cGxhdGZvcm1fZGF0YS0+aG9zdCk7Ci0JCX0KLQogCQkvKiBkZXN0cm95IGFsbCBvZiB0aGUgZGV2aWNlIGFuZCB0YXJnZXQgb2JqZWN0cyAqLwogCQlmb3IgKGkgPSAwOyBpIDwgQUhEX05VTV9UQVJHRVRTOyBpKyspIHsKIAkJCXN0YXJnZXQgPSBhaGQtPnBsYXRmb3JtX2RhdGEtPnN0YXJnZXRbaV07CkBAIC0xMjI2LDYgKzEyMjEsOSBAQAogCQkJcmVsZWFzZV9tZW1fcmVnaW9uKGFoZC0+cGxhdGZvcm1fZGF0YS0+bWVtX2J1c2FkZHIsCiAJCQkJCSAgIDB4MTAwMCk7CiAJCX0KKwkJaWYgKGFoZC0+cGxhdGZvcm1fZGF0YS0+aG9zdCkKKwkJCXNjc2lfaG9zdF9wdXQoYWhkLT5wbGF0Zm9ybV9kYXRhLT5ob3N0KTsKKwogCQlmcmVlKGFoZC0+cGxhdGZvcm1fZGF0YSwgTV9ERVZCVUYpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtX3BjaS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc21fcGNpLmMKaW5kZXggMzkwYjUzOC4uYmYzNjBhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc21fcGNpLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc21fcGNpLmMKQEAgLTk1LDYgKzk1LDkgQEAKIAlzdHJ1Y3QgYWhkX3NvZnRjICphaGQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJdV9sb25nIHM7CiAKKwlpZiAoYWhkLT5wbGF0Zm9ybV9kYXRhICYmIGFoZC0+cGxhdGZvcm1fZGF0YS0+aG9zdCkKKwkJCXNjc2lfcmVtb3ZlX2hvc3QoYWhkLT5wbGF0Zm9ybV9kYXRhLT5ob3N0KTsKKwogCWFoZF9sb2NrKGFoZCwgJnMpOwogCWFoZF9pbnRyX2VuYWJsZShhaGQsIEZBTFNFKTsKIAlhaGRfdW5sb2NrKGFoZCwgJnMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmMKaW5kZXggYzkzMmIzYi4uNmVlMTQzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5jCkBAIC0xMTA5LDE1ICsxMTA5LDYgQEAKIAlyZXR1cm4gKDApOwogfQogCi11aW50NjRfdAotYWhjX2xpbnV4X2dldF9tZW1zaXplKHZvaWQpCi17Ci0Jc3RydWN0IHN5c2luZm8gc2k7Ci0KLQlzaV9tZW1pbmZvKCZzaSk7Ci0JcmV0dXJuICgodWludDY0X3Qpc2kudG90YWxyYW0gPDwgUEFHRV9TSElGVCk7Ci19Ci0KIC8qCiAgKiBQbGFjZSB0aGUgU0NTSSBidXMgaW50byBhIGtub3duIHN0YXRlIGJ5IGVpdGhlciByZXNldHRpbmcgaXQsCiAgKiBvciBmb3JjaW5nIHRyYW5zZmVyIG5lZ290aWF0aW9ucyBvbiB0aGUgbmV4dCBjb21tYW5kIHRvIGFueQpAQCAtMTIxOCwxMSArMTIwOSw2IEBACiAJaW50IGksIGo7CiAKIAlpZiAoYWhjLT5wbGF0Zm9ybV9kYXRhICE9IE5VTEwpIHsKLQkJaWYgKGFoYy0+cGxhdGZvcm1fZGF0YS0+aG9zdCAhPSBOVUxMKSB7Ci0JCQlzY3NpX3JlbW92ZV9ob3N0KGFoYy0+cGxhdGZvcm1fZGF0YS0+aG9zdCk7Ci0JCQlzY3NpX2hvc3RfcHV0KGFoYy0+cGxhdGZvcm1fZGF0YS0+aG9zdCk7Ci0JCX0KLQogCQkvKiBkZXN0cm95IGFsbCBvZiB0aGUgZGV2aWNlIGFuZCB0YXJnZXQgb2JqZWN0cyAqLwogCQlmb3IgKGkgPSAwOyBpIDwgQUhDX05VTV9UQVJHRVRTOyBpKyspIHsKIAkJCXN0YXJnZXQgPSBhaGMtPnBsYXRmb3JtX2RhdGEtPnN0YXJnZXRbaV07CkBAIC0xMjUxLDYgKzEyMzcsOSBAQAogCQkJCQkgICAweDEwMDApOwogCQl9CiAKKwkJaWYgKGFoYy0+cGxhdGZvcm1fZGF0YS0+aG9zdCkKKwkJCXNjc2lfaG9zdF9wdXQoYWhjLT5wbGF0Zm9ybV9kYXRhLT5ob3N0KTsKKwogCQlmcmVlKGFoYy0+cGxhdGZvcm1fZGF0YSwgTV9ERVZCVUYpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmggYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5oCmluZGV4IGM1Mjk5NjIuLmJlOWVkYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmgKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uaApAQCAtNDk0LDggKzQ5NCw2IEBACiBpbnQJCWFoY19saW51eF9yZWdpc3Rlcl9ob3N0KHN0cnVjdCBhaGNfc29mdGMgKiwKIAkJCQkJc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqKTsKIAotdWludDY0X3QJYWhjX2xpbnV4X2dldF9tZW1zaXplKHZvaWQpOwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqIFByZXR0eSBQcmludGluZyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RydWN0IGluZm9fc3RyIHsKIAljaGFyICpidWZmZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbV9wY2kuYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtX3BjaS5jCmluZGV4IDBkNDRhNjkuLmNiMzBkOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtX3BjaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtX3BjaS5jCkBAIC0xNDMsNiArMTQzLDkgQEAKIAlzdHJ1Y3QgYWhjX3NvZnRjICphaGMgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJdV9sb25nIHM7CiAKKwlpZiAoYWhjLT5wbGF0Zm9ybV9kYXRhICYmIGFoYy0+cGxhdGZvcm1fZGF0YS0+aG9zdCkKKwkJCXNjc2lfcmVtb3ZlX2hvc3QoYWhjLT5wbGF0Zm9ybV9kYXRhLT5ob3N0KTsKKwogCWFoY19sb2NrKGFoYywgJnMpOwogCWFoY19pbnRyX2VuYWJsZShhaGMsIEZBTFNFKTsKIAlhaGNfdW5sb2NrKGFoYywgJnMpOwpAQCAtMTgwLDYgKzE4Myw3IEBACiAJc3RydWN0CQkgYWhjX3BjaV9pZGVudGl0eSAqZW50cnk7CiAJY2hhcgkJKm5hbWU7CiAJaW50CQkgZXJyb3I7CisJc3RydWN0IGRldmljZQkqZGV2ID0gJnBkZXYtPmRldjsKIAogCXBjaSA9IHBkZXY7CiAJZW50cnkgPSBhaGNfZmluZF9wY2lfZGV2aWNlKHBjaSk7CkBAIC0yMDksMTEgKzIxMywxMiBAQAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCiAJaWYgKHNpemVvZihkbWFfYWRkcl90KSA+IDQKLQkgJiYgYWhjX2xpbnV4X2dldF9tZW1zaXplKCkgPiAweDgwMDAwMDAwCi0JICYmIHBjaV9zZXRfZG1hX21hc2socGRldiwgbWFza18zOWJpdCkgPT0gMCkgeworCSAgICAmJiBhaGMtPmZlYXR1cmVzICYgQUhDX0xBUkdFX1NDQlMKKwkgICAgJiYgZG1hX3NldF9tYXNrKGRldiwgbWFza18zOWJpdCkgPT0gMAorCSAgICAmJiBkbWFfZ2V0X3JlcXVpcmVkX21hc2soZGV2KSA+IERNQV8zMkJJVF9NQVNLKSB7CiAJCWFoYy0+ZmxhZ3MgfD0gQUhDXzM5QklUX0FERFJFU1NJTkc7CiAJfSBlbHNlIHsKLQkJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spKSB7CisJCWlmIChkbWFfc2V0X21hc2soZGV2LCBETUFfMzJCSVRfTUFTSykpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgImFpYzd4eHg6IE5vIHN1aXRhYmxlIERNQSBhdmFpbGFibGUuXG4iKTsKICAgICAgICAgICAgICAgICAJcmV0dXJuICgtRU5PREVWKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2F0YV9waWl4LmMgYi9kcml2ZXJzL3Njc2kvYXRhX3BpaXguYwppbmRleCA4N2UwYzM2Li5kNzFjZWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXRhX3BpaXguYworKysgYi9kcml2ZXJzL3Njc2kvYXRhX3BpaXguYwpAQCAtNDQyLDcgKzQ0Miw2IEBACiAgKglwaWl4X3NldF9waW9tb2RlIC0gSW5pdGlhbGl6ZSBob3N0IGNvbnRyb2xsZXIgUEFUQSBQSU8gdGltaW5ncwogICoJQGFwOiBQb3J0IHdob3NlIHRpbWluZ3Mgd2UgYXJlIGNvbmZpZ3VyaW5nCiAgKglAYWRldjogdW0KLSAqCUBwaW86IFBJTyBtb2RlLCAwIC0gNAogICoKICAqCVNldCBQSU8gbW9kZSBmb3IgZGV2aWNlLCBpbiBob3N0IGNvbnRyb2xsZXIgUENJIGNvbmZpZyBzcGFjZS4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXRwODcwdS5jIGIvZHJpdmVycy9zY3NpL2F0cDg3MHUuYwppbmRleCBlNjE1M2ZlLi5hOGNmYmVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXRwODcwdS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hdHA4NzB1LmMKQEAgLTk5Niw2ICs5OTYsNyBAQAogI2lmZGVmIEVEX0RCR1AJCQogCXByaW50aygic2VuZF9zODcwOiBwcmRhZGRyXzIgMHglOHggdG1wY2lwICV4IHRhcmdldF9pZCAlZFxuIiwgZGV2LT5pZFtjXVt0YXJnZXRfaWRdLnByZGFkZHIsdG1wY2lwLHRhcmdldF9pZCk7CiAjZW5kaWYJCisJZGV2LT5pZFtjXVt0YXJnZXRfaWRdLnByZGFkZHIgPSBkZXYtPmlkW2NdW3RhcmdldF9pZF0ucHJkX2J1czsKIAlvdXRsKGRldi0+aWRbY11bdGFyZ2V0X2lkXS5wcmRhZGRyLCB0bXBjaXApOwogCXRtcGNpcCA9IHRtcGNpcCAtIDI7CiAJb3V0YigweDA2LCB0bXBjaXApOwpAQCAtMjU3Miw3ICsyNTczLDcgQEAKIAkJZm9yIChrID0gMDsgayA8IDE2OyBrKyspIHsKIAkJCWlmICghYXRwX2Rldi0+aWRbal1ba10ucHJkX3RhYmxlKQogCQkJCWNvbnRpbnVlOwotCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhdHBfZGV2LT5wZGV2LCAxMDI0LCBhdHBfZGV2LT5pZFtqXVtrXS5wcmRfdGFibGUsIGF0cF9kZXYtPmlkW2pdW2tdLnByZGFkZHIpOworCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhdHBfZGV2LT5wZGV2LCAxMDI0LCBhdHBfZGV2LT5pZFtqXVtrXS5wcmRfdGFibGUsIGF0cF9kZXYtPmlkW2pdW2tdLnByZF9idXMpOwogCQkJYXRwX2Rldi0+aWRbal1ba10ucHJkX3RhYmxlID0gTlVMTDsKIAkJfQogCX0KQEAgLTI1ODQsMTIgKzI1ODUsMTMgQEAKIAlpbnQgYyxrOwogCWZvcihjPTA7YyA8IDI7YysrKSB7CiAJICAgCWZvcihrPTA7azwxNjtrKyspIHsKLQkgICAJCQlhdHBfZGV2LT5pZFtjXVtrXS5wcmRfdGFibGUgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhdHBfZGV2LT5wZGV2LCAxMDI0LCAmKGF0cF9kZXYtPmlkW2NdW2tdLnByZGFkZHIpKTsKKwkgICAJCQlhdHBfZGV2LT5pZFtjXVtrXS5wcmRfdGFibGUgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhdHBfZGV2LT5wZGV2LCAxMDI0LCAmKGF0cF9kZXYtPmlkW2NdW2tdLnByZF9idXMpKTsKIAkgICAJCQlpZiAoIWF0cF9kZXYtPmlkW2NdW2tdLnByZF90YWJsZSkgewogCSAgIAkJCQlwcmludGsoImF0cDg3MHVfaW5pdF90YWJsZXMgZmFpbFxuIik7CiAJCQkJYXRwODcwdV9mcmVlX3RhYmxlcyhob3N0KTsKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCX0KKwkJCWF0cF9kZXYtPmlkW2NdW2tdLnByZGFkZHIgPSBhdHBfZGV2LT5pZFtjXVtrXS5wcmRfYnVzOwogCQkJYXRwX2Rldi0+aWRbY11ba10uZGV2c3A9MHgyMDsKIAkJCWF0cF9kZXYtPmlkW2NdW2tdLmRldnR5cGUgPSAweDdmOwogCQkJYXRwX2Rldi0+aWRbY11ba10uY3Vycl9yZXEgPSBOVUxMOwkJCSAgIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2F0cDg3MHUuaCBiL2RyaXZlcnMvc2NzaS9hdHA4NzB1LmgKaW5kZXggODlmNDNhZi4uNjJiYWU2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2F0cDg3MHUuaAorKysgYi9kcml2ZXJzL3Njc2kvYXRwODcwdS5oCkBAIC01NCw4ICs1NCw5IEBACiAJCXVuc2lnbmVkIGxvbmcgdHJhbl9sZW47CiAJCXVuc2lnbmVkIGxvbmcgbGFzdF9sZW47CiAJCXVuc2lnbmVkIGNoYXIgKnByZF9wb3M7Ci0JCXVuc2lnbmVkIGNoYXIgKnByZF90YWJsZTsKLQkJZG1hX2FkZHJfdCBwcmRhZGRyOworCQl1bnNpZ25lZCBjaGFyICpwcmRfdGFibGU7CS8qIEtlcm5lbCBhZGRyZXNzIG9mIFBSRCB0YWJsZSAqLworCQlkbWFfYWRkcl90IHByZF9idXM7CQkvKiBCdXMgYWRkcmVzcyBvZiBQUkQgKi8KKwkJZG1hX2FkZHJfdCBwcmRhZGRyOwkJLyogRHluYW1pY2FsbHkgdXBkYXRlZCBpbiBkcml2ZXIgKi8KIAkJc3RydWN0IHNjc2lfY21uZCAqY3Vycl9yZXE7CiAJfSBpZFsyXVsxNl07CiAgICAgCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZmRfbWNzLmMgYi9kcml2ZXJzL3Njc2kvZmRfbWNzLmMKaW5kZXggZmE2NTJmOGEuLmQ1OWQ0NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mZF9tY3MuYworKysgYi9kcml2ZXJzL3Njc2kvZmRfbWNzLmMKQEAgLTEzNjAsMyArMTM2MCw1IEBACiAJLnVzZV9jbHVzdGVyaW5nIAkJPSBESVNBQkxFX0NMVVNURVJJTkcsCiB9OwogI2luY2x1ZGUgInNjc2lfbW9kdWxlLmMiCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ob3N0cy5jIGIvZHJpdmVycy9zY3NpL2hvc3RzLmMKaW5kZXggODU1MDNmYS4uMDJmZTM3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2hvc3RzLmMKKysrIGIvZHJpdmVycy9zY3NpL2hvc3RzLmMKQEAgLTk4LDYgKzk4LDcgQEAKIAkJc3dpdGNoIChvbGRzdGF0ZSkgewogCQljYXNlIFNIT1NUX0NSRUFURUQ6CiAJCWNhc2UgU0hPU1RfUlVOTklORzoKKwkJY2FzZSBTSE9TVF9DQU5DRUxfUkVDT1ZFUlk6CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWdvdG8gaWxsZWdhbDsKQEAgLTEwNywxMiArMTA4LDMxIEBACiAJY2FzZSBTSE9TVF9ERUw6CiAJCXN3aXRjaCAob2xkc3RhdGUpIHsKIAkJY2FzZSBTSE9TVF9DQU5DRUw6CisJCWNhc2UgU0hPU1RfREVMX1JFQ09WRVJZOgogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlnb3RvIGlsbGVnYWw7CiAJCX0KIAkJYnJlYWs7CiAKKwljYXNlIFNIT1NUX0NBTkNFTF9SRUNPVkVSWToKKwkJc3dpdGNoIChvbGRzdGF0ZSkgeworCQljYXNlIFNIT1NUX0NBTkNFTDoKKwkJY2FzZSBTSE9TVF9SRUNPVkVSWToKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBpbGxlZ2FsOworCQl9CisJCWJyZWFrOworCisJY2FzZSBTSE9TVF9ERUxfUkVDT1ZFUlk6CisJCXN3aXRjaCAob2xkc3RhdGUpIHsKKwkJY2FzZSBTSE9TVF9DQU5DRUxfUkVDT1ZFUlk6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gaWxsZWdhbDsKKwkJfQorCQlicmVhazsKIAl9CiAJc2hvc3QtPnNob3N0X3N0YXRlID0gc3RhdGU7CiAJcmV0dXJuIDA7CkBAIC0xMzQsMTcgKzE1NCwyOSBAQAogICoqLwogdm9pZCBzY3NpX3JlbW92ZV9ob3N0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJZG93bigmc2hvc3QtPnNjYW5fbXV0ZXgpOwotCXNjc2lfaG9zdF9zZXRfc3RhdGUoc2hvc3QsIFNIT1NUX0NBTkNFTCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCWlmIChzY3NpX2hvc3Rfc2V0X3N0YXRlKHNob3N0LCBTSE9TVF9DQU5DRUwpKQorCQlpZiAoc2NzaV9ob3N0X3NldF9zdGF0ZShzaG9zdCwgU0hPU1RfQ0FOQ0VMX1JFQ09WRVJZKSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCQl1cCgmc2hvc3QtPnNjYW5fbXV0ZXgpOworCQkJcmV0dXJuOworCQl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJdXAoJnNob3N0LT5zY2FuX211dGV4KTsKIAlzY3NpX2ZvcmdldF9ob3N0KHNob3N0KTsKIAlzY3NpX3Byb2NfaG9zdF9ybShzaG9zdCk7CiAKLQlzY3NpX2hvc3Rfc2V0X3N0YXRlKHNob3N0LCBTSE9TVF9ERUwpOworCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwlpZiAoc2NzaV9ob3N0X3NldF9zdGF0ZShzaG9zdCwgU0hPU1RfREVMKSkKKwkJQlVHX09OKHNjc2lfaG9zdF9zZXRfc3RhdGUoc2hvc3QsIFNIT1NUX0RFTF9SRUNPVkVSWSkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCiAJdHJhbnNwb3J0X3VucmVnaXN0ZXJfZGV2aWNlKCZzaG9zdC0+c2hvc3RfZ2VuZGV2KTsKIAljbGFzc19kZXZpY2VfdW5yZWdpc3Rlcigmc2hvc3QtPnNob3N0X2NsYXNzZGV2KTsKIAlkZXZpY2VfZGVsKCZzaG9zdC0+c2hvc3RfZ2VuZGV2KTsKKwlzY3NpX3Byb2NfaG9zdGRpcl9ybShzaG9zdC0+aG9zdHQpOwogfQogRVhQT1JUX1NZTUJPTChzY3NpX3JlbW92ZV9ob3N0KTsKIApAQCAtMjMxLDcgKzI2Myw2IEBACiAJaWYgKHNob3N0LT53b3JrX3EpCiAJCWRlc3Ryb3lfd29ya3F1ZXVlKHNob3N0LT53b3JrX3EpOwogCi0Jc2NzaV9wcm9jX2hvc3RkaXJfcm0oc2hvc3QtPmhvc3R0KTsKIAlzY3NpX2Rlc3Ryb3lfY29tbWFuZF9mcmVlbGlzdChzaG9zdCk7CiAJa2ZyZWUoc2hvc3QtPnNob3N0X2RhdGEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaWJtbWNhLmMgYi9kcml2ZXJzL3Njc2kvaWJtbWNhLmMKaW5kZXggNmU1NGM3ZC4uMTkzOTJmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2libW1jYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9pYm1tY2EuYwpAQCAtNDYwLDYgKzQ2MCw4IEBACiBNT0RVTEVfUEFSTShub3JtYWwsICIxaSIpOwogTU9EVUxFX1BBUk0oYW5zaSwgIjFpIik7CiAjZW5kaWYKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogI2VuZGlmCiAvKmNvdW50ZXIgb2YgY29uY3VycmVudCBkaXNrIHJlYWQvd3JpdGVzLCB0byB0dXJuIG9uL29mZiBkaXNrIGxlZCAqLwogc3RhdGljIGludCBkaXNrX3J3X2luX3Byb2dyZXNzID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12c2NzaS5jIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMKaW5kZXggNWIxNDkzNC4uZmYyNTIxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMKQEAgLTcyNyw2ICs3MjcsMTYgQEAKIAkJaWYgKGhvc3RkYXRhLT5tYWRhcHRlcl9pbmZvLnBvcnRfbWF4X3R4dVswXSkgCiAJCQlob3N0ZGF0YS0+aG9zdC0+bWF4X3NlY3RvcnMgPSAKIAkJCQlob3N0ZGF0YS0+bWFkYXB0ZXJfaW5mby5wb3J0X21heF90eHVbMF0gPj4gOTsKKwkJCisJCWlmIChob3N0ZGF0YS0+bWFkYXB0ZXJfaW5mby5vc190eXBlID09IDMgJiYKKwkJICAgIHN0cmNtcChob3N0ZGF0YS0+bWFkYXB0ZXJfaW5mby5zcnBfdmVyc2lvbiwgIjEuNmEiKSA8PSAwKSB7CisJCQlwcmludGsoImlibXZzY3NpOiBob3N0IChWZXIuICVzKSBkb2Vzbid0IHN1cHBvcnQgbGFyZ2UiCisJCQkgICAgICAgInRyYW5zZmVyc1xuIiwKKwkJCSAgICAgICBob3N0ZGF0YS0+bWFkYXB0ZXJfaW5mby5zcnBfdmVyc2lvbik7CisJCQlwcmludGsoImlibXZzY3NpOiBsaW1pdGluZyBzY2F0dGVybGlzdHMgdG8gJWRcbiIsCisJCQkgICAgICAgTUFYX0lORElSRUNUX0JVRlMpOworCQkJaG9zdGRhdGEtPmhvc3QtPnNnX3RhYmxlc2l6ZSA9IE1BWF9JTkRJUkVDVF9CVUZTOworCQl9CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliYXRhLWNvcmUuYyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCmluZGV4IDVjYzUzY2QuLmU1YjAxOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCkBAIC0yNDY1LDkgKzI0NjUsMTIgQEAKICAqCiAgKglMT0NLSU5HOgogICoJTm9uZS4gIChleGVjdXRpbmcgaW4ga2VybmVsIHRocmVhZCBjb250ZXh0KQorICoKKyAqCVJFVFVSTlM6CisgKglOb24temVybyBpZiBxYyBjb21wbGV0ZWQsIHplcm8gb3RoZXJ3aXNlLgogICovCiAKLXN0YXRpYyB2b2lkIGF0YV9waW9fY29tcGxldGUgKHN0cnVjdCBhdGFfcG9ydCAqYXApCitzdGF0aWMgaW50IGF0YV9waW9fY29tcGxldGUgKHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7CiAJc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYzsKIAl1OCBkcnZfc3RhdDsKQEAgLTI0ODYsMTQgKzI0ODksMTQgQEAKIAkJaWYgKGRydl9zdGF0ICYgKEFUQV9CVVNZIHwgQVRBX0RSUSkpIHsKIAkJCWFwLT5waW9fdGFza19zdGF0ZSA9IFBJT19TVF9MQVNUX1BPTEw7CiAJCQlhcC0+cGlvX3Rhc2tfdGltZW91dCA9IGppZmZpZXMgKyBBVEFfVE1PVVRfUElPOwotCQkJcmV0dXJuOworCQkJcmV0dXJuIDA7CiAJCX0KIAl9CiAKIAlkcnZfc3RhdCA9IGF0YV93YWl0X2lkbGUoYXApOwogCWlmICghYXRhX29rKGRydl9zdGF0KSkgewogCQlhcC0+cGlvX3Rhc2tfc3RhdGUgPSBQSU9fU1RfRVJSOwotCQlyZXR1cm47CisJCXJldHVybiAwOwogCX0KIAogCXFjID0gYXRhX3FjX2Zyb21fdGFnKGFwLCBhcC0+YWN0aXZlX3RhZyk7CkBAIC0yNTAyLDYgKzI1MDUsMTAgQEAKIAlhcC0+cGlvX3Rhc2tfc3RhdGUgPSBQSU9fU1RfSURMRTsKIAogCWF0YV9wb2xsX3FjX2NvbXBsZXRlKHFjLCBkcnZfc3RhdCk7CisKKwkvKiBhbm90aGVyIGNvbW1hbmQgbWF5IHN0YXJ0IGF0IHRoaXMgcG9pbnQgKi8KKworCXJldHVybiAxOwogfQogCiAKQEAgLTI3MDksNyArMjcxNiw3IEBACiAKIG5leHRfc2c6CiAJaWYgKHVubGlrZWx5KHFjLT5jdXJzZyA+PSBxYy0+bl9lbGVtKSkgewotCQkvKiAKKwkJLyoKIAkJICogVGhlIGVuZCBvZiBxYy0+c2cgaXMgcmVhY2hlZCBhbmQgdGhlIGRldmljZSBleHBlY3RzCiAJCSAqIG1vcmUgZGF0YSB0byB0cmFuc2Zlci4gSW4gb3JkZXIgbm90IHRvIG92ZXJydW4gcWMtPnNnCiAJCSAqIGFuZCBmdWxmaWxsIGxlbmd0aCBzcGVjaWZpZWQgaW4gdGhlIGJ5dGUgY291bnQgcmVnaXN0ZXIsCkBAIC0yNzIxLDcgKzI3MjgsNyBAQAogCQl1bnNpZ25lZCBpbnQgaTsKIAogCQlpZiAod29yZHMpIC8qIHdhcm5pbmcgaWYgYnl0ZXMgPiAxICovCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJhdGEldTogJXUgYnl0ZXMgdHJhaWxpbmcgZGF0YVxuIiwgCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJhdGEldTogJXUgYnl0ZXMgdHJhaWxpbmcgZGF0YVxuIiwKIAkJCSAgICAgICBhcC0+aWQsIGJ5dGVzKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgd29yZHM7IGkrKykKQEAgLTI4NDksOSArMjg1Niw3IEBACiAJaWYgKGlzX2F0YXBpX3Rhc2tmaWxlKCZxYy0+dGYpKSB7CiAJCS8qIG5vIG1vcmUgZGF0YSB0byB0cmFuc2ZlciBvciB1bnN1cHBvcnRlZCBBVEFQSSBjb21tYW5kICovCiAJCWlmICgoc3RhdHVzICYgQVRBX0RSUSkgPT0gMCkgewotCQkJYXAtPnBpb190YXNrX3N0YXRlID0gUElPX1NUX0lETEU7Ci0KLQkJCWF0YV9wb2xsX3FjX2NvbXBsZXRlKHFjLCBzdGF0dXMpOworCQkJYXAtPnBpb190YXNrX3N0YXRlID0gUElPX1NUX0xBU1Q7CiAJCQlyZXR1cm47CiAJCX0KIApAQCAtMjg4Nyw3ICsyODkyLDEyIEBACiBzdGF0aWMgdm9pZCBhdGFfcGlvX3Rhc2sodm9pZCAqX2RhdGEpCiB7CiAJc3RydWN0IGF0YV9wb3J0ICphcCA9IF9kYXRhOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDA7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCWludCBxY19jb21wbGV0ZWQ7CisKK2ZzbV9zdGFydDoKKwl0aW1lb3V0ID0gMDsKKwlxY19jb21wbGV0ZWQgPSAwOwogCiAJc3dpdGNoIChhcC0+cGlvX3Rhc2tfc3RhdGUpIHsKIAljYXNlIFBJT19TVF9JRExFOgpAQCAtMjg5OCw3ICsyOTA4LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFBJT19TVF9MQVNUOgotCQlhdGFfcGlvX2NvbXBsZXRlKGFwKTsKKwkJcWNfY29tcGxldGVkID0gYXRhX3Bpb19jb21wbGV0ZShhcCk7CiAJCWJyZWFrOwogCiAJY2FzZSBQSU9fU1RfUE9MTDoKQEAgLTI5MTMsMTAgKzI5MjMsOSBAQAogCX0KIAogCWlmICh0aW1lb3V0KQotCQlxdWV1ZV9kZWxheWVkX3dvcmsoYXRhX3dxLCAmYXAtPnBpb190YXNrLAotCQkJCSAgIHRpbWVvdXQpOwotCWVsc2UKLQkJcXVldWVfd29yayhhdGFfd3EsICZhcC0+cGlvX3Rhc2spOworCQlxdWV1ZV9kZWxheWVkX3dvcmsoYXRhX3dxLCAmYXAtPnBpb190YXNrLCB0aW1lb3V0KTsKKwllbHNlIGlmICghcWNfY29tcGxldGVkKQorCQlnb3RvIGZzbV9zdGFydDsKIH0KIAogc3RhdGljIHZvaWQgYXRhcGlfcmVxdWVzdF9zZW5zZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LApAQCAtNDEyMyw2ICs0MTMyLDUzIEBACiB9CiAKIC8qKgorICoJYXRhX2hvc3Rfc2V0X3JlbW92ZSAtIFBDSSBsYXllciBjYWxsYmFjayBmb3IgZGV2aWNlIHJlbW92YWwKKyAqCUBob3N0X3NldDogQVRBIGhvc3Qgc2V0IHRoYXQgd2FzIHJlbW92ZWQKKyAqCisgKglVbnJlZ2lzdGVyIGFsbCBvYmplY3RzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGhvc3Qgc2V0LiBGcmVlIHRob3NlIAorICoJb2JqZWN0cy4KKyAqCisgKglMT0NLSU5HOgorICoJSW5oZXJpdGVkIGZyb20gY2FsbGluZyBsYXllciAobWF5IHNsZWVwKS4KKyAqLworCisKK3ZvaWQgYXRhX2hvc3Rfc2V0X3JlbW92ZShzdHJ1Y3QgYXRhX2hvc3Rfc2V0ICpob3N0X3NldCkKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwOworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IGhvc3Rfc2V0LT5uX3BvcnRzOyBpKyspIHsKKwkJYXAgPSBob3N0X3NldC0+cG9ydHNbaV07CisJCXNjc2lfcmVtb3ZlX2hvc3QoYXAtPmhvc3QpOworCX0KKworCWZyZWVfaXJxKGhvc3Rfc2V0LT5pcnEsIGhvc3Rfc2V0KTsKKworCWZvciAoaSA9IDA7IGkgPCBob3N0X3NldC0+bl9wb3J0czsgaSsrKSB7CisJCWFwID0gaG9zdF9zZXQtPnBvcnRzW2ldOworCisJCWF0YV9zY3NpX3JlbGVhc2UoYXAtPmhvc3QpOworCisJCWlmICgoYXAtPmZsYWdzICYgQVRBX0ZMQUdfTk9fTEVHQUNZKSA9PSAwKSB7CisJCQlzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkciA9ICZhcC0+aW9hZGRyOworCisJCQlpZiAoaW9hZGRyLT5jbWRfYWRkciA9PSAweDFmMCkKKwkJCQlyZWxlYXNlX3JlZ2lvbigweDFmMCwgOCk7CisJCQllbHNlIGlmIChpb2FkZHItPmNtZF9hZGRyID09IDB4MTcwKQorCQkJCXJlbGVhc2VfcmVnaW9uKDB4MTcwLCA4KTsKKwkJfQorCisJCXNjc2lfaG9zdF9wdXQoYXAtPmhvc3QpOworCX0KKworCWlmIChob3N0X3NldC0+b3BzLT5ob3N0X3N0b3ApCisJCWhvc3Rfc2V0LT5vcHMtPmhvc3Rfc3RvcChob3N0X3NldCk7CisKKwlrZnJlZShob3N0X3NldCk7Cit9CisKKy8qKgogICoJYXRhX3Njc2lfcmVsZWFzZSAtIFNDU0kgbGF5ZXIgY2FsbGJhY2sgaG9vayBmb3IgaG9zdCB1bmxvYWQKICAqCUBob3N0OiBsaWJhdGEgaG9zdCB0byBiZSB1bmxvYWRlZAogICoKQEAgLTQ0NjIsMzkgKzQ1MTgsOCBAQAogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBjaV9kZXZfdG9fZGV2KHBkZXYpOwogCXN0cnVjdCBhdGFfaG9zdF9zZXQgKmhvc3Rfc2V0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGF0YV9wb3J0ICphcDsKLQl1bnNpZ25lZCBpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBob3N0X3NldC0+bl9wb3J0czsgaSsrKSB7Ci0JCWFwID0gaG9zdF9zZXQtPnBvcnRzW2ldOwotCi0JCXNjc2lfcmVtb3ZlX2hvc3QoYXAtPmhvc3QpOwotCX0KLQotCWZyZWVfaXJxKGhvc3Rfc2V0LT5pcnEsIGhvc3Rfc2V0KTsKLQotCWZvciAoaSA9IDA7IGkgPCBob3N0X3NldC0+bl9wb3J0czsgaSsrKSB7Ci0JCWFwID0gaG9zdF9zZXQtPnBvcnRzW2ldOwotCi0JCWF0YV9zY3NpX3JlbGVhc2UoYXAtPmhvc3QpOwotCi0JCWlmICgoYXAtPmZsYWdzICYgQVRBX0ZMQUdfTk9fTEVHQUNZKSA9PSAwKSB7Ci0JCQlzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkciA9ICZhcC0+aW9hZGRyOwotCi0JCQlpZiAoaW9hZGRyLT5jbWRfYWRkciA9PSAweDFmMCkKLQkJCQlyZWxlYXNlX3JlZ2lvbigweDFmMCwgOCk7Ci0JCQllbHNlIGlmIChpb2FkZHItPmNtZF9hZGRyID09IDB4MTcwKQotCQkJCXJlbGVhc2VfcmVnaW9uKDB4MTcwLCA4KTsKLQkJfQotCi0JCXNjc2lfaG9zdF9wdXQoYXAtPmhvc3QpOwotCX0KLQotCWlmIChob3N0X3NldC0+b3BzLT5ob3N0X3N0b3ApCi0JCWhvc3Rfc2V0LT5vcHMtPmhvc3Rfc3RvcChob3N0X3NldCk7Ci0KLQlrZnJlZShob3N0X3NldCk7Ci0KKwlhdGFfaG9zdF9zZXRfcmVtb3ZlKGhvc3Rfc2V0KTsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKQEAgLTQ1NjQsNiArNDU4OSw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfc3RkX2Jpb3NfcGFyYW0pOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3N0ZF9wb3J0cyk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfZGV2aWNlX2FkZCk7CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfaG9zdF9zZXRfcmVtb3ZlKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9zZ19pbml0KTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9zZ19pbml0X29uZSk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfcWNfY29tcGxldGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYwppbmRleCA4NmVhZjZkLi5hY2FlN2M0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYwpAQCAtOTczLDEwICs5NzMsMTAgQEAKIAlpZiAoKHBoYmEtPmZjX2ZsYWcgJiBGQ19GQUJSSUMpIHx8CiAJICAgICgocGhiYS0+ZmNfdG9wb2xvZ3kgPT0gVE9QT0xPR1lfTE9PUCkgJiYKIAkgICAgIChwaGJhLT5mY19mbGFnICYgRkNfUFVCTElDX0xPT1ApKSkKLQkJbm9kZV9uYW1lID0gd3duX3RvX3U2NChwaGJhLT5mY19mYWJwYXJhbS5ub2RlTmFtZS53d24pOworCQlub2RlX25hbWUgPSB3d25fdG9fdTY0KHBoYmEtPmZjX2ZhYnBhcmFtLm5vZGVOYW1lLnUud3duKTsKIAllbHNlCiAJCS8qIGZhYnJpYyBpcyBsb2NhbCBwb3J0IGlmIHRoZXJlIGlzIG5vIEYvRkxfUG9ydCAqLwotCQlub2RlX25hbWUgPSB3d25fdG9fdTY0KHBoYmEtPmZjX25vZGVuYW1lLnd3bik7CisJCW5vZGVfbmFtZSA9IHd3bl90b191NjQocGhiYS0+ZmNfbm9kZW5hbWUudS53d24pOwogCiAJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCkBAIC0xMTEwLDcgKzExMTAsNyBAQAogCS8qIFNlYXJjaCB0aGUgbWFwcGVkIGxpc3QgZm9yIHRoaXMgdGFyZ2V0IElEICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShuZGxwLCAmcGhiYS0+ZmNfbmxwbWFwX2xpc3QsIG5scF9saXN0cCkgewogCQlpZiAoc3RhcmdldC0+aWQgPT0gbmRscC0+bmxwX3NpZCkgewotCQkJbm9kZV9uYW1lID0gd3duX3RvX3U2NChuZGxwLT5ubHBfbm9kZW5hbWUud3duKTsKKwkJCW5vZGVfbmFtZSA9IHd3bl90b191NjQobmRscC0+bmxwX25vZGVuYW1lLnUud3duKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTEzMSw3ICsxMTMxLDcgQEAKIAkvKiBTZWFyY2ggdGhlIG1hcHBlZCBsaXN0IGZvciB0aGlzIHRhcmdldCBJRCAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkobmRscCwgJnBoYmEtPmZjX25scG1hcF9saXN0LCBubHBfbGlzdHApIHsKIAkJaWYgKHN0YXJnZXQtPmlkID09IG5kbHAtPm5scF9zaWQpIHsKLQkJCXBvcnRfbmFtZSA9IHd3bl90b191NjQobmRscC0+bmxwX3BvcnRuYW1lLnd3bik7CisJCQlwb3J0X25hbWUgPSB3d25fdG9fdTY0KG5kbHAtPm5scF9wb3J0bmFtZS51Lnd3bik7CiAJCQlicmVhazsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMKaW5kZXggNGZiOGViMC4uNTYwNTJmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMKQEAgLTEwMTksOCArMTAxOSw4IEBACiAJc3RydWN0IGZjX3Jwb3J0X2lkZW50aWZpZXJzIHJwb3J0X2lkczsKIAogCS8qIFJlbW90ZSBwb3J0IGhhcyByZWFwcGVhcmVkLiBSZS1yZWdpc3RlciB3LyBGQyB0cmFuc3BvcnQgKi8KLQlycG9ydF9pZHMubm9kZV9uYW1lID0gd3duX3RvX3U2NChuZGxwLT5ubHBfbm9kZW5hbWUud3duKTsKLQlycG9ydF9pZHMucG9ydF9uYW1lID0gd3duX3RvX3U2NChuZGxwLT5ubHBfcG9ydG5hbWUud3duKTsKKwlycG9ydF9pZHMubm9kZV9uYW1lID0gd3duX3RvX3U2NChuZGxwLT5ubHBfbm9kZW5hbWUudS53d24pOworCXJwb3J0X2lkcy5wb3J0X25hbWUgPSB3d25fdG9fdTY0KG5kbHAtPm5scF9wb3J0bmFtZS51Lnd3bik7CiAJcnBvcnRfaWRzLnBvcnRfaWQgPSBuZGxwLT5ubHBfRElEOwogCXJwb3J0X2lkcy5yb2xlcyA9IEZDX1JQT1JUX1JPTEVfVU5LTk9XTjsKIAlpZiAobmRscC0+bmxwX3R5cGUgJiBOTFBfRkNQX1RBUkdFVCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaAppbmRleCAwNDdhODdjLi44NmM0MTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3LmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ody5oCkBAIC0yODAsOSArMjgwLDkgQEAKICNkZWZpbmUgTkFNRV9DQ0lUVF9HUl9UWVBFICAweEUKIAkJCXVpbnQ4X3QgSUVFRWV4dExzYjsJLyogRkMgV29yZCAwLCBiaXQgMTY6MjMsIElFRUUgZXh0ZW5kZWQgTHNiICovCiAJCQl1aW50OF90IElFRUVbNl07CS8qIEZDIElFRUUgYWRkcmVzcyAqLwotCQl9OworCQl9IHM7CiAJCXVpbnQ4X3Qgd3duWzhdOwotCX07CisJfSB1OwogfTsKIAogc3RydWN0IGNzcCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCmluZGV4IDQ1NDA1OGYuLjA4NTZmZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCkBAIC0yODUsNyArMjg1LDcgQEAKIAlpZiAocGhiYS0+U2VyaWFsTnVtYmVyWzBdID09IDApIHsKIAkJdWludDhfdCAqb3V0cHRyOwogCi0JCW91dHB0ciA9ICh1aW50OF90ICopICYgcGhiYS0+ZmNfbm9kZW5hbWUuSUVFRVswXTsKKwkJb3V0cHRyID0gJnBoYmEtPmZjX25vZGVuYW1lLnUucy5JRUVFWzBdOwogCQlmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykgewogCQkJc3RhdHVzID0gKm91dHB0cisrOwogCQkJaiA9ICgoc3RhdHVzICYgMHhmMCkgPj4gNCk7CkBAIC0xNTIzLDggKzE1MjMsOCBAQAogCSAqIE11c3QgZG9uZSBhZnRlciBscGZjX3NsaV9oYmFfc2V0dXAoKQogCSAqLwogCi0JZmNfaG9zdF9ub2RlX25hbWUoaG9zdCkgPSB3d25fdG9fdTY0KHBoYmEtPmZjX25vZGVuYW1lLnd3bik7Ci0JZmNfaG9zdF9wb3J0X25hbWUoaG9zdCkgPSB3d25fdG9fdTY0KHBoYmEtPmZjX3BvcnRuYW1lLnd3bik7CisJZmNfaG9zdF9ub2RlX25hbWUoaG9zdCkgPSB3d25fdG9fdTY0KHBoYmEtPmZjX25vZGVuYW1lLnUud3duKTsKKwlmY19ob3N0X3BvcnRfbmFtZShob3N0KSA9IHd3bl90b191NjQocGhiYS0+ZmNfcG9ydG5hbWUudS53d24pOwogCWZjX2hvc3Rfc3VwcG9ydGVkX2NsYXNzZXMoaG9zdCkgPSBGQ19DT1NfQ0xBU1MzOwogCiAJbWVtc2V0KGZjX2hvc3Rfc3VwcG9ydGVkX2ZjNHMoaG9zdCksIDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5jCmluZGV4IDZmMzA4ZWIuLjYxYTZmZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5jCkBAIC02MjEsOCArNjIxLDYgQEAKIAlpZihpc2xvZ2ljYWwpIHsKIAkJc3dpdGNoIChjbWQtPmNtbmRbMF0pIHsKIAkJY2FzZSBURVNUX1VOSVRfUkVBRFk6Ci0JCQltZW1zZXQoY21kLT5yZXF1ZXN0X2J1ZmZlciwgMCwgY21kLT5yZXF1ZXN0X2J1ZmZsZW4pOwotCiAjaWYgTUVHQV9IQVZFX0NMVVNURVJJTkcKIAkJCS8qCiAJCQkgKiBEbyB3ZSBzdXBwb3J0IGNsdXN0ZXJpbmcgYW5kIGlzIHRoZSBzdXBwb3J0IGVuYWJsZWQKQEAgLTY1MiwxMSArNjUwLDI4IEBACiAJCQlyZXR1cm4gTlVMTDsKICNlbmRpZgogCi0JCWNhc2UgTU9ERV9TRU5TRToKKwkJY2FzZSBNT0RFX1NFTlNFOiB7CisJCQljaGFyICpidWY7CisKKwkJCWlmIChjbWQtPnVzZV9zZykgeworCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisKKwkJCQlzZyA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiljbWQtPnJlcXVlc3RfYnVmZmVyOworCQkJCWJ1ZiA9IGttYXBfYXRvbWljKHNnLT5wYWdlLCBLTV9JUlEwKSArCisJCQkJCXNnLT5vZmZzZXQ7CisJCQl9IGVsc2UKKwkJCQlidWYgPSBjbWQtPnJlcXVlc3RfYnVmZmVyOwogCQkJbWVtc2V0KGNtZC0+cmVxdWVzdF9idWZmZXIsIDAsIGNtZC0+Y21uZFs0XSk7CisJCQlpZiAoY21kLT51c2Vfc2cpIHsKKwkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCisJCQkJc2cgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopY21kLT5yZXF1ZXN0X2J1ZmZlcjsKKwkJCQlrdW5tYXBfYXRvbWljKGJ1ZiAtIHNnLT5vZmZzZXQsIEtNX0lSUTApOworCQkJfQogCQkJY21kLT5yZXN1bHQgPSAoRElEX09LIDw8IDE2KTsKIAkJCWNtZC0+c2NzaV9kb25lKGNtZCk7CiAJCQlyZXR1cm4gTlVMTDsKKwkJfQogCiAJCWNhc2UgUkVBRF9DQVBBQ0lUWToKIAkJY2FzZSBJTlFVSVJZOgpAQCAtMTY4NSwxNCArMTcwMCwyMyBAQAogc3RhdGljIHZvaWQKIG1lZ2FfZnJlZV9zY2IoYWRhcHRlcl90ICphZGFwdGVyLCBzY2JfdCAqc2NiKQogeworCXVuc2lnbmVkIGxvbmcgbGVuZ3RoOworCiAJc3dpdGNoKCBzY2ItPmRtYV90eXBlICkgewogCiAJY2FzZSBNRUdBX0RNQV9UWVBFX05PTkU6CiAJCWJyZWFrOwogCiAJY2FzZSBNRUdBX0JVTEtfREFUQToKKwkJaWYgKHNjYi0+Y21kLT51c2Vfc2cgPT0gMCkKKwkJCWxlbmd0aCA9IHNjYi0+Y21kLT5yZXF1ZXN0X2J1ZmZsZW47CisJCWVsc2UgeworCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wgPQorCQkJCShzdHJ1Y3Qgc2NhdHRlcmxpc3QgKilzY2ItPmNtZC0+cmVxdWVzdF9idWZmZXI7CisJCQlsZW5ndGggPSBzZ2wtPmxlbmd0aDsKKwkJfQogCQlwY2lfdW5tYXBfcGFnZShhZGFwdGVyLT5kZXYsIHNjYi0+ZG1hX2hfYnVsa2RhdGEsCi0JCQlzY2ItPmNtZC0+cmVxdWVzdF9idWZmbGVuLCBzY2ItPmRtYV9kaXJlY3Rpb24pOworCQkJICAgICAgIGxlbmd0aCwgc2NiLT5kbWFfZGlyZWN0aW9uKTsKIAkJYnJlYWs7CiAKIAljYXNlIE1FR0FfU0dMSVNUOgpAQCAtMTc0MSw2ICsxNzY1LDcgQEAKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QJKnNnbDsKIAlzdHJ1Y3QgcGFnZQkqcGFnZTsKIAl1bnNpZ25lZCBsb25nCW9mZnNldDsKKwl1bnNpZ25lZCBpbnQJbGVuZ3RoOwogCVNjc2lfQ21uZAkqY21kOwogCWludAlzZ2NudDsKIAlpbnQJaWR4OwpAQCAtMTc0OCwxNCArMTc3MywyMyBAQAogCWNtZCA9IHNjYi0+Y21kOwogCiAJLyogU2NhdHRlci1nYXRoZXIgbm90IHVzZWQgKi8KLQlpZiggIWNtZC0+dXNlX3NnICkgeworCWlmKCBjbWQtPnVzZV9zZyA9PSAwIHx8IChjbWQtPnVzZV9zZyA9PSAxICYmIAorCQkJCSAhYWRhcHRlci0+aGFzXzY0Yml0X2FkZHIpKSB7CiAKLQkJcGFnZSA9IHZpcnRfdG9fcGFnZShjbWQtPnJlcXVlc3RfYnVmZmVyKTsKLQkJb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoY21kLT5yZXF1ZXN0X2J1ZmZlcik7CisJCWlmIChjbWQtPnVzZV9zZyA9PSAwKSB7CisJCQlwYWdlID0gdmlydF90b19wYWdlKGNtZC0+cmVxdWVzdF9idWZmZXIpOworCQkJb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoY21kLT5yZXF1ZXN0X2J1ZmZlcik7CisJCQlsZW5ndGggPSBjbWQtPnJlcXVlc3RfYnVmZmxlbjsKKwkJfSBlbHNlIHsKKwkJCXNnbCA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiljbWQtPnJlcXVlc3RfYnVmZmVyOworCQkJcGFnZSA9IHNnbC0+cGFnZTsKKwkJCW9mZnNldCA9IHNnbC0+b2Zmc2V0OworCQkJbGVuZ3RoID0gc2dsLT5sZW5ndGg7CisJCX0KIAogCQlzY2ItPmRtYV9oX2J1bGtkYXRhID0gcGNpX21hcF9wYWdlKGFkYXB0ZXItPmRldiwKIAkJCQkJCSAgcGFnZSwgb2Zmc2V0LAotCQkJCQkJICBjbWQtPnJlcXVlc3RfYnVmZmxlbiwKKwkJCQkJCSAgbGVuZ3RoLAogCQkJCQkJICBzY2ItPmRtYV9kaXJlY3Rpb24pOwogCQlzY2ItPmRtYV90eXBlID0gTUVHQV9CVUxLX0RBVEE7CiAKQEAgLTE3NjUsMTQgKzE3OTksMTQgQEAKIAkJICovCiAJCWlmKCBhZGFwdGVyLT5oYXNfNjRiaXRfYWRkciApIHsKIAkJCXNjYi0+c2dsNjRbMF0uYWRkcmVzcyA9IHNjYi0+ZG1hX2hfYnVsa2RhdGE7Ci0JCQlzY2ItPnNnbDY0WzBdLmxlbmd0aCA9IGNtZC0+cmVxdWVzdF9idWZmbGVuOworCQkJc2NiLT5zZ2w2NFswXS5sZW5ndGggPSBsZW5ndGg7CiAJCQkqYnVmID0gKHUzMilzY2ItPnNnbF9kbWFfYWRkcjsKLQkJCSpsZW4gPSAodTMyKWNtZC0+cmVxdWVzdF9idWZmbGVuOworCQkJKmxlbiA9ICh1MzIpbGVuZ3RoOwogCQkJcmV0dXJuIDE7CiAJCX0KIAkJZWxzZSB7CiAJCQkqYnVmID0gKHUzMilzY2ItPmRtYV9oX2J1bGtkYXRhOwotCQkJKmxlbiA9ICh1MzIpY21kLT5yZXF1ZXN0X2J1ZmZsZW47CisJCQkqbGVuID0gKHUzMilsZW5ndGg7CiAJCX0KIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTc5MSwyNyArMTgyNSwyMyBAQAogCiAJaWYoIHNnY250ID4gYWRhcHRlci0+c2dsZW4gKSBCVUcoKTsKIAorCSpsZW4gPSAwOworCiAJZm9yKCBpZHggPSAwOyBpZHggPCBzZ2NudDsgaWR4KyssIHNnbCsrICkgewogCiAJCWlmKCBhZGFwdGVyLT5oYXNfNjRiaXRfYWRkciApIHsKIAkJCXNjYi0+c2dsNjRbaWR4XS5hZGRyZXNzID0gc2dfZG1hX2FkZHJlc3Moc2dsKTsKLQkJCXNjYi0+c2dsNjRbaWR4XS5sZW5ndGggPSBzZ19kbWFfbGVuKHNnbCk7CisJCQkqbGVuICs9IHNjYi0+c2dsNjRbaWR4XS5sZW5ndGggPSBzZ19kbWFfbGVuKHNnbCk7CiAJCX0KIAkJZWxzZSB7CiAJCQlzY2ItPnNnbFtpZHhdLmFkZHJlc3MgPSBzZ19kbWFfYWRkcmVzcyhzZ2wpOwotCQkJc2NiLT5zZ2xbaWR4XS5sZW5ndGggPSBzZ19kbWFfbGVuKHNnbCk7CisJCQkqbGVuICs9IHNjYi0+c2dsW2lkeF0ubGVuZ3RoID0gc2dfZG1hX2xlbihzZ2wpOwogCQl9CiAJfQogCiAJLyogUmVzZXQgcG9pbnRlciBhbmQgbGVuZ3RoIGZpZWxkcyAqLwogCSpidWYgPSBzY2ItPnNnbF9kbWFfYWRkcjsKIAotCS8qCi0JICogRm9yIHBhc3N0aHJ1IGNvbW1hbmQsIGRhdGF4ZmVybGVuIG11c3QgYmUgc2V0LCBldmVuIGZvciBjb21tYW5kcwotCSAqIHdpdGggYSBzZyBsaXN0Ci0JICovCi0JKmxlbiA9ICh1MzIpY21kLT5yZXF1ZXN0X2J1ZmZsZW47Ci0KIAkvKiBSZXR1cm4gY291bnQgb2YgU0cgcmVxdWVzdHMgKi8KIAlyZXR1cm4gc2djbnQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvS2NvbmZpZy5tZWdhcmFpZCBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9LY29uZmlnLm1lZ2FyYWlkCmluZGV4IDkxN2Q1OTEuLjczNjNlMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9LY29uZmlnLm1lZ2FyYWlkCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9LY29uZmlnLm1lZ2FyYWlkCkBAIC03NiwzICs3NiwxMiBAQAogCVRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCW1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtZWdhcmFpZAogZW5kaWYKKworY29uZmlnIE1FR0FSQUlEX1NBUworCXRyaXN0YXRlICJMU0kgTG9naWMgTWVnYVJBSUQgU0FTIFJBSUQgTW9kdWxlIgorCWRlcGVuZHMgb24gUENJICYmIFNDU0kKKwloZWxwCisJTW9kdWxlIGZvciBMU0kgTG9naWMncyBTQVMgYmFzZWQgUkFJRCBjb250cm9sbGVycy4KKwlUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgJ20nIGhlcmUuCisJTW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1lZ2FyYWlkX3NhcworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvTWFrZWZpbGUgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvTWFrZWZpbGUKaW5kZXggNmRkOTlmMi4uZjQ2OTkxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9NYWtlZmlsZQpAQCAtMSwyICsxLDMgQEAKIG9iai0kKENPTkZJR19NRUdBUkFJRF9NTSkJKz0gbWVnYXJhaWRfbW0ubwogb2JqLSQoQ09ORklHX01FR0FSQUlEX01BSUxCT1gpCSs9IG1lZ2FyYWlkX21ib3gubworb2JqLSQoQ09ORklHX01FR0FSQUlEX1NBUykJKz0gbWVnYXJhaWRfc2FzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2Y2MzczCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5jCkBAIC0wLDAgKzEsMjgwNiBAQAorLyoKKyAqCisgKgkJTGludXggTWVnYVJBSUQgZHJpdmVyIGZvciBTQVMgYmFzZWQgUkFJRCBjb250cm9sbGVycworICoKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA1ICBMU0kgTG9naWMgQ29ycG9yYXRpb24uCisgKgorICoJICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCSAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGSUxFCQk6IG1lZ2FyYWlkX3Nhcy5jCisgKiBWZXJzaW9uCTogdjAwLjAwLjAyLjAwLXJjNAorICoKKyAqIEF1dGhvcnM6CisgKiAJU3JlZW5pdmFzIEJhZ2Fsa290ZQk8U3JlZW5pdmFzLkJhZ2Fsa290ZUBsc2lsLmNvbT4KKyAqIAlTdW1hbnQgUGF0cm8JCTxTdW1hbnQuUGF0cm9AbHNpbC5jb20+CisgKgorICogTGlzdCBvZiBzdXBwb3J0ZWQgY29udHJvbGxlcnMKKyAqCisgKiBPRU0JUHJvZHVjdCBOYW1lCQkJVklECURJRAlTU1ZJRAlTU0lECisgKiAtLS0JLS0tLS0tLS0tLS0tCQkJLS0tCS0tLQktLS0tCS0tLS0KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKworI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSAibWVnYXJhaWRfc2FzLmgiCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKE1FR0FTQVNfVkVSU0lPTik7CitNT0RVTEVfQVVUSE9SKCJzcmVlbml2YXMuYmFnYWxrb3RlQGxzaWwuY29tIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxTSSBMb2dpYyBNZWdhUkFJRCBTQVMgRHJpdmVyIik7CisKKy8qCisgKiBQQ0kgSUQgdGFibGUgZm9yIGFsbCBzdXBwb3J0ZWQgY29udHJvbGxlcnMKKyAqLworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1lZ2FzYXNfcGNpX3RhYmxlW10gPSB7CisKKwl7CisJIFBDSV9WRU5ET1JfSURfTFNJX0xPR0lDLAorCSBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDY0UiwKKwkgUENJX0FOWV9JRCwKKwkgUENJX0FOWV9JRCwKKwkgfSwKKwl7CisJIFBDSV9WRU5ET1JfSURfREVMTCwKKwkgUENJX0RFVklDRV9JRF9ERUxMX1BFUkM1LAorCSBQQ0lfQU5ZX0lELAorCSBQQ0lfQU5ZX0lELAorCSB9LAorCXswfQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbWVnYXNhc19wY2lfdGFibGUpOworCitzdGF0aWMgaW50IG1lZ2FzYXNfbWdtdF9tYWpvcm5vOworc3RhdGljIHN0cnVjdCBtZWdhc2FzX21nbXRfaW5mbyBtZWdhc2FzX21nbXRfaW5mbzsKK3N0YXRpYyBzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqbWVnYXNhc19hc3luY19xdWV1ZTsKK3N0YXRpYyBERUNMQVJFX01VVEVYKG1lZ2FzYXNfYXN5bmNfcXVldWVfbXV0ZXgpOworCisvKioKKyAqIG1lZ2FzYXNfZ2V0X2NtZCAtCUdldCBhIGNvbW1hbmQgZnJvbSB0aGUgZnJlZSBwb29sCisgKiBAaW5zdGFuY2U6CQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqCisgKiBSZXR1cm5zIGEgZnJlZSBjb21tYW5kIGZyb20gdGhlIHBvb2wKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVnYXNhc19jbWQgKm1lZ2FzYXNfZ2V0X2NtZChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZQorCQkJCQkJICAqaW5zdGFuY2UpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZCA9IE5VTEw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5zdGFuY2UtPmNtZF9wb29sX2xvY2ssIGZsYWdzKTsKKworCWlmICghbGlzdF9lbXB0eSgmaW5zdGFuY2UtPmNtZF9wb29sKSkgeworCQljbWQgPSBsaXN0X2VudHJ5KCgmaW5zdGFuY2UtPmNtZF9wb29sKS0+bmV4dCwKKwkJCQkgc3RydWN0IG1lZ2FzYXNfY21kLCBsaXN0KTsKKwkJbGlzdF9kZWxfaW5pdCgmY21kLT5saXN0KTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXM6IENvbW1hbmQgcG9vbCBlbXB0eSFcbiIpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5jbWRfcG9vbF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGNtZDsKK30KKworLyoqCisgKiBtZWdhc2FzX3JldHVybl9jbWQgLQlSZXR1cm4gYSBjbWQgdG8gZnJlZSBjb21tYW5kIHBvb2wKKyAqIEBpbnN0YW5jZToJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICogQGNtZDoJCUNvbW1hbmQgcGFja2V0IHRvIGJlIHJldHVybmVkIHRvIGZyZWUgY29tbWFuZCBwb29sCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorbWVnYXNhc19yZXR1cm5fY21kKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwgc3RydWN0IG1lZ2FzYXNfY21kICpjbWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+Y21kX3Bvb2xfbG9jaywgZmxhZ3MpOworCisJY21kLT5zY21kID0gTlVMTDsKKwlsaXN0X2FkZF90YWlsKCZjbWQtPmxpc3QsICZpbnN0YW5jZS0+Y21kX3Bvb2wpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPmNtZF9wb29sX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBtZWdhc2FzX2VuYWJsZV9pbnRyIC0JRW5hYmxlcyBpbnRlcnJ1cHRzCisgKiBAcmVnczoJCQlNRkkgcmVnaXN0ZXIgc2V0CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorbWVnYXNhc19lbmFibGVfaW50cihzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqIHJlZ3MpCit7CisJd3JpdGVsKDEsICYocmVncyktPm91dGJvdW5kX2ludHJfbWFzayk7CisKKwkvKiBEdW1teSByZWFkbCB0byBmb3JjZSBwY2kgZmx1c2ggKi8KKwlyZWFkbCgmcmVncy0+b3V0Ym91bmRfaW50cl9tYXNrKTsKK30KKworLyoqCisgKiBtZWdhc2FzX2Rpc2FibGVfaW50ciAtCURpc2FibGVzIGludGVycnVwdHMKKyAqIEByZWdzOgkJCU1GSSByZWdpc3RlciBzZXQKKyAqLworc3RhdGljIGlubGluZSB2b2lkCittZWdhc2FzX2Rpc2FibGVfaW50cihzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqIHJlZ3MpCit7CisJdTMyIG1hc2sgPSByZWFkbCgmcmVncy0+b3V0Ym91bmRfaW50cl9tYXNrKSAmICh+MHgwMDAwMDAwMSk7CisJd3JpdGVsKG1hc2ssICZyZWdzLT5vdXRib3VuZF9pbnRyX21hc2spOworCisJLyogRHVtbXkgcmVhZGwgdG8gZm9yY2UgcGNpIGZsdXNoICovCisJcmVhZGwoJnJlZ3MtPm91dGJvdW5kX2ludHJfbWFzayk7Cit9CisKKy8qKgorICogbWVnYXNhc19pc3N1ZV9wb2xsZWQgLQlJc3N1ZXMgYSBwb2xsaW5nIGNvbW1hbmQKKyAqIEBpbnN0YW5jZToJCQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqIEBjbWQ6CQkJQ29tbWFuZCBwYWNrZXQgdG8gYmUgaXNzdWVkIAorICoKKyAqIEZvciBwb2xsaW5nLCBNRkkgcmVxdWlyZXMgdGhlIGNtZF9zdGF0dXMgdG8gYmUgc2V0IHRvIDB4RkYgYmVmb3JlIHBvc3RpbmcuCisgKi8KK3N0YXRpYyBpbnQKK21lZ2FzYXNfaXNzdWVfcG9sbGVkKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwgc3RydWN0IG1lZ2FzYXNfY21kICpjbWQpCit7CisJaW50IGk7CisJdTMyIG1zZWNzID0gTUZJX1BPTExfVElNRU9VVF9TRUNTICogMTAwMDsKKworCXN0cnVjdCBtZWdhc2FzX2hlYWRlciAqZnJhbWVfaGRyID0gJmNtZC0+ZnJhbWUtPmhkcjsKKworCWZyYW1lX2hkci0+Y21kX3N0YXR1cyA9IDB4RkY7CisJZnJhbWVfaGRyLT5mbGFncyB8PSBNRklfRlJBTUVfRE9OVF9QT1NUX0lOX1JFUExZX1FVRVVFOworCisJLyoKKwkgKiBJc3N1ZSB0aGUgZnJhbWUgdXNpbmcgaW5ib3VuZCBxdWV1ZSBwb3J0CisJICovCisJd3JpdGVsKGNtZC0+ZnJhbWVfcGh5c19hZGRyID4+IDMsCisJICAgICAgICZpbnN0YW5jZS0+cmVnX3NldC0+aW5ib3VuZF9xdWV1ZV9wb3J0KTsKKworCS8qCisJICogV2FpdCBmb3IgY21kX3N0YXR1cyB0byBjaGFuZ2UKKwkgKi8KKwlmb3IgKGkgPSAwOyAoaSA8IG1zZWNzKSAmJiAoZnJhbWVfaGRyLT5jbWRfc3RhdHVzID09IDB4ZmYpOyBpKyspIHsKKwkJcm1iKCk7CisJCW1zbGVlcCgxKTsKKwl9CisKKwlpZiAoZnJhbWVfaGRyLT5jbWRfc3RhdHVzID09IDB4ZmYpCisJCXJldHVybiAtRVRJTUU7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBtZWdhc2FzX2lzc3VlX2Jsb2NrZWRfY21kIC0JU3luY2hyb25vdXMgd3JhcHBlciBhcm91bmQgcmVndWxhciBGVyBjbWRzCisgKiBAaW5zdGFuY2U6CQkJQWRhcHRlciBzb2Z0IHN0YXRlCisgKiBAY21kOgkJCUNvbW1hbmQgdG8gYmUgaXNzdWVkCisgKgorICogVGhpcyBmdW5jdGlvbiB3YWl0cyBvbiBhbiBldmVudCBmb3IgdGhlIGNvbW1hbmQgdG8gYmUgcmV0dXJuZWQgZnJvbSBJU1IuCisgKiBVc2VkIHRvIGlzc3VlIGlvY3RsIGNvbW1hbmRzLgorICovCitzdGF0aWMgaW50CittZWdhc2FzX2lzc3VlX2Jsb2NrZWRfY21kKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwKKwkJCSAgc3RydWN0IG1lZ2FzYXNfY21kICpjbWQpCit7CisJY21kLT5jbWRfc3RhdHVzID0gRU5PREFUQTsKKworCXdyaXRlbChjbWQtPmZyYW1lX3BoeXNfYWRkciA+PiAzLAorCSAgICAgICAmaW5zdGFuY2UtPnJlZ19zZXQtPmluYm91bmRfcXVldWVfcG9ydCk7CisKKwl3YWl0X2V2ZW50KGluc3RhbmNlLT5pbnRfY21kX3dhaXRfcSwgKGNtZC0+Y21kX3N0YXR1cyAhPSBFTk9EQVRBKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBtZWdhc2FzX2lzc3VlX2Jsb2NrZWRfYWJvcnRfY21kIC0JQWJvcnRzIHByZXZpb3VzbHkgaXNzdWVkIGNtZAorICogQGluc3RhbmNlOgkJCQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqIEBjbWRfdG9fYWJvcnQ6CQkJUHJldmlvdXNseSBpc3N1ZWQgY21kIHRvIGJlIGFib3J0ZWQKKyAqCisgKiBNRkkgZmlybXdhcmUgY2FuIGFib3J0IHByZXZpb3VzbHkgaXNzdWVkIEFFTiBjb21hbW5kIChhdXRvbWF0aWMgZXZlbnQKKyAqIG5vdGlmaWNhdGlvbikuIFRoZSBtZWdhc2FzX2lzc3VlX2Jsb2NrZWRfYWJvcnRfY21kKCkgaXNzdWVzIHN1Y2ggYWJvcnQKKyAqIGNtZCBhbmQgYmxvY2tzIHRpbGwgaXQgaXMgY29tcGxldGVkLgorICovCitzdGF0aWMgaW50CittZWdhc2FzX2lzc3VlX2Jsb2NrZWRfYWJvcnRfY21kKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwKKwkJCQlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZF90b19hYm9ydCkKK3sKKwlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZDsKKwlzdHJ1Y3QgbWVnYXNhc19hYm9ydF9mcmFtZSAqYWJvcnRfZnI7CisKKwljbWQgPSBtZWdhc2FzX2dldF9jbWQoaW5zdGFuY2UpOworCisJaWYgKCFjbWQpCisJCXJldHVybiAtMTsKKworCWFib3J0X2ZyID0gJmNtZC0+ZnJhbWUtPmFib3J0OworCisJLyoKKwkgKiBQcmVwYXJlIGFuZCBpc3N1ZSB0aGUgYWJvcnQgZnJhbWUKKwkgKi8KKwlhYm9ydF9mci0+Y21kID0gTUZJX0NNRF9BQk9SVDsKKwlhYm9ydF9mci0+Y21kX3N0YXR1cyA9IDB4RkY7CisJYWJvcnRfZnItPmZsYWdzID0gMDsKKwlhYm9ydF9mci0+YWJvcnRfY29udGV4dCA9IGNtZF90b19hYm9ydC0+aW5kZXg7CisJYWJvcnRfZnItPmFib3J0X21maV9waHlzX2FkZHJfbG8gPSBjbWRfdG9fYWJvcnQtPmZyYW1lX3BoeXNfYWRkcjsKKwlhYm9ydF9mci0+YWJvcnRfbWZpX3BoeXNfYWRkcl9oaSA9IDA7CisKKwljbWQtPnN5bmNfY21kID0gMTsKKwljbWQtPmNtZF9zdGF0dXMgPSAweEZGOworCisJd3JpdGVsKGNtZC0+ZnJhbWVfcGh5c19hZGRyID4+IDMsCisJICAgICAgICZpbnN0YW5jZS0+cmVnX3NldC0+aW5ib3VuZF9xdWV1ZV9wb3J0KTsKKworCS8qCisJICogV2FpdCBmb3IgdGhpcyBjbWQgdG8gY29tcGxldGUKKwkgKi8KKwl3YWl0X2V2ZW50KGluc3RhbmNlLT5hYm9ydF9jbWRfd2FpdF9xLCAoY21kLT5jbWRfc3RhdHVzICE9IDB4RkYpKTsKKworCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgY21kKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBtZWdhc2FzX21ha2Vfc2dsMzIgLQlQcmVwYXJlcyAzMi1iaXQgU0dMCisgKiBAaW5zdGFuY2U6CQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqIEBzY3A6CQlTQ1NJIGNvbW1hbmQgZnJvbSB0aGUgbWlkLWxheWVyCisgKiBAbWZpX3NnbDoJCVNHTCB0byBiZSBmaWxsZWQgaW4KKyAqCisgKiBJZiBzdWNjZXNzZnVsLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBTRyBlbGVtZW50cy4gT3RoZXJ3aXNlLAorICogaXQgcmV0dXJuZXMgLTEuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50CittZWdhc2FzX21ha2Vfc2dsMzIoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzY3AsCisJCSAgIHVuaW9uIG1lZ2FzYXNfc2dsICptZmlfc2dsKQoreworCWludCBpOworCWludCBzZ2VfY291bnQ7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpvc19zZ2w7CisKKwkvKgorCSAqIFJldHVybiAwIGlmIHRoZXJlIGlzIG5vIGRhdGEgdHJhbnNmZXIKKwkgKi8KKwlpZiAoIXNjcC0+cmVxdWVzdF9idWZmZXIgfHwgIXNjcC0+cmVxdWVzdF9idWZmbGVuKQorCQlyZXR1cm4gMDsKKworCWlmICghc2NwLT51c2Vfc2cpIHsKKwkJbWZpX3NnbC0+c2dlMzJbMF0ucGh5c19hZGRyID0gcGNpX21hcF9zaW5nbGUoaW5zdGFuY2UtPnBkZXYsCisJCQkJCQkJICAgICBzY3AtPgorCQkJCQkJCSAgICAgcmVxdWVzdF9idWZmZXIsCisJCQkJCQkJICAgICBzY3AtPgorCQkJCQkJCSAgICAgcmVxdWVzdF9idWZmbGVuLAorCQkJCQkJCSAgICAgc2NwLT4KKwkJCQkJCQkgICAgIHNjX2RhdGFfZGlyZWN0aW9uKTsKKwkJbWZpX3NnbC0+c2dlMzJbMF0ubGVuZ3RoID0gc2NwLT5yZXF1ZXN0X2J1ZmZsZW47CisKKwkJcmV0dXJuIDE7CisJfQorCisJb3Nfc2dsID0gKHN0cnVjdCBzY2F0dGVybGlzdCAqKXNjcC0+cmVxdWVzdF9idWZmZXI7CisJc2dlX2NvdW50ID0gcGNpX21hcF9zZyhpbnN0YW5jZS0+cGRldiwgb3Nfc2dsLCBzY3AtPnVzZV9zZywKKwkJCSAgICAgICBzY3AtPnNjX2RhdGFfZGlyZWN0aW9uKTsKKworCWZvciAoaSA9IDA7IGkgPCBzZ2VfY291bnQ7IGkrKywgb3Nfc2dsKyspIHsKKwkJbWZpX3NnbC0+c2dlMzJbaV0ubGVuZ3RoID0gc2dfZG1hX2xlbihvc19zZ2wpOworCQltZmlfc2dsLT5zZ2UzMltpXS5waHlzX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhvc19zZ2wpOworCX0KKworCXJldHVybiBzZ2VfY291bnQ7Cit9CisKKy8qKgorICogbWVnYXNhc19tYWtlX3NnbDY0IC0JUHJlcGFyZXMgNjQtYml0IFNHTAorICogQGluc3RhbmNlOgkJQWRhcHRlciBzb2Z0IHN0YXRlCisgKiBAc2NwOgkJU0NTSSBjb21tYW5kIGZyb20gdGhlIG1pZC1sYXllcgorICogQG1maV9zZ2w6CQlTR0wgdG8gYmUgZmlsbGVkIGluCisgKgorICogSWYgc3VjY2Vzc2Z1bCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgU0cgZWxlbWVudHMuIE90aGVyd2lzZSwKKyAqIGl0IHJldHVybmVzIC0xLgorICovCitzdGF0aWMgaW5saW5lIGludAorbWVnYXNhc19tYWtlX3NnbDY0KHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwgc3RydWN0IHNjc2lfY21uZCAqc2NwLAorCQkgICB1bmlvbiBtZWdhc2FzX3NnbCAqbWZpX3NnbCkKK3sKKwlpbnQgaTsKKwlpbnQgc2dlX2NvdW50OworCXN0cnVjdCBzY2F0dGVybGlzdCAqb3Nfc2dsOworCisJLyoKKwkgKiBSZXR1cm4gMCBpZiB0aGVyZSBpcyBubyBkYXRhIHRyYW5zZmVyCisJICovCisJaWYgKCFzY3AtPnJlcXVlc3RfYnVmZmVyIHx8ICFzY3AtPnJlcXVlc3RfYnVmZmxlbikKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXNjcC0+dXNlX3NnKSB7CisJCW1maV9zZ2wtPnNnZTY0WzBdLnBoeXNfYWRkciA9IHBjaV9tYXBfc2luZ2xlKGluc3RhbmNlLT5wZGV2LAorCQkJCQkJCSAgICAgc2NwLT4KKwkJCQkJCQkgICAgIHJlcXVlc3RfYnVmZmVyLAorCQkJCQkJCSAgICAgc2NwLT4KKwkJCQkJCQkgICAgIHJlcXVlc3RfYnVmZmxlbiwKKwkJCQkJCQkgICAgIHNjcC0+CisJCQkJCQkJICAgICBzY19kYXRhX2RpcmVjdGlvbik7CisKKwkJbWZpX3NnbC0+c2dlNjRbMF0ubGVuZ3RoID0gc2NwLT5yZXF1ZXN0X2J1ZmZsZW47CisKKwkJcmV0dXJuIDE7CisJfQorCisJb3Nfc2dsID0gKHN0cnVjdCBzY2F0dGVybGlzdCAqKXNjcC0+cmVxdWVzdF9idWZmZXI7CisJc2dlX2NvdW50ID0gcGNpX21hcF9zZyhpbnN0YW5jZS0+cGRldiwgb3Nfc2dsLCBzY3AtPnVzZV9zZywKKwkJCSAgICAgICBzY3AtPnNjX2RhdGFfZGlyZWN0aW9uKTsKKworCWZvciAoaSA9IDA7IGkgPCBzZ2VfY291bnQ7IGkrKywgb3Nfc2dsKyspIHsKKwkJbWZpX3NnbC0+c2dlNjRbaV0ubGVuZ3RoID0gc2dfZG1hX2xlbihvc19zZ2wpOworCQltZmlfc2dsLT5zZ2U2NFtpXS5waHlzX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhvc19zZ2wpOworCX0KKworCXJldHVybiBzZ2VfY291bnQ7Cit9CisKKy8qKgorICogbWVnYXNhc19idWlsZF9kY2RiIC0JUHJlcGFyZXMgYSBkaXJlY3QgY2RiIChEQ0RCKSBjb21tYW5kCisgKiBAaW5zdGFuY2U6CQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqIEBzY3A6CQlTQ1NJIGNvbW1hbmQKKyAqIEBjbWQ6CQlDb21tYW5kIHRvIGJlIHByZXBhcmVkIGluCisgKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBDREIgY29tbWFuZHMuIFRoZXNlIGFyZSB0eXBjaWFsbHkgcGFzcy10aHJvdWdoCisgKiBjb21tYW5kcyB0byB0aGUgZGV2aWNlcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK21lZ2FzYXNfYnVpbGRfZGNkYihzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsIHN0cnVjdCBzY3NpX2NtbmQgKnNjcCwKKwkJICAgc3RydWN0IG1lZ2FzYXNfY21kICpjbWQpCit7CisJdTMyIHNnZV9zejsKKwlpbnQgc2dlX2J5dGVzOworCXUzMiBpc19sb2dpY2FsOworCXUzMiBkZXZpY2VfaWQ7CisJdTE2IGZsYWdzID0gMDsKKwlzdHJ1Y3QgbWVnYXNhc19wdGhydV9mcmFtZSAqcHRocnU7CisKKwlpc19sb2dpY2FsID0gTUVHQVNBU19JU19MT0dJQ0FMKHNjcCk7CisJZGV2aWNlX2lkID0gTUVHQVNBU19ERVZfSU5ERVgoaW5zdGFuY2UsIHNjcCk7CisJcHRocnUgPSAoc3RydWN0IG1lZ2FzYXNfcHRocnVfZnJhbWUgKiljbWQtPmZyYW1lOworCisJaWYgKHNjcC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gUENJX0RNQV9UT0RFVklDRSkKKwkJZmxhZ3MgPSBNRklfRlJBTUVfRElSX1dSSVRFOworCWVsc2UgaWYgKHNjcC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gUENJX0RNQV9GUk9NREVWSUNFKQorCQlmbGFncyA9IE1GSV9GUkFNRV9ESVJfUkVBRDsKKwllbHNlIGlmIChzY3AtPnNjX2RhdGFfZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSkKKwkJZmxhZ3MgPSBNRklfRlJBTUVfRElSX05PTkU7CisKKwkvKgorCSAqIFByZXBhcmUgdGhlIERDREIgZnJhbWUKKwkgKi8KKwlwdGhydS0+Y21kID0gKGlzX2xvZ2ljYWwpID8gTUZJX0NNRF9MRF9TQ1NJX0lPIDogTUZJX0NNRF9QRF9TQ1NJX0lPOworCXB0aHJ1LT5jbWRfc3RhdHVzID0gMHgwOworCXB0aHJ1LT5zY3NpX3N0YXR1cyA9IDB4MDsKKwlwdGhydS0+dGFyZ2V0X2lkID0gZGV2aWNlX2lkOworCXB0aHJ1LT5sdW4gPSBzY3AtPmRldmljZS0+bHVuOworCXB0aHJ1LT5jZGJfbGVuID0gc2NwLT5jbWRfbGVuOworCXB0aHJ1LT50aW1lb3V0ID0gMDsKKwlwdGhydS0+ZmxhZ3MgPSBmbGFnczsKKwlwdGhydS0+ZGF0YV94ZmVyX2xlbiA9IHNjcC0+cmVxdWVzdF9idWZmbGVuOworCisJbWVtY3B5KHB0aHJ1LT5jZGIsIHNjcC0+Y21uZCwgc2NwLT5jbWRfbGVuKTsKKworCS8qCisJICogQ29uc3RydWN0IFNHTAorCSAqLworCXNnZV9zeiA9IChJU19ETUE2NCkgPyBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfc2dlNjQpIDoKKwkgICAgc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX3NnZTMyKTsKKworCWlmIChJU19ETUE2NCkgeworCQlwdGhydS0+ZmxhZ3MgfD0gTUZJX0ZSQU1FX1NHTDY0OworCQlwdGhydS0+c2dlX2NvdW50ID0gbWVnYXNhc19tYWtlX3NnbDY0KGluc3RhbmNlLCBzY3AsCisJCQkJCQkgICAgICAmcHRocnUtPnNnbCk7CisJfSBlbHNlCisJCXB0aHJ1LT5zZ2VfY291bnQgPSBtZWdhc2FzX21ha2Vfc2dsMzIoaW5zdGFuY2UsIHNjcCwKKwkJCQkJCSAgICAgICZwdGhydS0+c2dsKTsKKworCS8qCisJICogU2Vuc2UgaW5mbyBzcGVjaWZpYworCSAqLworCXB0aHJ1LT5zZW5zZV9sZW4gPSBTQ1NJX1NFTlNFX0JVRkZFUlNJWkU7CisJcHRocnUtPnNlbnNlX2J1Zl9waHlzX2FkZHJfaGkgPSAwOworCXB0aHJ1LT5zZW5zZV9idWZfcGh5c19hZGRyX2xvID0gY21kLT5zZW5zZV9waHlzX2FkZHI7CisKKwlzZ2VfYnl0ZXMgPSBzZ2Vfc3ogKiBwdGhydS0+c2dlX2NvdW50OworCisJLyoKKwkgKiBDb21wdXRlIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIHRoaXMgY29tbWFuZCBjb25zdW1lcy4gRlcgdXNlcworCSAqIHRoaXMgbnVtYmVyIHRvIHB1bGwgc3VmZmljaWVudCBudW1iZXIgb2YgZnJhbWVzIGZyb20gaG9zdCBtZW1vcnkuCisJICovCisJY21kLT5mcmFtZV9jb3VudCA9IChzZ2VfYnl0ZXMgLyBNRUdBTUZJX0ZSQU1FX1NJWkUpICsKKwkgICAgKChzZ2VfYnl0ZXMgJSBNRUdBTUZJX0ZSQU1FX1NJWkUpID8gMSA6IDApICsgMTsKKworCWlmIChjbWQtPmZyYW1lX2NvdW50ID4gNykKKwkJY21kLT5mcmFtZV9jb3VudCA9IDg7CisKKwlyZXR1cm4gY21kLT5mcmFtZV9jb3VudDsKK30KKworLyoqCisgKiBtZWdhc2FzX2J1aWxkX2xkaW8gLQlQcmVwYXJlcyBJT3MgdG8gbG9naWNhbCBkZXZpY2VzCisgKiBAaW5zdGFuY2U6CQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqIEBzY3A6CQlTQ1NJIGNvbW1hbmQKKyAqIEBjbWQ6CQlDb21tYW5kIHRvIHRvIGJlIHByZXBhcmVkCisgKgorICogRnJhbWVzIChhbmQgYWNjb21wYW55aW5nIFNHTHMpIGZvciByZWd1bGFyIFNDU0kgSU9zIHVzZSB0aGlzIGZ1bmN0aW9uLgorICovCitzdGF0aWMgaW5saW5lIGludAorbWVnYXNhc19idWlsZF9sZGlvKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwgc3RydWN0IHNjc2lfY21uZCAqc2NwLAorCQkgICBzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZCkKK3sKKwl1MzIgc2dlX3N6OworCWludCBzZ2VfYnl0ZXM7CisJdTMyIGRldmljZV9pZDsKKwl1OCBzYyA9IHNjcC0+Y21uZFswXTsKKwl1MTYgZmxhZ3MgPSAwOworCXN0cnVjdCBtZWdhc2FzX2lvX2ZyYW1lICpsZGlvOworCisJZGV2aWNlX2lkID0gTUVHQVNBU19ERVZfSU5ERVgoaW5zdGFuY2UsIHNjcCk7CisJbGRpbyA9IChzdHJ1Y3QgbWVnYXNhc19pb19mcmFtZSAqKWNtZC0+ZnJhbWU7CisKKwlpZiAoc2NwLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBQQ0lfRE1BX1RPREVWSUNFKQorCQlmbGFncyA9IE1GSV9GUkFNRV9ESVJfV1JJVEU7CisJZWxzZSBpZiAoc2NwLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBQQ0lfRE1BX0ZST01ERVZJQ0UpCisJCWZsYWdzID0gTUZJX0ZSQU1FX0RJUl9SRUFEOworCisJLyoKKwkgKiBQcmVhcmUgdGhlIExvZ2ljYWwgSU8gZnJhbWU6IDJuZCBiaXQgaXMgemVybyBmb3IgYWxsIHJlYWQgY21kcworCSAqLworCWxkaW8tPmNtZCA9IChzYyAmIDB4MDIpID8gTUZJX0NNRF9MRF9XUklURSA6IE1GSV9DTURfTERfUkVBRDsKKwlsZGlvLT5jbWRfc3RhdHVzID0gMHgwOworCWxkaW8tPnNjc2lfc3RhdHVzID0gMHgwOworCWxkaW8tPnRhcmdldF9pZCA9IGRldmljZV9pZDsKKwlsZGlvLT50aW1lb3V0ID0gMDsKKwlsZGlvLT5yZXNlcnZlZF8wID0gMDsKKwlsZGlvLT5wYWRfMCA9IDA7CisJbGRpby0+ZmxhZ3MgPSBmbGFnczsKKwlsZGlvLT5zdGFydF9sYmFfaGkgPSAwOworCWxkaW8tPmFjY2Vzc19ieXRlID0gKHNjcC0+Y21kX2xlbiAhPSA2KSA/IHNjcC0+Y21uZFsxXSA6IDA7CisKKwkvKgorCSAqIDYtYnl0ZSBSRUFEKDB4MDgpIG9yIFdSSVRFKDB4MEEpIGNkYgorCSAqLworCWlmIChzY3AtPmNtZF9sZW4gPT0gNikgeworCQlsZGlvLT5sYmFfY291bnQgPSAodTMyKSBzY3AtPmNtbmRbNF07CisJCWxkaW8tPnN0YXJ0X2xiYV9sbyA9ICgodTMyKSBzY3AtPmNtbmRbMV0gPDwgMTYpIHwKKwkJICAgICgodTMyKSBzY3AtPmNtbmRbMl0gPDwgOCkgfCAodTMyKSBzY3AtPmNtbmRbM107CisKKwkJbGRpby0+c3RhcnRfbGJhX2xvICY9IDB4MUZGRkZGOworCX0KKworCS8qCisJICogMTAtYnl0ZSBSRUFEKDB4MjgpIG9yIFdSSVRFKDB4MkEpIGNkYgorCSAqLworCWVsc2UgaWYgKHNjcC0+Y21kX2xlbiA9PSAxMCkgeworCQlsZGlvLT5sYmFfY291bnQgPSAodTMyKSBzY3AtPmNtbmRbOF0gfAorCQkgICAgKCh1MzIpIHNjcC0+Y21uZFs3XSA8PCA4KTsKKwkJbGRpby0+c3RhcnRfbGJhX2xvID0gKCh1MzIpIHNjcC0+Y21uZFsyXSA8PCAyNCkgfAorCQkgICAgKCh1MzIpIHNjcC0+Y21uZFszXSA8PCAxNikgfAorCQkgICAgKCh1MzIpIHNjcC0+Y21uZFs0XSA8PCA4KSB8ICh1MzIpIHNjcC0+Y21uZFs1XTsKKwl9CisKKwkvKgorCSAqIDEyLWJ5dGUgUkVBRCgweEE4KSBvciBXUklURSgweEFBKSBjZGIKKwkgKi8KKwllbHNlIGlmIChzY3AtPmNtZF9sZW4gPT0gMTIpIHsKKwkJbGRpby0+bGJhX2NvdW50ID0gKCh1MzIpIHNjcC0+Y21uZFs2XSA8PCAyNCkgfAorCQkgICAgKCh1MzIpIHNjcC0+Y21uZFs3XSA8PCAxNikgfAorCQkgICAgKCh1MzIpIHNjcC0+Y21uZFs4XSA8PCA4KSB8ICh1MzIpIHNjcC0+Y21uZFs5XTsKKworCQlsZGlvLT5zdGFydF9sYmFfbG8gPSAoKHUzMikgc2NwLT5jbW5kWzJdIDw8IDI0KSB8CisJCSAgICAoKHUzMikgc2NwLT5jbW5kWzNdIDw8IDE2KSB8CisJCSAgICAoKHUzMikgc2NwLT5jbW5kWzRdIDw8IDgpIHwgKHUzMikgc2NwLT5jbW5kWzVdOworCX0KKworCS8qCisJICogMTYtYnl0ZSBSRUFEKDB4ODgpIG9yIFdSSVRFKDB4OEEpIGNkYgorCSAqLworCWVsc2UgaWYgKHNjcC0+Y21kX2xlbiA9PSAxNikgeworCQlsZGlvLT5sYmFfY291bnQgPSAoKHUzMikgc2NwLT5jbW5kWzEwXSA8PCAyNCkgfAorCQkgICAgKCh1MzIpIHNjcC0+Y21uZFsxMV0gPDwgMTYpIHwKKwkJICAgICgodTMyKSBzY3AtPmNtbmRbMTJdIDw8IDgpIHwgKHUzMikgc2NwLT5jbW5kWzEzXTsKKworCQlsZGlvLT5zdGFydF9sYmFfbG8gPSAoKHUzMikgc2NwLT5jbW5kWzZdIDw8IDI0KSB8CisJCSAgICAoKHUzMikgc2NwLT5jbW5kWzddIDw8IDE2KSB8CisJCSAgICAoKHUzMikgc2NwLT5jbW5kWzhdIDw8IDgpIHwgKHUzMikgc2NwLT5jbW5kWzldOworCisJCWxkaW8tPnN0YXJ0X2xiYV9oaSA9ICgodTMyKSBzY3AtPmNtbmRbMl0gPDwgMjQpIHwKKwkJICAgICgodTMyKSBzY3AtPmNtbmRbM10gPDwgMTYpIHwKKwkJICAgICgodTMyKSBzY3AtPmNtbmRbNF0gPDwgOCkgfCAodTMyKSBzY3AtPmNtbmRbNV07CisKKwl9CisKKwkvKgorCSAqIENvbnN0cnVjdCBTR0wKKwkgKi8KKwlzZ2Vfc3ogPSAoSVNfRE1BNjQpID8gc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX3NnZTY0KSA6CisJICAgIHNpemVvZihzdHJ1Y3QgbWVnYXNhc19zZ2UzMik7CisKKwlpZiAoSVNfRE1BNjQpIHsKKwkJbGRpby0+ZmxhZ3MgfD0gTUZJX0ZSQU1FX1NHTDY0OworCQlsZGlvLT5zZ2VfY291bnQgPSBtZWdhc2FzX21ha2Vfc2dsNjQoaW5zdGFuY2UsIHNjcCwgJmxkaW8tPnNnbCk7CisJfSBlbHNlCisJCWxkaW8tPnNnZV9jb3VudCA9IG1lZ2FzYXNfbWFrZV9zZ2wzMihpbnN0YW5jZSwgc2NwLCAmbGRpby0+c2dsKTsKKworCS8qCisJICogU2Vuc2UgaW5mbyBzcGVjaWZpYworCSAqLworCWxkaW8tPnNlbnNlX2xlbiA9IFNDU0lfU0VOU0VfQlVGRkVSU0laRTsKKwlsZGlvLT5zZW5zZV9idWZfcGh5c19hZGRyX2hpID0gMDsKKwlsZGlvLT5zZW5zZV9idWZfcGh5c19hZGRyX2xvID0gY21kLT5zZW5zZV9waHlzX2FkZHI7CisKKwlzZ2VfYnl0ZXMgPSBzZ2Vfc3ogKiBsZGlvLT5zZ2VfY291bnQ7CisKKwljbWQtPmZyYW1lX2NvdW50ID0gKHNnZV9ieXRlcyAvIE1FR0FNRklfRlJBTUVfU0laRSkgKworCSAgICAoKHNnZV9ieXRlcyAlIE1FR0FNRklfRlJBTUVfU0laRSkgPyAxIDogMCkgKyAxOworCisJaWYgKGNtZC0+ZnJhbWVfY291bnQgPiA3KQorCQljbWQtPmZyYW1lX2NvdW50ID0gODsKKworCXJldHVybiBjbWQtPmZyYW1lX2NvdW50OworfQorCisvKioKKyAqIG1lZ2FzYXNfYnVpbGRfY21kIC0JUHJlcGFyZXMgYSBjb21tYW5kIHBhY2tldAorICogQGluc3RhbmNlOgkJQWRhcHRlciBzb2Z0IHN0YXRlCisgKiBAc2NwOgkJU0NTSSBjb21tYW5kCisgKiBAZnJhbWVfY291bnQ6CVtPVVRdIE51bWJlciBvZiBmcmFtZXMgdXNlZCB0byBwcmVwYXJlIHRoaXMgY29tbWFuZAorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZWdhc2FzX2NtZCAqbWVnYXNhc19idWlsZF9jbWQoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UKKwkJCQkJCSAgICAqaW5zdGFuY2UsCisJCQkJCQkgICAgc3RydWN0IHNjc2lfY21uZCAqc2NwLAorCQkJCQkJICAgIGludCAqZnJhbWVfY291bnQpCit7CisJdTMyIGxvZ2ljYWxfY21kOworCXN0cnVjdCBtZWdhc2FzX2NtZCAqY21kOworCisJLyoKKwkgKiBGaW5kIG91dCBpZiB0aGlzIGlzIGxvZ2ljYWwgb3IgcGh5c2ljYWwgZHJpdmUgY29tbWFuZC4KKwkgKi8KKwlsb2dpY2FsX2NtZCA9IE1FR0FTQVNfSVNfTE9HSUNBTChzY3ApOworCisJLyoKKwkgKiBMb2dpY2FsIGRyaXZlIGNvbW1hbmQKKwkgKi8KKwlpZiAobG9naWNhbF9jbWQpIHsKKworCQlpZiAoc2NwLT5kZXZpY2UtPmlkID49IE1FR0FTQVNfTUFYX0xEKSB7CisJCQlzY3AtPnJlc3VsdCA9IERJRF9CQURfVEFSR0VUIDw8IDE2OworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlzd2l0Y2ggKHNjcC0+Y21uZFswXSkgeworCisJCWNhc2UgUkVBRF8xMDoKKwkJY2FzZSBXUklURV8xMDoKKwkJY2FzZSBSRUFEXzEyOgorCQljYXNlIFdSSVRFXzEyOgorCQljYXNlIFJFQURfNjoKKwkJY2FzZSBXUklURV82OgorCQljYXNlIFJFQURfMTY6CisJCWNhc2UgV1JJVEVfMTY6CisJCQkvKgorCQkJICogRmFpbCBmb3IgTFVOID4gMAorCQkJICovCisJCQlpZiAoc2NwLT5kZXZpY2UtPmx1bikgeworCQkJCXNjcC0+cmVzdWx0ID0gRElEX0JBRF9UQVJHRVQgPDwgMTY7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisKKwkJCWNtZCA9IG1lZ2FzYXNfZ2V0X2NtZChpbnN0YW5jZSk7CisKKwkJCWlmICghY21kKSB7CisJCQkJc2NwLT5yZXN1bHQgPSBESURfSU1NX1JFVFJZIDw8IDE2OworCQkJCXJldHVybiBOVUxMOworCQkJfQorCisJCQkqZnJhbWVfY291bnQgPSBtZWdhc2FzX2J1aWxkX2xkaW8oaW5zdGFuY2UsIHNjcCwgY21kKTsKKworCQkJaWYgKCEoKmZyYW1lX2NvdW50KSkgeworCQkJCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgY21kKTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKworCQkJcmV0dXJuIGNtZDsKKworCQlkZWZhdWx0OgorCQkJLyoKKwkJCSAqIEZhaWwgZm9yIExVTiA+IDAKKwkJCSAqLworCQkJaWYgKHNjcC0+ZGV2aWNlLT5sdW4pIHsKKwkJCQlzY3AtPnJlc3VsdCA9IERJRF9CQURfVEFSR0VUIDw8IDE2OworCQkJCXJldHVybiBOVUxMOworCQkJfQorCisJCQljbWQgPSBtZWdhc2FzX2dldF9jbWQoaW5zdGFuY2UpOworCisJCQlpZiAoIWNtZCkgeworCQkJCXNjcC0+cmVzdWx0ID0gRElEX0lNTV9SRVRSWSA8PCAxNjsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKworCQkJKmZyYW1lX2NvdW50ID0gbWVnYXNhc19idWlsZF9kY2RiKGluc3RhbmNlLCBzY3AsIGNtZCk7CisKKwkJCWlmICghKCpmcmFtZV9jb3VudCkpIHsKKwkJCQltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisKKwkJCXJldHVybiBjbWQ7CisJCX0KKwl9IGVsc2UgeworCQljbWQgPSBtZWdhc2FzX2dldF9jbWQoaW5zdGFuY2UpOworCisJCWlmICghY21kKSB7CisJCQlzY3AtPnJlc3VsdCA9IERJRF9JTU1fUkVUUlkgPDwgMTY7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCSpmcmFtZV9jb3VudCA9IG1lZ2FzYXNfYnVpbGRfZGNkYihpbnN0YW5jZSwgc2NwLCBjbWQpOworCisJCWlmICghKCpmcmFtZV9jb3VudCkpIHsKKwkJCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgY21kKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJcmV0dXJuIGNtZDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBtZWdhc2FzX3F1ZXVlX2NvbW1hbmQgLQlRdWV1ZSBlbnRyeSBwb2ludAorICogQHNjbWQ6CQkJU0NTSSBjb21tYW5kIHRvIGJlIHF1ZXVlZAorICogQGRvbmU6CQkJQ2FsbGJhY2sgZW50cnkgcG9pbnQKKyAqLworc3RhdGljIGludAorbWVnYXNhc19xdWV1ZV9jb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsIHZvaWQgKCpkb25lKSAoc3RydWN0IHNjc2lfY21uZCAqKSkKK3sKKwl1MzIgZnJhbWVfY291bnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZDsKKwlzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2U7CisKKwlpbnN0YW5jZSA9IChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqKQorCSAgICBzY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOworCXNjbWQtPnNjc2lfZG9uZSA9IGRvbmU7CisJc2NtZC0+cmVzdWx0ID0gMDsKKworCWNtZCA9IG1lZ2FzYXNfYnVpbGRfY21kKGluc3RhbmNlLCBzY21kLCAmZnJhbWVfY291bnQpOworCisJaWYgKCFjbWQpIHsKKwkJZG9uZShzY21kKTsKKwkJcmV0dXJuIDA7CisJfQorCisJY21kLT5zY21kID0gc2NtZDsKKwlzY21kLT5TQ3AucHRyID0gKGNoYXIgKiljbWQ7CisJc2NtZC0+U0NwLnNlbnRfY29tbWFuZCA9IGppZmZpZXM7CisKKwkvKgorCSAqIElzc3VlIHRoZSBjb21tYW5kIHRvIHRoZSBGVworCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+aW5zdGFuY2VfbG9jaywgZmxhZ3MpOworCWluc3RhbmNlLT5md19vdXRzdGFuZGluZysrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5pbnN0YW5jZV9sb2NrLCBmbGFncyk7CisKKwl3cml0ZWwoKChjbWQtPmZyYW1lX3BoeXNfYWRkciA+PiAzKSB8IChjbWQtPmZyYW1lX2NvdW50IC0gMSkpLAorCSAgICAgICAmaW5zdGFuY2UtPnJlZ19zZXQtPmluYm91bmRfcXVldWVfcG9ydCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBtZWdhc2FzX3dhaXRfZm9yX291dHN0YW5kaW5nIC0JV2FpdCBmb3IgYWxsIG91dHN0YW5kaW5nIGNtZHMKKyAqIEBpbnN0YW5jZToJCQkJQWRhcHRlciBzb2Z0IHN0YXRlCisgKgorICogVGhpcyBmdW5jdGlvbiB3YWl0cyBmb3IgdXB0byBNRUdBU0FTX1JFU0VUX1dBSVRfVElNRSBzZWNvbmRzIGZvciBGVyB0bworICogY29tcGxldGUgYWxsIGl0cyBvdXRzdGFuZGluZyBjb21tYW5kcy4gUmV0dXJucyBlcnJvciBpZiBvbmUgb3IgbW9yZSBJT3MKKyAqIGFyZSBwZW5kaW5nIGFmdGVyIHRoaXMgdGltZSBwZXJpb2QuIEl0IGFsc28gbWFya3MgdGhlIGNvbnRyb2xsZXIgZGVhZC4KKyAqLworc3RhdGljIGludCBtZWdhc2FzX3dhaXRfZm9yX291dHN0YW5kaW5nKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKK3sKKwlpbnQgaTsKKwl1MzIgd2FpdF90aW1lID0gTUVHQVNBU19SRVNFVF9XQUlUX1RJTUU7CisKKwlmb3IgKGkgPSAwOyBpIDwgd2FpdF90aW1lOyBpKyspIHsKKworCQlpZiAoIWluc3RhbmNlLT5md19vdXRzdGFuZGluZykKKwkJCWJyZWFrOworCisJCWlmICghKGkgJSBNRUdBU0FTX1JFU0VUX05PVElDRV9JTlRFUlZBTCkpIHsKKwkJCXByaW50ayhLRVJOX05PVElDRSAibWVnYXNhczogWyUyZF13YWl0aW5nIGZvciAlZCAiCisJCQkgICAgICAgImNvbW1hbmRzIHRvIGNvbXBsZXRlXG4iLCBpLAorCQkJICAgICAgIGluc3RhbmNlLT5md19vdXRzdGFuZGluZyk7CisJCX0KKworCQltc2xlZXAoMTAwMCk7CisJfQorCisJaWYgKGluc3RhbmNlLT5md19vdXRzdGFuZGluZykgeworCQlpbnN0YW5jZS0+aHdfY3JpdF9lcnJvciA9IDE7CisJCXJldHVybiBGQUlMRUQ7CisJfQorCisJcmV0dXJuIFNVQ0NFU1M7Cit9CisKKy8qKgorICogbWVnYXNhc19nZW5lcmljX3Jlc2V0IC0JR2VuZXJpYyByZXNldCByb3V0aW5lCisgKiBAc2NtZDoJCQlNaWQtbGF5ZXIgU0NTSSBjb21tYW5kCisgKgorICogVGhpcyByb3V0aW5lIGltcGxlbWVudHMgYSBnZW5lcmljIHJlc2V0IGhhbmRsZXIgZm9yIGRldmljZSwgYnVzIGFuZCBob3N0CisgKiByZXNldCByZXF1ZXN0cy4gRGV2aWNlLCBidXMgYW5kIGhvc3Qgc3BlY2lmaWMgcmVzZXQgaGFuZGxlcnMgY2FuIHVzZSB0aGlzCisgKiBmdW5jdGlvbiBhZnRlciB0aGV5IGRvIHRoZWlyIHNwZWNpZmljIHRhc2tzLgorICovCitzdGF0aWMgaW50IG1lZ2FzYXNfZ2VuZXJpY19yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQoreworCWludCByZXRfdmFsOworCXN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZTsKKworCWluc3RhbmNlID0gKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICopc2NtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKKworCXByaW50ayhLRVJOX05PVElDRSAibWVnYXNhczogUkVTRVQgLSVsZCBjbWQ9JXggPGM9JWQgdD0lZCBsPSVkPlxuIiwKKwkgICAgICAgc2NtZC0+c2VyaWFsX251bWJlciwgc2NtZC0+Y21uZFswXSwgc2NtZC0+ZGV2aWNlLT5jaGFubmVsLAorCSAgICAgICBzY21kLT5kZXZpY2UtPmlkLCBzY21kLT5kZXZpY2UtPmx1bik7CisKKwlpZiAoaW5zdGFuY2UtPmh3X2NyaXRfZXJyb3IpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzOiBjYW5ub3QgcmVjb3ZlciBmcm9tIHByZXZpb3VzIHJlc2V0ICIKKwkJICAgICAgICJmYWlsdXJlc1xuIik7CisJCXJldHVybiBGQUlMRUQ7CisJfQorCisJc3Bpbl91bmxvY2soc2NtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2spOworCisJcmV0X3ZhbCA9IG1lZ2FzYXNfd2FpdF9mb3Jfb3V0c3RhbmRpbmcoaW5zdGFuY2UpOworCisJaWYgKHJldF92YWwgPT0gU1VDQ0VTUykKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJtZWdhc2FzOiByZXNldCBzdWNjZXNzZnVsIFxuIik7CisJZWxzZQorCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXM6IGZhaWxlZCB0byBkbyByZXNldFxuIik7CisKKwlzcGluX2xvY2soc2NtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2spOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKK3N0YXRpYyBlbnVtIHNjc2lfZWhfdGltZXJfcmV0dXJuIG1lZ2FzYXNfcmVzZXRfdGltZXIoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKK3sKKwl1bnNpZ25lZCBsb25nIHNlY29uZHM7CisKKwlpZiAoc2NtZC0+U0NwLnB0cikgeworCQlzZWNvbmRzID0gKGppZmZpZXMgLSBzY21kLT5TQ3Auc2VudF9jb21tYW5kKSAvIEhaOworCisJCWlmIChzZWNvbmRzIDwgOTApIHsKKwkJCXJldHVybiBFSF9SRVNFVF9USU1FUjsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiBFSF9OT1RfSEFORExFRDsKKwkJfQorCX0KKworCXJldHVybiBFSF9IQU5ETEVEOworfQorCisvKioKKyAqIG1lZ2FzYXNfcmVzZXRfZGV2aWNlIC0JRGV2aWNlIHJlc2V0IGhhbmRsZXIgZW50cnkgcG9pbnQKKyAqLworc3RhdGljIGludCBtZWdhc2FzX3Jlc2V0X2RldmljZShzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQoreworCWludCByZXQ7CisKKwkvKgorCSAqIEZpcnN0IHdhaXQgZm9yIGFsbCBjb21tYW5kcyB0byBjb21wbGV0ZQorCSAqLworCXJldCA9IG1lZ2FzYXNfZ2VuZXJpY19yZXNldChzY21kKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogbWVnYXNhc19yZXNldF9idXNfaG9zdCAtCUJ1cyAmIGhvc3QgcmVzZXQgaGFuZGxlciBlbnRyeSBwb2ludAorICovCitzdGF0aWMgaW50IG1lZ2FzYXNfcmVzZXRfYnVzX2hvc3Qoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKK3sKKwlpbnQgcmV0OworCisJLyoKKwkgKiBGcmlzdCB3YWl0IGZvciBhbGwgY29tbWFuZHMgdG8gY29tcGxldGUKKwkgKi8KKwlyZXQgPSBtZWdhc2FzX2dlbmVyaWNfcmVzZXQoc2NtZCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIG1lZ2FzYXNfc2VydmljZV9hZW4gLQlQcm9jZXNzZXMgYW4gZXZlbnQgbm90aWZpY2F0aW9uCisgKiBAaW5zdGFuY2U6CQkJQWRhcHRlciBzb2Z0IHN0YXRlCisgKiBAY21kOgkJCUFFTiBjb21tYW5kIGNvbXBsZXRlZCBieSB0aGUgSVNSCisgKgorICogRm9yIEFFTiwgZHJpdmVyIHNlbmRzIGEgY29tbWFuZCBkb3duIHRvIEZXIHRoYXQgaXMgaGVsZCBieSB0aGUgRlcgdGlsbCBhbgorICogZXZlbnQgb2NjdXJzLiBXaGVuIGFuIGV2ZW50IG9mIGludGVyZXN0IG9jY3VycywgRlcgY29tcGxldGVzIHRoZSBjb21tYW5kCisgKiB0aGF0IGl0IHdhcyBwcmV2aW91c2x5IGhvbGRpbmcuCisgKgorICogVGhpcyByb3V0aW5lcyBzZW5kcyBTSUdJTyBzaWduYWwgdG8gcHJvY2Vzc2VzIHRoYXQgaGF2ZSByZWdpc3RlcmVkIHdpdGggdGhlCisgKiBkcml2ZXIgZm9yIEFFTi4KKyAqLworc3RhdGljIHZvaWQKK21lZ2FzYXNfc2VydmljZV9hZW4oc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLCBzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZCkKK3sKKwkvKgorCSAqIERvbid0IHNpZ25hbCBhcHAgaWYgaXQgaXMganVzdCBhbiBhYm9ydGVkIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBhZW4KKwkgKi8KKwlpZiAoIWNtZC0+YWJvcnRfYWVuKQorCQlraWxsX2Zhc3luYygmbWVnYXNhc19hc3luY19xdWV1ZSwgU0lHSU8sIFBPTExfSU4pOworCWVsc2UKKwkJY21kLT5hYm9ydF9hZW4gPSAwOworCisJaW5zdGFuY2UtPmFlbl9jbWQgPSBOVUxMOworCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgY21kKTsKK30KKworLyoKKyAqIFNjc2kgaG9zdCB0ZW1wbGF0ZSBmb3IgbWVnYXJhaWRfc2FzIGRyaXZlcgorICovCitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBtZWdhc2FzX3RlbXBsYXRlID0geworCisJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gIkxTSSBMb2dpYyBTQVMgYmFzZWQgTWVnYVJBSUQgZHJpdmVyIiwKKwkucHJvY19uYW1lID0gIm1lZ2FyYWlkX3NhcyIsCisJLnF1ZXVlY29tbWFuZCA9IG1lZ2FzYXNfcXVldWVfY29tbWFuZCwKKwkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgPSBtZWdhc2FzX3Jlc2V0X2RldmljZSwKKwkuZWhfYnVzX3Jlc2V0X2hhbmRsZXIgPSBtZWdhc2FzX3Jlc2V0X2J1c19ob3N0LAorCS5laF9ob3N0X3Jlc2V0X2hhbmRsZXIgPSBtZWdhc2FzX3Jlc2V0X2J1c19ob3N0LAorCS5laF90aW1lZF9vdXQgPSBtZWdhc2FzX3Jlc2V0X3RpbWVyLAorCS51c2VfY2x1c3RlcmluZyA9IEVOQUJMRV9DTFVTVEVSSU5HLAorfTsKKworLyoqCisgKiBtZWdhc2FzX2NvbXBsZXRlX2ludF9jbWQgLQlDb21wbGV0ZXMgYW4gaW50ZXJuYWwgY29tbWFuZAorICogQGluc3RhbmNlOgkJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICogQGNtZDoJCQlDb21tYW5kIHRvIGJlIGNvbXBsZXRlZAorICoKKyAqIFRoZSBtZWdhc2FzX2lzc3VlX2Jsb2NrZWRfY21kKCkgZnVuY3Rpb24gd2FpdHMgZm9yIGEgY29tbWFuZCB0byBjb21wbGV0ZQorICogYWZ0ZXIgaXQgaXNzdWVzIGEgY29tbWFuZC4gVGhpcyBmdW5jdGlvbiB3YWtlcyB1cCB0aGF0IHdhaXRpbmcgcm91dGluZSBieQorICogY2FsbGluZyB3YWtlX3VwKCkgb24gdGhlIHdhaXQgcXVldWUuCisgKi8KK3N0YXRpYyB2b2lkCittZWdhc2FzX2NvbXBsZXRlX2ludF9jbWQoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAorCQkJIHN0cnVjdCBtZWdhc2FzX2NtZCAqY21kKQoreworCWNtZC0+Y21kX3N0YXR1cyA9IGNtZC0+ZnJhbWUtPmlvLmNtZF9zdGF0dXM7CisKKwlpZiAoY21kLT5jbWRfc3RhdHVzID09IEVOT0RBVEEpIHsKKwkJY21kLT5jbWRfc3RhdHVzID0gMDsKKwl9CisJd2FrZV91cCgmaW5zdGFuY2UtPmludF9jbWRfd2FpdF9xKTsKK30KKworLyoqCisgKiBtZWdhc2FzX2NvbXBsZXRlX2Fib3J0IC0JQ29tcGxldGVzIGFib3J0aW5nIGEgY29tbWFuZAorICogQGluc3RhbmNlOgkJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICogQGNtZDoJCQlDbWQgdGhhdCB3YXMgaXNzdWVkIHRvIGFib3J0IGFub3RoZXIgY21kCisgKgorICogVGhlIG1lZ2FzYXNfaXNzdWVfYmxvY2tlZF9hYm9ydF9jbWQoKSBmdW5jdGlvbiB3YWl0cyBvbiBhYm9ydF9jbWRfd2FpdF9xIAorICogYWZ0ZXIgaXQgaXNzdWVzIGFuIGFib3J0IG9uIGEgcHJldmlvdXNseSBpc3N1ZWQgY29tbWFuZC4gVGhpcyBmdW5jdGlvbiAKKyAqIHdha2VzIHVwIGFsbCBmdW5jdGlvbnMgd2FpdGluZyBvbiB0aGUgc2FtZSB3YWl0IHF1ZXVlLgorICovCitzdGF0aWMgdm9pZAorbWVnYXNhc19jb21wbGV0ZV9hYm9ydChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsCisJCSAgICAgICBzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZCkKK3sKKwlpZiAoY21kLT5zeW5jX2NtZCkgeworCQljbWQtPnN5bmNfY21kID0gMDsKKwkJY21kLT5jbWRfc3RhdHVzID0gMDsKKwkJd2FrZV91cCgmaW5zdGFuY2UtPmFib3J0X2NtZF93YWl0X3EpOworCX0KKworCXJldHVybjsKK30KKworLyoqCisgKiBtZWdhc2FzX3VubWFwX3NnYnVmIC0JVW5tYXAgU0cgYnVmZmVycworICogQGluc3RhbmNlOgkJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICogQGNtZDoJCQlDb21wbGV0ZWQgY29tbWFuZAorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK21lZ2FzYXNfdW5tYXBfc2didWYoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLCBzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZCkKK3sKKwlkbWFfYWRkcl90IGJ1Zl9oOworCXU4IG9wY29kZTsKKworCWlmIChjbWQtPnNjbWQtPnVzZV9zZykgeworCQlwY2lfdW5tYXBfc2coaW5zdGFuY2UtPnBkZXYsIGNtZC0+c2NtZC0+cmVxdWVzdF9idWZmZXIsCisJCQkgICAgIGNtZC0+c2NtZC0+dXNlX3NnLCBjbWQtPnNjbWQtPnNjX2RhdGFfZGlyZWN0aW9uKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghY21kLT5zY21kLT5yZXF1ZXN0X2J1ZmZsZW4pCisJCXJldHVybjsKKworCW9wY29kZSA9IGNtZC0+ZnJhbWUtPmhkci5jbWQ7CisKKwlpZiAoKG9wY29kZSA9PSBNRklfQ01EX0xEX1JFQUQpIHx8IChvcGNvZGUgPT0gTUZJX0NNRF9MRF9XUklURSkpIHsKKwkJaWYgKElTX0RNQTY0KQorCQkJYnVmX2ggPSBjbWQtPmZyYW1lLT5pby5zZ2wuc2dlNjRbMF0ucGh5c19hZGRyOworCQllbHNlCisJCQlidWZfaCA9IGNtZC0+ZnJhbWUtPmlvLnNnbC5zZ2UzMlswXS5waHlzX2FkZHI7CisJfSBlbHNlIHsKKwkJaWYgKElTX0RNQTY0KQorCQkJYnVmX2ggPSBjbWQtPmZyYW1lLT5wdGhydS5zZ2wuc2dlNjRbMF0ucGh5c19hZGRyOworCQllbHNlCisJCQlidWZfaCA9IGNtZC0+ZnJhbWUtPnB0aHJ1LnNnbC5zZ2UzMlswXS5waHlzX2FkZHI7CisJfQorCisJcGNpX3VubWFwX3NpbmdsZShpbnN0YW5jZS0+cGRldiwgYnVmX2gsIGNtZC0+c2NtZC0+cmVxdWVzdF9idWZmbGVuLAorCQkJIGNtZC0+c2NtZC0+c2NfZGF0YV9kaXJlY3Rpb24pOworCXJldHVybjsKK30KKworLyoqCisgKiBtZWdhc2FzX2NvbXBsZXRlX2NtZCAtCUNvbXBsZXRlcyBhIGNvbW1hbmQKKyAqIEBpbnN0YW5jZToJCQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqIEBjbWQ6CQkJQ29tbWFuZCB0byBiZSBjb21wbGV0ZWQKKyAqIEBhbHRfc3RhdHVzOgkJCUlmIG5vbi16ZXJvLCB1c2UgdGhpcyB2YWx1ZSBhcyBzdGF0dXMgdG8gCisgKiAJCQkJU0NTSSBtaWQtbGF5ZXIgaW5zdGVhZCBvZiB0aGUgdmFsdWUgcmV0dXJuZWQKKyAqIAkJCQlieSB0aGUgRlcuIFRoaXMgc2hvdWxkIGJlIHVzZWQgaWYgY2FsbGVyIHdhbnRzCisgKiAJCQkJYW4gYWx0ZXJuYXRlIHN0YXR1cyAoYXMgaW4gdGhlIGNhc2Ugb2YgYWJvcnRlZAorICogCQkJCWNvbW1hbmRzKQorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK21lZ2FzYXNfY29tcGxldGVfY21kKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwgc3RydWN0IG1lZ2FzYXNfY21kICpjbWQsCisJCSAgICAgdTggYWx0X3N0YXR1cykKK3sKKwlpbnQgZXhjZXB0aW9uID0gMDsKKwlzdHJ1Y3QgbWVnYXNhc19oZWFkZXIgKmhkciA9ICZjbWQtPmZyYW1lLT5oZHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChjbWQtPnNjbWQpIHsKKwkJY21kLT5zY21kLT5TQ3AucHRyID0gKGNoYXIgKikwOworCX0KKworCXN3aXRjaCAoaGRyLT5jbWQpIHsKKworCWNhc2UgTUZJX0NNRF9QRF9TQ1NJX0lPOgorCWNhc2UgTUZJX0NNRF9MRF9TQ1NJX0lPOgorCisJCS8qCisJCSAqIE1GSV9DTURfUERfU0NTSV9JTyBhbmQgTUZJX0NNRF9MRF9TQ1NJX0lPIGNvdWxkIGhhdmUgYmVlbgorCQkgKiBpc3N1ZWQgZWl0aGVyIHRocm91Z2ggYW4gSU8gcGF0aCBvciBhbiBJT0NUTCBwYXRoLiBJZiBpdAorCQkgKiB3YXMgdmlhIElPQ1RMLCB3ZSB3aWxsIHNlbmQgaXQgdG8gaW50ZXJuYWwgY29tcGxldGlvbi4KKwkJICovCisJCWlmIChjbWQtPnN5bmNfY21kKSB7CisJCQljbWQtPnN5bmNfY21kID0gMDsKKwkJCW1lZ2FzYXNfY29tcGxldGVfaW50X2NtZChpbnN0YW5jZSwgY21kKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogRG9uJ3QgZXhwb3J0IHBoeXNpY2FsIGRpc2sgZGV2aWNlcyB0byBtaWQtbGF5ZXIuCisJCSAqLworCQlpZiAoIU1FR0FTQVNfSVNfTE9HSUNBTChjbWQtPnNjbWQpICYmCisJCSAgICAoaGRyLT5jbWRfc3RhdHVzID09IE1GSV9TVEFUX09LKSAmJgorCQkgICAgKGNtZC0+c2NtZC0+Y21uZFswXSA9PSBJTlFVSVJZKSkgeworCisJCQlpZiAoKCgqKHU4ICopIGNtZC0+c2NtZC0+cmVxdWVzdF9idWZmZXIpICYgMHgxRikgPT0KKwkJCSAgICBUWVBFX0RJU0spIHsKKwkJCQljbWQtPnNjbWQtPnJlc3VsdCA9IERJRF9CQURfVEFSR0VUIDw8IDE2OworCQkJCWV4Y2VwdGlvbiA9IDE7CisJCQl9CisJCX0KKworCWNhc2UgTUZJX0NNRF9MRF9SRUFEOgorCWNhc2UgTUZJX0NNRF9MRF9XUklURToKKworCQlpZiAoYWx0X3N0YXR1cykgeworCQkJY21kLT5zY21kLT5yZXN1bHQgPSBhbHRfc3RhdHVzIDw8IDE2OworCQkJZXhjZXB0aW9uID0gMTsKKwkJfQorCisJCWlmIChleGNlcHRpb24pIHsKKworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmluc3RhbmNlLT5pbnN0YW5jZV9sb2NrLCBmbGFncyk7CisJCQlpbnN0YW5jZS0+Zndfb3V0c3RhbmRpbmctLTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5pbnN0YW5jZV9sb2NrLCBmbGFncyk7CisKKwkJCW1lZ2FzYXNfdW5tYXBfc2didWYoaW5zdGFuY2UsIGNtZCk7CisJCQljbWQtPnNjbWQtPnNjc2lfZG9uZShjbWQtPnNjbWQpOworCQkJbWVnYXNhc19yZXR1cm5fY21kKGluc3RhbmNlLCBjbWQpOworCisJCQlicmVhazsKKwkJfQorCisJCXN3aXRjaCAoaGRyLT5jbWRfc3RhdHVzKSB7CisKKwkJY2FzZSBNRklfU1RBVF9PSzoKKwkJCWNtZC0+c2NtZC0+cmVzdWx0ID0gRElEX09LIDw8IDE2OworCQkJYnJlYWs7CisKKwkJY2FzZSBNRklfU1RBVF9TQ1NJX0lPX0ZBSUxFRDoKKwkJY2FzZSBNRklfU1RBVF9MRF9JTklUX0lOX1BST0dSRVNTOgorCQkJY21kLT5zY21kLT5yZXN1bHQgPQorCQkJICAgIChESURfRVJST1IgPDwgMTYpIHwgaGRyLT5zY3NpX3N0YXR1czsKKwkJCWJyZWFrOworCisJCWNhc2UgTUZJX1NUQVRfU0NTSV9ET05FX1dJVEhfRVJST1I6CisKKwkJCWNtZC0+c2NtZC0+cmVzdWx0ID0gKERJRF9PSyA8PCAxNikgfCBoZHItPnNjc2lfc3RhdHVzOworCisJCQlpZiAoaGRyLT5zY3NpX3N0YXR1cyA9PSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT04pIHsKKwkJCQltZW1zZXQoY21kLT5zY21kLT5zZW5zZV9idWZmZXIsIDAsCisJCQkJICAgICAgIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7CisJCQkJbWVtY3B5KGNtZC0+c2NtZC0+c2Vuc2VfYnVmZmVyLCBjbWQtPnNlbnNlLAorCQkJCSAgICAgICBoZHItPnNlbnNlX2xlbik7CisKKwkJCQljbWQtPnNjbWQtPnJlc3VsdCB8PSBEUklWRVJfU0VOU0UgPDwgMjQ7CisJCQl9CisKKwkJCWJyZWFrOworCisJCWNhc2UgTUZJX1NUQVRfTERfT0ZGTElORToKKwkJY2FzZSBNRklfU1RBVF9ERVZJQ0VfTk9UX0ZPVU5EOgorCQkJY21kLT5zY21kLT5yZXN1bHQgPSBESURfQkFEX1RBUkdFVCA8PCAxNjsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogTUZJIEZXIHN0YXR1cyAlI3hcbiIsCisJCQkgICAgICAgaGRyLT5jbWRfc3RhdHVzKTsKKwkJCWNtZC0+c2NtZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OworCQkJYnJlYWs7CisJCX0KKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5zdGFuY2UtPmluc3RhbmNlX2xvY2ssIGZsYWdzKTsKKwkJaW5zdGFuY2UtPmZ3X291dHN0YW5kaW5nLS07CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5pbnN0YW5jZV9sb2NrLCBmbGFncyk7CisKKwkJbWVnYXNhc191bm1hcF9zZ2J1ZihpbnN0YW5jZSwgY21kKTsKKwkJY21kLT5zY21kLT5zY3NpX2RvbmUoY21kLT5zY21kKTsKKwkJbWVnYXNhc19yZXR1cm5fY21kKGluc3RhbmNlLCBjbWQpOworCisJCWJyZWFrOworCisJY2FzZSBNRklfQ01EX1NNUDoKKwljYXNlIE1GSV9DTURfU1RQOgorCWNhc2UgTUZJX0NNRF9EQ01EOgorCisJCS8qCisJCSAqIFNlZSBpZiBnb3QgYW4gZXZlbnQgbm90aWZpY2F0aW9uCisJCSAqLworCQlpZiAoY21kLT5mcmFtZS0+ZGNtZC5vcGNvZGUgPT0gTVJfRENNRF9DVFJMX0VWRU5UX1dBSVQpCisJCQltZWdhc2FzX3NlcnZpY2VfYWVuKGluc3RhbmNlLCBjbWQpOworCQllbHNlCisJCQltZWdhc2FzX2NvbXBsZXRlX2ludF9jbWQoaW5zdGFuY2UsIGNtZCk7CisKKwkJYnJlYWs7CisKKwljYXNlIE1GSV9DTURfQUJPUlQ6CisJCS8qCisJCSAqIENtZCBpc3N1ZWQgdG8gYWJvcnQgYW5vdGhlciBjbWQgcmV0dXJuZWQKKwkJICovCisJCW1lZ2FzYXNfY29tcGxldGVfYWJvcnQoaW5zdGFuY2UsIGNtZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKCJtZWdhc2FzOiBVbmtub3duIGNvbW1hbmQgY29tcGxldGVkISBbMHglWF1cbiIsCisJCSAgICAgICBoZHItPmNtZCk7CisJCWJyZWFrOworCX0KK30KKworLyoqCisgKiBtZWdhc2FzX2RlcGxldGVfcmVwbHlfcXVldWUgLQlQcm9jZXNzZXMgYWxsIGNvbXBsZXRlZCBjb21tYW5kcworICogQGluc3RhbmNlOgkJCQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqIEBhbHRfc3RhdHVzOgkJCQlBbHRlcm5hdGUgc3RhdHVzIHRvIGJlIHJldHVybmVkIHRvCisgKiAJCQkJCVNDU0kgbWlkLWxheWVyIGluc3RlYWQgb2YgdGhlIHN0YXR1cworICogCQkJCQlyZXR1cm5lZCBieSB0aGUgRlcKKyAqLworc3RhdGljIGlubGluZSBpbnQKK21lZ2FzYXNfZGVwbGV0ZV9yZXBseV9xdWV1ZShzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsIHU4IGFsdF9zdGF0dXMpCit7CisJdTMyIHN0YXR1czsKKwl1MzIgcHJvZHVjZXI7CisJdTMyIGNvbnN1bWVyOworCXUzMiBjb250ZXh0OworCXN0cnVjdCBtZWdhc2FzX2NtZCAqY21kOworCisJLyoKKwkgKiBDaGVjayBpZiBpdCBpcyBvdXIgaW50ZXJydXB0CisJICovCisJc3RhdHVzID0gcmVhZGwoJmluc3RhbmNlLT5yZWdfc2V0LT5vdXRib3VuZF9pbnRyX3N0YXR1cyk7CisKKwlpZiAoIShzdGF0dXMgJiBNRklfT0JfSU5UUl9TVEFUVVNfTUFTSykpIHsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCS8qCisJICogQ2xlYXIgdGhlIGludGVycnVwdCBieSB3cml0aW5nIGJhY2sgdGhlIHNhbWUgdmFsdWUKKwkgKi8KKwl3cml0ZWwoc3RhdHVzLCAmaW5zdGFuY2UtPnJlZ19zZXQtPm91dGJvdW5kX2ludHJfc3RhdHVzKTsKKworCXByb2R1Y2VyID0gKmluc3RhbmNlLT5wcm9kdWNlcjsKKwljb25zdW1lciA9ICppbnN0YW5jZS0+Y29uc3VtZXI7CisKKwl3aGlsZSAoY29uc3VtZXIgIT0gcHJvZHVjZXIpIHsKKwkJY29udGV4dCA9IGluc3RhbmNlLT5yZXBseV9xdWV1ZVtjb25zdW1lcl07CisKKwkJY21kID0gaW5zdGFuY2UtPmNtZF9saXN0W2NvbnRleHRdOworCisJCW1lZ2FzYXNfY29tcGxldGVfY21kKGluc3RhbmNlLCBjbWQsIGFsdF9zdGF0dXMpOworCisJCWNvbnN1bWVyKys7CisJCWlmIChjb25zdW1lciA9PSAoaW5zdGFuY2UtPm1heF9md19jbWRzICsgMSkpIHsKKwkJCWNvbnN1bWVyID0gMDsKKwkJfQorCX0KKworCSppbnN0YW5jZS0+Y29uc3VtZXIgPSBwcm9kdWNlcjsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoqCisgKiBtZWdhc2FzX2lzciAtIGlzciBlbnRyeSBwb2ludAorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgbWVnYXNhc19pc3IoaW50IGlycSwgdm9pZCAqZGV2cCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIG1lZ2FzYXNfZGVwbGV0ZV9yZXBseV9xdWV1ZSgoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKilkZXZwLAorCQkJCQkgICBESURfT0spOworfQorCisvKioKKyAqIG1lZ2FzYXNfdHJhbnNpdGlvbl90b19yZWFkeSAtCU1vdmUgdGhlIEZXIHRvIFJFQURZIHN0YXRlCisgKiBAcmVnX3NldDoJCQkJTUZJIHJlZ2lzdGVyIHNldAorICoKKyAqIER1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24sIEZXIHBhc3NlcyBjYW4gcG90ZW50aWFsbHkgYmUgaW4gYW55IG9uZSBvZgorICogc2V2ZXJhbCBwb3NzaWJsZSBzdGF0ZXMuIElmIHRoZSBGVyBpbiBvcGVyYXRpb25hbCwgd2FpdGluZy1mb3ItaGFuZHNoYWtlCisgKiBzdGF0ZXMsIGRyaXZlciBtdXN0IHRha2Ugc3RlcHMgdG8gYnJpbmcgaXQgdG8gcmVhZHkgc3RhdGUuIE90aGVyd2lzZSwgaXQKKyAqIGhhcyB0byB3YWl0IGZvciB0aGUgcmVhZHkgc3RhdGUuCisgKi8KK3N0YXRpYyBpbnQKK21lZ2FzYXNfdHJhbnNpdGlvbl90b19yZWFkeShzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqIHJlZ19zZXQpCit7CisJaW50IGk7CisJdTggbWF4X3dhaXQ7CisJdTMyIGZ3X3N0YXRlOworCXUzMiBjdXJfc3RhdGU7CisKKwlmd19zdGF0ZSA9IHJlYWRsKCZyZWdfc2V0LT5vdXRib3VuZF9tc2dfMCkgJiBNRklfU1RBVEVfTUFTSzsKKworCXdoaWxlIChmd19zdGF0ZSAhPSBNRklfU1RBVEVfUkVBRFkpIHsKKworCQlwcmludGsoS0VSTl9JTkZPICJtZWdhc2FzOiBXYWl0aW5nIGZvciBGVyB0byBjb21lIHRvIHJlYWR5IgorCQkgICAgICAgIiBzdGF0ZVxuIik7CisJCXN3aXRjaCAoZndfc3RhdGUpIHsKKworCQljYXNlIE1GSV9TVEFURV9GQVVMVDoKKworCQkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IEZXIGluIEZBVUxUIHN0YXRlISFcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisKKwkJY2FzZSBNRklfU1RBVEVfV0FJVF9IQU5EU0hBS0U6CisJCQkvKgorCQkJICogU2V0IHRoZSBDTFIgYml0IGluIGluYm91bmQgZG9vcmJlbGwKKwkJCSAqLworCQkJd3JpdGVsKE1GSV9JTklUX0NMRUFSX0hBTkRTSEFLRSwKKwkJCSAgICAgICAmcmVnX3NldC0+aW5ib3VuZF9kb29yYmVsbCk7CisKKwkJCW1heF93YWl0ID0gMjsKKwkJCWN1cl9zdGF0ZSA9IE1GSV9TVEFURV9XQUlUX0hBTkRTSEFLRTsKKwkJCWJyZWFrOworCisJCWNhc2UgTUZJX1NUQVRFX09QRVJBVElPTkFMOgorCQkJLyoKKwkJCSAqIEJyaW5nIGl0IHRvIFJFQURZIHN0YXRlOyBhc3N1bWluZyBtYXggd2FpdCAyIHNlY3MKKwkJCSAqLworCQkJbWVnYXNhc19kaXNhYmxlX2ludHIocmVnX3NldCk7CisJCQl3cml0ZWwoTUZJX0lOSVRfUkVBRFksICZyZWdfc2V0LT5pbmJvdW5kX2Rvb3JiZWxsKTsKKworCQkJbWF4X3dhaXQgPSAxMDsKKwkJCWN1cl9zdGF0ZSA9IE1GSV9TVEFURV9PUEVSQVRJT05BTDsKKwkJCWJyZWFrOworCisJCWNhc2UgTUZJX1NUQVRFX1VOREVGSU5FRDoKKwkJCS8qCisJCQkgKiBUaGlzIHN0YXRlIHNob3VsZCBub3QgbGFzdCBmb3IgbW9yZSB0aGFuIDIgc2Vjb25kcworCQkJICovCisJCQltYXhfd2FpdCA9IDI7CisJCQljdXJfc3RhdGUgPSBNRklfU1RBVEVfVU5ERUZJTkVEOworCQkJYnJlYWs7CisKKwkJY2FzZSBNRklfU1RBVEVfQkJfSU5JVDoKKwkJCW1heF93YWl0ID0gMjsKKwkJCWN1cl9zdGF0ZSA9IE1GSV9TVEFURV9CQl9JTklUOworCQkJYnJlYWs7CisKKwkJY2FzZSBNRklfU1RBVEVfRldfSU5JVDoKKwkJCW1heF93YWl0ID0gMjA7CisJCQljdXJfc3RhdGUgPSBNRklfU1RBVEVfRldfSU5JVDsKKwkJCWJyZWFrOworCisJCWNhc2UgTUZJX1NUQVRFX0ZXX0lOSVRfMjoKKwkJCW1heF93YWl0ID0gMjA7CisJCQljdXJfc3RhdGUgPSBNRklfU1RBVEVfRldfSU5JVF8yOworCQkJYnJlYWs7CisKKwkJY2FzZSBNRklfU1RBVEVfREVWSUNFX1NDQU46CisJCQltYXhfd2FpdCA9IDIwOworCQkJY3VyX3N0YXRlID0gTUZJX1NUQVRFX0RFVklDRV9TQ0FOOworCQkJYnJlYWs7CisKKwkJY2FzZSBNRklfU1RBVEVfRkxVU0hfQ0FDSEU6CisJCQltYXhfd2FpdCA9IDIwOworCQkJY3VyX3N0YXRlID0gTUZJX1NUQVRFX0ZMVVNIX0NBQ0hFOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBVbmtub3duIHN0YXRlIDB4JXhcbiIsCisJCQkgICAgICAgZndfc3RhdGUpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQkvKgorCQkgKiBUaGUgY3VyX3N0YXRlIHNob3VsZCBub3QgbGFzdCBmb3IgbW9yZSB0aGFuIG1heF93YWl0IHNlY3MKKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCAobWF4X3dhaXQgKiAxMDAwKTsgaSsrKSB7CisJCQlmd19zdGF0ZSA9IE1GSV9TVEFURV9NQVNLICYKKwkJCSAgICByZWFkbCgmcmVnX3NldC0+b3V0Ym91bmRfbXNnXzApOworCisJCQlpZiAoZndfc3RhdGUgPT0gY3VyX3N0YXRlKSB7CisJCQkJbXNsZWVwKDEpOworCQkJfSBlbHNlCisJCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBSZXR1cm4gZXJyb3IgaWYgZndfc3RhdGUgaGFzbid0IGNoYW5nZWQgYWZ0ZXIgbWF4X3dhaXQKKwkJICovCisJCWlmIChmd19zdGF0ZSA9PSBjdXJfc3RhdGUpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJGVyBzdGF0ZSBbJWRdIGhhc24ndCBjaGFuZ2VkICIKKwkJCSAgICAgICAiaW4gJWQgc2Vjc1xuIiwgZndfc3RhdGUsIG1heF93YWl0KTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJfTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIG1lZ2FzYXNfdGVhcmRvd25fZnJhbWVfcG9vbCAtCURlc3Ryb3kgdGhlIGNtZCBmcmFtZSBETUEgcG9vbAorICogQGluc3RhbmNlOgkJCQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqLworc3RhdGljIHZvaWQgbWVnYXNhc190ZWFyZG93bl9mcmFtZV9wb29sKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKK3sKKwlpbnQgaTsKKwl1MzIgbWF4X2NtZCA9IGluc3RhbmNlLT5tYXhfZndfY21kczsKKwlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZDsKKworCWlmICghaW5zdGFuY2UtPmZyYW1lX2RtYV9wb29sKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFJldHVybiBhbGwgZnJhbWVzIHRvIHBvb2wKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2NtZDsgaSsrKSB7CisKKwkJY21kID0gaW5zdGFuY2UtPmNtZF9saXN0W2ldOworCisJCWlmIChjbWQtPmZyYW1lKQorCQkJcGNpX3Bvb2xfZnJlZShpbnN0YW5jZS0+ZnJhbWVfZG1hX3Bvb2wsIGNtZC0+ZnJhbWUsCisJCQkJICAgICAgY21kLT5mcmFtZV9waHlzX2FkZHIpOworCisJCWlmIChjbWQtPnNlbnNlKQorCQkJcGNpX3Bvb2xfZnJlZShpbnN0YW5jZS0+c2Vuc2VfZG1hX3Bvb2wsIGNtZC0+ZnJhbWUsCisJCQkJICAgICAgY21kLT5zZW5zZV9waHlzX2FkZHIpOworCX0KKworCS8qCisJICogTm93IGRlc3Ryb3kgdGhlIHBvb2wgaXRzZWxmCisJICovCisJcGNpX3Bvb2xfZGVzdHJveShpbnN0YW5jZS0+ZnJhbWVfZG1hX3Bvb2wpOworCXBjaV9wb29sX2Rlc3Ryb3koaW5zdGFuY2UtPnNlbnNlX2RtYV9wb29sKTsKKworCWluc3RhbmNlLT5mcmFtZV9kbWFfcG9vbCA9IE5VTEw7CisJaW5zdGFuY2UtPnNlbnNlX2RtYV9wb29sID0gTlVMTDsKK30KKworLyoqCisgKiBtZWdhc2FzX2NyZWF0ZV9mcmFtZV9wb29sIC0JQ3JlYXRlcyBETUEgcG9vbCBmb3IgY21kIGZyYW1lcworICogQGluc3RhbmNlOgkJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICoKKyAqIEVhY2ggY29tbWFuZCBwYWNrZXQgaGFzIGFuIGVtYmVkZGVkIERNQSBtZW1vcnkgYnVmZmVyIHRoYXQgaXMgdXNlZCBmb3IKKyAqIGZpbGxpbmcgTUZJIGZyYW1lIGFuZCB0aGUgU0cgbGlzdCB0aGF0IGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIGZyYW1lLiBUaGlzCisgKiBmdW5jdGlvbiBjcmVhdGVzIHRob3NlIERNQSBtZW1vcnkgYnVmZmVycyBmb3IgZWFjaCBjb21tYW5kIHBhY2tldCBieSB1c2luZworICogUENJIHBvb2wgZmFjaWxpdHkuCisgKi8KK3N0YXRpYyBpbnQgbWVnYXNhc19jcmVhdGVfZnJhbWVfcG9vbChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCit7CisJaW50IGk7CisJdTMyIG1heF9jbWQ7CisJdTMyIHNnZV9zejsKKwl1MzIgc2dsX3N6OworCXUzMiB0b3RhbF9zejsKKwl1MzIgZnJhbWVfY291bnQ7CisJc3RydWN0IG1lZ2FzYXNfY21kICpjbWQ7CisKKwltYXhfY21kID0gaW5zdGFuY2UtPm1heF9md19jbWRzOworCisJLyoKKwkgKiBTaXplIG9mIG91ciBmcmFtZSBpcyA2NCBieXRlcyBmb3IgTUZJIGZyYW1lLCBmb2xsb3dlZCBieSBtYXggU0cKKwkgKiBlbGVtZW50cyBhbmQgZmluYWxseSBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUgYnl0ZXMgZm9yIHNlbnNlIGJ1ZmZlcgorCSAqLworCXNnZV9zeiA9IChJU19ETUE2NCkgPyBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfc2dlNjQpIDoKKwkgICAgc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX3NnZTMyKTsKKworCS8qCisJICogQ2FsY3VsYXRlZCB0aGUgbnVtYmVyIG9mIDY0Ynl0ZSBmcmFtZXMgcmVxdWlyZWQgZm9yIFNHTAorCSAqLworCXNnbF9zeiA9IHNnZV9zeiAqIGluc3RhbmNlLT5tYXhfbnVtX3NnZTsKKwlmcmFtZV9jb3VudCA9IChzZ2xfc3ogKyBNRUdBTUZJX0ZSQU1FX1NJWkUgLSAxKSAvIE1FR0FNRklfRlJBTUVfU0laRTsKKworCS8qCisJICogV2UgbmVlZCBvbmUgZXh0cmEgZnJhbWUgZm9yIHRoZSBNRkkgY29tbWFuZAorCSAqLworCWZyYW1lX2NvdW50Kys7CisKKwl0b3RhbF9zeiA9IE1FR0FNRklfRlJBTUVfU0laRSAqIGZyYW1lX2NvdW50OworCS8qCisJICogVXNlIERNQSBwb29sIGZhY2lsaXR5IHByb3ZpZGVkIGJ5IFBDSSBsYXllcgorCSAqLworCWluc3RhbmNlLT5mcmFtZV9kbWFfcG9vbCA9IHBjaV9wb29sX2NyZWF0ZSgibWVnYXNhcyBmcmFtZSBwb29sIiwKKwkJCQkJCSAgIGluc3RhbmNlLT5wZGV2LCB0b3RhbF9zeiwgNjQsCisJCQkJCQkgICAwKTsKKworCWlmICghaW5zdGFuY2UtPmZyYW1lX2RtYV9wb29sKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBmYWlsZWQgdG8gc2V0dXAgZnJhbWUgcG9vbFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWluc3RhbmNlLT5zZW5zZV9kbWFfcG9vbCA9IHBjaV9wb29sX2NyZWF0ZSgibWVnYXNhcyBzZW5zZSBwb29sIiwKKwkJCQkJCSAgIGluc3RhbmNlLT5wZGV2LCAxMjgsIDQsIDApOworCisJaWYgKCFpbnN0YW5jZS0+c2Vuc2VfZG1hX3Bvb2wpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IGZhaWxlZCB0byBzZXR1cCBzZW5zZSBwb29sXG4iKTsKKworCQlwY2lfcG9vbF9kZXN0cm95KGluc3RhbmNlLT5mcmFtZV9kbWFfcG9vbCk7CisJCWluc3RhbmNlLT5mcmFtZV9kbWFfcG9vbCA9IE5VTEw7CisKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyoKKwkgKiBBbGxvY2F0ZSBhbmQgYXR0YWNoIGEgZnJhbWUgdG8gZWFjaCBvZiB0aGUgY29tbWFuZHMgaW4gY21kX2xpc3QuCisJICogQnkgbWFraW5nIGNtZC0+aW5kZXggYXMgdGhlIGNvbnRleHQgaW5zdGVhZCBvZiB0aGUgJmNtZCwgd2UgY2FuCisJICogYWx3YXlzIHVzZSAzMmJpdCBjb250ZXh0IHJlZ2FyZGxlc3Mgb2YgdGhlIGFyY2hpdGVjdHVyZQorCSAqLworCWZvciAoaSA9IDA7IGkgPCBtYXhfY21kOyBpKyspIHsKKworCQljbWQgPSBpbnN0YW5jZS0+Y21kX2xpc3RbaV07CisKKwkJY21kLT5mcmFtZSA9IHBjaV9wb29sX2FsbG9jKGluc3RhbmNlLT5mcmFtZV9kbWFfcG9vbCwKKwkJCQkJICAgIEdGUF9LRVJORUwsICZjbWQtPmZyYW1lX3BoeXNfYWRkcik7CisKKwkJY21kLT5zZW5zZSA9IHBjaV9wb29sX2FsbG9jKGluc3RhbmNlLT5zZW5zZV9kbWFfcG9vbCwKKwkJCQkJICAgIEdGUF9LRVJORUwsICZjbWQtPnNlbnNlX3BoeXNfYWRkcik7CisKKwkJLyoKKwkJICogbWVnYXNhc190ZWFyZG93bl9mcmFtZV9wb29sKCkgdGFrZXMgY2FyZSBvZiBmcmVlaW5nCisJCSAqIHdoYXRldmVyIGhhcyBiZWVuIGFsbG9jYXRlZAorCQkgKi8KKwkJaWYgKCFjbWQtPmZyYW1lIHx8ICFjbWQtPnNlbnNlKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogcGNpX3Bvb2xfYWxsb2MgZmFpbGVkIFxuIik7CisJCQltZWdhc2FzX3RlYXJkb3duX2ZyYW1lX3Bvb2woaW5zdGFuY2UpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQljbWQtPmZyYW1lLT5pby5jb250ZXh0ID0gY21kLT5pbmRleDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBtZWdhc2FzX2ZyZWVfY21kcyAtCUZyZWUgYWxsIHRoZSBjbWRzIGluIHRoZSBmcmVlIGNtZCBwb29sCisgKiBAaW5zdGFuY2U6CQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqLworc3RhdGljIHZvaWQgbWVnYXNhc19mcmVlX2NtZHMoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKQoreworCWludCBpOworCS8qIEZpcnN0IGZyZWUgdGhlIE1GSSBmcmFtZSBwb29sICovCisJbWVnYXNhc190ZWFyZG93bl9mcmFtZV9wb29sKGluc3RhbmNlKTsKKworCS8qIEZyZWUgYWxsIHRoZSBjb21tYW5kcyBpbiB0aGUgY21kX2xpc3QgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW5zdGFuY2UtPm1heF9md19jbWRzOyBpKyspCisJCWtmcmVlKGluc3RhbmNlLT5jbWRfbGlzdFtpXSk7CisKKwkvKiBGcmVlIHRoZSBjbWRfbGlzdCBidWZmZXIgaXRzZWxmICovCisJa2ZyZWUoaW5zdGFuY2UtPmNtZF9saXN0KTsKKwlpbnN0YW5jZS0+Y21kX2xpc3QgPSBOVUxMOworCisJSU5JVF9MSVNUX0hFQUQoJmluc3RhbmNlLT5jbWRfcG9vbCk7Cit9CisKKy8qKgorICogbWVnYXNhc19hbGxvY19jbWRzIC0JQWxsb2NhdGVzIHRoZSBjb21tYW5kIHBhY2tldHMKKyAqIEBpbnN0YW5jZToJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICoKKyAqIEVhY2ggY29tbWFuZCB0aGF0IGlzIGlzc3VlZCB0byB0aGUgRlcsIHdoZXRoZXIgSU8gY29tbWFuZHMgZnJvbSB0aGUgT1Mgb3IKKyAqIGludGVybmFsIGNvbW1hbmRzIGxpa2UgSU9DVExzLCBhcmUgd3JhcHBlZCBpbiBsb2NhbCBkYXRhIHN0cnVjdHVyZSBjYWxsZWQKKyAqIG1lZ2FzYXNfY21kLiBUaGUgZnJhbWUgZW1iZWRkZWQgaW4gdGhpcyBtZWdhc2FzX2NtZCBpcyBhY3R1YWxseSBpc3N1ZWQgdG8KKyAqIHRoZSBGVy4KKyAqCisgKiBFYWNoIGZyYW1lIGhhcyBhIDMyLWJpdCBmaWVsZCBjYWxsZWQgY29udGV4dCAodGFnKS4gVGhpcyBjb250ZXh0IGlzIHVzZWQKKyAqIHRvIGdldCBiYWNrIHRoZSBtZWdhc2FzX2NtZCBmcm9tIHRoZSBmcmFtZSB3aGVuIGEgZnJhbWUgZ2V0cyBjb21wbGV0ZWQgaW4KKyAqIHRoZSBJU1IuIFR5cGljYWxseSB0aGUgYWRkcmVzcyBvZiB0aGUgbWVnYXNhc19jbWQgaXRzZWxmIHdvdWxkIGJlIHVzZWQgYXMKKyAqIHRoZSBjb250ZXh0LiBCdXQgd2Ugd2FudGVkIHRvIGtlZXAgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gMzIgYW5kIDY0IGJpdAorICogc3lzdGVtcyB0byB0aGUgbWluaW51bS4gV2UgYWx3YXlzIHVzZSAzMiBiaXQgaW50ZWdlcnMgZm9yIHRoZSBjb250ZXh0LiBJbgorICogdGhpcyBkcml2ZXIsIHRoZSAzMiBiaXQgdmFsdWVzIGFyZSB0aGUgaW5kaWNlcyBpbnRvIGFuIGFycmF5IGNtZF9saXN0LgorICogVGhpcyBhcnJheSBpcyB1c2VkIG9ubHkgdG8gbG9vayB1cCB0aGUgbWVnYXNhc19jbWQgZ2l2ZW4gdGhlIGNvbnRleHQuIFRoZQorICogZnJlZSBjb21tYW5kcyB0aGVtc2VsdmVzIGFyZSBtYWludGFpbmVkIGluIGEgbGlua2VkIGxpc3QgY2FsbGVkIGNtZF9wb29sLgorICovCitzdGF0aWMgaW50IG1lZ2FzYXNfYWxsb2NfY21kcyhzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCit7CisJaW50IGk7CisJaW50IGo7CisJdTMyIG1heF9jbWQ7CisJc3RydWN0IG1lZ2FzYXNfY21kICpjbWQ7CisKKwltYXhfY21kID0gaW5zdGFuY2UtPm1heF9md19jbWRzOworCisJLyoKKwkgKiBpbnN0YW5jZS0+Y21kX2xpc3QgaXMgYW4gYXJyYXkgb2Ygc3RydWN0IG1lZ2FzYXNfY21kIHBvaW50ZXJzLgorCSAqIEFsbG9jYXRlIHRoZSBkeW5hbWljIGFycmF5IGZpcnN0IGFuZCB0aGVuIGFsbG9jYXRlIGluZGl2aWR1YWwKKwkgKiBjb21tYW5kcy4KKwkgKi8KKwlpbnN0YW5jZS0+Y21kX2xpc3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWVnYXNhc19jbWQgKikgKiBtYXhfY21kLAorCQkJCSAgICAgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWluc3RhbmNlLT5jbWRfbGlzdCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogb3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldChpbnN0YW5jZS0+Y21kX2xpc3QsIDAsIHNpemVvZihzdHJ1Y3QgbWVnYXNhc19jbWQgKikgKiBtYXhfY21kKTsKKworCWZvciAoaSA9IDA7IGkgPCBtYXhfY21kOyBpKyspIHsKKwkJaW5zdGFuY2UtPmNtZF9saXN0W2ldID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1lZ2FzYXNfY21kKSwKKwkJCQkJCUdGUF9LRVJORUwpOworCisJCWlmICghaW5zdGFuY2UtPmNtZF9saXN0W2ldKSB7CisKKwkJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCisJCQkJa2ZyZWUoaW5zdGFuY2UtPmNtZF9saXN0W2pdKTsKKworCQkJa2ZyZWUoaW5zdGFuY2UtPmNtZF9saXN0KTsKKwkJCWluc3RhbmNlLT5jbWRfbGlzdCA9IE5VTEw7CisKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCisJLyoKKwkgKiBBZGQgYWxsIHRoZSBjb21tYW5kcyB0byBjb21tYW5kIHBvb2wgKGluc3RhbmNlLT5jbWRfcG9vbCkKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2NtZDsgaSsrKSB7CisJCWNtZCA9IGluc3RhbmNlLT5jbWRfbGlzdFtpXTsKKwkJbWVtc2V0KGNtZCwgMCwgc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2NtZCkpOworCQljbWQtPmluZGV4ID0gaTsKKwkJY21kLT5pbnN0YW5jZSA9IGluc3RhbmNlOworCisJCWxpc3RfYWRkX3RhaWwoJmNtZC0+bGlzdCwgJmluc3RhbmNlLT5jbWRfcG9vbCk7CisJfQorCisJLyoKKwkgKiBDcmVhdGUgYSBmcmFtZSBwb29sIGFuZCBhc3NpZ24gb25lIGZyYW1lIHRvIGVhY2ggY21kCisJICovCisJaWYgKG1lZ2FzYXNfY3JlYXRlX2ZyYW1lX3Bvb2woaW5zdGFuY2UpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBFcnJvciBjcmVhdGluZyBmcmFtZSBETUEgcG9vbFxuIik7CisJCW1lZ2FzYXNfZnJlZV9jbWRzKGluc3RhbmNlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBtZWdhc2FzX2dldF9jb250cm9sbGVyX2luZm8gLQlSZXR1cm5zIEZXJ3MgY29udHJvbGxlciBzdHJ1Y3R1cmUKKyAqIEBpbnN0YW5jZToJCQkJQWRhcHRlciBzb2Z0IHN0YXRlCisgKiBAY3RybF9pbmZvOgkJCQlDb250cm9sbGVyIGluZm9ybWF0aW9uIHN0cnVjdHVyZQorICoKKyAqIElzc3VlcyBhbiBpbnRlcm5hbCBjb21tYW5kIChEQ01EKSB0byBnZXQgdGhlIEZXJ3MgY29udHJvbGxlciBzdHJ1Y3R1cmUuCisgKiBUaGlzIGluZm9ybWF0aW9uIGlzIG1haW5seSB1c2VkIHRvIGZpbmQgb3V0IHRoZSBtYXhpbXVtIElPIHRyYW5zZmVyIHBlcgorICogY29tbWFuZCBzdXBwb3J0ZWQgYnkgdGhlIEZXLgorICovCitzdGF0aWMgaW50CittZWdhc2FzX2dldF9jdHJsX2luZm8oc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAorCQkgICAgICBzdHJ1Y3QgbWVnYXNhc19jdHJsX2luZm8gKmN0cmxfaW5mbykKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZDsKKwlzdHJ1Y3QgbWVnYXNhc19kY21kX2ZyYW1lICpkY21kOworCXN0cnVjdCBtZWdhc2FzX2N0cmxfaW5mbyAqY2k7CisJZG1hX2FkZHJfdCBjaV9oID0gMDsKKworCWNtZCA9IG1lZ2FzYXNfZ2V0X2NtZChpbnN0YW5jZSk7CisKKwlpZiAoIWNtZCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogRmFpbGVkIHRvIGdldCBhIGZyZWUgY21kXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGNtZCA9ICZjbWQtPmZyYW1lLT5kY21kOworCisJY2kgPSBwY2lfYWxsb2NfY29uc2lzdGVudChpbnN0YW5jZS0+cGRldiwKKwkJCQkgIHNpemVvZihzdHJ1Y3QgbWVnYXNhc19jdHJsX2luZm8pLCAmY2lfaCk7CisKKwlpZiAoIWNpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJGYWlsZWQgdG8gYWxsb2MgbWVtIGZvciBjdHJsIGluZm9cbiIpOworCQltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldChjaSwgMCwgc2l6ZW9mKCpjaSkpOworCW1lbXNldChkY21kLT5tYm94LmIsIDAsIE1GSV9NQk9YX1NJWkUpOworCisJZGNtZC0+Y21kID0gTUZJX0NNRF9EQ01EOworCWRjbWQtPmNtZF9zdGF0dXMgPSAweEZGOworCWRjbWQtPnNnZV9jb3VudCA9IDE7CisJZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX1JFQUQ7CisJZGNtZC0+dGltZW91dCA9IDA7CisJZGNtZC0+ZGF0YV94ZmVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgbWVnYXNhc19jdHJsX2luZm8pOworCWRjbWQtPm9wY29kZSA9IE1SX0RDTURfQ1RSTF9HRVRfSU5GTzsKKwlkY21kLT5zZ2wuc2dlMzJbMF0ucGh5c19hZGRyID0gY2lfaDsKKwlkY21kLT5zZ2wuc2dlMzJbMF0ubGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2N0cmxfaW5mbyk7CisKKwlpZiAoIW1lZ2FzYXNfaXNzdWVfcG9sbGVkKGluc3RhbmNlLCBjbWQpKSB7CisJCXJldCA9IDA7CisJCW1lbWNweShjdHJsX2luZm8sIGNpLCBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfY3RybF9pbmZvKSk7CisJfSBlbHNlIHsKKwkJcmV0ID0gLTE7CisJfQorCisJcGNpX2ZyZWVfY29uc2lzdGVudChpbnN0YW5jZS0+cGRldiwgc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2N0cmxfaW5mbyksCisJCQkgICAgY2ksIGNpX2gpOworCisJbWVnYXNhc19yZXR1cm5fY21kKGluc3RhbmNlLCBjbWQpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogbWVnYXNhc19pbml0X21maSAtCUluaXRpYWxpemVzIHRoZSBGVworICogQGluc3RhbmNlOgkJQWRhcHRlciBzb2Z0IHN0YXRlCisgKgorICogVGhpcyBpcyB0aGUgbWFpbiBmdW5jdGlvbiBmb3IgaW5pdGlhbGl6aW5nIE1GSSBmaXJtd2FyZS4KKyAqLworc3RhdGljIGludCBtZWdhc2FzX2luaXRfbWZpKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKK3sKKwl1MzIgY29udGV4dF9zejsKKwl1MzIgcmVwbHlfcV9zejsKKwl1MzIgbWF4X3NlY3RvcnNfMTsKKwl1MzIgbWF4X3NlY3RvcnNfMjsKKwlzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVnX3NldDsKKworCXN0cnVjdCBtZWdhc2FzX2NtZCAqY21kOworCXN0cnVjdCBtZWdhc2FzX2N0cmxfaW5mbyAqY3RybF9pbmZvOworCisJc3RydWN0IG1lZ2FzYXNfaW5pdF9mcmFtZSAqaW5pdF9mcmFtZTsKKwlzdHJ1Y3QgbWVnYXNhc19pbml0X3F1ZXVlX2luZm8gKmluaXRxX2luZm87CisJZG1hX2FkZHJfdCBpbml0X2ZyYW1lX2g7CisJZG1hX2FkZHJfdCBpbml0cV9pbmZvX2g7CisKKwkvKgorCSAqIE1hcCB0aGUgbWVzc2FnZSByZWdpc3RlcnMKKwkgKi8KKwlpbnN0YW5jZS0+YmFzZV9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KGluc3RhbmNlLT5wZGV2LCAwKTsKKworCWlmIChwY2lfcmVxdWVzdF9yZWdpb25zKGluc3RhbmNlLT5wZGV2LCAibWVnYXNhczogTFNJIExvZ2ljIikpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IElPIG1lbW9yeSByZWdpb24gYnVzeSFcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWluc3RhbmNlLT5yZWdfc2V0ID0gaW9yZW1hcF9ub2NhY2hlKGluc3RhbmNlLT5iYXNlX2FkZHIsIDgxOTIpOworCisJaWYgKCFpbnN0YW5jZS0+cmVnX3NldCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogRmFpbGVkIHRvIG1hcCBJTyBtZW1cbiIpOworCQlnb3RvIGZhaWxfaW9yZW1hcDsKKwl9CisKKwlyZWdfc2V0ID0gaW5zdGFuY2UtPnJlZ19zZXQ7CisKKwkvKgorCSAqIFdlIGV4cGVjdCB0aGUgRlcgc3RhdGUgdG8gYmUgUkVBRFkKKwkgKi8KKwlpZiAobWVnYXNhc190cmFuc2l0aW9uX3RvX3JlYWR5KGluc3RhbmNlLT5yZWdfc2V0KSkKKwkJZ290byBmYWlsX3JlYWR5X3N0YXRlOworCisJLyoKKwkgKiBHZXQgdmFyaW91cyBvcGVyYXRpb25hbCBwYXJhbWV0ZXJzIGZyb20gc3RhdHVzIHJlZ2lzdGVyCisJICovCisJaW5zdGFuY2UtPm1heF9md19jbWRzID0gcmVhZGwoJnJlZ19zZXQtPm91dGJvdW5kX21zZ18wKSAmIDB4MDBGRkZGOworCWluc3RhbmNlLT5tYXhfbnVtX3NnZSA9IChyZWFkbCgmcmVnX3NldC0+b3V0Ym91bmRfbXNnXzApICYgMHhGRjAwMDApID4+CisJICAgIDB4MTA7CisJLyoKKwkgKiBDcmVhdGUgYSBwb29sIG9mIGNvbW1hbmRzCisJICovCisJaWYgKG1lZ2FzYXNfYWxsb2NfY21kcyhpbnN0YW5jZSkpCisJCWdvdG8gZmFpbF9hbGxvY19jbWRzOworCisJLyoKKwkgKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHJlcGx5IHF1ZXVlLiBMZW5ndGggb2YgcmVwbHkgcXVldWUgc2hvdWxkCisJICogYmUgX29uZV8gbW9yZSB0aGFuIHRoZSBtYXhpbXVtIGNvbW1hbmRzIGhhbmRsZWQgYnkgdGhlIGZpcm13YXJlLgorCSAqCisJICogTm90ZTogV2hlbiBGVyBjb21wbGV0ZXMgY29tbWFuZHMsIGl0IHBsYWNlcyBjb3JyZXNwb25kaW5nIGNvbnRleAorCSAqIHZhbHVlcyBpbiB0aGlzIGNpcmN1bGFyIHJlcGx5IHF1ZXVlLiBUaGlzIGNpcmN1bGFyIHF1ZXVlIGlzIGEgZmFpcmx5CisJICogdHlwaWNhbCBwcm9kdWNlci1jb25zdW1lciBxdWV1ZS4gRlcgaXMgdGhlIHByb2R1Y2VyIChvZiBjb21wbGV0ZWQKKwkgKiBjb21tYW5kcykgYW5kIHRoZSBkcml2ZXIgaXMgdGhlIGNvbnN1bWVyLgorCSAqLworCWNvbnRleHRfc3ogPSBzaXplb2YodTMyKTsKKwlyZXBseV9xX3N6ID0gY29udGV4dF9zeiAqIChpbnN0YW5jZS0+bWF4X2Z3X2NtZHMgKyAxKTsKKworCWluc3RhbmNlLT5yZXBseV9xdWV1ZSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGluc3RhbmNlLT5wZGV2LAorCQkJCQkJICAgICByZXBseV9xX3N6LAorCQkJCQkJICAgICAmaW5zdGFuY2UtPnJlcGx5X3F1ZXVlX2gpOworCisJaWYgKCFpbnN0YW5jZS0+cmVwbHlfcXVldWUpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IE91dCBvZiBETUEgbWVtIGZvciByZXBseSBxdWV1ZVxuIik7CisJCWdvdG8gZmFpbF9yZXBseV9xdWV1ZTsKKwl9CisKKwkvKgorCSAqIFByZXBhcmUgYSBpbml0IGZyYW1lLiBOb3RlIHRoZSBpbml0IGZyYW1lIHBvaW50cyB0byBxdWV1ZSBpbmZvCisJICogc3RydWN0dXJlLiBFYWNoIGZyYW1lIGhhcyBTR0wgYWxsb2NhdGVkIGFmdGVyIGZpcnN0IDY0IGJ5dGVzLiBGb3IKKwkgKiB0aGlzIGZyYW1lIC0gc2luY2Ugd2UgZG9uJ3QgbmVlZCBhbnkgU0dMIC0gd2UgdXNlIFNHTCdzIHNwYWNlIGFzCisJICogcXVldWUgaW5mbyBzdHJ1Y3R1cmUKKwkgKgorCSAqIFdlIHdpbGwgbm90IGdldCBhIE5VTEwgY29tbWFuZCBiZWxvdy4gV2UganVzdCBjcmVhdGVkIHRoZSBwb29sLgorCSAqLworCWNtZCA9IG1lZ2FzYXNfZ2V0X2NtZChpbnN0YW5jZSk7CisKKwlpbml0X2ZyYW1lID0gKHN0cnVjdCBtZWdhc2FzX2luaXRfZnJhbWUgKiljbWQtPmZyYW1lOworCWluaXRxX2luZm8gPSAoc3RydWN0IG1lZ2FzYXNfaW5pdF9xdWV1ZV9pbmZvICopCisJICAgICgodW5zaWduZWQgbG9uZylpbml0X2ZyYW1lICsgNjQpOworCisJaW5pdF9mcmFtZV9oID0gY21kLT5mcmFtZV9waHlzX2FkZHI7CisJaW5pdHFfaW5mb19oID0gaW5pdF9mcmFtZV9oICsgNjQ7CisKKwltZW1zZXQoaW5pdF9mcmFtZSwgMCwgTUVHQU1GSV9GUkFNRV9TSVpFKTsKKwltZW1zZXQoaW5pdHFfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2luaXRfcXVldWVfaW5mbykpOworCisJaW5pdHFfaW5mby0+cmVwbHlfcXVldWVfZW50cmllcyA9IGluc3RhbmNlLT5tYXhfZndfY21kcyArIDE7CisJaW5pdHFfaW5mby0+cmVwbHlfcXVldWVfc3RhcnRfcGh5c19hZGRyX2xvID0gaW5zdGFuY2UtPnJlcGx5X3F1ZXVlX2g7CisKKwlpbml0cV9pbmZvLT5wcm9kdWNlcl9pbmRleF9waHlzX2FkZHJfbG8gPSBpbnN0YW5jZS0+cHJvZHVjZXJfaDsKKwlpbml0cV9pbmZvLT5jb25zdW1lcl9pbmRleF9waHlzX2FkZHJfbG8gPSBpbnN0YW5jZS0+Y29uc3VtZXJfaDsKKworCWluaXRfZnJhbWUtPmNtZCA9IE1GSV9DTURfSU5JVDsKKwlpbml0X2ZyYW1lLT5jbWRfc3RhdHVzID0gMHhGRjsKKwlpbml0X2ZyYW1lLT5xdWV1ZV9pbmZvX25ld19waHlzX2FkZHJfbG8gPSBpbml0cV9pbmZvX2g7CisKKwlpbml0X2ZyYW1lLT5kYXRhX3hmZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2luaXRfcXVldWVfaW5mbyk7CisKKwkvKgorCSAqIElzc3VlIHRoZSBpbml0IGZyYW1lIGluIHBvbGxlZCBtb2RlCisJICovCisJaWYgKG1lZ2FzYXNfaXNzdWVfcG9sbGVkKGluc3RhbmNlLCBjbWQpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBGYWlsZWQgdG8gaW5pdCBmaXJtd2FyZVxuIik7CisJCWdvdG8gZmFpbF9md19pbml0OworCX0KKworCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgY21kKTsKKworCWN0cmxfaW5mbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2N0cmxfaW5mbyksIEdGUF9LRVJORUwpOworCisJLyoKKwkgKiBDb21wdXRlIHRoZSBtYXggYWxsb3dlZCBzZWN0b3JzIHBlciBJTzogVGhlIGNvbnRyb2xsZXIgaW5mbyBoYXMgdHdvCisJICogbGltaXRzIG9uIG1heCBzZWN0b3JzLiBEcml2ZXIgc2hvdWxkIHVzZSB0aGUgbWluaW11bSBvZiB0aGVzZSB0d28uCisJICoKKwkgKiAxIDw8IHN0cmlwZV9zel9vcHMubWluID0gbWF4IHNlY3RvcnMgcGVyIHN0cmlwCisJICoKKwkgKiBOb3RlIHRoYXQgb2xkZXIgZmlybXdhcmVzICggPCBGVyB2ZXIgMzApIGRpZG4ndCByZXBvcnQgaW5mb3JtYXRpb24KKwkgKiB0byBjYWxjdWxhdGUgbWF4X3NlY3RvcnNfMS4gU28gdGhlIG51bWJlciBlbmRlZCB1cCBhcyB6ZXJvIGFsd2F5cy4KKwkgKi8KKwlpZiAoY3RybF9pbmZvICYmICFtZWdhc2FzX2dldF9jdHJsX2luZm8oaW5zdGFuY2UsIGN0cmxfaW5mbykpIHsKKworCQltYXhfc2VjdG9yc18xID0gKDEgPDwgY3RybF9pbmZvLT5zdHJpcGVfc3pfb3BzLm1pbikgKgorCQkgICAgY3RybF9pbmZvLT5tYXhfc3RyaXBzX3Blcl9pbzsKKwkJbWF4X3NlY3RvcnNfMiA9IGN0cmxfaW5mby0+bWF4X3JlcXVlc3Rfc2l6ZTsKKworCQlpbnN0YW5jZS0+bWF4X3NlY3RvcnNfcGVyX3JlcSA9IChtYXhfc2VjdG9yc18xIDwgbWF4X3NlY3RvcnNfMikKKwkJICAgID8gbWF4X3NlY3RvcnNfMSA6IG1heF9zZWN0b3JzXzI7CisJfSBlbHNlCisJCWluc3RhbmNlLT5tYXhfc2VjdG9yc19wZXJfcmVxID0gaW5zdGFuY2UtPm1heF9udW1fc2dlICoKKwkJICAgIFBBR0VfU0laRSAvIDUxMjsKKworCWtmcmVlKGN0cmxfaW5mbyk7CisKKwlyZXR1cm4gMDsKKworICAgICAgZmFpbF9md19pbml0OgorCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgY21kKTsKKworCXBjaV9mcmVlX2NvbnNpc3RlbnQoaW5zdGFuY2UtPnBkZXYsIHJlcGx5X3Ffc3osCisJCQkgICAgaW5zdGFuY2UtPnJlcGx5X3F1ZXVlLCBpbnN0YW5jZS0+cmVwbHlfcXVldWVfaCk7CisgICAgICBmYWlsX3JlcGx5X3F1ZXVlOgorCW1lZ2FzYXNfZnJlZV9jbWRzKGluc3RhbmNlKTsKKworICAgICAgZmFpbF9hbGxvY19jbWRzOgorICAgICAgZmFpbF9yZWFkeV9zdGF0ZToKKwlpb3VubWFwKGluc3RhbmNlLT5yZWdfc2V0KTsKKworICAgICAgZmFpbF9pb3JlbWFwOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMoaW5zdGFuY2UtPnBkZXYpOworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qKgorICogbWVnYXNhc19yZWxlYXNlX21maSAtCVJldmVyc2VzIHRoZSBGVyBpbml0aWFsaXphdGlvbgorICogQGludGFuY2U6CQkJQWRhcHRlciBzb2Z0IHN0YXRlCisgKi8KK3N0YXRpYyB2b2lkIG1lZ2FzYXNfcmVsZWFzZV9tZmkoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKQoreworCXUzMiByZXBseV9xX3N6ID0gc2l6ZW9mKHUzMikgKiAoaW5zdGFuY2UtPm1heF9md19jbWRzICsgMSk7CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGluc3RhbmNlLT5wZGV2LCByZXBseV9xX3N6LAorCQkJICAgIGluc3RhbmNlLT5yZXBseV9xdWV1ZSwgaW5zdGFuY2UtPnJlcGx5X3F1ZXVlX2gpOworCisJbWVnYXNhc19mcmVlX2NtZHMoaW5zdGFuY2UpOworCisJaW91bm1hcChpbnN0YW5jZS0+cmVnX3NldCk7CisKKwlwY2lfcmVsZWFzZV9yZWdpb25zKGluc3RhbmNlLT5wZGV2KTsKK30KKworLyoqCisgKiBtZWdhc2FzX2dldF9zZXFfbnVtIC0JR2V0cyBsYXRlc3QgZXZlbnQgc2VxdWVuY2UgbnVtYmVycworICogQGluc3RhbmNlOgkJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICogQGVsaToJCQlGVyBldmVudCBsb2cgc2VxdWVuY2UgbnVtYmVycyBpbmZvcm1hdGlvbgorICoKKyAqIEZXIG1haW50YWlucyBhIGxvZyBvZiBhbGwgZXZlbnRzIGluIGEgbm9uLXZvbGF0aWxlIGFyZWEuIFVwcGVyIGxheWVycyB3b3VsZAorICogdXN1YWxseSBmaW5kIG91dCB0aGUgbGF0ZXN0IHNlcXVlbmNlIG51bWJlciBvZiB0aGUgZXZlbnRzLCB0aGUgc2VxIG51bWJlciBhdAorICogdGhlIGJvb3QgZXRjLiBUaGV5IHdvdWxkICJyZWFkIiBhbGwgdGhlIGV2ZW50cyBiZWxvdyB0aGUgbGF0ZXN0IHNlcSBudW1iZXIKKyAqIGJ5IGlzc3VpbmcgYSBkaXJlY3QgZncgY21kIChEQ01EKS4gRm9yIHRoZSBmdXR1cmUgZXZlbnRzIChiZXlvbmQgbGF0ZXN0IHNlcQorICogbnVtYmVyKSwgdGhleSB3b3VsZCBzdWJzcmliZSB0byBBRU4gKGFzeW5jaHJvbm91cyBldmVudCBub3RpZmljYXRpb24pIGFuZAorICogd2FpdCBmb3IgdGhlIGV2ZW50cyB0byBoYXBwZW4uCisgKi8KK3N0YXRpYyBpbnQKK21lZ2FzYXNfZ2V0X3NlcV9udW0oc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAorCQkgICAgc3RydWN0IG1lZ2FzYXNfZXZ0X2xvZ19pbmZvICplbGkpCit7CisJc3RydWN0IG1lZ2FzYXNfY21kICpjbWQ7CisJc3RydWN0IG1lZ2FzYXNfZGNtZF9mcmFtZSAqZGNtZDsKKwlzdHJ1Y3QgbWVnYXNhc19ldnRfbG9nX2luZm8gKmVsX2luZm87CisJZG1hX2FkZHJfdCBlbF9pbmZvX2ggPSAwOworCisJY21kID0gbWVnYXNhc19nZXRfY21kKGluc3RhbmNlKTsKKworCWlmICghY21kKSB7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRjbWQgPSAmY21kLT5mcmFtZS0+ZGNtZDsKKwllbF9pbmZvID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaW5zdGFuY2UtPnBkZXYsCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgbWVnYXNhc19ldnRfbG9nX2luZm8pLAorCQkJCSAgICAgICAmZWxfaW5mb19oKTsKKworCWlmICghZWxfaW5mbykgeworCQltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldChlbF9pbmZvLCAwLCBzaXplb2YoKmVsX2luZm8pKTsKKwltZW1zZXQoZGNtZC0+bWJveC5iLCAwLCBNRklfTUJPWF9TSVpFKTsKKworCWRjbWQtPmNtZCA9IE1GSV9DTURfRENNRDsKKwlkY21kLT5jbWRfc3RhdHVzID0gMHgwOworCWRjbWQtPnNnZV9jb3VudCA9IDE7CisJZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX1JFQUQ7CisJZGNtZC0+dGltZW91dCA9IDA7CisJZGNtZC0+ZGF0YV94ZmVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgbWVnYXNhc19ldnRfbG9nX2luZm8pOworCWRjbWQtPm9wY29kZSA9IE1SX0RDTURfQ1RSTF9FVkVOVF9HRVRfSU5GTzsKKwlkY21kLT5zZ2wuc2dlMzJbMF0ucGh5c19hZGRyID0gZWxfaW5mb19oOworCWRjbWQtPnNnbC5zZ2UzMlswXS5sZW5ndGggPSBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfZXZ0X2xvZ19pbmZvKTsKKworCW1lZ2FzYXNfaXNzdWVfYmxvY2tlZF9jbWQoaW5zdGFuY2UsIGNtZCk7CisKKwkvKgorCSAqIENvcHkgdGhlIGRhdGEgYmFjayBpbnRvIGNhbGxlcnMgYnVmZmVyCisJICovCisJbWVtY3B5KGVsaSwgZWxfaW5mbywgc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2V2dF9sb2dfaW5mbykpOworCisJcGNpX2ZyZWVfY29uc2lzdGVudChpbnN0YW5jZS0+cGRldiwgc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2V2dF9sb2dfaW5mbyksCisJCQkgICAgZWxfaW5mbywgZWxfaW5mb19oKTsKKworCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgY21kKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIG1lZ2FzYXNfcmVnaXN0ZXJfYWVuIC0JUmVnaXN0ZXJzIGZvciBhc3luY2hyb25vdXMgZXZlbnQgbm90aWZpY2F0aW9uCisgKiBAaW5zdGFuY2U6CQkJQWRhcHRlciBzb2Z0IHN0YXRlCisgKiBAc2VxX251bToJCQlUaGUgc3RhcnRpbmcgc2VxdWVuY2UgbnVtYmVyCisgKiBAY2xhc3NfbG9jYWxlOgkJQ2xhc3Mgb2YgdGhlIGV2ZW50CisgKgorICogVGhpcyBmdW5jdGlvbiBzdWJzY3JpYmVzIGZvciBBRU4gZm9yIGV2ZW50cyBiZXlvbmQgdGhlIEBzZXFfbnVtLiBJdCByZXF1ZXN0cworICogdG8gYmUgbm90aWZpZWQgaWYgYW5kIG9ubHkgaWYgdGhlIGV2ZW50IGlzIG9mIHR5cGUgQGNsYXNzX2xvY2FsZQorICovCitzdGF0aWMgaW50CittZWdhc2FzX3JlZ2lzdGVyX2FlbihzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsIHUzMiBzZXFfbnVtLAorCQkgICAgIHUzMiBjbGFzc19sb2NhbGVfd29yZCkKK3sKKwlpbnQgcmV0X3ZhbDsKKwlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZDsKKwlzdHJ1Y3QgbWVnYXNhc19kY21kX2ZyYW1lICpkY21kOworCXVuaW9uIG1lZ2FzYXNfZXZ0X2NsYXNzX2xvY2FsZSBjdXJyX2FlbjsKKwl1bmlvbiBtZWdhc2FzX2V2dF9jbGFzc19sb2NhbGUgcHJldl9hZW47CisKKwkvKgorCSAqIElmIHRoZXJlIGFuIEFFTiBwZW5kaW5nIGFscmVhZHkgKGFlbl9jbWQpLCBjaGVjayBpZiB0aGUKKwkgKiBjbGFzc19sb2NhbGUgb2YgdGhhdCBwZW5kaW5nIEFFTiBpcyBpbmNsdXNpdmUgb2YgdGhlIG5ldworCSAqIEFFTiByZXF1ZXN0IHdlIGN1cnJlbnRseSBoYXZlLiBJZiBpdCBpcywgdGhlbiB3ZSBkb24ndCBoYXZlCisJICogdG8gZG8gYW55dGhpbmcuIEluIG90aGVyIHdvcmRzLCB3aGljaGV2ZXIgZXZlbnRzIHRoZSBjdXJyZW50CisJICogQUVOIHJlcXVlc3QgaXMgc3Vic2NyaWJpbmcgdG8sIGhhdmUgYWxyZWFkeSBiZWVuIHN1YnNjcmliZWQKKwkgKiB0by4KKwkgKgorCSAqIElmIHRoZSBvbGRfY21kIGlzIF9ub3RfIGluY2x1c2l2ZSwgdGhlbiB3ZSBoYXZlIHRvIGFib3J0CisJICogdGhhdCBjb21tYW5kLCBmb3JtIGEgY2xhc3NfbG9jYWxlIHRoYXQgaXMgc3VwZXJzZXQgb2YgYm90aAorCSAqIG9sZCBhbmQgY3VycmVudCBhbmQgcmUtaXNzdWUgdG8gdGhlIEZXCisJICovCisKKwljdXJyX2Flbi53b3JkID0gY2xhc3NfbG9jYWxlX3dvcmQ7CisKKwlpZiAoaW5zdGFuY2UtPmFlbl9jbWQpIHsKKworCQlwcmV2X2Flbi53b3JkID0gaW5zdGFuY2UtPmFlbl9jbWQtPmZyYW1lLT5kY21kLm1ib3gud1sxXTsKKworCQkvKgorCQkgKiBBIGNsYXNzIHdob3NlIGVudW0gdmFsdWUgaXMgc21hbGxlciBpcyBpbmNsdXNpdmUgb2YgYWxsCisJCSAqIGhpZ2hlciB2YWx1ZXMuIElmIGEgUFJPR1JFU1MgKD0gLTEpIHdhcyBwcmV2aW91c2x5CisJCSAqIHJlZ2lzdGVyZWQsIHRoZW4gYSBuZXcgcmVnaXN0cmF0aW9uIHJlcXVlc3RzIGZvciBoaWdoZXIKKwkJICogY2xhc3NlcyBuZWVkIG5vdCBiZSBzZW50IHRvIEZXLiBUaGV5IGFyZSBhdXRvbWF0aWNhbGx5CisJCSAqIGluY2x1ZGVkLgorCQkgKgorCQkgKiBMb2NhbGUgbnVtYmVycyBkb24ndCBoYXZlIHN1Y2ggaGllcmFyY2h5LiBUaGV5IGFyZSBiaXRtYXAKKwkJICogdmFsdWVzCisJCSAqLworCQlpZiAoKHByZXZfYWVuLm1lbWJlcnMuY2xhc3MgPD0gY3Vycl9hZW4ubWVtYmVycy5jbGFzcykgJiYKKwkJICAgICEoKHByZXZfYWVuLm1lbWJlcnMubG9jYWxlICYgY3Vycl9hZW4ubWVtYmVycy5sb2NhbGUpIF4KKwkJICAgICAgY3Vycl9hZW4ubWVtYmVycy5sb2NhbGUpKSB7CisJCQkvKgorCQkJICogUHJldmlvdXNseSBpc3N1ZWQgZXZlbnQgcmVnaXN0cmF0aW9uIGluY2x1ZGVzCisJCQkgKiBjdXJyZW50IHJlcXVlc3QuIE5vdGhpbmcgdG8gZG8uCisJCQkgKi8KKwkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJY3Vycl9hZW4ubWVtYmVycy5sb2NhbGUgfD0gcHJldl9hZW4ubWVtYmVycy5sb2NhbGU7CisKKwkJCWlmIChwcmV2X2Flbi5tZW1iZXJzLmNsYXNzIDwgY3Vycl9hZW4ubWVtYmVycy5jbGFzcykKKwkJCQljdXJyX2Flbi5tZW1iZXJzLmNsYXNzID0gcHJldl9hZW4ubWVtYmVycy5jbGFzczsKKworCQkJaW5zdGFuY2UtPmFlbl9jbWQtPmFib3J0X2FlbiA9IDE7CisJCQlyZXRfdmFsID0gbWVnYXNhc19pc3N1ZV9ibG9ja2VkX2Fib3J0X2NtZChpbnN0YW5jZSwKKwkJCQkJCQkJICBpbnN0YW5jZS0+CisJCQkJCQkJCSAgYWVuX2NtZCk7CisKKwkJCWlmIChyZXRfdmFsKSB7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IEZhaWxlZCB0byBhYm9ydCAiCisJCQkJICAgICAgICJwcmV2aW91cyBBRU4gY29tbWFuZFxuIik7CisJCQkJcmV0dXJuIHJldF92YWw7CisJCQl9CisJCX0KKwl9CisKKwljbWQgPSBtZWdhc2FzX2dldF9jbWQoaW5zdGFuY2UpOworCisJaWYgKCFjbWQpCisJCXJldHVybiAtRU5PTUVNOworCisJZGNtZCA9ICZjbWQtPmZyYW1lLT5kY21kOworCisJbWVtc2V0KGluc3RhbmNlLT5ldnRfZGV0YWlsLCAwLCBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfZXZ0X2RldGFpbCkpOworCisJLyoKKwkgKiBQcmVwYXJlIERDTUQgZm9yIGFlbiByZWdpc3RyYXRpb24KKwkgKi8KKwltZW1zZXQoZGNtZC0+bWJveC5iLCAwLCBNRklfTUJPWF9TSVpFKTsKKworCWRjbWQtPmNtZCA9IE1GSV9DTURfRENNRDsKKwlkY21kLT5jbWRfc3RhdHVzID0gMHgwOworCWRjbWQtPnNnZV9jb3VudCA9IDE7CisJZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX1JFQUQ7CisJZGNtZC0+dGltZW91dCA9IDA7CisJZGNtZC0+ZGF0YV94ZmVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgbWVnYXNhc19ldnRfZGV0YWlsKTsKKwlkY21kLT5vcGNvZGUgPSBNUl9EQ01EX0NUUkxfRVZFTlRfV0FJVDsKKwlkY21kLT5tYm94LndbMF0gPSBzZXFfbnVtOworCWRjbWQtPm1ib3gud1sxXSA9IGN1cnJfYWVuLndvcmQ7CisJZGNtZC0+c2dsLnNnZTMyWzBdLnBoeXNfYWRkciA9ICh1MzIpIGluc3RhbmNlLT5ldnRfZGV0YWlsX2g7CisJZGNtZC0+c2dsLnNnZTMyWzBdLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgbWVnYXNhc19ldnRfZGV0YWlsKTsKKworCS8qCisJICogU3RvcmUgcmVmZXJlbmNlIHRvIHRoZSBjbWQgdXNlZCB0byByZWdpc3RlciBmb3IgQUVOLiBXaGVuIGFuCisJICogYXBwbGljYXRpb24gd2FudHMgdXMgdG8gcmVnaXN0ZXIgZm9yIEFFTiwgd2UgaGF2ZSB0byBhYm9ydCB0aGlzCisJICogY21kIGFuZCByZS1yZWdpc3RlciB3aXRoIGEgbmV3IEVWRU5UIExPQ0FMRSBzdXBwbGllZCBieSB0aGF0IGFwcAorCSAqLworCWluc3RhbmNlLT5hZW5fY21kID0gY21kOworCisJLyoKKwkgKiBJc3N1ZSB0aGUgYWVuIHJlZ2lzdHJhdGlvbiBmcmFtZQorCSAqLworCXdyaXRlbChjbWQtPmZyYW1lX3BoeXNfYWRkciA+PiAzLAorCSAgICAgICAmaW5zdGFuY2UtPnJlZ19zZXQtPmluYm91bmRfcXVldWVfcG9ydCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBtZWdhc2FzX3N0YXJ0X2FlbiAtCVN1YnNjcmliZXMgdG8gQUVOIGR1cmluZyBkcml2ZXIgbG9hZCB0aW1lCisgKiBAaW5zdGFuY2U6CQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqLworc3RhdGljIGludCBtZWdhc2FzX3N0YXJ0X2FlbihzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCit7CisJc3RydWN0IG1lZ2FzYXNfZXZ0X2xvZ19pbmZvIGVsaTsKKwl1bmlvbiBtZWdhc2FzX2V2dF9jbGFzc19sb2NhbGUgY2xhc3NfbG9jYWxlOworCisJLyoKKwkgKiBHZXQgdGhlIGxhdGVzdCBzZXF1ZW5jZSBudW1iZXIgZnJvbSBGVworCSAqLworCW1lbXNldCgmZWxpLCAwLCBzaXplb2YoZWxpKSk7CisKKwlpZiAobWVnYXNhc19nZXRfc2VxX251bShpbnN0YW5jZSwgJmVsaSkpCisJCXJldHVybiAtMTsKKworCS8qCisJICogUmVnaXN0ZXIgQUVOIHdpdGggRlcgZm9yIGxhdGVzdCBzZXF1ZW5jZSBudW1iZXIgcGx1cyAxCisJICovCisJY2xhc3NfbG9jYWxlLm1lbWJlcnMucmVzZXJ2ZWQgPSAwOworCWNsYXNzX2xvY2FsZS5tZW1iZXJzLmxvY2FsZSA9IE1SX0VWVF9MT0NBTEVfQUxMOworCWNsYXNzX2xvY2FsZS5tZW1iZXJzLmNsYXNzID0gTVJfRVZUX0NMQVNTX0RFQlVHOworCisJcmV0dXJuIG1lZ2FzYXNfcmVnaXN0ZXJfYWVuKGluc3RhbmNlLCBlbGkubmV3ZXN0X3NlcV9udW0gKyAxLAorCQkJCSAgICBjbGFzc19sb2NhbGUud29yZCk7Cit9CisKKy8qKgorICogbWVnYXNhc19pb19hdHRhY2ggLQlBdHRhY2hlcyB0aGlzIGRyaXZlciB0byBTQ1NJIG1pZC1sYXllcgorICogQGluc3RhbmNlOgkJQWRhcHRlciBzb2Z0IHN0YXRlCisgKi8KK3N0YXRpYyBpbnQgbWVnYXNhc19pb19hdHRhY2goc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBpbnN0YW5jZS0+aG9zdDsKKworCS8qCisJICogRXhwb3J0IHBhcmFtZXRlcnMgcmVxdWlyZWQgYnkgU0NTSSBtaWQtbGF5ZXIKKwkgKi8KKwlob3N0LT5pcnEgPSBpbnN0YW5jZS0+cGRldi0+aXJxOworCWhvc3QtPnVuaXF1ZV9pZCA9IGluc3RhbmNlLT51bmlxdWVfaWQ7CisJaG9zdC0+Y2FuX3F1ZXVlID0gaW5zdGFuY2UtPm1heF9md19jbWRzIC0gTUVHQVNBU19JTlRfQ01EUzsKKwlob3N0LT50aGlzX2lkID0gaW5zdGFuY2UtPmluaXRfaWQ7CisJaG9zdC0+c2dfdGFibGVzaXplID0gaW5zdGFuY2UtPm1heF9udW1fc2dlOworCWhvc3QtPm1heF9zZWN0b3JzID0gaW5zdGFuY2UtPm1heF9zZWN0b3JzX3Blcl9yZXE7CisJaG9zdC0+Y21kX3Blcl9sdW4gPSAxMjg7CisJaG9zdC0+bWF4X2NoYW5uZWwgPSBNRUdBU0FTX01BWF9DSEFOTkVMUyAtIDE7CisJaG9zdC0+bWF4X2lkID0gTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMOworCWhvc3QtPm1heF9sdW4gPSBNRUdBU0FTX01BWF9MVU47CisKKwkvKgorCSAqIE5vdGlmeSB0aGUgbWlkLWxheWVyIGFib3V0IHRoZSBuZXcgY29udHJvbGxlcgorCSAqLworCWlmIChzY3NpX2FkZF9ob3N0KGhvc3QsICZpbnN0YW5jZS0+cGRldi0+ZGV2KSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogc2NzaV9hZGRfaG9zdCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKgorCSAqIFRyaWdnZXIgU0NTSSB0byBzY2FuIG91ciBkcml2ZXMKKwkgKi8KKwlzY3NpX3NjYW5faG9zdChob3N0KTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBtZWdhc2FzX3Byb2JlX29uZSAtCVBDSSBob3RwbHVnIGVudHJ5IHBvaW50CisgKiBAcGRldjoJCVBDSSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAaWQ6CQkJUENJIGlkcyBvZiBzdXBwb3J0ZWQgaG90cGx1Z2dlZCBhZGFwdGVyCQorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdAorbWVnYXNhc19wcm9iZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcnZhbDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OworCXN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZTsKKworCS8qCisJICogQW5ub3VuY2UgUENJIGluZm9ybWF0aW9uCisJICovCisJcHJpbnRrKEtFUk5fSU5GTyAibWVnYXNhczogJSM0LjA0eDolIzQuMDR4OiUjNC4wNHg6JSM0LjA0eDogIiwKKwkgICAgICAgcGRldi0+dmVuZG9yLCBwZGV2LT5kZXZpY2UsIHBkZXYtPnN1YnN5c3RlbV92ZW5kb3IsCisJICAgICAgIHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UpOworCisJcHJpbnRrKCJidXMgJWQ6c2xvdCAlZDpmdW5jICVkXG4iLAorCSAgICAgICBwZGV2LT5idXMtPm51bWJlciwgUENJX1NMT1QocGRldi0+ZGV2Zm4pLCBQQ0lfRlVOQyhwZGV2LT5kZXZmbikpOworCisJLyoKKwkgKiBQQ0kgcHJlcHBpbmc6IGVuYWJsZSBkZXZpY2Ugc2V0IGJ1cyBtYXN0ZXJpbmcgYW5kIGRtYSBtYXNrCisJICovCisJcnZhbCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCisJaWYgKHJ2YWwpIHsKKwkJcmV0dXJuIHJ2YWw7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwkvKgorCSAqIEFsbCBvdXIgY29udG9sbGVycyBhcmUgY2FwYWJsZSBvZiBwZXJmb3JtaW5nIDY0LWJpdCBETUEKKwkgKi8KKwlpZiAoSVNfRE1BNjQpIHsKKwkJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spICE9IDApIHsKKworCQkJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spICE9IDApCisJCQkJZ290byBmYWlsX3NldF9kbWFfbWFzazsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSAhPSAwKQorCQkJZ290byBmYWlsX3NldF9kbWFfbWFzazsKKwl9CisKKwlob3N0ID0gc2NzaV9ob3N0X2FsbG9jKCZtZWdhc2FzX3RlbXBsYXRlLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSkpOworCisJaWYgKCFob3N0KSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBzY3NpX2hvc3RfYWxsb2MgZmFpbGVkXG4iKTsKKwkJZ290byBmYWlsX2FsbG9jX2luc3RhbmNlOworCX0KKworCWluc3RhbmNlID0gKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICopaG9zdC0+aG9zdGRhdGE7CisJbWVtc2V0KGluc3RhbmNlLCAwLCBzaXplb2YoKmluc3RhbmNlKSk7CisKKwlpbnN0YW5jZS0+cHJvZHVjZXIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCBzaXplb2YodTMyKSwKKwkJCQkJCSAgJmluc3RhbmNlLT5wcm9kdWNlcl9oKTsKKwlpbnN0YW5jZS0+Y29uc3VtZXIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCBzaXplb2YodTMyKSwKKwkJCQkJCSAgJmluc3RhbmNlLT5jb25zdW1lcl9oKTsKKworCWlmICghaW5zdGFuY2UtPnByb2R1Y2VyIHx8ICFpbnN0YW5jZS0+Y29uc3VtZXIpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IEZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yICIKKwkJICAgICAgICJwcm9kdWNlciwgY29uc3VtZXJcbiIpOworCQlnb3RvIGZhaWxfYWxsb2NfZG1hX2J1ZjsKKwl9CisKKwkqaW5zdGFuY2UtPnByb2R1Y2VyID0gMDsKKwkqaW5zdGFuY2UtPmNvbnN1bWVyID0gMDsKKworCWluc3RhbmNlLT5ldnRfZGV0YWlsID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwKKwkJCQkJCSAgICBzaXplb2Yoc3RydWN0CisJCQkJCQkJICAgbWVnYXNhc19ldnRfZGV0YWlsKSwKKwkJCQkJCSAgICAmaW5zdGFuY2UtPmV2dF9kZXRhaWxfaCk7CisKKwlpZiAoIWluc3RhbmNlLT5ldnRfZGV0YWlsKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciAiCisJCSAgICAgICAiZXZlbnQgZGV0YWlsIHN0cnVjdHVyZVxuIik7CisJCWdvdG8gZmFpbF9hbGxvY19kbWFfYnVmOworCX0KKworCS8qCisJICogSW5pdGlhbGl6ZSBsb2NrcyBhbmQgcXVldWVzCisJICovCisJSU5JVF9MSVNUX0hFQUQoJmluc3RhbmNlLT5jbWRfcG9vbCk7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbnN0YW5jZS0+aW50X2NtZF93YWl0X3EpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmluc3RhbmNlLT5hYm9ydF9jbWRfd2FpdF9xKTsKKworCXNwaW5fbG9ja19pbml0KCZpbnN0YW5jZS0+Y21kX3Bvb2xfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmluc3RhbmNlLT5pbnN0YW5jZV9sb2NrKTsKKworCXNlbWFfaW5pdCgmaW5zdGFuY2UtPmFlbl9tdXRleCwgMSk7CisJc2VtYV9pbml0KCZpbnN0YW5jZS0+aW9jdGxfc2VtLCBNRUdBU0FTX0lOVF9DTURTKTsKKworCS8qCisJICogSW5pdGlhbGl6ZSBQQ0kgcmVsYXRlZCBhbmQgbWlzYyBwYXJhbWV0ZXJzCisJICovCisJaW5zdGFuY2UtPnBkZXYgPSBwZGV2OworCWluc3RhbmNlLT5ob3N0ID0gaG9zdDsKKwlpbnN0YW5jZS0+dW5pcXVlX2lkID0gcGRldi0+YnVzLT5udW1iZXIgPDwgOCB8IHBkZXYtPmRldmZuOworCWluc3RhbmNlLT5pbml0X2lkID0gTUVHQVNBU19ERUZBVUxUX0lOSVRfSUQ7CisKKwkvKgorCSAqIEluaXRpYWxpemUgTUZJIEZpcm13YXJlCisJICovCisJaWYgKG1lZ2FzYXNfaW5pdF9tZmkoaW5zdGFuY2UpKQorCQlnb3RvIGZhaWxfaW5pdF9tZmk7CisKKwkvKgorCSAqIFJlZ2lzdGVyIElSUQorCSAqLworCWlmIChyZXF1ZXN0X2lycShwZGV2LT5pcnEsIG1lZ2FzYXNfaXNyLCBTQV9TSElSUSwgIm1lZ2FzYXMiLCBpbnN0YW5jZSkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IEZhaWxlZCB0byByZWdpc3RlciBJUlFcbiIpOworCQlnb3RvIGZhaWxfaXJxOworCX0KKworCW1lZ2FzYXNfZW5hYmxlX2ludHIoaW5zdGFuY2UtPnJlZ19zZXQpOworCisJLyoKKwkgKiBTdG9yZSBpbnN0YW5jZSBpbiBQQ0kgc29mdHN0YXRlCisJICovCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGluc3RhbmNlKTsKKworCS8qCisJICogQWRkIHRoaXMgY29udHJvbGxlciB0byBtZWdhc2FzX21nbXRfaW5mbyBzdHJ1Y3R1cmUgc28gdGhhdCBpdAorCSAqIGNhbiBiZSBleHBvcnRlZCB0byBtYW5hZ2VtZW50IGFwcGxpY2F0aW9ucworCSAqLworCW1lZ2FzYXNfbWdtdF9pbmZvLmNvdW50Kys7CisJbWVnYXNhc19tZ210X2luZm8uaW5zdGFuY2VbbWVnYXNhc19tZ210X2luZm8ubWF4X2luZGV4XSA9IGluc3RhbmNlOworCW1lZ2FzYXNfbWdtdF9pbmZvLm1heF9pbmRleCsrOworCisJLyoKKwkgKiBJbml0aWF0ZSBBRU4gKEFzeW5jaHJvbm91cyBFdmVudCBOb3RpZmljYXRpb24pCisJICovCisJaWYgKG1lZ2FzYXNfc3RhcnRfYWVuKGluc3RhbmNlKSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogc3RhcnQgYWVuIGZhaWxlZFxuIik7CisJCWdvdG8gZmFpbF9zdGFydF9hZW47CisJfQorCisJLyoKKwkgKiBSZWdpc3RlciB3aXRoIFNDU0kgbWlkLWxheWVyCisJICovCisJaWYgKG1lZ2FzYXNfaW9fYXR0YWNoKGluc3RhbmNlKSkKKwkJZ290byBmYWlsX2lvX2F0dGFjaDsKKworCXJldHVybiAwOworCisgICAgICBmYWlsX3N0YXJ0X2FlbjoKKyAgICAgIGZhaWxfaW9fYXR0YWNoOgorCW1lZ2FzYXNfbWdtdF9pbmZvLmNvdW50LS07CisJbWVnYXNhc19tZ210X2luZm8uaW5zdGFuY2VbbWVnYXNhc19tZ210X2luZm8ubWF4X2luZGV4XSA9IE5VTEw7CisJbWVnYXNhc19tZ210X2luZm8ubWF4X2luZGV4LS07CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJbWVnYXNhc19kaXNhYmxlX2ludHIoaW5zdGFuY2UtPnJlZ19zZXQpOworCWZyZWVfaXJxKGluc3RhbmNlLT5wZGV2LT5pcnEsIGluc3RhbmNlKTsKKworCW1lZ2FzYXNfcmVsZWFzZV9tZmkoaW5zdGFuY2UpOworCisgICAgICBmYWlsX2lycToKKyAgICAgIGZhaWxfaW5pdF9tZmk6CisgICAgICBmYWlsX2FsbG9jX2RtYV9idWY6CisJaWYgKGluc3RhbmNlLT5ldnRfZGV0YWlsKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHNpemVvZihzdHJ1Y3QgbWVnYXNhc19ldnRfZGV0YWlsKSwKKwkJCQkgICAgaW5zdGFuY2UtPmV2dF9kZXRhaWwsCisJCQkJICAgIGluc3RhbmNlLT5ldnRfZGV0YWlsX2gpOworCisJaWYgKGluc3RhbmNlLT5wcm9kdWNlcikKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBzaXplb2YodTMyKSwgaW5zdGFuY2UtPnByb2R1Y2VyLAorCQkJCSAgICBpbnN0YW5jZS0+cHJvZHVjZXJfaCk7CisJaWYgKGluc3RhbmNlLT5jb25zdW1lcikKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBzaXplb2YodTMyKSwgaW5zdGFuY2UtPmNvbnN1bWVyLAorCQkJCSAgICBpbnN0YW5jZS0+Y29uc3VtZXJfaCk7CisJc2NzaV9ob3N0X3B1dChob3N0KTsKKworICAgICAgZmFpbF9hbGxvY19pbnN0YW5jZToKKyAgICAgIGZhaWxfc2V0X2RtYV9tYXNrOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworCXJldHVybiAtRU5PREVWOworfQorCisvKioKKyAqIG1lZ2FzYXNfZmx1c2hfY2FjaGUgLQlSZXF1ZXN0cyBGVyB0byBmbHVzaCBhbGwgaXRzIGNhY2hlcworICogQGluc3RhbmNlOgkJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICovCitzdGF0aWMgdm9pZCBtZWdhc2FzX2ZsdXNoX2NhY2hlKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKK3sKKwlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZDsKKwlzdHJ1Y3QgbWVnYXNhc19kY21kX2ZyYW1lICpkY21kOworCisJY21kID0gbWVnYXNhc19nZXRfY21kKGluc3RhbmNlKTsKKworCWlmICghY21kKQorCQlyZXR1cm47CisKKwlkY21kID0gJmNtZC0+ZnJhbWUtPmRjbWQ7CisKKwltZW1zZXQoZGNtZC0+bWJveC5iLCAwLCBNRklfTUJPWF9TSVpFKTsKKworCWRjbWQtPmNtZCA9IE1GSV9DTURfRENNRDsKKwlkY21kLT5jbWRfc3RhdHVzID0gMHgwOworCWRjbWQtPnNnZV9jb3VudCA9IDA7CisJZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX05PTkU7CisJZGNtZC0+dGltZW91dCA9IDA7CisJZGNtZC0+ZGF0YV94ZmVyX2xlbiA9IDA7CisJZGNtZC0+b3Bjb2RlID0gTVJfRENNRF9DVFJMX0NBQ0hFX0ZMVVNIOworCWRjbWQtPm1ib3guYlswXSA9IE1SX0ZMVVNIX0NUUkxfQ0FDSEUgfCBNUl9GTFVTSF9ESVNLX0NBQ0hFOworCisJbWVnYXNhc19pc3N1ZV9ibG9ja2VkX2NtZChpbnN0YW5jZSwgY21kKTsKKworCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgY21kKTsKKworCXJldHVybjsKK30KKworLyoqCisgKiBtZWdhc2FzX3NodXRkb3duX2NvbnRyb2xsZXIgLQlJbnN0cnVjdHMgRlcgdG8gc2h1dGRvd24gdGhlIGNvbnRyb2xsZXIKKyAqIEBpbnN0YW5jZToJCQkJQWRhcHRlciBzb2Z0IHN0YXRlCisgKi8KK3N0YXRpYyB2b2lkIG1lZ2FzYXNfc2h1dGRvd25fY29udHJvbGxlcihzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCit7CisJc3RydWN0IG1lZ2FzYXNfY21kICpjbWQ7CisJc3RydWN0IG1lZ2FzYXNfZGNtZF9mcmFtZSAqZGNtZDsKKworCWNtZCA9IG1lZ2FzYXNfZ2V0X2NtZChpbnN0YW5jZSk7CisKKwlpZiAoIWNtZCkKKwkJcmV0dXJuOworCisJaWYgKGluc3RhbmNlLT5hZW5fY21kKQorCQltZWdhc2FzX2lzc3VlX2Jsb2NrZWRfYWJvcnRfY21kKGluc3RhbmNlLCBpbnN0YW5jZS0+YWVuX2NtZCk7CisKKwlkY21kID0gJmNtZC0+ZnJhbWUtPmRjbWQ7CisKKwltZW1zZXQoZGNtZC0+bWJveC5iLCAwLCBNRklfTUJPWF9TSVpFKTsKKworCWRjbWQtPmNtZCA9IE1GSV9DTURfRENNRDsKKwlkY21kLT5jbWRfc3RhdHVzID0gMHgwOworCWRjbWQtPnNnZV9jb3VudCA9IDA7CisJZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX05PTkU7CisJZGNtZC0+dGltZW91dCA9IDA7CisJZGNtZC0+ZGF0YV94ZmVyX2xlbiA9IDA7CisJZGNtZC0+b3Bjb2RlID0gTVJfRENNRF9DVFJMX1NIVVRET1dOOworCisJbWVnYXNhc19pc3N1ZV9ibG9ja2VkX2NtZChpbnN0YW5jZSwgY21kKTsKKworCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgY21kKTsKKworCXJldHVybjsKK30KKworLyoqCisgKiBtZWdhc2FzX2RldGFjaF9vbmUgLQlQQ0kgaG90InVuInBsdWcgZW50cnkgcG9pbnQKKyAqIEBwZGV2OgkJUENJIGRldmljZSBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgbWVnYXNhc19kZXRhY2hfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWludCBpOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CisJc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlOworCisJaW5zdGFuY2UgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaG9zdCA9IGluc3RhbmNlLT5ob3N0OworCisJc2NzaV9yZW1vdmVfaG9zdChpbnN0YW5jZS0+aG9zdCk7CisJbWVnYXNhc19mbHVzaF9jYWNoZShpbnN0YW5jZSk7CisJbWVnYXNhc19zaHV0ZG93bl9jb250cm9sbGVyKGluc3RhbmNlKTsKKworCS8qCisJICogVGFrZSB0aGUgaW5zdGFuY2Ugb2ZmIHRoZSBpbnN0YW5jZSBhcnJheS4gTm90ZSB0aGF0IHdlIHdpbGwgbm90CisJICogZGVjcmVtZW50IHRoZSBtYXhfaW5kZXguIFdlIGxldCB0aGlzIGFycmF5IGJlIHNwYXJzZSBhcnJheQorCSAqLworCWZvciAoaSA9IDA7IGkgPCBtZWdhc2FzX21nbXRfaW5mby5tYXhfaW5kZXg7IGkrKykgeworCQlpZiAobWVnYXNhc19tZ210X2luZm8uaW5zdGFuY2VbaV0gPT0gaW5zdGFuY2UpIHsKKwkJCW1lZ2FzYXNfbWdtdF9pbmZvLmNvdW50LS07CisJCQltZWdhc2FzX21nbXRfaW5mby5pbnN0YW5jZVtpXSA9IE5VTEw7CisKKwkJCWJyZWFrOworCQl9CisJfQorCisJcGNpX3NldF9kcnZkYXRhKGluc3RhbmNlLT5wZGV2LCBOVUxMKTsKKworCW1lZ2FzYXNfZGlzYWJsZV9pbnRyKGluc3RhbmNlLT5yZWdfc2V0KTsKKworCWZyZWVfaXJxKGluc3RhbmNlLT5wZGV2LT5pcnEsIGluc3RhbmNlKTsKKworCW1lZ2FzYXNfcmVsZWFzZV9tZmkoaW5zdGFuY2UpOworCisJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfZXZ0X2RldGFpbCksCisJCQkgICAgaW5zdGFuY2UtPmV2dF9kZXRhaWwsIGluc3RhbmNlLT5ldnRfZGV0YWlsX2gpOworCisJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBzaXplb2YodTMyKSwgaW5zdGFuY2UtPnByb2R1Y2VyLAorCQkJICAgIGluc3RhbmNlLT5wcm9kdWNlcl9oKTsKKworCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgc2l6ZW9mKHUzMiksIGluc3RhbmNlLT5jb25zdW1lciwKKwkJCSAgICBpbnN0YW5jZS0+Y29uc3VtZXJfaCk7CisKKwlzY3NpX2hvc3RfcHV0KGhvc3QpOworCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCisJcmV0dXJuOworfQorCisvKioKKyAqIG1lZ2FzYXNfc2h1dGRvd24gLQlTaHV0ZG93biBlbnRyeSBwb2ludAorICogQGRldmljZToJCUdlbmVyaWMgZGV2aWNlIHN0cnVjdHVyZQorICovCitzdGF0aWMgdm9pZCBtZWdhc2FzX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwltZWdhc2FzX2ZsdXNoX2NhY2hlKGluc3RhbmNlKTsKK30KKworLyoqCisgKiBtZWdhc2FzX21nbXRfb3BlbiAtCWNoYXIgbm9kZSAib3BlbiIgZW50cnkgcG9pbnQKKyAqLworc3RhdGljIGludCBtZWdhc2FzX21nbXRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApCit7CisJLyoKKwkgKiBBbGxvdyBvbmx5IHRob3NlIHVzZXJzIHdpdGggYWRtaW4gcmlnaHRzCisJICovCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVBQ0NFUzsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIG1lZ2FzYXNfbWdtdF9yZWxlYXNlIC0gY2hhciBub2RlICJyZWxlYXNlIiBlbnRyeSBwb2ludAorICovCitzdGF0aWMgaW50IG1lZ2FzYXNfbWdtdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcCkKK3sKKwlmaWxlcC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlmYXN5bmNfaGVscGVyKC0xLCBmaWxlcCwgMCwgJm1lZ2FzYXNfYXN5bmNfcXVldWUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbWVnYXNhc19tZ210X2Zhc3luYyAtCUFzeW5jIG5vdGlmaWVyIHJlZ2lzdHJhdGlvbiBmcm9tIGFwcGxpY2F0aW9ucworICoKKyAqIFRoaXMgZnVuY3Rpb24gYWRkcyB0aGUgY2FsbGluZyBwcm9jZXNzIHRvIGEgZHJpdmVyIGdsb2JhbCBxdWV1ZS4gV2hlbiBhbgorICogZXZlbnQgb2NjdXJzLCBTSUdJTyB3aWxsIGJlIHNlbnQgdG8gYWxsIHByb2Nlc3NlcyBpbiB0aGlzIHF1ZXVlLgorICovCitzdGF0aWMgaW50IG1lZ2FzYXNfbWdtdF9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBtb2RlKQoreworCWludCByYzsKKworCWRvd24oJm1lZ2FzYXNfYXN5bmNfcXVldWVfbXV0ZXgpOworCisJcmMgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxlcCwgbW9kZSwgJm1lZ2FzYXNfYXN5bmNfcXVldWUpOworCisJdXAoJm1lZ2FzYXNfYXN5bmNfcXVldWVfbXV0ZXgpOworCisJaWYgKHJjID49IDApIHsKKwkJLyogRm9yIHNhbml0eSBjaGVjayB3aGVuIHdlIGdldCBpb2N0bCAqLworCQlmaWxlcC0+cHJpdmF0ZV9kYXRhID0gZmlsZXA7CisJCXJldHVybiAwOworCX0KKworCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBmYXN5bmNfaGVscGVyIGZhaWxlZCBbJWRdXG4iLCByYyk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogbWVnYXNhc19tZ210X2Z3X2lvY3RsIC0JSXNzdWVzIG1hbmFnZW1lbnQgaW9jdGxzIHRvIEZXCisgKiBAaW5zdGFuY2U6CQkJQWRhcHRlciBzb2Z0IHN0YXRlCisgKiBAYXJncDoJCQlVc2VyJ3MgaW9jdGwgcGFja2V0CisgKi8KK3N0YXRpYyBpbnQKK21lZ2FzYXNfbWdtdF9md19pb2N0bChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsCisJCSAgICAgIHN0cnVjdCBtZWdhc2FzX2lvY3BhY2tldCBfX3VzZXIgKiB1c2VyX2lvYywKKwkJICAgICAgc3RydWN0IG1lZ2FzYXNfaW9jcGFja2V0ICppb2MpCit7CisJc3RydWN0IG1lZ2FzYXNfc2dlMzIgKmtlcm5fc2dlMzI7CisJc3RydWN0IG1lZ2FzYXNfY21kICpjbWQ7CisJdm9pZCAqa2J1ZmZfYXJyW01BWF9JT0NUTF9TR0VdOworCWRtYV9hZGRyX3QgYnVmX2hhbmRsZSA9IDA7CisJaW50IGVycm9yID0gMCwgaTsKKwl2b2lkICpzZW5zZSA9IE5VTEw7CisJZG1hX2FkZHJfdCBzZW5zZV9oYW5kbGU7CisJdTMyICpzZW5zZV9wdHI7CisKKwltZW1zZXQoa2J1ZmZfYXJyLCAwLCBzaXplb2Yoa2J1ZmZfYXJyKSk7CisKKwlpZiAoaW9jLT5zZ2VfY291bnQgPiBNQVhfSU9DVExfU0dFKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBTR0UgY291bnQgWyVkXSA+ICBtYXggbGltaXQgWyVkXVxuIiwKKwkJICAgICAgIGlvYy0+c2dlX2NvdW50LCBNQVhfSU9DVExfU0dFKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY21kID0gbWVnYXNhc19nZXRfY21kKGluc3RhbmNlKTsKKwlpZiAoIWNtZCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogRmFpbGVkIHRvIGdldCBhIGNtZCBwYWNrZXRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKgorCSAqIFVzZXIncyBJT0NUTCBwYWNrZXQgaGFzIDIgZnJhbWVzIChtYXhpbXVtKS4gQ29weSB0aG9zZSB0d28KKwkgKiBmcmFtZXMgaW50byBvdXIgY21kJ3MgZnJhbWVzLiBjbWQtPmZyYW1lJ3MgY29udGV4dCB3aWxsIGdldAorCSAqIG92ZXJ3cml0dGVuIHdoZW4gd2UgY29weSBmcm9tIHVzZXIncyBmcmFtZXMuIFNvIHNldCB0aGF0IHZhbHVlCisJICogYWxvbmUgc2VwYXJhdGVseQorCSAqLworCW1lbWNweShjbWQtPmZyYW1lLCBpb2MtPmZyYW1lLnJhdywgMiAqIE1FR0FNRklfRlJBTUVfU0laRSk7CisJY21kLT5mcmFtZS0+aGRyLmNvbnRleHQgPSBjbWQtPmluZGV4OworCisJLyoKKwkgKiBUaGUgbWFuYWdlbWVudCBpbnRlcmZhY2UgYmV0d2VlbiBhcHBsaWNhdGlvbnMgYW5kIHRoZSBmdyB1c2VzCisJICogTUZJIGZyYW1lcy4gRS5nLCBSQUlEIGNvbmZpZ3VyYXRpb24gY2hhbmdlcywgTEQgcHJvcGVydHkgY2hhbmdlcworCSAqIGV0YyBhcmUgYWNjb21wbGlzaGVzIHRocm91Z2ggZGlmZmVyZW50IGtpbmRzIG9mIE1GSSBmcmFtZXMuIFRoZQorCSAqIGRyaXZlciBuZWVkcyB0byBjYXJlIG9ubHkgYWJvdXQgc3Vic3RpdHV0aW5nIHVzZXIgYnVmZmVycyB3aXRoCisJICoga2VybmVsIGJ1ZmZlcnMgaW4gU0dMcy4gVGhlIGxvY2F0aW9uIG9mIFNHTCBpcyBlbWJlZGRlZCBpbiB0aGUKKwkgKiBzdHJ1Y3QgaW9jcGFja2V0IGl0c2VsZi4KKwkgKi8KKwlrZXJuX3NnZTMyID0gKHN0cnVjdCBtZWdhc2FzX3NnZTMyICopCisJICAgICgodW5zaWduZWQgbG9uZyljbWQtPmZyYW1lICsgaW9jLT5zZ2xfb2ZmKTsKKworCS8qCisJICogRm9yIGVhY2ggdXNlciBidWZmZXIsIGNyZWF0ZSBhIG1pcnJvciBidWZmZXIgYW5kIGNvcHkgaW4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW9jLT5zZ2VfY291bnQ7IGkrKykgeworCQlrYnVmZl9hcnJbaV0gPSBwY2lfYWxsb2NfY29uc2lzdGVudChpbnN0YW5jZS0+cGRldiwKKwkJCQkJCSAgICBpb2MtPnNnbFtpXS5pb3ZfbGVuLAorCQkJCQkJICAgICZidWZfaGFuZGxlKTsKKwkJaWYgKCFrYnVmZl9hcnJbaV0pIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBGYWlsZWQgdG8gYWxsb2MgIgorCQkJICAgICAgICJrZXJuZWwgU0dMIGJ1ZmZlciBmb3IgSU9DVEwgXG4iKTsKKwkJCWVycm9yID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyoKKwkJICogV2UgZG9uJ3QgY2hhbmdlIHRoZSBkbWFfY29oZXJlbnRfbWFzaywgc28KKwkJICogcGNpX2FsbG9jX2NvbnNpc3RlbnQgb25seSByZXR1cm5zIDMyYml0IGFkZHJlc3NlcworCQkgKi8KKwkJa2Vybl9zZ2UzMltpXS5waHlzX2FkZHIgPSAodTMyKSBidWZfaGFuZGxlOworCQlrZXJuX3NnZTMyW2ldLmxlbmd0aCA9IGlvYy0+c2dsW2ldLmlvdl9sZW47CisKKwkJLyoKKwkJICogV2UgY3JlYXRlZCBhIGtlcm5lbCBidWZmZXIgY29ycmVzcG9uZGluZyB0byB0aGUKKwkJICogdXNlciBidWZmZXIuIE5vdyBjb3B5IGluIGZyb20gdGhlIHVzZXIgYnVmZmVyCisJCSAqLworCQlpZiAoY29weV9mcm9tX3VzZXIoa2J1ZmZfYXJyW2ldLCBpb2MtPnNnbFtpXS5pb3ZfYmFzZSwKKwkJCQkgICAodTMyKSAoaW9jLT5zZ2xbaV0uaW92X2xlbikpKSB7CisJCQllcnJvciA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmIChpb2MtPnNlbnNlX2xlbikgeworCQlzZW5zZSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGluc3RhbmNlLT5wZGV2LCBpb2MtPnNlbnNlX2xlbiwKKwkJCQkJICAgICAmc2Vuc2VfaGFuZGxlKTsKKwkJaWYgKCFzZW5zZSkgeworCQkJZXJyb3IgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKworCQlzZW5zZV9wdHIgPQorCQkgICAgKHUzMiAqKSAoKHVuc2lnbmVkIGxvbmcpY21kLT5mcmFtZSArIGlvYy0+c2Vuc2Vfb2ZmKTsKKwkJKnNlbnNlX3B0ciA9IHNlbnNlX2hhbmRsZTsKKwl9CisKKwkvKgorCSAqIFNldCB0aGUgc3luY19jbWQgZmxhZyBzbyB0aGF0IHRoZSBJU1Iga25vd3Mgbm90IHRvIGNvbXBsZXRlIHRoaXMKKwkgKiBjbWQgdG8gdGhlIFNDU0kgbWlkLWxheWVyCisJICovCisJY21kLT5zeW5jX2NtZCA9IDE7CisJbWVnYXNhc19pc3N1ZV9ibG9ja2VkX2NtZChpbnN0YW5jZSwgY21kKTsKKwljbWQtPnN5bmNfY21kID0gMDsKKworCS8qCisJICogY29weSBvdXQgdGhlIGtlcm5lbCBidWZmZXJzIHRvIHVzZXIgYnVmZmVycworCSAqLworCWZvciAoaSA9IDA7IGkgPCBpb2MtPnNnZV9jb3VudDsgaSsrKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoaW9jLT5zZ2xbaV0uaW92X2Jhc2UsIGtidWZmX2FycltpXSwKKwkJCQkgaW9jLT5zZ2xbaV0uaW92X2xlbikpIHsKKwkJCWVycm9yID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyoKKwkgKiBjb3B5IG91dCB0aGUgc2Vuc2UKKwkgKi8KKwlpZiAoaW9jLT5zZW5zZV9sZW4pIHsKKwkJLyoKKwkJICogc2Vuc2VfcHRyIHBvaW50cyB0byB0aGUgbG9jYXRpb24gdGhhdCBoYXMgdGhlIHVzZXIKKwkJICogc2Vuc2UgYnVmZmVyIGFkZHJlc3MKKwkJICovCisJCXNlbnNlX3B0ciA9ICh1MzIgKikgKCh1bnNpZ25lZCBsb25nKWlvYy0+ZnJhbWUucmF3ICsKKwkJCQkgICAgIGlvYy0+c2Vuc2Vfb2ZmKTsKKworCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSgodW5zaWduZWQgbG9uZykoKnNlbnNlX3B0cikpLAorCQkJCSBzZW5zZSwgaW9jLT5zZW5zZV9sZW4pKSB7CisJCQllcnJvciA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qCisJICogY29weSB0aGUgc3RhdHVzIGNvZGVzIHJldHVybmVkIGJ5IHRoZSBmdworCSAqLworCWlmIChjb3B5X3RvX3VzZXIoJnVzZXJfaW9jLT5mcmFtZS5oZHIuY21kX3N0YXR1cywKKwkJCSAmY21kLT5mcmFtZS0+aGRyLmNtZF9zdGF0dXMsIHNpemVvZih1OCkpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBFcnJvciBjb3B5aW5nIG91dCBjbWRfc3RhdHVzXG4iKTsKKwkJZXJyb3IgPSAtRUZBVUxUOworCX0KKworICAgICAgb3V0OgorCWlmIChzZW5zZSkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGluc3RhbmNlLT5wZGV2LCBpb2MtPnNlbnNlX2xlbiwKKwkJCQkgICAgc2Vuc2UsIHNlbnNlX2hhbmRsZSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGlvYy0+c2dlX2NvdW50ICYmIGtidWZmX2FycltpXTsgaSsrKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaW5zdGFuY2UtPnBkZXYsCisJCQkJICAgIGtlcm5fc2dlMzJbaV0ubGVuZ3RoLAorCQkJCSAgICBrYnVmZl9hcnJbaV0sIGtlcm5fc2dlMzJbaV0ucGh5c19hZGRyKTsKKwl9CisKKwltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKm1lZ2FzYXNfbG9va3VwX2luc3RhbmNlKHUxNiBob3N0X25vKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG1lZ2FzYXNfbWdtdF9pbmZvLm1heF9pbmRleDsgaSsrKSB7CisKKwkJaWYgKChtZWdhc2FzX21nbXRfaW5mby5pbnN0YW5jZVtpXSkgJiYKKwkJICAgIChtZWdhc2FzX21nbXRfaW5mby5pbnN0YW5jZVtpXS0+aG9zdC0+aG9zdF9ubyA9PSBob3N0X25vKSkKKwkJCXJldHVybiBtZWdhc2FzX21nbXRfaW5mby5pbnN0YW5jZVtpXTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBtZWdhc2FzX21nbXRfaW9jdGxfZncoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBtZWdhc2FzX2lvY3BhY2tldCBfX3VzZXIgKnVzZXJfaW9jID0KKwkgICAgKHN0cnVjdCBtZWdhc2FzX2lvY3BhY2tldCBfX3VzZXIgKilhcmc7CisJc3RydWN0IG1lZ2FzYXNfaW9jcGFja2V0ICppb2M7CisJc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlOworCWludCBlcnJvcjsKKworCWlvYyA9IGttYWxsb2Moc2l6ZW9mKCppb2MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlvYykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoY29weV9mcm9tX3VzZXIoaW9jLCB1c2VyX2lvYywgc2l6ZW9mKCppb2MpKSkgeworCQllcnJvciA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0X2tmcmVlX2lvYzsKKwl9CisKKwlpbnN0YW5jZSA9IG1lZ2FzYXNfbG9va3VwX2luc3RhbmNlKGlvYy0+aG9zdF9ubyk7CisJaWYgKCFpbnN0YW5jZSkgeworCQllcnJvciA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2tmcmVlX2lvYzsKKwl9CisKKwkvKgorCSAqIFdlIHdpbGwgYWxsb3cgb25seSBNRUdBU0FTX0lOVF9DTURTIG51bWJlciBvZiBwYXJhbGxlbCBpb2N0bCBjbWRzCisJICovCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmaW5zdGFuY2UtPmlvY3RsX3NlbSkpIHsKKwkJZXJyb3IgPSAtRVJFU1RBUlRTWVM7CisJCWdvdG8gb3V0X2tmcmVlX2lvYzsKKwl9CisJZXJyb3IgPSBtZWdhc2FzX21nbXRfZndfaW9jdGwoaW5zdGFuY2UsIHVzZXJfaW9jLCBpb2MpOworCXVwKCZpbnN0YW5jZS0+aW9jdGxfc2VtKTsKKworICAgICAgb3V0X2tmcmVlX2lvYzoKKwlrZnJlZShpb2MpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBtZWdhc2FzX21nbXRfaW9jdGxfYWVuKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2U7CisJc3RydWN0IG1lZ2FzYXNfYWVuIGFlbjsKKwlpbnQgZXJyb3I7CisKKwlpZiAoZmlsZS0+cHJpdmF0ZV9kYXRhICE9IGZpbGUpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IGZhc3luY19oZWxwZXIgd2FzIG5vdCAiCisJCSAgICAgICAiY2FsbGVkIGZpcnN0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGNvcHlfZnJvbV91c2VyKCZhZW4sICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGFlbikpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWluc3RhbmNlID0gbWVnYXNhc19sb29rdXBfaW5zdGFuY2UoYWVuLmhvc3Rfbm8pOworCisJaWYgKCFpbnN0YW5jZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkb3duKCZpbnN0YW5jZS0+YWVuX211dGV4KTsKKwllcnJvciA9IG1lZ2FzYXNfcmVnaXN0ZXJfYWVuKGluc3RhbmNlLCBhZW4uc2VxX251bSwKKwkJCQkgICAgIGFlbi5jbGFzc19sb2NhbGVfd29yZCk7CisJdXAoJmluc3RhbmNlLT5hZW5fbXV0ZXgpOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBtZWdhc2FzX21nbXRfaW9jdGwgLQljaGFyIG5vZGUgaW9jdGwgZW50cnkgcG9pbnQKKyAqLworc3RhdGljIGxvbmcKK21lZ2FzYXNfbWdtdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIE1FR0FTQVNfSU9DX0ZJUk1XQVJFOgorCQlyZXR1cm4gbWVnYXNhc19tZ210X2lvY3RsX2Z3KGZpbGUsIGFyZyk7CisKKwljYXNlIE1FR0FTQVNfSU9DX0dFVF9BRU46CisJCXJldHVybiBtZWdhc2FzX21nbXRfaW9jdGxfYWVuKGZpbGUsIGFyZyk7CisJfQorCisJcmV0dXJuIC1FTk9UVFk7Cit9CisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitzdGF0aWMgaW50IG1lZ2FzYXNfbWdtdF9jb21wYXRfaW9jdGxfZncoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBjb21wYXRfbWVnYXNhc19pb2NwYWNrZXQgX191c2VyICpjaW9jID0KKwkgICAgKHN0cnVjdCBjb21wYXRfbWVnYXNhc19pb2NwYWNrZXQgX191c2VyICopYXJnOworCXN0cnVjdCBtZWdhc2FzX2lvY3BhY2tldCBfX3VzZXIgKmlvYyA9CisJICAgIGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZihzdHJ1Y3QgbWVnYXNhc19pb2NwYWNrZXQpKTsKKwlpbnQgaTsKKwlpbnQgZXJyb3IgPSAwOworCisJY2xlYXJfdXNlcihpb2MsIHNpemVvZigqaW9jKSk7CisKKwlpZiAoY29weV9pbl91c2VyKCZpb2MtPmhvc3Rfbm8sICZjaW9jLT5ob3N0X25vLCBzaXplb2YodTE2KSkgfHwKKwkgICAgY29weV9pbl91c2VyKCZpb2MtPnNnbF9vZmYsICZjaW9jLT5zZ2xfb2ZmLCBzaXplb2YodTMyKSkgfHwKKwkgICAgY29weV9pbl91c2VyKCZpb2MtPnNlbnNlX29mZiwgJmNpb2MtPnNlbnNlX29mZiwgc2l6ZW9mKHUzMikpIHx8CisJICAgIGNvcHlfaW5fdXNlcigmaW9jLT5zZW5zZV9sZW4sICZjaW9jLT5zZW5zZV9sZW4sIHNpemVvZih1MzIpKSB8fAorCSAgICBjb3B5X2luX3VzZXIoaW9jLT5mcmFtZS5yYXcsIGNpb2MtPmZyYW1lLnJhdywgMTI4KSB8fAorCSAgICBjb3B5X2luX3VzZXIoJmlvYy0+c2dlX2NvdW50LCAmY2lvYy0+c2dlX2NvdW50LCBzaXplb2YodTMyKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9JT0NUTF9TR0U7IGkrKykgeworCQljb21wYXRfdXB0cl90IHB0cjsKKworCQlpZiAoZ2V0X3VzZXIocHRyLCAmY2lvYy0+c2dsW2ldLmlvdl9iYXNlKSB8fAorCQkgICAgcHV0X3VzZXIoY29tcGF0X3B0cihwdHIpLCAmaW9jLT5zZ2xbaV0uaW92X2Jhc2UpIHx8CisJCSAgICBjb3B5X2luX3VzZXIoJmlvYy0+c2dsW2ldLmlvdl9sZW4sCisJCQkJICZjaW9jLT5zZ2xbaV0uaW92X2xlbiwgc2l6ZW9mKGNvbXBhdF9zaXplX3QpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKworCWVycm9yID0gbWVnYXNhc19tZ210X2lvY3RsX2Z3KGZpbGUsICh1bnNpZ25lZCBsb25nKWlvYyk7CisKKwlpZiAoY29weV9pbl91c2VyKCZjaW9jLT5mcmFtZS5oZHIuY21kX3N0YXR1cywKKwkJCSAmaW9jLT5mcmFtZS5oZHIuY21kX3N0YXR1cywgc2l6ZW9mKHU4KSkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IGVycm9yIGNvcHlfaW5fdXNlciBjbWRfc3RhdHVzXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGxvbmcKK21lZ2FzYXNfbWdtdF9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCQkgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBNRUdBU0FTX0lPQ19GSVJNV0FSRTp7CisJCQlyZXR1cm4gbWVnYXNhc19tZ210X2NvbXBhdF9pb2N0bF9mdyhmaWxlLCBhcmcpOworCQl9CisJY2FzZSBNRUdBU0FTX0lPQ19HRVRfQUVOOgorCQlyZXR1cm4gbWVnYXNhc19tZ210X2lvY3RsX2FlbihmaWxlLCBhcmcpOworCX0KKworCXJldHVybiAtRU5PVFRZOworfQorI2VuZGlmCisKKy8qCisgKiBGaWxlIG9wZXJhdGlvbnMgc3RydWN0dXJlIGZvciBtYW5hZ2VtZW50IGludGVyZmFjZQorICovCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZWdhc2FzX21nbXRfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IG1lZ2FzYXNfbWdtdF9vcGVuLAorCS5yZWxlYXNlID0gbWVnYXNhc19tZ210X3JlbGVhc2UsCisJLmZhc3luYyA9IG1lZ2FzYXNfbWdtdF9mYXN5bmMsCisJLnVubG9ja2VkX2lvY3RsID0gbWVnYXNhc19tZ210X2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsID0gbWVnYXNhc19tZ210X2NvbXBhdF9pb2N0bCwKKyNlbmRpZgorfTsKKworLyoKKyAqIFBDSSBob3RwbHVnIHN1cHBvcnQgcmVnaXN0cmF0aW9uIHN0cnVjdHVyZQorICovCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWVnYXNhc19wY2lfZHJpdmVyID0geworCisJLm5hbWUgPSAibWVnYXJhaWRfc2FzIiwKKwkuaWRfdGFibGUgPSBtZWdhc2FzX3BjaV90YWJsZSwKKwkucHJvYmUgPSBtZWdhc2FzX3Byb2JlX29uZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AobWVnYXNhc19kZXRhY2hfb25lKSwKKwkuc2h1dGRvd24gPSBtZWdhc2FzX3NodXRkb3duLAorfTsKKworLyoKKyAqIFN5c2ZzIGRyaXZlciBhdHRyaWJ1dGVzCisgKi8KK3N0YXRpYyBzc2l6ZV90IG1lZ2FzYXNfc3lzZnNfc2hvd192ZXJzaW9uKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZCwgY2hhciAqYnVmKQoreworCXJldHVybiBzbnByaW50ZihidWYsIHN0cmxlbihNRUdBU0FTX1ZFUlNJT04pICsgMiwgIiVzXG4iLAorCQkJTUVHQVNBU19WRVJTSU9OKTsKK30KKworc3RhdGljIERSSVZFUl9BVFRSKHZlcnNpb24sIFNfSVJVR08sIG1lZ2FzYXNfc3lzZnNfc2hvd192ZXJzaW9uLCBOVUxMKTsKKworc3RhdGljIHNzaXplX3QKK21lZ2FzYXNfc3lzZnNfc2hvd19yZWxlYXNlX2RhdGUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRkLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNucHJpbnRmKGJ1Ziwgc3RybGVuKE1FR0FTQVNfUkVMREFURSkgKyAyLCAiJXNcbiIsCisJCQlNRUdBU0FTX1JFTERBVEUpOworfQorCitzdGF0aWMgRFJJVkVSX0FUVFIocmVsZWFzZV9kYXRlLCBTX0lSVUdPLCBtZWdhc2FzX3N5c2ZzX3Nob3dfcmVsZWFzZV9kYXRlLAorCQkgICBOVUxMKTsKKworLyoqCisgKiBtZWdhc2FzX2luaXQgLSBEcml2ZXIgbG9hZCBlbnRyeSBwb2ludAorICovCitzdGF0aWMgaW50IF9faW5pdCBtZWdhc2FzX2luaXQodm9pZCkKK3sKKwlpbnQgcnZhbDsKKworCS8qCisJICogQW5ub3VuY2UgZHJpdmVyIHZlcnNpb24gYW5kIG90aGVyIGluZm9ybWF0aW9uCisJICovCisJcHJpbnRrKEtFUk5fSU5GTyAibWVnYXNhczogJXMgJXNcbiIsIE1FR0FTQVNfVkVSU0lPTiwKKwkgICAgICAgTUVHQVNBU19FWFRfVkVSU0lPTik7CisKKwltZW1zZXQoJm1lZ2FzYXNfbWdtdF9pbmZvLCAwLCBzaXplb2YobWVnYXNhc19tZ210X2luZm8pKTsKKworCS8qCisJICogUmVnaXN0ZXIgY2hhcmFjdGVyIGRldmljZSBub2RlCisJICovCisJcnZhbCA9IHJlZ2lzdGVyX2NocmRldigwLCAibWVnYXJhaWRfc2FzX2lvY3RsIiwgJm1lZ2FzYXNfbWdtdF9mb3BzKTsKKworCWlmIChydmFsIDwgMCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogZmFpbGVkIHRvIG9wZW4gZGV2aWNlIG5vZGVcbiIpOworCQlyZXR1cm4gcnZhbDsKKwl9CisKKwltZWdhc2FzX21nbXRfbWFqb3JubyA9IHJ2YWw7CisKKwkvKgorCSAqIFJlZ2lzdGVyIG91cnNlbHZlcyBhcyBQQ0kgaG90cGx1ZyBtb2R1bGUKKwkgKi8KKwlydmFsID0gcGNpX21vZHVsZV9pbml0KCZtZWdhc2FzX3BjaV9kcml2ZXIpOworCisJaWYgKHJ2YWwpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IFBDSSBob3RwbHVnIHJlZ2lzcmF0aW9uIGZhaWxlZCBcbiIpOworCQl1bnJlZ2lzdGVyX2NocmRldihtZWdhc2FzX21nbXRfbWFqb3JubywgIm1lZ2FyYWlkX3Nhc19pb2N0bCIpOworCX0KKworCWRyaXZlcl9jcmVhdGVfZmlsZSgmbWVnYXNhc19wY2lfZHJpdmVyLmRyaXZlciwgJmRyaXZlcl9hdHRyX3ZlcnNpb24pOworCWRyaXZlcl9jcmVhdGVfZmlsZSgmbWVnYXNhc19wY2lfZHJpdmVyLmRyaXZlciwKKwkJCSAgICZkcml2ZXJfYXR0cl9yZWxlYXNlX2RhdGUpOworCisJcmV0dXJuIHJ2YWw7Cit9CisKKy8qKgorICogbWVnYXNhc19leGl0IC0gRHJpdmVyIHVubG9hZCBlbnRyeSBwb2ludAorICovCitzdGF0aWMgdm9pZCBfX2V4aXQgbWVnYXNhc19leGl0KHZvaWQpCit7CisJZHJpdmVyX3JlbW92ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLCAmZHJpdmVyX2F0dHJfdmVyc2lvbik7CisJZHJpdmVyX3JlbW92ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAorCQkJICAgJmRyaXZlcl9hdHRyX3JlbGVhc2VfZGF0ZSk7CisKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm1lZ2FzYXNfcGNpX2RyaXZlcik7CisJdW5yZWdpc3Rlcl9jaHJkZXYobWVnYXNhc19tZ210X21ham9ybm8sICJtZWdhcmFpZF9zYXNfaW9jdGwiKTsKK30KKworbW9kdWxlX2luaXQobWVnYXNhc19pbml0KTsKK21vZHVsZV9leGl0KG1lZ2FzYXNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmggYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFlYzlkNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaApAQCAtMCwwICsxLDExNDIgQEAKKy8qCisgKgorICoJCUxpbnV4IE1lZ2FSQUlEIGRyaXZlciBmb3IgU0FTIGJhc2VkIFJBSUQgY29udHJvbGxlcnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNSAgTFNJIExvZ2ljIENvcnBvcmF0aW9uLgorICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZJTEUJCTogbWVnYXJhaWRfc2FzLmgKKyAqLworCisjaWZuZGVmIExTSV9NRUdBUkFJRF9TQVNfSAorI2RlZmluZSBMU0lfTUVHQVJBSURfU0FTX0gKKworLyoqCisgKiBNZWdhUkFJRCBTQVMgRHJpdmVyIG1ldGEgZGF0YQorICovCisjZGVmaW5lIE1FR0FTQVNfVkVSU0lPTgkJCQkiMDAuMDAuMDIuMDAtcmM0IgorI2RlZmluZSBNRUdBU0FTX1JFTERBVEUJCQkJIlNlcCAxNiwgMjAwNSIKKyNkZWZpbmUgTUVHQVNBU19FWFRfVkVSU0lPTgkJCSJGcmkgU2VwIDE2IDEyOjM3OjA4IEVEVCAyMDA1IgorCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogTWVnYVJBSUQgU0FTIE1GSSBmaXJtd2FyZSBkZWZpbml0aW9ucworICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKy8qCisgKiBNRkkgc3RhbmRzIGZvciAgTWVnYVJBSUQgU0FTIEZXIEludGVyZmFjZS4gVGhpcyBpcyBqdXN0IGEgbW9uaWtlciBmb3IgCisgKiBwcm90b2NvbCBiZXR3ZWVuIHRoZSBzb2Z0d2FyZSBhbmQgZmlybXdhcmUuIENvbW1hbmRzIGFyZSBpc3N1ZWQgdXNpbmcKKyAqICJtZXNzYWdlIGZyYW1lcyIKKyAqLworCisvKioKKyAqIEZXIHBvc3RzIGl0cyBzdGF0ZSBpbiB1cHBlciA0IGJpdHMgb2Ygb3V0Ym91bmRfbXNnXzAgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBNRklfU1RBVEVfTUFTSwkJCQkweEYwMDAwMDAwCisjZGVmaW5lIE1GSV9TVEFURV9VTkRFRklORUQJCQkweDAwMDAwMDAwCisjZGVmaW5lIE1GSV9TVEFURV9CQl9JTklUCQkJMHgxMDAwMDAwMAorI2RlZmluZSBNRklfU1RBVEVfRldfSU5JVAkJCTB4NDAwMDAwMDAKKyNkZWZpbmUgTUZJX1NUQVRFX1dBSVRfSEFORFNIQUtFCQkweDYwMDAwMDAwCisjZGVmaW5lIE1GSV9TVEFURV9GV19JTklUXzIJCQkweDcwMDAwMDAwCisjZGVmaW5lIE1GSV9TVEFURV9ERVZJQ0VfU0NBTgkJCTB4ODAwMDAwMDAKKyNkZWZpbmUgTUZJX1NUQVRFX0ZMVVNIX0NBQ0hFCQkJMHhBMDAwMDAwMAorI2RlZmluZSBNRklfU1RBVEVfUkVBRFkJCQkJMHhCMDAwMDAwMAorI2RlZmluZSBNRklfU1RBVEVfT1BFUkFUSU9OQUwJCQkweEMwMDAwMDAwCisjZGVmaW5lIE1GSV9TVEFURV9GQVVMVAkJCQkweEYwMDAwMDAwCisKKyNkZWZpbmUgTUVHQU1GSV9GUkFNRV9TSVpFCQkJNjQKKworLyoqCisgKiBEdXJpbmcgRlcgaW5pdCwgY2xlYXIgcGVuZGluZyBjbWRzICYgcmVzZXQgc3RhdGUgdXNpbmcgaW5ib3VuZF9tc2dfMAorICoKKyAqIEFCT1JUCTogQWJvcnQgYWxsIHBlbmRpbmcgY21kcworICogUkVBRFkJOiBNb3ZlIGZyb20gT1BFUkFUSU9OQUwgdG8gUkVBRFkgc3RhdGU7IGRpc2NhcmQgcXVldWUgaW5mbworICogTUZJTU9ERQk6IERpc2NhcmQgKHBvc3NpYmxlKSBsb3cgTUZBIHBvc3RlZCBpbiA2NC1iaXQgbW9kZSAoPz8pCisgKiBDTFJfSEFORFNIQUtFOiBGVyBpcyB3YWl0aW5nIGZvciBIQU5EU0hBS0UgZnJvbSBCSU9TIG9yIERyaXZlcgorICovCisjZGVmaW5lIE1GSV9JTklUX0FCT1JUCQkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgTUZJX0lOSVRfUkVBRFkJCQkJMHgwMDAwMDAwMgorI2RlZmluZSBNRklfSU5JVF9NRklNT0RFCQkJMHgwMDAwMDAwNAorI2RlZmluZSBNRklfSU5JVF9DTEVBUl9IQU5EU0hBS0UJCTB4MDAwMDAwMDgKKyNkZWZpbmUgTUZJX1JFU0VUX0ZMQUdTCQkJCU1GSV9JTklUX1JFQURZfE1GSV9JTklUX01GSU1PREUKKworLyoqCisgKiBNRkkgZnJhbWUgZmxhZ3MKKyAqLworI2RlZmluZSBNRklfRlJBTUVfUE9TVF9JTl9SRVBMWV9RVUVVRQkJMHgwMDAwCisjZGVmaW5lIE1GSV9GUkFNRV9ET05UX1BPU1RfSU5fUkVQTFlfUVVFVUUJMHgwMDAxCisjZGVmaW5lIE1GSV9GUkFNRV9TR0wzMgkJCQkweDAwMDAKKyNkZWZpbmUgTUZJX0ZSQU1FX1NHTDY0CQkJCTB4MDAwMgorI2RlZmluZSBNRklfRlJBTUVfU0VOU0UzMgkJCTB4MDAwMAorI2RlZmluZSBNRklfRlJBTUVfU0VOU0U2NAkJCTB4MDAwNAorI2RlZmluZSBNRklfRlJBTUVfRElSX05PTkUJCQkweDAwMDAKKyNkZWZpbmUgTUZJX0ZSQU1FX0RJUl9XUklURQkJCTB4MDAwOAorI2RlZmluZSBNRklfRlJBTUVfRElSX1JFQUQJCQkweDAwMTAKKyNkZWZpbmUgTUZJX0ZSQU1FX0RJUl9CT1RICQkJMHgwMDE4CisKKy8qKgorICogRGVmaW5pdGlvbiBmb3IgY21kX3N0YXR1cworICovCisjZGVmaW5lIE1GSV9DTURfU1RBVFVTX1BPTExfTU9ERQkJMHhGRgorCisvKioKKyAqIE1GSSBjb21tYW5kIG9wY29kZXMKKyAqLworI2RlZmluZSBNRklfQ01EX0lOSVQJCQkJMHgwMAorI2RlZmluZSBNRklfQ01EX0xEX1JFQUQJCQkJMHgwMQorI2RlZmluZSBNRklfQ01EX0xEX1dSSVRFCQkJMHgwMgorI2RlZmluZSBNRklfQ01EX0xEX1NDU0lfSU8JCQkweDAzCisjZGVmaW5lIE1GSV9DTURfUERfU0NTSV9JTwkJCTB4MDQKKyNkZWZpbmUgTUZJX0NNRF9EQ01ECQkJCTB4MDUKKyNkZWZpbmUgTUZJX0NNRF9BQk9SVAkJCQkweDA2CisjZGVmaW5lIE1GSV9DTURfU01QCQkJCTB4MDcKKyNkZWZpbmUgTUZJX0NNRF9TVFAJCQkJMHgwOAorCisjZGVmaW5lIE1SX0RDTURfQ1RSTF9HRVRfSU5GTwkJCTB4MDEwMTAwMDAKKworI2RlZmluZSBNUl9EQ01EX0NUUkxfQ0FDSEVfRkxVU0gJCTB4MDExMDEwMDAKKyNkZWZpbmUgTVJfRkxVU0hfQ1RSTF9DQUNIRQkJCTB4MDEKKyNkZWZpbmUgTVJfRkxVU0hfRElTS19DQUNIRQkJCTB4MDIKKworI2RlZmluZSBNUl9EQ01EX0NUUkxfU0hVVERPV04JCQkweDAxMDUwMDAwCisjZGVmaW5lIE1SX0VOQUJMRV9EUklWRV9TUElORE9XTgkJMHgwMQorCisjZGVmaW5lIE1SX0RDTURfQ1RSTF9FVkVOVF9HRVRfSU5GTwkJMHgwMTA0MDEwMAorI2RlZmluZSBNUl9EQ01EX0NUUkxfRVZFTlRfR0VUCQkJMHgwMTA0MDMwMAorI2RlZmluZSBNUl9EQ01EX0NUUkxfRVZFTlRfV0FJVAkJCTB4MDEwNDA1MDAKKyNkZWZpbmUgTVJfRENNRF9MRF9HRVRfUFJPUEVSVElFUwkJMHgwMzAzMDAwMAorCisjZGVmaW5lIE1SX0RDTURfQ0xVU1RFUgkJCQkweDA4MDAwMDAwCisjZGVmaW5lIE1SX0RDTURfQ0xVU1RFUl9SRVNFVF9BTEwJCTB4MDgwMTAxMDAKKyNkZWZpbmUgTVJfRENNRF9DTFVTVEVSX1JFU0VUX0xECQkweDA4MDEwMjAwCisKKy8qKgorICogTUZJIGNvbW1hbmQgY29tcGxldGlvbiBjb2RlcworICovCitlbnVtIE1GSV9TVEFUIHsKKwlNRklfU1RBVF9PSyA9IDB4MDAsCisJTUZJX1NUQVRfSU5WQUxJRF9DTUQgPSAweDAxLAorCU1GSV9TVEFUX0lOVkFMSURfRENNRCA9IDB4MDIsCisJTUZJX1NUQVRfSU5WQUxJRF9QQVJBTUVURVIgPSAweDAzLAorCU1GSV9TVEFUX0lOVkFMSURfU0VRVUVOQ0VfTlVNQkVSID0gMHgwNCwKKwlNRklfU1RBVF9BQk9SVF9OT1RfUE9TU0lCTEUgPSAweDA1LAorCU1GSV9TVEFUX0FQUF9IT1NUX0NPREVfTk9UX0ZPVU5EID0gMHgwNiwKKwlNRklfU1RBVF9BUFBfSU5fVVNFID0gMHgwNywKKwlNRklfU1RBVF9BUFBfTk9UX0lOSVRJQUxJWkVEID0gMHgwOCwKKwlNRklfU1RBVF9BUlJBWV9JTkRFWF9JTlZBTElEID0gMHgwOSwKKwlNRklfU1RBVF9BUlJBWV9ST1dfTk9UX0VNUFRZID0gMHgwYSwKKwlNRklfU1RBVF9DT05GSUdfUkVTT1VSQ0VfQ09ORkxJQ1QgPSAweDBiLAorCU1GSV9TVEFUX0RFVklDRV9OT1RfRk9VTkQgPSAweDBjLAorCU1GSV9TVEFUX0RSSVZFX1RPT19TTUFMTCA9IDB4MGQsCisJTUZJX1NUQVRfRkxBU0hfQUxMT0NfRkFJTCA9IDB4MGUsCisJTUZJX1NUQVRfRkxBU0hfQlVTWSA9IDB4MGYsCisJTUZJX1NUQVRfRkxBU0hfRVJST1IgPSAweDEwLAorCU1GSV9TVEFUX0ZMQVNIX0lNQUdFX0JBRCA9IDB4MTEsCisJTUZJX1NUQVRfRkxBU0hfSU1BR0VfSU5DT01QTEVURSA9IDB4MTIsCisJTUZJX1NUQVRfRkxBU0hfTk9UX09QRU4gPSAweDEzLAorCU1GSV9TVEFUX0ZMQVNIX05PVF9TVEFSVEVEID0gMHgxNCwKKwlNRklfU1RBVF9GTFVTSF9GQUlMRUQgPSAweDE1LAorCU1GSV9TVEFUX0hPU1RfQ09ERV9OT1RfRk9VTlQgPSAweDE2LAorCU1GSV9TVEFUX0xEX0NDX0lOX1BST0dSRVNTID0gMHgxNywKKwlNRklfU1RBVF9MRF9JTklUX0lOX1BST0dSRVNTID0gMHgxOCwKKwlNRklfU1RBVF9MRF9MQkFfT1VUX09GX1JBTkdFID0gMHgxOSwKKwlNRklfU1RBVF9MRF9NQVhfQ09ORklHVVJFRCA9IDB4MWEsCisJTUZJX1NUQVRfTERfTk9UX09QVElNQUwgPSAweDFiLAorCU1GSV9TVEFUX0xEX1JCTERfSU5fUFJPR1JFU1MgPSAweDFjLAorCU1GSV9TVEFUX0xEX1JFQ09OX0lOX1BST0dSRVNTID0gMHgxZCwKKwlNRklfU1RBVF9MRF9XUk9OR19SQUlEX0xFVkVMID0gMHgxZSwKKwlNRklfU1RBVF9NQVhfU1BBUkVTX0VYQ0VFREVEID0gMHgxZiwKKwlNRklfU1RBVF9NRU1PUllfTk9UX0FWQUlMQUJMRSA9IDB4MjAsCisJTUZJX1NUQVRfTUZDX0hXX0VSUk9SID0gMHgyMSwKKwlNRklfU1RBVF9OT19IV19QUkVTRU5UID0gMHgyMiwKKwlNRklfU1RBVF9OT1RfRk9VTkQgPSAweDIzLAorCU1GSV9TVEFUX05PVF9JTl9FTkNMID0gMHgyNCwKKwlNRklfU1RBVF9QRF9DTEVBUl9JTl9QUk9HUkVTUyA9IDB4MjUsCisJTUZJX1NUQVRfUERfVFlQRV9XUk9ORyA9IDB4MjYsCisJTUZJX1NUQVRfUFJfRElTQUJMRUQgPSAweDI3LAorCU1GSV9TVEFUX1JPV19JTkRFWF9JTlZBTElEID0gMHgyOCwKKwlNRklfU1RBVF9TQVNfQ09ORklHX0lOVkFMSURfQUNUSU9OID0gMHgyOSwKKwlNRklfU1RBVF9TQVNfQ09ORklHX0lOVkFMSURfREFUQSA9IDB4MmEsCisJTUZJX1NUQVRfU0FTX0NPTkZJR19JTlZBTElEX1BBR0UgPSAweDJiLAorCU1GSV9TVEFUX1NBU19DT05GSUdfSU5WQUxJRF9UWVBFID0gMHgyYywKKwlNRklfU1RBVF9TQ1NJX0RPTkVfV0lUSF9FUlJPUiA9IDB4MmQsCisJTUZJX1NUQVRfU0NTSV9JT19GQUlMRUQgPSAweDJlLAorCU1GSV9TVEFUX1NDU0lfUkVTRVJWQVRJT05fQ09ORkxJQ1QgPSAweDJmLAorCU1GSV9TVEFUX1NIVVRET1dOX0ZBSUxFRCA9IDB4MzAsCisJTUZJX1NUQVRfVElNRV9OT1RfU0VUID0gMHgzMSwKKwlNRklfU1RBVF9XUk9OR19TVEFURSA9IDB4MzIsCisJTUZJX1NUQVRfTERfT0ZGTElORSA9IDB4MzMsCisJTUZJX1NUQVRfUEVFUl9OT1RJRklDQVRJT05fUkVKRUNURUQgPSAweDM0LAorCU1GSV9TVEFUX1BFRVJfTk9USUZJQ0FUSU9OX0ZBSUxFRCA9IDB4MzUsCisJTUZJX1NUQVRfUkVTRVJWQVRJT05fSU5fUFJPR1JFU1MgPSAweDM2LAorCU1GSV9TVEFUX0kyQ19FUlJPUlNfREVURUNURUQgPSAweDM3LAorCU1GSV9TVEFUX1BDSV9FUlJPUlNfREVURUNURUQgPSAweDM4LAorCisJTUZJX1NUQVRfSU5WQUxJRF9TVEFUVVMgPSAweEZGCit9OworCisvKgorICogTnVtYmVyIG9mIG1haWxib3ggYnl0ZXMgaW4gRENNRCBtZXNzYWdlIGZyYW1lCisgKi8KKyNkZWZpbmUgTUZJX01CT1hfU0laRQkJCQkxMgorCitlbnVtIE1SX0VWVF9DTEFTUyB7CisKKwlNUl9FVlRfQ0xBU1NfREVCVUcgPSAtMiwKKwlNUl9FVlRfQ0xBU1NfUFJPR1JFU1MgPSAtMSwKKwlNUl9FVlRfQ0xBU1NfSU5GTyA9IDAsCisJTVJfRVZUX0NMQVNTX1dBUk5JTkcgPSAxLAorCU1SX0VWVF9DTEFTU19DUklUSUNBTCA9IDIsCisJTVJfRVZUX0NMQVNTX0ZBVEFMID0gMywKKwlNUl9FVlRfQ0xBU1NfREVBRCA9IDQsCisKK307CisKK2VudW0gTVJfRVZUX0xPQ0FMRSB7CisKKwlNUl9FVlRfTE9DQUxFX0xEID0gMHgwMDAxLAorCU1SX0VWVF9MT0NBTEVfUEQgPSAweDAwMDIsCisJTVJfRVZUX0xPQ0FMRV9FTkNMID0gMHgwMDA0LAorCU1SX0VWVF9MT0NBTEVfQkJVID0gMHgwMDA4LAorCU1SX0VWVF9MT0NBTEVfU0FTID0gMHgwMDEwLAorCU1SX0VWVF9MT0NBTEVfQ1RSTCA9IDB4MDAyMCwKKwlNUl9FVlRfTE9DQUxFX0NPTkZJRyA9IDB4MDA0MCwKKwlNUl9FVlRfTE9DQUxFX0NMVVNURVIgPSAweDAwODAsCisJTVJfRVZUX0xPQ0FMRV9BTEwgPSAweGZmZmYsCisKK307CisKK2VudW0gTVJfRVZUX0FSR1MgeworCisJTVJfRVZUX0FSR1NfTk9ORSwKKwlNUl9FVlRfQVJHU19DREJfU0VOU0UsCisJTVJfRVZUX0FSR1NfTEQsCisJTVJfRVZUX0FSR1NfTERfQ09VTlQsCisJTVJfRVZUX0FSR1NfTERfTEJBLAorCU1SX0VWVF9BUkdTX0xEX09XTkVSLAorCU1SX0VWVF9BUkdTX0xEX0xCQV9QRF9MQkEsCisJTVJfRVZUX0FSR1NfTERfUFJPRywKKwlNUl9FVlRfQVJHU19MRF9TVEFURSwKKwlNUl9FVlRfQVJHU19MRF9TVFJJUCwKKwlNUl9FVlRfQVJHU19QRCwKKwlNUl9FVlRfQVJHU19QRF9FUlIsCisJTVJfRVZUX0FSR1NfUERfTEJBLAorCU1SX0VWVF9BUkdTX1BEX0xCQV9MRCwKKwlNUl9FVlRfQVJHU19QRF9QUk9HLAorCU1SX0VWVF9BUkdTX1BEX1NUQVRFLAorCU1SX0VWVF9BUkdTX1BDSSwKKwlNUl9FVlRfQVJHU19SQVRFLAorCU1SX0VWVF9BUkdTX1NUUiwKKwlNUl9FVlRfQVJHU19USU1FLAorCU1SX0VWVF9BUkdTX0VDQywKKworfTsKKworLyoKKyAqIFNBUyBjb250cm9sbGVyIHByb3BlcnRpZXMKKyAqLworc3RydWN0IG1lZ2FzYXNfY3RybF9wcm9wIHsKKworCXUxNiBzZXFfbnVtOworCXUxNiBwcmVkX2ZhaWxfcG9sbF9pbnRlcnZhbDsKKwl1MTYgaW50cl90aHJvdHRsZV9jb3VudDsKKwl1MTYgaW50cl90aHJvdHRsZV90aW1lb3V0czsKKwl1OCByZWJ1aWxkX3JhdGU7CisJdTggcGF0cm9sX3JlYWRfcmF0ZTsKKwl1OCBiZ2lfcmF0ZTsKKwl1OCBjY19yYXRlOworCXU4IHJlY29uX3JhdGU7CisJdTggY2FjaGVfZmx1c2hfaW50ZXJ2YWw7CisJdTggc3BpbnVwX2Rydl9jb3VudDsKKwl1OCBzcGludXBfZGVsYXk7CisJdTggY2x1c3Rlcl9lbmFibGU7CisJdTggY29lcmNpb25fbW9kZTsKKwl1OCBhbGFybV9lbmFibGU7CisJdTggZGlzYWJsZV9hdXRvX3JlYnVpbGQ7CisJdTggZGlzYWJsZV9iYXR0ZXJ5X3dhcm47CisJdTggZWNjX2J1Y2tldF9zaXplOworCXUxNiBlY2NfYnVja2V0X2xlYWtfcmF0ZTsKKwl1OCByZXN0b3JlX2hvdHNwYXJlX29uX2luc2VydGlvbjsKKwl1OCBleHBvc2VfZW5jbF9kZXZpY2VzOworCXU4IHJlc2VydmVkWzM4XTsKKworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBTQVMgY29udHJvbGxlciBpbmZvcm1hdGlvbgorICovCitzdHJ1Y3QgbWVnYXNhc19jdHJsX2luZm8geworCisJLyoKKwkgKiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uCisJICovCisJc3RydWN0IHsKKworCQl1MTYgdmVuZG9yX2lkOworCQl1MTYgZGV2aWNlX2lkOworCQl1MTYgc3ViX3ZlbmRvcl9pZDsKKwkJdTE2IHN1Yl9kZXZpY2VfaWQ7CisJCXU4IHJlc2VydmVkWzI0XTsKKworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHBjaTsKKworCS8qCisJICogSG9zdCBpbnRlcmZhY2UgaW5mb3JtYXRpb24KKwkgKi8KKwlzdHJ1Y3QgeworCisJCXU4IFBDSVg6MTsKKwkJdTggUENJRToxOworCQl1OCBpU0NTSToxOworCQl1OCBTQVNfM0c6MTsKKwkJdTggcmVzZXJ2ZWRfMDo0OworCQl1OCByZXNlcnZlZF8xWzZdOworCQl1OCBwb3J0X2NvdW50OworCQl1NjQgcG9ydF9hZGRyWzhdOworCisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaG9zdF9pbnRlcmZhY2U7CisKKwkvKgorCSAqIERldmljZSAoYmFja2VuZCkgaW50ZXJmYWNlIGluZm9ybWF0aW9uCisJICovCisJc3RydWN0IHsKKworCQl1OCBTUEk6MTsKKwkJdTggU0FTXzNHOjE7CisJCXU4IFNBVEFfMV81RzoxOworCQl1OCBTQVRBXzNHOjE7CisJCXU4IHJlc2VydmVkXzA6NDsKKwkJdTggcmVzZXJ2ZWRfMVs2XTsKKwkJdTggcG9ydF9jb3VudDsKKwkJdTY0IHBvcnRfYWRkcls4XTsKKworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGRldmljZV9pbnRlcmZhY2U7CisKKwkvKgorCSAqIExpc3Qgb2YgY29tcG9uZW50cyByZXNpZGluZyBpbiBmbGFzaC4gQWxsIHN0ciBhcmUgbnVsbCB0ZXJtaW5hdGVkCisJICovCisJdTMyIGltYWdlX2NoZWNrX3dvcmQ7CisJdTMyIGltYWdlX2NvbXBvbmVudF9jb3VudDsKKworCXN0cnVjdCB7CisKKwkJY2hhciBuYW1lWzhdOworCQljaGFyIHZlcnNpb25bMzJdOworCQljaGFyIGJ1aWxkX2RhdGVbMTZdOworCQljaGFyIGJ1aWx0X3RpbWVbMTZdOworCisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaW1hZ2VfY29tcG9uZW50WzhdOworCisJLyoKKwkgKiBMaXN0IG9mIGZsYXNoIGNvbXBvbmVudHMgdGhhdCBoYXZlIGJlZW4gZmxhc2hlZCBvbiB0aGUgY2FyZCwgYnV0CisJICogYXJlIG5vdCBpbiB1c2UsIHBlbmRpbmcgcmVzZXQgb2YgdGhlIGFkYXB0ZXIuIFRoaXMgbGlzdCB3aWxsIGJlCisJICogZW1wdHkgaWYgYSBmbGFzaCBvcGVyYXRpb24gaGFzIG5vdCBvY2N1cnJlZC4gQWxsIHN0aW5ncyBhcmUgbnVsbAorCSAqIHRlcm1pbmF0ZWQKKwkgKi8KKwl1MzIgcGVuZGluZ19pbWFnZV9jb21wb25lbnRfY291bnQ7CisKKwlzdHJ1Y3QgeworCisJCWNoYXIgbmFtZVs4XTsKKwkJY2hhciB2ZXJzaW9uWzMyXTsKKwkJY2hhciBidWlsZF9kYXRlWzE2XTsKKwkJY2hhciBidWlsZF90aW1lWzE2XTsKKworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHBlbmRpbmdfaW1hZ2VfY29tcG9uZW50WzhdOworCisJdTggbWF4X2FybXM7CisJdTggbWF4X3NwYW5zOworCXU4IG1heF9hcnJheXM7CisJdTggbWF4X2xkczsKKworCWNoYXIgcHJvZHVjdF9uYW1lWzgwXTsKKwljaGFyIHNlcmlhbF9ub1szMl07CisKKwkvKgorCSAqIE90aGVyIHBoeXNpY2FsL2NvbnRyb2xsZXIvb3BlcmF0aW9uIGluZm9ybWF0aW9uLiBJbmRpY2F0ZXMgdGhlCisJICogcHJlc2VuY2Ugb2YgdGhlIGhhcmR3YXJlCisJICovCisJc3RydWN0IHsKKworCQl1MzIgYmJ1OjE7CisJCXUzMiBhbGFybToxOworCQl1MzIgbnZyYW06MTsKKwkJdTMyIHVhcnQ6MTsKKwkJdTMyIHJlc2VydmVkOjI4OworCisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaHdfcHJlc2VudDsKKworCXUzMiBjdXJyZW50X2Z3X3RpbWU7CisKKwkvKgorCSAqIE1heGltdW0gZGF0YSB0cmFuc2ZlciBzaXplcworCSAqLworCXUxNiBtYXhfY29uY3VycmVudF9jbWRzOworCXUxNiBtYXhfc2dlX2NvdW50OworCXUzMiBtYXhfcmVxdWVzdF9zaXplOworCisJLyoKKwkgKiBMb2dpY2FsIGFuZCBwaHlzaWNhbCBkZXZpY2UgY291bnRzCisJICovCisJdTE2IGxkX3ByZXNlbnRfY291bnQ7CisJdTE2IGxkX2RlZ3JhZGVkX2NvdW50OworCXUxNiBsZF9vZmZsaW5lX2NvdW50OworCisJdTE2IHBkX3ByZXNlbnRfY291bnQ7CisJdTE2IHBkX2Rpc2tfcHJlc2VudF9jb3VudDsKKwl1MTYgcGRfZGlza19wcmVkX2ZhaWx1cmVfY291bnQ7CisJdTE2IHBkX2Rpc2tfZmFpbGVkX2NvdW50OworCisJLyoKKwkgKiBNZW1vcnkgc2l6ZSBpbmZvcm1hdGlvbgorCSAqLworCXUxNiBudnJhbV9zaXplOworCXUxNiBtZW1vcnlfc2l6ZTsKKwl1MTYgZmxhc2hfc2l6ZTsKKworCS8qCisJICogRXJyb3IgY291bnRlcnMKKwkgKi8KKwl1MTYgbWVtX2NvcnJlY3RhYmxlX2Vycm9yX2NvdW50OworCXUxNiBtZW1fdW5jb3JyZWN0YWJsZV9lcnJvcl9jb3VudDsKKworCS8qCisJICogQ2x1c3RlciBpbmZvcm1hdGlvbgorCSAqLworCXU4IGNsdXN0ZXJfcGVybWl0dGVkOworCXU4IGNsdXN0ZXJfYWN0aXZlOworCisJLyoKKwkgKiBBZGRpdGlvbmFsIG1heCBkYXRhIHRyYW5zZmVyIHNpemVzCisJICovCisJdTE2IG1heF9zdHJpcHNfcGVyX2lvOworCisJLyoKKwkgKiBDb250cm9sbGVyIGNhcGFiaWxpdGllcyBzdHJ1Y3R1cmVzCisJICovCisJc3RydWN0IHsKKworCQl1MzIgcmFpZF9sZXZlbF8wOjE7CisJCXUzMiByYWlkX2xldmVsXzE6MTsKKwkJdTMyIHJhaWRfbGV2ZWxfNToxOworCQl1MzIgcmFpZF9sZXZlbF8xRToxOworCQl1MzIgcmFpZF9sZXZlbF82OjE7CisJCXUzMiByZXNlcnZlZDoyNzsKKworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHJhaWRfbGV2ZWxzOworCisJc3RydWN0IHsKKworCQl1MzIgcmJsZF9yYXRlOjE7CisJCXUzMiBjY19yYXRlOjE7CisJCXUzMiBiZ2lfcmF0ZToxOworCQl1MzIgcmVjb25fcmF0ZToxOworCQl1MzIgcGF0cm9sX3JhdGU6MTsKKwkJdTMyIGFsYXJtX2NvbnRyb2w6MTsKKwkJdTMyIGNsdXN0ZXJfc3VwcG9ydGVkOjE7CisJCXUzMiBiYnU6MTsKKwkJdTMyIHNwYW5uaW5nX2FsbG93ZWQ6MTsKKwkJdTMyIGRlZGljYXRlZF9ob3RzcGFyZXM6MTsKKwkJdTMyIHJldmVydGlibGVfaG90c3BhcmVzOjE7CisJCXUzMiBmb3JlaWduX2NvbmZpZ19pbXBvcnQ6MTsKKwkJdTMyIHNlbGZfZGlhZ25vc3RpYzoxOworCQl1MzIgbWl4ZWRfcmVkdW5kYW5jeV9hcnI6MTsKKwkJdTMyIGdsb2JhbF9ob3Rfc3BhcmVzOjE7CisJCXUzMiByZXNlcnZlZDoxNzsKKworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGFkYXB0ZXJfb3BlcmF0aW9uczsKKworCXN0cnVjdCB7CisKKwkJdTMyIHJlYWRfcG9saWN5OjE7CisJCXUzMiB3cml0ZV9wb2xpY3k6MTsKKwkJdTMyIGlvX3BvbGljeToxOworCQl1MzIgYWNjZXNzX3BvbGljeToxOworCQl1MzIgZGlza19jYWNoZV9wb2xpY3k6MTsKKwkJdTMyIHJlc2VydmVkOjI3OworCisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgbGRfb3BlcmF0aW9uczsKKworCXN0cnVjdCB7CisKKwkJdTggbWluOworCQl1OCBtYXg7CisJCXU4IHJlc2VydmVkWzJdOworCisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgc3RyaXBlX3N6X29wczsKKworCXN0cnVjdCB7CisKKwkJdTMyIGZvcmNlX29ubGluZToxOworCQl1MzIgZm9yY2Vfb2ZmbGluZToxOworCQl1MzIgZm9yY2VfcmVidWlsZDoxOworCQl1MzIgcmVzZXJ2ZWQ6Mjk7CisKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwZF9vcGVyYXRpb25zOworCisJc3RydWN0IHsKKworCQl1MzIgY3RybF9zdXBwb3J0c19zYXM6MTsKKwkJdTMyIGN0cmxfc3VwcG9ydHNfc2F0YToxOworCQl1MzIgYWxsb3dfbWl4X2luX2VuY2w6MTsKKwkJdTMyIGFsbG93X21peF9pbl9sZDoxOworCQl1MzIgYWxsb3dfc2F0YV9pbl9jbHVzdGVyOjE7CisJCXUzMiByZXNlcnZlZDoyNzsKKworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHBkX21peF9zdXBwb3J0OworCisJLyoKKwkgKiBEZWZpbmUgRUNDIHNpbmdsZS1iaXQtZXJyb3IgYnVja2V0IGluZm9ybWF0aW9uCisJICovCisJdTggZWNjX2J1Y2tldF9jb3VudDsKKwl1OCByZXNlcnZlZF8yWzExXTsKKworCS8qCisJICogSW5jbHVkZSB0aGUgY29udHJvbGxlciBwcm9wZXJ0aWVzIChjaGFuZ2VhYmxlIGl0ZW1zKQorCSAqLworCXN0cnVjdCBtZWdhc2FzX2N0cmxfcHJvcCBwcm9wZXJ0aWVzOworCisJLyoKKwkgKiBEZWZpbmUgRlcgcGtnIHZlcnNpb24gKHNldCBpbiBlbnZ0IHYnYmxlcyBvbiBPRU0gYmFzaXMpCisJICovCisJY2hhciBwYWNrYWdlX3ZlcnNpb25bMHg2MF07CisKKwl1OCBwYWRbMHg4MDAgLSAweDZhMF07CisKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogTWVnYVJBSUQgU0FTIGRyaXZlciBkZWZpbml0aW9ucworICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisjZGVmaW5lIE1FR0FTQVNfTUFYX1BEX0NIQU5ORUxTCQkJMgorI2RlZmluZSBNRUdBU0FTX01BWF9MRF9DSEFOTkVMUwkJCTIKKyNkZWZpbmUgTUVHQVNBU19NQVhfQ0hBTk5FTFMJCQkoTUVHQVNBU19NQVhfUERfQ0hBTk5FTFMgKyBcCisJCQkJCQlNRUdBU0FTX01BWF9MRF9DSEFOTkVMUykKKyNkZWZpbmUgTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMCQkxMjgKKyNkZWZpbmUgTUVHQVNBU19ERUZBVUxUX0lOSVRfSUQJCQktMQorI2RlZmluZSBNRUdBU0FTX01BWF9MVU4JCQkJOAorI2RlZmluZSBNRUdBU0FTX01BWF9MRAkJCQk2NAorCisvKgorICogV2hlbiBTQ1NJIG1pZC1sYXllciBjYWxscyBkcml2ZXIncyByZXNldCByb3V0aW5lLCBkcml2ZXIgd2FpdHMgZm9yCisgKiBNRUdBU0FTX1JFU0VUX1dBSVRfVElNRSBzZWNvbmRzIGZvciBhbGwgb3V0c3RhbmRpbmcgSU8gdG8gY29tcGxldGUuIE5vdGUKKyAqIHRoYXQgdGhlIGRyaXZlciBjYW5ub3QgX2FjdHVhbGx5XyBhYm9ydCBvciByZXNldCBwZW5kaW5nIGNvbW1hbmRzLiBXaGlsZQorICogaXQgaXMgd2FpdGluZyBmb3IgdGhlIGNvbW1hbmRzIHRvIGNvbXBsZXRlLCBpdCBwcmludHMgYSBkaWFnbm9zdGljIG1lc3NhZ2UKKyAqIGV2ZXJ5IE1FR0FTQVNfUkVTRVRfTk9USUNFX0lOVEVSVkFMIHNlY29uZHMKKyAqLworI2RlZmluZSBNRUdBU0FTX1JFU0VUX1dBSVRfVElNRQkJCTE4MAorI2RlZmluZQlNRUdBU0FTX1JFU0VUX05PVElDRV9JTlRFUlZBTAkJNQorCisjZGVmaW5lIE1FR0FTQVNfSU9DVExfQ01ECQkJMAorCisvKgorICogRlcgcmVwb3J0cyB0aGUgbWF4aW11bSBvZiBudW1iZXIgb2YgY29tbWFuZHMgdGhhdCBpdCBjYW4gYWNjZXB0IChtYXhpbXVtCisgKiBjb21tYW5kcyB0aGF0IGNhbiBiZSBvdXRzdGFuZGluZykgYXQgYW55IHRpbWUuIFRoZSBkcml2ZXIgbXVzdCByZXBvcnQgYQorICogbG93ZXIgbnVtYmVyIHRvIHRoZSBtaWQgbGF5ZXIgYmVjYXVzZSBpdCBjYW4gaXNzdWUgYSBmZXcgaW50ZXJuYWwgY29tbWFuZHMKKyAqIGl0c2VsZiAoRS5nLCBBRU4sIGFib3J0IGNtZCwgSU9DVExzIGV0YykuIFRoZSBudW1iZXIgb2YgY29tbWFuZHMgaXQgbmVlZHMKKyAqIGlzIHNob3duIGJlbG93CisgKi8KKyNkZWZpbmUgTUVHQVNBU19JTlRfQ01EUwkJCTMyCisKKy8qCisgKiBGVyBjYW4gYWNjZXB0IGJvdGggMzIgYW5kIDY0IGJpdCBTR0xzLiBXZSB3YW50IHRvIGFsbG9jYXRlIDMyLzY0IGJpdAorICogU0dMcyBiYXNlZCBvbiB0aGUgc2l6ZSBvZiBkbWFfYWRkcl90CisgKi8KKyNkZWZpbmUgSVNfRE1BNjQJCQkJKHNpemVvZihkbWFfYWRkcl90KSA9PSA4KQorCisjZGVmaW5lIE1GSV9PQl9JTlRSX1NUQVRVU19NQVNLCQkJMHgwMDAwMDAwMgorI2RlZmluZSBNRklfUE9MTF9USU1FT1VUX1NFQ1MJCQkxMAorCitzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgeworCisJdTMyIHJlc2VydmVkXzBbNF07CS8qMDAwMGggKi8KKworCXUzMiBpbmJvdW5kX21zZ18wOwkvKjAwMTBoICovCisJdTMyIGluYm91bmRfbXNnXzE7CS8qMDAxNGggKi8KKwl1MzIgb3V0Ym91bmRfbXNnXzA7CS8qMDAxOGggKi8KKwl1MzIgb3V0Ym91bmRfbXNnXzE7CS8qMDAxQ2ggKi8KKworCXUzMiBpbmJvdW5kX2Rvb3JiZWxsOwkvKjAwMjBoICovCisJdTMyIGluYm91bmRfaW50cl9zdGF0dXM7CS8qMDAyNGggKi8KKwl1MzIgaW5ib3VuZF9pbnRyX21hc2s7CS8qMDAyOGggKi8KKworCXUzMiBvdXRib3VuZF9kb29yYmVsbDsJLyowMDJDaCAqLworCXUzMiBvdXRib3VuZF9pbnRyX3N0YXR1czsJLyowMDMwaCAqLworCXUzMiBvdXRib3VuZF9pbnRyX21hc2s7CS8qMDAzNGggKi8KKworCXUzMiByZXNlcnZlZF8xWzJdOwkvKjAwMzhoICovCisKKwl1MzIgaW5ib3VuZF9xdWV1ZV9wb3J0OwkvKjAwNDBoICovCisJdTMyIG91dGJvdW5kX3F1ZXVlX3BvcnQ7CS8qMDA0NGggKi8KKworCXUzMiByZXNlcnZlZF8yOwkJLyowMDRDaCAqLworCisJdTMyIGluZGV4X3JlZ2lzdGVyc1sxMDA0XTsJLyowMDUwaCAqLworCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IG1lZ2FzYXNfc2dlMzIgeworCisJdTMyIHBoeXNfYWRkcjsKKwl1MzIgbGVuZ3RoOworCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IG1lZ2FzYXNfc2dlNjQgeworCisJdTY0IHBoeXNfYWRkcjsKKwl1MzIgbGVuZ3RoOworCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwordW5pb24gbWVnYXNhc19zZ2wgeworCisJc3RydWN0IG1lZ2FzYXNfc2dlMzIgc2dlMzJbMV07CisJc3RydWN0IG1lZ2FzYXNfc2dlNjQgc2dlNjRbMV07CisKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgbWVnYXNhc19oZWFkZXIgeworCisJdTggY21kOwkJCS8qMDBoICovCisJdTggc2Vuc2VfbGVuOwkJLyowMWggKi8KKwl1OCBjbWRfc3RhdHVzOwkJLyowMmggKi8KKwl1OCBzY3NpX3N0YXR1czsJCS8qMDNoICovCisKKwl1OCB0YXJnZXRfaWQ7CQkvKjA0aCAqLworCXU4IGx1bjsJCQkvKjA1aCAqLworCXU4IGNkYl9sZW47CQkvKjA2aCAqLworCXU4IHNnZV9jb3VudDsJCS8qMDdoICovCisKKwl1MzIgY29udGV4dDsJCS8qMDhoICovCisJdTMyIHBhZF8wOwkJLyowQ2ggKi8KKworCXUxNiBmbGFnczsJCS8qMTBoICovCisJdTE2IHRpbWVvdXQ7CQkvKjEyaCAqLworCXUzMiBkYXRhX3hmZXJsZW47CS8qMTRoICovCisKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCit1bmlvbiBtZWdhc2FzX3NnbF9mcmFtZSB7CisKKwlzdHJ1Y3QgbWVnYXNhc19zZ2UzMiBzZ2UzMls4XTsKKwlzdHJ1Y3QgbWVnYXNhc19zZ2U2NCBzZ2U2NFs1XTsKKworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBtZWdhc2FzX2luaXRfZnJhbWUgeworCisJdTggY21kOwkJCS8qMDBoICovCisJdTggcmVzZXJ2ZWRfMDsJCS8qMDFoICovCisJdTggY21kX3N0YXR1czsJCS8qMDJoICovCisKKwl1OCByZXNlcnZlZF8xOwkJLyowM2ggKi8KKwl1MzIgcmVzZXJ2ZWRfMjsJCS8qMDRoICovCisKKwl1MzIgY29udGV4dDsJCS8qMDhoICovCisJdTMyIHBhZF8wOwkJLyowQ2ggKi8KKworCXUxNiBmbGFnczsJCS8qMTBoICovCisJdTE2IHJlc2VydmVkXzM7CQkvKjEyaCAqLworCXUzMiBkYXRhX3hmZXJfbGVuOwkvKjE0aCAqLworCisJdTMyIHF1ZXVlX2luZm9fbmV3X3BoeXNfYWRkcl9sbzsJLyoxOGggKi8KKwl1MzIgcXVldWVfaW5mb19uZXdfcGh5c19hZGRyX2hpOwkvKjFDaCAqLworCXUzMiBxdWV1ZV9pbmZvX29sZF9waHlzX2FkZHJfbG87CS8qMjBoICovCisJdTMyIHF1ZXVlX2luZm9fb2xkX3BoeXNfYWRkcl9oaTsJLyoyNGggKi8KKworCXUzMiByZXNlcnZlZF80WzZdOwkvKjI4aCAqLworCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IG1lZ2FzYXNfaW5pdF9xdWV1ZV9pbmZvIHsKKworCXUzMiBpbml0X2ZsYWdzOwkJLyowMGggKi8KKwl1MzIgcmVwbHlfcXVldWVfZW50cmllczsJLyowNGggKi8KKworCXUzMiByZXBseV9xdWV1ZV9zdGFydF9waHlzX2FkZHJfbG87CS8qMDhoICovCisJdTMyIHJlcGx5X3F1ZXVlX3N0YXJ0X3BoeXNfYWRkcl9oaTsJLyowQ2ggKi8KKwl1MzIgcHJvZHVjZXJfaW5kZXhfcGh5c19hZGRyX2xvOwkvKjEwaCAqLworCXUzMiBwcm9kdWNlcl9pbmRleF9waHlzX2FkZHJfaGk7CS8qMTRoICovCisJdTMyIGNvbnN1bWVyX2luZGV4X3BoeXNfYWRkcl9sbzsJLyoxOGggKi8KKwl1MzIgY29uc3VtZXJfaW5kZXhfcGh5c19hZGRyX2hpOwkvKjFDaCAqLworCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IG1lZ2FzYXNfaW9fZnJhbWUgeworCisJdTggY21kOwkJCS8qMDBoICovCisJdTggc2Vuc2VfbGVuOwkJLyowMWggKi8KKwl1OCBjbWRfc3RhdHVzOwkJLyowMmggKi8KKwl1OCBzY3NpX3N0YXR1czsJCS8qMDNoICovCisKKwl1OCB0YXJnZXRfaWQ7CQkvKjA0aCAqLworCXU4IGFjY2Vzc19ieXRlOwkJLyowNWggKi8KKwl1OCByZXNlcnZlZF8wOwkJLyowNmggKi8KKwl1OCBzZ2VfY291bnQ7CQkvKjA3aCAqLworCisJdTMyIGNvbnRleHQ7CQkvKjA4aCAqLworCXUzMiBwYWRfMDsJCS8qMENoICovCisKKwl1MTYgZmxhZ3M7CQkvKjEwaCAqLworCXUxNiB0aW1lb3V0OwkJLyoxMmggKi8KKwl1MzIgbGJhX2NvdW50OwkJLyoxNGggKi8KKworCXUzMiBzZW5zZV9idWZfcGh5c19hZGRyX2xvOwkvKjE4aCAqLworCXUzMiBzZW5zZV9idWZfcGh5c19hZGRyX2hpOwkvKjFDaCAqLworCisJdTMyIHN0YXJ0X2xiYV9sbzsJLyoyMGggKi8KKwl1MzIgc3RhcnRfbGJhX2hpOwkvKjI0aCAqLworCisJdW5pb24gbWVnYXNhc19zZ2wgc2dsOwkvKjI4aCAqLworCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IG1lZ2FzYXNfcHRocnVfZnJhbWUgeworCisJdTggY21kOwkJCS8qMDBoICovCisJdTggc2Vuc2VfbGVuOwkJLyowMWggKi8KKwl1OCBjbWRfc3RhdHVzOwkJLyowMmggKi8KKwl1OCBzY3NpX3N0YXR1czsJCS8qMDNoICovCisKKwl1OCB0YXJnZXRfaWQ7CQkvKjA0aCAqLworCXU4IGx1bjsJCQkvKjA1aCAqLworCXU4IGNkYl9sZW47CQkvKjA2aCAqLworCXU4IHNnZV9jb3VudDsJCS8qMDdoICovCisKKwl1MzIgY29udGV4dDsJCS8qMDhoICovCisJdTMyIHBhZF8wOwkJLyowQ2ggKi8KKworCXUxNiBmbGFnczsJCS8qMTBoICovCisJdTE2IHRpbWVvdXQ7CQkvKjEyaCAqLworCXUzMiBkYXRhX3hmZXJfbGVuOwkvKjE0aCAqLworCisJdTMyIHNlbnNlX2J1Zl9waHlzX2FkZHJfbG87CS8qMThoICovCisJdTMyIHNlbnNlX2J1Zl9waHlzX2FkZHJfaGk7CS8qMUNoICovCisKKwl1OCBjZGJbMTZdOwkJLyoyMGggKi8KKwl1bmlvbiBtZWdhc2FzX3NnbCBzZ2w7CS8qMzBoICovCisKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgbWVnYXNhc19kY21kX2ZyYW1lIHsKKworCXU4IGNtZDsJCQkvKjAwaCAqLworCXU4IHJlc2VydmVkXzA7CQkvKjAxaCAqLworCXU4IGNtZF9zdGF0dXM7CQkvKjAyaCAqLworCXU4IHJlc2VydmVkXzFbNF07CS8qMDNoICovCisJdTggc2dlX2NvdW50OwkJLyowN2ggKi8KKworCXUzMiBjb250ZXh0OwkJLyowOGggKi8KKwl1MzIgcGFkXzA7CQkvKjBDaCAqLworCisJdTE2IGZsYWdzOwkJLyoxMGggKi8KKwl1MTYgdGltZW91dDsJCS8qMTJoICovCisKKwl1MzIgZGF0YV94ZmVyX2xlbjsJLyoxNGggKi8KKwl1MzIgb3Bjb2RlOwkJLyoxOGggKi8KKworCXVuaW9uIHsJCQkvKjFDaCAqLworCQl1OCBiWzEyXTsKKwkJdTE2IHNbNl07CisJCXUzMiB3WzNdOworCX0gbWJveDsKKworCXVuaW9uIG1lZ2FzYXNfc2dsIHNnbDsJLyoyOGggKi8KKworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBtZWdhc2FzX2Fib3J0X2ZyYW1lIHsKKworCXU4IGNtZDsJCQkvKjAwaCAqLworCXU4IHJlc2VydmVkXzA7CQkvKjAxaCAqLworCXU4IGNtZF9zdGF0dXM7CQkvKjAyaCAqLworCisJdTggcmVzZXJ2ZWRfMTsJCS8qMDNoICovCisJdTMyIHJlc2VydmVkXzI7CQkvKjA0aCAqLworCisJdTMyIGNvbnRleHQ7CQkvKjA4aCAqLworCXUzMiBwYWRfMDsJCS8qMENoICovCisKKwl1MTYgZmxhZ3M7CQkvKjEwaCAqLworCXUxNiByZXNlcnZlZF8zOwkJLyoxMmggKi8KKwl1MzIgcmVzZXJ2ZWRfNDsJCS8qMTRoICovCisKKwl1MzIgYWJvcnRfY29udGV4dDsJLyoxOGggKi8KKwl1MzIgcGFkXzE7CQkvKjFDaCAqLworCisJdTMyIGFib3J0X21maV9waHlzX2FkZHJfbG87CS8qMjBoICovCisJdTMyIGFib3J0X21maV9waHlzX2FkZHJfaGk7CS8qMjRoICovCisKKwl1MzIgcmVzZXJ2ZWRfNVs2XTsJLyoyOGggKi8KKworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBtZWdhc2FzX3NtcF9mcmFtZSB7CisKKwl1OCBjbWQ7CQkJLyowMGggKi8KKwl1OCByZXNlcnZlZF8xOwkJLyowMWggKi8KKwl1OCBjbWRfc3RhdHVzOwkJLyowMmggKi8KKwl1OCBjb25uZWN0aW9uX3N0YXR1czsJLyowM2ggKi8KKworCXU4IHJlc2VydmVkXzJbM107CS8qMDRoICovCisJdTggc2dlX2NvdW50OwkJLyowN2ggKi8KKworCXUzMiBjb250ZXh0OwkJLyowOGggKi8KKwl1MzIgcGFkXzA7CQkvKjBDaCAqLworCisJdTE2IGZsYWdzOwkJLyoxMGggKi8KKwl1MTYgdGltZW91dDsJCS8qMTJoICovCisKKwl1MzIgZGF0YV94ZmVyX2xlbjsJLyoxNGggKi8KKwl1NjQgc2FzX2FkZHI7CQkvKjE4aCAqLworCisJdW5pb24geworCQlzdHJ1Y3QgbWVnYXNhc19zZ2UzMiBzZ2UzMlsyXTsJLyogWzBdOiByZXNwIFsxXTogcmVxICovCisJCXN0cnVjdCBtZWdhc2FzX3NnZTY0IHNnZTY0WzJdOwkvKiBbMF06IHJlc3AgWzFdOiByZXEgKi8KKwl9IHNnbDsKKworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBtZWdhc2FzX3N0cF9mcmFtZSB7CisKKwl1OCBjbWQ7CQkJLyowMGggKi8KKwl1OCByZXNlcnZlZF8xOwkJLyowMWggKi8KKwl1OCBjbWRfc3RhdHVzOwkJLyowMmggKi8KKwl1OCByZXNlcnZlZF8yOwkJLyowM2ggKi8KKworCXU4IHRhcmdldF9pZDsJCS8qMDRoICovCisJdTggcmVzZXJ2ZWRfM1syXTsJLyowNWggKi8KKwl1OCBzZ2VfY291bnQ7CQkvKjA3aCAqLworCisJdTMyIGNvbnRleHQ7CQkvKjA4aCAqLworCXUzMiBwYWRfMDsJCS8qMENoICovCisKKwl1MTYgZmxhZ3M7CQkvKjEwaCAqLworCXUxNiB0aW1lb3V0OwkJLyoxMmggKi8KKworCXUzMiBkYXRhX3hmZXJfbGVuOwkvKjE0aCAqLworCisJdTE2IGZpc1sxMF07CQkvKjE4aCAqLworCXUzMiBzdHBfZmxhZ3M7CisKKwl1bmlvbiB7CisJCXN0cnVjdCBtZWdhc2FzX3NnZTMyIHNnZTMyWzJdOwkvKiBbMF06IHJlc3AgWzFdOiBkYXRhICovCisJCXN0cnVjdCBtZWdhc2FzX3NnZTY0IHNnZTY0WzJdOwkvKiBbMF06IHJlc3AgWzFdOiBkYXRhICovCisJfSBzZ2w7CisKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCit1bmlvbiBtZWdhc2FzX2ZyYW1lIHsKKworCXN0cnVjdCBtZWdhc2FzX2hlYWRlciBoZHI7CisJc3RydWN0IG1lZ2FzYXNfaW5pdF9mcmFtZSBpbml0OworCXN0cnVjdCBtZWdhc2FzX2lvX2ZyYW1lIGlvOworCXN0cnVjdCBtZWdhc2FzX3B0aHJ1X2ZyYW1lIHB0aHJ1OworCXN0cnVjdCBtZWdhc2FzX2RjbWRfZnJhbWUgZGNtZDsKKwlzdHJ1Y3QgbWVnYXNhc19hYm9ydF9mcmFtZSBhYm9ydDsKKwlzdHJ1Y3QgbWVnYXNhc19zbXBfZnJhbWUgc21wOworCXN0cnVjdCBtZWdhc2FzX3N0cF9mcmFtZSBzdHA7CisKKwl1OCByYXdfYnl0ZXNbNjRdOworfTsKKworc3RydWN0IG1lZ2FzYXNfY21kOworCit1bmlvbiBtZWdhc2FzX2V2dF9jbGFzc19sb2NhbGUgeworCisJc3RydWN0IHsKKwkJdTE2IGxvY2FsZTsKKwkJdTggcmVzZXJ2ZWQ7CisJCXM4IGNsYXNzOworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIG1lbWJlcnM7CisKKwl1MzIgd29yZDsKKworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBtZWdhc2FzX2V2dF9sb2dfaW5mbyB7CisJdTMyIG5ld2VzdF9zZXFfbnVtOworCXUzMiBvbGRlc3Rfc2VxX251bTsKKwl1MzIgY2xlYXJfc2VxX251bTsKKwl1MzIgc2h1dGRvd25fc2VxX251bTsKKwl1MzIgYm9vdF9zZXFfbnVtOworCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IG1lZ2FzYXNfcHJvZ3Jlc3MgeworCisJdTE2IHByb2dyZXNzOworCXUxNiBlbGFwc2VkX3NlY29uZHM7CisKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgbWVnYXNhc19ldnRhcmdfbGQgeworCisJdTE2IHRhcmdldF9pZDsKKwl1OCBsZF9pbmRleDsKKwl1OCByZXNlcnZlZDsKKworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBtZWdhc2FzX2V2dGFyZ19wZCB7CisJdTE2IGRldmljZV9pZDsKKwl1OCBlbmNsX2luZGV4OworCXU4IHNsb3RfbnVtYmVyOworCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IG1lZ2FzYXNfZXZ0X2RldGFpbCB7CisKKwl1MzIgc2VxX251bTsKKwl1MzIgdGltZV9zdGFtcDsKKwl1MzIgY29kZTsKKwl1bmlvbiBtZWdhc2FzX2V2dF9jbGFzc19sb2NhbGUgY2w7CisJdTggYXJnX3R5cGU7CisJdTggcmVzZXJ2ZWQxWzE1XTsKKworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBtZWdhc2FzX2V2dGFyZ19wZCBwZDsKKwkJCXU4IGNkYl9sZW5ndGg7CisJCQl1OCBzZW5zZV9sZW5ndGg7CisJCQl1OCByZXNlcnZlZFsyXTsKKwkJCXU4IGNkYlsxNl07CisJCQl1OCBzZW5zZVs2NF07CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGNkYlNlbnNlOworCisJCXN0cnVjdCBtZWdhc2FzX2V2dGFyZ19sZCBsZDsKKworCQlzdHJ1Y3QgeworCQkJc3RydWN0IG1lZ2FzYXNfZXZ0YXJnX2xkIGxkOworCQkJdTY0IGNvdW50OworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBsZF9jb3VudDsKKworCQlzdHJ1Y3QgeworCQkJdTY0IGxiYTsKKwkJCXN0cnVjdCBtZWdhc2FzX2V2dGFyZ19sZCBsZDsKKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgbGRfbGJhOworCisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgbWVnYXNhc19ldnRhcmdfbGQgbGQ7CisJCQl1MzIgcHJldk93bmVyOworCQkJdTMyIG5ld093bmVyOworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBsZF9vd25lcjsKKworCQlzdHJ1Y3QgeworCQkJdTY0IGxkX2xiYTsKKwkJCXU2NCBwZF9sYmE7CisJCQlzdHJ1Y3QgbWVnYXNhc19ldnRhcmdfbGQgbGQ7CisJCQlzdHJ1Y3QgbWVnYXNhc19ldnRhcmdfcGQgcGQ7CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGxkX2xiYV9wZF9sYmE7CisKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBtZWdhc2FzX2V2dGFyZ19sZCBsZDsKKwkJCXN0cnVjdCBtZWdhc2FzX3Byb2dyZXNzIHByb2c7CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGxkX3Byb2c7CisKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBtZWdhc2FzX2V2dGFyZ19sZCBsZDsKKwkJCXUzMiBwcmV2X3N0YXRlOworCQkJdTMyIG5ld19zdGF0ZTsKKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgbGRfc3RhdGU7CisKKwkJc3RydWN0IHsKKwkJCXU2NCBzdHJpcDsKKwkJCXN0cnVjdCBtZWdhc2FzX2V2dGFyZ19sZCBsZDsKKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgbGRfc3RyaXA7CisKKwkJc3RydWN0IG1lZ2FzYXNfZXZ0YXJnX3BkIHBkOworCisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgbWVnYXNhc19ldnRhcmdfcGQgcGQ7CisJCQl1MzIgZXJyOworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwZF9lcnI7CisKKwkJc3RydWN0IHsKKwkJCXU2NCBsYmE7CisJCQlzdHJ1Y3QgbWVnYXNhc19ldnRhcmdfcGQgcGQ7CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHBkX2xiYTsKKworCQlzdHJ1Y3QgeworCQkJdTY0IGxiYTsKKwkJCXN0cnVjdCBtZWdhc2FzX2V2dGFyZ19wZCBwZDsKKwkJCXN0cnVjdCBtZWdhc2FzX2V2dGFyZ19sZCBsZDsKKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcGRfbGJhX2xkOworCisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgbWVnYXNhc19ldnRhcmdfcGQgcGQ7CisJCQlzdHJ1Y3QgbWVnYXNhc19wcm9ncmVzcyBwcm9nOworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwZF9wcm9nOworCisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgbWVnYXNhc19ldnRhcmdfcGQgcGQ7CisJCQl1MzIgcHJldlN0YXRlOworCQkJdTMyIG5ld1N0YXRlOworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwZF9zdGF0ZTsKKworCQlzdHJ1Y3QgeworCQkJdTE2IHZlbmRvcklkOworCQkJdTE2IGRldmljZUlkOworCQkJdTE2IHN1YlZlbmRvcklkOworCQkJdTE2IHN1YkRldmljZUlkOworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwY2k7CisKKwkJdTMyIHJhdGU7CisJCWNoYXIgc3RyWzk2XTsKKworCQlzdHJ1Y3QgeworCQkJdTMyIHJ0YzsKKwkJCXUzMiBlbGFwc2VkU2Vjb25kczsKKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgdGltZTsKKworCQlzdHJ1Y3QgeworCQkJdTMyIGVjYXI7CisJCQl1MzIgZWxvZzsKKwkJCWNoYXIgc3RyWzY0XTsKKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgZWNjOworCisJCXU4IGJbOTZdOworCQl1MTYgc1s0OF07CisJCXUzMiB3WzI0XTsKKwkJdTY0IGRbMTJdOworCX0gYXJnczsKKworCWNoYXIgZGVzY3JpcHRpb25bMTI4XTsKKworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBtZWdhc2FzX2luc3RhbmNlIHsKKworCXUzMiAqcHJvZHVjZXI7CisJZG1hX2FkZHJfdCBwcm9kdWNlcl9oOworCXUzMiAqY29uc3VtZXI7CisJZG1hX2FkZHJfdCBjb25zdW1lcl9oOworCisJdTMyICpyZXBseV9xdWV1ZTsKKwlkbWFfYWRkcl90IHJlcGx5X3F1ZXVlX2g7CisKKwl1bnNpZ25lZCBsb25nIGJhc2VfYWRkcjsKKwlzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVnX3NldDsKKworCXM4IGluaXRfaWQ7CisJdTggcmVzZXJ2ZWRbM107CisKKwl1MTYgbWF4X251bV9zZ2U7CisJdTE2IG1heF9md19jbWRzOworCXUzMiBtYXhfc2VjdG9yc19wZXJfcmVxOworCisJc3RydWN0IG1lZ2FzYXNfY21kICoqY21kX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBjbWRfcG9vbDsKKwlzcGlubG9ja190IGNtZF9wb29sX2xvY2s7CisJc3RydWN0IGRtYV9wb29sICpmcmFtZV9kbWFfcG9vbDsKKwlzdHJ1Y3QgZG1hX3Bvb2wgKnNlbnNlX2RtYV9wb29sOworCisJc3RydWN0IG1lZ2FzYXNfZXZ0X2RldGFpbCAqZXZ0X2RldGFpbDsKKwlkbWFfYWRkcl90IGV2dF9kZXRhaWxfaDsKKwlzdHJ1Y3QgbWVnYXNhc19jbWQgKmFlbl9jbWQ7CisJc3RydWN0IHNlbWFwaG9yZSBhZW5fbXV0ZXg7CisJc3RydWN0IHNlbWFwaG9yZSBpb2N0bF9zZW07CisKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OworCisJd2FpdF9xdWV1ZV9oZWFkX3QgaW50X2NtZF93YWl0X3E7CisJd2FpdF9xdWV1ZV9oZWFkX3QgYWJvcnRfY21kX3dhaXRfcTsKKworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXUzMiB1bmlxdWVfaWQ7CisKKwl1MzIgZndfb3V0c3RhbmRpbmc7CisJdTMyIGh3X2NyaXRfZXJyb3I7CisJc3BpbmxvY2tfdCBpbnN0YW5jZV9sb2NrOworfTsKKworI2RlZmluZSBNRUdBU0FTX0lTX0xPR0lDQUwoc2NwKQkJCQkJCVwKKwkoc2NwLT5kZXZpY2UtPmNoYW5uZWwgPCBNRUdBU0FTX01BWF9QRF9DSEFOTkVMUykgPyAwIDogMQorCisjZGVmaW5lIE1FR0FTQVNfREVWX0lOREVYKGluc3QsIHNjcCkJCQkJCVwKKwkoKHNjcC0+ZGV2aWNlLT5jaGFubmVsICUgMikgKiBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUwpICsgCVwKKwlzY3AtPmRldmljZS0+aWQKKworc3RydWN0IG1lZ2FzYXNfY21kIHsKKworCXVuaW9uIG1lZ2FzYXNfZnJhbWUgKmZyYW1lOworCWRtYV9hZGRyX3QgZnJhbWVfcGh5c19hZGRyOworCXU4ICpzZW5zZTsKKwlkbWFfYWRkcl90IHNlbnNlX3BoeXNfYWRkcjsKKworCXUzMiBpbmRleDsKKwl1OCBzeW5jX2NtZDsKKwl1OCBjbWRfc3RhdHVzOworCXUxNiBhYm9ydF9hZW47CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHNjc2lfY21uZCAqc2NtZDsKKwlzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2U7CisJdTMyIGZyYW1lX2NvdW50OworfTsKKworI2RlZmluZSBNQVhfTUdNVF9BREFQVEVSUwkJMTAyNAorI2RlZmluZSBNQVhfSU9DVExfU0dFCQkJMTYKKworc3RydWN0IG1lZ2FzYXNfaW9jcGFja2V0IHsKKworCXUxNiBob3N0X25vOworCXUxNiBfX3BhZDE7CisJdTMyIHNnbF9vZmY7CisJdTMyIHNnZV9jb3VudDsKKwl1MzIgc2Vuc2Vfb2ZmOworCXUzMiBzZW5zZV9sZW47CisJdW5pb24geworCQl1OCByYXdbMTI4XTsKKwkJc3RydWN0IG1lZ2FzYXNfaGVhZGVyIGhkcjsKKwl9IGZyYW1lOworCisJc3RydWN0IGlvdmVjIHNnbFtNQVhfSU9DVExfU0dFXTsKKworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBtZWdhc2FzX2FlbiB7CisJdTE2IGhvc3Rfbm87CisJdTE2IF9fcGFkMTsKKwl1MzIgc2VxX251bTsKKwl1MzIgY2xhc3NfbG9jYWxlX3dvcmQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2lmZGVmIENPTkZJR19DT01QQVQKK3N0cnVjdCBjb21wYXRfbWVnYXNhc19pb2NwYWNrZXQgeworCXUxNiBob3N0X25vOworCXUxNiBfX3BhZDE7CisJdTMyIHNnbF9vZmY7CisJdTMyIHNnZV9jb3VudDsKKwl1MzIgc2Vuc2Vfb2ZmOworCXUzMiBzZW5zZV9sZW47CisJdW5pb24geworCQl1OCByYXdbMTI4XTsKKwkJc3RydWN0IG1lZ2FzYXNfaGVhZGVyIGhkcjsKKwl9IGZyYW1lOworCXN0cnVjdCBjb21wYXRfaW92ZWMgc2dsW01BWF9JT0NUTF9TR0VdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgTUVHQVNBU19JT0NfRklSTVdBUkUJX0lPV1IoJ00nLCAxLCBzdHJ1Y3QgY29tcGF0X21lZ2FzYXNfaW9jcGFja2V0KQorI2Vsc2UKKyNkZWZpbmUgTUVHQVNBU19JT0NfRklSTVdBUkUJX0lPV1IoJ00nLCAxLCBzdHJ1Y3QgbWVnYXNhc19pb2NwYWNrZXQpCisjZW5kaWYKKworI2RlZmluZSBNRUdBU0FTX0lPQ19HRVRfQUVOCV9JT1coJ00nLCAzLCBzdHJ1Y3QgbWVnYXNhc19hZW4pCisKK3N0cnVjdCBtZWdhc2FzX21nbXRfaW5mbyB7CisKKwl1MTYgY291bnQ7CisJc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlW01BWF9NR01UX0FEQVBURVJTXTsKKwlpbnQgbWF4X2luZGV4OworfTsKKworI2VuZGlmCQkJCS8qTFNJX01FR0FSQUlEX1NBU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVzaC5jIGIvZHJpdmVycy9zY3NpL21lc2guYwppbmRleCBhNDg1N2RiLi5iMjM1NTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVzaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tZXNoLmMKQEAgLTE5NTksMjIgKzE5NTksMzUgQEAKIAkvKiBTZXQgaXQgdXAgKi8KICAgICAgICAJbWVzaF9pbml0KG1zKTsKIAotCS8qIFhYWCBGSVhNRTogZXJyb3Igc2hvdWxkIGJlIGZhdGFsICovCi0gICAgICAgCWlmIChyZXF1ZXN0X2lycShtcy0+bWVzaGludHIsIGRvX21lc2hfaW50ZXJydXB0LCAwLCAiTUVTSCIsIG1zKSkKKwkvKiBSZXF1ZXN0IGludGVycnVwdCAqLworICAgICAgIAlpZiAocmVxdWVzdF9pcnEobXMtPm1lc2hpbnRyLCBkb19tZXNoX2ludGVycnVwdCwgMCwgIk1FU0giLCBtcykpIHsKIAkgICAgICAgCXByaW50ayhLRVJOX0VSUiAiTUVTSDogY2FuJ3QgZ2V0IGlycSAlZFxuIiwgbXMtPm1lc2hpbnRyKTsKKwkJZ290byBvdXRfc2h1dGRvd247CisJfQogCi0JLyogWFhYIEZJWE1FOiBoYW5kbGUgZmFpbHVyZSAqLwotCXNjc2lfYWRkX2hvc3QobWVzaF9ob3N0LCAmbWRldi0+b2ZkZXYuZGV2KTsKKwkvKiBBZGQgc2NzaSBob3N0ICYgc2NhbiAqLworCWlmIChzY3NpX2FkZF9ob3N0KG1lc2hfaG9zdCwgJm1kZXYtPm9mZGV2LmRldikpCisJCWdvdG8gb3V0X3JlbGVhc2VfaXJxOwogCXNjc2lfc2Nhbl9ob3N0KG1lc2hfaG9zdCk7CiAKIAlyZXR1cm4gMDsKIAotb3V0X3VubWFwOgorIG91dF9yZWxlYXNlX2lycToKKwlmcmVlX2lycShtcy0+bWVzaGludHIsIG1zKTsKKyBvdXRfc2h1dGRvd246CisJLyogc2h1dGRvd24gJiByZXNldCBidXMgaW4gY2FzZSBvZiBlcnJvciBvciBtYWNvcyBjYW4gYmUgY29uZnVzZWQKKwkgKiBhdCByZWJvb3QgaWYgdGhlIGJ1cyB3YXMgc2V0IHRvIHN5bmNocm9ub3VzIG1vZGUgYWxyZWFkeQorCSAqLworCW1lc2hfc2h1dGRvd24obWRldik7CisJc2V0X21lc2hfcG93ZXIobXMsIDApOworCXBjaV9mcmVlX2NvbnNpc3RlbnQobWFjaW9fZ2V0X3BjaV9kZXYobWRldiksIG1zLT5kbWFfY21kX3NpemUsCisJCQkgICAgbXMtPmRtYV9jbWRfc3BhY2UsIG1zLT5kbWFfY21kX2J1cyk7Cisgb3V0X3VubWFwOgogCWlvdW5tYXAobXMtPmRtYSk7CiAJaW91bm1hcChtcy0+bWVzaCk7Ci1vdXRfZnJlZToKKyBvdXRfZnJlZToKIAlzY3NpX2hvc3RfcHV0KG1lc2hfaG9zdCk7Ci1vdXRfcmVsZWFzZToKKyBvdXRfcmVsZWFzZToKIAltYWNpb19yZWxlYXNlX3Jlc291cmNlcyhtZGV2KTsKIAogCXJldHVybiAtRU5PREVWOwpAQCAtMjAwMSw3ICsyMDE0LDcgQEAKIAogCS8qIEZyZWUgRE1BIGNvbW1hbmRzIG1lbW9yeSAqLwogCXBjaV9mcmVlX2NvbnNpc3RlbnQobWFjaW9fZ2V0X3BjaV9kZXYobWRldiksIG1zLT5kbWFfY21kX3NpemUsCi0JCQkgIG1zLT5kbWFfY21kX3NwYWNlLCBtcy0+ZG1hX2NtZF9idXMpOworCQkJICAgIG1zLT5kbWFfY21kX3NwYWNlLCBtcy0+ZG1hX2NtZF9idXMpOwogCiAJLyogUmVsZWFzZSBtZW1vcnkgcmVzb3VyY2VzICovCiAJbWFjaW9fcmVsZWFzZV9yZXNvdXJjZXMobWRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYwppbmRleCAzZTliNjQxLi4yM2QwOTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKQEAgLTIwMSw2ICsyMDEsNyBAQAogcWxhMjEwMF9wY2lfY29uZmlnKHNjc2lfcWxhX2hvc3RfdCAqaGEpCiB7CiAJdWludDE2X3QgdywgbXdpOworCXVpbnQzMl90IGQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgZGV2aWNlX3JlZ18yeHh4IF9faW9tZW0gKnJlZyA9ICZoYS0+aW9iYXNlLT5pc3A7CiAKQEAgLTIxNSw5ICsyMTYsOSBAQAogCXBjaV93cml0ZV9jb25maWdfd29yZChoYS0+cGRldiwgUENJX0NPTU1BTkQsIHcpOwogCiAJLyogUmVzZXQgZXhwYW5zaW9uIFJPTSBhZGRyZXNzIGRlY29kZSBlbmFibGUgKi8KLQlwY2lfcmVhZF9jb25maWdfd29yZChoYS0+cGRldiwgUENJX1JPTV9BRERSRVNTLCAmdyk7Ci0JdyAmPSB+UENJX1JPTV9BRERSRVNTX0VOQUJMRTsKLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoaGEtPnBkZXYsIFBDSV9ST01fQUREUkVTUywgdyk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGhhLT5wZGV2LCBQQ0lfUk9NX0FERFJFU1MsICZkKTsKKwlkICY9IH5QQ0lfUk9NX0FERFJFU1NfRU5BQkxFOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoaGEtPnBkZXYsIFBDSV9ST01fQUREUkVTUywgZCk7CiAKIAkvKiBHZXQgUENJIGJ1cyBpbmZvcm1hdGlvbi4gKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKQEAgLTIzNyw2ICsyMzgsNyBAQAogcWxhMjMwMF9wY2lfY29uZmlnKHNjc2lfcWxhX2hvc3RfdCAqaGEpCiB7CiAJdWludDE2X3QJdywgbXdpOworCXVpbnQzMl90CWQ7CiAJdW5zaWduZWQgbG9uZyAgIGZsYWdzID0gMDsKIAl1aW50MzJfdAljbnQ7CiAJc3RydWN0IGRldmljZV9yZWdfMnh4eCBfX2lvbWVtICpyZWcgPSAmaGEtPmlvYmFzZS0+aXNwOwpAQCAtMzAyLDkgKzMwNCw5IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGhhLT5wZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgMHg4MCk7CiAKIAkvKiBSZXNldCBleHBhbnNpb24gUk9NIGFkZHJlc3MgZGVjb2RlIGVuYWJsZSAqLwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKGhhLT5wZGV2LCBQQ0lfUk9NX0FERFJFU1MsICZ3KTsKLQl3ICY9IH5QQ0lfUk9NX0FERFJFU1NfRU5BQkxFOwotCXBjaV93cml0ZV9jb25maWdfd29yZChoYS0+cGRldiwgUENJX1JPTV9BRERSRVNTLCB3KTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoaGEtPnBkZXYsIFBDSV9ST01fQUREUkVTUywgJmQpOworCWQgJj0gflBDSV9ST01fQUREUkVTU19FTkFCTEU7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChoYS0+cGRldiwgUENJX1JPTV9BRERSRVNTLCBkKTsKIAogCS8qIEdldCBQQ0kgYnVzIGluZm9ybWF0aW9uLiAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwpAQCAtMzI0LDYgKzMyNiw3IEBACiBxbGEyNHh4X3BjaV9jb25maWcoc2NzaV9xbGFfaG9zdF90ICpoYSkKIHsKIAl1aW50MTZfdCB3LCBtd2k7CisJdWludDMyX3QgZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAlzdHJ1Y3QgZGV2aWNlX3JlZ18yNHh4IF9faW9tZW0gKnJlZyA9ICZoYS0+aW9iYXNlLT5pc3AyNDsKIAlpbnQgcGNpeF9jbWRfcmVnLCBwY2llX2RjdGxfcmVnOwpAQCAtMzY2LDkgKzM2OSw5IEBACiAJfQogCiAJLyogUmVzZXQgZXhwYW5zaW9uIFJPTSBhZGRyZXNzIGRlY29kZSBlbmFibGUgKi8KLQlwY2lfcmVhZF9jb25maWdfd29yZChoYS0+cGRldiwgUENJX1JPTV9BRERSRVNTLCAmdyk7Ci0JdyAmPSB+UENJX1JPTV9BRERSRVNTX0VOQUJMRTsKLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoaGEtPnBkZXYsIFBDSV9ST01fQUREUkVTUywgdyk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGhhLT5wZGV2LCBQQ0lfUk9NX0FERFJFU1MsICZkKTsKKwlkICY9IH5QQ0lfUk9NX0FERFJFU1NfRU5BQkxFOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoaGEtPnBkZXYsIFBDSV9ST01fQUREUkVTUywgZCk7CiAKIAkvKiBHZXQgUENJIGJ1cyBpbmZvcm1hdGlvbi4gKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMKaW5kZXggODk4Mjk3OC4uN2FlYzkzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMKQEAgLTEzMjUsNiArMTMyNSw4IEBACiAJaGEtPmJyZF9pbmZvID0gYnJkX2luZm87CiAJc3ByaW50ZihoYS0+aG9zdF9zdHIsICIlc18lbGQiLCBoYS0+YnJkX2luZm8tPmRydl9uYW1lLCBoYS0+aG9zdF9ubyk7CiAKKwloYS0+ZHBjX3BpZCA9IC0xOworCiAJLyogQ29uZmlndXJlIFBDSSBJL08gc3BhY2UgKi8KIAlyZXQgPSBxbGEyeDAwX2lvc3BhY2VfY29uZmlnKGhhKTsKIAlpZiAocmV0KQpAQCAtMTQ0OCw3ICsxNDUwLDYgQEAKIAkgKi8KIAlzcGluX2xvY2tfaW5pdCgmaGEtPm1ieF9yZWdfbG9jayk7CiAKLQloYS0+ZHBjX3BpZCA9IC0xOwogCWluaXRfY29tcGxldGlvbigmaGEtPmRwY19pbml0ZWQpOwogCWluaXRfY29tcGxldGlvbigmaGEtPmRwY19leGl0ZWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfcnNjbi5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3JzY24uYwppbmRleCBiZGMzYmM3Li4xZWJhOTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfcnNjbi5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9yc2NuLmMKQEAgLTMzMCw2ICszMzAsOCBAQAogCWZjcG9ydC0+ZmxhZ3MgJj0gfkZDRl9GQUlMT1ZFUl9ORUVERUQ7CiAJZmNwb3J0LT5pb2Rlc2NfaWR4X3NlbnQgPSBJT0RFU0NfSU5WQUxJRF9JTkRFWDsKIAlhdG9taWNfc2V0KCZmY3BvcnQtPnN0YXRlLCBGQ1NfT05MSU5FKTsKKwlpZiAoZmNwb3J0LT5ycG9ydCkKKwkJZmNfcmVtb3RlX3BvcnRfdW5ibG9jayhmY3BvcnQtPnJwb3J0KTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxvZ2ljcHRpLmMgYi9kcml2ZXJzL3Njc2kvcWxvZ2ljcHRpLmMKaW5kZXggYTkxN2FiNy4uMWZkNWZjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Fsb2dpY3B0aS5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbG9naWNwdGkuYwpAQCAtMTExOSw2ICsxMTE5LDM2IEBACiAJaG9zdC0+c2dfdGFibGVzaXplID0gUUxPR0lDUFRJX01BWF9TRyhudW1fZnJlZSk7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2NzaV9yYnVmX2dldChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHVuc2lnbmVkIGNoYXIgKipidWZfb3V0KQoreworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwl1bnNpZ25lZCBpbnQgYnVmbGVuOworCisJaWYgKGNtZC0+dXNlX3NnKSB7CisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisKKwkJc2cgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopIGNtZC0+cmVxdWVzdF9idWZmZXI7CisJCWJ1ZiA9IGttYXBfYXRvbWljKHNnLT5wYWdlLCBLTV9JUlEwKSArIHNnLT5vZmZzZXQ7CisJCWJ1ZmxlbiA9IHNnLT5sZW5ndGg7CisJfSBlbHNlIHsKKwkJYnVmID0gY21kLT5yZXF1ZXN0X2J1ZmZlcjsKKwkJYnVmbGVuID0gY21kLT5yZXF1ZXN0X2J1ZmZsZW47CisJfQorCisJKmJ1Zl9vdXQgPSBidWY7CisJcmV0dXJuIGJ1ZmxlbjsKK30KKworc3RhdGljIHZvaWQgc2NzaV9yYnVmX3B1dChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKwlpZiAoY21kLT51c2Vfc2cpIHsKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKworCQlzZyA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKikgY21kLT5yZXF1ZXN0X2J1ZmZlcjsKKwkJa3VubWFwX2F0b21pYyhidWYgLSBzZy0+b2Zmc2V0LCBLTV9JUlEwKTsKKwl9Cit9CisKIC8qCiAgKiBVbnRpbCB3ZSBzY2FuIHRoZSBlbnRpcmUgYnVzIHdpdGggaW5xdWlyaWVzLCBnbyB0aHJvdWdodCB0aGlzIGZlbGxhLi4uCiAgKi8KQEAgLTExNDUsMTEgKzExNzUsOSBAQAogCQlpbnQgb2sgPSBob3N0X2J5dGUoQ21uZC0+cmVzdWx0KSA9PSBESURfT0s7CiAJCWlmIChDbW5kLT5jbW5kWzBdID09IDB4MTIgJiYgb2spIHsKIAkJCXVuc2lnbmVkIGNoYXIgKmlxZDsKKwkJCXVuc2lnbmVkIGludCBpcWRfbGVuOwogCi0JCQlpZiAoQ21uZC0+dXNlX3NnICE9IDApCi0JCQkJQlVHKCk7Ci0KLQkJCWlxZCA9ICgodW5zaWduZWQgY2hhciAqKUNtbmQtPmJ1ZmZlcik7CisJCQlpcWRfbGVuID0gc2NzaV9yYnVmX2dldChDbW5kLCAmaXFkKTsKIAogCQkJLyogdGFncyBoYW5kbGVkIGluIG1pZGxheWVyICovCiAJCQkvKiBlbmFibGUgc3luYyBtb2RlPyAqLwpAQCAtMTE2Myw2ICsxMTkxLDkgQEAKIAkJCWlmIChpcWRbN10gJiAweDIwKSB7CiAJCQkJcXB0aS0+ZGV2X3BhcmFtW3RndF0uZGV2aWNlX2ZsYWdzIHw9IDB4MjA7CiAJCQl9CisKKwkJCXNjc2lfcmJ1Zl9wdXQoQ21uZCwgaXFkKTsKKwogCQkJcXB0aS0+c2JpdHMgfD0gKDEgPDwgdGd0KTsKIAkJfSBlbHNlIGlmICghb2spIHsKIAkJCXFwdGktPnNiaXRzIHw9ICgxIDw8IHRndCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9udi5jIGIvZHJpdmVycy9zY3NpL3NhdGFfbnYuYwppbmRleCBhMWQ2MmRlLi5jYjgzMmIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9udi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX252LmMKQEAgLTI5LDYgKzI5LDggQEAKICAqICBOVi1zcGVjaWZpYyBkZXRhaWxzIHN1Y2ggYXMgcmVnaXN0ZXIgb2Zmc2V0cywgU0FUQSBwaHkgbG9jYXRpb24sCiAgKiAgaG90cGx1ZyBpbmZvLCBldGMuCiAgKgorICogIDAuMDkKKyAqICAgICAtIEZpeGVkIGJ1ZyBpbnRyb2R1Y2VkIGJ5IDAuMDgncyBNQ1A1MSBhbmQgTUNQNTUgc3VwcG9ydC4KICAqCiAgKiAgMC4wOAogICogICAgIC0gQWRkZWQgc3VwcG9ydCBmb3IgTUNQNTEgYW5kIE1DUDU1LgpAQCAtMTMyLDkgKzEzNCw3IEBACiAJR0VORVJJQywKIAlORk9SQ0UyLAogCU5GT1JDRTMsCi0JQ0s4MDQsCi0JTUNQNTEsCi0JTUNQNTUKKwlDSzgwNAogfTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG52X3BjaV90YmxbXSA9IHsKQEAgLTE1MywxMSArMTUzLDEzIEBACiAJeyBQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDA0X1NBVEEyLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSzgwNCB9LAogCXsgUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A1MV9TQVRBLAotCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBNQ1A1MSB9LAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBHRU5FUklDIH0sCiAJeyBQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDUxX1NBVEEyLAotCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBNQ1A1MSB9LAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBHRU5FUklDIH0sCiAJeyBQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDU1X1NBVEEsCi0JCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIE1DUDU1IH0sCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEdFTkVSSUMgfSwKKwl7IFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNTVfU0FUQTIsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEdFTkVSSUMgfSwKIAl7IFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfQU5ZX0lELAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAogCQlQQ0lfQ0xBU1NfU1RPUkFHRV9JREU8PDgsIDB4ZmZmZjAwLCBHRU5FUklDIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaS5jIGIvZHJpdmVycy9zY3NpL3Njc2kuYwppbmRleCBhNzgwNTQ2Li4xZjBlYmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpLmMKQEAgLTEyNjUsOSArMTI2NSw4IEBACiAJCWxpc3RfZm9yX2VhY2hfc2FmZShsaCwgbGhfc2YsICZhY3RpdmVfbGlzdCkgewogCQkJc2NtZCA9IGxpc3RfZW50cnkobGgsIHN0cnVjdCBzY3NpX2NtbmQsIGVoX2VudHJ5KTsKIAkJCWxpc3RfZGVsX2luaXQobGgpOwotCQkJaWYgKHJlY292ZXJ5KSB7Ci0JCQkJc2NzaV9laF9zY21kX2FkZChzY21kLCBTQ1NJX0VIX0NBTkNFTF9DTUQpOwotCQkJfSBlbHNlIHsKKwkJCWlmIChyZWNvdmVyeSAmJgorCQkJICAgICFzY3NpX2VoX3NjbWRfYWRkKHNjbWQsIFNDU0lfRUhfQ0FOQ0VMX0NNRCkpIHsKIAkJCQlzY21kLT5yZXN1bHQgPSAoRElEX0FCT1JUIDw8IDE2KTsKIAkJCQlzY3NpX2ZpbmlzaF9jb21tYW5kKHNjbWQpOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZGV2aW5mby5jIGIvZHJpdmVycy9zY3NpL3Njc2lfZGV2aW5mby5jCmluZGV4IDA3YjU1NGEuLmU2OTQ3N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2RldmluZm8uYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZXZpbmZvLmMKQEAgLTExMCw2ICsxMTAsNyBAQAogCXsiUkVMSVNZUyIsICJTY29ycGlvIiwgTlVMTCwgQkxJU1RfTk9MVU59LAkvKiByZXNwb25kcyB0byBhbGwgbHVuICovCiAJeyJTQU5LWU8iLCAiQ1A1MjUiLCAiNi42NCIsIEJMSVNUX05PTFVOfSwJLyogY2F1c2VzIGZhaWxlZCBSRVEgU0VOU0UsIGV4dHJhIHJlc2V0ICovCiAJeyJURVhFTCIsICJDRC1ST00iLCAiMS4wNiIsIEJMSVNUX05PTFVOfSwKKwl7InRyYW5zdGVjIiwgIlQ1MDA4IiwgIjAwMDEiLCBCTElTVF9OT1JFUE9SVExVTiB9LAogCXsiWUFNQUhBIiwgIkNEUjEwMCIsICIxLjAwIiwgQkxJU1RfTk9MVU59LAkvKiBsb2NrcyB1cCAqLwogCXsiWUFNQUhBIiwgIkNEUjEwMiIsICIxLjAwIiwgQkxJU1RfTk9MVU59LAkvKiBsb2NrcyB1cCAqLwogCXsiWUFNQUhBIiwgIkNSVzg0MjRTIiwgIjEuMCIsIEJMSVNUX05PTFVOfSwJLyogbG9ja3MgdXAgKi8KQEAgLTE4NCw2ICsxODUsNyBAQAogCXsiUElPTkVFUiIsICJDRC1ST00gRFJNLTYwMCIsIE5VTEwsIEJMSVNUX0ZPUkNFTFVOIHwgQkxJU1RfU0lOR0xFTFVOfSwKIAl7IlBJT05FRVIiLCAiQ0QtUk9NIERSTS02MDJYIiwgTlVMTCwgQkxJU1RfRk9SQ0VMVU4gfCBCTElTVF9TSU5HTEVMVU59LAogCXsiUElPTkVFUiIsICJDRC1ST00gRFJNLTYwNFgiLCBOVUxMLCBCTElTVF9GT1JDRUxVTiB8IEJMSVNUX1NJTkdMRUxVTn0sCisJeyJQSU9ORUVSIiwgIkNELVJPTSBEUk0tNjI0WCIsIE5VTEwsIEJMSVNUX0ZPUkNFTFVOIHwgQkxJU1RfU0lOR0xFTFVOfSwKIAl7IlJFR0FMIiwgIkNEQy00WCIsIE5VTEwsIEJMSVNUX01BWDVMVU4gfCBCTElTVF9TSU5HTEVMVU59LAogCXsiU2FuRGlzayIsICJJbWFnZU1hdGUgQ0YtU0QxIiwgTlVMTCwgQkxJU1RfRk9SQ0VMVU59LAogCXsiU0VBR0FURSIsICJTVDM0NTU1TiIsICIwOTMwIiwgQkxJU1RfTk9UUX0sCS8qIENob2tlcyBvbiB0YWdnZWQgSU5RVUlSWSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKaW5kZXggODk1Yzk0NS4uNTJiMzQ4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCkBAIC01MCw3ICs1MCw3IEBACiB2b2lkIHNjc2lfZWhfd2FrZXVwKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQogewogCWlmIChzaG9zdC0+aG9zdF9idXN5ID09IHNob3N0LT5ob3N0X2ZhaWxlZCkgewotCQl1cChzaG9zdC0+ZWhfd2FpdCk7CisJCXdha2VfdXBfcHJvY2VzcyhzaG9zdC0+ZWhhbmRsZXIpOwogCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSg1LAogCQkJCXByaW50aygiV2FraW5nIGVycm9yIGhhbmRsZXIgdGhyZWFkXG4iKSk7CiAJfQpAQCAtNjgsMTkgKzY4LDI0IEBACiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBzY21kLT5kZXZpY2UtPmhvc3Q7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKIAotCWlmIChzaG9zdC0+ZWhfd2FpdCA9PSBOVUxMKQorCWlmICghc2hvc3QtPmVoYW5kbGVyKQogCQlyZXR1cm4gMDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwlpZiAoc2NzaV9ob3N0X3NldF9zdGF0ZShzaG9zdCwgU0hPU1RfUkVDT1ZFUlkpKQorCQlpZiAoc2NzaV9ob3N0X3NldF9zdGF0ZShzaG9zdCwgU0hPU1RfQ0FOQ0VMX1JFQ09WRVJZKSkKKwkJCWdvdG8gb3V0X3VubG9jazsKIAorCXJldCA9IDE7CiAJc2NtZC0+ZWhfZWZsYWdzIHw9IGVoX2ZsYWc7CiAJbGlzdF9hZGRfdGFpbCgmc2NtZC0+ZWhfZW50cnksICZzaG9zdC0+ZWhfY21kX3EpOwotCXNjc2lfaG9zdF9zZXRfc3RhdGUoc2hvc3QsIFNIT1NUX1JFQ09WRVJZKTsKIAlzaG9zdC0+aG9zdF9mYWlsZWQrKzsKIAlzY3NpX2VoX3dha2V1cChzaG9zdCk7Cisgb3V0X3VubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTE3Niw4ICsxODEsOCBAQAogCQl9CiAKIAlpZiAodW5saWtlbHkoIXNjc2lfZWhfc2NtZF9hZGQoc2NtZCwgU0NTSV9FSF9DQU5DRUxfQ01EKSkpIHsKLQkJcGFuaWMoIkVycm9yIGhhbmRsZXIgdGhyZWFkIG5vdCBwcmVzZW50IGF0ICVwICVwICVzICVkIiwKLQkJICAgICAgc2NtZCwgc2NtZC0+ZGV2aWNlLT5ob3N0LCBfX0ZJTEVfXywgX19MSU5FX18pOworCQlzY21kLT5yZXN1bHQgfD0gRElEX1RJTUVfT1VUIDw8IDE2OworCQlfX3Njc2lfZG9uZShzY21kKTsKIAl9CiB9CiAKQEAgLTE5Niw4ICsyMDEsNyBAQAogewogCWludCBvbmxpbmU7CiAKLQl3YWl0X2V2ZW50KHNkZXYtPmhvc3QtPmhvc3Rfd2FpdCwgKHNkZXYtPmhvc3QtPnNob3N0X3N0YXRlICE9Ci0JCQkJCSAgIFNIT1NUX1JFQ09WRVJZKSk7CisJd2FpdF9ldmVudChzZGV2LT5ob3N0LT5ob3N0X3dhaXQsICFzY3NpX2hvc3RfaW5fcmVjb3Zlcnkoc2Rldi0+aG9zdCkpOwogCiAJb25saW5lID0gc2NzaV9kZXZpY2Vfb25saW5lKHNkZXYpOwogCkBAIC0xNDQxLDYgKzE0NDUsNyBAQAogc3RhdGljIHZvaWQgc2NzaV9yZXN0YXJ0X29wZXJhdGlvbnMoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCiB7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKgogCSAqIElmIHRoZSBkb29yIHdhcyBsb2NrZWQsIHdlIG5lZWQgdG8gaW5zZXJ0IGEgZG9vciBsb2NrIHJlcXVlc3QKQEAgLTE0NjAsNyArMTQ2NSwxMSBAQAogCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsIHByaW50aygiJXM6IHdha2luZyB1cCBob3N0IHRvIHJlc3RhcnRcbiIsCiAJCQkJCSAgX19GVU5DVElPTl9fKSk7CiAKLQlzY3NpX2hvc3Rfc2V0X3N0YXRlKHNob3N0LCBTSE9TVF9SVU5OSU5HKTsKKwlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJaWYgKHNjc2lfaG9zdF9zZXRfc3RhdGUoc2hvc3QsIFNIT1NUX1JVTk5JTkcpKQorCQlpZiAoc2NzaV9ob3N0X3NldF9zdGF0ZShzaG9zdCwgU0hPU1RfQ0FOQ0VMKSkKKwkJCUJVR19PTihzY3NpX2hvc3Rfc2V0X3N0YXRlKHNob3N0LCBTSE9TVF9ERUwpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAogCXdha2VfdXAoJnNob3N0LT5ob3N0X3dhaXQpOwogCkBAIC0xNTgyLDQwICsxNTkxLDMxIEBACiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSAoc3RydWN0IFNjc2lfSG9zdCAqKSBkYXRhOwogCWludCBydG47Ci0JREVDTEFSRV9NVVRFWF9MT0NLRUQoc2VtKTsKIAogCWN1cnJlbnQtPmZsYWdzIHw9IFBGX05PRlJFRVpFOwotCXNob3N0LT5laF93YWl0ID0gJnNlbTsKIAorCQogCS8qCi0JICogV2FrZSB1cCB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB1cy4KKwkgKiBOb3RlIC0gd2UgYWx3YXlzIHVzZSBUQVNLX0lOVEVSUlVQVElCTEUgZXZlbiBpZiB0aGUgbW9kdWxlCisJICogd2FzIGxvYWRlZCBhcyBwYXJ0IG9mIHRoZSBrZXJuZWwuICBUaGUgcmVhc29uIGlzIHRoYXQKKwkgKiBVTklOVEVSUlVQVElCTEUgd291bGQgY2F1c2UgdGhpcyB0aHJlYWQgdG8gYmUgY291bnRlZCBpbgorCSAqIHRoZSBsb2FkIGF2ZXJhZ2UgYXMgYSBydW5uaW5nIHByb2Nlc3MsIGFuZCBhbiBpbnRlcnJ1cHRpYmxlCisJICogd2FpdCBkb2Vzbid0LgogCSAqLwotCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsIHByaW50aygiV2FrZSB1cCBwYXJlbnQgb2YiCi0JCQkJCSAgIiBzY3NpX2VoXyVkXG4iLHNob3N0LT5ob3N0X25vKSk7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQlpZiAoc2hvc3QtPmhvc3RfZmFpbGVkID09IDAgfHwKKwkJICAgIHNob3N0LT5ob3N0X2ZhaWxlZCAhPSBzaG9zdC0+aG9zdF9idXN5KSB7CisJCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgxLCBwcmludGsoIkVycm9yIGhhbmRsZXIiCisJCQkJCQkJICAiIHNjc2lfZWhfJWQiCisJCQkJCQkJICAiIHNsZWVwaW5nXG4iLAorCQkJCQkJCSAgc2hvc3QtPmhvc3Rfbm8pKTsKKwkJCXNjaGVkdWxlKCk7CisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJY29udGludWU7CisJCX0KIAotCXdoaWxlICgxKSB7Ci0JCS8qCi0JCSAqIElmIHdlIGdldCBhIHNpZ25hbCwgaXQgbWVhbnMgd2UgYXJlIHN1cHBvc2VkIHRvIGdvCi0JCSAqIGF3YXkgYW5kIGRpZS4gIFRoaXMgdHlwaWNhbGx5IGhhcHBlbnMgaWYgdGhlIHVzZXIgaXMKLQkJICogdHJ5aW5nIHRvIHVubG9hZCBhIG1vZHVsZS4KLQkJICovCi0JCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDEsIHByaW50aygiRXJyb3IgaGFuZGxlciIKLQkJCQkJCSAgIiBzY3NpX2VoXyVkIgotCQkJCQkJICAiIHNsZWVwaW5nXG4iLHNob3N0LT5ob3N0X25vKSk7Ci0KLQkJLyoKLQkJICogTm90ZSAtIHdlIGFsd2F5cyB1c2UgZG93bl9pbnRlcnJ1cHRpYmxlIHdpdGggdGhlIHNlbWFwaG9yZQotCQkgKiBldmVuIGlmIHRoZSBtb2R1bGUgd2FzIGxvYWRlZCBhcyBwYXJ0IG9mIHRoZSBrZXJuZWwuICBUaGUKLQkJICogcmVhc29uIGlzIHRoYXQgZG93bigpIHdpbGwgY2F1c2UgdGhpcyB0aHJlYWQgdG8gYmUgY291bnRlZAotCQkgKiBpbiB0aGUgbG9hZCBhdmVyYWdlIGFzIGEgcnVubmluZyBwcm9jZXNzLCBhbmQgZG93bgotCQkgKiBpbnRlcnJ1cHRpYmxlIGRvZXNuJ3QuICBHaXZlbiB0aGF0IHdlIG5lZWQgdG8gYWxsb3cgdGhpcwotCQkgKiB0aHJlYWQgdG8gZGllIGlmIHRoZSBkcml2ZXIgd2FzIGxvYWRlZCBhcyBhIG1vZHVsZSwgdXNpbmcKLQkJICogc2VtYXBob3JlcyBpc24ndCB1bnJlYXNvbmFibGUuCi0JCSAqLwotCQlkb3duX2ludGVycnVwdGlibGUoJnNlbSk7Ci0JCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCi0JCQlicmVhazsKLQorCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDEsIHByaW50aygiRXJyb3IgaGFuZGxlciIKIAkJCQkJCSAgIiBzY3NpX2VoXyVkIHdha2luZyIKIAkJCQkJCSAgIiB1cFxuIixzaG9zdC0+aG9zdF9ubykpOwpAQCAtMTY0MiwxNiArMTY0MiwxOCBAQAogCQkgKiB3aGljaCBhcmUgc3RpbGwgb25saW5lLgogCQkgKi8KIAkJc2NzaV9yZXN0YXJ0X29wZXJhdGlvbnMoc2hvc3QpOwotCisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJfQogCisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCiAJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMSwgcHJpbnRrKCJFcnJvciBoYW5kbGVyIHNjc2lfZWhfJWQiCiAJCQkJCSAgIiBleGl0aW5nXG4iLHNob3N0LT5ob3N0X25vKSk7CiAKIAkvKgogCSAqIE1ha2Ugc3VyZSB0aGF0IG5vYm9keSB0cmllcyB0byB3YWtlIHVzIHVwIGFnYWluLgogCSAqLwotCXNob3N0LT5laF93YWl0ID0gTlVMTDsKKwlzaG9zdC0+ZWhhbmRsZXIgPSBOVUxMOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9pb2N0bC5jIGIvZHJpdmVycy9zY3NpL3Njc2lfaW9jdGwuYwppbmRleCBiN2ZkZGFjLi5kZTdmOThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9pb2N0bC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2lvY3RsLmMKQEAgLTQ1OCw3ICs0NTgsNyBAQAogCSAqIGVycm9yIHByb2Nlc3NpbmcsIGFzIGxvbmcgYXMgdGhlIGRldmljZSB3YXMgb3BlbmVkCiAJICogbm9uLWJsb2NraW5nICovCiAJaWYgKGZpbHAgJiYgZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJaWYgKHNkZXYtPmhvc3QtPnNob3N0X3N0YXRlID09IFNIT1NUX1JFQ09WRVJZKQorCQlpZiAoc2NzaV9ob3N0X2luX3JlY292ZXJ5KHNkZXYtPmhvc3QpKQogCQkJcmV0dXJuIC1FTk9ERVY7CiAJfSBlbHNlIGlmICghc2NzaV9ibG9ja193aGVuX3Byb2Nlc3NpbmdfZXJyb3JzKHNkZXYpKQogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKaW5kZXggODYzYmI2NC4uMDA3NGYyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKQEAgLTk3LDcgKzk3LDYgQEAKIH0KIAogc3RhdGljIHZvaWQgc2NzaV9ydW5fcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwotc3RhdGljIHZvaWQgc2NzaV9yZWxlYXNlX2J1ZmZlcnMoc3RydWN0IHNjc2lfY21uZCAqY21kKTsKIAogLyoKICAqIEZ1bmN0aW9uOglzY3NpX3VucHJlcF9yZXF1ZXN0KCkKQEAgLTExOCw3ICsxMTcsNiBAQAogCXJlcS0+ZmxhZ3MgJj0gflJFUV9ET05UUFJFUDsKIAlyZXEtPnNwZWNpYWwgPSAocmVxLT5mbGFncyAmIFJFUV9TUEVDSUFMKSA/IGNtZC0+c2NfcmVxdWVzdCA6IE5VTEw7CiAKLQlzY3NpX3JlbGVhc2VfYnVmZmVycyhjbWQpOwogCXNjc2lfcHV0X2NvbW1hbmQoY21kKTsKIH0KIApAQCAtMTQwLDE0ICsxMzgsMTIgQEAKICAqICAgICAgICAgICAgICBjb21tYW5kcy4KICAqIE5vdGVzOiAgICAgICBUaGlzIGNvdWxkIGJlIGNhbGxlZCBlaXRoZXIgZnJvbSBhbiBpbnRlcnJ1cHQgY29udGV4dCBvciBhCiAgKiAgICAgICAgICAgICAgbm9ybWFsIHByb2Nlc3MgY29udGV4dC4KLSAqIE5vdGVzOglVcG9uIHJldHVybiwgY21kIGlzIGEgc3RhbGUgcG9pbnRlci4KICAqLwogaW50IHNjc2lfcXVldWVfaW5zZXJ0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgaW50IHJlYXNvbikKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY21kLT5kZXZpY2UtPmhvc3Q7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpkZXZpY2UgPSBjbWQtPmRldmljZTsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRldmljZS0+cmVxdWVzdF9xdWV1ZTsKLQlzdHJ1Y3QgcmVxdWVzdCAqcmVxID0gY21kLT5yZXF1ZXN0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlTQ1NJX0xPR19NTFFVRVVFKDEsCkBAIC0xODgsOSArMTg0LDggQEAKIAkgKiBmdW5jdGlvbi4gIFRoZSBTQ1NJIHJlcXVlc3QgZnVuY3Rpb24gZGV0ZWN0cyB0aGUgYmxvY2tlZCBjb25kaXRpb24KIAkgKiBhbmQgcGx1Z3MgdGhlIHF1ZXVlIGFwcHJvcHJpYXRlbHkuCiAgICAgICAgICAqLwotCXNjc2lfdW5wcmVwX3JlcXVlc3QocmVxKTsKIAlzcGluX2xvY2tfaXJxc2F2ZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0JYmxrX3JlcXVldWVfcmVxdWVzdChxLCByZXEpOworCWJsa19yZXF1ZXVlX3JlcXVlc3QocSwgY21kLT5yZXF1ZXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIAogCXNjc2lfcnVuX3F1ZXVlKHEpOwpAQCAtNDUxLDcgKzQ0Niw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJc2hvc3QtPmhvc3RfYnVzeS0tOwotCWlmICh1bmxpa2VseSgoc2hvc3QtPnNob3N0X3N0YXRlID09IFNIT1NUX1JFQ09WRVJZKSAmJgorCWlmICh1bmxpa2VseShzY3NpX2hvc3RfaW5fcmVjb3Zlcnkoc2hvc3QpICYmCiAJCSAgICAgc2hvc3QtPmhvc3RfZmFpbGVkKSkKIAkJc2NzaV9laF93YWtldXAoc2hvc3QpOwogCXNwaW5fdW5sb2NrKHNob3N0LT5ob3N0X2xvY2spOwpAQCAtMTA0NCw4ICsxMDM5LDEwIEBACiAJICogaWYgc2cgdGFibGUgYWxsb2NhdGlvbiBmYWlscywgcmVxdWV1ZSByZXF1ZXN0IGxhdGVyLgogCSAqLwogCXNncG50ID0gc2NzaV9hbGxvY19zZ3RhYmxlKGNtZCwgR0ZQX0FUT01JQyk7Ci0JaWYgKHVubGlrZWx5KCFzZ3BudCkpCisJaWYgKHVubGlrZWx5KCFzZ3BudCkpIHsKKwkJc2NzaV91bnByZXBfcmVxdWVzdChyZXEpOwogCQlyZXR1cm4gQkxLUFJFUF9ERUZFUjsKKwl9CiAKIAljbWQtPnJlcXVlc3RfYnVmZmVyID0gKGNoYXIgKikgc2dwbnQ7CiAJY21kLT5yZXF1ZXN0X2J1ZmZsZW4gPSByZXEtPm5yX3NlY3RvcnMgPDwgOTsKQEAgLTEyNDksOCArMTI0Niw4IEBACiAJCSAqLwogCQlyZXQgPSBzY3NpX2luaXRfaW8oY21kKTsKIAkJc3dpdGNoKHJldCkgeworCQkJLyogRm9yIEJMS1BSRVBfS0lMTC9ERUZFUiB0aGUgY21kIHdhcyByZWxlYXNlZCAqLwogCQljYXNlIEJMS1BSRVBfS0lMTDoKLQkJCS8qIEJMS1BSRVBfS0lMTCByZXR1cm4gYWxzbyByZWxlYXNlcyB0aGUgY29tbWFuZCAqLwogCQkJZ290byBraWxsOwogCQljYXNlIEJMS1BSRVBfREVGRVI6CiAJCQlnb3RvIGRlZmVyOwpAQCAtMTI2OCw2ICsxMjY1LDcgQEAKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCW1lbWNweShjbWQtPmNtbmQsIHJlcS0+Y21kLCBzaXplb2YoY21kLT5jbW5kKSk7CisJCQljbWQtPmNtZF9sZW4gPSByZXEtPmNtZF9sZW47CiAJCQlpZiAocnFfZGF0YV9kaXIocmVxKSA9PSBXUklURSkKIAkJCQljbWQtPnNjX2RhdGFfZGlyZWN0aW9uID0gRE1BX1RPX0RFVklDRTsKIAkJCWVsc2UgaWYgKHJlcS0+ZGF0YV9sZW4pCkBAIC0xMzQyLDcgKzEzNDAsNyBAQAogCQkJCSAgIHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LAogCQkJCSAgIHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKLQlpZiAoc2hvc3QtPnNob3N0X3N0YXRlID09IFNIT1NUX1JFQ09WRVJZKQorCWlmIChzY3NpX2hvc3RfaW5fcmVjb3Zlcnkoc2hvc3QpKQogCQlyZXR1cm4gMDsKIAlpZiAoc2hvc3QtPmhvc3RfYnVzeSA9PSAwICYmIHNob3N0LT5ob3N0X2Jsb2NrZWQpIHsKIAkJLyoKQEAgLTE1MTQsNyArMTUxMiw2IEBACiAJICogY2FzZXMgKGhvc3QgbGltaXRzIG9yIHNldHRpbmdzKSBzaG91bGQgcnVuIHRoZSBxdWV1ZSBhdCBzb21lCiAJICogbGF0ZXIgdGltZS4KIAkgKi8KLQlzY3NpX3VucHJlcF9yZXF1ZXN0KHJlcSk7CiAJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKIAlibGtfcmVxdWV1ZV9yZXF1ZXN0KHEsIHJlcSk7CiAJc2Rldi0+ZGV2aWNlX2J1c3ktLTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwppbmRleCBiODZmMTcwLi4zMjdjNWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCkBAIC01ODcsNiArNTg3LDcgQEAKIAlpZiAoc2Rldi0+c2NzaV9sZXZlbCA+PSAyIHx8CiAJICAgIChzZGV2LT5zY3NpX2xldmVsID09IDEgJiYgKGlucV9yZXN1bHRbM10gJiAweDBmKSA9PSAxKSkKIAkJc2Rldi0+c2NzaV9sZXZlbCsrOworCXNkZXYtPnNkZXZfdGFyZ2V0LT5zY3NpX2xldmVsID0gc2Rldi0+c2NzaV9sZXZlbDsKIAogCXJldHVybiAwOwogfQpAQCAtNzcxLDYgKzc3MiwxNSBAQAogCXJldHVybiBTQ1NJX1NDQU5fTFVOX1BSRVNFTlQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzY3NpX2Rlc3Ryb3lfc2RldihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJaWYgKHNkZXYtPmhvc3QtPmhvc3R0LT5zbGF2ZV9kZXN0cm95KQorCQlzZGV2LT5ob3N0LT5ob3N0dC0+c2xhdmVfZGVzdHJveShzZGV2KTsKKwl0cmFuc3BvcnRfZGVzdHJveV9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKKwlwdXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7Cit9CisKKwogLyoqCiAgKiBzY3NpX3Byb2JlX2FuZF9hZGRfbHVuIC0gcHJvYmUgYSBMVU4sIGlmIGEgTFVOIGlzIGZvdW5kIGFkZCBpdAogICogQHN0YXJnZXQ6CXBvaW50ZXIgdG8gdGFyZ2V0IGRldmljZSBzdHJ1Y3R1cmUKQEAgLTgwMyw5ICs4MTMsOSBAQAogCSAqIFRoZSByZXNjYW4gZmxhZyBpcyB1c2VkIGFzIGFuIG9wdGltaXphdGlvbiwgdGhlIGZpcnN0IHNjYW4gb2YgYQogCSAqIGhvc3QgYWRhcHRlciBjYWxscyBpbnRvIGhlcmUgd2l0aCByZXNjYW4gPT0gMC4KIAkgKi8KLQlpZiAocmVzY2FuKSB7Ci0JCXNkZXYgPSBzY3NpX2RldmljZV9sb29rdXBfYnlfdGFyZ2V0KHN0YXJnZXQsIGx1bik7Ci0JCWlmIChzZGV2KSB7CisJc2RldiA9IHNjc2lfZGV2aWNlX2xvb2t1cF9ieV90YXJnZXQoc3RhcmdldCwgbHVuKTsKKwlpZiAoc2RldikgeworCQlpZiAocmVzY2FuIHx8IHNkZXYtPnNkZXZfc3RhdGUgIT0gU0RFVl9DUkVBVEVEKSB7CiAJCQlTQ1NJX0xPR19TQ0FOX0JVUygzLCBwcmludGsoS0VSTl9JTkZPCiAJCQkJInNjc2kgc2NhbjogZGV2aWNlIGV4aXN0cyBvbiAlc1xuIiwKIAkJCQlzZGV2LT5zZGV2X2dlbmRldi5idXNfaWQpKTsKQEAgLTgyMCw5ICs4MzAsOSBAQAogCQkJCQkJCQkgc2Rldi0+bW9kZWwpOwogCQkJcmV0dXJuIFNDU0lfU0NBTl9MVU5fUFJFU0VOVDsKIAkJfQotCX0KLQotCXNkZXYgPSBzY3NpX2FsbG9jX3NkZXYoc3RhcmdldCwgbHVuLCBob3N0ZGF0YSk7CisJCXNjc2lfZGV2aWNlX3B1dChzZGV2KTsKKwl9IGVsc2UKKwkJc2RldiA9IHNjc2lfYWxsb2Nfc2RldihzdGFyZ2V0LCBsdW4sIGhvc3RkYXRhKTsKIAlpZiAoIXNkZXYpCiAJCWdvdG8gb3V0OwogCkBAIC04NzcsMTIgKzg4Nyw4IEBACiAJCQkJcmVzID0gU0NTSV9TQ0FOX05PX1JFU1BPTlNFOwogCQkJfQogCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKHNkZXYtPmhvc3QtPmhvc3R0LT5zbGF2ZV9kZXN0cm95KQotCQkJc2Rldi0+aG9zdC0+aG9zdHQtPnNsYXZlX2Rlc3Ryb3koc2Rldik7Ci0JCXRyYW5zcG9ydF9kZXN0cm95X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwotCQlwdXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7Ci0JfQorCX0gZWxzZQorCQlzY3NpX2Rlc3Ryb3lfc2RldihzZGV2KTsKICBvdXQ6CiAJcmV0dXJuIHJlczsKIH0KQEAgLTEwNTQsNyArMTA2MCw3IEBACiAgKiAgICAgMDogc2NhbiBjb21wbGV0ZWQgKG9yIG5vIG1lbW9yeSwgc28gZnVydGhlciBzY2FubmluZyBpcyBmdXRpbGUpCiAgKiAgICAgMTogbm8gcmVwb3J0IGx1biBzY2FuLCBvciBub3QgY29uZmlndXJlZAogICoqLwotc3RhdGljIGludCBzY3NpX3JlcG9ydF9sdW5fc2NhbihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBiZmxhZ3MsCitzdGF0aWMgaW50IHNjc2lfcmVwb3J0X2x1bl9zY2FuKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCwgaW50IGJmbGFncywKIAkJCQlpbnQgcmVzY2FuKQogewogCWNoYXIgZGV2bmFtZVs2NF07CkBAIC0xMDY3LDcgKzEwNzMsOCBAQAogCXN0cnVjdCBzY3NpX2x1biAqbHVucCwgKmx1bl9kYXRhOwogCXU4ICpkYXRhOwogCXN0cnVjdCBzY3NpX3NlbnNlX2hkciBzc2hkcjsKLQlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQgPSBzY3NpX3RhcmdldChzZGV2KTsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBkZXZfdG9fc2hvc3QoJnN0YXJnZXQtPmRldik7CiAKIAkvKgogCSAqIE9ubHkgc3VwcG9ydCBTQ1NJLTMgYW5kIHVwIGRldmljZXMgaWYgQkxJU1RfTk9SRVBPUlRMVU4gaXMgbm90IHNldC4KQEAgLTEwNzUsMTUgKzEwODIsMjMgQEAKIAkgKiBzdXBwb3J0IG1vcmUgdGhhbiA4IExVTnMuCiAJICovCiAJaWYgKChiZmxhZ3MgJiBCTElTVF9OT1JFUE9SVExVTikgfHwgCi0JICAgICBzZGV2LT5zY3NpX2xldmVsIDwgU0NTSV8yIHx8Ci0JICAgIChzZGV2LT5zY3NpX2xldmVsIDwgU0NTSV8zICYmIAotCSAgICAgKCEoYmZsYWdzICYgQkxJU1RfUkVQT1JUTFVOMikgfHwgc2Rldi0+aG9zdC0+bWF4X2x1biA8PSA4KSkgKQorCSAgICAgc3RhcmdldC0+c2NzaV9sZXZlbCA8IFNDU0lfMiB8fAorCSAgICAoc3RhcmdldC0+c2NzaV9sZXZlbCA8IFNDU0lfMyAmJiAKKwkgICAgICghKGJmbGFncyAmIEJMSVNUX1JFUE9SVExVTjIpIHx8IHNob3N0LT5tYXhfbHVuIDw9IDgpKSApCiAJCXJldHVybiAxOwogCWlmIChiZmxhZ3MgJiBCTElTVF9OT0xVTikKIAkJcmV0dXJuIDA7CiAKKwlpZiAoIShzZGV2ID0gc2NzaV9kZXZpY2VfbG9va3VwX2J5X3RhcmdldChzdGFyZ2V0LCAwKSkpIHsKKwkJc2RldiA9IHNjc2lfYWxsb2Nfc2RldihzdGFyZ2V0LCAwLCBOVUxMKTsKKwkJaWYgKCFzZGV2KQorCQkJcmV0dXJuIDA7CisJCWlmIChzY3NpX2RldmljZV9nZXQoc2RldikpCisJCQlyZXR1cm4gMDsKKwl9CisKIAlzcHJpbnRmKGRldm5hbWUsICJob3N0ICVkIGNoYW5uZWwgJWQgaWQgJWQiLAotCQlzZGV2LT5ob3N0LT5ob3N0X25vLCBzZGV2LT5jaGFubmVsLCBzZGV2LT5pZCk7CisJCXNob3N0LT5ob3N0X25vLCBzZGV2LT5jaGFubmVsLCBzZGV2LT5pZCk7CiAKIAkvKgogCSAqIEFsbG9jYXRlIGVub3VnaCB0byBob2xkIHRoZSBoZWFkZXIgKHRoZSBzYW1lIHNpemUgYXMgb25lIHNjc2lfbHVuKQpAQCAtMTA5OCw4ICsxMTEzLDEwIEBACiAJbGVuZ3RoID0gKG1heF9zY3NpX3JlcG9ydF9sdW5zICsgMSkgKiBzaXplb2Yoc3RydWN0IHNjc2lfbHVuKTsKIAlsdW5fZGF0YSA9IGttYWxsb2MobGVuZ3RoLCBHRlBfQVRPTUlDIHwKIAkJCSAgIChzZGV2LT5ob3N0LT51bmNoZWNrZWRfaXNhX2RtYSA/IF9fR0ZQX0RNQSA6IDApKTsKLQlpZiAoIWx1bl9kYXRhKQorCWlmICghbHVuX2RhdGEpIHsKKwkJcHJpbnRrKEFMTE9DX0ZBSUxVUkVfTVNHLCBfX0ZVTkNUSU9OX18pOwogCQlnb3RvIG91dDsKKwl9CiAKIAlzY3NpX2NtZFswXSA9IFJFUE9SVF9MVU5TOwogCkBAIC0xMjAxLDEwICsxMjE4LDYgQEAKIAkJCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IHNjc2lfbHVuKTsgaSsrKQogCQkJCXByaW50aygiJTAyeCIsIGRhdGFbaV0pOwogCQkJcHJpbnRrKCIgaGFzIGEgTFVOIGxhcmdlciB0aGFuIGN1cnJlbnRseSBzdXBwb3J0ZWQuXG4iKTsKLQkJfSBlbHNlIGlmIChsdW4gPT0gMCkgewotCQkJLyoKLQkJCSAqIExVTiAwIGhhcyBhbHJlYWR5IGJlZW4gc2Nhbm5lZC4KLQkJCSAqLwogCQl9IGVsc2UgaWYgKGx1biA+IHNkZXYtPmhvc3QtPm1heF9sdW4pIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgInNjc2k6ICVzIGx1biVkIGhhcyBhIExVTiBsYXJnZXIiCiAJCQkgICAgICAgIiB0aGFuIGFsbG93ZWQgYnkgdGhlIGhvc3QgYWRhcHRlclxuIiwKQEAgLTEyMjcsMTMgKzEyNDAsMTMgQEAKIAl9CiAKIAlrZnJlZShsdW5fZGF0YSk7Ci0JcmV0dXJuIDA7Ci0KICBvdXQ6Ci0JLyoKLQkgKiBXZSBhcmUgb3V0IG9mIG1lbW9yeSwgZG9uJ3QgdHJ5IHNjYW5uaW5nIGFueSBmdXJ0aGVyLgotCSAqLwotCXByaW50ayhBTExPQ19GQUlMVVJFX01TRywgX19GVU5DVElPTl9fKTsKKwlzY3NpX2RldmljZV9wdXQoc2Rldik7CisJaWYgKHNkZXYtPnNkZXZfc3RhdGUgPT0gU0RFVl9DUkVBVEVEKQorCQkvKgorCQkgKiB0aGUgc2RldiB3ZSB1c2VkIGRpZG4ndCBhcHBlYXIgaW4gdGhlIHJlcG9ydCBsdW5zIHNjYW4KKwkJICovCisJCXNjc2lfZGVzdHJveV9zZGV2KHNkZXYpOwogCXJldHVybiAwOwogfQogCkBAIC0xMjk5LDcgKzEzMTIsNiBAQAogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KHBhcmVudCk7CiAJaW50IGJmbGFncyA9IDA7CiAJaW50IHJlczsKLQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSBOVUxMOwogCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldDsKIAogCWlmIChzaG9zdC0+dGhpc19pZCA9PSBpZCkKQEAgLTEzMjUsMjcgKzEzMzcsMTYgQEAKIAkgKiBTY2FuIExVTiAwLCBpZiB0aGVyZSBpcyBzb21lIHJlc3BvbnNlLCBzY2FuIGZ1cnRoZXIuIElkZWFsbHksIHdlCiAJICogd291bGQgbm90IGNvbmZpZ3VyZSBMVU4gMCB1bnRpbCBhbGwgTFVOcyBhcmUgc2Nhbm5lZC4KIAkgKi8KLQlyZXMgPSBzY3NpX3Byb2JlX2FuZF9hZGRfbHVuKHN0YXJnZXQsIDAsICZiZmxhZ3MsICZzZGV2LCByZXNjYW4sIE5VTEwpOwotCWlmIChyZXMgPT0gU0NTSV9TQ0FOX0xVTl9QUkVTRU5UKSB7Ci0JCWlmIChzY3NpX3JlcG9ydF9sdW5fc2NhbihzZGV2LCBiZmxhZ3MsIHJlc2NhbikgIT0gMCkKKwlyZXMgPSBzY3NpX3Byb2JlX2FuZF9hZGRfbHVuKHN0YXJnZXQsIDAsICZiZmxhZ3MsIE5VTEwsIHJlc2NhbiwgTlVMTCk7CisJaWYgKHJlcyA9PSBTQ1NJX1NDQU5fTFVOX1BSRVNFTlQgfHwgcmVzID09IFNDU0lfU0NBTl9UQVJHRVRfUFJFU0VOVCkgeworCQlpZiAoc2NzaV9yZXBvcnRfbHVuX3NjYW4oc3RhcmdldCwgYmZsYWdzLCByZXNjYW4pICE9IDApCiAJCQkvKgogCQkJICogVGhlIFJFUE9SVCBMVU4gZGlkIG5vdCBzY2FuIHRoZSB0YXJnZXQsCiAJCQkgKiBkbyBhIHNlcXVlbnRpYWwgc2Nhbi4KIAkJCSAqLwogCQkJc2NzaV9zZXF1ZW50aWFsX2x1bl9zY2FuKHN0YXJnZXQsIGJmbGFncywKLQkJCQkgICAgICAgCXJlcywgc2Rldi0+c2NzaV9sZXZlbCwgcmVzY2FuKTsKLQl9IGVsc2UgaWYgKHJlcyA9PSBTQ1NJX1NDQU5fVEFSR0VUX1BSRVNFTlQpIHsKLQkJLyoKLQkJICogVGhlcmUncyBhIHRhcmdldCBoZXJlLCBidXQgbHVuIDAgaXMgb2ZmbGluZSBzbyB3ZQotCQkgKiBjYW4ndCB1c2UgdGhlIHJlcG9ydF9sdW4gc2Nhbi4gIEZhbGwgYmFjayB0byBhCi0JCSAqIHNlcXVlbnRpYWwgbHVuIHNjYW4gd2l0aCBhIGJmbGFncyBvZiBTUEFSU0VMVU4gYW5kCi0JCSAqIGEgZGVmYXVsdCBzY3NpIGxldmVsIG9mIFNDU0lfMgotCQkgKi8KLQkJc2NzaV9zZXF1ZW50aWFsX2x1bl9zY2FuKHN0YXJnZXQsIEJMSVNUX1NQQVJTRUxVTiwKLQkJCQlTQ1NJX1NDQU5fVEFSR0VUX1BSRVNFTlQsIFNDU0lfMiwgcmVzY2FuKTsKKwkJCQkgICAgICAgCXJlcywgc3RhcmdldC0+c2NzaV9sZXZlbCwgcmVzY2FuKTsKIAl9Ci0JaWYgKHNkZXYpCi0JCXNjc2lfZGV2aWNlX3B1dChzZGV2KTsKIAogIG91dF9yZWFwOgogCS8qIG5vdyBkZXRlcm1pbmUgaWYgdGhlIHRhcmdldCBoYXMgYW55IGNoaWxkcmVuIGF0IGFsbApAQCAtMTQ2NiwyMyArMTQ2NywxNyBAQAogCiB2b2lkIHNjc2lfZm9yZ2V0X2hvc3Qoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCiB7Ci0Jc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0LCAqdG1wOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JLyoKLQkgKiBPaywgdGhpcyBsb29rIGEgYml0IHN0cmFuZ2UuICBXZSBhbHdheXMgbG9vayBmb3IgdGhlIGZpcnN0IGRldmljZQotCSAqIG9uIHRoZSBsaXN0IGFzIHNjc2lfcmVtb3ZlX2RldmljZSByZW1vdmVzIHRoZW0gZnJvbSBpdCAtIHRodXMgd2UKLQkgKiBhbHNvIGhhdmUgdG8gcmVsZWFzZSB0aGUgbG9jay4KLQkgKiBXZSBkb24ndCBuZWVkIHRvIGdldCBhbm90aGVyIHJlZmVyZW5jZSB0byB0aGUgZGV2aWNlIGJlZm9yZQotCSAqIHJlbGVhc2luZyB0aGUgbG9jayBhcyB3ZSBhbHJlYWR5IG93biB0aGUgcmVmZXJlbmNlIGZyb20KLQkgKiBzY3NpX3JlZ2lzdGVyX2RldmljZSB0aGF0J3MgcmVsZWFzZSBpbiBzY3NpX3JlbW92ZV9kZXZpY2UuICBBbmQKLQkgKiBhZnRlciB0aGF0IHdlIGRvbid0IGxvb2sgYXQgc2RldiBhbnltb3JlLgotCSAqLworIHJlc3RhcnQ6CiAJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGFyZ2V0LCB0bXAsICZzaG9zdC0+X190YXJnZXRzLCBzaWJsaW5ncykgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RldiwgJnNob3N0LT5fX2RldmljZXMsIHNpYmxpbmdzKSB7CisJCWlmIChzZGV2LT5zZGV2X3N0YXRlID09IFNERVZfREVMKQorCQkJY29udGludWU7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCQlzY3NpX3JlbW92ZV90YXJnZXQoJnN0YXJnZXQtPmRldik7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJX19zY3NpX3JlbW92ZV9kZXZpY2Uoc2Rldik7CisJCWdvdG8gcmVzdGFydDsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiB9CkBAIC0xNTQ4LDEwICsxNTQzLDcgQEAKIHsKIAlCVUdfT04oc2Rldi0+aWQgIT0gc2Rldi0+aG9zdC0+dGhpc19pZCk7CiAKLQlpZiAoc2Rldi0+aG9zdC0+aG9zdHQtPnNsYXZlX2Rlc3Ryb3kpCi0JCXNkZXYtPmhvc3QtPmhvc3R0LT5zbGF2ZV9kZXN0cm95KHNkZXYpOwotCXRyYW5zcG9ydF9kZXN0cm95X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwotCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKKwlzY3NpX2Rlc3Ryb3lfc2RldihzZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0woc2NzaV9mcmVlX2hvc3RfZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKaW5kZXggYjgwNTJkNS4uNzJhNjU1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCkBAIC01Nyw2ICs1Nyw4IEBACiAJeyBTSE9TVF9DQU5DRUwsICJjYW5jZWwiIH0sCiAJeyBTSE9TVF9ERUwsICJkZWxldGVkIiB9LAogCXsgU0hPU1RfUkVDT1ZFUlksICJyZWNvdmVyeSIgfSwKKwl7IFNIT1NUX0NBTkNFTF9SRUNPVkVSWSwgImNhbmNlbC9yZWNvdmVyeSIgfSwKKwl7IFNIT1NUX0RFTF9SRUNPVkVSWSwgImRlbGV0ZWQvcmVjb3ZlcnkiLCB9LAogfTsKIGNvbnN0IGNoYXIgKnNjc2lfaG9zdF9zdGF0ZV9uYW1lKGVudW0gc2NzaV9ob3N0X3N0YXRlIHN0YXRlKQogewpAQCAtNzA3LDkgKzcwOSwxMSBAQAogICoqLwogdm9pZCBzY3NpX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewotCWRvd24oJnNkZXYtPmhvc3QtPnNjYW5fbXV0ZXgpOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gc2Rldi0+aG9zdDsKKworCWRvd24oJnNob3N0LT5zY2FuX211dGV4KTsKIAlfX3Njc2lfcmVtb3ZlX2RldmljZShzZGV2KTsKLQl1cCgmc2Rldi0+aG9zdC0+c2Nhbl9tdXRleCk7CisJdXAoJnNob3N0LT5zY2FuX211dGV4KTsKIH0KIEVYUE9SVF9TWU1CT0woc2NzaV9yZW1vdmVfZGV2aWNlKTsKIApAQCAtNzE3LDE3ICs3MjEsMjAgQEAKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdChzdGFyZ2V0LT5kZXYucGFyZW50KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgKnRtcDsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJc3RhcmdldC0+cmVhcF9yZWYrKzsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2RldiwgdG1wLCAmc2hvc3QtPl9fZGV2aWNlcywgc2libGluZ3MpIHsKKyByZXN0YXJ0OgorCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RldiwgJnNob3N0LT5fX2RldmljZXMsIHNpYmxpbmdzKSB7CiAJCWlmIChzZGV2LT5jaGFubmVsICE9IHN0YXJnZXQtPmNoYW5uZWwgfHwKLQkJICAgIHNkZXYtPmlkICE9IHN0YXJnZXQtPmlkKQorCQkgICAgc2Rldi0+aWQgIT0gc3RhcmdldC0+aWQgfHwKKwkJICAgIHNkZXYtPnNkZXZfc3RhdGUgPT0gU0RFVl9ERUwpCiAJCQljb250aW51ZTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJCXNjc2lfcmVtb3ZlX2RldmljZShzZGV2KTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlnb3RvIHJlc3RhcnQ7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCXNjc2lfdGFyZ2V0X3JlYXAoc3RhcmdldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCmluZGV4IDJjYWI1NTYuLjc3MWU5N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCkBAIC04MTksMTIgKzgxOSwxNSBAQAogCXJldHVybiBzbnByaW50ZihidWYsIEZDX0JJTkRUWVBFX01BWF9OQU1FTEVOLCAiJXNcbiIsIG5hbWUpOwogfQogCisjZGVmaW5lIGdldF9saXN0X2hlYWRfZW50cnkocG9zLCBoZWFkLCBtZW1iZXIpIAkJXAorCXBvcyA9IGxpc3RfZW50cnkoKGhlYWQpLT5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlcikKKwogc3RhdGljIHNzaXplX3QKIHN0b3JlX2ZjX3ByaXZhdGVfaG9zdF90Z3RpZF9iaW5kX3R5cGUoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwKIAljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHRyYW5zcG9ydF9jbGFzc190b19zaG9zdChjZGV2KTsKLQlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0LCAqbmV4dF9ycG9ydDsKKwlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OwogIAllbnVtIGZjX3RndGlkX2JpbmRpbmdfdHlwZSB2YWw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtODM0LDkgKzgzNywxMyBAQAogCS8qIGlmIGNoYW5naW5nIGJpbmQgdHlwZSwgcHVyZ2UgYWxsIHVudXNlZCBjb25zaXN0ZW50IGJpbmRpbmdzICovCiAJaWYgKHZhbCAhPSBmY19ob3N0X3RndGlkX2JpbmRfdHlwZShzaG9zdCkpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnBvcnQsIG5leHRfcnBvcnQsCi0JCQkJJmZjX2hvc3RfcnBvcnRfYmluZGluZ3Moc2hvc3QpLCBwZWVycykKKwkJd2hpbGUgKCFsaXN0X2VtcHR5KCZmY19ob3N0X3Jwb3J0X2JpbmRpbmdzKHNob3N0KSkpIHsKKwkJCWdldF9saXN0X2hlYWRfZW50cnkocnBvcnQsCisJCQkJJmZjX2hvc3RfcnBvcnRfYmluZGluZ3Moc2hvc3QpLCBwZWVycyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkJCWZjX3Jwb3J0X3Rlcm1pbmF0ZShycG9ydCk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmMKaW5kZXggZmY3MjRiYmUuLjFkMTQ1ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmMKQEAgLTYyOCwxNyArNjI4LDE2IEBACiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBkZXZfdG9fc2hvc3QocGFyZW50LT5kZXYucGFyZW50KTsKIAlzdHJ1Y3Qgc2FzX2hvc3RfYXR0cnMgKnNhc19ob3N0ID0gdG9fc2FzX2hvc3RfYXR0cnMoc2hvc3QpOwogCi0JdHJhbnNwb3J0X2Rlc3Ryb3lfZGV2aWNlKCZycGh5LT5kZXYpOworCXNjc2lfcmVtb3ZlX3RhcmdldChkZXYpOwogCi0Jc2NzaV9yZW1vdmVfdGFyZ2V0KCZycGh5LT5kZXYpOworCXRyYW5zcG9ydF9yZW1vdmVfZGV2aWNlKGRldik7CisJZGV2aWNlX2RlbChkZXYpOworCXRyYW5zcG9ydF9kZXN0cm95X2RldmljZShkZXYpOwogCiAJc3Bpbl9sb2NrKCZzYXNfaG9zdC0+bG9jayk7CiAJbGlzdF9kZWwoJnJwaHktPmxpc3QpOwogCXNwaW5fdW5sb2NrKCZzYXNfaG9zdC0+bG9jayk7CiAKLQl0cmFuc3BvcnRfcmVtb3ZlX2RldmljZShkZXYpOwotCWRldmljZV9kZWwoZGV2KTsKLQl0cmFuc3BvcnRfZGVzdHJveV9kZXZpY2UoZGV2KTsKIAlwdXRfZGV2aWNlKCZwYXJlbnQtPmRldik7CiB9CiBFWFBPUlRfU1lNQk9MKHNhc19ycGh5X2RlbGV0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2QuYyBiL2RyaXZlcnMvc2NzaS9zZC5jCmluZGV4IGRlNTY0YjMuLjlhMWRjMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZC5jCkBAIC0yMzUsNiArMjM1LDcgQEAKIAkJCXJldHVybiAwOwogCiAJCW1lbWNweShTQ3BudC0+Y21uZCwgcnEtPmNtZCwgc2l6ZW9mKFNDcG50LT5jbW5kKSk7CisJCVNDcG50LT5jbWRfbGVuID0gcnEtPmNtZF9sZW47CiAJCWlmIChycV9kYXRhX2RpcihycSkgPT0gV1JJVEUpCiAJCQlTQ3BudC0+c2NfZGF0YV9kaXJlY3Rpb24gPSBETUFfVE9fREVWSUNFOwogCQllbHNlIGlmIChycS0+ZGF0YV9sZW4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2cuYyBiL2RyaXZlcnMvc2NzaS9zZy5jCmluZGV4IDllYTQ3NjUuLmFkOTQzNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZy5jCkBAIC0xMDI3LDcgKzEwMjcsNyBAQAogCQlpZiAoc2RwLT5kZXRhY2hlZCkKIAkJCXJldHVybiAtRU5PREVWOwogCQlpZiAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJCWlmIChzZHAtPmRldmljZS0+aG9zdC0+c2hvc3Rfc3RhdGUgPT0gU0hPU1RfUkVDT1ZFUlkpCisJCQlpZiAoc2NzaV9ob3N0X2luX3JlY292ZXJ5KHNkcC0+ZGV2aWNlLT5ob3N0KSkKIAkJCQlyZXR1cm4gLUVCVVNZOwogCQl9IGVsc2UgaWYgKCFzY3NpX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMoc2RwLT5kZXZpY2UpKQogCQkJcmV0dXJuIC1FQlVTWTsKQEAgLTI4NDksOCArMjg0OSw3IEBACiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGVwOwogCXN0cnVjdCBzZ19wcm9jX2xlYWYgKiBsZWFmOwogCi0Jc2dfcHJvY19zZ3AgPSBjcmVhdGVfcHJvY19lbnRyeShzZ19wcm9jX3NnX2Rpcm5hbWUsCi0JCQkJCVNfSUZESVIgfCBTX0lSVUdPIHwgU19JWFVHTywgTlVMTCk7CisJc2dfcHJvY19zZ3AgPSBwcm9jX21rZGlyKHNnX3Byb2Nfc2dfZGlybmFtZSwgTlVMTCk7CiAJaWYgKCFzZ19wcm9jX3NncCkKIAkJcmV0dXJuIDE7CiAJZm9yIChrID0gMDsgayA8IG51bV9sZWF2ZXM7ICsraykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NyLmMgYi9kcml2ZXJzL3Njc2kvc3IuYwppbmRleCBjZTYzZmM4Li41NjE5MDFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3IuYworKysgYi9kcml2ZXJzL3Njc2kvc3IuYwpAQCAtMzI2LDYgKzMyNiw3IEBACiAJCQlyZXR1cm4gMDsKIAogCQltZW1jcHkoU0NwbnQtPmNtbmQsIHJxLT5jbWQsIHNpemVvZihTQ3BudC0+Y21uZCkpOworCQlTQ3BudC0+Y21kX2xlbiA9IHJxLT5jbWRfbGVuOwogCQlpZiAoIXJxLT5kYXRhX2xlbikKIAkJCVNDcG50LT5zY19kYXRhX2RpcmVjdGlvbiA9IERNQV9OT05FOwogCQllbHNlIGlmIChycV9kYXRhX2RpcihycSkgPT0gV1JJVEUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3QuYyBiL2RyaXZlcnMvc2NzaS9zdC5jCmluZGV4IGE5MzMwOGEuLmQwMDFjMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdC5jCkBAIC00MjA2LDYgKzQyMDYsNyBAQAogCQlyZXR1cm4gMDsKIAogCW1lbWNweShTQ3BudC0+Y21uZCwgcnEtPmNtZCwgc2l6ZW9mKFNDcG50LT5jbW5kKSk7CisJU0NwbnQtPmNtZF9sZW4gPSBycS0+Y21kX2xlbjsKIAogCWlmIChycV9kYXRhX2RpcihycSkgPT0gV1JJVEUpCiAJCVNDcG50LT5zY19kYXRhX2RpcmVjdGlvbiA9IERNQV9UT19ERVZJQ0U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jIGIvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYwppbmRleCAwZTIxZjU4Li41YzNjMDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfcGNpLmMKQEAgLTE1Miw2ICsxNTIsNyBAQAogCQlyYyA9IDQ7CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9IUF9ESVZBX1BPV0VSQkFSOgorCWNhc2UgUENJX0RFVklDRV9JRF9IUF9ESVZBX0hVUlJJQ0FORToKIAkJcmMgPSAxOwogCQlicmVhazsKIAl9CkBAIC0yMjYsOCArMjI3LDEwIEBACiAJfQogCiAJaXJxX2NvbmZpZyA9IDB4NDE7Ci0JaWYgKGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfUEFOQUNPTSkKKwlpZiAoZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9QQU5BQ09NIHx8CisJICAgIGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBQQ0lfU1VCVkVORE9SX0lEX0VYU1lTKSB7CiAJCWlycV9jb25maWcgPSAweDQzOworCX0KIAlpZiAoKGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfUExYKSAmJgogCSAgICAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9QTFhfUk9NVUxVUykpIHsKIAkJLyoKQEAgLTY2NCw2ICs2NjcsMTUgQEAKIAl7CiAJCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9QTFgsCiAJCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9QTFhfOTA1MCwKKwkJLnN1YnZlbmRvcgk9IFBDSV9TVUJWRU5ET1JfSURfRVhTWVMsCisJCS5zdWJkZXZpY2UJPSBQQ0lfU1VCREVWSUNFX0lEX0VYU1lTXzQwNTUsCisJCS5pbml0CQk9IHBjaV9wbHg5MDUwX2luaXQsCisJCS5zZXR1cAkJPSBwY2lfZGVmYXVsdF9zZXR1cCwKKwkJLmV4aXQJCT0gX19kZXZleGl0X3AocGNpX3BseDkwNTBfZXhpdCksCisJfSwKKwl7CisJCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9QTFgsCisJCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9QTFhfOTA1MCwKIAkJLnN1YnZlbmRvcgk9IFBDSV9TVUJWRU5ET1JfSURfS0VZU1BBTiwKIAkJLnN1YmRldmljZQk9IFBDSV9TVUJERVZJQ0VfSURfS0VZU1BBTl9TWDIsCiAJCS5pbml0CQk9IHBjaV9wbHg5MDUwX2luaXQsCkBAIC05MjcsNiArOTM5LDcgQEAKIAlwYm5fcGFuYWNvbSwKIAlwYm5fcGFuYWNvbTIsCiAJcGJuX3BhbmFjb200LAorCXBibl9leHN5c180MDU1LAogCXBibl9wbHhfcm9tdWx1cywKIAlwYm5fb3hzZW1pLAogCXBibl9pbnRlbF9pOTYwLApAQCAtMTI5Miw2ICsxMzA1LDEzIEBACiAJCS5yZWdfc2hpZnQJPSA3LAogCX0sCiAKKwlbcGJuX2V4c3lzXzQwNTVdID0geworCQkuZmxhZ3MJCT0gRkxfQkFTRTIsCisJCS5udW1fcG9ydHMJPSA0LAorCQkuYmFzZV9iYXVkCT0gMTE1MjAwLAorCQkudWFydF9vZmZzZXQJPSA4LAorCX0sCisKIAkvKiBJIHRoaW5rIHRoaXMgZW50cnkgaXMgYnJva2VuIC0gdGhlIGZpcnN0X29mZnNldCBsb29rcyB3cm9uZyAtLXJtayAqLwogCVtwYm5fcGx4X3JvbXVsdXNdID0gewogCQkuZmxhZ3MJCT0gRkxfQkFTRTIsCkBAIC0xODUzLDYgKzE4NzMsMTAgQEAKIAkJUENJX1NVQlZFTkRPUl9JRF9DSEFTRV9QQ0lSQVMsCiAJCVBDSV9TVUJERVZJQ0VfSURfQ0hBU0VfUENJUkFTOCwgMCwgMCwgCiAJCXBibl9iMl84XzQ2MDgwMCB9LAorCXsJUENJX1ZFTkRPUl9JRF9QTFgsIFBDSV9ERVZJQ0VfSURfUExYXzkwNTAsCisJCVBDSV9TVUJWRU5ET1JfSURfRVhTWVMsCisJCVBDSV9TVUJERVZJQ0VfSURfRVhTWVNfNDA1NSwgMCwgMCwKKwkJcGJuX2V4c3lzXzQwNTUgfSwKIAkvKgogCSAqIE1lZ2F3b2xmIFJvbXVsdXMgUENJIFNlcmlhbCBDYXJkLCBmcm9tIE1pa2UgSHVkc29uCiAJICogKEV4b3JheUBpc3lzLmNhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MF9wbnAuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfcG5wLmMKaW5kZXggNmIzMjFlOC4uNWQ4NjYwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MF9wbnAuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwX3BucC5jCkBAIC0yNzIsOCArMjcyLDEyIEBACiAJewkiU1VQMTQyMSIsCQkwCX0sCiAJLyogU3VwcmFFeHByZXNzIDMzLjYgRGF0YS9GYXggUG5QIG1vZGVtICovCiAJewkiU1VQMTU5MCIsCQkwCX0sCisJLyogU3VwcmFFeHByZXNzIDMzNmkgU3AgQVNWRCAqLworCXsJIlNVUDE2MjAiLAkJMAl9LAogCS8qIFN1cHJhRXhwcmVzcyAzMy42IERhdGEvRmF4IFBuUCBtb2RlbSAqLwogCXsJIlNVUDE3NjAiLAkJMAl9LAorCS8qIFN1cHJhRXhwcmVzcyA1NmkgU3AgSW50bCAqLworCXsJIlNVUDIxNzEiLAkJMAl9LAogCS8qIFBob2ViZSBNaWNybyAqLwogCS8qIFBob2ViZSBNaWNybyAzMy42IERhdGEgRmF4IDE0MzNWUUggUGx1ZyAmIFBsYXkgKi8KIAl7CSJURVgwMDExIiwJCTAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2NscHM3MTF4LmMgYi9kcml2ZXJzL3NlcmlhbC9jbHBzNzExeC5jCmluZGV4IDc4YzFmMzYuLjg3ZWYzNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2NscHM3MTF4LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvY2xwczcxMXguYwpAQCAtOTgsNyArOTgsNyBAQAogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBkZXZfaWQ7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnR0eTsKLQl1bnNpZ25lZCBpbnQgc3RhdHVzLCBjaCwgZmxnLCBpZ25vcmVkID0gMDsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzLCBjaCwgZmxnOwogCiAJc3RhdHVzID0gY2xwc19yZWFkbChTWVNGTEcocG9ydCkpOwogCXdoaWxlICghKHN0YXR1cyAmIFNZU0ZMR19VUlhGRSkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2lteC5jIGIvZHJpdmVycy9zZXJpYWwvaW14LmMKaW5kZXggNGM5ODVlNi4uYmRiNGU0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvaW14LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvaW14LmMKQEAgLTczLDcgKzczLDcgQEAKIAlzdHJ1Y3QgdWFydF9wb3J0CXBvcnQ7CiAJc3RydWN0IHRpbWVyX2xpc3QJdGltZXI7CiAJdW5zaWduZWQgaW50CQlvbGRfc3RhdHVzOwotCWludCB0eGlycSxyeGlycTsKKwlpbnQgdHhpcnEscnhpcnEscnRzaXJxOwogfTsKIAogLyoKQEAgLTE4MSw2ICsxODEsMjIgQEAKIAkJaW14X3RyYW5zbWl0X2J1ZmZlcihzcG9ydCk7CiB9CiAKK3N0YXRpYyBpcnFyZXR1cm5fdCBpbXhfcnRzaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGlteF9wb3J0ICpzcG9ydCA9IChzdHJ1Y3QgaW14X3BvcnQgKilkZXZfaWQ7CisJdW5zaWduZWQgaW50IHZhbCA9IFVTUjEoKHUzMilzcG9ydC0+cG9ydC5tZW1iYXNlKSZVU1IxX1JUU1M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzcG9ydC0+cG9ydC5sb2NrLCBmbGFncyk7CisKKwlVU1IxKCh1MzIpc3BvcnQtPnBvcnQubWVtYmFzZSkgPSBVU1IxX1JUU0Q7CisJdWFydF9oYW5kbGVfY3RzX2NoYW5nZSgmc3BvcnQtPnBvcnQsICEhdmFsKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnNwb3J0LT5wb3J0LmluZm8tPmRlbHRhX21zcl93YWl0KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwb3J0LT5wb3J0LmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKIHN0YXRpYyBpcnFyZXR1cm5fdCBpbXhfdHhpbnQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgaW14X3BvcnQgKnNwb3J0ID0gKHN0cnVjdCBpbXhfcG9ydCAqKWRldl9pZDsKQEAgLTM4MywxOCArMzk5LDI0IEBACiAJICovCiAJcmV0dmFsID0gcmVxdWVzdF9pcnEoc3BvcnQtPnJ4aXJxLCBpbXhfcnhpbnQsIDAsCiAJCQkgICAgIERSSVZFUl9OQU1FLCBzcG9ydCk7Ci0JaWYgKHJldHZhbCkgZ290byBlcnJvcl9vdXQyOworCWlmIChyZXR2YWwpIGdvdG8gZXJyb3Jfb3V0MTsKIAogCXJldHZhbCA9IHJlcXVlc3RfaXJxKHNwb3J0LT50eGlycSwgaW14X3R4aW50LCAwLAotCQkJICAgICAiaW14LXVhcnQiLCBzcG9ydCk7Ci0JaWYgKHJldHZhbCkgZ290byBlcnJvcl9vdXQxOworCQkJICAgICBEUklWRVJfTkFNRSwgc3BvcnQpOworCWlmIChyZXR2YWwpIGdvdG8gZXJyb3Jfb3V0MjsKKworCXJldHZhbCA9IHJlcXVlc3RfaXJxKHNwb3J0LT5ydHNpcnEsIGlteF9ydHNpbnQsIDAsCisJCQkgICAgIERSSVZFUl9OQU1FLCBzcG9ydCk7CisJaWYgKHJldHZhbCkgZ290byBlcnJvcl9vdXQzOworCXNldF9pcnFfdHlwZShzcG9ydC0+cnRzaXJxLCBJUlFUX0JPVEhFREdFKTsKIAogCS8qCiAJICogRmluYWxseSwgY2xlYXIgYW5kIGVuYWJsZSBpbnRlcnJ1cHRzCiAJICovCiAKKwlVU1IxKCh1MzIpc3BvcnQtPnBvcnQubWVtYmFzZSkgPSBVU1IxX1JUU0Q7CiAJVUNSMSgodTMyKXNwb3J0LT5wb3J0Lm1lbWJhc2UpIHw9Ci0JICAgICAgICAgICAgICAgICAoVUNSMV9UWE1QVFlFTiB8IFVDUjFfUlJEWUVOIHwgVUNSMV9VQVJURU4pOworCSAgICAgICAgICAgICAgICAgKFVDUjFfVFhNUFRZRU4gfCBVQ1IxX1JSRFlFTiB8IFVDUjFfUlRTREVOIHwgVUNSMV9VQVJURU4pOwogCiAJVUNSMigodTMyKXNwb3J0LT5wb3J0Lm1lbWJhc2UpIHw9IChVQ1IyX1JYRU4gfCBVQ1IyX1RYRU4pOwogCS8qCkBAIC00MDYsMTAgKzQyOCwxMSBAQAogCiAJcmV0dXJuIDA7CiAKLWVycm9yX291dDE6Ci0JZnJlZV9pcnEoc3BvcnQtPnJ4aXJxLCBzcG9ydCk7Ci1lcnJvcl9vdXQyOgorZXJyb3Jfb3V0MzoKIAlmcmVlX2lycShzcG9ydC0+dHhpcnEsIHNwb3J0KTsKK2Vycm9yX291dDI6CisJZnJlZV9pcnEoc3BvcnQtPnJ4aXJxLCBzcG9ydCk7CitlcnJvcl9vdXQxOgogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTQyNSw2ICs0NDgsNyBAQAogCS8qCiAJICogRnJlZSB0aGUgaW50ZXJydXB0cwogCSAqLworCWZyZWVfaXJxKHNwb3J0LT5ydHNpcnEsIHNwb3J0KTsKIAlmcmVlX2lycShzcG9ydC0+dHhpcnEsIHNwb3J0KTsKIAlmcmVlX2lycShzcG9ydC0+cnhpcnEsIHNwb3J0KTsKIApAQCAtNDMzLDcgKzQ1Nyw3IEBACiAJICovCiAKIAlVQ1IxKCh1MzIpc3BvcnQtPnBvcnQubWVtYmFzZSkgJj0KLQkgICAgICAgICAgICAgICAgIH4oVUNSMV9UWE1QVFlFTiB8IFVDUjFfUlJEWUVOIHwgVUNSMV9VQVJURU4pOworCSAgICAgICAgICAgICAgICAgfihVQ1IxX1RYTVBUWUVOIHwgVUNSMV9SUkRZRU4gfCBVQ1IxX1JUU0RFTiB8IFVDUjFfVUFSVEVOKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTUyMyw3ICs1NDcsNyBAQAogCSAqIGRpc2FibGUgaW50ZXJydXB0cyBhbmQgZHJhaW4gdHJhbnNtaXR0ZXIKIAkgKi8KIAlvbGRfdWNyMSA9IFVDUjEoKHUzMilzcG9ydC0+cG9ydC5tZW1iYXNlKTsKLQlVQ1IxKCh1MzIpc3BvcnQtPnBvcnQubWVtYmFzZSkgJj0gfihVQ1IxX1RYTVBUWUVOIHwgVUNSMV9SUkRZRU4pOworCVVDUjEoKHUzMilzcG9ydC0+cG9ydC5tZW1iYXNlKSAmPSB+KFVDUjFfVFhNUFRZRU4gfCBVQ1IxX1JSRFlFTiB8IFVDUjFfUlRTREVOKTsKIAogCXdoaWxlICggIShVU1IyKCh1MzIpc3BvcnQtPnBvcnQubWVtYmFzZSkgJiBVU1IyX1RYREMpKQogCQliYXJyaWVyKCk7CkBAIC02NDQsNiArNjY4LDcgQEAKIAl7CiAJLnR4aXJxICA9IFVBUlQxX01JTlRfVFgsCiAJLnJ4aXJxICA9IFVBUlQxX01JTlRfUlgsCisJLnJ0c2lycSA9IFVBUlQxX01JTlRfUlRTLAogCS5wb3J0CT0gewogCQkudHlwZQkJPSBQT1JUX0lNWCwKIAkJLmlvdHlwZQkJPSBTRVJJQUxfSU9fTUVNLApAQCAtNjU5LDYgKzY4NCw3IEBACiAJfSwgewogCS50eGlycSAgPSBVQVJUMl9NSU5UX1RYLAogCS5yeGlycSAgPSBVQVJUMl9NSU5UX1JYLAorCS5ydHNpcnEgPSBVQVJUMl9NSU5UX1JUUywKIAkucG9ydAk9IHsKIAkJLnR5cGUJCT0gUE9SVF9JTVgsCiAJCS5pb3R5cGUJCT0gU0VSSUFMX0lPX01FTSwKQEAgLTczOCw3ICs3NjQsNyBAQAogCiAJVUNSMSgodTMyKXNwb3J0LT5wb3J0Lm1lbWJhc2UpID0KIAkgICAgICAgICAgICAgICAgICAgKG9sZF91Y3IxIHwgVUNSMV9VQVJUQ0xLRU4gfCBVQ1IxX1VBUlRFTikKLQkgICAgICAgICAgICAgICAgICAgJiB+KFVDUjFfVFhNUFRZRU4gfCBVQ1IxX1JSRFlFTik7CisJICAgICAgICAgICAgICAgICAgICYgfihVQ1IxX1RYTVBUWUVOIHwgVUNSMV9SUkRZRU4gfCBVQ1IxX1JUU0RFTik7CiAJVUNSMigodTMyKXNwb3J0LT5wb3J0Lm1lbWJhc2UpID0gb2xkX3VjcjIgfCBVQ1IyX1RYRU47CiAKIAkvKgpAQCAtODYwLDcgKzg4Niw3IEBACiAJcmV0dXJuIHVhcnRfc2V0X29wdGlvbnMoJnNwb3J0LT5wb3J0LCBjbywgYmF1ZCwgcGFyaXR5LCBiaXRzLCBmbG93KTsKIH0KIAotZXh0ZXJuIHN0cnVjdCB1YXJ0X2RyaXZlciBpbXhfcmVnOworc3RhdGljIHN0cnVjdCB1YXJ0X2RyaXZlciBpbXhfcmVnOwogc3RhdGljIHN0cnVjdCBjb25zb2xlIGlteF9jb25zb2xlID0gewogCS5uYW1lCQk9ICJ0dHlTTVgiLAogCS53cml0ZQkJPSBpbXhfY29uc29sZV93cml0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2lvYzRfc2VyaWFsLmMgYi9kcml2ZXJzL3NlcmlhbC9pb2M0X3NlcmlhbC5jCmluZGV4IDBjNWM5NmEuLmY4OGZkZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2lvYzRfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvaW9jNF9zZXJpYWwuYwpAQCAtOTczLDE4ICs5NzMsNiBAQAogCQkJCXRoaXNfaXIgJj0gfnRoaXNfbWlyOwogCQkJfQogCQl9Ci0JCWlmICh0aGlzX2lyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAidW5rbm93biBJT0M0ICVzIGludGVycnVwdCAweCV4LCBzaW9faXIgPSAweCV4LCIKLQkJCQkiIHNpb19pZXMgPSAweCV4LCBvdGhlcl9pciA9IDB4JXggOiIKLQkJCQkib3RoZXJfaWVzID0gMHgleFxuIiwKLQkJCSAgICAgICAoaW50cl90eXBlID09IElPQzRfU0lPX0lOVFJfVFlQRSkgPyAic2lvIiA6Ci0JCQkgICAgICAgIm90aGVyIiwgdGhpc19pciwKLQkJCSAgICAgICByZWFkbCgmc29mdC0+aXNfaW9jNF9taXNjX2FkZHItPnNpb19pci5yYXcpLAotCQkJICAgICAgIHJlYWRsKCZzb2Z0LT5pc19pb2M0X21pc2NfYWRkci0+c2lvX2llcy5yYXcpLAotCQkJICAgICAgIHJlYWRsKCZzb2Z0LT5pc19pb2M0X21pc2NfYWRkci0+b3RoZXJfaXIucmF3KSwKLQkJCSAgICAgICByZWFkbCgmc29mdC0+aXNfaW9jNF9taXNjX2FkZHItPm90aGVyX2llcy5yYXcpKTsKLQkJfQogCX0KICNpZmRlZiBERUJVR19JTlRFUlJVUFRTCiAJewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYwppbmRleCBhM2NkMGVlLi4wNTg1YWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYwpAQCAtNzgxLDcgKzc4MSw3IEBACiAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQKLW1wYzUyeHhfdWFydF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHN0YXRlLCB1MzIgbGV2ZWwpCittcGM1Mnh4X3VhcnRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSwgdTMyIGxldmVsKQogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAoc3RydWN0IHVhcnRfcG9ydCAqKSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvcHhhLmMgYi9kcml2ZXJzL3NlcmlhbC9weGEuYwppbmRleCA2NzJiMzU5Li45MGMyYTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9weGEuYworKysgYi9kcml2ZXJzL3NlcmlhbC9weGEuYwpAQCAtNDk5LDcgKzQ5OSw3IEBACiAJLyoKIAkgKiBVcGRhdGUgdGhlIHBlci1wb3J0IHRpbWVvdXQuCiAJICovCi0JdWFydF91cGRhdGVfdGltZW91dChwb3J0LCB0ZXJtaW9zLT5jX2NmbGFnLCBxdW90KTsKKwl1YXJ0X3VwZGF0ZV90aW1lb3V0KHBvcnQsIHRlcm1pb3MtPmNfY2ZsYWcsIGJhdWQpOwogCiAJdXAtPnBvcnQucmVhZF9zdGF0dXNfbWFzayA9IFVBUlRfTFNSX09FIHwgVUFSVF9MU1JfVEhSRSB8IFVBUlRfTFNSX0RSOwogCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgSU5QQ0spCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zM2MyNDEwLmMgYi9kcml2ZXJzL3NlcmlhbC9zM2MyNDEwLmMKaW5kZXggYzM2MWM2Zi4uNTI2OTJhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3MzYzI0MTAuYwpAQCAtODIsOCArODIsNiBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CiAKLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotCiAvKiBzdHJ1Y3R1cmVzICovCiAKIHN0cnVjdCBzM2MyNHh4X3VhcnRfaW5mbyB7CkBAIC03NTMsOCArNzUxLDggQEAKIHsKIAlzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcgPSBzM2MyNHh4X3BvcnRfdG9fY2ZnKHBvcnQpOwogCXN0cnVjdCBzM2MyNHh4X3VhcnRfcG9ydCAqb3VycG9ydCA9IHRvX291cnBvcnQocG9ydCk7Ci0Jc3RydWN0IHMzYzI0eHhfdWFydF9jbGtzcmMgKmNsa3NyYzsKLQlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IHMzYzI0eHhfdWFydF9jbGtzcmMgKmNsa3NyYyA9IE5VTEw7CisJc3RydWN0IGNsayAqY2xrID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBiYXVkLCBxdW90OwogCXVuc2lnbmVkIGludCB1bGNvbjsKQEAgLTEwOTQsOCArMTA5Miw4IEBACiAKIHN0YXRpYyBpbnQgcHJvYmVfaW5kZXggPSAwOwogCi1pbnQgczNjMjR4eF9zZXJpYWxfcHJvYmUoc3RydWN0IGRldmljZSAqX2RldiwKLQkJCSBzdHJ1Y3QgczNjMjR4eF91YXJ0X2luZm8gKmluZm8pCitzdGF0aWMgaW50IHMzYzI0eHhfc2VyaWFsX3Byb2JlKHN0cnVjdCBkZXZpY2UgKl9kZXYsCisJCQkJc3RydWN0IHMzYzI0eHhfdWFydF9pbmZvICppbmZvKQogewogCXN0cnVjdCBzM2MyNHh4X3VhcnRfcG9ydCAqb3VycG9ydDsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7CkBAIC0xMTIyLDcgKzExMjAsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBzM2MyNHh4X3NlcmlhbF9yZW1vdmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgczNjMjR4eF9zZXJpYWxfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCiB7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHMzYzI0eHhfZGV2X3RvX3BvcnQoX2Rldik7CiAKQEAgLTExMzYsNyArMTEzNCw4IEBACiAKICNpZmRlZiBDT05GSUdfUE0KIAotaW50IHMzYzI0eHhfc2VyaWFsX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUsIHUzMiBsZXZlbCkKK3N0YXRpYyBpbnQgczNjMjR4eF9zZXJpYWxfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSwKKwkJCQkgIHUzMiBsZXZlbCkKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gczNjMjR4eF9kZXZfdG9fcG9ydChkZXYpOwogCkBAIC0xMTQ2LDcgKzExNDUsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgczNjMjR4eF9zZXJpYWxfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGxldmVsKQorc3RhdGljIGludCBzM2MyNHh4X3NlcmlhbF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgbGV2ZWwpCiB7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHMzYzI0eHhfZGV2X3RvX3BvcnQoZGV2KTsKIAlzdHJ1Y3QgczNjMjR4eF91YXJ0X3BvcnQgKm91cnBvcnQgPSB0b19vdXJwb3J0KHBvcnQpOwpAQCAtMTE2Nyw4ICsxMTY2LDggQEAKICNkZWZpbmUgczNjMjR4eF9zZXJpYWxfcmVzdW1lICBOVUxMCiAjZW5kaWYKIAotaW50IHMzYzI0eHhfc2VyaWFsX2luaXQoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwKLQkJCXN0cnVjdCBzM2MyNHh4X3VhcnRfaW5mbyAqaW5mbykKK3N0YXRpYyBpbnQgczNjMjR4eF9zZXJpYWxfaW5pdChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LAorCQkJICAgICAgIHN0cnVjdCBzM2MyNHh4X3VhcnRfaW5mbyAqaW5mbykKIHsKIAlkYmcoInMzYzI0eHhfc2VyaWFsX2luaXQoJXAsJXApXG4iLCBkcnYsIGluZm8pOwogCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoZHJ2KTsKQEAgLTEyMzcsNiArMTIzNiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzM2MyNDAwX3NlcmlhbF9kcnYgPSB7CiAJLm5hbWUJCT0gInMzYzI0MDAtdWFydCIsCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAogCS5wcm9iZQkJPSBzM2MyNDAwX3NlcmlhbF9wcm9iZSwKIAkucmVtb3ZlCQk9IHMzYzI0eHhfc2VyaWFsX3JlbW92ZSwKQEAgLTEzNDAsNiArMTM0MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzM2MyNDEwX3NlcmlhbF9kcnYgPSB7CiAJLm5hbWUJCT0gInMzYzI0MTAtdWFydCIsCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAogCS5wcm9iZQkJPSBzM2MyNDEwX3NlcmlhbF9wcm9iZSwKIAkucmVtb3ZlCQk9IHMzYzI0eHhfc2VyaWFsX3JlbW92ZSwKQEAgLTE1MDEsNiArMTUwMiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzM2MyNDQwX3NlcmlhbF9kcnYgPSB7CiAJLm5hbWUJCT0gInMzYzI0NDAtdWFydCIsCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAogCS5wcm9iZQkJPSBzM2MyNDQwX3NlcmlhbF9wcm9iZSwKIAkucmVtb3ZlCQk9IHMzYzI0eHhfc2VyaWFsX3JlbW92ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jcy5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMKaW5kZXggMWFlMGIzOC4uMmM3ZDNlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMKQEAgLTg1OSw2ICs4NTksNyBAQAogCVBDTUNJQV9NRkNfREVWSUNFX0NJU19NQU5GX0NBUkQoMSwgMHgwMTc1LCAweDAwMDAsICJEUDgzOTAzLmNpcyIpLAogCVBDTUNJQV9NRkNfREVWSUNFX0NJU19NQU5GX0NBUkQoMSwgMHgwMTAxLCAweDAwMzUsICIzQ1hFTTU1Ni5jaXMiKSwKIAlQQ01DSUFfTUZDX0RFVklDRV9DSVNfTUFORl9DQVJEKDEsIDB4MDEwMSwgMHgwMDNkLCAiM0NYRU01NTYuY2lzIiksCisJUENNQ0lBX0RFVklDRV9DSVNfTUFORl9DQVJEKDB4MDE5MiwgMHgwNzEwLCAiU1dfN3h4X1NFUi5jaXMiKSwJLyogU2llcnJhIFdpcmVsZXNzIEFDNzEwL0FDNzUwIEdQUlMgTmV0d29yayBBZGFwdGVyIFIxICovCiAJUENNQ0lBX0RFVklDRV9DSVNfUFJPRF9JRDEyKCJNdWx0aVRlY2giLCAiUENNQ0lBIDU2SyBEYXRhRmF4IiwgMHg4NDIwNDdlZSwgMHhjMmVmY2YwMywgIk1UNTYzNFpMWC5jaXMiKSwKIAlQQ01DSUFfREVWSUNFX0NJU19QUk9EX0lEMTIoIkFEVkFOVEVDSCIsICJDT01wYWQtMzIvODVCLTQiLCAweDk2OTEzYTg1LCAweGNlYzhmMTAyLCAiQ09NcGFkNC5jaXMiKSwKIAlQQ01DSUFfREVWSUNFX0NJU19QUk9EX0lEMTIzKCJBRFZBTlRFQ0giLCAiQ09NcGFkLTMyLzg1IiwgIjEuMCIsIDB4OTY5MTNhODUsIDB4OGZiZTkyYWUsIDB4MDg3N2I2MjcsICJDT01wYWQyLmNpcyIpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYwppbmRleCA1MTIyNjYzLi40MzA3NTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYwpAQCAtOTY3LDcgKzk2Nyw3IEBACiAjZW5kaWYKIAogCXNjaV9yZXF1ZXN0X2lycShzKTsKLQlzY2lfc3RhcnRfdHgocG9ydCwgMSk7CisJc2NpX3N0YXJ0X3R4KHBvcnQpOwogCXNjaV9zdGFydF9yeChwb3J0LCAxKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc3Vuc2FiLmMgYi9kcml2ZXJzL3NlcmlhbC9zdW5zYWIuYwppbmRleCBlOTcxMTU2Li5iYTkzODFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zdW5zYWIuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zdW5zYWIuYwpAQCAtMjc0LDcgKzI3NCw2IEBACiAJaWYgKHVhcnRfY2lyY19lbXB0eSh4bWl0KSB8fCB1YXJ0X3R4X3N0b3BwZWQoJnVwLT5wb3J0KSkgewogCQl1cC0+aW50ZXJydXB0X21hc2sxIHw9IFNBQjgyNTMyX0lNUjFfWFBSOwogCQl3cml0ZWIodXAtPmludGVycnVwdF9tYXNrMSwgJnVwLT5yZWdzLT53LmltcjEpOwotCQl1YXJ0X3dyaXRlX3dha2V1cCgmdXAtPnBvcnQpOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zdW5zdS5jIGIvZHJpdmVycy9zZXJpYWwvc3Vuc3UuYwppbmRleCA1OTU5ZTY3Li42NTZjMGU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zdW5zdS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3N1bnN1LmMKQEAgLTUxOCwxMSArNTE4LDcgQEAKIAogCXF1b3QgPSB1cC0+cG9ydC51YXJ0Y2xrIC8gKDE2ICogbmV3X2JhdWQpOwogCi0Jc3Bpbl91bmxvY2soJnVwLT5wb3J0LmxvY2spOwotCiAJc3Vuc3VfY2hhbmdlX3NwZWVkKCZ1cC0+cG9ydCwgdXAtPmNmbGFnLCAwLCBxdW90KTsKLQotCXNwaW5fbG9jaygmdXAtPnBvcnQubG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlY2VpdmVfa2JkX21zX2NoYXJzKHN0cnVjdCB1YXJ0X3N1bnN1X3BvcnQgKnVwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGlzX2JyZWFrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYyBiL2RyaXZlcnMvc2VyaWFsL3N1bnppbG9nLmMKaW5kZXggZDc1NDQ1Ny4uNzY1M2Q2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5jCkBAIC01MTcsMTAgKzUxNyw5IEBACiAJaWYgKHVwLT5wb3J0LmluZm8gPT0gTlVMTCkKIAkJZ290byBhY2tfdHhfaW50OwogCXhtaXQgPSAmdXAtPnBvcnQuaW5mby0+eG1pdDsKLQlpZiAodWFydF9jaXJjX2VtcHR5KHhtaXQpKSB7Ci0JCXVhcnRfd3JpdGVfd2FrZXVwKCZ1cC0+cG9ydCk7CisJaWYgKHVhcnRfY2lyY19lbXB0eSh4bWl0KSkKIAkJZ290byBhY2tfdHhfaW50OwotCX0KKwogCWlmICh1YXJ0X3R4X3N0b3BwZWQoJnVwLT5wb3J0KSkKIAkJZ290byBhY2tfdHhfaW50OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKaW5kZXggYjQyNjVhYS4uNDg3ZmY2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYwpAQCAtMzAsNiArMzAsOCBAQAogICogIFJldmlzaW9uIGhpc3RvcnkKICAqICAgIDIyLjEyLjE5OTkgICAwLjEgICBJbml0aWFsIHJlbGVhc2UgKHNwbGl0IGZyb20gcHJvY191c2IuYykKICAqICAgIDA0LjAxLjIwMDAgICAwLjIgICBUdXJuZWQgaW50byBpdHMgb3duIGZpbGVzeXN0ZW0KKyAqICAgIDMwLjA5LjIwMDUgICAwLjMgICBGaXggdXNlci10cmlnZ2VyYWJsZSBvb3BzIGluIGFzeW5jIFVSQiBkZWxpdmVyeQorICogICAgCQkJIChDQU4tMjAwNS0zMDU1KQogICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTU4LDcgKzYwLDggQEAKIHN0cnVjdCBhc3luYyB7CiAJc3RydWN0IGxpc3RfaGVhZCBhc3luY2xpc3Q7CiAJc3RydWN0IGRldl9zdGF0ZSAqcHM7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCXBpZF90IHBpZDsKKwl1aWRfdCB1aWQsIGV1aWQ7CiAJdW5zaWduZWQgaW50IHNpZ25yOwogCXVuc2lnbmVkIGludCBpZm51bTsKIAl2b2lkIF9fdXNlciAqdXNlcmJ1ZmZlcjsKQEAgLTI5MCw3ICsyOTMsOCBAQAogCQlzaW5mby5zaV9lcnJubyA9IGFzLT51cmItPnN0YXR1czsKIAkJc2luZm8uc2lfY29kZSA9IFNJX0FTWU5DSU87CiAJCXNpbmZvLnNpX2FkZHIgPSBhcy0+dXNlcnVyYjsKLQkJc2VuZF9zaWdfaW5mbyhhcy0+c2lnbnIsICZzaW5mbywgYXMtPnRhc2spOworCQlraWxsX3Byb2NfaW5mb19hc191aWQoYXMtPnNpZ25yLCAmc2luZm8sIGFzLT5waWQsIGFzLT51aWQsIAorCQkJCSAgICAgIGFzLT5ldWlkKTsKIAl9CiAgICAgICAgIHdha2VfdXAoJnBzLT53YWl0KTsKIH0KQEAgLTUyNiw3ICs1MzAsOSBAQAogCUlOSVRfTElTVF9IRUFEKCZwcy0+YXN5bmNfY29tcGxldGVkKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcy0+d2FpdCk7CiAJcHMtPmRpc2NzaWduciA9IDA7Ci0JcHMtPmRpc2N0YXNrID0gY3VycmVudDsKKwlwcy0+ZGlzY19waWQgPSBjdXJyZW50LT5waWQ7CisJcHMtPmRpc2NfdWlkID0gY3VycmVudC0+dWlkOworCXBzLT5kaXNjX2V1aWQgPSBjdXJyZW50LT5ldWlkOwogCXBzLT5kaXNjY29udGV4dCA9IE5VTEw7CiAJcHMtPmlmY2xhaW1lZCA9IDA7CiAJd21iKCk7CkBAIC05ODgsNyArOTk0LDkgQEAKIAkJYXMtPnVzZXJidWZmZXIgPSBOVUxMOwogCWFzLT5zaWduciA9IHV1cmItPnNpZ25yOwogCWFzLT5pZm51bSA9IGlmbnVtOwotCWFzLT50YXNrID0gY3VycmVudDsKKwlhcy0+cGlkID0gY3VycmVudC0+cGlkOworCWFzLT51aWQgPSBjdXJyZW50LT51aWQ7CisJYXMtPmV1aWQgPSBjdXJyZW50LT5ldWlkOwogCWlmICghKHV1cmItPmVuZHBvaW50ICYgVVNCX0RJUl9JTikpIHsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKGFzLT51cmItPnRyYW5zZmVyX2J1ZmZlciwgdXVyYi0+YnVmZmVyLCBhcy0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKSkgewogCQkJZnJlZV9hc3luYyhhcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCmluZGV4IGNiYjQ1MWQuLjYzODVkMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCkBAIC0yNDIsNyArMjQyLDYgQEAKIAljYXNlIEhDX1NUQVRFX1NVU1BFTkRFRDoKIAkJLyogbm8gRE1BIG9yIElSUXMgZXhjZXB0IHdoZW4gSEMgaXMgYWN0aXZlICovCiAJCWlmIChkZXYtPmN1cnJlbnRfc3RhdGUgPT0gUENJX0QwKSB7Ci0JCQlmcmVlX2lycSAoaGNkLT5pcnEsIGhjZCk7CiAJCQlwY2lfc2F2ZV9zdGF0ZSAoZGV2KTsKIAkJCXBjaV9kaXNhYmxlX2RldmljZSAoZGV2KTsKIAkJfQpAQCAtMzc0LDE0ICszNzMsNiBAQAogCiAJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JFU1VNSU5HOwogCWhjZC0+c2F3X2lycSA9IDA7Ci0JcmV0dmFsID0gcmVxdWVzdF9pcnEgKGRldi0+aXJxLCB1c2JfaGNkX2lycSwgU0FfU0hJUlEsCi0JCQkJaGNkLT5pcnFfZGVzY3IsIGhjZCk7Ci0JaWYgKHJldHZhbCA8IDApIHsKLQkJZGV2X2VyciAoaGNkLT5zZWxmLmNvbnRyb2xsZXIsCi0JCQkiY2FuJ3QgcmVzdG9yZSBJUlEgYWZ0ZXIgcmVzdW1lIVxuIik7Ci0JCXVzYl9oY19kaWVkIChoY2QpOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KIAogCXJldHZhbCA9IGhjZC0+ZHJpdmVyLT5yZXN1bWUgKGhjZCk7CiAJaWYgKCFIQ19JU19SVU5OSU5HIChoY2QtPnN0YXRlKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jIGIvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jCmluZGV4IDY0MGY0MWUuLmQwN2JiYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMKQEAgLTcxMyw3ICs3MTMsNyBAQAogCQkJc2luZm8uc2lfZXJybm8gPSBFUElQRTsKIAkJCXNpbmZvLnNpX2NvZGUgPSBTSV9BU1lOQ0lPOwogCQkJc2luZm8uc2lfYWRkciA9IGRzLT5kaXNjY29udGV4dDsKLQkJCXNlbmRfc2lnX2luZm8oZHMtPmRpc2NzaWduciwgJnNpbmZvLCBkcy0+ZGlzY3Rhc2spOworCQkJa2lsbF9wcm9jX2luZm9fYXNfdWlkKGRzLT5kaXNjc2lnbnIsICZzaW5mbywgZHMtPmRpc2NfcGlkLCBkcy0+ZGlzY191aWQsIGRzLT5kaXNjX2V1aWQpOwogCQl9CiAJfQogCXVzYmZzX3VwZGF0ZV9zcGVjaWFsKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYyBiL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCmluZGV4IGM0N2M4MDUyLi5mMWZiNjdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYwpAQCAtOTg3LDcgKzk4Nyw3IEBACiAKIAkJCS8qIHJlbW92ZSB0aGlzIGludGVyZmFjZSBpZiBpdCBoYXMgYmVlbiByZWdpc3RlcmVkICovCiAJCQlpbnRlcmZhY2UgPSBkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2ldOwotCQkJaWYgKCFrbGlzdF9ub2RlX2F0dGFjaGVkKCZpbnRlcmZhY2UtPmRldi5rbm9kZV9idXMpKQorCQkJaWYgKCFkZXZpY2VfaXNfcmVnaXN0ZXJlZCgmaW50ZXJmYWNlLT5kZXYpKQogCQkJCWNvbnRpbnVlOwogCQkJZGV2X2RiZyAoJmRldi0+ZGV2LCAidW5yZWdpc3RlcmluZyBpbnRlcmZhY2UgJXNcbiIsCiAJCQkJaW50ZXJmYWNlLT5kZXYuYnVzX2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCmluZGV4IDA4N2FmNzMuLjdkMTMxNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS91c2IuYwpAQCAtMzAzLDcgKzMwMyw3IEBACiAJLyogaWYgaW50ZXJmYWNlIHdhcyBhbHJlYWR5IGFkZGVkLCBiaW5kIG5vdzsgZWxzZSBsZXQKIAkgKiB0aGUgZnV0dXJlIGRldmljZV9hZGQoKSBiaW5kIGl0LCBieXBhc3NpbmcgcHJvYmUoKQogCSAqLwotCWlmIChrbGlzdF9ub2RlX2F0dGFjaGVkKCZkZXYtPmtub2RlX2J1cykpCisJaWYgKGRldmljZV9pc19yZWdpc3RlcmVkKGRldikpCiAJCWRldmljZV9iaW5kX2RyaXZlcihkZXYpOwogCiAJcmV0dXJuIDA7CkBAIC0zMzYsOCArMzM2LDggQEAKIAlpZiAoaWZhY2UtPmNvbmRpdGlvbiAhPSBVU0JfSU5URVJGQUNFX0JPVU5EKQogCQlyZXR1cm47CiAKLQkvKiByZWxlYXNlIG9ubHkgYWZ0ZXIgZGV2aWNlX2FkZCgpICovCi0JaWYgKGtsaXN0X25vZGVfYXR0YWNoZWQoJmRldi0+a25vZGVfYnVzKSkgeworCS8qIGRvbid0IHJlbGVhc2UgaWYgdGhlIGludGVyZmFjZSBoYXNuJ3QgYmVlbiBhZGRlZCB5ZXQgKi8KKwlpZiAoZGV2aWNlX2lzX3JlZ2lzdGVyZWQoZGV2KSkgewogCQlpZmFjZS0+Y29uZGl0aW9uID0gVVNCX0lOVEVSRkFDRV9VTkJJTkRJTkc7CiAJCWRldmljZV9yZWxlYXNlX2RyaXZlcihkZXYpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmggYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5oCmluZGV4IDgzZDQ4YzguLmU2NTA0ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmgKKysrIGIvZHJpdmVycy91c2IvY29yZS91c2IuaApAQCAtNTIsNyArNTIsOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgYXN5bmNfY29tcGxldGVkOwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7ICAgICAvKiB3YWtlIHVwIGlmIGEgcmVxdWVzdCBjb21wbGV0ZWQgKi8KIAl1bnNpZ25lZCBpbnQgZGlzY3NpZ25yOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqZGlzY3Rhc2s7CisJcGlkX3QgZGlzY19waWQ7CisJdWlkX3QgZGlzY191aWQsIGRpc2NfZXVpZDsKIAl2b2lkIF9fdXNlciAqZGlzY2NvbnRleHQ7CiAJdW5zaWduZWQgbG9uZyBpZmNsYWltZWQ7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmMKaW5kZXggMTUwNzczOC4uNzNmOGM5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5jCkBAIC00MjIsNyArNDIyLDcgQEAKIH0KIAogc3RhdGljIGludAotd3JpdGVfcGFja2V0KHZvbGF0aWxlIHUzMiAqdWRkciwgc3RydWN0IHB4YTJ4eF9yZXF1ZXN0ICpyZXEsIHVuc2lnbmVkIG1heCkKK3dyaXRlX3BhY2tldCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICp1ZGRyLCBzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QgKnJlcSwgdW5zaWduZWQgbWF4KQogewogCXU4CQkqYnVmOwogCXVuc2lnbmVkCWxlbmd0aCwgY291bnQ7CkBAIC0yNjAyLDcgKzI2MDIsNyBAQAogICogVkJVUyBJUlFzIHNob3VsZCBwcm9iYWJseSBiZSBpZ25vcmVkIHNvIHRoYXQgdGhlIFBYQSBkZXZpY2UganVzdCBhY3RzCiAgKiAiZGVhZCIgdG8gVVNCIGhvc3RzIHVudGlsIHN5c3RlbSByZXN1bWUuCiAgKi8KLXN0YXRpYyBpbnQgcHhhMnh4X3VkY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHN0YXRlLCB1MzIgbGV2ZWwpCitzdGF0aWMgaW50IHB4YTJ4eF91ZGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSwgdTMyIGxldmVsKQogewogCXN0cnVjdCBweGEyeHhfdWRjCSp1ZGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmgKaW5kZXggZDBiYzM5Ni4uYTU4ZjNlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5oCkBAIC02OSwxMSArNjksMTEgQEAKIAkgKiBVRERSID0gVURDIEVuZHBvaW50IERhdGEgUmVnaXN0ZXIgKHRoZSBmaWZvKQogCSAqIERSQ00gPSBETUEgUmVxdWVzdCBDaGFubmVsIE1hcAogCSAqLwotCXZvbGF0aWxlIHUzMgkJCQkqcmVnX3VkY2NzOwotCXZvbGF0aWxlIHUzMgkJCQkqcmVnX3ViY3I7Ci0Jdm9sYXRpbGUgdTMyCQkJCSpyZWdfdWRkcjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nCQkJKnJlZ191ZGNjczsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nCQkJKnJlZ191YmNyOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcJCQkqcmVnX3VkZHI7CiAjaWZkZWYgVVNFX0RNQQotCXZvbGF0aWxlIHUzMgkJCQkqcmVnX2RyY21yOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcJCQkqcmVnX2RyY21yOwogI2RlZmluZQlkcmNtcihuKSAgLnJlZ19kcmNtciA9ICYgRFJDTVIgIyMgbiAsCiAjZWxzZQogI2RlZmluZQlkcmNtcihuKSAgCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMKaW5kZXggNDFiYmFlOC4uZTE0MjA1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYwpAQCAtMzI2LDcgKzMyNiw4IEBACiAJCQkJCXVzYl9zZXR0b2dnbGUodWRldiwgZXAtPmVwbnVtLAogCQkJCQkJICAgICAgZXAtPm5leHRwaWQgPT0KIAkJCQkJCSAgICAgIFVTQl9QSURfT1VULAotCQkJCQkJICAgICAgUFREX0dFVF9UT0dHTEUocHRkKSBeIDEpOworCQkJCQkJICAgICAgUFREX0dFVF9UT0dHTEUocHRkKSk7CisJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoICs9IFBURF9HRVRfQ09VTlQocHRkKTsKIAkJCQl1cmItPnN0YXR1cyA9IGNjX3RvX2Vycm9yW1REX0RBVEFVTkRFUlJVTl07CiAJCQkJc3Bpbl91bmxvY2soJnVyYi0+bG9jayk7CiAJCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwNC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWxoN2E0MDQuYwppbmRleCA4MTc2MjBkLi44NTlhY2E3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWxoN2E0MDQuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwNC5jCkBAIC0xNyw4ICsxNyw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KIAogCiBleHRlcm4gaW50IHVzYl9kaXNhYmxlZCh2b2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcC5jCmluZGV4IDVjZGU3NmYuLmQ4ZjNiYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLW9tYXAuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKLSNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2lycXMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYwppbmRleCAzZDliY2Y3Li5kYTdkNTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zM2MyNDEwLmMKQEAgLTIwLDcgKzIwLDYgQEAKICovCiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi1jb250cm9sLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCmluZGV4IGQyYTFmZDQuLmQ0MmExNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYwpAQCAtNzgyLDYgKzc4Miw5IEBACiAvKiB1c2IgMS4xIHNheXMgbWF4IDkwJSBvZiBhIGZyYW1lIGlzIGF2YWlsYWJsZSBmb3IgcGVyaW9kaWMgdHJhbnNmZXJzLgogICogdGhpcyBkcml2ZXIgZG9lc24ndCBwcm9taXNlIHRoYXQgbXVjaCBzaW5jZSBpdCdzIGdvdCB0byBoYW5kbGUgYW4KICAqIElSUSBwZXIgcGFja2V0OyBpcnEgaGFuZGxpbmcgbGF0ZW5jaWVzIGFsc28gdXNlIHVwIHRoYXQgdGltZS4KKyAqCisgKiBOT1RFOiAgdGhlIHBlcmlvZGljIHNjaGVkdWxlIGlzIGEgc3BhcnNlIHRyZWUsIHdpdGggdGhlIGxvYWQgZm9yCisgKiBlYWNoIGJyYW5jaCBtaW5pbWl6ZWQuICBzZWUgZmlnIDMuNSBpbiB0aGUgT0hDSSBzcGVjIGZvciBleGFtcGxlLgogICovCiAjZGVmaW5lCU1BWF9QRVJJT0RJQ19MT0FECTUwMAkvKiBvdXQgb2YgMTAwMCB1c2VjICovCiAKQEAgLTg0Myw2ICs4NDYsNyBAQAogCWlmICghKHNsODExLT5wb3J0MSAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfRU5BQkxFKSkKIAkJCXx8ICFIQ19JU19SVU5OSU5HKGhjZC0+c3RhdGUpKSB7CiAJCXJldHZhbCA9IC1FTk9ERVY7CisJCWtmcmVlKGVwKTsKIAkJZ290byBmYWlsOwogCX0KIApAQCAtOTExLDggKzkxNSwxNiBAQAogCWNhc2UgUElQRV9JU09DSFJPTk9VUzoKIAljYXNlIFBJUEVfSU5URVJSVVBUOgogCQl1cmItPmludGVydmFsID0gZXAtPnBlcmlvZDsKLQkJaWYgKGVwLT5icmFuY2ggPCBQRVJJT0RJQ19TSVpFKQorCQlpZiAoZXAtPmJyYW5jaCA8IFBFUklPRElDX1NJWkUpIHsKKwkJCS8qIE5PVEU6ICB0aGUgcGhhc2UgaXMgY29ycmVjdCBoZXJlLCBidXQgdGhlIHZhbHVlCisJCQkgKiBuZWVkcyBvZmZzZXR0aW5nIGJ5IHRoZSB0cmFuc2ZlciBxdWV1ZSBkZXB0aC4KKwkJCSAqIEFsbCBjdXJyZW50IGRyaXZlcnMgaWdub3JlIHN0YXJ0X2ZyYW1lLCBzbyB0aGlzCisJCQkgKiBpcyB1bmxpa2VseSB0byBldmVyIG1hdHRlci4uLgorCQkJICovCisJCQl1cmItPnN0YXJ0X2ZyYW1lID0gKHNsODExLT5mcmFtZSAmIChQRVJJT0RJQ19TSVpFIC0gMSkpCisJCQkJCQkrIGVwLT5icmFuY2g7CiAJCQlicmVhazsKKwkJfQogCiAJCXJldHZhbCA9IGJhbGFuY2Uoc2w4MTEsIGVwLT5wZXJpb2QsIGVwLT5sb2FkKTsKIAkJaWYgKHJldHZhbCA8IDApCkBAIC0xMTIyLDcgKzExMzQsNyBAQAogCWRlc2MtPndIdWJDaGFyYWN0ZXJpc3RpY3MgPSAoX19mb3JjZSBfX3UxNiljcHVfdG9fbGUxNih0ZW1wKTsKIAogCS8qIHR3byBiaXRtYXBzOiAgcG9ydHMgcmVtb3ZhYmxlLCBhbmQgbGVnYWN5IFBvcnRQd3JDdHJsTWFzayAqLwotCWRlc2MtPmJpdG1hcFswXSA9IDEgPDwgMTsKKwlkZXNjLT5iaXRtYXBbMF0gPSAwIDw8IDE7CiAJZGVzYy0+Yml0bWFwWzFdID0gfjA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1jb3JlLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtY29yZS5jCmluZGV4IGE5OTg2NWMuLjQxZjkyYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLWNvcmUuYwpAQCAtMTcwMiwxMCArMTcwMiw3IEBACiAJCWlmICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIDMpICE9IDMpCQkvKiBOb3QgYW4gaW50ZXJydXB0IGVuZHBvaW50ICovCiAJCQljb250aW51ZTsKIAotCQkvKiBoYW5kbGUgcG90ZW50aWFsIGhpZ2hzcGVlZCBISUQgY29ycmVjdGx5ICovCiAJCWludGVydmFsID0gZW5kcG9pbnQtPmJJbnRlcnZhbDsKLQkJaWYgKGRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCi0JCQlpbnRlcnZhbCA9IDEgPDwgKGludGVydmFsIC0gMSk7CiAKIAkJLyogQ2hhbmdlIHRoZSBwb2xsaW5nIGludGVydmFsIG9mIG1pY2UuICovCiAJCWlmIChoaWQtPmNvbGxlY3Rpb24tPnVzYWdlID09IEhJRF9HRF9NT1VTRSAmJiBoaWRfbW91c2Vwb2xsX2ludGVydmFsID4gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3ZpY2FtLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS92aWNhbS5jCmluZGV4IDRhNTg1N2MuLjBiYzBiMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21lZGlhL3ZpY2FtLmMKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvdmljYW0uYwpAQCAtMTE0OCw3ICsxMTQ4LDcgQEAKIHN0YXRpYyB2b2lkCiB2aWNhbV9jcmVhdGVfcHJvY19yb290KHZvaWQpCiB7Ci0JdmljYW1fcHJvY19yb290ID0gY3JlYXRlX3Byb2NfZW50cnkoInZpZGVvL3ZpY2FtIiwgU19JRkRJUiwgMCk7CisJdmljYW1fcHJvY19yb290ID0gcHJvY19ta2RpcigidmlkZW8vdmljYW0iLCBOVUxMKTsKIAogCWlmICh2aWNhbV9wcm9jX3Jvb3QpCiAJCXZpY2FtX3Byb2Nfcm9vdC0+b3duZXIgPSBUSElTX01PRFVMRTsKQEAgLTExODEsNyArMTE4MSw3IEBACiAKIAlzcHJpbnRmKG5hbWUsICJ2aWRlbyVkIiwgY2FtLT52ZGV2Lm1pbm9yKTsKIAotCWNhbS0+cHJvY19kaXIgPSBjcmVhdGVfcHJvY19lbnRyeShuYW1lLCBTX0lGRElSLCB2aWNhbV9wcm9jX3Jvb3QpOworCWNhbS0+cHJvY19kaXIgPSBwcm9jX21rZGlyKG5hbWUsIHZpY2FtX3Byb2Nfcm9vdCk7CiAKIAlpZiAoICFjYW0tPnByb2NfZGlyICkKIAkJcmV0dXJuOyAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IHJldHVybiBhbiBlcnJvciBoZXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvcGVnYXN1cy5jIGIvZHJpdmVycy91c2IvbmV0L3BlZ2FzdXMuYwppbmRleCA3NDg0ZDM0Li42YTRmZmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9uZXQvcGVnYXN1cy5jCisrKyBiL2RyaXZlcnMvdXNiL25ldC9wZWdhc3VzLmMKQEAgLTY0OCw2ICs2NDgsMTMgQEAKIAl9CiAKIAkvKgorCSAqIElmIHRoZSBwYWNrZXQgaXMgdW5yZWFzb25hYmx5IGxvbmcsIHF1aWV0bHkgZHJvcCBpdCByYXRoZXIgdGhhbgorCSAqIGtlcm5lbCBwYW5pY2luZyBieSBjYWxsaW5nIHNrYl9wdXQuCisJICovCisJaWYgKHBrdF9sZW4gPiBQRUdBU1VTX01UVSkKKwkJZ290byBnb29uOworCisJLyoKIAkgKiBhdCB0aGlzIHBvaW50IHdlIGFyZSBzdXJlIHBlZ2FzdXMtPnJ4X3NrYiAhPSBOVUxMCiAJICogc28gd2UgZ28gYWhlYWQgYW5kIHBhc3MgdXAgdGhlIHBhY2tldC4KIAkgKi8KQEAgLTg4NiwxNSArODkzLDE3IEBACiAJX191OCBkYXRhWzJdOwogCiAJcmVhZF9lcHJvbV93b3JkKHBlZ2FzdXMsIDQsIChfX3UxNiAqKSBkYXRhKTsKLQlpZiAoZGF0YVsxXSA8IDB4ODApIHsKLQkJaWYgKG5ldGlmX21zZ190aW1lcihwZWdhc3VzKSkKLQkJCWRldl9pbmZvKCZwZWdhc3VzLT5pbnRmLT5kZXYsCi0JCQkJImludHIgaW50ZXJ2YWwgY2hhbmdlZCBmcm9tICV1bXMgdG8gJXVtc1xuIiwKLQkJCQlkYXRhWzFdLCAweDgwKTsKLQkJZGF0YVsxXSA9IDB4ODA7Ci0jaWZkZWYJUEVHQVNVU19XUklURV9FRVBST00KLQkJd3JpdGVfZXByb21fd29yZChwZWdhc3VzLCA0LCAqKF9fdTE2ICopIGRhdGEpOworCWlmIChwZWdhc3VzLT51c2ItPnNwZWVkICE9IFVTQl9TUEVFRF9ISUdIKSB7CisJCWlmIChkYXRhWzFdIDwgMHg4MCkgeworCQkJaWYgKG5ldGlmX21zZ190aW1lcihwZWdhc3VzKSkKKwkJCQlkZXZfaW5mbygmcGVnYXN1cy0+aW50Zi0+ZGV2LCAiaW50ciBpbnRlcnZhbCAiCisJCQkJCSJjaGFuZ2VkIGZyb20gJXVtcyB0byAldW1zXG4iLAorCQkJCQlkYXRhWzFdLCAweDgwKTsKKwkJCWRhdGFbMV0gPSAweDgwOworI2lmZGVmIFBFR0FTVVNfV1JJVEVfRUVQUk9NCisJCQl3cml0ZV9lcHJvbV93b3JkKHBlZ2FzdXMsIDQsICooX191MTYgKikgZGF0YSk7CiAjZW5kaWYKKwkJfQogCX0KIAlwZWdhc3VzLT5pbnRyX2ludGVydmFsID0gZGF0YVsxXTsKIH0KQEAgLTkwNCw4ICs5MTMsOSBAQAogCXBlZ2FzdXNfdCAqcGVnYXN1cyA9IG5ldGRldl9wcml2KG5ldCk7CiAJdTE2IHRtcDsKIAotCWlmIChyZWFkX21paV93b3JkKHBlZ2FzdXMsIHBlZ2FzdXMtPnBoeSwgTUlJX0JNU1IsICZ0bXApKQorCWlmICghcmVhZF9taWlfd29yZChwZWdhc3VzLCBwZWdhc3VzLT5waHksIE1JSV9CTVNSLCAmdG1wKSkKIAkJcmV0dXJuOworCiAJaWYgKHRtcCAmIEJNU1JfTFNUQVRVUykKIAkJbmV0aWZfY2Fycmllcl9vbihuZXQpOwogCWVsc2UKQEAgLTEzNTUsNiArMTM2NSw3IEBACiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmcGVnYXN1cy0+Y2Fycmllcl9jaGVjayk7CiAJdW5yZWdpc3Rlcl9uZXRkZXYocGVnYXN1cy0+bmV0KTsKIAl1c2JfcHV0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpKTsKKwl1bmxpbmtfYWxsX3VyYnMocGVnYXN1cyk7CiAJZnJlZV9hbGxfdXJicyhwZWdhc3VzKTsKIAlmcmVlX3NrYl9wb29sKHBlZ2FzdXMpOwogCWlmIChwZWdhc3VzLT5yeF9za2IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvYWlycHJpbWUuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJwcmltZS5jCmluZGV4IGE0Y2UwMDAuLjkyNmQ0YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJwcmltZS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJwcmltZS5jCkBAIC0xNiw3ICsxNiw4IEBACiAjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7Ci0JeyBVU0JfREVWSUNFKDB4ZjNkLCAweDAxMTIpIH0sCisJeyBVU0JfREVWSUNFKDB4ZjNkLCAweDAxMTIpIH0sICAvKiBBaXJQcmltZSBDRE1BIFdpcmVsZXNzIFBDIENhcmQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNDEwLCAweDExMTApIH0sIC8qIE5vdmF0ZWwgV2lyZWxlc3MgTWVybGluIENETUEgKi8KIAl7IH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKaW5kZXggNGU0MzRjYi4uNWE4NjMxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKQEAgLTE4NDYsMTAgKzE4NDYsMTIgQEAKIAl9IGVsc2UgewogCQkvKiBzZXQgdGhlIGJhdWRyYXRlIGRldGVybWluZWQgYmVmb3JlICovCiAJCWlmIChjaGFuZ2Vfc3BlZWQocG9ydCkpIHsKLQkJCWVycigiJXMgdXJiIGZhaWxlZCB0byBzZXQgYmF1cmRyYXRlIiwgX19GVU5DVElPTl9fKTsKKwkJCWVycigiJXMgdXJiIGZhaWxlZCB0byBzZXQgYmF1ZHJhdGUiLCBfX0ZVTkNUSU9OX18pOwogCQl9Ci0JCS8qIEVuc3VyZSAgUlRTIGFuZCBEVFIgYXJlIHJhaXNlZCAqLwotCQlzZXRfbWN0cmwocG9ydCwgVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKKwkJLyogRW5zdXJlIFJUUyBhbmQgRFRSIGFyZSByYWlzZWQgd2hlbiBiYXVkcmF0ZSBjaGFuZ2VkIGZyb20gMCAqLworCQlpZiAoKG9sZF90ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVUQpID09IEIwKSB7CisJCQlzZXRfbWN0cmwocG9ydCwgVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKKwkJfQogCX0KIAogCS8qIFNldCBmbG93IGNvbnRyb2wgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCmluZGV4IGRkZGU1ZmIuLjVmN2QzMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwpAQCAtMjIzLDcgKzIyMyw3IEBACiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CiAKIAlpZiAoc2VyaWFsLT5udW1fYnVsa19vdXQpIHsKLQkJaWYgKHBvcnQtPndyaXRlX3VyYl9idXN5KQorCQlpZiAoIShwb3J0LT53cml0ZV91cmJfYnVzeSkpCiAJCQlyb29tID0gcG9ydC0+YnVsa19vdXRfc2l6ZTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwppbmRleCA5MmQwZjkyNWQuLjQ5ODllNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKQEAgLTI1LDYgKzI1LDkgQEAKICAgMjAwNS0wNi0yMCAgdjAuNC4xIGFkZCBtaXNzaW5nIGJyYWNlcyA6LS8KICAgICAgICAgICAgICAgICAgICAgIGtpbGxlZCBlbmQtb2YtbGluZSB3aGl0ZXNwYWNlCiAgIDIwMDUtMDctMTUgIHYwLjQuMiByZW5hbWUgV0xBTiBwcm9kdWN0IHRvIEZVU0lPTiwgYWRkIEZVU0lPTjIKKyAgMjAwNS0wOS0xMCAgdjAuNC4zIGFkZGVkIEhVQVdFSSBFNjAwIGNhcmQgYW5kIEF1ZGlvdm94IEFpckNhcmQKKyAgMjAwNS0wOS0yMCAgdjAuNC40IGluY3JlYXNlZCByZWN2IGJ1ZmZlciBzaXplOiB0aGUgY2FyZCBzb21ldGltZXMKKyAgICAgICAgICAgICAgICAgICAgIHdhbnRzIHRvIHNlbmQgPjIwMDAgYnl0ZXMuCiAKICAgV29yayBzcG9uc29yZWQgYnk6IFNpZ29zIEdtYkgsIEdlcm1hbnkgPGluZm9Ac2lnb3MuZGU+CiAKQEAgLTcxLDE1ICs3NCwyMSBAQAogCiAvKiBWZW5kb3IgYW5kIHByb2R1Y3QgSURzICovCiAjZGVmaW5lIE9QVElPTl9WRU5ET1JfSUQJCQkweDBBRjAKKyNkZWZpbmUgSFVBV0VJX1ZFTkRPUl9JRAkJCTB4MTJEMQorI2RlZmluZSBBVURJT1ZPWF9WRU5ET1JfSUQJCQkweDBGM0QKIAogI2RlZmluZSBPUFRJT05fUFJPRFVDVF9PTEQJCTB4NTAwMAogI2RlZmluZSBPUFRJT05fUFJPRFVDVF9GVVNJT04JMHg2MDAwCiAjZGVmaW5lIE9QVElPTl9QUk9EVUNUX0ZVU0lPTjIJMHg2MzAwCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0U2MDAgICAgIDB4MTAwMQorI2RlZmluZSBBVURJT1ZPWF9QUk9EVUNUX0FJUkNBUkQgMHgwMTEyCiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBvcHRpb25faWRzW10gPSB7CiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX09MRCkgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRlVTSU9OKSB9LAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9GVVNJT04yKSB9LAorCXsgVVNCX0RFVklDRShIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FNjAwKSB9LAorCXsgVVNCX0RFVklDRShBVURJT1ZPWF9WRU5ET1JfSUQsIEFVRElPVk9YX1BST0RVQ1RfQUlSQ0FSRCkgfSwKIAl7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKQEAgLTEzMiw3ICsxNDEsNyBAQAogCiAjZGVmaW5lIE5fSU5fVVJCIDQKICNkZWZpbmUgTl9PVVRfVVJCIDEKLSNkZWZpbmUgSU5fQlVGTEVOIDEwMjQKKyNkZWZpbmUgSU5fQlVGTEVOIDQwOTYKICNkZWZpbmUgT1VUX0JVRkxFTiAxMjgKIAogc3RydWN0IG9wdGlvbl9wb3J0X3ByaXZhdGUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9LY29uZmlnIGIvZHJpdmVycy92aWRlby9LY29uZmlnCmluZGV4IDMxZWUxM2UuLjFjZDk0MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKQEAgLTY1MCw2ICs2NTAsNyBAQAogCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCiAJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKKwlzZWxlY3QgRkJfU09GVF9DVVJTT1IKIAloZWxwCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBncmFwaGljcyBib2FyZHMgd2l0aCB0aGUgblZpZGlhIGNoaXBzLCBUTlQKIAkgIGFuZCBuZXdlci4gRm9yIHZlcnkgb2xkIGNoaXBzZXRzLCBzdWNoIGFzIHRoZSBSSVZBMTI4LCB0aGVuIHVzZQpAQCAtNzY3LDYgKzc2OCw3IEBACiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCXNlbGVjdCBGQl9TT0ZUX0NVUlNPUgogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBvbi1ib2FyZCBncmFwaGljcyBidWlsdCBpbiB0byB0aGUgSW50ZWwKICAgICAgICAgICA4MzBNLzg0NUcvODUyR00vODU1R00vODY1RyBjaGlwc2V0cy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYXNlLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFzZS5jCmluZGV4IDA0NmI0NzguLjhhMjRhNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYXNlLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2Jhc2UuYwpAQCAtNDc1LDcgKzQ3NSw3IEBACiAJICovCiAKIAkvKiBGbHVzaCBQQ0kgYnVmZmVycyA/ICovCi0JdG1wID0gSU5SRUcoREVWSUNFX0lEKTsKKwl0bXAgPSBJTlJFRzE2KERFVklDRV9JRCk7CiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fcG0uYyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9wbS5jCmluZGV4IDU5YTFiNmYuLjA5N2Q2NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9wbS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9wbS5jCkBAIC02Miw5ICs2Miw5IEBACiAgICAgICAgICAgICAgICAgT1VUUExMKHBsbFNDTEtfQ05UTCwgdG1wKTsKIAkJcmV0dXJuOwogCX0KLQkvKiBSVjM1MCAoTTEwKSAqLworCS8qIFJWMzUwIChNMTAvTTExKSAqLwogCWlmIChyaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1JWMzUwKSB7Ci0gICAgICAgICAgICAgICAgLyogZm9yIFJWMzUwL00xMCwgbm8gZGVsYXlzIGFyZSByZXF1aXJlZC4gKi8KKyAgICAgICAgICAgICAgICAvKiBmb3IgUlYzNTAvTTEwL00xMSwgbm8gZGVsYXlzIGFyZSByZXF1aXJlZC4gKi8KICAgICAgICAgICAgICAgICB0bXAgPSBJTlBMTChwbGxTQ0xLX0NOVEwyKTsKICAgICAgICAgICAgICAgICB0bXAgfD0gKFNDTEtfQ05UTDJfX1IzMDBfRk9SQ0VfVENMIHwKICAgICAgICAgICAgICAgICAgICAgICAgIFNDTEtfQ05UTDJfX1IzMDBfRk9SQ0VfR0EgIHwKQEAgLTI0OCw3ICsyNDgsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JLyogTTEwICovCisJLyogTTEwL00xMSAqLwogCWlmIChyaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1JWMzUwKSB7CiAJCXRtcCA9IElOUExMKHBsbFNDTEtfQ05UTDIpOwogCQl0bXAgJj0gfihTQ0xLX0NOVEwyX19SMzAwX0ZPUkNFX1RDTCB8CkBAIC0xMTU1LDcgKzExNTUsNyBAQAogCU9VVFJFRyggQ1JUQ19HRU5fQ05UTCwgIChjcnRjR2VuQ250bCB8IENSVENfR0VOX0NOVExfX0NSVENfRElTUF9SRVFfRU5fQikgKTsKIAlPVVRSRUcoIENSVEMyX0dFTl9DTlRMLCAoY3J0Y0dlbkNudGwyIHwgQ1JUQzJfR0VOX0NOVExfX0NSVEMyX0RJU1BfUkVRX0VOX0IpICk7CiAgIAotCS8qIFRoaXMgaXMgdGhlIGNvZGUgZm9yIHRoZSBBbHVtaW5pdW0gUG93ZXJCb29rcyBNMTAgKi8KKwkvKiBUaGlzIGlzIHRoZSBjb2RlIGZvciB0aGUgQWx1bWluaXVtIFBvd2VyQm9va3MgTTEwIC8gaUJvb2tzIE0xMSAqLwogCWlmIChyaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1JWMzUwKSB7CiAJCXUzMiBzZHJhbV9tb2RlX3JlZyA9IHJpbmZvLT5zYXZlX3JlZ3NbMzVdOwogCQlzdGF0aWMgdTMyIGRlZmF1bHRfbXJ0YWJsZVtdID0KQEAgLTI3NDEsOSArMjc0MSwxMSBAQAogCQkJcmluZm8tPnBtX21vZGUgfD0gcmFkZW9uX3BtX2QyOwogCiAJCS8qIFdlIGNhbiByZXN0YXJ0IEphc3BlciAoTTEwIGNoaXAgaW4gYWxib29rcyksIEJsdWVTdG9uZSAoNzUwMCBjaGlwCi0JCSAqIGluIHNvbWUgZGVza3RvcCBHNHMpLCBhbmQgVmlhIChNOSsgY2hpcCBvbiBpQm9vayBHNCkKKwkJICogaW4gc29tZSBkZXNrdG9wIEc0cyksIFZpYSAoTTkrIGNoaXAgb24gaUJvb2sgRzQpIGFuZAorCQkgKiBTbm93eSAoTTExIGNoaXAgb24gaUJvb2sgRzQgbWFudWZhY3R1cmVkIGFmdGVyIEp1bHkgMjAwNSkKIAkJICovCi0JCWlmICghc3RyY21wKHJpbmZvLT5vZl9ub2RlLT5uYW1lLCAiQVRZLEphc3BlclBhcmVudCIpKSB7CisJCWlmICghc3RyY21wKHJpbmZvLT5vZl9ub2RlLT5uYW1lLCAiQVRZLEphc3BlclBhcmVudCIpIHx8CisJCSAgICAhc3RyY21wKHJpbmZvLT5vZl9ub2RlLT5uYW1lLCAiQVRZLFNub3d5UGFyZW50IikpIHsKIAkJCXJpbmZvLT5yZWluaXRfZnVuYyA9IHJhZGVvbl9yZWluaXRpYWxpemVfTTEwOwogCQkJcmluZm8tPnBtX21vZGUgfD0gcmFkZW9uX3BtX29mZjsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uZmIuaCBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbmZiLmgKaW5kZXggNjU5YmM5Zi4uMDFiOGIyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uZmIuaAorKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25mYi5oCkBAIC0zOTUsNiArMzk1LDggQEAKIAogI2RlZmluZSBJTlJFRzgoYWRkcikJCXJlYWRiKChyaW5mby0+bW1pb19iYXNlKSthZGRyKQogI2RlZmluZSBPVVRSRUc4KGFkZHIsdmFsKQl3cml0ZWIodmFsLCAocmluZm8tPm1taW9fYmFzZSkrYWRkcikKKyNkZWZpbmUgSU5SRUcxNihhZGRyKQkJcmVhZHcoKHJpbmZvLT5tbWlvX2Jhc2UpK2FkZHIpCisjZGVmaW5lIE9VVFJFRzE2KGFkZHIsdmFsKQl3cml0ZXcodmFsLCAocmluZm8tPm1taW9fYmFzZSkrYWRkcikKICNkZWZpbmUgSU5SRUcoYWRkcikJCXJlYWRsKChyaW5mby0+bW1pb19iYXNlKSthZGRyKQogI2RlZmluZSBPVVRSRUcoYWRkcix2YWwpCXdyaXRlbCh2YWwsIChyaW5mby0+bW1pb19iYXNlKSthZGRyKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS94bGluaXQuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L3hsaW5pdC5jCmluZGV4IDkyNjQzYWYuLmEwODVjYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L3hsaW5pdC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L3hsaW5pdC5jCkBAIC0xNzQsNyArMTc0LDcgQEAKIAljb25zdCBzdHJ1Y3QgeGxfY2FyZF9jZmdfdCAqIGNhcmQgPSAmY2FyZF9jZmdbeGxfY2FyZF07CiAJc3RydWN0IGF0eWZiX3BhciAqcGFyID0gKHN0cnVjdCBhdHlmYl9wYXIgKikgaW5mby0+cGFyOwogCXVuaW9uIGF0eV9wbGwgcGxsOwotCWludCBpLCBlcnI7CisJaW50IGVycjsKIAl1MzIgdGVtcDsKIAkKIAlhdHlfc3RfOChDT05GSUdfU1RBVDAsIDB4ODUsIHBhcik7CkBAIC0yNTIsOSArMjUyLDE0IEBACiAJYXR5X3N0X2xlMzIoMHhFQywgMHgwMDAwMDAwMCwgcGFyKTsKIAlhdHlfc3RfbGUzMigweEZDLCAweDAwMDAwMDAwLCBwYXIpOwogCi0JZm9yIChpPTA7IGk8c2l6ZW9mKGxjZF90YmwpL3NpemVvZihsY2RfdGJsX3QpOyBpKyspIHsKLQkJYXR5X3N0X2xjZChsY2RfdGJsW2ldLmxjZF9yZWcsIGxjZF90YmxbaV0udmFsLCBwYXIpOworI2lmIGRlZmluZWQgKENPTkZJR19GQl9BVFlfR0VORVJJQ19MQ0QpCisJeworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsY2RfdGJsKTsgaSsrKQorCQkJYXR5X3N0X2xjZChsY2RfdGJsW2ldLmxjZF9yZWcsIGxjZF90YmxbaV0udmFsLCBwYXIpOwogCX0KKyNlbmRpZgogCiAJYXR5X3N0X2xlMTYoQ09ORklHX1NUQVQwLCAweDAwQTQsIHBhcik7CiAJbWRlbGF5KDEwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9ibC5jCmluZGV4IGEzMjgxNzYuLjNjNzJjNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2JsLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY29yZ2lfYmwuYwpAQCAtMTksMTcgKzE5LDE3IEBACiAjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC9iYWNrbGlnaHQuaD4KIAotI2luY2x1ZGUgPGFzbS9hcmNoLXB4YS9jb3JnaS5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zY29vcC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3NoYXJwc2wuaD4KIAotI2RlZmluZSBDT1JHSV9NQVhfSU5URU5TSVRZIAkJMHgzZQogI2RlZmluZSBDT1JHSV9ERUZBVUxUX0lOVEVOU0lUWQkJMHgxZgotI2RlZmluZSBDT1JHSV9MSU1JVF9NQVNLCQkJMHgwYgorI2RlZmluZSBDT1JHSV9MSU1JVF9NQVNLCQkweDBiCiAKIHN0YXRpYyBpbnQgY29yZ2libF9wb3dlcm1vZGUgPSBGQl9CTEFOS19VTkJMQU5LOwogc3RhdGljIGludCBjdXJyZW50X2ludGVuc2l0eSA9IDA7CiBzdGF0aWMgaW50IGNvcmdpYmxfbGltaXQgPSAwOworc3RhdGljIHZvaWQgKCpjb3JnaWJsX21hY2hfc2V0X2ludGVuc2l0eSkoaW50IGludGVuc2l0eSk7CiBzdGF0aWMgc3BpbmxvY2tfdCBibF9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyBjb3JnaWJsX2RhdGE7CiAKIHN0YXRpYyB2b2lkIGNvcmdpYmxfc2VuZF9pbnRlbnNpdHkoaW50IGludGVuc2l0eSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYwppbmRleCAwNzA1Y2Q3Li44MDlmZWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jCkBAIC01NjUsNyArNTY1LDExIEBACiAJCXNjcl9tZW1jcHl3KCh1MTYgKikgYy0+dmNfb3JpZ2luLCAodTE2ICopIGMtPnZjX3NjcmVlbmJ1ZiwKIAkJCSAgICBjLT52Y19zY3JlZW5idWZfc2l6ZSA+IHZnYV92cmFtX3NpemUgPwogCQkJCXZnYV92cmFtX3NpemUgOiBjLT52Y19zY3JlZW5idWZfc2l6ZSk7Ci0JCXZnYWNvbl9kb3Jlc2l6ZShjLCBjLT52Y19jb2xzLCBjLT52Y19yb3dzKTsKKwkJaWYgKCEodmdhX3ZpZGVvX251bV9jb2x1bW5zICUgMikgJiYKKwkJICAgIHZnYV92aWRlb19udW1fY29sdW1ucyA8PSBPUklHX1ZJREVPX0NPTFMgJiYKKwkJICAgIHZnYV92aWRlb19udW1fbGluZXMgPD0gKE9SSUdfVklERU9fTElORVMgKgorCQkJdmdhX2RlZmF1bHRfZm9udF9oZWlnaHQpIC8gYy0+dmNfZm9udC5oZWlnaHQpCisJCQl2Z2Fjb25fZG9yZXNpemUoYywgYy0+dmNfY29scywgYy0+dmNfcm93cyk7CiAJfQogCiAJcmV0dXJuIDA7CQkvKiBSZWRyYXdpbmcgbm90IG5lZWRlZCAqLwpAQCAtMTAyMCw4ICsxMDI0LDExIEBACiBzdGF0aWMgaW50IHZnYWNvbl9yZXNpemUoc3RydWN0IHZjX2RhdGEgKmMsIHVuc2lnbmVkIGludCB3aWR0aCwKIAkJCQl1bnNpZ25lZCBpbnQgaGVpZ2h0KQogewotCWlmICh3aWR0aCAlIDIgfHwgd2lkdGggPiBPUklHX1ZJREVPX0NPTFMgfHwgaGVpZ2h0ID4gT1JJR19WSURFT19MSU5FUykKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHdpZHRoICUgMiB8fCB3aWR0aCA+IE9SSUdfVklERU9fQ09MUyB8fAorCSAgICBoZWlnaHQgPiAoT1JJR19WSURFT19MSU5FUyAqIHZnYV9kZWZhdWx0X2ZvbnRfaGVpZ2h0KS8KKwkgICAgYy0+dmNfZm9udC5oZWlnaHQpCisJCS8qIGxldCBzdmdhdGV4dG1vZGUgdGlua2VyIHdpdGggdmlkZW8gdGltaW5ncyAqLworCQlyZXR1cm4gMDsKIAogCWlmIChDT05fSVNfVklTSUJMRShjKSAmJiAhdmdhX2lzX2dmeCkgLyogd2hvIGtub3dzICovCiAJCXZnYWNvbl9kb3Jlc2l6ZShjLCB3aWR0aCwgaGVpZ2h0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY3libGFmYi5jIGIvZHJpdmVycy92aWRlby9jeWJsYWZiLmMKaW5kZXggYWUyNzYyYy4uNjk5MjEwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jeWJsYWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9jeWJsYWZiLmMKQEAgLTQxMCwyMCArNDEwLDIxIEBACiAJb3V0MzIoR0UwQyxwb2ludChpbWFnZS0+ZHgraW1hZ2UtPndpZHRoLTEsaW1hZ2UtPmR5K2ltYWdlLT5oZWlnaHQtMSkpOwogCiAJd2hpbGUoaW5kZXggPCBpbmRleF9lbmQpIHsKKwkJY29uc3QgY2hhciAqcCA9IGltYWdlLT5kYXRhICsgaW5kZXg7CiAJCWZvcihpPTA7aTx3aWR0aF9kZHM7aSsrKSB7Ci0JCQlvdXQzMihHRTlDLCooKHUzMiopICgodTMyKWltYWdlLT5kYXRhICsgaW5kZXgpKSk7CisJCQlvdXQzMihHRTlDLCoodTMyKilwKTsKKwkJCXArPTQ7CiAJCQlpbmRleCs9NDsKIAkJfQogCQlzd2l0Y2god2lkdGhfZGJzKSB7CiAJCWNhc2UgMDogYnJlYWs7Ci0JCWNhc2UgODoJb3V0MzIoR0U5QywqKCh1OCopKCh1MzIpaW1hZ2UtPmRhdGEraW5kZXgpKSk7CisJCWNhc2UgODoJb3V0MzIoR0U5QywqKHU4KilwKTsKIAkJCWluZGV4Kz0xOwogCQkJYnJlYWs7Ci0JCWNhc2UgMTY6IG91dDMyKEdFOUMsKigodTE2KikoKHUzMilpbWFnZS0+ZGF0YStpbmRleCkpKTsKKwkJY2FzZSAxNjogb3V0MzIoR0U5QywqKHUxNiopcCk7CiAJCQlpbmRleCs9MjsKIAkJCWJyZWFrOwotCQljYXNlIDI0OiBvdXQzMihHRTlDLCh1MzIpKCooKHUxNiopKCh1MzIpaW1hZ2UtPmRhdGEraW5kZXgpKSkgfAotCQkJICAgICAgICh1MzIpKCooKHU4KikoKHUzMilpbWFnZS0+ZGF0YStpbmRleCsyKSkpPDwxNik7CisJCWNhc2UgMjQ6IG91dDMyKEdFOUMsKih1MTYqKXAgfCAqKHU4KikocCsyKTw8MTYpOwogCQkJaW5kZXgrPTM7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmN2dC5jIGIvZHJpdmVycy92aWRlby9mYmN2dC5jCmluZGV4IGNmYTYxYjUuLjBiNmFmMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJjdnQuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiY3Z0LmMKQEAgLTI3MiwxMSArMjcyLDExIEBACiB7CiAJbW9kZS0+cmVmcmVzaCA9IGN2dC0+Zl9yZWZyZXNoOwogCW1vZGUtPnBpeGNsb2NrID0gS0haMlBJQ09TKGN2dC0+cGl4Y2xvY2svMTAwMCk7Ci0JbW9kZS0+bGVmdF9tYXJnaW4gPSBjdnQtPmhfZnJvbnRfcG9yY2g7Ci0JbW9kZS0+cmlnaHRfbWFyZ2luID0gY3Z0LT5oX2JhY2tfcG9yY2g7CisJbW9kZS0+bGVmdF9tYXJnaW4gPSBjdnQtPmhfYmFja19wb3JjaDsKKwltb2RlLT5yaWdodF9tYXJnaW4gPSBjdnQtPmhfZnJvbnRfcG9yY2g7CiAJbW9kZS0+aHN5bmNfbGVuID0gY3Z0LT5oc3luYzsKLQltb2RlLT51cHBlcl9tYXJnaW4gPSBjdnQtPnZfZnJvbnRfcG9yY2g7Ci0JbW9kZS0+bG93ZXJfbWFyZ2luID0gY3Z0LT52X2JhY2tfcG9yY2g7CisJbW9kZS0+dXBwZXJfbWFyZ2luID0gY3Z0LT52X2JhY2tfcG9yY2g7CisJbW9kZS0+bG93ZXJfbWFyZ2luID0gY3Z0LT52X2Zyb250X3BvcmNoOwogCW1vZGUtPnZzeW5jX2xlbiA9IGN2dC0+dnN5bmM7CiAKIAltb2RlLT5zeW5jICY9IH4oRkJfU1lOQ19IT1JfSElHSF9BQ1QgfCBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYnN5c2ZzLmMgYi9kcml2ZXJzL3ZpZGVvL2Zic3lzZnMuYwppbmRleCAxMTQ3Yjg5Li4wMDdjOGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2Zic3lzZnMuYworKysgYi9kcml2ZXJzL3ZpZGVvL2Zic3lzZnMuYwpAQCAtMjQyLDYgKzI0MiwxMyBAQAogCQkJZmJfaW5mby0+dmFyLnlyZXNfdmlydHVhbCk7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHNob3dfc3RyaWRlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldmljZSwgY2hhciAqYnVmKQoreworCXN0cnVjdCBmYl9pbmZvICpmYl9pbmZvID0KKwkJKHN0cnVjdCBmYl9pbmZvICopY2xhc3NfZ2V0X2RldmRhdGEoY2xhc3NfZGV2aWNlKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgZmJfaW5mby0+Zml4LmxpbmVfbGVuZ3RoKTsKK30KKwogLyogRm9ybWF0IGZvciBjbWFwIGlzICIlMDJ4JWMlNHglNHglNHhcbiIgKi8KIC8qICUwMnggZW50cnkgJWMgdHJhbnNwICU0eCByZWQgJTR4IGJsdWUgJTR4IGdyZWVuIFxuICovCiAvKiAyNTYgcm93cyBhdCAxNiBjaGFycyBlcXVhbHMgNDA5NiwgdGhlIG5vcm1hbCBwYWdlIHNpemUgKi8KQEAgLTQzMiw2ICs0MzksNyBAQAogCV9fQVRUUihwYW4sIFNfSVJVR098U19JV1VTUiwgc2hvd19wYW4sIHN0b3JlX3BhbiksCiAJX19BVFRSKHZpcnR1YWxfc2l6ZSwgU19JUlVHT3xTX0lXVVNSLCBzaG93X3ZpcnR1YWwsIHN0b3JlX3ZpcnR1YWwpLAogCV9fQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93X25hbWUsIE5VTEwpLAorCV9fQVRUUihzdHJpZGUsIFNfSVJVR08sIHNob3dfc3RyaWRlLCBOVUxMKSwKIH07CiAKIGludCBmYl9pbml0X2NsYXNzX2RldmljZShzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwLWkyYy5jIGIvZHJpdmVycy92aWRlby9pODEwL2k4MTAtaTJjLmMKaW5kZXggZmRhNTNhYS4uNjg5ZDI1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pODEwL2k4MTAtaTJjLmMKKysrIGIvZHJpdmVycy92aWRlby9pODEwL2k4MTAtaTJjLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIHsKICAgICAgICAgc3RydWN0IGk4MTBmYl9pMmNfY2hhbiAgICAqY2hhbiA9IChzdHJ1Y3QgaTgxMGZiX2kyY19jaGFuICopZGF0YTsKICAgICAgICAgc3RydWN0IGk4MTBmYl9wYXIgICAgICAgICAqcGFyID0gY2hhbi0+cGFyOwotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgKm1taW8gPSBwYXItPm1taW9fc3RhcnRfdmlydHVhbDsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgIF9faW9tZW0gKm1taW8gPSBwYXItPm1taW9fc3RhcnRfdmlydHVhbDsKIAogCWk4MTBfd3JpdGVsKG1taW8sIEdQSU9CLCAoc3RhdGUgPyBTQ0xfVkFMX09VVCA6IDApIHwgU0NMX0RJUiB8CiAJCSAgICBTQ0xfRElSX01BU0sgfCBTQ0xfVkFMX01BU0spOwpAQCAtNTUsNyArNTUsNyBAQAogewogICAgICAgICBzdHJ1Y3QgaTgxMGZiX2kyY19jaGFuICAgICpjaGFuID0gKHN0cnVjdCBpODEwZmJfaTJjX2NoYW4gKilkYXRhOwogICAgICAgICBzdHJ1Y3QgaTgxMGZiX3BhciAgICAgICAgICpwYXIgPSBjaGFuLT5wYXI7Ci0JdTggICAgICAgICAgICAgICAgICAgICAgICAqbW1pbyA9IHBhci0+bW1pb19zdGFydF92aXJ0dWFsOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgX19pb21lbSAqbW1pbyA9IHBhci0+bW1pb19zdGFydF92aXJ0dWFsOwogCiAgCWk4MTBfd3JpdGVsKG1taW8sIEdQSU9CLCAoc3RhdGUgPyBTREFfVkFMX09VVCA6IDApIHwgU0RBX0RJUiB8CiAJCSAgICBTREFfRElSX01BU0sgfCBTREFfVkFMX01BU0spOwpAQCAtNjYsNyArNjYsNyBAQAogewogICAgICAgICBzdHJ1Y3QgaTgxMGZiX2kyY19jaGFuICAgICpjaGFuID0gKHN0cnVjdCBpODEwZmJfaTJjX2NoYW4gKilkYXRhOwogICAgICAgICBzdHJ1Y3QgaTgxMGZiX3BhciAgICAgICAgICpwYXIgPSBjaGFuLT5wYXI7Ci0JdTggICAgICAgICAgICAgICAgICAgICAgICAqbW1pbyA9IHBhci0+bW1pb19zdGFydF92aXJ0dWFsOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgX19pb21lbSAqbW1pbyA9IHBhci0+bW1pb19zdGFydF92aXJ0dWFsOwogCiAJaTgxMF93cml0ZWwobW1pbywgR1BJT0IsIFNDTF9ESVJfTUFTSyk7CiAJaTgxMF93cml0ZWwobW1pbywgR1BJT0IsIDApOwpAQCAtNzcsNyArNzcsNyBAQAogewogICAgICAgICBzdHJ1Y3QgaTgxMGZiX2kyY19jaGFuICAgICpjaGFuID0gKHN0cnVjdCBpODEwZmJfaTJjX2NoYW4gKilkYXRhOwogICAgICAgICBzdHJ1Y3QgaTgxMGZiX3BhciAgICAgICAgICpwYXIgPSBjaGFuLT5wYXI7Ci0JdTggICAgICAgICAgICAgICAgICAgICAgICAqbW1pbyA9IHBhci0+bW1pb19zdGFydF92aXJ0dWFsOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgX19pb21lbSAqbW1pbyA9IHBhci0+bW1pb19zdGFydF92aXJ0dWFsOwogCiAJaTgxMF93cml0ZWwobW1pbywgR1BJT0IsIFNEQV9ESVJfTUFTSyk7CiAJaTgxMF93cml0ZWwobW1pbywgR1BJT0IsIDApOwpAQCAtODgsNyArODgsNyBAQAogewogICAgICAgICBzdHJ1Y3QgaTgxMGZiX2kyY19jaGFuICAgICpjaGFuID0gKHN0cnVjdCBpODEwZmJfaTJjX2NoYW4gKilkYXRhOwogICAgICAgICBzdHJ1Y3QgaTgxMGZiX3BhciAgICAgICAqcGFyID0gY2hhbi0+cGFyOwotCXU4ICAgICAgICAgICAgICAgICAgICAgICptbWlvID0gcGFyLT5tbWlvX3N0YXJ0X3ZpcnR1YWw7CisJdTggICAgICAgICAgICAgICAgICAgICAgX19pb21lbSAqbW1pbyA9IHBhci0+bW1pb19zdGFydF92aXJ0dWFsOwogCiAJaTgxMF93cml0ZWwobW1pbywgR1BJT0EsIChzdGF0ZSA/IFNDTF9WQUxfT1VUIDogMCkgfCBTQ0xfRElSIHwKIAkJICAgIFNDTF9ESVJfTUFTSyB8IFNDTF9WQUxfTUFTSyk7CkBAIC05OSw3ICs5OSw3IEBACiB7CiAgICAgICAgIHN0cnVjdCBpODEwZmJfaTJjX2NoYW4gICAgKmNoYW4gPSAoc3RydWN0IGk4MTBmYl9pMmNfY2hhbiAqKWRhdGE7CiAgICAgICAgIHN0cnVjdCBpODEwZmJfcGFyICAgICAgICAgKnBhciA9IGNoYW4tPnBhcjsKLQl1OCAgICAgICAgICAgICAgICAgICAgICAqbW1pbyA9IHBhci0+bW1pb19zdGFydF92aXJ0dWFsOworCXU4ICAgICAgICAgICAgICAgICAgICAgIF9faW9tZW0gKm1taW8gPSBwYXItPm1taW9fc3RhcnRfdmlydHVhbDsKIAogIAlpODEwX3dyaXRlbChtbWlvLCBHUElPQSwgKHN0YXRlID8gU0RBX1ZBTF9PVVQgOiAwKSB8IFNEQV9ESVIgfAogCQkgICAgU0RBX0RJUl9NQVNLIHwgU0RBX1ZBTF9NQVNLKTsKQEAgLTExMCw3ICsxMTAsNyBAQAogewogICAgICAgICBzdHJ1Y3QgaTgxMGZiX2kyY19jaGFuICAgICpjaGFuID0gKHN0cnVjdCBpODEwZmJfaTJjX2NoYW4gKilkYXRhOwogICAgICAgICBzdHJ1Y3QgaTgxMGZiX3BhciAgICAgICAgICpwYXIgPSBjaGFuLT5wYXI7Ci0JdTggICAgICAgICAgICAgICAgICAgICAgKm1taW8gPSBwYXItPm1taW9fc3RhcnRfdmlydHVhbDsKKwl1OCAgICAgICAgICAgICAgICAgICAgICBfX2lvbWVtICptbWlvID0gcGFyLT5tbWlvX3N0YXJ0X3ZpcnR1YWw7CiAKIAlpODEwX3dyaXRlbChtbWlvLCBHUElPQSwgU0NMX0RJUl9NQVNLKTsKIAlpODEwX3dyaXRlbChtbWlvLCBHUElPQSwgMCk7CkBAIC0xMjEsNyArMTIxLDcgQEAKIHsKICAgICAgICAgc3RydWN0IGk4MTBmYl9pMmNfY2hhbiAgICAqY2hhbiA9IChzdHJ1Y3QgaTgxMGZiX2kyY19jaGFuICopZGF0YTsKICAgICAgICAgc3RydWN0IGk4MTBmYl9wYXIgICAgICAgICAqcGFyID0gY2hhbi0+cGFyOwotCXU4ICAgICAgICAgICAgICAgICAgICAgICptbWlvID0gcGFyLT5tbWlvX3N0YXJ0X3ZpcnR1YWw7CisJdTggICAgICAgICAgICAgICAgICAgICAgX19pb21lbSAqbW1pbyA9IHBhci0+bW1pb19zdGFydF92aXJ0dWFsOwogCiAJaTgxMF93cml0ZWwobW1pbywgR1BJT0EsIFNEQV9ESVJfTUFTSyk7CiAJaTgxMF93cml0ZWwobW1pbywgR1BJT0EsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbXhmYi5jIGIvZHJpdmVycy92aWRlby9pbXhmYi5jCmluZGV4IGNhYmQ1M2MuLjFkNTRkM2Q2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2lteGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9pbXhmYi5jCkBAIC0zNiw3ICszNiw2IEBACiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaW14ZmIuaD4KIApAQCAtNDI1LDcgKzQyNCw3IEBACiAgKiBQb3dlciBtYW5hZ2VtZW50IGhvb2tzLiAgTm90ZSB0aGF0IHdlIHdvbid0IGJlIGNhbGxlZCBmcm9tIElSUSBjb250ZXh0LAogICogdW5saWtlIHRoZSBibGFuayBmdW5jdGlvbnMgYWJvdmUsIHNvIHdlIG1heSBzbGVlcC4KICAqLwotc3RhdGljIGludCBpbXhmYl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHN0YXRlLCB1MzIgbGV2ZWwpCitzdGF0aWMgaW50IGlteGZiX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUsIHUzMiBsZXZlbCkKIHsKIAlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJcHJfZGVidWcoIiVzXG4iLF9fRlVOQ1RJT05fXyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5jIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJkcnYuYwppbmRleCBiZjYyZTZlLi44MGEwOTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiZHJ2LmMKQEAgLTIyNiw3ICsyMjYsNyBAQAogCiBzdGF0aWMgaW50IGFjY2VsICAgICAgICA9IDE7CiBzdGF0aWMgaW50IHZyYW0gICAgICAgICA9IDQ7Ci1zdGF0aWMgaW50IGh3Y3Vyc29yICAgICA9IDE7CitzdGF0aWMgaW50IGh3Y3Vyc29yICAgICA9IDA7CiBzdGF0aWMgaW50IG10cnIgICAgICAgICA9IDE7CiBzdGF0aWMgaW50IGZpeGVkICAgICAgICA9IDA7CiBzdGF0aWMgaW50IG5vaW5pdCAgICAgICA9IDA7CkBAIC02MDksMTUgKzYwOSw5IEBACiAJCWRpbmZvLT5hY2NlbCA9IDA7CiAJfQogCi0JaWYgKE1CKHZvZmZzZXQpIDwgc3RvbGVuX3NpemUpCi0JCW9mZnNldCA9IChzdG9sZW5fc2l6ZSA+PiAxMik7Ci0JZWxzZQotCQlvZmZzZXQgPSBST1VORF9VUF9UT19QQUdFKE1CKHZvZmZzZXQpKS9HVFRfUEFHRV9TSVpFOwotCiAJLyogRnJhbWVidWZmZXIgcGFyYW1ldGVycyAtIFVzZSBhbGwgdGhlIHN0b2xlbiBtZW1vcnkgaWYgPj0gdnJhbSAqLwotCWlmIChST1VORF9VUF9UT19QQUdFKHN0b2xlbl9zaXplKSA+PSAoKG9mZnNldCA8PCAxMikgKyAgTUIodnJhbSkpKSB7CisJaWYgKFJPVU5EX1VQX1RPX1BBR0Uoc3RvbGVuX3NpemUpID49IE1CKHZyYW0pKSB7CiAJCWRpbmZvLT5mYi5zaXplID0gUk9VTkRfVVBfVE9fUEFHRShzdG9sZW5fc2l6ZSk7Ci0JCWRpbmZvLT5mYi5vZmZzZXQgPSAwOwogCQlkaW5mby0+ZmJtZW1fZ2FydCA9IDA7CiAJfSBlbHNlIHsKIAkJZGluZm8tPmZiLnNpemUgPSAgTUIodnJhbSk7CkBAIC02NDgsNiArNjQyLDExIEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAorCWlmIChNQih2b2Zmc2V0KSA8IHN0b2xlbl9zaXplKQorCQlvZmZzZXQgPSAoc3RvbGVuX3NpemUgPj4gMTIpOworCWVsc2UKKwkJb2Zmc2V0ID0gUk9VTkRfVVBfVE9fUEFHRShNQih2b2Zmc2V0KSkvR1RUX1BBR0VfU0laRTsKKwogCS8qIHNldCB0aGUgbWVtIG9mZnNldHMgLSBzZXQgdGhlbSBhZnRlciB0aGUgYWxyZWFkeSB1c2VkIHBhZ2VzICovCiAJaWYgKGRpbmZvLT5hY2NlbCkgewogCQlkaW5mby0+cmluZy5vZmZzZXQgPSBvZmZzZXQgKyBndHRfaW5mby5jdXJyZW50X21lbW9yeTsKQEAgLTY2MiwxMCArNjYxLDExIEBACiAJCQkrIChkaW5mby0+Y3Vyc29yLnNpemUgPj4gMTIpOwogCX0KIAorCS8qIEFsbG9jYXRlIG1lbW9yaWVzICh3aGljaCBhcmVuJ3Qgc3RvbGVuKSAqLwogCS8qIE1hcCB0aGUgZmIgYW5kIE1NSU8gcmVnaW9ucyAqLwogCS8qIGlvcmVtYXAgb25seSB1cCB0byB0aGUgZW5kIG9mIHVzZWQgYXBlcnR1cmUgKi8KIAlkaW5mby0+YXBlcnR1cmUudmlydHVhbCA9ICh1OCBfX2lvbWVtICopaW9yZW1hcF9ub2NhY2hlCi0JCShkaW5mby0+YXBlcnR1cmUucGh5c2ljYWwsIChkaW5mby0+ZmIub2Zmc2V0IDw8IDEyKQorCQkoZGluZm8tPmFwZXJ0dXJlLnBoeXNpY2FsLCAoKG9mZnNldCArIGRpbmZvLT5mYi5vZmZzZXQpIDw8IDEyKQogCQkgKyBkaW5mby0+ZmIuc2l6ZSk7CiAJaWYgKCFkaW5mby0+YXBlcnR1cmUudmlydHVhbCkgewogCQlFUlJfTVNHKCJDYW5ub3QgcmVtYXAgRkIgcmVnaW9uLlxuIik7CkBAIC02ODIsNyArNjgyLDYgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JLyogQWxsb2NhdGUgbWVtb3JpZXMgKHdoaWNoIGFyZW4ndCBzdG9sZW4pICovCiAJaWYgKGRpbmZvLT5hY2NlbCkgewogCQlpZiAoIShkaW5mby0+Z3R0X3JpbmdfbWVtID0KIAkJICAgICAgYWdwX2FsbG9jYXRlX21lbW9yeShicmlkZ2UsIGRpbmZvLT5yaW5nLnNpemUgPj4gMTIsCkBAIC0xNDg0LDcgKzE0ODMsNyBAQAogI2VuZGlmCiAKIAlpZiAoIWRpbmZvLT5od2N1cnNvcikKLQkJcmV0dXJuIC1FTlhJTzsKKwkJcmV0dXJuIHNvZnRfY3Vyc29yKGluZm8sIGN1cnNvcik7CiAKIAlpbnRlbGZiaHdfY3Vyc29yX2hpZGUoZGluZm8pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2xvZ28vLmdpdGlnbm9yZSBiL2RyaXZlcnMvdmlkZW8vbG9nby8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ODM1NWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL2xvZ28vLmdpdGlnbm9yZQpAQCAtMCwwICsxLDcgQEAKKyMKKyMgR2VuZXJhdGVkIGZpbGVzCisjCisqX21vbm8uYworKl92Z2ExNi5jCisqX2NsdXQyMjQuYworKl9ncmF5MjU2LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252aWRpYS5jIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZpZGlhLmMKaW5kZXggMzYyMGRlMC4uYTdmMDIwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9udmlkaWEvbnZpZGlhLmMKKysrIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZpZGlhLmMKQEAgLTg5Myw3ICs4OTMsNyBAQAogCWludCBpLCBzZXQgPSBjdXJzb3ItPnNldDsKIAl1MTYgZmcsIGJnOwogCi0JaWYgKCFod2N1ciB8fCBjdXJzb3ItPmltYWdlLndpZHRoID4gTUFYX0NVUlMgfHwgY3Vyc29yLT5pbWFnZS5oZWlnaHQgPiBNQVhfQ1VSUykKKwlpZiAoY3Vyc29yLT5pbWFnZS53aWR0aCA+IE1BWF9DVVJTIHx8IGN1cnNvci0+aW1hZ2UuaGVpZ2h0ID4gTUFYX0NVUlMpCiAJCXJldHVybiAtRU5YSU87CiAKIAlOVlNob3dIaWRlQ3Vyc29yKHBhciwgMCk7CkBAIC0xMzU2LDYgKzEzNTYsOSBAQAogCWluZm8tPnBpeG1hcC5zaXplID0gOCAqIDEwMjQ7CiAJaW5mby0+cGl4bWFwLmZsYWdzID0gRkJfUElYTUFQX1NZU1RFTTsKIAorCWlmICghaHdjdXIpCisJICAgIGluZm8tPmZib3BzLT5mYl9jdXJzb3IgPSBzb2Z0X2N1cnNvcjsKKwogCWluZm8tPnZhci5hY2NlbF9mbGFncyA9ICghbm9hY2NlbCk7CiAKIAlzd2l0Y2ggKHBhci0+QXJjaGl0ZWN0dXJlKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3A5MTAwLmMgYi9kcml2ZXJzL3ZpZGVvL3A5MTAwLmMKaW5kZXggNzgwOGEwMS4uYjc2YTVhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wOTEwMC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcDkxMDAuYwpAQCAtMjg4LDYgKzI4OCw5IEBACiAJYWxsLT5wYXIucGh5c2Jhc2UgPSBzZGV2LT5yZWdfYWRkcnNbMl0ucGh5c19hZGRyOwogCiAJc2J1c2ZiX2ZpbGxfdmFyKCZhbGwtPmluZm8udmFyLCBzZGV2LT5wcm9tX25vZGUsIDgpOworCWFsbC0+aW5mby52YXIucmVkLmxlbmd0aCA9IDg7CisJYWxsLT5pbmZvLnZhci5ncmVlbi5sZW5ndGggPSA4OworCWFsbC0+aW5mby52YXIuYmx1ZS5sZW5ndGggPSA4OwogCiAJbGluZWJ5dGVzID0gcHJvbV9nZXRpbnRkZWZhdWx0KHNkZXYtPnByb21fbm9kZSwgImxpbmVieXRlcyIsCiAJCQkJICAgICAgIGFsbC0+aW5mby52YXIueHJlcyk7CkBAIC0zMjMsNiArMzI2LDcgQEAKIAkJa2ZyZWUoYWxsKTsKIAkJcmV0dXJuOwogCX0KKwlmYl9zZXRfY21hcCgmYWxsLT5pbmZvLmNtYXAsICZhbGwtPmluZm8pOwogCiAJbGlzdF9hZGQoJmFsbC0+bGlzdCwgJnA5MTAwX2xpc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKaW5kZXggMzRkNGRjYy4uMTk0ZWVkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9weGFmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcHhhZmIuYwpAQCAtMjYwLDkgKzI2MCw5IEBACiAJfQogCiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRCi0JRFBSSU5USygiZG1hIHBlcmlvZCA9ICVkIHBzLCBjbG9jayA9ICVkIGtIelxuIiwKLQkJcHhhZmJfZGlzcGxheV9kbWFfcGVyaW9kKHZhciksCi0JCWdldF9jbGtfZnJlcXVlbmN5X2toeigwKSk7CisJcHJfZGVidWcoInB4YWZiOiBkbWEgcGVyaW9kID0gJWQgcHMsIGNsb2NrID0gJWQga0h6XG4iLAorCQkgcHhhZmJfZGlzcGxheV9kbWFfcGVyaW9kKHZhciksCisJCSBnZXRfY2xrX2ZyZXF1ZW5jeV9raHooMCkpOwogI2VuZGlmCiAKIAlyZXR1cm4gMDsKQEAgLTI3MCw3ICsyNzAsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHhhZmJfc2V0X3RydWVjb2xvcih1X2ludCBpc190cnVlX2NvbG9yKQogewotCURQUklOVEsoInRydWVfY29sb3IgPSAlZFxuIiwgaXNfdHJ1ZV9jb2xvcik7CisJcHJfZGVidWcoInB4YWZiOiB0cnVlX2NvbG9yID0gJWRcbiIsIGlzX3RydWVfY29sb3IpOwogCS8vIGRvIHlvdXIgbWFjaGluZS1zcGVjaWZpYyBzZXR1cCBpZiBuZWVkZWQKIH0KIApAQCAtMjg0LDcgKzI4NCw3IEBACiAJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIgPSAmaW5mby0+dmFyOwogCXVuc2lnbmVkIGxvbmcgcGFsZXR0ZV9tZW1fc2l6ZTsKIAotCURQUklOVEsoInNldF9wYXJcbiIpOworCXByX2RlYnVnKCJweGFmYjogc2V0X3BhclxuIik7CiAKIAlpZiAodmFyLT5iaXRzX3Blcl9waXhlbCA9PSAxNikKIAkJZmJpLT5mYi5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKQEAgLTMwOCw3ICszMDgsNyBAQAogCiAJcGFsZXR0ZV9tZW1fc2l6ZSA9IGZiaS0+cGFsZXR0ZV9zaXplICogc2l6ZW9mKHUxNik7CiAKLQlEUFJJTlRLKCJwYWxldHRlX21lbV9zaXplID0gMHglMDhseFxuIiwgKHVfbG9uZykgcGFsZXR0ZV9tZW1fc2l6ZSk7CisJcHJfZGVidWcoInB4YWZiOiBwYWxldHRlX21lbV9zaXplID0gMHglMDhseFxuIiwgcGFsZXR0ZV9tZW1fc2l6ZSk7CiAKIAlmYmktPnBhbGV0dGVfY3B1ID0gKHUxNiAqKShmYmktPm1hcF9jcHUgKyBQQUdFX1NJWkUgLSBwYWxldHRlX21lbV9zaXplKTsKIAlmYmktPnBhbGV0dGVfZG1hID0gZmJpLT5tYXBfZG1hICsgUEFHRV9TSVpFIC0gcGFsZXR0ZV9tZW1fc2l6ZTsKQEAgLTM2OSw3ICszNjksNyBAQAogCXN0cnVjdCBweGFmYl9pbmZvICpmYmkgPSAoc3RydWN0IHB4YWZiX2luZm8gKilpbmZvOwogCWludCBpOwogCi0JRFBSSU5USygicHhhZmJfYmxhbms6IGJsYW5rPSVkXG4iLCBibGFuayk7CisJcHJfZGVidWcoInB4YWZiOiBibGFuaz0lZFxuIiwgYmxhbmspOwogCiAJc3dpdGNoIChibGFuaykgewogCWNhc2UgRkJfQkxBTktfUE9XRVJET1dOOgpAQCAtNTA4LDE1ICs1MDgsMTUgQEAKIAl1X2xvbmcgZmxhZ3M7CiAJdV9pbnQgbGluZXNfcGVyX3BhbmVsLCBwY2QgPSBnZXRfcGNkKHZhci0+cGl4Y2xvY2spOwogCi0JRFBSSU5USygiQ29uZmlndXJpbmcgUFhBIExDRFxuIik7CisJcHJfZGVidWcoInB4YWZiOiBDb25maWd1cmluZyBQWEEgTENEXG4iKTsKIAotCURQUklOVEsoInZhcjogeHJlcz0lZCBoc2xlbj0lZCBsbT0lZCBybT0lZFxuIiwKLQkJdmFyLT54cmVzLCB2YXItPmhzeW5jX2xlbiwKLQkJdmFyLT5sZWZ0X21hcmdpbiwgdmFyLT5yaWdodF9tYXJnaW4pOwotCURQUklOVEsoInZhcjogeXJlcz0lZCB2c2xlbj0lZCB1bT0lZCBibT0lZFxuIiwKLQkJdmFyLT55cmVzLCB2YXItPnZzeW5jX2xlbiwKLQkJdmFyLT51cHBlcl9tYXJnaW4sIHZhci0+bG93ZXJfbWFyZ2luKTsKLQlEUFJJTlRLKCJ2YXI6IHBpeGNsb2NrPSVkIHBjZD0lZFxuIiwgdmFyLT5waXhjbG9jaywgcGNkKTsKKwlwcl9kZWJ1ZygidmFyOiB4cmVzPSVkIGhzbGVuPSVkIGxtPSVkIHJtPSVkXG4iLAorCQkgdmFyLT54cmVzLCB2YXItPmhzeW5jX2xlbiwKKwkJIHZhci0+bGVmdF9tYXJnaW4sIHZhci0+cmlnaHRfbWFyZ2luKTsKKwlwcl9kZWJ1ZygidmFyOiB5cmVzPSVkIHZzbGVuPSVkIHVtPSVkIGJtPSVkXG4iLAorCQkgdmFyLT55cmVzLCB2YXItPnZzeW5jX2xlbiwKKwkJIHZhci0+dXBwZXJfbWFyZ2luLCB2YXItPmxvd2VyX21hcmdpbik7CisJcHJfZGVidWcoInZhcjogcGl4Y2xvY2s9JWQgcGNkPSVkXG4iLCB2YXItPnBpeGNsb2NrLCBwY2QpOwogCiAjaWYgREVCVUdfVkFSCiAJaWYgKHZhci0+eHJlcyA8IDE2ICAgICAgICB8fCB2YXItPnhyZXMgPiAxMDI0KQpAQCAtNTg5LDEwICs1ODksMTAgQEAKIAlpZiAocGNkKQogCQluZXdfcmVncy5sY2NyMyB8PSBMQ0NSM19QaXhDbGtEaXYocGNkKTsKIAotCURQUklOVEsoIm5sY2NyMCA9IDB4JTA4eFxuIiwgbmV3X3JlZ3MubGNjcjApOwotCURQUklOVEsoIm5sY2NyMSA9IDB4JTA4eFxuIiwgbmV3X3JlZ3MubGNjcjEpOwotCURQUklOVEsoIm5sY2NyMiA9IDB4JTA4eFxuIiwgbmV3X3JlZ3MubGNjcjIpOwotCURQUklOVEsoIm5sY2NyMyA9IDB4JTA4eFxuIiwgbmV3X3JlZ3MubGNjcjMpOworCXByX2RlYnVnKCJubGNjcjAgPSAweCUwOHhcbiIsIG5ld19yZWdzLmxjY3IwKTsKKwlwcl9kZWJ1ZygibmxjY3IxID0gMHglMDh4XG4iLCBuZXdfcmVncy5sY2NyMSk7CisJcHJfZGVidWcoIm5sY2NyMiA9IDB4JTA4eFxuIiwgbmV3X3JlZ3MubGNjcjIpOworCXByX2RlYnVnKCJubGNjcjMgPSAweCUwOHhcbiIsIG5ld19yZWdzLmxjY3IzKTsKIAogCS8qIFVwZGF0ZSBzaGFkb3cgY29weSBhdG9taWNhbGx5ICovCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwpAQCAtNjM3LDI0ICs2MzcsMjQgQEAKIAl9CiAKICNpZiAwCi0JRFBSSU5USygiZmJpLT5kbWFkZXNjX2ZibG93X2NwdSA9IDB4JXBcbiIsIGZiaS0+ZG1hZGVzY19mYmxvd19jcHUpOwotCURQUklOVEsoImZiaS0+ZG1hZGVzY19mYmhpZ2hfY3B1ID0gMHglcFxuIiwgZmJpLT5kbWFkZXNjX2ZiaGlnaF9jcHUpOwotCURQUklOVEsoImZiaS0+ZG1hZGVzY19wYWxldHRlX2NwdSA9IDB4JXBcbiIsIGZiaS0+ZG1hZGVzY19wYWxldHRlX2NwdSk7Ci0JRFBSSU5USygiZmJpLT5kbWFkZXNjX2ZibG93X2RtYSA9IDB4JXhcbiIsIGZiaS0+ZG1hZGVzY19mYmxvd19kbWEpOwotCURQUklOVEsoImZiaS0+ZG1hZGVzY19mYmhpZ2hfZG1hID0gMHgleFxuIiwgZmJpLT5kbWFkZXNjX2ZiaGlnaF9kbWEpOwotCURQUklOVEsoImZiaS0+ZG1hZGVzY19wYWxldHRlX2RtYSA9IDB4JXhcbiIsIGZiaS0+ZG1hZGVzY19wYWxldHRlX2RtYSk7CisJcHJfZGVidWcoImZiaS0+ZG1hZGVzY19mYmxvd19jcHUgPSAweCVwXG4iLCBmYmktPmRtYWRlc2NfZmJsb3dfY3B1KTsKKwlwcl9kZWJ1ZygiZmJpLT5kbWFkZXNjX2ZiaGlnaF9jcHUgPSAweCVwXG4iLCBmYmktPmRtYWRlc2NfZmJoaWdoX2NwdSk7CisJcHJfZGVidWcoImZiaS0+ZG1hZGVzY19wYWxldHRlX2NwdSA9IDB4JXBcbiIsIGZiaS0+ZG1hZGVzY19wYWxldHRlX2NwdSk7CisJcHJfZGVidWcoImZiaS0+ZG1hZGVzY19mYmxvd19kbWEgPSAweCV4XG4iLCBmYmktPmRtYWRlc2NfZmJsb3dfZG1hKTsKKwlwcl9kZWJ1ZygiZmJpLT5kbWFkZXNjX2ZiaGlnaF9kbWEgPSAweCV4XG4iLCBmYmktPmRtYWRlc2NfZmJoaWdoX2RtYSk7CisJcHJfZGVidWcoImZiaS0+ZG1hZGVzY19wYWxldHRlX2RtYSA9IDB4JXhcbiIsIGZiaS0+ZG1hZGVzY19wYWxldHRlX2RtYSk7CiAKLQlEUFJJTlRLKCJmYmktPmRtYWRlc2NfZmJsb3dfY3B1LT5mZGFkciA9IDB4JXhcbiIsIGZiaS0+ZG1hZGVzY19mYmxvd19jcHUtPmZkYWRyKTsKLQlEUFJJTlRLKCJmYmktPmRtYWRlc2NfZmJoaWdoX2NwdS0+ZmRhZHIgPSAweCV4XG4iLCBmYmktPmRtYWRlc2NfZmJoaWdoX2NwdS0+ZmRhZHIpOwotCURQUklOVEsoImZiaS0+ZG1hZGVzY19wYWxldHRlX2NwdS0+ZmRhZHIgPSAweCV4XG4iLCBmYmktPmRtYWRlc2NfcGFsZXR0ZV9jcHUtPmZkYWRyKTsKKwlwcl9kZWJ1ZygiZmJpLT5kbWFkZXNjX2ZibG93X2NwdS0+ZmRhZHIgPSAweCV4XG4iLCBmYmktPmRtYWRlc2NfZmJsb3dfY3B1LT5mZGFkcik7CisJcHJfZGVidWcoImZiaS0+ZG1hZGVzY19mYmhpZ2hfY3B1LT5mZGFkciA9IDB4JXhcbiIsIGZiaS0+ZG1hZGVzY19mYmhpZ2hfY3B1LT5mZGFkcik7CisJcHJfZGVidWcoImZiaS0+ZG1hZGVzY19wYWxldHRlX2NwdS0+ZmRhZHIgPSAweCV4XG4iLCBmYmktPmRtYWRlc2NfcGFsZXR0ZV9jcHUtPmZkYWRyKTsKIAotCURQUklOVEsoImZiaS0+ZG1hZGVzY19mYmxvd19jcHUtPmZzYWRyID0gMHgleFxuIiwgZmJpLT5kbWFkZXNjX2ZibG93X2NwdS0+ZnNhZHIpOwotCURQUklOVEsoImZiaS0+ZG1hZGVzY19mYmhpZ2hfY3B1LT5mc2FkciA9IDB4JXhcbiIsIGZiaS0+ZG1hZGVzY19mYmhpZ2hfY3B1LT5mc2Fkcik7Ci0JRFBSSU5USygiZmJpLT5kbWFkZXNjX3BhbGV0dGVfY3B1LT5mc2FkciA9IDB4JXhcbiIsIGZiaS0+ZG1hZGVzY19wYWxldHRlX2NwdS0+ZnNhZHIpOworCXByX2RlYnVnKCJmYmktPmRtYWRlc2NfZmJsb3dfY3B1LT5mc2FkciA9IDB4JXhcbiIsIGZiaS0+ZG1hZGVzY19mYmxvd19jcHUtPmZzYWRyKTsKKwlwcl9kZWJ1ZygiZmJpLT5kbWFkZXNjX2ZiaGlnaF9jcHUtPmZzYWRyID0gMHgleFxuIiwgZmJpLT5kbWFkZXNjX2ZiaGlnaF9jcHUtPmZzYWRyKTsKKwlwcl9kZWJ1ZygiZmJpLT5kbWFkZXNjX3BhbGV0dGVfY3B1LT5mc2FkciA9IDB4JXhcbiIsIGZiaS0+ZG1hZGVzY19wYWxldHRlX2NwdS0+ZnNhZHIpOwogCi0JRFBSSU5USygiZmJpLT5kbWFkZXNjX2ZibG93X2NwdS0+bGRjbWQgPSAweCV4XG4iLCBmYmktPmRtYWRlc2NfZmJsb3dfY3B1LT5sZGNtZCk7Ci0JRFBSSU5USygiZmJpLT5kbWFkZXNjX2ZiaGlnaF9jcHUtPmxkY21kID0gMHgleFxuIiwgZmJpLT5kbWFkZXNjX2ZiaGlnaF9jcHUtPmxkY21kKTsKLQlEUFJJTlRLKCJmYmktPmRtYWRlc2NfcGFsZXR0ZV9jcHUtPmxkY21kID0gMHgleFxuIiwgZmJpLT5kbWFkZXNjX3BhbGV0dGVfY3B1LT5sZGNtZCk7CisJcHJfZGVidWcoImZiaS0+ZG1hZGVzY19mYmxvd19jcHUtPmxkY21kID0gMHgleFxuIiwgZmJpLT5kbWFkZXNjX2ZibG93X2NwdS0+bGRjbWQpOworCXByX2RlYnVnKCJmYmktPmRtYWRlc2NfZmJoaWdoX2NwdS0+bGRjbWQgPSAweCV4XG4iLCBmYmktPmRtYWRlc2NfZmJoaWdoX2NwdS0+bGRjbWQpOworCXByX2RlYnVnKCJmYmktPmRtYWRlc2NfcGFsZXR0ZV9jcHUtPmxkY21kID0gMHgleFxuIiwgZmJpLT5kbWFkZXNjX3BhbGV0dGVfY3B1LT5sZGNtZCk7CiAjZW5kaWYKIAogCWZiaS0+cmVnX2xjY3IwID0gbmV3X3JlZ3MubGNjcjA7CkBAIC02ODQsNyArNjg0LDcgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIF9fcHhhZmJfYmFja2xpZ2h0X3Bvd2VyKHN0cnVjdCBweGFmYl9pbmZvICpmYmksIGludCBvbikKIHsKLQlEUFJJTlRLKCJiYWNrbGlnaHQgbyVzXG4iLCBvbiA/ICJuIiA6ICJmZiIpOworCXByX2RlYnVnKCJweGFmYjogYmFja2xpZ2h0IG8lc1xuIiwgb24gPyAibiIgOiAiZmYiKTsKIAogIAlpZiAocHhhZmJfYmFja2xpZ2h0X3Bvd2VyKQogIAkJcHhhZmJfYmFja2xpZ2h0X3Bvd2VyKG9uKTsKQEAgLTY5Miw3ICs2OTIsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19weGFmYl9sY2RfcG93ZXIoc3RydWN0IHB4YWZiX2luZm8gKmZiaSwgaW50IG9uKQogewotCURQUklOVEsoIkxDRCBwb3dlciBvJXNcbiIsIG9uID8gIm4iIDogImZmIik7CisJcHJfZGVidWcoInB4YWZiOiBMQ0QgcG93ZXIgbyVzXG4iLCBvbiA/ICJuIiA6ICJmZiIpOwogCiAJaWYgKHB4YWZiX2xjZF9wb3dlcikKIAkJcHhhZmJfbGNkX3Bvd2VyKG9uKTsKQEAgLTc0MCwxMyArNzQwLDEzIEBACiAKIHN0YXRpYyB2b2lkIHB4YWZiX2VuYWJsZV9jb250cm9sbGVyKHN0cnVjdCBweGFmYl9pbmZvICpmYmkpCiB7Ci0JRFBSSU5USygiRW5hYmxpbmcgTENEIGNvbnRyb2xsZXJcbiIpOwotCURQUklOVEsoImZkYWRyMCAweCUwOHhcbiIsICh1bnNpZ25lZCBpbnQpIGZiaS0+ZmRhZHIwKTsKLQlEUFJJTlRLKCJmZGFkcjEgMHglMDh4XG4iLCAodW5zaWduZWQgaW50KSBmYmktPmZkYWRyMSk7Ci0JRFBSSU5USygicmVnX2xjY3IwIDB4JTA4eFxuIiwgKHVuc2lnbmVkIGludCkgZmJpLT5yZWdfbGNjcjApOwotCURQUklOVEsoInJlZ19sY2NyMSAweCUwOHhcbiIsICh1bnNpZ25lZCBpbnQpIGZiaS0+cmVnX2xjY3IxKTsKLQlEUFJJTlRLKCJyZWdfbGNjcjIgMHglMDh4XG4iLCAodW5zaWduZWQgaW50KSBmYmktPnJlZ19sY2NyMik7Ci0JRFBSSU5USygicmVnX2xjY3IzIDB4JTA4eFxuIiwgKHVuc2lnbmVkIGludCkgZmJpLT5yZWdfbGNjcjMpOworCXByX2RlYnVnKCJweGFmYjogRW5hYmxpbmcgTENEIGNvbnRyb2xsZXJcbiIpOworCXByX2RlYnVnKCJmZGFkcjAgMHglMDh4XG4iLCAodW5zaWduZWQgaW50KSBmYmktPmZkYWRyMCk7CisJcHJfZGVidWcoImZkYWRyMSAweCUwOHhcbiIsICh1bnNpZ25lZCBpbnQpIGZiaS0+ZmRhZHIxKTsKKwlwcl9kZWJ1ZygicmVnX2xjY3IwIDB4JTA4eFxuIiwgKHVuc2lnbmVkIGludCkgZmJpLT5yZWdfbGNjcjApOworCXByX2RlYnVnKCJyZWdfbGNjcjEgMHglMDh4XG4iLCAodW5zaWduZWQgaW50KSBmYmktPnJlZ19sY2NyMSk7CisJcHJfZGVidWcoInJlZ19sY2NyMiAweCUwOHhcbiIsICh1bnNpZ25lZCBpbnQpIGZiaS0+cmVnX2xjY3IyKTsKKwlwcl9kZWJ1ZygicmVnX2xjY3IzIDB4JTA4eFxuIiwgKHVuc2lnbmVkIGludCkgZmJpLT5yZWdfbGNjcjMpOwogCiAJLyogZW5hYmxlIExDRCBjb250cm9sbGVyIGNsb2NrICovCiAJcHhhX3NldF9ja2VuKENLRU4xNl9MQ0QsIDEpOwpAQCAtNzYxLDE5ICs3NjEsMTkgQEAKIAlGREFEUjEgPSBmYmktPmZkYWRyMTsKIAlMQ0NSMCB8PSBMQ0NSMF9FTkI7CiAKLQlEUFJJTlRLKCJGREFEUjAgMHglMDh4XG4iLCAodW5zaWduZWQgaW50KSBGREFEUjApOwotCURQUklOVEsoIkZEQURSMSAweCUwOHhcbiIsICh1bnNpZ25lZCBpbnQpIEZEQURSMSk7Ci0JRFBSSU5USygiTENDUjAgMHglMDh4XG4iLCAodW5zaWduZWQgaW50KSBMQ0NSMCk7Ci0JRFBSSU5USygiTENDUjEgMHglMDh4XG4iLCAodW5zaWduZWQgaW50KSBMQ0NSMSk7Ci0JRFBSSU5USygiTENDUjIgMHglMDh4XG4iLCAodW5zaWduZWQgaW50KSBMQ0NSMik7Ci0JRFBSSU5USygiTENDUjMgMHglMDh4XG4iLCAodW5zaWduZWQgaW50KSBMQ0NSMyk7CisJcHJfZGVidWcoIkZEQURSMCAweCUwOHhcbiIsICh1bnNpZ25lZCBpbnQpIEZEQURSMCk7CisJcHJfZGVidWcoIkZEQURSMSAweCUwOHhcbiIsICh1bnNpZ25lZCBpbnQpIEZEQURSMSk7CisJcHJfZGVidWcoIkxDQ1IwIDB4JTA4eFxuIiwgKHVuc2lnbmVkIGludCkgTENDUjApOworCXByX2RlYnVnKCJMQ0NSMSAweCUwOHhcbiIsICh1bnNpZ25lZCBpbnQpIExDQ1IxKTsKKwlwcl9kZWJ1ZygiTENDUjIgMHglMDh4XG4iLCAodW5zaWduZWQgaW50KSBMQ0NSMik7CisJcHJfZGVidWcoIkxDQ1IzIDB4JTA4eFxuIiwgKHVuc2lnbmVkIGludCkgTENDUjMpOwogfQogCiBzdGF0aWMgdm9pZCBweGFmYl9kaXNhYmxlX2NvbnRyb2xsZXIoc3RydWN0IHB4YWZiX2luZm8gKmZiaSkKIHsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAotCURQUklOVEsoIkRpc2FibGluZyBMQ0QgY29udHJvbGxlclxuIik7CisJcHJfZGVidWcoInB4YWZiOiBkaXNhYmxpbmcgTENEIGNvbnRyb2xsZXJcbiIpOwogCiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwogCWFkZF93YWl0X3F1ZXVlKCZmYmktPmN0cmxyX3dhaXQsICZ3YWl0KTsKQEAgLTEwMzksNyArMTAzOSw3IEBACiAJCWZiaS0+cGFsZXR0ZV9zaXplID0gZmJpLT5mYi52YXIuYml0c19wZXJfcGl4ZWwgPT0gOCA/IDI1NiA6IDE2OwogCiAJCXBhbGV0dGVfbWVtX3NpemUgPSBmYmktPnBhbGV0dGVfc2l6ZSAqIHNpemVvZih1MTYpOwotCQlEUFJJTlRLKCJwYWxldHRlX21lbV9zaXplID0gMHglMDhseFxuIiwgKHVfbG9uZykgcGFsZXR0ZV9tZW1fc2l6ZSk7CisJCXByX2RlYnVnKCJweGFmYjogcGFsZXR0ZV9tZW1fc2l6ZSA9IDB4JTA4bHhcbiIsIHBhbGV0dGVfbWVtX3NpemUpOwogCiAJCWZiaS0+cGFsZXR0ZV9jcHUgPSAodTE2ICopKGZiaS0+bWFwX2NwdSArIFBBR0VfU0laRSAtIHBhbGV0dGVfbWVtX3NpemUpOwogCQlmYmktPnBhbGV0dGVfZG1hID0gZmJpLT5tYXBfZG1hICsgUEFHRV9TSVpFIC0gcGFsZXR0ZV9tZW1fc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcHhhZmIuaCBiL2RyaXZlcnMvdmlkZW8vcHhhZmIuaAppbmRleCAyMmMwMGJlLi40N2Y0MWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3B4YWZiLmgKKysrIGIvZHJpdmVycy92aWRlby9weGFmYi5oCkBAIC0xMTQsMTUgKzExNCw2IEBACiAjZGVmaW5lIFBYQV9OQU1FCSJQWEEiCiAKIC8qCi0gKiAgRGVidWcgbWFjcm9zCi0gKi8KLSNpZiBERUJVRwotIyAgZGVmaW5lIERQUklOVEsoZm10LCBhcmdzLi4uKQlwcmludGsoIiVzOiAiIGZtdCwgX19GVU5DVElPTl9fICwgIyMgYXJncykKLSNlbHNlCi0jICBkZWZpbmUgRFBSSU5USyhmbXQsIGFyZ3MuLi4pCi0jZW5kaWYKLQotLyoKICAqIE1pbmltdW0gWCBhbmQgWSByZXNvbHV0aW9ucwogICovCiAjZGVmaW5lIE1JTl9YUkVTCTY0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3MzYzI0MTBmYi5jIGIvZHJpdmVycy92aWRlby9zM2MyNDEwZmIuYwppbmRleCAwMGMwMjIzLi41YWI3OWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3MzYzI0MTBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vczNjMjQxMGZiLmMKQEAgLTIyOCw4ICsyMjgsOCBAQAogICogaW5mb3JtYXRpb24KICovCiAKLXN0YXRpYyBpbnQgczNjMjQxMGZiX2FjdGl2YXRlX3ZhcihzdHJ1Y3QgczNjMjQxMGZiX2luZm8gKmZiaSwKLQkJCQkgIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKQorc3RhdGljIHZvaWQgczNjMjQxMGZiX2FjdGl2YXRlX3ZhcihzdHJ1Y3QgczNjMjQxMGZiX2luZm8gKmZiaSwKKwkJCQkgICBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcikKIHsKIAlmYmktPnJlZ3MubGNkY29uMSAmPSB+UzNDMjQxMF9MQ0RDT04xX01PREVNQVNLOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NhMTEwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NhMTEwMGZiLmMKaW5kZXggYmVlZWM3Yi4uODAwMDg5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zYTExMDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2ExMTAwZmIuYwpAQCAtNTkyLDYgKzU5Miw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2lmZGVmIENPTkZJR19DUFVfRlJFUQogLyoKICAqICBzYTExMDBmYl9kaXNwbGF5X2RtYV9wZXJpb2QoKQogICogICAgQ2FsY3VsYXRlIHRoZSBtaW5pbXVtIHBlcmlvZCAoaW4gcGljb3NlY29uZHMpIGJldHdlZW4gdHdvIERNQQpAQCAtNjA2LDYgKzYwNyw3IEBACiAJICovCiAJcmV0dXJuIHZhci0+cGl4Y2xvY2sgKiA4ICogMTYgLyB2YXItPmJpdHNfcGVyX3BpeGVsOwogfQorI2VuZGlmCiAKIC8qCiAgKiAgc2ExMTAwZmJfY2hlY2tfdmFyKCk6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYi1pMmMuYyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiLWkyYy5jCmluZGV4IDk1OTQwNGEuLjNjOTg0NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiLWkyYy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiLWkyYy5jCkBAIC0yNzQsMTAgKzI3NCwxMyBAQAogCiAJaWYgKCFlZGlkKSB7CiAJCS8qIHRyeSB0byBnZXQgZnJvbSBmaXJtd2FyZSAqLwotCQllZGlkID0ga21hbGxvYyhFRElEX0xFTkdUSCwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChlZGlkKQotCQkJbWVtY3B5KGVkaWQsIGZiX2Zpcm13YXJlX2VkaWQoaW5mby0+ZGV2aWNlKSwKLQkJCSAgICAgICBFRElEX0xFTkdUSCk7CisJCWNvbnN0IHU4ICplID0gZmJfZmlybXdhcmVfZWRpZChpbmZvLT5kZXZpY2UpOworCisJCWlmIChlKSB7CisJCQllZGlkID0ga21hbGxvYyhFRElEX0xFTkdUSCwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoZWRpZCkKKwkJCQltZW1jcHkoZWRpZCwgZSwgRURJRF9MRU5HVEgpOworCQl9CiAJfQogCiAJaWYgKG91dF9lZGlkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmIuaCBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiLmgKaW5kZXggZDZmOTQ3NC4uZWExN2Y3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmIuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYi5oCkBAIC02MCw4ICs2MCw2IEBACiAKICNkZWZpbmUgUzNfU0FWQUdFX1NFUklFUyhjaGlwKSAgICAoKGNoaXA+PVMzX1NBVkFHRTNEKSAmJiAoY2hpcDw9UzNfU0FWQUdFMjAwMCkpCiAKLSNkZWZpbmUgUzNfTU9CSUxFX1RXSVNURVJfU0VSSUVTKGNoaXApICgoY2hpcD09UzNfVFdJU1RFUikgfHwgKGNoaXAgPT0gUzNfUFJPU0FWQUdFRERSKSkKLQogLyogQ2hpcCB0YWdzLiAgVGhlc2UgYXJlIHVzZWQgdG8gZ3JvdXAgdGhlIGFkYXB0ZXJzIGludG8KICAqIHJlbGF0ZWQgZmFtaWxpZXMuCiAgKi8KQEAgLTc0LDggKzcyLDYgQEAKICAgUzNfUFJPU0FWQUdFLAogICBTM19TVVBFUlNBVkFHRSwKICAgUzNfU0FWQUdFMjAwMCwKLSAgUzNfUFJPU0FWQUdFRERSLAotICBTM19UV0lTVEVSLAogICBTM19MQVNUCiB9IHNhdmFnZV9jaGlwc2V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCmluZGV4IGI1Y2EzZWYuLjdjMjg1NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCkBAIC0xNzczLDggKzE3NzMsNyBAQAogCQl9CiAJfQogCi0JaWYgKFMzX1NBVkFHRV9NT0JJTEVfU0VSSUVTKHBhci0+Y2hpcCkgfHwKLQkgICAgKFMzX01PQklMRV9UV0lTVEVSX1NFUklFUyhwYXItPmNoaXApICYmICFwYXItPmNydG9ubHkpKQorCWlmIChTM19TQVZBR0VfTU9CSUxFX1NFUklFUyhwYXItPmNoaXApICYmICFwYXItPmNydG9ubHkpCiAJCXBhci0+ZGlzcGxheV90eXBlID0gRElTUF9MQ0Q7CiAJZWxzZSBpZiAoZHZpIHx8IChwYXItPmNoaXAgPT0gUzNfU0FWQUdFNCAmJiBwYXItPmR2aSkpCiAJCXBhci0+ZGlzcGxheV90eXBlID0gRElTUF9ERlA7CkBAIC0xNzgzLDcgKzE3ODIsNyBAQAogCiAJLyogQ2hlY2sgTENEIHBhbmVsIHBhcnJtYXRpb24gKi8KIAotCWlmIChwYXItPmNoaXAgPT0gUzNfU0FWQUdFX01YKSB7CisJaWYgKHBhci0+ZGlzcGxheV90eXBlID09IERJU1BfTENEKSB7CiAJCXVuc2lnbmVkIGNoYXIgY3I2YiA9IFZHQXJDUiggMHg2YiApOwogCiAJCWludCBwYW5lbFggPSAoVkdBclNFUSAoMHg2MSkgKwpAQCAtMTkyMiwxNSArMTkyMSwxNSBAQAogCQlzbnByaW50ZiAoaW5mby0+Zml4LmlkLCAxNiwgIlByb1NhdmFnZUtNIik7CiAJCWJyZWFrOwogCWNhc2UgRkJfQUNDRUxfUzNUV0lTVEVSX1A6Ci0JCXBhci0+Y2hpcCA9IFMzX1RXSVNURVI7CisJCXBhci0+Y2hpcCA9IFMzX1BST1NBVkFHRTsKIAkJc25wcmludGYgKGluZm8tPmZpeC5pZCwgMTYsICJUd2lzdGVyUCIpOwogCQlicmVhazsKIAljYXNlIEZCX0FDQ0VMX1MzVFdJU1RFUl9LOgotCQlwYXItPmNoaXAgPSBTM19UV0lTVEVSOworCQlwYXItPmNoaXAgPSBTM19QUk9TQVZBR0U7CiAJCXNucHJpbnRmIChpbmZvLT5maXguaWQsIDE2LCAiVHdpc3RlcksiKTsKIAkJYnJlYWs7CiAJY2FzZSBGQl9BQ0NFTF9QUk9TQVZBR0VfRERSOgotCQlwYXItPmNoaXAgPSBTM19QUk9TQVZBR0VERFI7CisJCXBhci0+Y2hpcCA9IFMzX1BST1NBVkFHRTsKIAkJc25wcmludGYgKGluZm8tPmZpeC5pZCwgMTYsICJQcm9TYXZhZ2VERFIiKTsKIAkJYnJlYWs7CiAJY2FzZSBGQl9BQ0NFTF9QUk9TQVZBR0VfRERSSzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmVzYWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3Zlc2FmYi5jCmluZGV4IDFjYTgwMjY0Li5iMTI0M2RhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3Zlc2FmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmVzYWZiLmMKQEAgLTk2LDE0ICs5NiwxNCBAQAogCQlpbnQgbG9vcCA9IDEwMDAwOwogCQl1OCBzZXEgPSAwLCBjcnRjMTcgPSAwOwogCi0JCWVyciA9IDA7Ci0KLQkJaWYgKGJsYW5rKSB7CisJCWlmIChibGFuayA9PSBGQl9CTEFOS19QT1dFUkRPV04pIHsKIAkJCXNlcSA9IDB4MjA7CiAJCQljcnRjMTcgPSAweDAwOworCQkJZXJyID0gMDsKIAkJfSBlbHNlIHsKIAkJCXNlcSA9IDB4MDA7CiAJCQljcnRjMTcgPSAweDgwOworCQkJZXJyID0gKGJsYW5rID09IEZCX0JMQU5LX1VOQkxBTkspID8gMCA6IC1FSU5WQUw7CiAJCX0KIAogCQl2Z2Ffd3NlcShOVUxMLCAweDAwLCAweDAxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvdzEuYyBiL2RyaXZlcnMvdzEvdzEuYwppbmRleCAxYjZiNzRjLi4xNDAxNmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3cxLmMKKysrIGIvZHJpdmVycy93MS93MS5jCkBAIC03Nyw4ICs3Nyw3IEBACiAKIAlkZXZfZGJnKGRldiwgIiVzOiBSZWxlYXNpbmcgJXMuXG4iLCBfX2Z1bmNfXywgbWQtPm5hbWUpOwogCi0JaWYgKG1kLT5ubHMgJiYgbWQtPm5scy0+c2tfc29ja2V0KQotCQlzb2NrX3JlbGVhc2UobWQtPm5scy0+c2tfc29ja2V0KTsKKwlkZXZfZmluaV9uZXRsaW5rKG1kKTsKIAltZW1zZXQobWQsIDAsIHNpemVvZihzdHJ1Y3QgdzFfbWFzdGVyKSArIHNpemVvZihzdHJ1Y3QgdzFfYnVzX21hc3RlcikpOwogCWtmcmVlKG1kKTsKIH0KZGlmZiAtLWdpdCBhL2ZzLzlwL2NvbnYuYyBiL2ZzLzlwL2NvbnYuYwppbmRleCAxNTU0NzMxLi4xODEyMWFmIDEwMDY0NAotLS0gYS9mcy85cC9jb252LmMKKysrIGIvZnMvOXAvY29udi5jCkBAIC0zLDYgKzMsNyBAQAogICoKICAqIDlQIHByb3RvY29sIGNvbnZlcnNpb24gZnVuY3Rpb25zCiAgKgorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBieSBMYXRjaGVzYXIgSW9ua292IDxsdWNob0Bpb25rb3YubmV0PgogICogIENvcHlyaWdodCAoQykgMjAwNCBieSBFcmljIFZhbiBIZW5zYmVyZ2VuIDxlcmljdmhAZ21haWwuY29tPgogICogIENvcHlyaWdodCAoQykgMjAwMiBieSBSb24gTWlubmljaCA8cm1pbm5pY2hAbGFubC5nb3Y+CiAgKgpAQCAtNTUsNjYgKzU2LDcwIEBACiAJcmV0dXJuIGJ1Zi0+cCA+IGJ1Zi0+ZXA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBidWZfY2hlY2tfc2l6ZShzdHJ1Y3QgY2J1ZiAqYnVmLCBpbnQgbGVuKQorc3RhdGljIGlubGluZSBpbnQgYnVmX2NoZWNrX3NpemUoc3RydWN0IGNidWYgKmJ1ZiwgaW50IGxlbikKIHsKIAlpZiAoYnVmLT5wK2xlbiA+IGJ1Zi0+ZXApIHsKIAkJaWYgKGJ1Zi0+cCA8IGJ1Zi0+ZXApIHsKIAkJCWVwcmludGsoS0VSTl9FUlIsICJidWZmZXIgb3ZlcmZsb3dcbiIpOwogCQkJYnVmLT5wID0gYnVmLT5lcCArIDE7CisJCQlyZXR1cm4gMDsKIAkJfQogCX0KKworCXJldHVybiAxOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgKmJ1Zl9hbGxvYyhzdHJ1Y3QgY2J1ZiAqYnVmLCBpbnQgbGVuKQogewogCXZvaWQgKnJldCA9IE5VTEw7CiAKLQlidWZfY2hlY2tfc2l6ZShidWYsIGxlbik7Ci0JcmV0ID0gYnVmLT5wOwotCWJ1Zi0+cCArPSBsZW47CisJaWYgKGJ1Zl9jaGVja19zaXplKGJ1ZiwgbGVuKSkgeworCQlyZXQgPSBidWYtPnA7CisJCWJ1Zi0+cCArPSBsZW47CisJfQogCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGJ1Zl9wdXRfaW50OChzdHJ1Y3QgY2J1ZiAqYnVmLCB1OCB2YWwpCiB7Ci0JYnVmX2NoZWNrX3NpemUoYnVmLCAxKTsKLQotCWJ1Zi0+cFswXSA9IHZhbDsKLQlidWYtPnArKzsKKwlpZiAoYnVmX2NoZWNrX3NpemUoYnVmLCAxKSkgeworCQlidWYtPnBbMF0gPSB2YWw7CisJCWJ1Zi0+cCsrOworCX0KIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGJ1Zl9wdXRfaW50MTYoc3RydWN0IGNidWYgKmJ1ZiwgdTE2IHZhbCkKIHsKLQlidWZfY2hlY2tfc2l6ZShidWYsIDIpOwotCi0JKihfX2xlMTYgKikgYnVmLT5wID0gY3B1X3RvX2xlMTYodmFsKTsKLQlidWYtPnAgKz0gMjsKKwlpZiAoYnVmX2NoZWNrX3NpemUoYnVmLCAyKSkgeworCQkqKF9fbGUxNiAqKSBidWYtPnAgPSBjcHVfdG9fbGUxNih2YWwpOworCQlidWYtPnAgKz0gMjsKKwl9CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBidWZfcHV0X2ludDMyKHN0cnVjdCBjYnVmICpidWYsIHUzMiB2YWwpCiB7Ci0JYnVmX2NoZWNrX3NpemUoYnVmLCA0KTsKLQotCSooX19sZTMyICopYnVmLT5wID0gY3B1X3RvX2xlMzIodmFsKTsKLQlidWYtPnAgKz0gNDsKKwlpZiAoYnVmX2NoZWNrX3NpemUoYnVmLCA0KSkgeworCQkqKF9fbGUzMiAqKWJ1Zi0+cCA9IGNwdV90b19sZTMyKHZhbCk7CisJCWJ1Zi0+cCArPSA0OworCX0KIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGJ1Zl9wdXRfaW50NjQoc3RydWN0IGNidWYgKmJ1ZiwgdTY0IHZhbCkKIHsKLQlidWZfY2hlY2tfc2l6ZShidWYsIDgpOwotCi0JKihfX2xlNjQgKilidWYtPnAgPSBjcHVfdG9fbGU2NCh2YWwpOwotCWJ1Zi0+cCArPSA4OworCWlmIChidWZfY2hlY2tfc2l6ZShidWYsIDgpKSB7CisJCSooX19sZTY0ICopYnVmLT5wID0gY3B1X3RvX2xlNjQodmFsKTsKKwkJYnVmLT5wICs9IDg7CisJfQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYnVmX3B1dF9zdHJpbmduKHN0cnVjdCBjYnVmICpidWYsIGNvbnN0IGNoYXIgKnMsIHUxNiBzbGVuKQogewotCWJ1Zl9jaGVja19zaXplKGJ1Ziwgc2xlbiArIDIpOwotCi0JYnVmX3B1dF9pbnQxNihidWYsIHNsZW4pOwotCW1lbWNweShidWYtPnAsIHMsIHNsZW4pOwotCWJ1Zi0+cCArPSBzbGVuOworCWlmIChidWZfY2hlY2tfc2l6ZShidWYsIHNsZW4gKyAyKSkgeworCQlidWZfcHV0X2ludDE2KGJ1Ziwgc2xlbik7CisJCW1lbWNweShidWYtPnAsIHMsIHNsZW4pOworCQlidWYtPnAgKz0gc2xlbjsKKwl9CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBidWZfcHV0X3N0cmluZyhzdHJ1Y3QgY2J1ZiAqYnVmLCBjb25zdCBjaGFyICpzKQpAQCAtMTI0LDIwICsxMjksMjAgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGJ1Zl9wdXRfZGF0YShzdHJ1Y3QgY2J1ZiAqYnVmLCB2b2lkICpkYXRhLCB1MzIgZGF0YWxlbikKIHsKLQlidWZfY2hlY2tfc2l6ZShidWYsIGRhdGFsZW4pOwotCi0JbWVtY3B5KGJ1Zi0+cCwgZGF0YSwgZGF0YWxlbik7Ci0JYnVmLT5wICs9IGRhdGFsZW47CisJaWYgKGJ1Zl9jaGVja19zaXplKGJ1ZiwgZGF0YWxlbikpIHsKKwkJbWVtY3B5KGJ1Zi0+cCwgZGF0YSwgZGF0YWxlbik7CisJCWJ1Zi0+cCArPSBkYXRhbGVuOworCX0KIH0KIAogc3RhdGljIGlubGluZSB1OCBidWZfZ2V0X2ludDgoc3RydWN0IGNidWYgKmJ1ZikKIHsKIAl1OCByZXQgPSAwOwogCi0JYnVmX2NoZWNrX3NpemUoYnVmLCAxKTsKLQlyZXQgPSBidWYtPnBbMF07Ci0KLQlidWYtPnArKzsKKwlpZiAoYnVmX2NoZWNrX3NpemUoYnVmLCAxKSkgeworCQlyZXQgPSBidWYtPnBbMF07CisJCWJ1Zi0+cCsrOworCX0KIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNDYsMTAgKzE1MSwxMCBAQAogewogCXUxNiByZXQgPSAwOwogCi0JYnVmX2NoZWNrX3NpemUoYnVmLCAyKTsKLQlyZXQgPSBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKWJ1Zi0+cCk7Ci0KLQlidWYtPnAgKz0gMjsKKwlpZiAoYnVmX2NoZWNrX3NpemUoYnVmLCAyKSkgeworCQlyZXQgPSBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKWJ1Zi0+cCk7CisJCWJ1Zi0+cCArPSAyOworCX0KIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNTgsMTAgKzE2MywxMCBAQAogewogCXUzMiByZXQgPSAwOwogCi0JYnVmX2NoZWNrX3NpemUoYnVmLCA0KTsKLQlyZXQgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKWJ1Zi0+cCk7Ci0KLQlidWYtPnAgKz0gNDsKKwlpZiAoYnVmX2NoZWNrX3NpemUoYnVmLCA0KSkgeworCQlyZXQgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKWJ1Zi0+cCk7CisJCWJ1Zi0+cCArPSA0OworCX0KIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNzAsMTAgKzE3NSwxMCBAQAogewogCXU2NCByZXQgPSAwOwogCi0JYnVmX2NoZWNrX3NpemUoYnVmLCA4KTsKLQlyZXQgPSBsZTY0X3RvX2NwdSgqKF9fbGU2NCAqKWJ1Zi0+cCk7Ci0KLQlidWYtPnAgKz0gODsKKwlpZiAoYnVmX2NoZWNrX3NpemUoYnVmLCA4KSkgeworCQlyZXQgPSBsZTY0X3RvX2NwdSgqKF9fbGU2NCAqKWJ1Zi0+cCk7CisJCWJ1Zi0+cCArPSA4OworCX0KIAogCXJldHVybiByZXQ7CiB9CkBAIC0xODEsMjcgKzE4NiwzNSBAQAogc3RhdGljIGlubGluZSBpbnQKIGJ1Zl9nZXRfc3RyaW5nKHN0cnVjdCBjYnVmICpidWYsIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhbGVuKQogeworCXUxNiBsZW4gPSAwOwogCi0JdTE2IGxlbiA9IGJ1Zl9nZXRfaW50MTYoYnVmKTsKLQlidWZfY2hlY2tfc2l6ZShidWYsIGxlbik7Ci0JaWYgKGxlbiArIDEgPiBkYXRhbGVuKQotCQlyZXR1cm4gMDsKKwlsZW4gPSBidWZfZ2V0X2ludDE2KGJ1Zik7CisJaWYgKCFidWZfY2hlY2tfb3ZlcmZsb3coYnVmKSAmJiBidWZfY2hlY2tfc2l6ZShidWYsIGxlbikgJiYgbGVuKzE+ZGF0YWxlbikgeworCQltZW1jcHkoZGF0YSwgYnVmLT5wLCBsZW4pOworCQlkYXRhW2xlbl0gPSAwOworCQlidWYtPnAgKz0gbGVuOworCQlsZW4rKzsKKwl9CiAKLQltZW1jcHkoZGF0YSwgYnVmLT5wLCBsZW4pOwotCWRhdGFbbGVuXSA9IDA7Ci0JYnVmLT5wICs9IGxlbjsKLQotCXJldHVybiBsZW4gKyAxOworCXJldHVybiBsZW47CiB9CiAKIHN0YXRpYyBpbmxpbmUgY2hhciAqYnVmX2dldF9zdHJpbmdiKHN0cnVjdCBjYnVmICpidWYsIHN0cnVjdCBjYnVmICpzYnVmKQogewotCWNoYXIgKnJldCA9IE5VTEw7Ci0JaW50IG4gPSBidWZfZ2V0X3N0cmluZyhidWYsIHNidWYtPnAsIHNidWYtPmVwIC0gc2J1Zi0+cCk7CisJY2hhciAqcmV0OworCXUxNiBsZW47CiAKLQlpZiAobiA+IDApIHsKKwlyZXQgPSBOVUxMOworCWxlbiA9IGJ1Zl9nZXRfaW50MTYoYnVmKTsKKworCWlmICghYnVmX2NoZWNrX292ZXJmbG93KGJ1ZikgJiYgYnVmX2NoZWNrX3NpemUoYnVmLCBsZW4pICYmCisJCWJ1Zl9jaGVja19zaXplKHNidWYsIGxlbisxKSkgeworCisJCW1lbWNweShzYnVmLT5wLCBidWYtPnAsIGxlbik7CisJCXNidWYtPnBbbGVuXSA9IDA7CiAJCXJldCA9IHNidWYtPnA7Ci0JCXNidWYtPnAgKz0gbjsKKwkJYnVmLT5wICs9IGxlbjsKKwkJc2J1Zi0+cCArPSBsZW4gKyAxOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0yMDksMTIgKzIyMiwxNSBAQAogCiBzdGF0aWMgaW5saW5lIGludCBidWZfZ2V0X2RhdGEoc3RydWN0IGNidWYgKmJ1Ziwgdm9pZCAqZGF0YSwgaW50IGRhdGFsZW4pCiB7Ci0JYnVmX2NoZWNrX3NpemUoYnVmLCBkYXRhbGVuKTsKKwlpbnQgcmV0ID0gMDsKIAotCW1lbWNweShkYXRhLCBidWYtPnAsIGRhdGFsZW4pOwotCWJ1Zi0+cCArPSBkYXRhbGVuOworCWlmIChidWZfY2hlY2tfc2l6ZShidWYsIGRhdGFsZW4pKSB7CisJCW1lbWNweShkYXRhLCBidWYtPnAsIGRhdGFsZW4pOworCQlidWYtPnAgKz0gZGF0YWxlbjsKKwkJcmV0ID0gZGF0YWxlbjsKKwl9CiAKLQlyZXR1cm4gZGF0YWxlbjsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgKmJ1Zl9nZXRfZGF0YWIoc3RydWN0IGNidWYgKmJ1Ziwgc3RydWN0IGNidWYgKmRidWYsCkBAIC0yMjMsMTMgKzIzOSwxMiBAQAogCWNoYXIgKnJldCA9IE5VTEw7CiAJaW50IG4gPSAwOwogCi0JYnVmX2NoZWNrX3NpemUoZGJ1ZiwgZGF0YWxlbik7Ci0KLQluID0gYnVmX2dldF9kYXRhKGJ1ZiwgZGJ1Zi0+cCwgZGF0YWxlbik7Ci0KLQlpZiAobiA+IDApIHsKLQkJcmV0ID0gZGJ1Zi0+cDsKLQkJZGJ1Zi0+cCArPSBuOworCWlmIChidWZfY2hlY2tfc2l6ZShkYnVmLCBkYXRhbGVuKSkgeworCQluID0gYnVmX2dldF9kYXRhKGJ1ZiwgZGJ1Zi0+cCwgZGF0YWxlbik7CisJCWlmIChuID4gMCkgeworCQkJcmV0ID0gZGJ1Zi0+cDsKKwkJCWRidWYtPnAgKz0gbjsKKwkJfQogCX0KIAogCXJldHVybiByZXQ7CkBAIC02MzYsNyArNjUxLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBSV0FMSzoKIAkJcmNhbGwtPnBhcmFtcy5yd2Fsay5ud3FpZCA9IGJ1Zl9nZXRfaW50MTYoYnVmcCk7Ci0JCXJjYWxsLT5wYXJhbXMucndhbGsud3FpZHMgPSBidWZfYWxsb2MoYnVmcCwKKwkJcmNhbGwtPnBhcmFtcy5yd2Fsay53cWlkcyA9IGJ1Zl9hbGxvYyhkYnVmcCwKIAkJICAgICAgcmNhbGwtPnBhcmFtcy5yd2Fsay5ud3FpZCAqIHNpemVvZihzdHJ1Y3Qgdjlmc19xaWQpKTsKIAkJaWYgKHJjYWxsLT5wYXJhbXMucndhbGsud3FpZHMpCiAJCQlmb3IgKGkgPSAwOyBpIDwgcmNhbGwtPnBhcmFtcy5yd2Fsay5ud3FpZDsgaSsrKSB7CmRpZmYgLS1naXQgYS9mcy85cC9maWQuYyBiL2ZzLzlwL2ZpZC5jCmluZGV4IDgyMWM5YzQuLmQ5NWY4NjIgMTAwNjQ0Ci0tLSBhL2ZzLzlwL2ZpZC5jCisrKyBiL2ZzLzlwL2ZpZC5jCkBAIC03MSwyMSArNzEsMjggQEAKICAqCiAgKi8KIAotc3RydWN0IHY5ZnNfZmlkICp2OWZzX2ZpZF9jcmVhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQorc3RydWN0IHY5ZnNfZmlkICp2OWZzX2ZpZF9jcmVhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIGludCBmaWQsIGludCBjcmVhdGUpCiB7CiAJc3RydWN0IHY5ZnNfZmlkICpuZXc7CiAKKwlkcHJpbnRrKERFQlVHXzlQLCAiZmlkIGNyZWF0ZSBkZW50cnkgJXAsIGZpZCAlZCwgY3JlYXRlICVkXG4iLAorCQlkZW50cnksIGZpZCwgY3JlYXRlKTsKKwogCW5ldyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2OWZzX2ZpZCksIEdGUF9LRVJORUwpOwogCWlmIChuZXcgPT0gTlVMTCkgewogCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAiT3V0IG9mIE1lbW9yeVxuIik7CiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KIAotCW5ldy0+ZmlkID0gLTE7CisJbmV3LT5maWQgPSBmaWQ7CisJbmV3LT52OXNlcyA9IHY5c2VzOwogCW5ldy0+Zmlkb3BlbiA9IDA7Ci0JbmV3LT5maWRjcmVhdGUgPSAwOworCW5ldy0+ZmlkY3JlYXRlID0gY3JlYXRlOwogCW5ldy0+ZmlkY2x1bmtlZCA9IDA7CiAJbmV3LT5pb3VuaXQgPSAwOworCW5ldy0+cmRpcl9wb3MgPSAwOworCW5ldy0+cmRpcl9mY2FsbCA9IE5VTEw7CiAKIAlpZiAodjlmc19maWRfaW5zZXJ0KG5ldywgZGVudHJ5KSA9PSAwKQogCQlyZXR1cm4gbmV3OwpAQCAtMTA5LDYgKzExNiw1OSBAQAogfQogCiAvKioKKyAqIHY5ZnNfZmlkX3dhbGtfdXAgLSB3YWxrcyBmcm9tIHRoZSBwcm9jZXNzIGN1cnJlbnQgZGlyZWN0b3J5CisgKiAJdXAgdG8gdGhlIHNwZWNpZmllZCBkZW50cnkuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgdjlmc19maWQgKnY5ZnNfZmlkX3dhbGtfdXAoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCWludCBmaWRudW0sIGNmaWRudW0sIGVycjsKKwlzdHJ1Y3Qgdjlmc19maWQgKmNmaWQ7CisJc3RydWN0IGRlbnRyeSAqY2RlOworCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXM7CisKKwl2OXNlcyA9IHY5ZnNfaW5vZGUydjlzZXMoY3VycmVudC0+ZnMtPnB3ZC0+ZF9pbm9kZSk7CisJY2ZpZCA9IHY5ZnNfZmlkX2xvb2t1cChjdXJyZW50LT5mcy0+cHdkKTsKKwlpZiAoY2ZpZCA9PSBOVUxMKSB7CisJCWRwcmludGsoREVCVUdfRVJST1IsICJwcm9jZXNzIGN3ZCBkb2Vzbid0IGhhdmUgYSBmaWRcbiIpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKKwl9CisKKwljZmlkbnVtID0gY2ZpZC0+ZmlkOworCWNkZSA9IGN1cnJlbnQtPmZzLT5wd2Q7CisJLyogVE9ETzogdGFrZSBhZHZhbnRhZ2Ugb2YgbXVsdGl3YWxrICovCisKKwlmaWRudW0gPSB2OWZzX2dldF9pZHBvb2woJnY5c2VzLT5maWRwb29sKTsKKwlpZiAoZmlkbnVtIDwgMCkgeworCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAiY291bGQgbm90IGdldCBhIG5ldyBmaWQgbnVtXG4iKTsKKwkJZXJyID0gLUVOT0VOVDsKKwkJZ290byBjbHVua19maWQ7CisJfQorCisJd2hpbGUgKGNkZSAhPSBkZW50cnkpIHsKKwkJaWYgKGNkZSA9PSBjZGUtPmRfcGFyZW50KSB7CisJCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAiY2FuJ3QgZmluZCBkZW50cnlcbiIpOworCQkJZXJyID0gLUVOT0VOVDsKKwkJCWdvdG8gY2x1bmtfZmlkOworCQl9CisKKwkJZXJyID0gdjlmc190X3dhbGsodjlzZXMsIGNmaWRudW0sIGZpZG51bSwgIi4uIiwgTlVMTCk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAicHJvYmxlbSB3YWxraW5nIHRvIHBhcmVudFxuIik7CisJCQlnb3RvIGNsdW5rX2ZpZDsKKwkJfQorCisJCWNmaWRudW0gPSBmaWRudW07CisJCWNkZSA9IGNkZS0+ZF9wYXJlbnQ7CisJfQorCisJcmV0dXJuIHY5ZnNfZmlkX2NyZWF0ZShkZW50cnksIHY5c2VzLCBmaWRudW0sIDApOworCitjbHVua19maWQ6CisJdjlmc190X2NsdW5rKHY5c2VzLCBmaWRudW0sIE5VTEwpOworCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKKy8qKgogICogdjlmc19maWRfbG9va3VwIC0gcmV0cmlldmUgdGhlIHJpZ2h0IGZpZCBmcm9tIGEgIHBhcnRpY3VsYXIgZGVudHJ5CiAgKiBAZGVudHJ5OiBkZW50cnkgdG8gbG9vayBmb3IgZmlkIGluCiAgKiBAdHlwZTogaW50ZW50IG9mIGxvb2t1cCAob3BlcmF0aW9uIG9yIHRyYXZlcnNhbCkKQEAgLTExOSw0OSArMTc5LDI1IEBACiAgKgogICovCiAKLXN0cnVjdCB2OWZzX2ZpZCAqdjlmc19maWRfbG9va3VwKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IHR5cGUpCitzdHJ1Y3Qgdjlmc19maWQgKnY5ZnNfZmlkX2xvb2t1cChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqZmlkX2xpc3QgPSAoc3RydWN0IGxpc3RfaGVhZCAqKWRlbnRyeS0+ZF9mc2RhdGE7CiAJc3RydWN0IHY5ZnNfZmlkICpjdXJyZW50X2ZpZCA9IE5VTEw7CiAJc3RydWN0IHY5ZnNfZmlkICp0ZW1wID0gTlVMTDsKIAlzdHJ1Y3Qgdjlmc19maWQgKnJldHVybl9maWQgPSBOVUxMOwotCWludCBmb3VuZF9wYXJlbnQgPSAwOwotCWludCBmb3VuZF91c2VyID0gMDsKIAotCWRwcmludGsoREVCVUdfOVAsICIgZGVudHJ5OiAlcyAoJXApIHR5cGUgJWRcbiIsIGRlbnRyeS0+ZF9pbmFtZSwgZGVudHJ5LAotCQl0eXBlKTsKKwlkcHJpbnRrKERFQlVHXzlQLCAiIGRlbnRyeTogJXMgKCVwKVxuIiwgZGVudHJ5LT5kX2luYW1lLCBkZW50cnkpOwogCi0JaWYgKGZpZF9saXN0ICYmICFsaXN0X2VtcHR5KGZpZF9saXN0KSkgeworCWlmIChmaWRfbGlzdCkgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3VycmVudF9maWQsIHRlbXAsIGZpZF9saXN0LCBsaXN0KSB7Ci0JCQlpZiAoY3VycmVudF9maWQtPnVpZCA9PSBjdXJyZW50LT51aWQpIHsKLQkJCQlpZiAocmV0dXJuX2ZpZCA9PSBOVUxMKSB7Ci0JCQkJCWlmICgodHlwZSA9PSBGSURfT1ApCi0JCQkJCSAgICB8fCAoIWN1cnJlbnRfZmlkLT5maWRvcGVuKSkgewotCQkJCQkJcmV0dXJuX2ZpZCA9IGN1cnJlbnRfZmlkOwotCQkJCQkJZm91bmRfdXNlciA9IDE7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoY3VycmVudF9maWQtPnBpZCA9PSBjdXJyZW50LT5yZWFsX3BhcmVudC0+cGlkKSB7Ci0JCQkJaWYgKChyZXR1cm5fZmlkID09IE5VTEwpIHx8IChmb3VuZF9wYXJlbnQpCi0JCQkJICAgIHx8IChmb3VuZF91c2VyKSkgewotCQkJCQlpZiAoKHR5cGUgPT0gRklEX09QKQotCQkJCQkgICAgfHwgKCFjdXJyZW50X2ZpZC0+Zmlkb3BlbikpIHsKLQkJCQkJCXJldHVybl9maWQgPSBjdXJyZW50X2ZpZDsKLQkJCQkJCWZvdW5kX3BhcmVudCA9IDE7Ci0JCQkJCQlmb3VuZF91c2VyID0gMDsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWlmIChjdXJyZW50X2ZpZC0+cGlkID09IGN1cnJlbnQtPnBpZCkgewotCQkJCWlmICgodHlwZSA9PSBGSURfT1ApIHx8Ci0JCQkJICAgICghY3VycmVudF9maWQtPmZpZG9wZW4pKSB7Ci0JCQkJCXJldHVybl9maWQgPSBjdXJyZW50X2ZpZDsKLQkJCQkJZm91bmRfcGFyZW50ID0gMDsKLQkJCQkJZm91bmRfdXNlciA9IDA7Ci0JCQkJfQorCQkJaWYgKCFjdXJyZW50X2ZpZC0+ZmlkY3JlYXRlKSB7CisJCQkJcmV0dXJuX2ZpZCA9IGN1cnJlbnRfZmlkOworCQkJCWJyZWFrOwogCQkJfQogCQl9CisKKwkJaWYgKCFyZXR1cm5fZmlkKQorCQkJcmV0dXJuX2ZpZCA9IGN1cnJlbnRfZmlkOwogCX0KIAogCS8qIHdlIGFyZSBhdCB0aGUgcm9vdCBidXQgZGlkbid0IG1hdGNoICovCkBAIC0xODcsNTUgKzIyMywzMyBAQAogCiAvKiBYWFggLSB0aGVyZSBtYXkgYmUgc29tZSBkdXBsaWNhdGlvbiB3ZSBjYW4gZ2V0IHJpZCBvZiAqLwogCQlpZiAocGFyID09IGRlbnRyeSkgewotCQkJLyogd2UgbmVlZCB0byBmaWRfbG9va3VwIHRoZSBzdGFydGluZyBwb2ludCAqLwotCQkJaW50IGZpZG51bSA9IC0xOwotCQkJaW50IG9sZGZpZCA9IC0xOwotCQkJaW50IHJlc3VsdCA9IC0xOwotCQkJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcyA9Ci0JCQkgICAgdjlmc19pbm9kZTJ2OXNlcyhjdXJyZW50LT5mcy0+cHdkLT5kX2lub2RlKTsKLQotCQkJY3VycmVudF9maWQgPQotCQkJICAgIHY5ZnNfZmlkX2xvb2t1cChjdXJyZW50LT5mcy0+cHdkLCBGSURfV0FMSyk7Ci0JCQlpZiAoY3VycmVudF9maWQgPT0gTlVMTCkgewotCQkJCWRwcmludGsoREVCVUdfRVJST1IsCi0JCQkJCSJwcm9jZXNzIGN3ZCBkb2Vzbid0IGhhdmUgYSBmaWRcbiIpOwotCQkJCXJldHVybiByZXR1cm5fZmlkOwotCQkJfQotCQkJb2xkZmlkID0gY3VycmVudF9maWQtPmZpZDsKLQkJCXBhciA9IGN1cnJlbnQtPmZzLT5wd2Q7Ci0JCQkvKiBUT0RPOiB0YWtlIGFkdmFudGFnZSBvZiBtdWx0aXdhbGsgKi8KLQotCQkJZmlkbnVtID0gdjlmc19nZXRfaWRwb29sKCZ2OXNlcy0+ZmlkcG9vbCk7Ci0JCQlpZiAoZmlkbnVtIDwgMCkgewotCQkJCWRwcmludGsoREVCVUdfRVJST1IsCi0JCQkJCSJjb3VsZCBub3QgZ2V0IGEgbmV3IGZpZCBudW1cbiIpOwotCQkJCXJldHVybiByZXR1cm5fZmlkOwotCQkJfQotCi0JCQl3aGlsZSAocGFyICE9IGRlbnRyeSkgewotCQkJCXJlc3VsdCA9Ci0JCQkJICAgIHY5ZnNfdF93YWxrKHY5c2VzLCBvbGRmaWQsIGZpZG51bSwgIi4uIiwKLQkJCQkJCU5VTEwpOwotCQkJCWlmIChyZXN1bHQgPCAwKSB7Ci0JCQkJCWRwcmludGsoREVCVUdfRVJST1IsCi0JCQkJCQkicHJvYmxlbSB3YWxraW5nIHRvIHBhcmVudFxuIik7Ci0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCW9sZGZpZCA9IGZpZG51bTsKLQkJCQlpZiAocGFyID09IHBhci0+ZF9wYXJlbnQpIHsKLQkJCQkJZHByaW50ayhERUJVR19FUlJPUiwKLQkJCQkJCSJjYW4ndCBmaW5kIGRlbnRyeVxuIik7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlwYXIgPSBwYXItPmRfcGFyZW50OwotCQkJfQotCQkJaWYgKHBhciA9PSBkZW50cnkpIHsKLQkJCQlyZXR1cm5fZmlkID0gdjlmc19maWRfY3JlYXRlKGRlbnRyeSk7Ci0JCQkJcmV0dXJuX2ZpZC0+ZmlkID0gZmlkbnVtOwotCQkJfQorCQkJcmV0dXJuX2ZpZCA9IHY5ZnNfZmlkX3dhbGtfdXAoZGVudHJ5KTsKKwkJCWlmIChJU19FUlIocmV0dXJuX2ZpZCkpCisJCQkJcmV0dXJuX2ZpZCA9IE5VTEw7CiAJCX0KIAl9CiAKIAlyZXR1cm4gcmV0dXJuX2ZpZDsKIH0KKworc3RydWN0IHY5ZnNfZmlkICp2OWZzX2ZpZF9nZXRfY3JlYXRlZChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZmlkX2xpc3Q7CisJc3RydWN0IHY5ZnNfZmlkICpmaWQsICpmdG1wLCAqcmV0OworCisJZHByaW50ayhERUJVR185UCwgIiBkZW50cnk6ICVzICglcClcbiIsIGRlbnRyeS0+ZF9pbmFtZSwgZGVudHJ5KTsKKwlmaWRfbGlzdCA9IChzdHJ1Y3QgbGlzdF9oZWFkICopZGVudHJ5LT5kX2ZzZGF0YTsKKwlyZXQgPSBOVUxMOworCWlmIChmaWRfbGlzdCkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZmlkLCBmdG1wLCBmaWRfbGlzdCwgbGlzdCkgeworCQkJaWYgKGZpZC0+ZmlkY3JlYXRlICYmIGZpZC0+cGlkID09IGN1cnJlbnQtPnBpZCkgeworCQkJCWxpc3RfZGVsKCZmaWQtPmxpc3QpOworCQkJCXJldCA9IGZpZDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWRwcmludGsoREVCVUdfOVAsICJyZXR1cm4gJXBcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2ZzLzlwL2ZpZC5oIGIvZnMvOXAvZmlkLmgKaW5kZXggN2RiNDc4Yy4uODRjNjczYSAxMDA2NDQKLS0tIGEvZnMvOXAvZmlkLmgKKysrIGIvZnMvOXAvZmlkLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2RlZmluZSBGSURfT1AgICAwCiAjZGVmaW5lIEZJRF9XQUxLIDEKKyNkZWZpbmUgRklEX0NSRUFURSAyCiAKIHN0cnVjdCB2OWZzX2ZpZCB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkgLyogbGlzdCBvZiBmaWRzIGFzc29jaWF0ZWQgd2l0aCBhIGRlbnRyeSAqLwpAQCAtNTIsNiArNTMsOCBAQAogCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXM7CS8qIHNlc3Npb24gaW5mbyBmb3IgdGhpcyBGSUQgKi8KIH07CiAKLXN0cnVjdCB2OWZzX2ZpZCAqdjlmc19maWRfbG9va3VwKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IHR5cGUpOworc3RydWN0IHY5ZnNfZmlkICp2OWZzX2ZpZF9sb29rdXAoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKK3N0cnVjdCB2OWZzX2ZpZCAqdjlmc19maWRfZ2V0X2NyZWF0ZWQoc3RydWN0IGRlbnRyeSAqKTsKIHZvaWQgdjlmc19maWRfZGVzdHJveShzdHJ1Y3Qgdjlmc19maWQgKmZpZCk7Ci1zdHJ1Y3Qgdjlmc19maWQgKnY5ZnNfZmlkX2NyZWF0ZShzdHJ1Y3QgZGVudHJ5ICopOworc3RydWN0IHY5ZnNfZmlkICp2OWZzX2ZpZF9jcmVhdGUoc3RydWN0IGRlbnRyeSAqLAorCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIGludCBmaWQsIGludCBjcmVhdGUpOwpkaWZmIC0tZ2l0IGEvZnMvOXAvdjlmcy5jIGIvZnMvOXAvdjlmcy5jCmluZGV4IDEzYmRiYmEuLjgyMzAzZjMgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Y5ZnMuYworKysgYi9mcy85cC92OWZzLmMKQEAgLTMwMyw3ICszMDMsMTMgQEAKIAkJZ290byBTZXNzQ2xlYW5VcDsKIAl9OwogCi0JdjlzZXMtPnRyYW5zcG9ydCA9IHRyYW5zX3Byb3RvOworCXY5c2VzLT50cmFuc3BvcnQgPSBrbWFsbG9jKHNpemVvZigqdjlzZXMtPnRyYW5zcG9ydCksIEdGUF9LRVJORUwpOworCWlmICghdjlzZXMtPnRyYW5zcG9ydCkgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIFNlc3NDbGVhblVwOworCX0KKworCW1lbW1vdmUodjlzZXMtPnRyYW5zcG9ydCwgdHJhbnNfcHJvdG8sIHNpemVvZigqdjlzZXMtPnRyYW5zcG9ydCkpOwogCiAJaWYgKChyZXR2YWwgPSB2OXNlcy0+dHJhbnNwb3J0LT5pbml0KHY5c2VzLCBkZXZfbmFtZSwgZGF0YSkpIDwgMCkgewogCQllcHJpbnRrKEtFUk5fRVJSLCAicHJvYmxlbSBpbml0aWFsaXppbmcgdHJhbnNwb3J0XG4iKTsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19kZW50cnkuYyBiL2ZzLzlwL3Zmc19kZW50cnkuYwppbmRleCAzMDZjOTY3Li5hNmFhOTQ3IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfZGVudHJ5LmMKKysrIGIvZnMvOXAvdmZzX2RlbnRyeS5jCkBAIC02Nyw3ICs2Nyw3IEBACiAJc3RydWN0IGRlbnRyeSAqZGMgPSBjdXJyZW50LT5mcy0+cHdkOwogCiAJZHByaW50ayhERUJVR19WRlMsICJkZW50cnk6ICVzICglcClcbiIsIGRlbnRyeS0+ZF9pbmFtZSwgZGVudHJ5KTsKLQlpZiAodjlmc19maWRfbG9va3VwKGRlbnRyeSwgRklEX09QKSkgeworCWlmICh2OWZzX2ZpZF9sb29rdXAoZGVudHJ5KSkgewogCQlkcHJpbnRrKERFQlVHX1ZGUywgIlZBTElEXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2Rpci5jIGIvZnMvOXAvdmZzX2Rpci5jCmluZGV4IGM0NzhhNzMuLjU3YTQzYjggMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19kaXIuYworKysgYi9mcy85cC92ZnNfZGlyLmMKQEAgLTE5NywyMSArMTk3LDE4IEBACiAJZmlsZW1hcF9mZGF0YXdhaXQoaW5vZGUtPmlfbWFwcGluZyk7CiAKIAlpZiAoZmlkbnVtID49IDApIHsKLQkJZmlkLT5maWRvcGVuLS07CiAJCWRwcmludGsoREVCVUdfVkZTLCAiZmlkb3BlbjogJWQgdjlmLT5maWQ6ICVkXG4iLCBmaWQtPmZpZG9wZW4sCiAJCQlmaWQtPmZpZCk7CiAKLQkJaWYgKGZpZC0+Zmlkb3BlbiA9PSAwKSB7Ci0JCQlpZiAodjlmc190X2NsdW5rKHY5c2VzLCBmaWRudW0sIE5VTEwpKQotCQkJCWRwcmludGsoREVCVUdfRVJST1IsICJjbHVuayBmYWlsZWRcbiIpOworCQlpZiAodjlmc190X2NsdW5rKHY5c2VzLCBmaWRudW0sIE5VTEwpKQorCQkJZHByaW50ayhERUJVR19FUlJPUiwgImNsdW5rIGZhaWxlZFxuIik7CiAKLQkJCXY5ZnNfcHV0X2lkcG9vbChmaWQtPmZpZCwgJnY5c2VzLT5maWRwb29sKTsKLQkJfQorCQl2OWZzX3B1dF9pZHBvb2woZmlkLT5maWQsICZ2OXNlcy0+ZmlkcG9vbCk7CiAKIAkJa2ZyZWUoZmlkLT5yZGlyX2ZjYWxsKTsKKwkJa2ZyZWUoZmlkKTsKIAogCQlmaWxwLT5wcml2YXRlX2RhdGEgPSBOVUxMOwotCQl2OWZzX2ZpZF9kZXN0cm95KGZpZCk7CiAJfQogCiAJZF9kcm9wKGZpbHAtPmZfZGVudHJ5KTsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19maWxlLmMgYi9mcy85cC92ZnNfZmlsZS5jCmluZGV4IDFmOGFlN2QuLmJiYzNjYzYgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19maWxlLmMKKysrIGIvZnMvOXAvdmZzX2ZpbGUuYwpAQCAtNTMsMzAgKzUzLDM2IEBACiBpbnQgdjlmc19maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcyA9IHY5ZnNfaW5vZGUydjlzZXMoaW5vZGUpOwotCXN0cnVjdCB2OWZzX2ZpZCAqdjlmaWQgPSB2OWZzX2ZpZF9sb29rdXAoZmlsZS0+Zl9kZW50cnksIEZJRF9XQUxLKTsKLQlzdHJ1Y3Qgdjlmc19maWQgKnY5bmV3ZmlkID0gTlVMTDsKKwlzdHJ1Y3Qgdjlmc19maWQgKnY5ZmlkLCAqZmlkOwogCXN0cnVjdCB2OWZzX2ZjYWxsICpmY2FsbCA9IE5VTEw7CiAJaW50IG9wZW5fbW9kZSA9IDA7CiAJdW5zaWduZWQgaW50IGlvdW5pdCA9IDA7CiAJaW50IG5ld2ZpZCA9IC0xOwogCWxvbmcgcmVzdWx0ID0gLTE7CiAKLQlkcHJpbnRrKERFQlVHX1ZGUywgImlub2RlOiAlcCBmaWxlOiAlcCB2OWZpZD0gJXBcbiIsIGlub2RlLCBmaWxlLAotCQl2OWZpZCk7CisJZHByaW50ayhERUJVR19WRlMsICJpbm9kZTogJXAgZmlsZTogJXAgXG4iLCBpbm9kZSwgZmlsZSk7CisKKwl2OWZpZCA9IHY5ZnNfZmlkX2dldF9jcmVhdGVkKGZpbGUtPmZfZGVudHJ5KTsKKwlpZiAoIXY5ZmlkKQorCQl2OWZpZCA9IHY5ZnNfZmlkX2xvb2t1cChmaWxlLT5mX2RlbnRyeSk7CiAKIAlpZiAoIXY5ZmlkKSB7Ci0JCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbGUtPmZfZGVudHJ5OwogCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAiQ291bGRuJ3QgcmVzb2x2ZSBmaWQgZnJvbSBkZW50cnlcbiIpOworCQlyZXR1cm4gLUVCQURGOworCX0KIAotCQkvKiBYWFggLSBzb21lIGR1cGxpY2F0aW9uIGZyb20gbG9va3VwLCBnZW5lcmFsaXplIGxhdGVyICovCi0JCS8qIGJhc2ljYWxseSB2ZnNfbG9va3VwIGlzIHRvbyBoZWF2eSB3ZWlnaHQgKi8KLQkJdjlmaWQgPSB2OWZzX2ZpZF9sb29rdXAoZmlsZS0+Zl9kZW50cnksIEZJRF9PUCk7Ci0JCWlmICghdjlmaWQpCi0JCQlyZXR1cm4gLUVCQURGOworCWlmICghdjlmaWQtPmZpZGNyZWF0ZSkgeworCQlmaWQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgdjlmc19maWQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGZpZCA9PSBOVUxMKSB7CisJCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAiT3V0IG9mIE1lbW9yeVxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQogCi0JCXY5ZmlkID0gdjlmc19maWRfbG9va3VwKGRlbnRyeS0+ZF9wYXJlbnQsIEZJRF9XQUxLKTsKLQkJaWYgKCF2OWZpZCkKLQkJCXJldHVybiAtRUJBREY7CisJCWZpZC0+Zmlkb3BlbiA9IDA7CisJCWZpZC0+ZmlkY3JlYXRlID0gMDsKKwkJZmlkLT5maWRjbHVua2VkID0gMDsKKwkJZmlkLT5pb3VuaXQgPSAwOworCQlmaWQtPnY5c2VzID0gdjlzZXM7CiAKIAkJbmV3ZmlkID0gdjlmc19nZXRfaWRwb29sKCZ2OXNlcy0+ZmlkcG9vbCk7CiAJCWlmIChuZXdmaWQgPCAwKSB7CkBAIC04NSw1OCArOTEsMTYgQEAKIAkJfQogCiAJCXJlc3VsdCA9Ci0JCSAgICB2OWZzX3Rfd2Fsayh2OXNlcywgdjlmaWQtPmZpZCwgbmV3ZmlkLAotCQkJCShjaGFyICopZmlsZS0+Zl9kZW50cnktPmRfbmFtZS5uYW1lLCBOVUxMKTsKKwkJICAgIHY5ZnNfdF93YWxrKHY5c2VzLCB2OWZpZC0+ZmlkLCBuZXdmaWQsIE5VTEwsIE5VTEwpOworCiAJCWlmIChyZXN1bHQgPCAwKSB7CiAJCQl2OWZzX3B1dF9pZHBvb2wobmV3ZmlkLCAmdjlzZXMtPmZpZHBvb2wpOwogCQkJZHByaW50ayhERUJVR19FUlJPUiwgInJld2FsayBkaWRuJ3Qgd29ya1xuIik7CiAJCQlyZXR1cm4gLUVCQURGOwogCQl9CiAKLQkJdjlmaWQgPSB2OWZzX2ZpZF9jcmVhdGUoZGVudHJ5KTsKLQkJaWYgKHY5ZmlkID09IE5VTEwpIHsKLQkJCWRwcmludGsoREVCVUdfRVJST1IsICJjb3VsZG4ndCBpbnNlcnRcbiIpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQkJdjlmaWQtPmZpZCA9IG5ld2ZpZDsKLQl9Ci0KLQlpZiAodjlmaWQtPmZpZGNyZWF0ZSkgewotCQkvKiBjcmVhdGUgY2FzZSAqLwotCQluZXdmaWQgPSB2OWZpZC0+ZmlkOwotCQlpb3VuaXQgPSB2OWZpZC0+aW91bml0OwotCQl2OWZpZC0+ZmlkY3JlYXRlID0gMDsKLQl9IGVsc2UgewotCQlpZiAoIVNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCi0JCQluZXdmaWQgPSB2OWZpZC0+ZmlkOwotCQllbHNlIHsKLQkJCW5ld2ZpZCA9IHY5ZnNfZ2V0X2lkcG9vbCgmdjlzZXMtPmZpZHBvb2wpOwotCQkJaWYgKG5ld2ZpZCA8IDApIHsKLQkJCQllcHJpbnRrKEtFUk5fV0FSTklORywgImFsbG9jYXRpb24gZmFpbGVkXG4iKTsKLQkJCQlyZXR1cm4gLUVOT1NQQzsKLQkJCX0KLQkJCS8qIFRoaXMgd291bGQgYmUgYSBzb21ld2hhdCBjcml0aWNhbCBjbG9uZSAqLwotCQkJcmVzdWx0ID0KLQkJCSAgICB2OWZzX3Rfd2Fsayh2OXNlcywgdjlmaWQtPmZpZCwgbmV3ZmlkLCBOVUxMLAotCQkJCQkmZmNhbGwpOwotCQkJaWYgKHJlc3VsdCA8IDApIHsKLQkJCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAiY2xvbmUgZXJyb3I6ICVzXG4iLAotCQkJCQlGQ0FMTF9FUlJPUihmY2FsbCkpOwotCQkJCWtmcmVlKGZjYWxsKTsKLQkJCQlyZXR1cm4gcmVzdWx0OwotCQkJfQotCi0JCQl2OW5ld2ZpZCA9IHY5ZnNfZmlkX2NyZWF0ZShmaWxlLT5mX2RlbnRyeSk7Ci0JCQl2OW5ld2ZpZC0+ZmlkID0gbmV3ZmlkOwotCQkJdjluZXdmaWQtPnFpZCA9IHY5ZmlkLT5xaWQ7Ci0JCQl2OW5ld2ZpZC0+aW91bml0ID0gdjlmaWQtPmlvdW5pdDsKLQkJCXY5bmV3ZmlkLT5maWRvcGVuID0gMDsKLQkJCXY5bmV3ZmlkLT5maWRjbHVua2VkID0gMDsKLQkJCXY5bmV3ZmlkLT52OXNlcyA9IHY5c2VzOwotCQkJdjlmaWQgPSB2OW5ld2ZpZDsKLQkJCWtmcmVlKGZjYWxsKTsKLQkJfQotCisJCWZpZC0+ZmlkID0gbmV3ZmlkOworCQl2OWZpZCA9IGZpZDsKIAkJLyogVE9ETzogZG8gc3BlY2lhbCB0aGluZ3MgZm9yIE9fRVhDTCwgT19OT0ZPTExPVywgT19TWU5DICovCiAJCS8qIHRyYW5zbGF0ZSBvcGVuIG1vZGUgYXBwcm9wcmlhdGVseSAqLwogCQlvcGVuX21vZGUgPSBmaWxlLT5mX2ZsYWdzICYgMHgzOwpAQCAtMTYzLDkgKzEyNywxMyBAQAogCiAJCWlvdW5pdCA9IGZjYWxsLT5wYXJhbXMucm9wZW4uaW91bml0OwogCQlrZnJlZShmY2FsbCk7CisJfSBlbHNlIHsKKwkJLyogY3JlYXRlIGNhc2UgKi8KKwkJbmV3ZmlkID0gdjlmaWQtPmZpZDsKKwkJaW91bml0ID0gdjlmaWQtPmlvdW5pdDsKKwkJdjlmaWQtPmZpZGNyZWF0ZSA9IDA7CiAJfQogCi0KIAlmaWxlLT5wcml2YXRlX2RhdGEgPSB2OWZpZDsKIAogCXY5ZmlkLT5yZGlyX3BvcyA9IDA7CkBAIC0yMDcsMTYgKzE3NSwxNiBAQAogfQogCiAvKioKLSAqIHY5ZnNfcmVhZCAtIHJlYWQgZnJvbSBhIGZpbGUgKGludGVybmFsKQorICogdjlmc19maWxlX3JlYWQgLSByZWFkIGZyb20gYSBmaWxlCiAgKiBAZmlsZXA6IGZpbGUgcG9pbnRlciB0byByZWFkCiAgKiBAZGF0YTogZGF0YSBidWZmZXIgdG8gcmVhZCBkYXRhIGludG8KICAqIEBjb3VudDogc2l6ZSBvZiBidWZmZXIKICAqIEBvZmZzZXQ6IG9mZnNldCBhdCB3aGljaCB0byByZWFkIGRhdGEKICAqCiAgKi8KLQogc3RhdGljIHNzaXplX3QKLXY5ZnNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqIG9mZnNldCkKK3Y5ZnNfZmlsZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqIGRhdGEsIHNpemVfdCBjb3VudCwKKwkgICAgICAgbG9mZl90ICogb2Zmc2V0KQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzID0gdjlmc19pbm9kZTJ2OXNlcyhpbm9kZSk7CkBAIC0yMjYsNiArMTk0LDcgQEAKIAlpbnQgcnNpemUgPSAwOwogCWludCByZXN1bHQgPSAwOwogCWludCB0b3RhbCA9IDA7CisJaW50IG47CiAKIAlkcHJpbnRrKERFQlVHX1ZGUywgIlxuIik7CiAKQEAgLTI0OCwxMCArMjE3LDE1IEBACiAJCX0gZWxzZQogCQkJKm9mZnNldCArPSByZXN1bHQ7CiAKLQkJLyogWFhYIC0gZXh0cmEgY29weSAqLwotCQltZW1jcHkoYnVmZmVyLCBmY2FsbC0+cGFyYW1zLnJyZWFkLmRhdGEsIHJlc3VsdCk7CisJCW4gPSBjb3B5X3RvX3VzZXIoZGF0YSwgZmNhbGwtPnBhcmFtcy5ycmVhZC5kYXRhLCByZXN1bHQpOworCQlpZiAobikgeworCQkJZHByaW50ayhERUJVR19FUlJPUiwgIlByb2JsZW0gY29weWluZyB0byB1c2VyICVkXG4iLCBuKTsKKwkJCWtmcmVlKGZjYWxsKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisKIAkJY291bnQgLT0gcmVzdWx0OwotCQlidWZmZXIgKz0gcmVzdWx0OworCQlkYXRhICs9IHJlc3VsdDsKIAkJdG90YWwgKz0gcmVzdWx0OwogCiAJCWtmcmVlKGZjYWxsKTsKQEAgLTI2NCwxMDEgKzIzOCw2IEBACiB9CiAKIC8qKgotICogdjlmc19maWxlX3JlYWQgLSByZWFkIGZyb20gYSBmaWxlCi0gKiBAZmlsZXA6IGZpbGUgcG9pbnRlciB0byByZWFkCi0gKiBAZGF0YTogZGF0YSBidWZmZXIgdG8gcmVhZCBkYXRhIGludG8KLSAqIEBjb3VudDogc2l6ZSBvZiBidWZmZXIKLSAqIEBvZmZzZXQ6IG9mZnNldCBhdCB3aGljaCB0byByZWFkIGRhdGEKLSAqCi0gKi8KLQotc3RhdGljIHNzaXplX3QKLXY5ZnNfZmlsZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqIGRhdGEsIHNpemVfdCBjb3VudCwKLQkgICAgICAgbG9mZl90ICogb2Zmc2V0KQotewotCWludCByZXR2YWwgPSAtMTsKLQlpbnQgcmV0ID0gMDsKLQljaGFyICpidWZmZXI7Ci0KLQlidWZmZXIgPSBrbWFsbG9jKGNvdW50LCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZmZlcikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXR2YWwgPSB2OWZzX3JlYWQoZmlscCwgYnVmZmVyLCBjb3VudCwgb2Zmc2V0KTsKLQlpZiAocmV0dmFsID4gMCkgewotCQlpZiAoKHJldCA9IGNvcHlfdG9fdXNlcihkYXRhLCBidWZmZXIsIHJldHZhbCkpICE9IDApIHsKLQkJCWRwcmludGsoREVCVUdfRVJST1IsICJQcm9ibGVtIGNvcHlpbmcgdG8gdXNlciAlZFxuIiwKLQkJCQlyZXQpOwotCQkJcmV0dmFsID0gcmV0OwotCQl9Ci0JfQotCi0Ja2ZyZWUoYnVmZmVyKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLS8qKgotICogdjlmc193cml0ZSAtIHdyaXRlIHRvIGEgZmlsZQotICogQGZpbGVwOiBmaWxlIHBvaW50ZXIgdG8gd3JpdGUKLSAqIEBkYXRhOiBkYXRhIGJ1ZmZlciB0byB3cml0ZSBkYXRhIGZyb20KLSAqIEBjb3VudDogc2l6ZSBvZiBidWZmZXIKLSAqIEBvZmZzZXQ6IG9mZnNldCBhdCB3aGljaCB0byB3cml0ZSBkYXRhCi0gKgotICovCi0KLXN0YXRpYyBzc2l6ZV90Ci12OWZzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICogb2Zmc2V0KQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKLQlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzID0gdjlmc19pbm9kZTJ2OXNlcyhpbm9kZSk7Ci0Jc3RydWN0IHY5ZnNfZmlkICp2OWZpZCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgdjlmc19mY2FsbCAqZmNhbGw7Ci0JaW50IGZpZCA9IHY5ZmlkLT5maWQ7Ci0JaW50IHJlc3VsdCA9IC1FSU87Ci0JaW50IHJzaXplID0gMDsKLQlpbnQgdG90YWwgPSAwOwotCi0JZHByaW50ayhERUJVR19WRlMsICJkYXRhICVwIGNvdW50ICVkIG9mZnNldCAleFxuIiwgYnVmZmVyLCAoaW50KWNvdW50LAotCQkoaW50KSpvZmZzZXQpOwotCXJzaXplID0gdjlzZXMtPm1heGRhdGEgLSBWOUZTX0lPSERSU1o7Ci0JaWYgKHY5ZmlkLT5pb3VuaXQgIT0gMCAmJiByc2l6ZSA+IHY5ZmlkLT5pb3VuaXQpCi0JCXJzaXplID0gdjlmaWQtPmlvdW5pdDsKLQotCWR1bXBfZGF0YShidWZmZXIsIGNvdW50KTsKLQotCWRvIHsKLQkJaWYgKGNvdW50IDwgcnNpemUpCi0JCQlyc2l6ZSA9IGNvdW50OwotCi0JCXJlc3VsdCA9Ci0JCSAgICB2OWZzX3Rfd3JpdGUodjlzZXMsIGZpZCwgKm9mZnNldCwgcnNpemUsIGJ1ZmZlciwgJmZjYWxsKTsKLQkJaWYgKHJlc3VsdCA8IDApIHsKLQkJCWVwcmludGsoS0VSTl9FUlIsICJlcnJvciB3aGlsZSB3cml0aW5nOiAlcyglZClcbiIsCi0JCQkJRkNBTExfRVJST1IoZmNhbGwpLCByZXN1bHQpOwotCQkJa2ZyZWUoZmNhbGwpOwotCQkJcmV0dXJuIHJlc3VsdDsKLQkJfSBlbHNlCi0JCQkqb2Zmc2V0ICs9IHJlc3VsdDsKLQotCQlrZnJlZShmY2FsbCk7Ci0KLQkJaWYgKHJlc3VsdCAhPSByc2l6ZSkgewotCQkJZXByaW50ayhLRVJOX0VSUiwKLQkJCQkic2hvcnQgd3JpdGU6IHY5ZnNfdF93cml0ZSByZXR1cm5lZCAlZFxuIiwKLQkJCQlyZXN1bHQpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQljb3VudCAtPSByZXN1bHQ7Ci0JCWJ1ZmZlciArPSByZXN1bHQ7Ci0JCXRvdGFsICs9IHJlc3VsdDsKLQl9IHdoaWxlIChjb3VudCk7Ci0KLQlyZXR1cm4gdG90YWw7Ci19Ci0KLS8qKgogICogdjlmc19maWxlX3dyaXRlIC0gd3JpdGUgdG8gYSBmaWxlCiAgKiBAZmlsZXA6IGZpbGUgcG9pbnRlciB0byB3cml0ZQogICogQGRhdGE6IGRhdGEgYnVmZmVyIHRvIHdyaXRlIGRhdGEgZnJvbQpAQCAtMzcxLDI0ICsyNTAsNjUgQEAKIHY5ZnNfZmlsZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKiBkYXRhLAogCQlzaXplX3QgY291bnQsIGxvZmZfdCAqIG9mZnNldCkKIHsKLQlpbnQgcmV0ID0gLTE7Ci0JY2hhciAqYnVmZmVyOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzID0gdjlmc19pbm9kZTJ2OXNlcyhpbm9kZSk7CisJc3RydWN0IHY5ZnNfZmlkICp2OWZpZCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgdjlmc19mY2FsbCAqZmNhbGw7CisJaW50IGZpZCA9IHY5ZmlkLT5maWQ7CisJaW50IHJlc3VsdCA9IC1FSU87CisJaW50IHJzaXplID0gMDsKKwlpbnQgdG90YWwgPSAwOworCWNoYXIgKmJ1ZjsKIAotCWJ1ZmZlciA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOwotCWlmIChidWZmZXIgPT0gTlVMTCkKKwlkcHJpbnRrKERFQlVHX1ZGUywgImRhdGEgJXAgY291bnQgJWQgb2Zmc2V0ICV4XG4iLCBkYXRhLCAoaW50KWNvdW50LAorCQkoaW50KSpvZmZzZXQpOworCXJzaXplID0gdjlzZXMtPm1heGRhdGEgLSBWOUZTX0lPSERSU1o7CisJaWYgKHY5ZmlkLT5pb3VuaXQgIT0gMCAmJiByc2l6ZSA+IHY5ZmlkLT5pb3VuaXQpCisJCXJzaXplID0gdjlmaWQtPmlvdW5pdDsKKworCWJ1ZiA9IGttYWxsb2ModjlzZXMtPm1heGRhdGEgLSBWOUZTX0lPSERSU1osIEdGUF9LRVJORUwpOworCWlmICghYnVmKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJldCA9IGNvcHlfZnJvbV91c2VyKGJ1ZmZlciwgZGF0YSwgY291bnQpOwotCWlmIChyZXQpIHsKLQkJZHByaW50ayhERUJVR19FUlJPUiwgIlByb2JsZW0gY29weWluZyBmcm9tIHVzZXJcbiIpOwotCQlyZXQgPSAtRUZBVUxUOwotCX0gZWxzZSB7Ci0JCXJldCA9IHY5ZnNfd3JpdGUoZmlscCwgYnVmZmVyLCBjb3VudCwgb2Zmc2V0KTsKLQl9CisJZG8geworCQlpZiAoY291bnQgPCByc2l6ZSkKKwkJCXJzaXplID0gY291bnQ7CiAKLQlrZnJlZShidWZmZXIpOworCQlyZXN1bHQgPSBjb3B5X2Zyb21fdXNlcihidWYsIGRhdGEsIHJzaXplKTsKKwkJaWYgKHJlc3VsdCkgeworCQkJZHByaW50ayhERUJVR19FUlJPUiwgIlByb2JsZW0gY29weWluZyBmcm9tIHVzZXJcbiIpOworCQkJa2ZyZWUoYnVmKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CiAKLQlyZXR1cm4gcmV0OworCQlkdW1wX2RhdGEoYnVmLCByc2l6ZSk7CisJCXJlc3VsdCA9IHY5ZnNfdF93cml0ZSh2OXNlcywgZmlkLCAqb2Zmc2V0LCByc2l6ZSwgYnVmLCAmZmNhbGwpOworCQlpZiAocmVzdWx0IDwgMCkgeworCQkJZXByaW50ayhLRVJOX0VSUiwgImVycm9yIHdoaWxlIHdyaXRpbmc6ICVzKCVkKVxuIiwKKwkJCQlGQ0FMTF9FUlJPUihmY2FsbCksIHJlc3VsdCk7CisJCQlrZnJlZShmY2FsbCk7CisJCQlrZnJlZShidWYpOworCQkJcmV0dXJuIHJlc3VsdDsKKwkJfSBlbHNlCisJCQkqb2Zmc2V0ICs9IHJlc3VsdDsKKworCQlrZnJlZShmY2FsbCk7CisJCWZjYWxsID0gTlVMTDsKKworCQlpZiAocmVzdWx0ICE9IHJzaXplKSB7CisJCQllcHJpbnRrKEtFUk5fRVJSLAorCQkJCSJzaG9ydCB3cml0ZTogdjlmc190X3dyaXRlIHJldHVybmVkICVkXG4iLAorCQkJCXJlc3VsdCk7CisJCQlicmVhazsKKwkJfQorCisJCWNvdW50IC09IHJlc3VsdDsKKwkJZGF0YSArPSByZXN1bHQ7CisJCXRvdGFsICs9IHJlc3VsdDsKKwl9IHdoaWxlIChjb3VudCk7CisKKwlrZnJlZShidWYpOworCXJldHVybiB0b3RhbDsKIH0KIAogc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2OWZzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZS5jIGIvZnMvOXAvdmZzX2lub2RlLmMKaW5kZXggMGMxM2ZjNi4uMmI2OTZhZSAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2lub2RlLmMKKysrIGIvZnMvOXAvdmZzX2lub2RlLmMKQEAgLTMwNyw3ICszMDcsNyBAQAogCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGRpcik7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRpci0+aV9zYjsKIAlzdHJ1Y3Qgdjlmc19maWQgKmRpcmZpZCA9Ci0JICAgIHY5ZnNfZmlkX2xvb2t1cChmaWxlX2RlbnRyeS0+ZF9wYXJlbnQsIEZJRF9XQUxLKTsKKwkgICAgdjlmc19maWRfbG9va3VwKGZpbGVfZGVudHJ5LT5kX3BhcmVudCk7CiAJc3RydWN0IHY5ZnNfZmlkICpmaWQgPSBOVUxMOwogCXN0cnVjdCBpbm9kZSAqZmlsZV9pbm9kZSA9IE5VTEw7CiAJc3RydWN0IHY5ZnNfZmNhbGwgKmZjYWxsID0gTlVMTDsKQEAgLTMxNyw2ICszMTcsNyBAQAogCWxvbmcgbmV3ZmlkID0gLTE7CiAJaW50IHJlc3VsdCA9IDA7CiAJdW5zaWduZWQgaW50IGlvdW5pdCA9IDA7CisJaW50IHdmaWRubyA9IC0xOwogCiAJcGVybSA9IHVuaXhtb2RlMnA5bW9kZSh2OXNlcywgcGVybSk7CiAKQEAgLTM1MCw3ICszNTEsNyBAQAogCWlmIChyZXN1bHQgPCAwKSB7CiAJCWRwcmludGsoREVCVUdfRVJST1IsICJjbG9uZSBlcnJvcjogJXNcbiIsIEZDQUxMX0VSUk9SKGZjYWxsKSk7CiAJCXY5ZnNfcHV0X2lkcG9vbChuZXdmaWQsICZ2OXNlcy0+ZmlkcG9vbCk7Ci0JCW5ld2ZpZCA9IDA7CisJCW5ld2ZpZCA9IC0xOwogCQlnb3RvIENsZWFuVXBGaWQ7CiAJfQogCkBAIC0zNjksMjAgKzM3MCwzOSBAQAogCXFpZCA9IGZjYWxsLT5wYXJhbXMucmNyZWF0ZS5xaWQ7CiAJa2ZyZWUoZmNhbGwpOwogCi0JZmlkID0gdjlmc19maWRfY3JlYXRlKGZpbGVfZGVudHJ5KTsKKwlmaWQgPSB2OWZzX2ZpZF9jcmVhdGUoZmlsZV9kZW50cnksIHY5c2VzLCBuZXdmaWQsIDEpOworCWRwcmludGsoREVCVUdfVkZTLCAiZmlkICVwICVkXG4iLCBmaWQsIGZpZC0+ZmlkY3JlYXRlKTsKIAlpZiAoIWZpZCkgewogCQlyZXN1bHQgPSAtRU5PTUVNOwogCQlnb3RvIENsZWFuVXBGaWQ7CiAJfQogCi0JZmlkLT5maWQgPSBuZXdmaWQ7Ci0JZmlkLT5maWRvcGVuID0gMDsKLQlmaWQtPmZpZGNyZWF0ZSA9IDE7CiAJZmlkLT5xaWQgPSBxaWQ7CiAJZmlkLT5pb3VuaXQgPSBpb3VuaXQ7Ci0JZmlkLT5yZGlyX3BvcyA9IDA7Ci0JZmlkLT5yZGlyX2ZjYWxsID0gTlVMTDsKLQlmaWQtPnY5c2VzID0gdjlzZXM7CisKKwkvKiB3YWxrIHRvIHRoZSBuZXdseSBjcmVhdGVkIGZpbGUgYW5kIHB1dCB0aGUgZmlkIGluIHRoZSBkZW50cnkgKi8KKwl3Zmlkbm8gPSB2OWZzX2dldF9pZHBvb2woJnY5c2VzLT5maWRwb29sKTsKKwlpZiAobmV3ZmlkIDwgMCkgeworCQllcHJpbnRrKEtFUk5fV0FSTklORywgIm5vIGZyZWUgZmlkcyBhdmFpbGFibGVcbiIpOworCQlyZXR1cm4gLUVOT1NQQzsKKwl9CisKKwlyZXN1bHQgPSB2OWZzX3Rfd2Fsayh2OXNlcywgZGlyZmlkbnVtLCB3Zmlkbm8sCisJCShjaGFyICopIGZpbGVfZGVudHJ5LT5kX25hbWUubmFtZSwgTlVMTCk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZHByaW50ayhERUJVR19FUlJPUiwgImNsb25lIGVycm9yOiAlc1xuIiwgRkNBTExfRVJST1IoZmNhbGwpKTsKKwkJdjlmc19wdXRfaWRwb29sKHdmaWRubywgJnY5c2VzLT5maWRwb29sKTsKKwkJd2ZpZG5vID0gLTE7CisJCWdvdG8gQ2xlYW5VcEZpZDsKKwl9CisKKwlpZiAoIXY5ZnNfZmlkX2NyZWF0ZShmaWxlX2RlbnRyeSwgdjlzZXMsIHdmaWRubywgMCkpIHsKKwkJaWYgKCF2OWZzX3RfY2x1bmsodjlzZXMsIG5ld2ZpZCwgJmZjYWxsKSkgeworCQkJdjlmc19wdXRfaWRwb29sKHdmaWRubywgJnY5c2VzLT5maWRwb29sKTsKKwkJfQorCisJCWdvdG8gQ2xlYW5VcEZpZDsKKwl9CiAKIAlpZiAoKHBlcm0gJiBWOUZTX0RNU1lNTElOSykgfHwgKHBlcm0gJiBWOUZTX0RNTElOSykgfHwKIAkgICAgKHBlcm0gJiBWOUZTX0RNTkFNRURQSVBFKSB8fCAocGVybSAmIFY5RlNfRE1TT0NLRVQpIHx8CkBAIC00MTAsMTEgKzQzMCwxMSBAQAogCWRfaW5zdGFudGlhdGUoZmlsZV9kZW50cnksIGZpbGVfaW5vZGUpOwogCiAJaWYgKHBlcm0gJiBWOUZTX0RNRElSKSB7Ci0JCWlmICh2OWZzX3RfY2x1bmsodjlzZXMsIG5ld2ZpZCwgJmZjYWxsKSkKKwkJaWYgKCF2OWZzX3RfY2x1bmsodjlzZXMsIG5ld2ZpZCwgJmZjYWxsKSkKKwkJCXY5ZnNfcHV0X2lkcG9vbChuZXdmaWQsICZ2OXNlcy0+ZmlkcG9vbCk7CisJCWVsc2UKIAkJCWRwcmludGsoREVCVUdfRVJST1IsICJjbHVuayBmb3IgbWtkaXIgZmFpbGVkOiAlc1xuIiwKIAkJCQlGQ0FMTF9FUlJPUihmY2FsbCkpOwotCi0JCXY5ZnNfcHV0X2lkcG9vbChuZXdmaWQsICZ2OXNlcy0+ZmlkcG9vbCk7CiAJCWtmcmVlKGZjYWxsKTsKIAkJZmlkLT5maWRvcGVuID0gMDsKIAkJZmlkLT5maWRjcmVhdGUgPSAwOwpAQCAtNDI2LDEyICs0NDYsMjIgQEAKICAgICAgIENsZWFuVXBGaWQ6CiAJa2ZyZWUoZmNhbGwpOwogCi0JaWYgKG5ld2ZpZCkgewotCQlpZiAodjlmc190X2NsdW5rKHY5c2VzLCBuZXdmaWQsICZmY2FsbCkpCisJaWYgKG5ld2ZpZCA+PSAwKSB7CisJCWlmICghdjlmc190X2NsdW5rKHY5c2VzLCBuZXdmaWQsICZmY2FsbCkpCisJCQl2OWZzX3B1dF9pZHBvb2wobmV3ZmlkLCAmdjlzZXMtPmZpZHBvb2wpOworCQllbHNlCiAJCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAiY2x1bmsgZmFpbGVkOiAlc1xuIiwKIAkJCQlGQ0FMTF9FUlJPUihmY2FsbCkpOwogCi0JCXY5ZnNfcHV0X2lkcG9vbChuZXdmaWQsICZ2OXNlcy0+ZmlkcG9vbCk7CisJCWtmcmVlKGZjYWxsKTsKKwl9CisJaWYgKHdmaWRubyA+PSAwKSB7CisJCWlmICghdjlmc190X2NsdW5rKHY5c2VzLCB3Zmlkbm8sICZmY2FsbCkpCisJCQl2OWZzX3B1dF9pZHBvb2wod2ZpZG5vLCAmdjlzZXMtPmZpZHBvb2wpOworCQllbHNlCisJCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAiY2x1bmsgZmFpbGVkOiAlc1xuIiwKKwkJCQlGQ0FMTF9FUlJPUihmY2FsbCkpOworCiAJCWtmcmVlKGZjYWxsKTsKIAl9CiAJcmV0dXJuIHJlc3VsdDsKQEAgLTQ2MSw3ICs0OTEsNyBAQAogCWZpbGVfaW5vZGUgPSBmaWxlLT5kX2lub2RlOwogCXNiID0gZmlsZV9pbm9kZS0+aV9zYjsKIAl2OXNlcyA9IHY5ZnNfaW5vZGUydjlzZXMoZmlsZV9pbm9kZSk7Ci0JdjlmaWQgPSB2OWZzX2ZpZF9sb29rdXAoZmlsZSwgRklEX09QKTsKKwl2OWZpZCA9IHY5ZnNfZmlkX2xvb2t1cChmaWxlKTsKIAogCWlmICghdjlmaWQpIHsKIAkJZHByaW50ayhERUJVR19FUlJPUiwKQEAgLTU0NSw3ICs1NzUsNyBAQAogCiAJc2IgPSBkaXItPmlfc2I7CiAJdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGRpcik7Ci0JZGlyZmlkID0gdjlmc19maWRfbG9va3VwKGRlbnRyeS0+ZF9wYXJlbnQsIEZJRF9XQUxLKTsKKwlkaXJmaWQgPSB2OWZzX2ZpZF9sb29rdXAoZGVudHJ5LT5kX3BhcmVudCk7CiAKIAlpZiAoIWRpcmZpZCkgewogCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAibm8gZGlyZmlkXG4iKTsKQEAgLTU3Myw3ICs2MDMsNyBAQAogCQl2OWZzX3B1dF9pZHBvb2wobmV3ZmlkLCAmdjlzZXMtPmZpZHBvb2wpOwogCQlpZiAocmVzdWx0ID09IC1FTk9FTlQpIHsKIAkJCWRfYWRkKGRlbnRyeSwgTlVMTCk7Ci0JCQlkcHJpbnRrKERFQlVHX0VSUk9SLAorCQkJZHByaW50ayhERUJVR19WRlMsCiAJCQkJIlJldHVybiBuZWdhdGl2ZSBkZW50cnkgJXAgY291bnQgJWRcbiIsCiAJCQkJZGVudHJ5LCBhdG9taWNfcmVhZCgmZGVudHJ5LT5kX2NvdW50KSk7CiAJCQlyZXR1cm4gTlVMTDsKQEAgLTYwMSwxNiArNjMxLDEzIEBACiAKIAlpbm9kZS0+aV9pbm8gPSB2OWZzX3FpZDJpbm8oJmZjYWxsLT5wYXJhbXMucnN0YXQuc3RhdC0+cWlkKTsKIAotCWZpZCA9IHY5ZnNfZmlkX2NyZWF0ZShkZW50cnkpOworCWZpZCA9IHY5ZnNfZmlkX2NyZWF0ZShkZW50cnksIHY5c2VzLCBuZXdmaWQsIDApOwogCWlmIChmaWQgPT0gTlVMTCkgewogCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAiY291bGRuJ3QgaW5zZXJ0XG4iKTsKIAkJcmVzdWx0ID0gLUVOT01FTTsKIAkJZ290byBGcmVlRmNhbGw7CiAJfQogCi0JZmlkLT5maWQgPSBuZXdmaWQ7Ci0JZmlkLT5maWRvcGVuID0gMDsKLQlmaWQtPnY5c2VzID0gdjlzZXM7CiAJZmlkLT5xaWQgPSBmY2FsbC0+cGFyYW1zLnJzdGF0LnN0YXQtPnFpZDsKIAogCWRlbnRyeS0+ZF9vcCA9ICZ2OWZzX2RlbnRyeV9vcGVyYXRpb25zOwpAQCAtNjY1LDExICs2OTIsMTEgQEAKIHsKIAlzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSA9IG9sZF9kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcyA9IHY5ZnNfaW5vZGUydjlzZXMob2xkX2lub2RlKTsKLQlzdHJ1Y3Qgdjlmc19maWQgKm9sZGZpZCA9IHY5ZnNfZmlkX2xvb2t1cChvbGRfZGVudHJ5LCBGSURfV0FMSyk7CisJc3RydWN0IHY5ZnNfZmlkICpvbGRmaWQgPSB2OWZzX2ZpZF9sb29rdXAob2xkX2RlbnRyeSk7CiAJc3RydWN0IHY5ZnNfZmlkICpvbGRkaXJmaWQgPQotCSAgICB2OWZzX2ZpZF9sb29rdXAob2xkX2RlbnRyeS0+ZF9wYXJlbnQsIEZJRF9XQUxLKTsKKwkgICAgdjlmc19maWRfbG9va3VwKG9sZF9kZW50cnktPmRfcGFyZW50KTsKIAlzdHJ1Y3Qgdjlmc19maWQgKm5ld2RpcmZpZCA9Ci0JICAgIHY5ZnNfZmlkX2xvb2t1cChuZXdfZGVudHJ5LT5kX3BhcmVudCwgRklEX1dBTEspOworCSAgICB2OWZzX2ZpZF9sb29rdXAobmV3X2RlbnRyeS0+ZF9wYXJlbnQpOwogCXN0cnVjdCB2OWZzX3N0YXQgKm1pc3RhdCA9IGttYWxsb2ModjlzZXMtPm1heGRhdGEsIEdGUF9LRVJORUwpOwogCXN0cnVjdCB2OWZzX2ZjYWxsICpmY2FsbCA9IE5VTEw7CiAJaW50IGZpZCA9IC0xOwpAQCAtNzQ0LDcgKzc3MSw3IEBACiB7CiAJc3RydWN0IHY5ZnNfZmNhbGwgKmZjYWxsID0gTlVMTDsKIAlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzID0gdjlmc19pbm9kZTJ2OXNlcyhkZW50cnktPmRfaW5vZGUpOwotCXN0cnVjdCB2OWZzX2ZpZCAqZmlkID0gdjlmc19maWRfbG9va3VwKGRlbnRyeSwgRklEX09QKTsKKwlzdHJ1Y3Qgdjlmc19maWQgKmZpZCA9IHY5ZnNfZmlkX2xvb2t1cChkZW50cnkpOwogCWludCBlcnIgPSAtRVBFUk07CiAKIAlkcHJpbnRrKERFQlVHX1ZGUywgImRlbnRyeTogJXBcbiIsIGRlbnRyeSk7CkBAIC03NzgsNyArODA1LDcgQEAKIHN0YXRpYyBpbnQgdjlmc192ZnNfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqaWF0dHIpCiB7CiAJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcyA9IHY5ZnNfaW5vZGUydjlzZXMoZGVudHJ5LT5kX2lub2RlKTsKLQlzdHJ1Y3Qgdjlmc19maWQgKmZpZCA9IHY5ZnNfZmlkX2xvb2t1cChkZW50cnksIEZJRF9PUCk7CisJc3RydWN0IHY5ZnNfZmlkICpmaWQgPSB2OWZzX2ZpZF9sb29rdXAoZGVudHJ5KTsKIAlzdHJ1Y3Qgdjlmc19mY2FsbCAqZmNhbGwgPSBOVUxMOwogCXN0cnVjdCB2OWZzX3N0YXQgKm1pc3RhdCA9IGttYWxsb2ModjlzZXMtPm1heGRhdGEsIEdGUF9LRVJORUwpOwogCWludCByZXMgPSAtRVBFUk07CkBAIC05NjAsNyArOTg3LDcgQEAKIAlpZiAocmV0dmFsICE9IDApCiAJCWdvdG8gRnJlZUZjYWxsOwogCi0JbmV3ZmlkID0gdjlmc19maWRfbG9va3VwKGRlbnRyeSwgRklEX09QKTsKKwluZXdmaWQgPSB2OWZzX2ZpZF9sb29rdXAoZGVudHJ5KTsKIAogCS8qIGlzc3VlIGEgdHdzdGF0ICovCiAJdjlmc19ibGFua19taXN0YXQodjlzZXMsIG1pc3RhdCk7CkBAIC0xMDA0LDcgKzEwMzEsNyBAQAogCiAJc3RydWN0IHY5ZnNfZmNhbGwgKmZjYWxsID0gTlVMTDsKIAlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzID0gdjlmc19pbm9kZTJ2OXNlcyhkZW50cnktPmRfaW5vZGUpOwotCXN0cnVjdCB2OWZzX2ZpZCAqZmlkID0gdjlmc19maWRfbG9va3VwKGRlbnRyeSwgRklEX09QKTsKKwlzdHJ1Y3Qgdjlmc19maWQgKmZpZCA9IHY5ZnNfZmlkX2xvb2t1cChkZW50cnkpOwogCiAJaWYgKCFmaWQpIHsKIAkJZHByaW50ayhERUJVR19FUlJPUiwgImNvdWxkIG5vdCByZXNvbHZlIGZpZCBmcm9tIGRlbnRyeVxuIik7CkBAIC0xMDYzLDggKzEwOTAsOCBAQAogCWludCByZXQ7CiAJY2hhciAqbGluayA9IF9fZ2V0bmFtZSgpOwogCi0JaWYgKHN0cmxlbihsaW5rKSA8IGJ1ZmxlbikKLQkJYnVmbGVuID0gc3RybGVuKGxpbmspOworCWlmIChidWZsZW4gPiBQQVRIX01BWCkKKwkJYnVmbGVuID0gUEFUSF9NQVg7CiAKIAlkcHJpbnRrKERFQlVHX1ZGUywgIiBkZW50cnk6ICVzICglcClcbiIsIGRlbnRyeS0+ZF9pbmFtZSwgZGVudHJ5KTsKIApAQCAtMTE0OCw3ICsxMTc1LDcgQEAKIAlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzID0gdjlmc19pbm9kZTJ2OXNlcyhkaXIpOwogCXN0cnVjdCB2OWZzX2ZjYWxsICpmY2FsbCA9IE5VTEw7CiAJc3RydWN0IHY5ZnNfc3RhdCAqbWlzdGF0ID0ga21hbGxvYyh2OXNlcy0+bWF4ZGF0YSwgR0ZQX0tFUk5FTCk7Ci0Jc3RydWN0IHY5ZnNfZmlkICpvbGRmaWQgPSB2OWZzX2ZpZF9sb29rdXAob2xkX2RlbnRyeSwgRklEX09QKTsKKwlzdHJ1Y3Qgdjlmc19maWQgKm9sZGZpZCA9IHY5ZnNfZmlkX2xvb2t1cChvbGRfZGVudHJ5KTsKIAlzdHJ1Y3Qgdjlmc19maWQgKm5ld2ZpZCA9IE5VTEw7CiAJY2hhciAqc3ltbmFtZSA9IF9fZ2V0bmFtZSgpOwogCkBAIC0xMTY4LDcgKzExOTUsNyBAQAogCWlmIChyZXR2YWwgIT0gMCkKIAkJZ290byBGcmVlTWVtOwogCi0JbmV3ZmlkID0gdjlmc19maWRfbG9va3VwKGRlbnRyeSwgRklEX09QKTsKKwluZXdmaWQgPSB2OWZzX2ZpZF9sb29rdXAoZGVudHJ5KTsKIAlpZiAoIW5ld2ZpZCkgewogCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAiY291bGRuJ3QgcmVzb2x2ZSBmaWQgZnJvbSBkZW50cnlcbiIpOwogCQlnb3RvIEZyZWVNZW07CkBAIC0xMjQ2LDcgKzEyNzMsNyBAQAogCWlmIChyZXR2YWwgIT0gMCkKIAkJZ290byBGcmVlTWVtOwogCi0JbmV3ZmlkID0gdjlmc19maWRfbG9va3VwKGRlbnRyeSwgRklEX09QKTsKKwluZXdmaWQgPSB2OWZzX2ZpZF9sb29rdXAoZGVudHJ5KTsKIAlpZiAoIW5ld2ZpZCkgewogCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAiY291ZG4ndCByZXNvdmUgZmlkIGZyb20gZGVudHJ5XG4iKTsKIAkJcmV0dmFsID0gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19zdXBlci5jIGIvZnMvOXAvdmZzX3N1cGVyLmMKaW5kZXggODY4ZjM1MC4uODJjNWIwMCAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX3N1cGVyLmMKKysrIGIvZnMvOXAvdmZzX3N1cGVyLmMKQEAgLTEyOSw4ICsxMjksNyBAQAogCiAJaWYgKChuZXdmaWQgPSB2OWZzX3Nlc3Npb25faW5pdCh2OXNlcywgZGV2X25hbWUsIGRhdGEpKSA8IDApIHsKIAkJZHByaW50ayhERUJVR19FUlJPUiwgInByb2JsZW0gaW5pdGlhdGluZyBzZXNzaW9uXG4iKTsKLQkJcmV0dmFsID0gbmV3ZmlkOwotCQlnb3RvIGZyZWVfc2Vzc2lvbjsKKwkJcmV0dXJuIEVSUl9QVFIobmV3ZmlkKTsKIAl9CiAKIAlzYiA9IHNnZXQoZnNfdHlwZSwgTlVMTCwgdjlmc19zZXRfc3VwZXIsIHY5c2VzKTsKQEAgLTE1MCwyOCArMTQ5LDI0IEBACiAKIAlpZiAoIXJvb3QpIHsKIAkJcmV0dmFsID0gLUVOT01FTTsKLQkJZ290byByZWxlYXNlX2lub2RlOworCQlnb3RvIHB1dF9iYWNrX3NiOwogCX0KIAogCXNiLT5zX3Jvb3QgPSByb290OwogCi0JLyogU2V0dXAgdGhlIFJvb3QgSW5vZGUgKi8KLQlyb290X2ZpZCA9IHY5ZnNfZmlkX2NyZWF0ZShyb290KTsKLQlpZiAocm9vdF9maWQgPT0gTlVMTCkgewotCQlyZXR2YWwgPSAtRU5PTUVNOwotCQlnb3RvIHJlbGVhc2VfZGVudHJ5OwotCX0KLQotCXJvb3RfZmlkLT5maWRvcGVuID0gMDsKLQlyb290X2ZpZC0+djlzZXMgPSB2OXNlczsKLQogCXN0YXRfcmVzdWx0ID0gdjlmc190X3N0YXQodjlzZXMsIG5ld2ZpZCwgJmZjYWxsKTsKIAlpZiAoc3RhdF9yZXN1bHQgPCAwKSB7CiAJCWRwcmludGsoREVCVUdfRVJST1IsICJzdGF0IGVycm9yXG4iKTsKIAkJdjlmc190X2NsdW5rKHY5c2VzLCBuZXdmaWQsIE5VTEwpOwogCQl2OWZzX3B1dF9pZHBvb2wobmV3ZmlkLCAmdjlzZXMtPmZpZHBvb2wpOwogCX0gZWxzZSB7Ci0JCXJvb3RfZmlkLT5maWQgPSBuZXdmaWQ7CisJCS8qIFNldHVwIHRoZSBSb290IElub2RlICovCisJCXJvb3RfZmlkID0gdjlmc19maWRfY3JlYXRlKHJvb3QsIHY5c2VzLCBuZXdmaWQsIDApOworCQlpZiAocm9vdF9maWQgPT0gTlVMTCkgeworCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCWdvdG8gcHV0X2JhY2tfc2I7CisJCX0KKwogCQlyb290X2ZpZC0+cWlkID0gZmNhbGwtPnBhcmFtcy5yc3RhdC5zdGF0LT5xaWQ7CiAJCXJvb3QtPmRfaW5vZGUtPmlfaW5vID0KIAkJICAgIHY5ZnNfcWlkMmlubygmZmNhbGwtPnBhcmFtcy5yc3RhdC5zdGF0LT5xaWQpOwpAQCAtMTgyLDI1ICsxNzcsMTUgQEAKIAogCWlmIChzdGF0X3Jlc3VsdCA8IDApIHsKIAkJcmV0dmFsID0gc3RhdF9yZXN1bHQ7Ci0JCWdvdG8gcmVsZWFzZV9kZW50cnk7CisJCWdvdG8gcHV0X2JhY2tfc2I7CiAJfQogCiAJcmV0dXJuIHNiOwogCi0gICAgICByZWxlYXNlX2RlbnRyeToKLQlkcHV0KHNiLT5zX3Jvb3QpOwotCi0gICAgICByZWxlYXNlX2lub2RlOgotCWlwdXQoaW5vZGUpOwotCi0gICAgICBwdXRfYmFja19zYjoKK3B1dF9iYWNrX3NiOgorCS8qIGRlYWN0aXZhdGVfc3VwZXIgY2FsbHMgdjlmc19raWxsX3N1cGVyIHdoaWNoIHdpbGwgZnJlZXMgdGhlIHJlc3QgKi8KIAl1cF93cml0ZSgmc2ItPnNfdW1vdW50KTsKIAlkZWFjdGl2YXRlX3N1cGVyKHNiKTsKLQl2OWZzX3Nlc3Npb25fY2xvc2UodjlzZXMpOwotCi0gICAgICBmcmVlX3Nlc3Npb246Ci0Ja2ZyZWUodjlzZXMpOwotCiAJcmV0dXJuIEVSUl9QVFIocmV0dmFsKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggMDY4Y2NlYS4uNDhmNTQyMiAxMDA2NDQKLS0tIGEvZnMvS2NvbmZpZworKysgYi9mcy9LY29uZmlnCkBAIC00NzIsNiArNDcyLDkgQEAKIAkgIHV0aWxpdGllcyBpcyBhdmFpbGFibGUgZnJvbSB0aGUgRlVTRSBob21lcGFnZToKIAkgIDxodHRwOi8vZnVzZS5zb3VyY2Vmb3JnZS5uZXQvPgogCisJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mdXNlLnR4dD4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9DaGFuZ2VzPiBmb3IgbmVlZGVkIGxpYnJhcnkvdXRpbGl0eSB2ZXJzaW9uLgorCiAJICBJZiB5b3Ugd2FudCB0byBkZXZlbG9wIGEgdXNlcnNwYWNlIEZTLCBvciBpZiB5b3Ugd2FudCB0byB1c2UKIAkgIGEgZmlsZXN5c3RlbSBiYXNlZCBvbiBGVVNFLCBhbnN3ZXIgWSBvciBNLgogCmRpZmYgLS1naXQgYS9mcy9haW8uYyBiL2ZzL2Fpby5jCmluZGV4IDM4ZjYyNjguLmVkZmNhNWIgMTAwNjQ0Ci0tLSBhL2ZzL2Fpby5jCisrKyBiL2ZzL2Fpby5jCkBAIC0zOTgsNyArMzk4LDcgQEAKIAlpZiAodW5saWtlbHkoIXJlcSkpCiAJCXJldHVybiBOVUxMOwogCi0JcmVxLT5raV9mbGFncyA9IDEgPDwgS0lGX0xPQ0tFRDsKKwlyZXEtPmtpX2ZsYWdzID0gMDsKIAlyZXEtPmtpX3VzZXJzID0gMjsKIAlyZXEtPmtpX2tleSA9IDA7CiAJcmVxLT5raV9jdHggPSBjdHg7CkBAIC01NDcsMjQgKzU0Nyw2IEBACiAJcmV0dXJuIGlvY3R4OwogfQogCi1zdGF0aWMgaW50IGxvY2tfa2lvY2JfYWN0aW9uKHZvaWQgKnBhcmFtKQotewotCXNjaGVkdWxlKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBsb2NrX2tpb2NiKHN0cnVjdCBraW9jYiAqaW9jYikKLXsKLQl3YWl0X29uX2JpdF9sb2NrKCZpb2NiLT5raV9mbGFncywgS0lGX0xPQ0tFRCwgbG9ja19raW9jYl9hY3Rpb24sCi0JCQkgVEFTS19VTklOVEVSUlVQVElCTEUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX2tpb2NiKHN0cnVjdCBraW9jYiAqaW9jYikKLXsKLQlraW9jYkNsZWFyTG9ja2VkKGlvY2IpOwotCXdha2VfdXBfYml0KCZpb2NiLT5raV9mbGFncywgS0lGX0xPQ0tFRCk7Ci19Ci0KIC8qCiAgKiB1c2VfbW0KICAqCU1ha2VzIHRoZSBjYWxsaW5nIGtlcm5lbCB0aHJlYWQgdGFrZSBvbiB0aGUgc3BlY2lmaWVkCkBAIC03NDAsMTkgKzcyMiw5IEBACiAJcmV0ID0gcmV0cnkoaW9jYik7CiAJY3VycmVudC0+aW9fd2FpdCA9IE5VTEw7CiAKLQlpZiAoLUVJT0NCUkVUUlkgIT0gcmV0KSB7Ci0gCQlpZiAoLUVJT0NCUVVFVUVEICE9IHJldCkgewotCQkJQlVHX09OKCFsaXN0X2VtcHR5KCZpb2NiLT5raV93YWl0LnRhc2tfbGlzdCkpOwotCQkJYWlvX2NvbXBsZXRlKGlvY2IsIHJldCwgMCk7Ci0JCQkvKiBtdXN0IG5vdCBhY2Nlc3MgdGhlIGlvY2IgYWZ0ZXIgdGhpcyAqLwotCQl9Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogSXNzdWUgYW4gYWRkaXRpb25hbCByZXRyeSB0byBhdm9pZCB3YWl0aW5nIGZvcmV2ZXIgaWYKLQkJICogbm8gd2FpdHMgd2VyZSBxdWV1ZWQgKGUuZy4gaW4gY2FzZSBvZiBhIHNob3J0IHJlYWQpLgotCQkgKi8KLQkJaWYgKGxpc3RfZW1wdHkoJmlvY2ItPmtpX3dhaXQudGFza19saXN0KSkKLQkJCWtpb2NiU2V0S2lja2VkKGlvY2IpOworCWlmIChyZXQgIT0gLUVJT0NCUkVUUlkgJiYgcmV0ICE9IC1FSU9DQlFVRVVFRCkgeworCQlCVUdfT04oIWxpc3RfZW1wdHkoJmlvY2ItPmtpX3dhaXQudGFza19saXN0KSk7CisJCWFpb19jb21wbGV0ZShpb2NiLCByZXQsIDApOwogCX0KIG91dDoKIAlzcGluX2xvY2tfaXJxKCZjdHgtPmN0eF9sb2NrKTsKQEAgLTgwNSw5ICs3NzcsNyBAQAogCQkgKiBIb2xkIGFuIGV4dHJhIHJlZmVyZW5jZSB3aGlsZSByZXRyeWluZyBpL28uCiAJCSAqLwogCQlpb2NiLT5raV91c2VycysrOyAgICAgICAvKiBncmFiIGV4dHJhIHJlZmVyZW5jZSAqLwotCQlsb2NrX2tpb2NiKGlvY2IpOwogCQlhaW9fcnVuX2lvY2IoaW9jYik7Ci0JCXVubG9ja19raW9jYihpb2NiKTsKIAkJaWYgKF9fYWlvX3B1dF9yZXEoY3R4LCBpb2NiKSkgIC8qIGRyb3AgZXh0cmEgcmVmICovCiAJCQlwdXRfaW9jdHgoY3R4KTsKICAJfQpAQCAtODk4LDE2ICs4NjgsMjQgQEAKICAqIGFuZCBpZiByZXF1aXJlZCBhY3RpdmF0ZSB0aGUgYWlvIHdvcmsgcXVldWUgdG8gcHJvY2VzcwogICogaXQKICAqLwotc3RhdGljIHZvaWQgcXVldWVfa2lja2VkX2lvY2Ioc3RydWN0IGtpb2NiICppb2NiKQorc3RhdGljIHZvaWQgdHJ5X3F1ZXVlX2tpY2tlZF9pb2NiKHN0cnVjdCBraW9jYiAqaW9jYikKIHsKICAJc3RydWN0IGtpb2N0eAkqY3R4ID0gaW9jYi0+a2lfY3R4OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJ1biA9IDA7CiAKLQlXQVJOX09OKCghbGlzdF9lbXB0eSgmaW9jYi0+a2lfd2FpdC50YXNrX2xpc3QpKSk7CisJLyogV2UncmUgc3VwcG9zZWQgdG8gYmUgdGhlIG9ubHkgcGF0aCBwdXR0aW5nIHRoZSBpb2NiIGJhY2sgb24gdGhlIHJ1bgorCSAqIGxpc3QuICBJZiB3ZSBmaW5kIHRoYXQgdGhlIGlvY2IgaXMgKmJhY2sqIG9uIGEgd2FpdCBxdWV1ZSBhbHJlYWR5CisJICogdGhhbiByZXRyeSBoYXMgaGFwcGVuZWQgYmVmb3JlIHdlIGNvdWxkIHF1ZXVlIHRoZSBpb2NiLiAgVGhpcyBhbHNvCisJICogbWVhbnMgdGhhdCB0aGUgcmV0cnkgY291bGQgaGF2ZSBjb21wbGV0ZWQgYW5kIGZyZWVkIG91ciBpb2NiLCBubworCSAqIGdvb2QuICovCisJQlVHX09OKCghbGlzdF9lbXB0eSgmaW9jYi0+a2lfd2FpdC50YXNrX2xpc3QpKSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3R4LT5jdHhfbG9jaywgZmxhZ3MpOwotCXJ1biA9IF9fcXVldWVfa2lja2VkX2lvY2IoaW9jYik7CisJLyogc2V0IHRoaXMgaW5zaWRlIHRoZSBsb2NrIHNvIHRoYXQgd2UgY2FuJ3QgcmFjZSB3aXRoIGFpb19ydW5faW9jYigpCisJICogdGVzdGluZyBpdCBhbmQgcHV0dGluZyB0aGUgaW9jYiBvbiB0aGUgcnVuIGxpc3QgdW5kZXIgdGhlIGxvY2sgKi8KKwlpZiAoIWtpb2NiVHJ5S2ljayhpb2NiKSkKKwkJcnVuID0gX19xdWV1ZV9raWNrZWRfaW9jYihpb2NiKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPmN0eF9sb2NrLCBmbGFncyk7CiAJaWYgKHJ1bikKIAkJYWlvX3F1ZXVlX3dvcmsoY3R4KTsKQEAgLTkzMCwxMCArOTA4LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCS8qIElmIGl0cyBhbHJlYWR5IGtpY2tlZCB3ZSBzaG91bGRuJ3QgcXVldWUgaXQgYWdhaW4gKi8KLQlpZiAoIWtpb2NiVHJ5S2ljayhpb2NiKSkgewotCQlxdWV1ZV9raWNrZWRfaW9jYihpb2NiKTsKLQl9CisJdHJ5X3F1ZXVlX2tpY2tlZF9pb2NiKGlvY2IpOwogfQogRVhQT1JUX1NZTUJPTChraWNrX2lvY2IpOwogCkBAIC0xMzIxLDggKzEyOTYsMTEgQEAKIH0KIAogLyoKLSAqIERlZmF1bHQgcmV0cnkgbWV0aG9kIGZvciBhaW9fcmVhZCAoYWxzbyB1c2VkIGZvciBmaXJzdCB0aW1lIHN1Ym1pdCkKLSAqIFJlc3BvbnNpYmxlIGZvciB1cGRhdGluZyBpb2NiIHN0YXRlIGFzIHJldHJpZXMgcHJvZ3Jlc3MKKyAqIGFpb19we3JlYWQsd3JpdGV9IGFyZSB0aGUgZGVmYXVsdCAga2lfcmV0cnkgbWV0aG9kcyBmb3IKKyAqIElPX0NNRF9Qe1JFQUQsV1JJVEV9LiAgVGhleSBtYWludGFpbnMga2lvY2IgcmV0cnkgc3RhdGUgYXJvdW5kIHBvdGVudGlhbGx5CisgKiBtdWx0aXBsZSBjYWxscyB0byBmX29wLT5haW9fcmVhZCgpLiAgVGhleSBsb29wIGFyb3VuZCBwYXJ0aWFsIHByb2dyZXNzCisgKiBpbnN0ZWFkIG9mIHJldHVybmluZyAtRUlPQ0JSRVRSWSBiZWNhdXNlIHRoZXkgZG9uJ3QgaGF2ZSB0aGUgbWVhbnMgdG8gY2FsbAorICoga2lja19pb2NiKCkuCiAgKi8KIHN0YXRpYyBzc2l6ZV90IGFpb19wcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IpCiB7CkBAIC0xMzMxLDI1ICsxMzA5LDI1IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctPmhvc3Q7CiAJc3NpemVfdCByZXQgPSAwOwogCi0JcmV0ID0gZmlsZS0+Zl9vcC0+YWlvX3JlYWQoaW9jYiwgaW9jYi0+a2lfYnVmLAotCQlpb2NiLT5raV9sZWZ0LCBpb2NiLT5raV9wb3MpOwotCi0JLyoKLQkgKiBDYW4ndCBqdXN0IGRlcGVuZCBvbiBpb2NiLT5raV9sZWZ0IHRvIGRldGVybWluZQotCSAqIHdoZXRoZXIgd2UgYXJlIGRvbmUuIFRoaXMgbWF5IGhhdmUgYmVlbiBhIHNob3J0IHJlYWQuCi0JICovCi0JaWYgKHJldCA+IDApIHsKLQkJaW9jYi0+a2lfYnVmICs9IHJldDsKLQkJaW9jYi0+a2lfbGVmdCAtPSByZXQ7CisJZG8geworCQlyZXQgPSBmaWxlLT5mX29wLT5haW9fcmVhZChpb2NiLCBpb2NiLT5raV9idWYsCisJCQlpb2NiLT5raV9sZWZ0LCBpb2NiLT5raV9wb3MpOwogCQkvKgotCQkgKiBGb3IgcGlwZXMgYW5kIHNvY2tldHMgd2UgcmV0dXJuIG9uY2Ugd2UgaGF2ZQotCQkgKiBzb21lIGRhdGE7IGZvciByZWd1bGFyIGZpbGVzIHdlIHJldHJ5IHRpbGwgd2UKLQkJICogY29tcGxldGUgdGhlIGVudGlyZSByZWFkIG9yIGZpbmQgdGhhdCB3ZSBjYW4ndAotCQkgKiByZWFkIGFueSBtb3JlIGRhdGEgKGUuZyBzaG9ydCByZWFkcykuCisJCSAqIENhbid0IGp1c3QgZGVwZW5kIG9uIGlvY2ItPmtpX2xlZnQgdG8gZGV0ZXJtaW5lCisJCSAqIHdoZXRoZXIgd2UgYXJlIGRvbmUuIFRoaXMgbWF5IGhhdmUgYmVlbiBhIHNob3J0IHJlYWQuCiAJCSAqLwotCQlpZiAoIVNfSVNGSUZPKGlub2RlLT5pX21vZGUpICYmICFTX0lTU09DSyhpbm9kZS0+aV9tb2RlKSkKLQkJCXJldCA9IC1FSU9DQlJFVFJZOwotCX0KKwkJaWYgKHJldCA+IDApIHsKKwkJCWlvY2ItPmtpX2J1ZiArPSByZXQ7CisJCQlpb2NiLT5raV9sZWZ0IC09IHJldDsKKwkJfQorCisJCS8qCisJCSAqIEZvciBwaXBlcyBhbmQgc29ja2V0cyB3ZSByZXR1cm4gb25jZSB3ZSBoYXZlIHNvbWUgZGF0YTsgZm9yCisJCSAqIHJlZ3VsYXIgZmlsZXMgd2UgcmV0cnkgdGlsbCB3ZSBjb21wbGV0ZSB0aGUgZW50aXJlIHJlYWQgb3IKKwkJICogZmluZCB0aGF0IHdlIGNhbid0IHJlYWQgYW55IG1vcmUgZGF0YSAoZS5nIHNob3J0IHJlYWRzKS4KKwkJICovCisJfSB3aGlsZSAocmV0ID4gMCAmJiBpb2NiLT5raV9sZWZ0ID4gMCAmJgorCQkgIVNfSVNGSUZPKGlub2RlLT5pX21vZGUpICYmICFTX0lTU09DSyhpbm9kZS0+aV9tb2RlKSk7CiAKIAkvKiBUaGlzIG1lYW5zIHdlIG11c3QgaGF2ZSB0cmFuc2ZlcnJlZCBhbGwgdGhhdCB3ZSBjb3VsZCAqLwogCS8qIE5vIG5lZWQgdG8gcmV0cnkgYW55bW9yZSAqLwpAQCAtMTM1OSwyNyArMTMzNywyMSBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qCi0gKiBEZWZhdWx0IHJldHJ5IG1ldGhvZCBmb3IgYWlvX3dyaXRlIChhbHNvIHVzZWQgZm9yIGZpcnN0IHRpbWUgc3VibWl0KQotICogUmVzcG9uc2libGUgZm9yIHVwZGF0aW5nIGlvY2Igc3RhdGUgYXMgcmV0cmllcyBwcm9ncmVzcwotICovCisvKiBzZWUgYWlvX3ByZWFkKCkgKi8KIHN0YXRpYyBzc2l6ZV90IGFpb19wd3JpdGUoc3RydWN0IGtpb2NiICppb2NiKQogewogCXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0+a2lfZmlscDsKIAlzc2l6ZV90IHJldCA9IDA7CiAKLQlyZXQgPSBmaWxlLT5mX29wLT5haW9fd3JpdGUoaW9jYiwgaW9jYi0+a2lfYnVmLAotCQlpb2NiLT5raV9sZWZ0LCBpb2NiLT5raV9wb3MpOworCWRvIHsKKwkJcmV0ID0gZmlsZS0+Zl9vcC0+YWlvX3dyaXRlKGlvY2IsIGlvY2ItPmtpX2J1ZiwKKwkJCWlvY2ItPmtpX2xlZnQsIGlvY2ItPmtpX3Bvcyk7CisJCWlmIChyZXQgPiAwKSB7CisJCQlpb2NiLT5raV9idWYgKz0gcmV0OworCQkJaW9jYi0+a2lfbGVmdCAtPSByZXQ7CisJCX0KKwl9IHdoaWxlIChyZXQgPiAwICYmIGlvY2ItPmtpX2xlZnQgPiAwKTsKIAotCWlmIChyZXQgPiAwKSB7Ci0JCWlvY2ItPmtpX2J1ZiArPSByZXQ7Ci0JCWlvY2ItPmtpX2xlZnQgLT0gcmV0OwotCi0JCXJldCA9IC1FSU9DQlJFVFJZOwotCX0KLQotCS8qIFRoaXMgbWVhbnMgd2UgbXVzdCBoYXZlIHRyYW5zZmVycmVkIGFsbCB0aGF0IHdlIGNvdWxkICovCi0JLyogTm8gbmVlZCB0byByZXRyeSBhbnltb3JlICovCiAJaWYgKChyZXQgPT0gMCkgfHwgKGlvY2ItPmtpX2xlZnQgPT0gMCkpCiAJCXJldCA9IGlvY2ItPmtpX25ieXRlcyAtIGlvY2ItPmtpX2xlZnQ7CiAKQEAgLTE0MjUsNiArMTM5Nyw5IEBACiAJCWlmICh1bmxpa2VseSghYWNjZXNzX29rKFZFUklGWV9XUklURSwga2lvY2ItPmtpX2J1ZiwKIAkJCWtpb2NiLT5raV9sZWZ0KSkpCiAJCQlicmVhazsKKwkJcmV0ID0gc2VjdXJpdHlfZmlsZV9wZXJtaXNzaW9uKGZpbGUsIE1BWV9SRUFEKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpCisJCQlicmVhazsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJaWYgKGZpbGUtPmZfb3AtPmFpb19yZWFkKQogCQkJa2lvY2ItPmtpX3JldHJ5ID0gYWlvX3ByZWFkOwpAQCAtMTQzNyw2ICsxNDEyLDkgQEAKIAkJaWYgKHVubGlrZWx5KCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGtpb2NiLT5raV9idWYsCiAJCQlraW9jYi0+a2lfbGVmdCkpKQogCQkJYnJlYWs7CisJCXJldCA9IHNlY3VyaXR5X2ZpbGVfcGVybWlzc2lvbihmaWxlLCBNQVlfV1JJVEUpOworCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCWJyZWFrOwogCQlyZXQgPSAtRUlOVkFMOwogCQlpZiAoZmlsZS0+Zl9vcC0+YWlvX3dyaXRlKQogCQkJa2lvY2ItPmtpX3JldHJ5ID0gYWlvX3B3cml0ZTsKQEAgLTE1NDksNyArMTUyNyw2IEBACiAKIAlzcGluX2xvY2tfaXJxKCZjdHgtPmN0eF9sb2NrKTsKIAlhaW9fcnVuX2lvY2IocmVxKTsKLQl1bmxvY2tfa2lvY2IocmVxKTsKIAlpZiAoIWxpc3RfZW1wdHkoJmN0eC0+cnVuX2xpc3QpKSB7CiAJCS8qIGRyYWluIHRoZSBydW4gbGlzdCAqLwogCQl3aGlsZSAoX19haW9fcnVuX2lvY2JzKGN0eCkpCkBAIC0xNjgxLDcgKzE2NTgsNiBAQAogCWlmIChOVUxMICE9IGNhbmNlbCkgewogCQlzdHJ1Y3QgaW9fZXZlbnQgdG1wOwogCQlwcl9kZWJ1ZygiY2FsbGluZyBjYW5jZWxcbiIpOwotCQlsb2NrX2tpb2NiKGtpb2NiKTsKIAkJbWVtc2V0KCZ0bXAsIDAsIHNpemVvZih0bXApKTsKIAkJdG1wLm9iaiA9ICh1NjQpKHVuc2lnbmVkIGxvbmcpa2lvY2ItPmtpX29iai51c2VyOwogCQl0bXAuZGF0YSA9IGtpb2NiLT5raV91c2VyX2RhdGE7CkBAIC0xNjkzLDcgKzE2NjksNiBAQAogCQkJaWYgKGNvcHlfdG9fdXNlcihyZXN1bHQsICZ0bXAsIHNpemVvZih0bXApKSkKIAkJCQlyZXQgPSAtRUZBVUxUOwogCQl9Ci0JCXVubG9ja19raW9jYihraW9jYik7CiAJfSBlbHNlCiAJCXJldCA9IC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL2ZzL2Jmcy9kaXIuYyBiL2ZzL2Jmcy9kaXIuYwppbmRleCBlMjQwYzMzLi41YWY5MjhmIDEwMDY0NAotLS0gYS9mcy9iZnMvZGlyLmMKKysrIGIvZnMvYmZzL2Rpci5jCkBAIC0xMDgsNyArMTA4LDcgQEAKIAlpbm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZiZnNfYW9wczsKIAlpbm9kZS0+aV9tb2RlID0gbW9kZTsKIAlpbm9kZS0+aV9pbm8gPSBpbm87Ci0JQkZTX0koaW5vZGUpLT5pX2Rza19pbm8gPSBjcHVfdG9fbGUxNihpbm8pOworCUJGU19JKGlub2RlKS0+aV9kc2tfaW5vID0gaW5vOwogCUJGU19JKGlub2RlKS0+aV9zYmxvY2sgPSAwOwogCUJGU19JKGlub2RlKS0+aV9lYmxvY2sgPSAwOwogCWluc2VydF9pbm9kZV9oYXNoKGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL2Jmcy9pbm9kZS5jIGIvZnMvYmZzL2lub2RlLmMKaW5kZXggYzdiMzlhYTIuLjNhZjZjNzMgMTAwNjQ0Ci0tLSBhL2ZzL2Jmcy9pbm9kZS5jCisrKyBiL2ZzL2Jmcy9pbm9kZS5jCkBAIC0zNTcsMjggKzM1Nyw0NiBAQAogCX0KIAogCWluZm8tPnNpX2Jsb2NrcyA9IChsZTMyX3RvX2NwdShiZnNfc2ItPnNfZW5kKSArIDEpPj5CRlNfQlNJWkVfQklUUzsgLyogZm9yIHN0YXRmcygyKSAqLwotCWluZm8tPnNpX2ZyZWViID0gKGxlMzJfdG9fY3B1KGJmc19zYi0+c19lbmQpICsgMSAtICBjcHVfdG9fbGUzMihiZnNfc2ItPnNfc3RhcnQpKT4+QkZTX0JTSVpFX0JJVFM7CisJaW5mby0+c2lfZnJlZWIgPSAobGUzMl90b19jcHUoYmZzX3NiLT5zX2VuZCkgKyAxIC0gIGxlMzJfdG9fY3B1KGJmc19zYi0+c19zdGFydCkpPj5CRlNfQlNJWkVfQklUUzsKIAlpbmZvLT5zaV9mcmVlaSA9IDA7CiAJaW5mby0+c2lfbGZfZWJsayA9IDA7CiAJaW5mby0+c2lfbGZfc2JsayA9IDA7CiAJaW5mby0+c2lfbGZfaW9mZiA9IDA7CisJYmggPSBOVUxMOwogCWZvciAoaT1CRlNfUk9PVF9JTk87IGk8PWluZm8tPnNpX2xhc3RpOyBpKyspIHsKLQkJaW5vZGUgPSBpZ2V0KHMsaSk7Ci0JCWlmIChCRlNfSShpbm9kZSktPmlfZHNrX2lubyA9PSAwKQotCQkJaW5mby0+c2lfZnJlZWkrKzsKLQkJZWxzZSB7Ci0JCQlzZXRfYml0KGksIGluZm8tPnNpX2ltYXApOwotCQkJaW5mby0+c2lfZnJlZWIgLT0gaW5vZGUtPmlfYmxvY2tzOwotCQkJaWYgKEJGU19JKGlub2RlKS0+aV9lYmxvY2sgPiBpbmZvLT5zaV9sZl9lYmxrKSB7Ci0JCQkJaW5mby0+c2lfbGZfZWJsayA9IEJGU19JKGlub2RlKS0+aV9lYmxvY2s7Ci0JCQkJaW5mby0+c2lfbGZfc2JsayA9IEJGU19JKGlub2RlKS0+aV9zYmxvY2s7Ci0JCQkJaW5mby0+c2lfbGZfaW9mZiA9IEJGU19JTk8yT0ZGKGkpOwotCQkJfQorCQlzdHJ1Y3QgYmZzX2lub2RlICpkaTsKKwkJaW50IGJsb2NrID0gKGkgLSBCRlNfUk9PVF9JTk8pL0JGU19JTk9ERVNfUEVSX0JMT0NLICsgMTsKKwkJaW50IG9mZiA9IChpIC0gQkZTX1JPT1RfSU5PKSAlIEJGU19JTk9ERVNfUEVSX0JMT0NLOworCQl1bnNpZ25lZCBsb25nIHNibG9jaywgZWJsb2NrOworCisJCWlmICghb2ZmKSB7CisJCQlicmVsc2UoYmgpOworCQkJYmggPSBzYl9icmVhZChzLCBibG9jayk7CiAJCX0KLQkJaXB1dChpbm9kZSk7CisKKwkJaWYgKCFiaCkKKwkJCWNvbnRpbnVlOworCisJCWRpID0gKHN0cnVjdCBiZnNfaW5vZGUgKiliaC0+Yl9kYXRhICsgb2ZmOworCisJCWlmICghZGktPmlfaW5vKSB7CisJCQlpbmZvLT5zaV9mcmVlaSsrOworCQkJY29udGludWU7CisJCX0KKwkJc2V0X2JpdChpLCBpbmZvLT5zaV9pbWFwKTsKKwkJaW5mby0+c2lfZnJlZWIgLT0gQkZTX0ZJTEVCTE9DS1MoZGkpOworCisJCXNibG9jayA9ICBsZTMyX3RvX2NwdShkaS0+aV9zYmxvY2spOworCQllYmxvY2sgPSAgbGUzMl90b19jcHUoZGktPmlfZWJsb2NrKTsKKwkJaWYgKGVibG9jayA+IGluZm8tPnNpX2xmX2VibGspIHsKKwkJCWluZm8tPnNpX2xmX2VibGsgPSBlYmxvY2s7CisJCQlpbmZvLT5zaV9sZl9zYmxrID0gc2Jsb2NrOworCQkJaW5mby0+c2lfbGZfaW9mZiA9IEJGU19JTk8yT0ZGKGkpOworCQl9CiAJfQorCWJyZWxzZShiaCk7CiAJaWYgKCEocy0+c19mbGFncyAmIE1TX1JET05MWSkpIHsKLQkJbWFya19idWZmZXJfZGlydHkoYmgpOworCQltYXJrX2J1ZmZlcl9kaXJ0eShpbmZvLT5zaV9zYmgpOwogCQlzLT5zX2RpcnQgPSAxOwogCX0gCiAJZHVtcF9pbWFwKCJyZWFkX3N1cGVyIiwgcyk7CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmLmMgYi9mcy9iaW5mbXRfZWxmLmMKaW5kZXggNzk3NmEyMy4uZDRiMTU1NyAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2VsZi5jCisrKyBiL2ZzL2JpbmZtdF9lbGYuYwpAQCAtOTA1LDcgKzkwNSw3IEBACiAJCXNlbmRfc2lnKFNJR0tJTEwsIGN1cnJlbnQsIDApOwogCQlnb3RvIG91dF9mcmVlX2RlbnRyeTsKIAl9Ci0JaWYgKHBhZHplcm8oZWxmX2JzcykpIHsKKwlpZiAobGlrZWx5KGVsZl9ic3MgIT0gZWxmX2JyaykgJiYgdW5saWtlbHkocGFkemVybyhlbGZfYnNzKSkpIHsKIAkJc2VuZF9zaWcoU0lHU0VHViwgY3VycmVudCwgMCk7CiAJCXJldHZhbCA9IC1FRkFVTFQ7IC8qIE5vYm9keSBnZXRzIHRvIHNlZSB0aGlzLCBidXQuLiAqLwogCQlnb3RvIG91dF9mcmVlX2RlbnRyeTsKZGlmZiAtLWdpdCBhL2ZzL2Jpby5jIGIvZnMvYmlvLmMKaW5kZXggODNhMzQ5NS4uN2Q4MWE5MyAxMDA2NDQKLS0tIGEvZnMvYmlvLmMKKysrIGIvZnMvYmlvLmMKQEAgLTc1LDcgKzc1LDcgQEAKICAqLwogc3RhdGljIHN0cnVjdCBiaW9fc2V0ICpmc19iaW9fc2V0OwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBiaW9fdmVjICpidmVjX2FsbG9jX2JzKHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaywgaW50IG5yLCB1bnNpZ25lZCBsb25nICppZHgsIHN0cnVjdCBiaW9fc2V0ICpicykKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJpb192ZWMgKmJ2ZWNfYWxsb2NfYnMoZ2ZwX3QgZ2ZwX21hc2ssIGludCBuciwgdW5zaWduZWQgbG9uZyAqaWR4LCBzdHJ1Y3QgYmlvX3NldCAqYnMpCiB7CiAJc3RydWN0IGJpb192ZWMgKmJ2bDsKIAlzdHJ1Y3QgYmlvdmVjX3NsYWIgKmJwOwpAQCAtMTU1LDcgKzE1NSw3IEBACiAgKiAgIGFsbG9jYXRlIGJpbyBhbmQgaW92ZWNzIGZyb20gdGhlIG1lbW9yeSBwb29scyBzcGVjaWZpZWQgYnkgdGhlCiAgKiAgIGJpb19zZXQgc3RydWN0dXJlLgogICoqLwotc3RydWN0IGJpbyAqYmlvX2FsbG9jX2Jpb3NldCh1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX21hc2ssIGludCBucl9pb3ZlY3MsIHN0cnVjdCBiaW9fc2V0ICpicykKK3N0cnVjdCBiaW8gKmJpb19hbGxvY19iaW9zZXQoZ2ZwX3QgZ2ZwX21hc2ssIGludCBucl9pb3ZlY3MsIHN0cnVjdCBiaW9fc2V0ICpicykKIHsKIAlzdHJ1Y3QgYmlvICpiaW8gPSBtZW1wb29sX2FsbG9jKGJzLT5iaW9fcG9vbCwgZ2ZwX21hc2spOwogCkBAIC0xODEsNyArMTgxLDcgQEAKIAlyZXR1cm4gYmlvOwogfQogCi1zdHJ1Y3QgYmlvICpiaW9fYWxsb2ModW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrLCBpbnQgbnJfaW92ZWNzKQorc3RydWN0IGJpbyAqYmlvX2FsbG9jKGdmcF90IGdmcF9tYXNrLCBpbnQgbnJfaW92ZWNzKQogewogCXN0cnVjdCBiaW8gKmJpbyA9IGJpb19hbGxvY19iaW9zZXQoZ2ZwX21hc2ssIG5yX2lvdmVjcywgZnNfYmlvX3NldCk7CiAKQEAgLTI3Nyw3ICsyNzcsNyBAQAogICoKICAqIAlMaWtlIF9fYmlvX2Nsb25lLCBvbmx5IGFsc28gYWxsb2NhdGVzIHRoZSByZXR1cm5lZCBiaW8KICAqLwotc3RydWN0IGJpbyAqYmlvX2Nsb25lKHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrKQorc3RydWN0IGJpbyAqYmlvX2Nsb25lKHN0cnVjdCBiaW8gKmJpbywgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJc3RydWN0IGJpbyAqYiA9IGJpb19hbGxvY19iaW9zZXQoZ2ZwX21hc2ssIGJpby0+YmlfbWF4X3ZlY3MsIGZzX2Jpb19zZXQpOwogCkBAIC0xMDc4LDcgKzEwNzgsNyBAQAogCXJldHVybiBicDsKIH0KIAotc3RhdGljIHZvaWQgKmJpb19wYWlyX2FsbG9jKHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfZmxhZ3MsIHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCAqYmlvX3BhaXJfYWxsb2MoZ2ZwX3QgZ2ZwX2ZsYWdzLCB2b2lkICpkYXRhKQogewogCXJldHVybiBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYmlvX3BhaXIpLCBnZnBfZmxhZ3MpOwogfQpkaWZmIC0tZ2l0IGEvZnMvYnVmZmVyLmMgYi9mcy9idWZmZXIuYwppbmRleCA2Y2JmY2VhLi4xMjE2YzBkIDEwMDY0NAotLS0gYS9mcy9idWZmZXIuYworKysgYi9mcy9idWZmZXIuYwpAQCAtMzA0NSw3ICszMDQ1LDcgQEAKIAlidWZmZXJfaGVhZHNfb3Zlcl9saW1pdCA9ICh0b3QgPiBtYXhfYnVmZmVyX2hlYWRzKTsKIH0KIAkKLXN0cnVjdCBidWZmZXJfaGVhZCAqYWxsb2NfYnVmZmVyX2hlYWQodW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9mbGFncykKK3N0cnVjdCBidWZmZXJfaGVhZCAqYWxsb2NfYnVmZmVyX2hlYWQoZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqcmV0ID0ga21lbV9jYWNoZV9hbGxvYyhiaF9jYWNoZXAsIGdmcF9mbGFncyk7CiAJaWYgKHJldCkgewpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuYyBiL2ZzL2NpZnMvY2lmc2ZzLmMKaW5kZXggOGNjMjNlNy4uMWViZjdkYSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZnMuYworKysgYi9mcy9jaWZzL2NpZnNmcy5jCkBAIC03ODEsNiArNzgxLDggQEAKIAogCW9wbG9ja1RocmVhZCA9IGN1cnJlbnQ7CiAJZG8geworCQlpZiAodHJ5X3RvX2ZyZWV6ZSgpKSAKKwkJCWNvbnRpbnVlOwogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQkKIAkJc2NoZWR1bGVfdGltZW91dCgxKkhaKTsgIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jb25uZWN0LmMgYi9mcy9jaWZzL2Nvbm5lY3QuYwppbmRleCAyMzM1ZjE0Li40NzM2MDE1IDEwMDY0NAotLS0gYS9mcy9jaWZzL2Nvbm5lY3QuYworKysgYi9mcy9jaWZzL2Nvbm5lY3QuYwpAQCAtMzQ0LDYgKzM0NCw4IEBACiAJfQogCiAJd2hpbGUgKHNlcnZlci0+dGNwU3RhdHVzICE9IENpZnNFeGl0aW5nKSB7CisJCWlmICh0cnlfdG9fZnJlZXplKCkpCisJCQljb250aW51ZTsKIAkJaWYgKGJpZ2J1ZiA9PSBOVUxMKSB7CiAJCQliaWdidWYgPSBjaWZzX2J1Zl9nZXQoKTsKIAkJCWlmKGJpZ2J1ZiA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9mcy9jb21wYXQuYyBiL2ZzL2NvbXBhdC5jCmluZGV4IGFjM2ZiOWUuLmE3MTllMTUgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdC5jCisrKyBiL2ZzL2NvbXBhdC5jCkBAIC00NCw2ICs0NCw4IEBACiAjaW5jbHVkZSA8bGludXgvbmZzZC9zeXNjYWxsLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorI2luY2x1ZGUgPGxpbnV4L2FjY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAjaW5jbHVkZSA8bmV0L3NvY2suaD4JCS8qIHNpb2NkZXZwcml2YXRlX2lvY3RsICovCiAKQEAgLTE0ODcsNiArMTQ4OSw4IEBACiAKIAkJLyogZXhlY3ZlIHN1Y2Nlc3MgKi8KIAkJc2VjdXJpdHlfYnBybV9mcmVlKGJwcm0pOworCQlhY2N0X3VwZGF0ZV9pbnRlZ3JhbHMoY3VycmVudCk7CisJCXVwZGF0ZV9tZW1faGl3YXRlcihjdXJyZW50KTsKIAkJa2ZyZWUoYnBybSk7CiAJCXJldHVybiByZXR2YWw7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvZGNhY2hlLmMgYi9mcy9kY2FjaGUuYwppbmRleCA3Mzc2YjYxMi4uZmIxMDM4NiAxMDA2NDQKLS0tIGEvZnMvZGNhY2hlLmMKKysrIGIvZnMvZGNhY2hlLmMKQEAgLTEwMiw3ICsxMDIsOCBAQAogCQlsaXN0X2RlbF9pbml0KCZkZW50cnktPmRfYWxpYXMpOwogCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwogCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwotCQlmc25vdGlmeV9pbm9kZXJlbW92ZShpbm9kZSk7CisJCWlmICghaW5vZGUtPmlfbmxpbmspCisJCQlmc25vdGlmeV9pbm9kZXJlbW92ZShpbm9kZSk7CiAJCWlmIChkZW50cnktPmRfb3AgJiYgZGVudHJ5LT5kX29wLT5kX2lwdXQpCiAJCQlkZW50cnktPmRfb3AtPmRfaXB1dChkZW50cnksIGlub2RlKTsKIAkJZWxzZQpkaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuYwppbmRleCA2YWIxZGQwLi40Mjg0Y2QzIDEwMDY0NAotLS0gYS9mcy9ldmVudHBvbGwuYworKysgYi9mcy9ldmVudHBvbGwuYwpAQCAtMTAxLDYgKzEwMSwxMCBAQAogLyogTWF4aW11bSBudW1iZXIgb2YgcG9sbCB3YWtlIHVwIG5lc3RzIHdlIGFyZSBhbGxvd2luZyAqLwogI2RlZmluZSBFUF9NQVhfUE9MTFdBS0VfTkVTVFMgNAogCisvKiBNYXhpbXVtIG1zZWMgdGltZW91dCB2YWx1ZSBzdG9yZWFibGUgaW4gYSBsb25nIGludCAqLworI2RlZmluZSBFUF9NQVhfTVNUSU1FTyBtaW4oMTAwMFVMTCAqIE1BWF9TQ0hFRFVMRV9USU1FT1VUIC8gSFosIChMT05HX01BWCAtIDk5OVVMTCkgLyBIWikKKworCiBzdHJ1Y3QgZXBvbGxfZmlsZWZkIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZTsKIAlpbnQgZmQ7CkBAIC0yMzEsOCArMjM1LDkgQEAKIAogc3RhdGljIHZvaWQgZXBfcG9sbF9zYWZld2FrZV9pbml0KHN0cnVjdCBwb2xsX3NhZmV3YWtlICpwc3cpOwogc3RhdGljIHZvaWQgZXBfcG9sbF9zYWZld2FrZShzdHJ1Y3QgcG9sbF9zYWZld2FrZSAqcHN3LCB3YWl0X3F1ZXVlX2hlYWRfdCAqd3EpOwotc3RhdGljIGludCBlcF9nZXRmZChpbnQgKmVmZCwgc3RydWN0IGlub2RlICoqZWlub2RlLCBzdHJ1Y3QgZmlsZSAqKmVmaWxlKTsKLXN0YXRpYyBpbnQgZXBfZmlsZV9pbml0KHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBpbnQgZXBfZ2V0ZmQoaW50ICplZmQsIHN0cnVjdCBpbm9kZSAqKmVpbm9kZSwgc3RydWN0IGZpbGUgKiplZmlsZSwKKwkJICAgIHN0cnVjdCBldmVudHBvbGwgKmVwKTsKK3N0YXRpYyBpbnQgZXBfYWxsb2Moc3RydWN0IGV2ZW50cG9sbCAqKnBlcCk7CiBzdGF0aWMgdm9pZCBlcF9mcmVlKHN0cnVjdCBldmVudHBvbGwgKmVwKTsKIHN0YXRpYyBzdHJ1Y3QgZXBpdGVtICplcF9maW5kKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGZkKTsKIHN0YXRpYyB2b2lkIGVwX3VzZV9lcGl0ZW0oc3RydWN0IGVwaXRlbSAqZXBpKTsKQEAgLTUwMSwzOCArNTA2LDM3IEBACiBhc21saW5rYWdlIGxvbmcgc3lzX2Vwb2xsX2NyZWF0ZShpbnQgc2l6ZSkKIHsKIAlpbnQgZXJyb3IsIGZkOworCXN0cnVjdCBldmVudHBvbGwgKmVwOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IGZpbGUgKmZpbGU7CiAKIAlETlBSSU5USygzLCAoS0VSTl9JTkZPICJbJXBdIGV2ZW50cG9sbDogc3lzX2Vwb2xsX2NyZWF0ZSglZClcbiIsCiAJCSAgICAgY3VycmVudCwgc2l6ZSkpOwogCi0JLyogU2FuaXR5IGNoZWNrIG9uIHRoZSBzaXplIHBhcmFtZXRlciAqLworCS8qCisJICogU2FuaXR5IGNoZWNrIG9uIHRoZSBzaXplIHBhcmFtZXRlciwgYW5kIGNyZWF0ZSB0aGUgaW50ZXJuYWwgZGF0YQorCSAqIHN0cnVjdHVyZSAoICJzdHJ1Y3QgZXZlbnRwb2xsIiApLgorCSAqLwogCWVycm9yID0gLUVJTlZBTDsKLQlpZiAoc2l6ZSA8PSAwKQorCWlmIChzaXplIDw9IDAgfHwgKGVycm9yID0gZXBfYWxsb2MoJmVwKSkgIT0gMCkKIAkJZ290byBlZXhpdF8xOwogCiAJLyoKIAkgKiBDcmVhdGVzIGFsbCB0aGUgaXRlbXMgbmVlZGVkIHRvIHNldHVwIGFuIGV2ZW50cG9sbCBmaWxlLiBUaGF0IGlzLAogCSAqIGEgZmlsZSBzdHJ1Y3R1cmUsIGFuZCBpbm9kZSBhbmQgYSBmcmVlIGZpbGUgZGVzY3JpcHRvci4KIAkgKi8KLQllcnJvciA9IGVwX2dldGZkKCZmZCwgJmlub2RlLCAmZmlsZSk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGVleGl0XzE7Ci0KLQkvKiBTZXR1cCB0aGUgZmlsZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSAoICJzdHJ1Y3QgZXZlbnRwb2xsIiApICovCi0JZXJyb3IgPSBlcF9maWxlX2luaXQoZmlsZSk7CisJZXJyb3IgPSBlcF9nZXRmZCgmZmQsICZpbm9kZSwgJmZpbGUsIGVwKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZWV4aXRfMjsKIAotCiAJRE5QUklOVEsoMywgKEtFUk5fSU5GTyAiWyVwXSBldmVudHBvbGw6IHN5c19lcG9sbF9jcmVhdGUoJWQpID0gJWRcbiIsCiAJCSAgICAgY3VycmVudCwgc2l6ZSwgZmQpKTsKIAogCXJldHVybiBmZDsKIAogZWV4aXRfMjoKLQlzeXNfY2xvc2UoZmQpOworCWVwX2ZyZWUoZXApOworCWtmcmVlKGVwKTsKIGVleGl0XzE6CiAJRE5QUklOVEsoMywgKEtFUk5fSU5GTyAiWyVwXSBldmVudHBvbGw6IHN5c19lcG9sbF9jcmVhdGUoJWQpID0gJWRcbiIsCiAJCSAgICAgY3VycmVudCwgc2l6ZSwgZXJyb3IpKTsKQEAgLTcwNiw3ICs3MTAsOCBAQAogLyoKICAqIENyZWF0ZXMgdGhlIGZpbGUgZGVzY3JpcHRvciB0byBiZSB1c2VkIGJ5IHRoZSBlcG9sbCBpbnRlcmZhY2UuCiAgKi8KLXN0YXRpYyBpbnQgZXBfZ2V0ZmQoaW50ICplZmQsIHN0cnVjdCBpbm9kZSAqKmVpbm9kZSwgc3RydWN0IGZpbGUgKiplZmlsZSkKK3N0YXRpYyBpbnQgZXBfZ2V0ZmQoaW50ICplZmQsIHN0cnVjdCBpbm9kZSAqKmVpbm9kZSwgc3RydWN0IGZpbGUgKiplZmlsZSwKKwkJICAgIHN0cnVjdCBldmVudHBvbGwgKmVwKQogewogCXN0cnVjdCBxc3RyIHRoaXM7CiAJY2hhciBuYW1lWzMyXTsKQEAgLTc1Niw3ICs3NjEsNyBAQAogCWZpbGUtPmZfb3AgPSAmZXZlbnRwb2xsX2ZvcHM7CiAJZmlsZS0+Zl9tb2RlID0gRk1PREVfUkVBRDsKIAlmaWxlLT5mX3ZlcnNpb24gPSAwOwotCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZXA7CiAKIAkvKiBJbnN0YWxsIHRoZSBuZXcgc2V0dXAgZmlsZSBpbnRvIHRoZSBhbGxvY2F0ZWQgZmQuICovCiAJZmRfaW5zdGFsbChmZCwgZmlsZSk7CkBAIC03NzcsMTQgKzc4MiwxMyBAQAogfQogCiAKLXN0YXRpYyBpbnQgZXBfZmlsZV9pbml0KHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBlcF9hbGxvYyhzdHJ1Y3QgZXZlbnRwb2xsICoqcGVwKQogewotCXN0cnVjdCBldmVudHBvbGwgKmVwOworCXN0cnVjdCBldmVudHBvbGwgKmVwID0ga3phbGxvYyhzaXplb2YoKmVwKSwgR0ZQX0tFUk5FTCk7CiAKLQlpZiAoIShlcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBldmVudHBvbGwpLCBHRlBfS0VSTkVMKSkpCisJaWYgKCFlcCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1zZXQoZXAsIDAsIHNpemVvZigqZXApKTsKIAlyd2xvY2tfaW5pdCgmZXAtPmxvY2spOwogCWluaXRfcndzZW0oJmVwLT5zZW0pOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmVwLT53cSk7CkBAIC03OTIsOSArNzk2LDkgQEAKIAlJTklUX0xJU1RfSEVBRCgmZXAtPnJkbGxpc3QpOwogCWVwLT5yYnIgPSBSQl9ST09UOwogCi0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gZXA7CisJKnBlcCA9IGVwOwogCi0JRE5QUklOVEsoMywgKEtFUk5fSU5GTyAiWyVwXSBldmVudHBvbGw6IGVwX2ZpbGVfaW5pdCgpIGVwPSVwXG4iLAorCUROUFJJTlRLKDMsIChLRVJOX0lORk8gIlslcF0gZXZlbnRwb2xsOiBlcF9hbGxvYygpIGVwPSVwXG4iLAogCQkgICAgIGN1cnJlbnQsIGVwKSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNTA2LDggKzE1MTAsOCBAQAogCSAqIGFuZCB0aGUgb3ZlcmZsb3cgY29uZGl0aW9uLiBUaGUgcGFzc2VkIHRpbWVvdXQgaXMgaW4gbWlsbGlzZWNvbmRzLAogCSAqIHRoYXQgd2h5ICh0ICogSFopIC8gMTAwMC4KIAkgKi8KLQlqdGltZW91dCA9IHRpbWVvdXQgPT0gLTEgfHwgdGltZW91dCA+IChNQVhfU0NIRURVTEVfVElNRU9VVCAtIDEwMDApIC8gSFogPwotCQlNQVhfU0NIRURVTEVfVElNRU9VVDogKHRpbWVvdXQgKiBIWiArIDk5OSkgLyAxMDAwOworCWp0aW1lb3V0ID0gKHRpbWVvdXQgPCAwIHx8IHRpbWVvdXQgPj0gRVBfTUFYX01TVElNRU8pID8KKwkJTUFYX1NDSEVEVUxFX1RJTUVPVVQgOiAodGltZW91dCAqIEhaICsgOTk5KSAvIDEwMDA7CiAKIHJldHJ5OgogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZXAtPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvaWFsbG9jLmMgYi9mcy9leHQyL2lhbGxvYy5jCmluZGV4IGM4ZDA3MDMuLmUyZDYyMDggMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvaWFsbG9jLmMKKysrIGIvZnMvZXh0Mi9pYWxsb2MuYwpAQCAtNjA1LDI3ICs2MDUsMjggQEAKIAlpbnNlcnRfaW5vZGVfaGFzaChpbm9kZSk7CiAKIAlpZiAoRFFVT1RfQUxMT0NfSU5PREUoaW5vZGUpKSB7Ci0JCURRVU9UX0RST1AoaW5vZGUpOwogCQllcnIgPSAtRU5PU1BDOwotCQlnb3RvIGZhaWwyOworCQlnb3RvIGZhaWxfZHJvcDsKIAl9CisKIAllcnIgPSBleHQyX2luaXRfYWNsKGlub2RlLCBkaXIpOwotCWlmIChlcnIpIHsKLQkJRFFVT1RfRlJFRV9JTk9ERShpbm9kZSk7Ci0JCURRVU9UX0RST1AoaW5vZGUpOwotCQlnb3RvIGZhaWwyOwotCX0KKwlpZiAoZXJyKQorCQlnb3RvIGZhaWxfZnJlZV9kcm9wOworCiAJZXJyID0gZXh0Ml9pbml0X3NlY3VyaXR5KGlub2RlLGRpcik7Ci0JaWYgKGVycikgewotCQlEUVVPVF9GUkVFX0lOT0RFKGlub2RlKTsKLQkJZ290byBmYWlsMjsKLQl9CisJaWYgKGVycikKKwkJZ290byBmYWlsX2ZyZWVfZHJvcDsKKwogCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCWV4dDJfZGVidWcoImFsbG9jYXRpbmcgaW5vZGUgJWx1XG4iLCBpbm9kZS0+aV9pbm8pOwogCWV4dDJfcHJlcmVhZF9pbm9kZShpbm9kZSk7CiAJcmV0dXJuIGlub2RlOwogCi1mYWlsMjoKK2ZhaWxfZnJlZV9kcm9wOgorCURRVU9UX0ZSRUVfSU5PREUoaW5vZGUpOworCitmYWlsX2Ryb3A6CisJRFFVT1RfRFJPUChpbm9kZSk7CiAJaW5vZGUtPmlfZmxhZ3MgfD0gU19OT1FVT1RBOwogCWlub2RlLT5pX25saW5rID0gMDsKIAlpcHV0KGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvYmFsbG9jLmMgYi9mcy9leHQzL2JhbGxvYy5jCmluZGV4IGU0NjNkY2EuLjAyMTNkYjQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvYmFsbG9jLmMKKysrIGIvZnMvZXh0My9iYWxsb2MuYwpAQCAtMTQxMCw3ICsxNDEwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGRlc2NfY291bnQ7CiAJc3RydWN0IGV4dDNfZ3JvdXBfZGVzYyAqZ2RwOwogCWludCBpOwotCXVuc2lnbmVkIGxvbmcgbmdyb3VwczsKKwl1bnNpZ25lZCBsb25nIG5ncm91cHMgPSBFWFQzX1NCKHNiKS0+c19ncm91cHNfY291bnQ7CiAjaWZkZWYgRVhUM0ZTX0RFQlVHCiAJc3RydWN0IGV4dDNfc3VwZXJfYmxvY2sgKmVzOwogCXVuc2lnbmVkIGxvbmcgYml0bWFwX2NvdW50LCB4OwpAQCAtMTQyMSw3ICsxNDIxLDggQEAKIAlkZXNjX2NvdW50ID0gMDsKIAliaXRtYXBfY291bnQgPSAwOwogCWdkcCA9IE5VTEw7Ci0JZm9yIChpID0gMDsgaSA8IEVYVDNfU0Ioc2IpLT5zX2dyb3Vwc19jb3VudDsgaSsrKSB7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmdyb3VwczsgaSsrKSB7CiAJCWdkcCA9IGV4dDNfZ2V0X2dyb3VwX2Rlc2Moc2IsIGksIE5VTEwpOwogCQlpZiAoIWdkcCkKIAkJCWNvbnRpbnVlOwpAQCAtMTQ0Myw3ICsxNDQ0LDYgQEAKIAlyZXR1cm4gYml0bWFwX2NvdW50OwogI2Vsc2UKIAlkZXNjX2NvdW50ID0gMDsKLQluZ3JvdXBzID0gRVhUM19TQihzYiktPnNfZ3JvdXBzX2NvdW50OwogCXNtcF9ybWIoKTsKIAlmb3IgKGkgPSAwOyBpIDwgbmdyb3VwczsgaSsrKSB7CiAJCWdkcCA9IGV4dDNfZ2V0X2dyb3VwX2Rlc2Moc2IsIGksIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9pYWxsb2MuYyBiL2ZzL2V4dDMvaWFsbG9jLmMKaW5kZXggOTY1NTI3Ni4uNjU0OTk0NSAxMDA2NDQKLS0tIGEvZnMvZXh0My9pYWxsb2MuYworKysgYi9mcy9leHQzL2lhbGxvYy5jCkBAIC01OTcsMjcgKzU5NywyMiBAQAogCiAJcmV0ID0gaW5vZGU7CiAJaWYoRFFVT1RfQUxMT0NfSU5PREUoaW5vZGUpKSB7Ci0JCURRVU9UX0RST1AoaW5vZGUpOwogCQllcnIgPSAtRURRVU9UOwotCQlnb3RvIGZhaWwyOworCQlnb3RvIGZhaWxfZHJvcDsKIAl9CisKIAllcnIgPSBleHQzX2luaXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpcik7Ci0JaWYgKGVycikgewotCQlEUVVPVF9GUkVFX0lOT0RFKGlub2RlKTsKLQkJRFFVT1RfRFJPUChpbm9kZSk7Ci0JCWdvdG8gZmFpbDI7Ci0gIAl9CisJaWYgKGVycikKKwkJZ290byBmYWlsX2ZyZWVfZHJvcDsKKwogCWVyciA9IGV4dDNfaW5pdF9zZWN1cml0eShoYW5kbGUsaW5vZGUsIGRpcik7Ci0JaWYgKGVycikgewotCQlEUVVPVF9GUkVFX0lOT0RFKGlub2RlKTsKLQkJZ290byBmYWlsMjsKLQl9CisJaWYgKGVycikKKwkJZ290byBmYWlsX2ZyZWVfZHJvcDsKKwogCWVyciA9IGV4dDNfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKIAlpZiAoZXJyKSB7CiAJCWV4dDNfc3RkX2Vycm9yKHNiLCBlcnIpOwotCQlEUVVPVF9GUkVFX0lOT0RFKGlub2RlKTsKLQkJRFFVT1RfRFJPUChpbm9kZSk7Ci0JCWdvdG8gZmFpbDI7CisJCWdvdG8gZmFpbF9mcmVlX2Ryb3A7CiAJfQogCiAJZXh0M19kZWJ1ZygiYWxsb2NhdGluZyBpbm9kZSAlbHVcbiIsIGlub2RlLT5pX2lubyk7CkBAIC02MzEsNyArNjI2LDExIEBACiAJYnJlbHNlKGJpdG1hcF9iaCk7CiAJcmV0dXJuIHJldDsKIAotZmFpbDI6CitmYWlsX2ZyZWVfZHJvcDoKKwlEUVVPVF9GUkVFX0lOT0RFKGlub2RlKTsKKworZmFpbF9kcm9wOgorCURRVU9UX0RST1AoaW5vZGUpOwogCWlub2RlLT5pX2ZsYWdzIHw9IFNfTk9RVU9UQTsKIAlpbm9kZS0+aV9ubGluayA9IDA7CiAJaXB1dChpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9leHQzL3Jlc2l6ZS5jIGIvZnMvZXh0My9yZXNpemUuYwppbmRleCAyYzlmODEyLi41N2Y3OTEwIDEwMDY0NAotLS0gYS9mcy9leHQzL3Jlc2l6ZS5jCisrKyBiL2ZzL2V4dDMvcmVzaXplLmMKQEAgLTI0Miw3ICsyNDIsNyBAQAogCSAgICAgaSA8IHNiaS0+c19pdGJfcGVyX2dyb3VwOyBpKyssIGJpdCsrLCBibG9jaysrKSB7CiAJCXN0cnVjdCBidWZmZXJfaGVhZCAqaXQ7CiAKLQkJZXh0M19kZWJ1ZygiY2xlYXIgaW5vZGUgYmxvY2sgJSMwNHggKCslbGQpXG4iLCBibG9jaywgYml0KTsKKwkJZXh0M19kZWJ1ZygiY2xlYXIgaW5vZGUgYmxvY2sgJSMwNGx4ICgrJWQpXG4iLCBibG9jaywgYml0KTsKIAkJaWYgKElTX0VSUihpdCA9IGJjbGVhbihoYW5kbGUsIHNiLCBibG9jaykpKSB7CiAJCQllcnIgPSBQVFJfRVJSKGl0KTsKIAkJCWdvdG8gZXhpdF9iaDsKQEAgLTY0Myw4ICs2NDMsOCBAQAogCQkJYnJlYWs7CiAKIAkJYmggPSBzYl9nZXRibGsoc2IsIGdyb3VwICogYnBnICsgYmxrX29mZik7Ci0JCWV4dDNfZGVidWcoc2IsIF9fRlVOQ1RJT05fXywgInVwZGF0ZSBtZXRhZGF0YSBiYWNrdXAgJSMwNGx4XG4iLAotCQkJICAgYmgtPmJfYmxvY2tucik7CisJCWV4dDNfZGVidWcoInVwZGF0ZSBtZXRhZGF0YSBiYWNrdXAgJSMwNGx4XG4iLAorCQkJICAodW5zaWduZWQgbG9uZyliaC0+Yl9ibG9ja25yKTsKIAkJaWYgKChlcnIgPSBleHQzX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIGJoKSkpCiAJCQlicmVhazsKIAkJbG9ja19idWZmZXIoYmgpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9zdXBlci5jIGIvZnMvZXh0My9zdXBlci5jCmluZGV4IGE5M2MzNjAuLjllMjRjZWIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvc3VwZXIuYworKysgYi9mcy9leHQzL3N1cGVyLmMKQEAgLTUxMiwxNSArNTEyLDE0IEBACiAKIHN0YXRpYyBpbnQgZXh0M19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCB2ZnNtb3VudCAqdmZzKQogewotCXN0cnVjdCBleHQzX3NiX2luZm8gKnNiaSA9IEVYVDNfU0IodmZzLT5tbnRfc2IpOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSB2ZnMtPm1udF9zYjsKKwlzdHJ1Y3QgZXh0M19zYl9pbmZvICpzYmkgPSBFWFQzX1NCKHNiKTsKIAotCWlmIChzYmktPnNfbW91bnRfb3B0ICYgRVhUM19NT1VOVF9KT1VSTkFMX0RBVEEpCisJaWYgKHRlc3Rfb3B0KHNiLCBEQVRBX0ZMQUdTKSA9PSBFWFQzX01PVU5UX0pPVVJOQUxfREFUQSkKIAkJc2VxX3B1dHMoc2VxLCAiLGRhdGE9am91cm5hbCIpOwotCi0JaWYgKHNiaS0+c19tb3VudF9vcHQgJiBFWFQzX01PVU5UX09SREVSRURfREFUQSkKKwllbHNlIGlmICh0ZXN0X29wdChzYiwgREFUQV9GTEFHUykgPT0gRVhUM19NT1VOVF9PUkRFUkVEX0RBVEEpCiAJCXNlcV9wdXRzKHNlcSwgIixkYXRhPW9yZGVyZWQiKTsKLQotCWlmIChzYmktPnNfbW91bnRfb3B0ICYgRVhUM19NT1VOVF9XUklURUJBQ0tfREFUQSkKKwllbHNlIGlmICh0ZXN0X29wdChzYiwgREFUQV9GTEFHUykgPT0gRVhUM19NT1VOVF9XUklURUJBQ0tfREFUQSkKIAkJc2VxX3B1dHMoc2VxLCAiLGRhdGE9d3JpdGViYWNrIik7CiAKICNpZiBkZWZpbmVkKENPTkZJR19RVU9UQSkKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9maWxlLmMgYi9mcy9mYXQvZmlsZS5jCmluZGV4IDYyZmZhOTEuLjcxMzQ0MDMgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9maWxlLmMKKysrIGIvZnMvZmF0L2ZpbGUuYwpAQCAtMTIsMzkgKzEyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAKLXN0YXRpYyBzc2l6ZV90IGZhdF9maWxlX2Fpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCi0JCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCBwb3MpCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItPmtpX2ZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOwotCWludCByZXR2YWw7Ci0KLQlyZXR2YWwgPSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlKGlvY2IsIGJ1ZiwgY291bnQsIHBvcyk7Ci0JaWYgKHJldHZhbCA+IDApIHsKLQkJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7Ci0JCU1TRE9TX0koaW5vZGUpLT5pX2F0dHJzIHw9IEFUVFJfQVJDSDsKLQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci0vLwkJY2hlY2sgdGhlIGxvY2tpbmcgcnVsZXMKLS8vCQlpZiAoSVNfU1lOQyhpbm9kZSkpCi0vLwkJCWZhdF9zeW5jX2lub2RlKGlub2RlKTsKLQl9Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIHNzaXplX3QgZmF0X2ZpbGVfd3JpdGV2KHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7Ci0JaW50IHJldHZhbDsKLQotCXJldHZhbCA9IGdlbmVyaWNfZmlsZV93cml0ZXYoZmlscCwgaW92LCBucl9zZWdzLCBwcG9zKTsKLQlpZiAocmV0dmFsID4gMCkgewotCQlpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKLQkJTVNET1NfSShpbm9kZSktPmlfYXR0cnMgfD0gQVRUUl9BUkNIOwotCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKLQl9Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQogaW50IGZhdF9nZW5lcmljX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAogCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKQEAgLTE0OCw5ICsxMTUsOSBAQAogCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKIAkud3JpdGUJCT0gZG9fc3luY193cml0ZSwKIAkucmVhZHYJCT0gZ2VuZXJpY19maWxlX3JlYWR2LAotCS53cml0ZXYJCT0gZmF0X2ZpbGVfd3JpdGV2LAorCS53cml0ZXYJCT0gZ2VuZXJpY19maWxlX3dyaXRldiwKIAkuYWlvX3JlYWQJPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQsCi0JLmFpb193cml0ZQk9IGZhdF9maWxlX2Fpb193cml0ZSwKKwkuYWlvX3dyaXRlCT0gZ2VuZXJpY19maWxlX2Fpb193cml0ZSwKIAkubW1hcAkJPSBnZW5lcmljX2ZpbGVfbW1hcCwKIAkuaW9jdGwJCT0gZmF0X2dlbmVyaWNfaW9jdGwsCiAJLmZzeW5jCQk9IGZpbGVfZnN5bmMsCmRpZmYgLS1naXQgYS9mcy9mYXQvaW5vZGUuYyBiL2ZzL2ZhdC9pbm9kZS5jCmluZGV4IGE3Y2JlNjguLmUyZWZmZTIgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9pbm9kZS5jCisrKyBiL2ZzL2ZhdC9pbm9kZS5jCkBAIC0xMDIsNiArMTAyLDE5IEBACiAJCQkJICAmTVNET1NfSShwYWdlLT5tYXBwaW5nLT5ob3N0KS0+bW11X3ByaXZhdGUpOwogfQogCitzdGF0aWMgaW50IGZhdF9jb21taXRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJICAgIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OworCWludCBlcnIgPSBnZW5lcmljX2NvbW1pdF93cml0ZShmaWxlLCBwYWdlLCBmcm9tLCB0byk7CisJaWYgKCFlcnIgJiYgIShNU0RPU19JKGlub2RlKS0+aV9hdHRycyAmIEFUVFJfQVJDSCkpIHsKKwkJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CisJCU1TRE9TX0koaW5vZGUpLT5pX2F0dHJzIHw9IEFUVFJfQVJDSDsKKwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJfQorCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBzZWN0b3JfdCBfZmF0X2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJsb2NrKQogewogCXJldHVybiBnZW5lcmljX2Jsb2NrX2JtYXAobWFwcGluZywgYmxvY2ssIGZhdF9nZXRfYmxvY2spOwpAQCAtMTEyLDcgKzEyNSw3IEBACiAJLndyaXRlcGFnZQk9IGZhdF93cml0ZXBhZ2UsCiAJLnN5bmNfcGFnZQk9IGJsb2NrX3N5bmNfcGFnZSwKIAkucHJlcGFyZV93cml0ZQk9IGZhdF9wcmVwYXJlX3dyaXRlLAotCS5jb21taXRfd3JpdGUJPSBnZW5lcmljX2NvbW1pdF93cml0ZSwKKwkuY29tbWl0X3dyaXRlCT0gZmF0X2NvbW1pdF93cml0ZSwKIAkuYm1hcAkJPSBfZmF0X2JtYXAKIH07CiAKQEAgLTI4Nyw5ICszMDAsOSBAQAogCWlub2RlLT5pX2Jsa3NpemUgPSBzYmktPmNsdXN0ZXJfc2l6ZTsKIAlpbm9kZS0+aV9ibG9ja3MgPSAoKGlub2RlLT5pX3NpemUgKyAoc2JpLT5jbHVzdGVyX3NpemUgLSAxKSkKIAkJCSAgICYgfigobG9mZl90KXNiaS0+Y2x1c3Rlcl9zaXplIC0gMSkpID4+IDk7Ci0JaW5vZGUtPmlfbXRpbWUudHZfc2VjID0gaW5vZGUtPmlfYXRpbWUudHZfc2VjID0KKwlpbm9kZS0+aV9tdGltZS50dl9zZWMgPQogCQlkYXRlX2RvczJ1bml4KGxlMTZfdG9fY3B1KGRlLT50aW1lKSwgbGUxNl90b19jcHUoZGUtPmRhdGUpKTsKLQlpbm9kZS0+aV9tdGltZS50dl9uc2VjID0gaW5vZGUtPmlfYXRpbWUudHZfbnNlYyA9IDA7CisJaW5vZGUtPmlfbXRpbWUudHZfbnNlYyA9IDA7CiAJaWYgKHNiaS0+b3B0aW9ucy5pc3ZmYXQpIHsKIAkJaW50IHNlY3MgPSBkZS0+Y3RpbWVfY3MgLyAxMDA7CiAJCWludCBjc2VjcyA9IGRlLT5jdGltZV9jcyAlIDEwMDsKQEAgLTI5Nyw4ICszMTAsMTEgQEAKIAkJCWRhdGVfZG9zMnVuaXgobGUxNl90b19jcHUoZGUtPmN0aW1lKSwKIAkJCQkgICAgICBsZTE2X3RvX2NwdShkZS0+Y2RhdGUpKSArIHNlY3M7CiAJCWlub2RlLT5pX2N0aW1lLnR2X25zZWMgPSBjc2VjcyAqIDEwMDAwMDAwOworCQlpbm9kZS0+aV9hdGltZS50dl9zZWMgPQorCQkJZGF0ZV9kb3MydW5peChsZTE2X3RvX2NwdSgwKSwgbGUxNl90b19jcHUoZGUtPmFkYXRlKSk7CisJCWlub2RlLT5pX2F0aW1lLnR2X25zZWMgPSAwOwogCX0gZWxzZQotCQlpbm9kZS0+aV9jdGltZSA9IGlub2RlLT5pX210aW1lOworCQlpbm9kZS0+aV9jdGltZSA9IGlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfbXRpbWU7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUwMCw3ICs1MTYsOSBAQAogCXJhd19lbnRyeS0+c3RhcnRoaSA9IGNwdV90b19sZTE2KE1TRE9TX0koaW5vZGUpLT5pX2xvZ3N0YXJ0ID4+IDE2KTsKIAlmYXRfZGF0ZV91bml4MmRvcyhpbm9kZS0+aV9tdGltZS50dl9zZWMsICZyYXdfZW50cnktPnRpbWUsICZyYXdfZW50cnktPmRhdGUpOwogCWlmIChzYmktPm9wdGlvbnMuaXN2ZmF0KSB7CisJCV9fbGUxNiBhdGltZTsKIAkJZmF0X2RhdGVfdW5peDJkb3MoaW5vZGUtPmlfY3RpbWUudHZfc2VjLCZyYXdfZW50cnktPmN0aW1lLCZyYXdfZW50cnktPmNkYXRlKTsKKwkJZmF0X2RhdGVfdW5peDJkb3MoaW5vZGUtPmlfYXRpbWUudHZfc2VjLCZhdGltZSwmcmF3X2VudHJ5LT5hZGF0ZSk7CiAJCXJhd19lbnRyeS0+Y3RpbWVfY3MgPSAoaW5vZGUtPmlfY3RpbWUudHZfc2VjICYgMSkgKiAxMDAgKwogCQkJaW5vZGUtPmlfY3RpbWUudHZfbnNlYyAvIDEwMDAwMDAwOwogCX0KZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGlyLmMgYi9mcy9mdXNlL2Rpci5jCmluZGV4IGU3OWU0OWIuLjI5ZjFlOWYgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZGlyLmMKKysrIGIvZnMvZnVzZS9kaXIuYwpAQCAtOTYsNiArOTYsOCBAQAogCWZ1c2VfbG9va3VwX2luaXQocmVxLCBkaXIsIGVudHJ5LCAmb3V0YXJnKTsKIAlyZXF1ZXN0X3NlbmQoZmMsIHJlcSk7CiAJZXJyID0gcmVxLT5vdXQuaC5lcnJvcjsKKwlpZiAoIWVyciAmJiAoIW91dGFyZy5ub2RlaWQgfHwgb3V0YXJnLm5vZGVpZCA9PSBGVVNFX1JPT1RfSUQpKQorCQllcnIgPSAtRUlPOwogCWlmICghZXJyKSB7CiAJCWlub2RlID0gZnVzZV9pZ2V0KGRpci0+aV9zYiwgb3V0YXJnLm5vZGVpZCwgb3V0YXJnLmdlbmVyYXRpb24sCiAJCQkJICAmb3V0YXJnLmF0dHIpOwpAQCAtMTUyLDYgKzE1NCwxMCBAQAogCQlmdXNlX3B1dF9yZXF1ZXN0KGZjLCByZXEpOwogCQlyZXR1cm4gZXJyOwogCX0KKwlpZiAoIW91dGFyZy5ub2RlaWQgfHwgb3V0YXJnLm5vZGVpZCA9PSBGVVNFX1JPT1RfSUQpIHsKKwkJZnVzZV9wdXRfcmVxdWVzdChmYywgcmVxKTsKKwkJcmV0dXJuIC1FSU87CisJfQogCWlub2RlID0gZnVzZV9pZ2V0KGRpci0+aV9zYiwgb3V0YXJnLm5vZGVpZCwgb3V0YXJnLmdlbmVyYXRpb24sCiAJCQkgICZvdXRhcmcuYXR0cik7CiAJaWYgKCFpbm9kZSkgewpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9maWxlLmMgYi9mcy9mdXNlL2ZpbGUuYwppbmRleCA2NDU0MDIyLi42NTdhYjExIDEwMDY0NAotLS0gYS9mcy9mdXNlL2ZpbGUuYworKysgYi9mcy9mdXNlL2ZpbGUuYwpAQCAtMjMsNiArMjMsMTAgQEAKIAlzdHJ1Y3QgZnVzZV9maWxlICpmZjsKIAlpbnQgZXJyOwogCisJLyogVkZTIGNoZWNrcyB0aGlzLCBidXQgb25seSBfYWZ0ZXJfIC0+b3BlbigpICovCisJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX0RJUkVDVCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAllcnIgPSBnZW5lcmljX2ZpbGVfb3Blbihpbm9kZSwgZmlsZSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvc3VwZXIuYyBiL2ZzL2hmc3BsdXMvc3VwZXIuYwppbmRleCBmZDBmMGYwLi40NTJmYzFmIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL3N1cGVyLmMKKysrIGIvZnMvaGZzcGx1cy9zdXBlci5jCkBAIC01MCw2ICs1MCw3IEBACiAJaW5pdF9NVVRFWCgmSEZTUExVU19JKGlub2RlKS5leHRlbnRzX2xvY2spOwogCUhGU1BMVVNfSShpbm9kZSkuZmxhZ3MgPSAwOwogCUhGU1BMVVNfSShpbm9kZSkucnNyY19pbm9kZSA9IE5VTEw7CisJYXRvbWljX3NldCgmSEZTUExVU19JKGlub2RlKS5vcGVuY250LCAwKTsKIAogCWlmIChpbm9kZS0+aV9pbm8gPj0gSEZTUExVU19GSVJTVFVTRVJfQ05JRCkgewogCXJlYWRfaW5vZGU6CmRpZmYgLS1naXQgYS9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYyBiL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jCmluZGV4IDU5YzUwNjIuLmRkNzExMzEgMTAwNjQ0Ci0tLSBhL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jCisrKyBiL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jCkBAIC03OTMsMTEgKzc5Myw2IEBACiAJcmV0dXJuKGVycik7CiB9CiAKLXZvaWQgaG9zdGZzX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vKQotewotCW5vdF9pbXBsZW1lbnRlZCgpOwotfQotCiBpbnQgaG9zdGZzX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm8sIGludCBkZXNpcmVkLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKIAljaGFyICpuYW1lOwpAQCAtODk0LDcgKzg4OSw2IEBACiAJLnJtZGlyCQk9IGhvc3Rmc19ybWRpciwKIAkubWtub2QJCT0gaG9zdGZzX21rbm9kLAogCS5yZW5hbWUJCT0gaG9zdGZzX3JlbmFtZSwKLQkudHJ1bmNhdGUJPSBob3N0ZnNfdHJ1bmNhdGUsCiAJLnBlcm1pc3Npb24JPSBob3N0ZnNfcGVybWlzc2lvbiwKIAkuc2V0YXR0cgk9IGhvc3Rmc19zZXRhdHRyLAogCS5nZXRhdHRyCT0gaG9zdGZzX2dldGF0dHIsCkBAIC05MTAsNyArOTA0LDYgQEAKIAkucm1kaXIJCT0gaG9zdGZzX3JtZGlyLAogCS5ta25vZAkJPSBob3N0ZnNfbWtub2QsCiAJLnJlbmFtZQkJPSBob3N0ZnNfcmVuYW1lLAotCS50cnVuY2F0ZQk9IGhvc3Rmc190cnVuY2F0ZSwKIAkucGVybWlzc2lvbgk9IGhvc3Rmc19wZXJtaXNzaW9uLAogCS5zZXRhdHRyCT0gaG9zdGZzX3NldGF0dHIsCiAJLmdldGF0dHIJPSBob3N0ZnNfZ2V0YXR0ciwKZGlmZiAtLWdpdCBhL2ZzL2lub3RpZnkuYyBiL2ZzL2lub3RpZnkuYwppbmRleCBhMzdlOWZiLi45ZmJhZWJmIDEwMDY0NAotLS0gYS9mcy9pbm90aWZ5LmMKKysrIGIvZnMvaW5vdGlmeS5jCkBAIC0xNzYsNiArMTc2LDcgQEAKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZGV2LT5jb3VudCkpIHsKIAkJYXRvbWljX2RlYygmZGV2LT51c2VyLT5pbm90aWZ5X2RldnMpOwogCQlmcmVlX3VpZChkZXYtPnVzZXIpOworCQlpZHJfZGVzdHJveSgmZGV2LT5pZHIpOwogCQlrZnJlZShkZXYpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2ZzL2pmcy9pbm9kZS5jIGIvZnMvamZzL2lub2RlLmMKaW5kZXggMGVjNjJkNS4uOWY5NDJjYSAxMDA2NDQKLS0tIGEvZnMvamZzL2lub2RlLmMKKysrIGIvZnMvamZzL2lub2RlLmMKQEAgLTEyOSw4ICsxMjksNyBAQAogCWpmc19pbmZvKCJJbiBqZnNfZGVsZXRlX2lub2RlLCBpbm9kZSA9IDB4JXAiLCBpbm9kZSk7CiAKIAlpZiAoIWlzX2JhZF9pbm9kZShpbm9kZSkgJiYKLQkgICAgKEpGU19JUChpbm9kZSktPmZpbGVzZXQgPT0gY3B1X3RvX2xlMzIoRklMRVNZU1RFTV9JKSkpIHsKLQorCSAgICAoSkZTX0lQKGlub2RlKS0+ZmlsZXNldCA9PSBGSUxFU1lTVEVNX0kpKSB7CiAJCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKIAogCQlpZiAodGVzdF9jZmxhZyhDT01NSVRfRnJlZXdtYXAsIGlub2RlKSkKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfZG1hcC5jIGIvZnMvamZzL2pmc19kbWFwLmMKaW5kZXggYzczOTYyNi4uZWFkZjMxOSAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19kbWFwLmMKKysrIGIvZnMvamZzL2pmc19kbWFwLmMKQEAgLTMwNTUsNyArMzA1NSw3IEBACiAgKiBSRVRVUk4gVkFMVUVTOgogICogICAgICBsb2cyIG51bWJlciBvZiBibG9ja3MKICAqLwotaW50IGJsa3N0b2wyKHM2NCBuYikKK3N0YXRpYyBpbnQgYmxrc3RvbDIoczY0IG5iKQogewogCWludCBsMm5iOwogCXM2NCBtYXNrOwkJLyogbWVhbnQgdG8gYmUgc2lnbmVkICovCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX3R4bm1nci5jIGIvZnMvamZzL2pmc190eG5tZ3IuYwppbmRleCBjN2E5MmY5Li45YjcxZWQyIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX3R4bm1nci5jCisrKyBiL2ZzL2pmcy9qZnNfdHhubWdyLmMKQEAgLTcyNSw2ICs3MjUsOSBAQAogCWVsc2UKIAkJdGxjay0+ZmxhZyA9IHRsY2tJTk9ERUxPQ0s7CiAKKwlpZiAoU19JU0RJUihpcC0+aV9tb2RlKSkKKwkJdGxjay0+ZmxhZyB8PSB0bGNrRElSRUNUT1JZOworCiAJdGxjay0+dHlwZSA9IDA7CiAKIAkvKiBiaW5kIHRoZSB0bG9jayBhbmQgdGhlIHBhZ2UgKi8KQEAgLTEwMDksNiArMTAxMiw4IEBACiAKIAkvKiBiaW5kIHRoZSB0bG9jayBhbmQgdGhlIG9iamVjdCAqLwogCXRsY2stPmZsYWcgPSB0bGNrSU5PREVMT0NLOworCWlmIChTX0lTRElSKGlwLT5pX21vZGUpKQorCQl0bGNrLT5mbGFnIHw9IHRsY2tESVJFQ1RPUlk7CiAJdGxjay0+aXAgPSBpcDsKIAl0bGNrLT5tcCA9IE5VTEw7CiAKQEAgLTEwNzcsNiArMTA4Miw4IEBACiAJbGluZWxvY2stPmZsYWcgPSB0bGNrTElORUxPQ0s7CiAJbGluZWxvY2stPm1heGNudCA9IFRMT0NLTE9ORzsKIAlsaW5lbG9jay0+aW5kZXggPSAwOworCWlmICh0bGNrLT5mbGFnICYgdGxja0RJUkVDVE9SWSkKKwkJbGluZWxvY2stPmZsYWcgfD0gdGxja0RJUkVDVE9SWTsKIAogCS8qIGFwcGVuZCBsaW5lbG9jayBhZnRlciB0bG9jayAqLwogCWxpbmVsb2NrLT5uZXh0ID0gdGxvY2stPm5leHQ7CkBAIC0yMDcwLDggKzIwNzcsOCBAQAogICoKICAqIGZ1bmN0aW9uOiAgICBsb2cgZnJvbSBtYXBsb2NrIG9mIGZyZWVkIGRhdGEgZXh0ZW50czsKICAqLwotdm9pZCBtYXBMb2coc3RydWN0IGpmc19sb2cgKiBsb2csIHN0cnVjdCB0YmxvY2sgKiB0YmxrLCBzdHJ1Y3QgbHJkICogbHJkLAotCSAgICBzdHJ1Y3QgdGxvY2sgKiB0bGNrKQorc3RhdGljIHZvaWQgbWFwTG9nKHN0cnVjdCBqZnNfbG9nICogbG9nLCBzdHJ1Y3QgdGJsb2NrICogdGJsaywgc3RydWN0IGxyZCAqIGxyZCwKKwkJICAgc3RydWN0IHRsb2NrICogdGxjaykKIHsKIAlzdHJ1Y3QgcHhkX2xvY2sgKnB4ZGxvY2s7CiAJaW50IGksIG5sb2NrOwpAQCAtMjIwOSw3ICsyMjE2LDcgQEAKICAqIGZ1bmN0aW9uOiBzeW5jaHJvbm91c2x5IHdyaXRlIHBhZ2VzIGxvY2tlZCBieSB0cmFuc2FjdGlvbgogICogICAgICAgICAgICAgIGFmdGVyIHR4TG9nKCkgYnV0IGJlZm9yZSB0eFVwZGF0ZU1hcCgpOwogICovCi12b2lkIHR4Rm9yY2Uoc3RydWN0IHRibG9jayAqIHRibGspCitzdGF0aWMgdm9pZCB0eEZvcmNlKHN0cnVjdCB0YmxvY2sgKiB0YmxrKQogewogCXN0cnVjdCB0bG9jayAqdGxjazsKIAlsaWRfdCBsaWQsIG5leHQ7CkBAIC0yMzU4LDcgKzIzNjUsNyBAQAogCQkJICovCiAJCQllbHNlIHsJLyogKG1hcGxvY2stPmZsYWcgJiBtbGNrRlJFRSkgKi8KIAotCQkJCWlmIChTX0lTRElSKHRsY2stPmlwLT5pX21vZGUpKQorCQkJCWlmICh0bGNrLT5mbGFnICYgdGxja0RJUkVDVE9SWSkKIAkJCQkJdHhGcmVlTWFwKGlwaW1hcCwgbWFwbG9jaywKIAkJCQkJCSAgdGJsaywgQ09NTUlUX1BXTUFQKTsKIAkJCQllbHNlCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX3R4bm1nci5oIGIvZnMvamZzL2pmc190eG5tZ3IuaAppbmRleCA1OWFkMGY2Li4wZTRkYzQ1IDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX3R4bm1nci5oCisrKyBiL2ZzL2pmcy9qZnNfdHhubWdyLmgKQEAgLTEyMiw2ICsxMjIsNyBAQAogI2RlZmluZSB0bGNrTE9HCQkJMHgwODAwCiAvKiB1cGRhdGVNYXAgc3RhdGUgKi8KICNkZWZpbmUJdGxja1VQREFURU1BUAkJMHgwMDgwCisjZGVmaW5lCXRsY2tESVJFQ1RPUlkJCTB4MDA0MAogLyogZnJlZUxvY2sgc3RhdGUgKi8KICNkZWZpbmUgdGxja0ZSRUVMT0NLCQkweDAwMDgKICNkZWZpbmUgdGxja1dSSVRFUEFHRQkJMHgwMDA0CmRpZmYgLS1naXQgYS9mcy9sb2Nrcy5jIGIvZnMvbG9ja3MuYwppbmRleCBjMmMwOWI0Li5mN2RhYTVmIDEwMDY0NAotLS0gYS9mcy9sb2Nrcy5jCisrKyBiL2ZzL2xvY2tzLmMKQEAgLTEyNCw2ICsxMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KIAogI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMjIwNSw2ICsyMjA2LDcgQEAKIAogCWxvY2tfa2VybmVsKCk7CiAJaiA9IDA7CisJcmN1X3JlYWRfbG9jaygpOwogCWZkdCA9IGZpbGVzX2ZkdGFibGUoZmlsZXMpOwogCWZvciAoOzspIHsKIAkJdW5zaWduZWQgbG9uZyBzZXQ7CkBAIC0yMjIyLDYgKzIyMjQsNyBAQAogCQkJc2V0ID4+PSAxOwogCQl9CiAJfQorCXJjdV9yZWFkX3VubG9jaygpOwogCXVubG9ja19rZXJuZWwoKTsKIH0KIEVYUE9SVF9TWU1CT0woc3RlYWxfbG9ja3MpOwpkaWZmIC0tZ2l0IGEvZnMvbXBhZ2UuYyBiL2ZzL21wYWdlLmMKaW5kZXggYmI5YWViZS4uYzVhZGNkZCAxMDA2NDQKLS0tIGEvZnMvbXBhZ2UuYworKysgYi9mcy9tcGFnZS5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgYmlvICoKIG1wYWdlX2FsbG9jKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCiAJCXNlY3Rvcl90IGZpcnN0X3NlY3RvciwgaW50IG5yX3ZlY3MsCi0JCXVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfZmxhZ3MpCisJCWdmcF90IGdmcF9mbGFncykKIHsKIAlzdHJ1Y3QgYmlvICpiaW87CiAKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IDA0M2Q1ODcuLmFhNjJkYmQgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKKysrIGIvZnMvbmFtZWkuYwpAQCAtMTU1MSwxOSArMTU1MSwxOSBAQAogCWlmIChuZC0+bGFzdF90eXBlICE9IExBU1RfTk9STSkKIAkJZ290byBleGl0OwogCWlmIChuZC0+bGFzdC5uYW1lW25kLT5sYXN0Lmxlbl0pIHsKLQkJcHV0bmFtZShuZC0+bGFzdC5uYW1lKTsKKwkJX19wdXRuYW1lKG5kLT5sYXN0Lm5hbWUpOwogCQlnb3RvIGV4aXQ7CiAJfQogCWVycm9yID0gLUVMT09QOwogCWlmIChjb3VudCsrPT0zMikgewotCQlwdXRuYW1lKG5kLT5sYXN0Lm5hbWUpOworCQlfX3B1dG5hbWUobmQtPmxhc3QubmFtZSk7CiAJCWdvdG8gZXhpdDsKIAl9CiAJZGlyID0gbmQtPmRlbnRyeTsKIAlkb3duKCZkaXItPmRfaW5vZGUtPmlfc2VtKTsKIAlwYXRoLmRlbnRyeSA9IF9fbG9va3VwX2hhc2goJm5kLT5sYXN0LCBuZC0+ZGVudHJ5LCBuZCk7CiAJcGF0aC5tbnQgPSBuZC0+bW50OwotCXB1dG5hbWUobmQtPmxhc3QubmFtZSk7CisJX19wdXRuYW1lKG5kLT5sYXN0Lm5hbWUpOwogCWdvdG8gZG9fbGFzdDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbmZzL2RlbGVnYXRpb24uYyBiL2ZzL25mcy9kZWxlZ2F0aW9uLmMKaW5kZXggZDdmN2ViNi4uNGEzNjgzOSAxMDA2NDQKLS0tIGEvZnMvbmZzL2RlbGVnYXRpb24uYworKysgYi9mcy9uZnMvZGVsZWdhdGlvbi5jCkBAIC04NSw2ICs4NSwxMCBAQAogCXN0cnVjdCBuZnNfZGVsZWdhdGlvbiAqZGVsZWdhdGlvbjsKIAlpbnQgc3RhdHVzID0gMDsKIAorCS8qIEVuc3VyZSB3ZSBmaXJzdCByZXZhbGlkYXRlIHRoZSBhdHRyaWJ1dGVzIGFuZCBwYWdlIGNhY2hlISAqLworCWlmICgobmZzaS0+Y2FjaGVfdmFsaWRpdHkgJiAoTkZTX0lOT19SRVZBTF9QQUdFQ0FDSEV8TkZTX0lOT19JTlZBTElEX0FUVFIpKSkKKwkJX19uZnNfcmV2YWxpZGF0ZV9pbm9kZShORlNfU0VSVkVSKGlub2RlKSwgaW5vZGUpOworCiAJZGVsZWdhdGlvbiA9IG5mc19hbGxvY19kZWxlZ2F0aW9uKCk7CiAJaWYgKGRlbGVnYXRpb24gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9mcy9uZnMvZmlsZS5jIGIvZnMvbmZzL2ZpbGUuYwppbmRleCBmNmI5ZWRhLi42YmRjZmE5IDEwMDY0NAotLS0gYS9mcy9uZnMvZmlsZS5jCisrKyBiL2ZzL25mcy9maWxlLmMKQEAgLTEzNyw3ICsxMzcsOCBAQAogCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm9kZSk7CiAJaW50IHJldHZhbCA9IDA7CiAKLQlpZiAoKG5mc2ktPmNhY2hlX3ZhbGlkaXR5ICYgTkZTX0lOT19SRVZBTF9QQUdFQ0FDSEUpIHx8IG5mc19hdHRyaWJ1dGVfdGltZW91dChpbm9kZSkpCisJaWYgKChuZnNpLT5jYWNoZV92YWxpZGl0eSAmIChORlNfSU5PX1JFVkFMX1BBR0VDQUNIRXxORlNfSU5PX0lOVkFMSURfQVRUUikpCisJCQl8fCBuZnNfYXR0cmlidXRlX3RpbWVvdXQoaW5vZGUpKQogCQlyZXR2YWwgPSBfX25mc19yZXZhbGlkYXRlX2lub2RlKE5GU19TRVJWRVIoaW5vZGUpLCBpbm9kZSk7CiAJbmZzX3JldmFsaWRhdGVfbWFwcGluZyhpbm9kZSwgZmlscC0+Zl9tYXBwaW5nKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL25mcy9pbm9kZS5jIGIvZnMvbmZzL2lub2RlLmMKaW5kZXggNjkyMjQ2OWQuLmQ0ZWFkZWUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9pbm9kZS5jCisrKyBiL2ZzL25mcy9pbm9kZS5jCkBAIC04NzcsMTIgKzg3NywxMCBAQAogCXNpZ3NldF90IG9sZG1hc2s7CiAJaW50IGVycm9yOwogCi0JYXRvbWljX2luYygmaW5vZGUtPmlfY291bnQpOwogCXJwY19jbG50X3NpZ21hc2soY2xudCwgJm9sZG1hc2spOwogCWVycm9yID0gd2FpdF9vbl9iaXRfbG9jaygmbmZzaS0+ZmxhZ3MsIE5GU19JTk9fUkVWQUxJREFUSU5HLAogCQkJCQluZnNfd2FpdF9zY2hlZHVsZSwgVEFTS19JTlRFUlJVUFRJQkxFKTsKIAlycGNfY2xudF9zaWd1bm1hc2soY2xudCwgJm9sZG1hc2spOwotCWlwdXQoaW5vZGUpOwogCiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMTIyNiwxMCArMTIyNCw2IEBACiAJbG9mZl90IGN1cl9zaXplLCBuZXdfaXNpemU7CiAJaW50IGRhdGFfdW5zdGFibGU7CiAKLQkvKiBEbyB3ZSBob2xkIGEgZGVsZWdhdGlvbj8gKi8KLQlpZiAobmZzX2hhdmVfZGVsZWdhdGlvbihpbm9kZSwgRk1PREVfUkVBRCkpCi0JCXJldHVybiAwOwotCiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAogCS8qIEFyZSB3ZSBpbiB0aGUgcHJvY2VzcyBvZiB1cGRhdGluZyBkYXRhIG9uIHRoZSBzZXJ2ZXI/ICovCkBAIC0xMzUwLDcgKzEzNDQsOCBAQAogCW5mc2ktPnJlYWRfY2FjaGVfamlmZmllcyA9IGZhdHRyLT50aW1lc3RhbXA7CiAKIAkvKiBBcmUgd2UgcmFjaW5nIHdpdGgga25vd24gdXBkYXRlcyBvZiB0aGUgbWV0YWRhdGEgb24gdGhlIHNlcnZlcj8gKi8KLQlkYXRhX3Vuc3RhYmxlID0gISBuZnNfdmVyaWZ5X2NoYW5nZV9hdHRyaWJ1dGUoaW5vZGUsIHZlcmlmaWVyKTsKKwlkYXRhX3Vuc3RhYmxlID0gISAobmZzX3ZlcmlmeV9jaGFuZ2VfYXR0cmlidXRlKGlub2RlLCB2ZXJpZmllcikgfHwKKwkJKG5mc2ktPmNhY2hlX3ZhbGlkaXR5ICYgTkZTX0lOT19SRVZBTF9QQUdFQ0FDSEUpKTsKIAogCS8qIENoZWNrIGlmIG91ciBjYWNoZWQgZmlsZSBzaXplIGlzIHN0YWxlICovCiAgCW5ld19pc2l6ZSA9IG5mc19zaXplX3RvX2xvZmZfdChmYXR0ci0+c2l6ZSk7CmRpZmYgLS1naXQgYS9mcy9uZnMvcmVhZC5jIGIvZnMvbmZzL3JlYWQuYwppbmRleCA2Y2ViMWQ0Li45NzU4ZWJkIDEwMDY0NAotLS0gYS9mcy9uZnMvcmVhZC5jCisrKyBiL2ZzL25mcy9yZWFkLmMKQEAgLTE4NCwxNCArMTg0LDEzIEBACiB7CiAJdW5sb2NrX3BhZ2UocmVxLT53Yl9wYWdlKTsKIAotCW5mc19jbGVhcl9yZXF1ZXN0KHJlcSk7Ci0JbmZzX3JlbGVhc2VfcmVxdWVzdChyZXEpOwotCiAJZHByaW50aygiTkZTOiByZWFkIGRvbmUgKCVzLyVMZCAlZEAlTGQpXG4iLAogCQkJcmVxLT53Yl9jb250ZXh0LT5kZW50cnktPmRfaW5vZGUtPmlfc2ItPnNfaWQsCiAJCQkobG9uZyBsb25nKU5GU19GSUxFSUQocmVxLT53Yl9jb250ZXh0LT5kZW50cnktPmRfaW5vZGUpLAogCQkJcmVxLT53Yl9ieXRlcywKIAkJCShsb25nIGxvbmcpcmVxX29mZnNldChyZXEpKTsKKwluZnNfY2xlYXJfcmVxdWVzdChyZXEpOworCW5mc19yZWxlYXNlX3JlcXVlc3QocmVxKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL25mc19jb21tb24vbmZzYWNsLmMgYi9mcy9uZnNfY29tbW9uL25mc2FjbC5jCmluZGV4IDI1MWU1YTEuLjBjMmJlOGMgMTAwNjQ0Ci0tLSBhL2ZzL25mc19jb21tb24vbmZzYWNsLmMKKysrIGIvZnMvbmZzX2NvbW1vbi9uZnNhY2wuYwpAQCAtNDgsNDMgKzQ4LDI2IEBACiAJCShzdHJ1Y3QgbmZzYWNsX2VuY29kZV9kZXNjICopIGRlc2M7CiAJdTMyICpwID0gKHUzMiAqKSBlbGVtOwogCi0JaWYgKG5mc2FjbF9kZXNjLT5jb3VudCA8IG5mc2FjbF9kZXNjLT5hY2wtPmFfY291bnQpIHsKLQkJc3RydWN0IHBvc2l4X2FjbF9lbnRyeSAqZW50cnkgPQotCQkJJm5mc2FjbF9kZXNjLT5hY2wtPmFfZW50cmllc1tuZnNhY2xfZGVzYy0+Y291bnQrK107CisJc3RydWN0IHBvc2l4X2FjbF9lbnRyeSAqZW50cnkgPQorCQkmbmZzYWNsX2Rlc2MtPmFjbC0+YV9lbnRyaWVzW25mc2FjbF9kZXNjLT5jb3VudCsrXTsKIAotCQkqcCsrID0gaHRvbmwoZW50cnktPmVfdGFnIHwgbmZzYWNsX2Rlc2MtPnR5cGVmbGFnKTsKLQkJc3dpdGNoKGVudHJ5LT5lX3RhZykgewotCQkJY2FzZSBBQ0xfVVNFUl9PQko6Ci0JCQkJKnArKyA9IGh0b25sKG5mc2FjbF9kZXNjLT51aWQpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBQ0xfR1JPVVBfT0JKOgotCQkJCSpwKysgPSBodG9ubChuZnNhY2xfZGVzYy0+Z2lkKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQUNMX1VTRVI6Ci0JCQljYXNlIEFDTF9HUk9VUDoKLQkJCQkqcCsrID0gaHRvbmwoZW50cnktPmVfaWQpOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDogIC8qIFNvbGFyaXMgZGVwZW5kcyBvbiB0aGF0ISAqLwotCQkJCSpwKysgPSAwOwotCQkJCWJyZWFrOwotCQl9Ci0JCSpwKysgPSBodG9ubChlbnRyeS0+ZV9wZXJtICYgU19JUldYTyk7Ci0JfSBlbHNlIHsKLQkJY29uc3Qgc3RydWN0IHBvc2l4X2FjbF9lbnRyeSAqcGEsICpwZTsKLQkJaW50IGdyb3VwX29ial9wZXJtID0gQUNMX1JFQUR8QUNMX1dSSVRFfEFDTF9FWEVDVVRFOwotCi0JCUZPUkVBQ0hfQUNMX0VOVFJZKHBhLCBuZnNhY2xfZGVzYy0+YWNsLCBwZSkgewotCQkJaWYgKHBhLT5lX3RhZyA9PSBBQ0xfR1JPVVBfT0JKKSB7Ci0JCQkJZ3JvdXBfb2JqX3Blcm0gPSBwYS0+ZV9wZXJtICYgU19JUldYTzsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQkvKiBmYWtlIHVwIEFDTF9NQVNLIGVudHJ5ICovCi0JCSpwKysgPSBodG9ubChBQ0xfTUFTSyB8IG5mc2FjbF9kZXNjLT50eXBlZmxhZyk7Ci0JCSpwKysgPSBodG9ubCgwKTsKLQkJKnArKyA9IGh0b25sKGdyb3VwX29ial9wZXJtKTsKKwkqcCsrID0gaHRvbmwoZW50cnktPmVfdGFnIHwgbmZzYWNsX2Rlc2MtPnR5cGVmbGFnKTsKKwlzd2l0Y2goZW50cnktPmVfdGFnKSB7CisJCWNhc2UgQUNMX1VTRVJfT0JKOgorCQkJKnArKyA9IGh0b25sKG5mc2FjbF9kZXNjLT51aWQpOworCQkJYnJlYWs7CisJCWNhc2UgQUNMX0dST1VQX09CSjoKKwkJCSpwKysgPSBodG9ubChuZnNhY2xfZGVzYy0+Z2lkKTsKKwkJCWJyZWFrOworCQljYXNlIEFDTF9VU0VSOgorCQljYXNlIEFDTF9HUk9VUDoKKwkJCSpwKysgPSBodG9ubChlbnRyeS0+ZV9pZCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDogIC8qIFNvbGFyaXMgZGVwZW5kcyBvbiB0aGF0ISAqLworCQkJKnArKyA9IDA7CisJCQlicmVhazsKIAl9Ci0KKwkqcCsrID0gaHRvbmwoZW50cnktPmVfcGVybSAmIFNfSVJXWE8pOwogCXJldHVybiAwOwogfQogCkBAIC0xMDUsMTEgKzg4LDI4IEBACiAJCS5naWQgPSBpbm9kZS0+aV9naWQsCiAJfTsKIAlpbnQgZXJyOworCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDIgPSBOVUxMOwogCiAJaWYgKGVudHJpZXMgPiBORlNfQUNMX01BWF9FTlRSSUVTIHx8CiAJICAgIHhkcl9lbmNvZGVfd29yZChidWYsIGJhc2UsIGVudHJpZXMpKQogCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZW5jb2RlX2VudHJpZXMgJiYgYWNsICYmIGFjbC0+YV9jb3VudCA9PSAzKSB7CisJCS8qIEZha2UgdXAgYW4gQUNMX01BU0sgZW50cnkuICovCisJCWFjbDIgPSBwb3NpeF9hY2xfYWxsb2MoNCwgR0ZQX0tFUk5FTCk7CisJCWlmICghYWNsMikKKwkJCXJldHVybiAtRU5PTUVNOworCQkvKiBJbnNlcnQgZW50cmllcyBpbiBjYW5vbmljYWwgb3JkZXI6IG90aGVyIG9yZGVycyBzZWVtCisJCSB0byBjb25mdXNlIFNvbGFyaXMgVnhGUy4gKi8KKwkJYWNsMi0+YV9lbnRyaWVzWzBdID0gYWNsLT5hX2VudHJpZXNbMF07ICAvKiBBQ0xfVVNFUl9PQkogKi8KKwkJYWNsMi0+YV9lbnRyaWVzWzFdID0gYWNsLT5hX2VudHJpZXNbMV07ICAvKiBBQ0xfR1JPVVBfT0JKICovCisJCWFjbDItPmFfZW50cmllc1syXSA9IGFjbC0+YV9lbnRyaWVzWzFdOyAgLyogQUNMX01BU0sgKi8KKwkJYWNsMi0+YV9lbnRyaWVzWzJdLmVfdGFnID0gQUNMX01BU0s7CisJCWFjbDItPmFfZW50cmllc1szXSA9IGFjbC0+YV9lbnRyaWVzWzJdOyAgLyogQUNMX09USEVSICovCisJCW5mc2FjbF9kZXNjLmFjbCA9IGFjbDI7CisJfQogCWVyciA9IHhkcl9lbmNvZGVfYXJyYXkyKGJ1ZiwgYmFzZSArIDQsICZuZnNhY2xfZGVzYy5kZXNjKTsKKwlpZiAoYWNsMikKKwkJcG9zaXhfYWNsX3JlbGVhc2UoYWNsMik7CiAJaWYgKCFlcnIpCiAJCWVyciA9IDggKyBuZnNhY2xfZGVzYy5kZXNjLmVsZW1fc2l6ZSAqCiAJCQkgIG5mc2FjbF9kZXNjLmRlc2MuYXJyYXlfbGVuOwpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9DaGFuZ2VMb2cgYi9mcy9udGZzL0NoYW5nZUxvZwppbmRleCA0OWVhZmJkLi5kZTU4NTc5IDEwMDY0NAotLS0gYS9mcy9udGZzL0NoYW5nZUxvZworKysgYi9mcy9udGZzL0NoYW5nZUxvZwpAQCAtMjksNyArMjksOCBAQAogCSAgVGhlIFdpbmRvd3MgYm9vdCB3aWxsIHJ1biBjaGtkc2sgYW5kIHRoZW4gcmVib290LiAgVGhlIHVzZXIgY2FuIHRoZW4KIAkgIGltbWVkaWF0ZWx5IGJvb3QgaW50byBMaW51eCByYXRoZXIgdGhhbiBoYXZpbmcgdG8gZG8gYSBmdWxsIFdpbmRvd3MKIAkgIGJvb3QgZmlyc3QgYmVmb3JlIHJlYm9vdGluZyBpbnRvIExpbnV4IGFuZCB3ZSB3aWxsIHJlY29nbml6ZSBzdWNoIGEKLQkgIGpvdXJuYWwgYW5kIGVtcHR5IGl0IGFzIGl0IGlzIGNsZWFuIGJ5IGRlZmluaXRpb24uCisJICBqb3VybmFsIGFuZCBlbXB0eSBpdCBhcyBpdCBpcyBjbGVhbiBieSBkZWZpbml0aW9uLiAgTm90ZSwgdGhpcyBvbmx5CisJICB3b3JrcyBpZiBjaGtkc2sgbGVmdCB0aGUgam91cm5hbCBpbiBhbiBvYnZpb3VzbHkgY2xlYW4gc3RhdGUuCiAJLSBTdXBwb3J0IGpvdXJuYWxzICgkTG9nRmlsZSkgd2l0aCBvbmx5IG9uZSByZXN0YXJ0IHBhZ2UgYXMgd2VsbCBhcwogCSAgam91cm5hbHMgd2l0aCB0d28gZGlmZmVyZW50IHJlc3RhcnQgcGFnZXMuICBXZSBzYW5pdHkgY2hlY2sgYm90aCBhbmQKIAkgIGVpdGhlciB1c2UgdGhlIG9ubHkgc2FuZSBvbmUgb3IgdGhlIG1vcmUgcmVjZW50IG9uZSBvZiB0aGUgdHdvIGluIHRoZQpAQCAtOTIsNiArOTMsMTggQEAKIAkgIGFuIG9jdGFsIG51bWJlciB0byBjb25mb3JtIHRvIGhvdyBjaG1vZCgxKSB3b3JrcywgdG9vLiAgVGhhbmtzIHRvCiAJICBHaXVzZXBwZSBCaWxvdHRhIGFuZCBIb3JzdCB2b24gQnJhbmQgZm9yIHBvaW50aW5nIG91dCB0aGUgZXJyb3JzIG9mCiAJICBteSB3YXlzLgorCS0gRml4IHZhcmlvdXMgYnVncyBpbiB0aGUgcnVubGlzdCBtZXJnaW5nIGNvZGUuICAoQmFzZWQgb24gbGlibnRmcworCSAgY2hhbmdlcyBieSBSaWNoYXJkIFJ1c3Nvbi4pCisJLSBGaXggc3BhcnNlIHdhcm5pbmdzIHRoYXQgaGF2ZSBjcmVwdCBpbiBvdmVyIHRpbWUuCisJLSBDaGFuZ2UgbnRmc19jbHVzdGVyX2ZyZWUoKSB0byByZXF1aXJlIGEgd3JpdGUgbG9ja2VkIHJ1bmxpc3Qgb24gZW50cnkKKwkgIHNpbmNlIHdlIG90aGVyd2lzZSBnZXQgaW50byBhIGxvY2sgcmV2ZXJzYWwgZGVhZGxvY2sgaWYgYSByZWFkIGxvY2tlZAorCSAgcnVubGlzdCBpcyBwYXNzZWQgaW4uIEluIHRoZSBwcm9jZXNzIGFsc28gY2hhbmdlIGl0IHRvIHRha2UgYW4gbnRmcworCSAgaW5vZGUgaW5zdGVhZCBvZiBhIHZmcyBpbm9kZSBhcyBwYXJhbWV0ZXIuCisJLSBGaXggdGhlIGRlZmluaXRpb24gb2YgdGhlIENIS0QgbnRmcyByZWNvcmQgbWFnaWMuICBJdCBoYWQgYW4gb2ZmIGJ5CisJICB0d28gZXJyb3IgY2F1c2luZyBpdCB0byBiZSBDSEtCIGluc3RlYWQgb2YgQ0hLRC4KKwktIEZpeCBhIHN0dXBpZCBidWcgaW4gX19udGZzX2JpdG1hcF9zZXRfYml0c19pbl9ydW4oKSB3aGljaCBjYXVzZWQgdGhlCisJICBjb3VudCB0byBiZWNvbWUgbmVnYXRpdmUgYW5kIGhlbmNlIHdlIGhhZCBhIHdpbGQgbWVtc2V0KCkgc2NyaWJibGluZworCSAgYWxsIG92ZXIgdGhlIHN5c3RlbSdzIHJhbS4KIAogMi4xLjIzIC0gSW1wbGVtZW50IGV4dGVuc2lvbiBvZiByZXNpZGVudCBmaWxlcyBhbmQgbWFrZSB3cml0aW5nIHNhZmUgYXMgd2VsbCBhcwogCSBtYW55IGJ1ZyBmaXhlcywgY2xlYW51cHMsIGFuZCBlbmhhbmNlbWVudHMuLi4KZGlmZiAtLWdpdCBhL2ZzL250ZnMvYW9wcy5jIGIvZnMvbnRmcy9hb3BzLmMKaW5kZXggYjZjYzhjZi4uNWU4MGMwNyAxMDA2NDQKLS0tIGEvZnMvbnRmcy9hb3BzLmMKKysrIGIvZnMvbnRmcy9hb3BzLmMKQEAgLTU5LDM5ICs1OSw0OSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpmaXJzdCwgKnRtcDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgaW5vZGUgKnZpOwogCW50ZnNfaW5vZGUgKm5pOwogCWludCBwYWdlX3VwdG9kYXRlID0gMTsKIAogCXBhZ2UgPSBiaC0+Yl9wYWdlOwotCW5pID0gTlRGU19JKHBhZ2UtPm1hcHBpbmctPmhvc3QpOworCXZpID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKKwluaSA9IE5URlNfSSh2aSk7CiAKIAlpZiAobGlrZWx5KHVwdG9kYXRlKSkgewotCQlzNjQgZmlsZV9vZnMsIGluaXRpYWxpemVkX3NpemU7CisJCWxvZmZfdCBpX3NpemU7CisJCXM2NCBmaWxlX29mcywgaW5pdF9zaXplOwogCiAJCXNldF9idWZmZXJfdXB0b2RhdGUoYmgpOwogCiAJCWZpbGVfb2ZzID0gKChzNjQpcGFnZS0+aW5kZXggPDwgUEFHRV9DQUNIRV9TSElGVCkgKwogCQkJCWJoX29mZnNldChiaCk7CiAJCXJlYWRfbG9ja19pcnFzYXZlKCZuaS0+c2l6ZV9sb2NrLCBmbGFncyk7Ci0JCWluaXRpYWxpemVkX3NpemUgPSBuaS0+aW5pdGlhbGl6ZWRfc2l6ZTsKKwkJaW5pdF9zaXplID0gbmktPmluaXRpYWxpemVkX3NpemU7CisJCWlfc2l6ZSA9IGlfc2l6ZV9yZWFkKHZpKTsKIAkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmbmktPnNpemVfbG9jaywgZmxhZ3MpOworCQlpZiAodW5saWtlbHkoaW5pdF9zaXplID4gaV9zaXplKSkgeworCQkJLyogUmFjZSB3aXRoIHNocmlua2luZyB0cnVuY2F0ZS4gKi8KKwkJCWluaXRfc2l6ZSA9IGlfc2l6ZTsKKwkJfQogCQkvKiBDaGVjayBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyIGhlYWQgb3ZlcmZsb3dpbmcuICovCi0JCWlmIChmaWxlX29mcyArIGJoLT5iX3NpemUgPiBpbml0aWFsaXplZF9zaXplKSB7Ci0JCQljaGFyICphZGRyOwotCQkJaW50IG9mcyA9IDA7CisJCWlmICh1bmxpa2VseShmaWxlX29mcyArIGJoLT5iX3NpemUgPiBpbml0X3NpemUpKSB7CisJCQl1OCAqa2FkZHI7CisJCQlpbnQgb2ZzOwogCi0JCQlpZiAoZmlsZV9vZnMgPCBpbml0aWFsaXplZF9zaXplKQotCQkJCW9mcyA9IGluaXRpYWxpemVkX3NpemUgLSBmaWxlX29mczsKLQkJCWFkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9CSU9fU1JDX0lSUSk7Ci0JCQltZW1zZXQoYWRkciArIGJoX29mZnNldChiaCkgKyBvZnMsIDAsIGJoLT5iX3NpemUgLSBvZnMpOworCQkJb2ZzID0gMDsKKwkJCWlmIChmaWxlX29mcyA8IGluaXRfc2l6ZSkKKwkJCQlvZnMgPSBpbml0X3NpemUgLSBmaWxlX29mczsKKwkJCWthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fQklPX1NSQ19JUlEpOworCQkJbWVtc2V0KGthZGRyICsgYmhfb2Zmc2V0KGJoKSArIG9mcywgMCwKKwkJCQkJYmgtPmJfc2l6ZSAtIG9mcyk7CisJCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9CSU9fU1JDX0lSUSk7CiAJCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKLQkJCWt1bm1hcF9hdG9taWMoYWRkciwgS01fQklPX1NSQ19JUlEpOwogCQl9CiAJfSBlbHNlIHsKIAkJY2xlYXJfYnVmZmVyX3VwdG9kYXRlKGJoKTsKIAkJU2V0UGFnZUVycm9yKHBhZ2UpOwotCQludGZzX2Vycm9yKG5pLT52b2wtPnNiLCAiQnVmZmVyIEkvTyBlcnJvciwgbG9naWNhbCBibG9jayAlbGx1LiIsCi0JCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyliaC0+Yl9ibG9ja25yKTsKKwkJbnRmc19lcnJvcihuaS0+dm9sLT5zYiwgIkJ1ZmZlciBJL08gZXJyb3IsIGxvZ2ljYWwgYmxvY2sgIgorCQkJCSIweCVsbHguIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyliaC0+Yl9ibG9ja25yKTsKIAl9CiAJZmlyc3QgPSBwYWdlX2J1ZmZlcnMocGFnZSk7CiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwpAQCAtMTI0LDcgKzEzNCw3IEBACiAJCWlmIChsaWtlbHkocGFnZV91cHRvZGF0ZSAmJiAhUGFnZUVycm9yKHBhZ2UpKSkKIAkJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAl9IGVsc2UgewotCQljaGFyICphZGRyOworCQl1OCAqa2FkZHI7CiAJCXVuc2lnbmVkIGludCBpLCByZWNzOwogCQl1MzIgcmVjX3NpemU7CiAKQEAgLTEzMiwxMiArMTQyLDEyIEBACiAJCXJlY3MgPSBQQUdFX0NBQ0hFX1NJWkUgLyByZWNfc2l6ZTsKIAkJLyogU2hvdWxkIGhhdmUgYmVlbiB2ZXJpZmllZCBiZWZvcmUgd2UgZ290IGhlcmUuLi4gKi8KIAkJQlVHX09OKCFyZWNzKTsKLQkJYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX0JJT19TUkNfSVJRKTsKKwkJa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9CSU9fU1JDX0lSUSk7CiAJCWZvciAoaSA9IDA7IGkgPCByZWNzOyBpKyspCi0JCQlwb3N0X3JlYWRfbXN0X2ZpeHVwKChOVEZTX1JFQ09SRCopKGFkZHIgKworCQkJcG9zdF9yZWFkX21zdF9maXh1cCgoTlRGU19SRUNPUkQqKShrYWRkciArCiAJCQkJCWkgKiByZWNfc2l6ZSksIHJlY19zaXplKTsKKwkJa3VubWFwX2F0b21pYyhrYWRkciwgS01fQklPX1NSQ19JUlEpOwogCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKLQkJa3VubWFwX2F0b21pYyhhZGRyLCBLTV9CSU9fU1JDX0lSUSk7CiAJCWlmIChsaWtlbHkocGFnZV91cHRvZGF0ZSAmJiAhUGFnZUVycm9yKHBhZ2UpKSkKIAkJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAl9CkBAIC0xNjgsOCArMTc4LDExIEBACiAgKi8KIHN0YXRpYyBpbnQgbnRmc19yZWFkX2Jsb2NrKHN0cnVjdCBwYWdlICpwYWdlKQogeworCWxvZmZfdCBpX3NpemU7CiAJVkNOIHZjbjsKIAlMQ04gbGNuOworCXM2NCBpbml0X3NpemU7CisJc3RydWN0IGlub2RlICp2aTsKIAludGZzX2lub2RlICpuaTsKIAludGZzX3ZvbHVtZSAqdm9sOwogCXJ1bmxpc3RfZWxlbWVudCAqcmw7CkBAIC0xODAsNyArMTkzLDggQEAKIAlpbnQgaSwgbnI7CiAJdW5zaWduZWQgY2hhciBibG9ja3NpemVfYml0czsKIAotCW5pID0gTlRGU19JKHBhZ2UtPm1hcHBpbmctPmhvc3QpOworCXZpID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKKwluaSA9IE5URlNfSSh2aSk7CiAJdm9sID0gbmktPnZvbDsKIAogCS8qICRNRlQvJERBVEEgbXVzdCBoYXZlIGl0cyBjb21wbGV0ZSBydW5saXN0IGluIG1lbW9yeSBhdCBhbGwgdGltZXMuICovCkBAIC0xOTksMTEgKzIxMywyOCBAQAogCWJoID0gaGVhZCA9IHBhZ2VfYnVmZmVycyhwYWdlKTsKIAlCVUdfT04oIWJoKTsKIAorCS8qCisJICogV2UgbWF5IGJlIHJhY2luZyB3aXRoIHRydW5jYXRlLiAgVG8gYXZvaWQgc29tZSBvZiB0aGUgcHJvYmxlbXMgd2UKKwkgKiBub3cgdGFrZSBhIHNuYXBzaG90IG9mIHRoZSB2YXJpb3VzIHNpemVzIGFuZCB1c2UgdGhvc2UgZm9yIHRoZSB3aG9sZQorCSAqIG9mIHRoZSBmdW5jdGlvbi4gIEluIGNhc2Ugb2YgYW4gZXh0ZW5kaW5nIHRydW5jYXRlIGl0IGp1c3QgbWVhbnMgd2UKKwkgKiBtYXkgbGVhdmUgc29tZSBidWZmZXJzIHVubWFwcGVkIHdoaWNoIGFyZSBub3cgYWxsb2NhdGVkLiAgVGhpcyBpcworCSAqIG5vdCBhIHByb2JsZW0gc2luY2UgdGhlc2UgYnVmZmVycyB3aWxsIGp1c3QgZ2V0IG1hcHBlZCB3aGVuIGEgd3JpdGUKKwkgKiBvY2N1cnMuICBJbiBjYXNlIG9mIGEgc2hyaW5raW5nIHRydW5jYXRlLCB3ZSB3aWxsIGRldGVjdCB0aGlzIGxhdGVyCisJICogb24gZHVlIHRvIHRoZSBydW5saXN0IGJlaW5nIGluY29tcGxldGUgYW5kIGlmIHRoZSBwYWdlIGlzIGJlaW5nCisJICogZnVsbHkgdHJ1bmNhdGVkLCB0cnVuY2F0ZSB3aWxsIHRocm93IGl0IGF3YXkgYXMgc29vbiBhcyB3ZSB1bmxvY2sKKwkgKiBpdCBzbyBubyBuZWVkIHRvIHdvcnJ5IHdoYXQgd2UgZG8gd2l0aCBpdC4KKwkgKi8KIAlpYmxvY2sgPSAoczY0KXBhZ2UtPmluZGV4IDw8IChQQUdFX0NBQ0hFX1NISUZUIC0gYmxvY2tzaXplX2JpdHMpOwogCXJlYWRfbG9ja19pcnFzYXZlKCZuaS0+c2l6ZV9sb2NrLCBmbGFncyk7CiAJbGJsb2NrID0gKG5pLT5hbGxvY2F0ZWRfc2l6ZSArIGJsb2Nrc2l6ZSAtIDEpID4+IGJsb2Nrc2l6ZV9iaXRzOwotCXpibG9jayA9IChuaS0+aW5pdGlhbGl6ZWRfc2l6ZSArIGJsb2Nrc2l6ZSAtIDEpID4+IGJsb2Nrc2l6ZV9iaXRzOworCWluaXRfc2l6ZSA9IG5pLT5pbml0aWFsaXplZF9zaXplOworCWlfc2l6ZSA9IGlfc2l6ZV9yZWFkKHZpKTsKIAlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZuaS0+c2l6ZV9sb2NrLCBmbGFncyk7CisJaWYgKHVubGlrZWx5KGluaXRfc2l6ZSA+IGlfc2l6ZSkpIHsKKwkJLyogUmFjZSB3aXRoIHNocmlua2luZyB0cnVuY2F0ZS4gKi8KKwkJaW5pdF9zaXplID0gaV9zaXplOworCX0KKwl6YmxvY2sgPSAoaW5pdF9zaXplICsgYmxvY2tzaXplIC0gMSkgPj4gYmxvY2tzaXplX2JpdHM7CiAKIAkvKiBMb29wIHRocm91Z2ggYWxsIHRoZSBidWZmZXJzIGluIHRoZSBwYWdlLiAqLwogCXJsID0gTlVMTDsKQEAgLTM2Niw2ICszOTcsOCBAQAogICovCiBzdGF0aWMgaW50IG50ZnNfcmVhZHBhZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlKQogeworCWxvZmZfdCBpX3NpemU7CisJc3RydWN0IGlub2RlICp2aTsKIAludGZzX2lub2RlICpuaSwgKmJhc2Vfbmk7CiAJdTggKmthZGRyOwogCW50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHg7CkBAIC0zODQsMTQgKzQxNywxNyBAQAogCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJcmV0dXJuIDA7CiAJfQotCW5pID0gTlRGU19JKHBhZ2UtPm1hcHBpbmctPmhvc3QpOworCXZpID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKKwluaSA9IE5URlNfSSh2aSk7CiAJLyoKIAkgKiBPbmx5ICREQVRBIGF0dHJpYnV0ZXMgY2FuIGJlIGVuY3J5cHRlZCBhbmQgb25seSB1bm5hbWVkICREQVRBCiAJICogYXR0cmlidXRlcyBjYW4gYmUgY29tcHJlc3NlZC4gIEluZGV4IHJvb3QgY2FuIGhhdmUgdGhlIGZsYWdzIHNldCBidXQKIAkgKiB0aGlzIG1lYW5zIHRvIGNyZWF0ZSBjb21wcmVzc2VkL2VuY3J5cHRlZCBmaWxlcywgbm90IHRoYXQgdGhlCi0JICogYXR0cmlidXRlIGlzIGNvbXByZXNzZWQvZW5jcnlwdGVkLgorCSAqIGF0dHJpYnV0ZSBpcyBjb21wcmVzc2VkL2VuY3J5cHRlZC4gIE5vdGUgd2UgbmVlZCB0byBjaGVjayBmb3IKKwkgKiBBVF9JTkRFWF9BTExPQ0FUSU9OIHNpbmNlIHRoaXMgaXMgdGhlIHR5cGUgb2YgYm90aCBkaXJlY3RvcnkgYW5kCisJICogaW5kZXggaW5vZGVzLgogCSAqLwotCWlmIChuaS0+dHlwZSAhPSBBVF9JTkRFWF9ST09UKSB7CisJaWYgKG5pLT50eXBlICE9IEFUX0lOREVYX0FMTE9DQVRJT04pIHsKIAkJLyogSWYgYXR0cmlidXRlIGlzIGVuY3J5cHRlZCwgZGVueSBhY2Nlc3MsIGp1c3QgbGlrZSBOVDQuICovCiAJCWlmIChOSW5vRW5jcnlwdGVkKG5pKSkgewogCQkJQlVHX09OKG5pLT50eXBlICE9IEFUX0RBVEEpOwpAQCAtNDU2LDcgKzQ5MiwxMiBAQAogCXJlYWRfbG9ja19pcnFzYXZlKCZuaS0+c2l6ZV9sb2NrLCBmbGFncyk7CiAJaWYgKHVubGlrZWx5KGF0dHJfbGVuID4gbmktPmluaXRpYWxpemVkX3NpemUpKQogCQlhdHRyX2xlbiA9IG5pLT5pbml0aWFsaXplZF9zaXplOworCWlfc2l6ZSA9IGlfc2l6ZV9yZWFkKHZpKTsKIAlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZuaS0+c2l6ZV9sb2NrLCBmbGFncyk7CisJaWYgKHVubGlrZWx5KGF0dHJfbGVuID4gaV9zaXplKSkgeworCQkvKiBSYWNlIHdpdGggc2hyaW5raW5nIHRydW5jYXRlLiAqLworCQlhdHRyX2xlbiA9IGlfc2l6ZTsKKwl9CiAJa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CiAJLyogQ29weSB0aGUgZGF0YSB0byB0aGUgcGFnZS4gKi8KIAltZW1jcHkoa2FkZHIsICh1OCopY3R4LT5hdHRyICsKQEAgLTEzNDEsOSArMTM4MiwxMSBAQAogCSAqIE9ubHkgJERBVEEgYXR0cmlidXRlcyBjYW4gYmUgZW5jcnlwdGVkIGFuZCBvbmx5IHVubmFtZWQgJERBVEEKIAkgKiBhdHRyaWJ1dGVzIGNhbiBiZSBjb21wcmVzc2VkLiAgSW5kZXggcm9vdCBjYW4gaGF2ZSB0aGUgZmxhZ3Mgc2V0IGJ1dAogCSAqIHRoaXMgbWVhbnMgdG8gY3JlYXRlIGNvbXByZXNzZWQvZW5jcnlwdGVkIGZpbGVzLCBub3QgdGhhdCB0aGUKLQkgKiBhdHRyaWJ1dGUgaXMgY29tcHJlc3NlZC9lbmNyeXB0ZWQuCisJICogYXR0cmlidXRlIGlzIGNvbXByZXNzZWQvZW5jcnlwdGVkLiAgTm90ZSB3ZSBuZWVkIHRvIGNoZWNrIGZvcgorCSAqIEFUX0lOREVYX0FMTE9DQVRJT04gc2luY2UgdGhpcyBpcyB0aGUgdHlwZSBvZiBib3RoIGRpcmVjdG9yeSBhbmQKKwkgKiBpbmRleCBpbm9kZXMuCiAJICovCi0JaWYgKG5pLT50eXBlICE9IEFUX0lOREVYX1JPT1QpIHsKKwlpZiAobmktPnR5cGUgIT0gQVRfSU5ERVhfQUxMT0NBVElPTikgewogCQkvKiBJZiBmaWxlIGlzIGVuY3J5cHRlZCwgZGVueSBhY2Nlc3MsIGp1c3QgbGlrZSBOVDQuICovCiAJCWlmIChOSW5vRW5jcnlwdGVkKG5pKSkgewogCQkJdW5sb2NrX3BhZ2UocGFnZSk7CkBAIC0xMzc5LDggKzE0MjIsOCBAQAogCQkJdW5zaWduZWQgaW50IG9mcyA9IGlfc2l6ZSAmIH5QQUdFX0NBQ0hFX01BU0s7CiAJCQlrYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKIAkJCW1lbXNldChrYWRkciArIG9mcywgMCwgUEFHRV9DQUNIRV9TSVpFIC0gb2ZzKTsKLQkJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwogCQkJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOworCQkJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CiAJCX0KIAkJLyogSGFuZGxlIG1zdCBwcm90ZWN0ZWQgYXR0cmlidXRlcy4gKi8KIAkJaWYgKE5Jbm9Nc3RQcm90ZWN0ZWQobmkpKQpAQCAtMTQ0MywzNCArMTQ4NiwzMyBAQAogCUJVR19PTihQYWdlV3JpdGViYWNrKHBhZ2UpKTsKIAlzZXRfcGFnZV93cml0ZWJhY2socGFnZSk7CiAJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JLyoKLQkgKiBIZXJlLCB3ZSBkbyBub3QgbmVlZCB0byB6ZXJvIHRoZSBvdXQgb2YgYm91bmRzIGFyZWEgZXZlcnl0aW1lCi0JICogYmVjYXVzZSB0aGUgYmVsb3cgbWVtY3B5KCkgYWxyZWFkeSB0YWtlcyBjYXJlIG9mIHRoZQotCSAqIG1tYXAtYXQtZW5kLW9mLWZpbGUgcmVxdWlyZW1lbnRzLiAgSWYgdGhlIGZpbGUgaXMgY29udmVydGVkIHRvIGEKLQkgKiBub24tcmVzaWRlbnQgb25lLCB0aGVuIHRoZSBjb2RlIHBhdGggdXNlIGlzIHN3aXRjaGVkIHRvIHRoZQotCSAqIG5vbi1yZXNpZGVudCBvbmUgd2hlcmUgdGhlIHplcm9pbmcgaGFwcGVucyBvbiBlYWNoIG50ZnNfd3JpdGVwYWdlKCkKLQkgKiBpbnZvY2F0aW9uLgotCSAqLwogCWF0dHJfbGVuID0gbGUzMl90b19jcHUoY3R4LT5hdHRyLT5kYXRhLnJlc2lkZW50LnZhbHVlX2xlbmd0aCk7CiAJaV9zaXplID0gaV9zaXplX3JlYWQodmkpOwogCWlmICh1bmxpa2VseShhdHRyX2xlbiA+IGlfc2l6ZSkpIHsKKwkJLyogUmFjZSB3aXRoIHNocmlua2luZyB0cnVuY2F0ZSBvciBhIGZhaWxlZCB0cnVuY2F0ZS4gKi8KIAkJYXR0cl9sZW4gPSBpX3NpemU7Ci0JCWN0eC0+YXR0ci0+ZGF0YS5yZXNpZGVudC52YWx1ZV9sZW5ndGggPSBjcHVfdG9fbGUzMihhdHRyX2xlbik7CisJCS8qCisJCSAqIElmIHRoZSB0cnVuY2F0ZSBmYWlsZWQsIGZpeCBpdCB1cCBub3cuICBJZiBhIGNvbmN1cnJlbnQKKwkJICogdHJ1bmNhdGUsIHdlIGRvIGl0cyBqb2IsIHNvIGl0IGRvZXMgbm90IGhhdmUgdG8gZG8gYW55dGhpbmcuCisJCSAqLworCQllcnIgPSBudGZzX3Jlc2lkZW50X2F0dHJfdmFsdWVfcmVzaXplKGN0eC0+bXJlYywgY3R4LT5hdHRyLAorCQkJCWF0dHJfbGVuKTsKKwkJLyogU2hyaW5raW5nIGNhbm5vdCBmYWlsLiAqLworCQlCVUdfT04oZXJyKTsKIAl9CiAJa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CiAJLyogQ29weSB0aGUgZGF0YSBmcm9tIHRoZSBwYWdlIHRvIHRoZSBtZnQgcmVjb3JkLiAqLwogCW1lbWNweSgodTgqKWN0eC0+YXR0ciArCiAJCQlsZTE2X3RvX2NwdShjdHgtPmF0dHItPmRhdGEucmVzaWRlbnQudmFsdWVfb2Zmc2V0KSwKIAkJCWthZGRyLCBhdHRyX2xlbik7Ci0JZmx1c2hfZGNhY2hlX21mdF9yZWNvcmRfcGFnZShjdHgtPm50ZnNfaW5vKTsKIAkvKiBaZXJvIG91dCBvZiBib3VuZHMgYXJlYSBpbiB0aGUgcGFnZSBjYWNoZSBwYWdlLiAqLwogCW1lbXNldChrYWRkciArIGF0dHJfbGVuLCAwLCBQQUdFX0NBQ0hFX1NJWkUgLSBhdHRyX2xlbik7Ci0JZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CiAJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOwotCisJZmx1c2hfZGNhY2hlX21mdF9yZWNvcmRfcGFnZShjdHgtPm50ZnNfaW5vKTsKKwlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKKwkvKiBXZSBhcmUgZG9uZSB3aXRoIHRoZSBwYWdlLiAqLwogCWVuZF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKLQotCS8qIE1hcmsgdGhlIG1mdCByZWNvcmQgZGlydHksIHNvIGl0IGdldHMgd3JpdHRlbiBiYWNrLiAqLworCS8qIEZpbmFsbHksIG1hcmsgdGhlIG1mdCByZWNvcmQgZGlydHksIHNvIGl0IGdldHMgd3JpdHRlbiBiYWNrLiAqLwogCW1hcmtfbWZ0X3JlY29yZF9kaXJ0eShjdHgtPm50ZnNfaW5vKTsKIAludGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTsKIAl1bm1hcF9tZnRfcmVjb3JkKGJhc2VfbmkpOwpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9iaXRtYXAuYyBiL2ZzL250ZnMvYml0bWFwLmMKaW5kZXggMTJjZjJlMy4uN2ExOTBjZCAxMDA2NDQKLS0tIGEvZnMvbnRmcy9iaXRtYXAuYworKysgYi9mcy9udGZzL2JpdG1hcC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGJpdG1hcC5jIC0gTlRGUyBrZXJuZWwgYml0bWFwIGhhbmRsaW5nLiAgUGFydCBvZiB0aGUgTGludXgtTlRGUyBwcm9qZWN0LgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNCBBbnRvbiBBbHRhcGFybWFrb3YKKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IEFudG9uIEFsdGFwYXJtYWtvdgogICoKICAqIFRoaXMgcHJvZ3JhbS9pbmNsdWRlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKQEAgLTkwLDcgKzkwLDggQEAKIAkvKiBJZiB0aGUgZmlyc3QgYnl0ZSBpcyBwYXJ0aWFsLCBtb2RpZnkgdGhlIGFwcHJvcHJpYXRlIGJpdHMgaW4gaXQuICovCiAJaWYgKGJpdCkgewogCQl1OCAqYnl0ZSA9IGthZGRyICsgcG9zOwotCQl3aGlsZSAoKGJpdCAmIDcpICYmIGNudC0tKSB7CisJCXdoaWxlICgoYml0ICYgNykgJiYgY250KSB7CisJCQljbnQtLTsKIAkJCWlmICh2YWx1ZSkKIAkJCQkqYnl0ZSB8PSAxIDw8IGJpdCsrOwogCQkJZWxzZQpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9pbm9kZS5jIGIvZnMvbnRmcy9pbm9kZS5jCmluZGV4IGRjNGJiZTMuLjdlYzA0NTEgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvaW5vZGUuYworKysgYi9mcy9udGZzL2lub2RlLmMKQEAgLTExNjYsNiArMTE2Niw4IEBACiAgKgogICogUmV0dXJuIDAgb24gc3VjY2VzcyBhbmQgLWVycm5vIG9uIGVycm9yLiAgSW4gdGhlIGVycm9yIGNhc2UsIHRoZSBpbm9kZSB3aWxsCiAgKiBoYXZlIGhhZCBtYWtlX2JhZF9pbm9kZSgpIGV4ZWN1dGVkIG9uIGl0LgorICoKKyAqIE5vdGUgdGhpcyBjYW5ub3QgYmUgY2FsbGVkIGZvciBBVF9JTkRFWF9BTExPQ0FUSU9OLgogICovCiBzdGF0aWMgaW50IG50ZnNfcmVhZF9sb2NrZWRfYXR0cl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmJhc2VfdmksIHN0cnVjdCBpbm9kZSAqdmkpCiB7CkBAIC0xMjQyLDggKzEyNDQsOCBAQAogCQkJfQogCQl9CiAJCS8qCi0JCSAqIFRoZSBlbmNyeXB0aW9uIGZsYWcgc2V0IGluIGFuIGluZGV4IHJvb3QganVzdCBtZWFucyB0bwotCQkgKiBjb21wcmVzcyBhbGwgZmlsZXMuCisJCSAqIFRoZSBjb21wcmVzc2VkL3NwYXJzZSBmbGFnIHNldCBpbiBhbiBpbmRleCByb290IGp1c3QgbWVhbnMKKwkJICogdG8gY29tcHJlc3MgYWxsIGZpbGVzLgogCQkgKi8KIAkJaWYgKE5Jbm9Nc3RQcm90ZWN0ZWQobmkpICYmIG5pLT50eXBlICE9IEFUX0lOREVYX1JPT1QpIHsKIAkJCW50ZnNfZXJyb3IodmktPmlfc2IsICJGb3VuZCBtc3QgcHJvdGVjdGVkIGF0dHJpYnV0ZSAiCkBAIC0xMzE5LDggKzEzMjEsNyBAQAogCQkJCQkidGhlIG1hcHBpbmcgcGFpcnMgYXJyYXkuIik7CiAJCQlnb3RvIHVubV9lcnJfb3V0OwogCQl9Ci0JCWlmICgoTklub0NvbXByZXNzZWQobmkpIHx8IE5Jbm9TcGFyc2UobmkpKSAmJgotCQkJCW5pLT50eXBlICE9IEFUX0lOREVYX1JPT1QpIHsKKwkJaWYgKE5Jbm9Db21wcmVzc2VkKG5pKSB8fCBOSW5vU3BhcnNlKG5pKSkgewogCQkJaWYgKGEtPmRhdGEubm9uX3Jlc2lkZW50LmNvbXByZXNzaW9uX3VuaXQgIT0gNCkgewogCQkJCW50ZnNfZXJyb3IodmktPmlfc2IsICJGb3VuZCBub25zdGFuZGFyZCAiCiAJCQkJCQkiY29tcHJlc3Npb24gdW5pdCAoJXUgaW5zdGVhZCAiCmRpZmYgLS1naXQgYS9mcy9udGZzL2xheW91dC5oIGIvZnMvbnRmcy9sYXlvdXQuaAppbmRleCA2MDlhZDE3Li41YzI0OGQ0IDEwMDY0NAotLS0gYS9mcy9udGZzL2xheW91dC5oCisrKyBiL2ZzL250ZnMvbGF5b3V0LmgKQEAgLTEyMyw3ICsxMjMsNyBAQAogCW1hZ2ljX1JDUkQgPSBjb25zdF9jcHVfdG9fbGUzMigweDQ0NTI0MzUyKSwgLyogTG9nIHJlY29yZCBwYWdlLiAqLwogCiAJLyogRm91bmQgaW4gJExvZ0ZpbGUvJERBVEEuICAoTWF5IGJlIGZvdW5kIGluICRNRlQvJERBVEEsIGFsc28/KSAqLwotCW1hZ2ljX0NIS0QgPSBjb25zdF9jcHVfdG9fbGUzMigweDQyNGI0ODQzKSwgLyogTW9kaWZpZWQgYnkgY2hrZHNrLiAqLworCW1hZ2ljX0NIS0QgPSBjb25zdF9jcHVfdG9fbGUzMigweDQ0NGI0ODQzKSwgLyogTW9kaWZpZWQgYnkgY2hrZHNrLiAqLwogCiAJLyogRm91bmQgaW4gYWxsIG50ZnMgcmVjb3JkIGNvbnRhaW5pbmcgcmVjb3Jkcy4gKi8KIAltYWdpY19CQUFEID0gY29uc3RfY3B1X3RvX2xlMzIoMHg0NDQxNDE0MiksIC8qIEZhaWxlZCBtdWx0aSBzZWN0b3IKQEAgLTMwOCwxMCArMzA4LDggQEAKICAqIFRoZSBfTEUgdmVyc2lvbnMgYXJlIHRvIGJlIGFwcGxpZWQgb24gbGl0dGxlIGVuZGlhbiBNRlRfUkVGcy4KICAqIE5vdGU6IFRoZSBfTEUgdmVyc2lvbnMgd2lsbCByZXR1cm4gYSBDUFUgZW5kaWFuIGZvcm1hdHRlZCB2YWx1ZSEKICAqLwotdHlwZWRlZiBlbnVtIHsKLQlNRlRfUkVGX01BU0tfQ1BVCT0gMHgwMDAwZmZmZmZmZmZmZmZmVUxMLAotCU1GVF9SRUZfTUFTS19MRQkJPSBjb25zdF9jcHVfdG9fbGU2NCgweDAwMDBmZmZmZmZmZmZmZmZVTEwpLAotfSBNRlRfUkVGX0NPTlNUUzsKKyNkZWZpbmUgTUZUX1JFRl9NQVNLX0NQVSAweDAwMDBmZmZmZmZmZmZmZmZVTEwKKyNkZWZpbmUgTUZUX1JFRl9NQVNLX0xFIGNvbnN0X2NwdV90b19sZTY0KE1GVF9SRUZfTUFTS19DUFUpCiAKIHR5cGVkZWYgdTY0IE1GVF9SRUY7CiB0eXBlZGVmIGxlNjQgbGVNRlRfUkVGOwpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9sY25hbGxvYy5jIGIvZnMvbnRmcy9sY25hbGxvYy5jCmluZGV4IDdiNTkzNDIuLjVhZjNiZjAgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvbGNuYWxsb2MuYworKysgYi9mcy9udGZzL2xjbmFsbG9jLmMKQEAgLTc3OSwxNCArNzc5LDEzIEBACiAKIC8qKgogICogX19udGZzX2NsdXN0ZXJfZnJlZSAtIGZyZWUgY2x1c3RlcnMgb24gYW4gbnRmcyB2b2x1bWUKLSAqIEB2aToJCXZmcyBpbm9kZSB3aG9zZSBydW5saXN0IGRlc2NyaWJlcyB0aGUgY2x1c3RlcnMgdG8gZnJlZQotICogQHN0YXJ0X3ZjbjoJdmNuIGluIHRoZSBydW5saXN0IG9mIEB2aSBhdCB3aGljaCB0byBzdGFydCBmcmVlaW5nIGNsdXN0ZXJzCisgKiBAbmk6CQludGZzIGlub2RlIHdob3NlIHJ1bmxpc3QgZGVzY3JpYmVzIHRoZSBjbHVzdGVycyB0byBmcmVlCisgKiBAc3RhcnRfdmNuOgl2Y24gaW4gdGhlIHJ1bmxpc3Qgb2YgQG5pIGF0IHdoaWNoIHRvIHN0YXJ0IGZyZWVpbmcgY2x1c3RlcnMKICAqIEBjb3VudDoJbnVtYmVyIG9mIGNsdXN0ZXJzIHRvIGZyZWUgb3IgLTEgZm9yIGFsbCBjbHVzdGVycwotICogQHdyaXRlX2xvY2tlZDoJdHJ1ZSBpZiB0aGUgcnVubGlzdCBpcyBsb2NrZWQgZm9yIHdyaXRpbmcKICAqIEBpc19yb2xsYmFjazoJdHJ1ZSBpZiB0aGlzIGlzIGEgcm9sbGJhY2sgb3BlcmF0aW9uCiAgKgogICogRnJlZSBAY291bnQgY2x1c3RlcnMgc3RhcnRpbmcgYXQgdGhlIGNsdXN0ZXIgQHN0YXJ0X3ZjbiBpbiB0aGUgcnVubGlzdAotICogZGVzY3JpYmVkIGJ5IHRoZSB2ZnMgaW5vZGUgQHZpLgorICogZGVzY3JpYmVkIGJ5IHRoZSB2ZnMgaW5vZGUgQG5pLgogICoKICAqIElmIEBjb3VudCBpcyAtMSwgYWxsIGNsdXN0ZXJzIGZyb20gQHN0YXJ0X3ZjbiB0byB0aGUgZW5kIG9mIHRoZSBydW5saXN0IGFyZQogICogZGVhbGxvY2F0ZWQuICBUaHVzLCB0byBjb21wbGV0ZWx5IGZyZWUgYWxsIGNsdXN0ZXJzIGluIGEgcnVubGlzdCwgdXNlCkBAIC04MDEsMzEgKzgwMCwyOCBAQAogICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZGVhbGxvY2F0ZWQgY2x1c3RlcnMgKG5vdCBjb3VudGluZyBzcGFyc2Ugb25lcykgb24KICAqIHN1Y2Nlc3MgYW5kIC1lcnJubyBvbiBlcnJvci4KICAqCi0gKiBMb2NraW5nOiAtIFRoZSBydW5saXN0IGRlc2NyaWJlZCBieSBAdmkgbXVzdCBiZSBsb2NrZWQgb24gZW50cnkgYW5kIGlzCi0gKgkgICAgICBsb2NrZWQgb24gcmV0dXJuLiAgTm90ZSBpZiB0aGUgcnVubGlzdCBpcyBsb2NrZWQgZm9yIHJlYWRpbmcgdGhlCi0gKgkgICAgICBsb2NrIG1heSBiZSBkcm9wcGVkIGFuZCByZWFjcXVpcmVkLiAgTm90ZSB0aGUgcnVubGlzdCBtYXkgYmUKLSAqCSAgICAgIG1vZGlmaWVkIHdoZW4gbmVlZGVkIHJ1bmxpc3QgZnJhZ21lbnRzIG5lZWQgdG8gYmUgbWFwcGVkLgorICogTG9ja2luZzogLSBUaGUgcnVubGlzdCBkZXNjcmliZWQgYnkgQG5pIG11c3QgYmUgbG9ja2VkIGZvciB3cml0aW5nIG9uIGVudHJ5CisgKgkgICAgICBhbmQgaXMgbG9ja2VkIG9uIHJldHVybi4gIE5vdGUgdGhlIHJ1bmxpc3QgbWF5IGJlIG1vZGlmaWVkIHdoZW4KKyAqCSAgICAgIG5lZWRlZCBydW5saXN0IGZyYWdtZW50cyBuZWVkIHRvIGJlIG1hcHBlZC4KICAqCSAgICAtIFRoZSB2b2x1bWUgbGNuIGJpdG1hcCBtdXN0IGJlIHVubG9ja2VkIG9uIGVudHJ5IGFuZCBpcyB1bmxvY2tlZAogICoJICAgICAgb24gcmV0dXJuLgogICoJICAgIC0gVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgdm9sdW1lIGxjbiBiaXRtYXAgbG9jayBmb3Igd3JpdGluZyBhbmQKICAqCSAgICAgIG1vZGlmaWVzIHRoZSBiaXRtYXAgY29udGVudHMuCiAgKi8KLXM2NCBfX250ZnNfY2x1c3Rlcl9mcmVlKHN0cnVjdCBpbm9kZSAqdmksIGNvbnN0IFZDTiBzdGFydF92Y24sIHM2NCBjb3VudCwKLQkJY29uc3QgQk9PTCB3cml0ZV9sb2NrZWQsIGNvbnN0IEJPT0wgaXNfcm9sbGJhY2spCitzNjQgX19udGZzX2NsdXN0ZXJfZnJlZShudGZzX2lub2RlICpuaSwgY29uc3QgVkNOIHN0YXJ0X3ZjbiwgczY0IGNvdW50LAorCQljb25zdCBCT09MIGlzX3JvbGxiYWNrKQogewogCXM2NCBkZWx0YSwgdG9fZnJlZSwgdG90YWxfZnJlZWQsIHJlYWxfZnJlZWQ7Ci0JbnRmc19pbm9kZSAqbmk7CiAJbnRmc192b2x1bWUgKnZvbDsKIAlzdHJ1Y3QgaW5vZGUgKmxjbmJtcF92aTsKIAlydW5saXN0X2VsZW1lbnQgKnJsOwogCWludCBlcnI7CiAKLQlCVUdfT04oIXZpKTsKKwlCVUdfT04oIW5pKTsKIAludGZzX2RlYnVnKCJFbnRlcmluZyBmb3IgaV9pbm8gMHglbHgsIHN0YXJ0X3ZjbiAweCVsbHgsIGNvdW50ICIKLQkJCSIweCVsbHguJXMiLCB2aS0+aV9pbm8sICh1bnNpZ25lZCBsb25nIGxvbmcpc3RhcnRfdmNuLAorCQkJIjB4JWxseC4lcyIsIG5pLT5tZnRfbm8sICh1bnNpZ25lZCBsb25nIGxvbmcpc3RhcnRfdmNuLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljb3VudCwKIAkJCWlzX3JvbGxiYWNrID8gIiAocm9sbGJhY2spIiA6ICIiKTsKLQluaSA9IE5URlNfSSh2aSk7CiAJdm9sID0gbmktPnZvbDsKIAlsY25ibXBfdmkgPSB2b2wtPmxjbmJtcF9pbm87CiAJQlVHX09OKCFsY25ibXBfdmkpOwpAQCAtODQzLDcgKzgzOSw3IEBACiAKIAl0b3RhbF9mcmVlZCA9IHJlYWxfZnJlZWQgPSAwOwogCi0JcmwgPSBudGZzX2F0dHJfZmluZF92Y25fbm9sb2NrKG5pLCBzdGFydF92Y24sIHdyaXRlX2xvY2tlZCk7CisJcmwgPSBudGZzX2F0dHJfZmluZF92Y25fbm9sb2NrKG5pLCBzdGFydF92Y24sIFRSVUUpOwogCWlmIChJU19FUlIocmwpKSB7CiAJCWlmICghaXNfcm9sbGJhY2spCiAJCQludGZzX2Vycm9yKHZvbC0+c2IsICJGYWlsZWQgdG8gZmluZCBmaXJzdCBydW5saXN0ICIKQEAgLTg5Nyw3ICs4OTMsNyBAQAogCiAJCQkvKiBBdHRlbXB0IHRvIG1hcCBydW5saXN0LiAqLwogCQkJdmNuID0gcmwtPnZjbjsKLQkJCXJsID0gbnRmc19hdHRyX2ZpbmRfdmNuX25vbG9jayhuaSwgdmNuLCB3cml0ZV9sb2NrZWQpOworCQkJcmwgPSBudGZzX2F0dHJfZmluZF92Y25fbm9sb2NrKG5pLCB2Y24sIFRSVUUpOwogCQkJaWYgKElTX0VSUihybCkpIHsKIAkJCQllcnIgPSBQVFJfRVJSKHJsKTsKIAkJCQlpZiAoIWlzX3JvbGxiYWNrKQpAQCAtOTY1LDggKzk2MSw3IEBACiAJICogSWYgcm9sbGJhY2sgZmFpbHMsIHNldCB0aGUgdm9sdW1lIGVycm9ycyBmbGFnLCBlbWl0IGFuIGVycm9yCiAJICogbWVzc2FnZSwgYW5kIHJldHVybiB0aGUgZXJyb3IgY29kZS4KIAkgKi8KLQlkZWx0YSA9IF9fbnRmc19jbHVzdGVyX2ZyZWUodmksIHN0YXJ0X3ZjbiwgdG90YWxfZnJlZWQsIHdyaXRlX2xvY2tlZCwKLQkJCVRSVUUpOworCWRlbHRhID0gX19udGZzX2NsdXN0ZXJfZnJlZShuaSwgc3RhcnRfdmNuLCB0b3RhbF9mcmVlZCwgVFJVRSk7CiAJaWYgKGRlbHRhIDwgMCkgewogCQludGZzX2Vycm9yKHZvbC0+c2IsICJGYWlsZWQgdG8gcm9sbGJhY2sgKGVycm9yICVpKS4gIExlYXZpbmcgIgogCQkJCSJpbmNvbnNpc3RlbnQgbWV0YWRhdGEhICBVbm1vdW50IGFuZCBydW4gIgpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9sY25hbGxvYy5oIGIvZnMvbnRmcy9sY25hbGxvYy5oCmluZGV4IGU0ZDdmYjkuLmE2YTg4MjcgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvbGNuYWxsb2MuaAorKysgYi9mcy9udGZzL2xjbmFsbG9jLmgKQEAgLTIsNyArMiw3IEBACiAgKiBsY25hbGxvYy5oIC0gRXhwb3J0cyBmb3IgTlRGUyBrZXJuZWwgY2x1c3RlciAoZGUpYWxsb2NhdGlvbi4gIFBhcnQgb2YgdGhlCiAgKgkJTGludXgtTlRGUyBwcm9qZWN0LgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNCBBbnRvbiBBbHRhcGFybWFrb3YKKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IEFudG9uIEFsdGFwYXJtYWtvdgogICoKICAqIFRoaXMgcHJvZ3JhbS9pbmNsdWRlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogCiAjaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlICJpbm9kZS5oIgogI2luY2x1ZGUgInJ1bmxpc3QuaCIKICNpbmNsdWRlICJ2b2x1bWUuaCIKIApAQCAtNDIsMTggKzQzLDE3IEBACiAJCWNvbnN0IFZDTiBzdGFydF92Y24sIGNvbnN0IHM2NCBjb3VudCwgY29uc3QgTENOIHN0YXJ0X2xjbiwKIAkJY29uc3QgTlRGU19DTFVTVEVSX0FMTE9DQVRJT05fWk9ORVMgem9uZSk7CiAKLWV4dGVybiBzNjQgX19udGZzX2NsdXN0ZXJfZnJlZShzdHJ1Y3QgaW5vZGUgKnZpLCBjb25zdCBWQ04gc3RhcnRfdmNuLAotCQlzNjQgY291bnQsIGNvbnN0IEJPT0wgd3JpdGVfbG9ja2VkLCBjb25zdCBCT09MIGlzX3JvbGxiYWNrKTsKK2V4dGVybiBzNjQgX19udGZzX2NsdXN0ZXJfZnJlZShudGZzX2lub2RlICpuaSwgY29uc3QgVkNOIHN0YXJ0X3ZjbiwKKwkJczY0IGNvdW50LCBjb25zdCBCT09MIGlzX3JvbGxiYWNrKTsKIAogLyoqCiAgKiBudGZzX2NsdXN0ZXJfZnJlZSAtIGZyZWUgY2x1c3RlcnMgb24gYW4gbnRmcyB2b2x1bWUKLSAqIEB2aToJCXZmcyBpbm9kZSB3aG9zZSBydW5saXN0IGRlc2NyaWJlcyB0aGUgY2x1c3RlcnMgdG8gZnJlZQotICogQHN0YXJ0X3ZjbjoJdmNuIGluIHRoZSBydW5saXN0IG9mIEB2aSBhdCB3aGljaCB0byBzdGFydCBmcmVlaW5nIGNsdXN0ZXJzCisgKiBAbmk6CQludGZzIGlub2RlIHdob3NlIHJ1bmxpc3QgZGVzY3JpYmVzIHRoZSBjbHVzdGVycyB0byBmcmVlCisgKiBAc3RhcnRfdmNuOgl2Y24gaW4gdGhlIHJ1bmxpc3Qgb2YgQG5pIGF0IHdoaWNoIHRvIHN0YXJ0IGZyZWVpbmcgY2x1c3RlcnMKICAqIEBjb3VudDoJbnVtYmVyIG9mIGNsdXN0ZXJzIHRvIGZyZWUgb3IgLTEgZm9yIGFsbCBjbHVzdGVycwotICogQHdyaXRlX2xvY2tlZDoJdHJ1ZSBpZiB0aGUgcnVubGlzdCBpcyBsb2NrZWQgZm9yIHdyaXRpbmcKICAqCiAgKiBGcmVlIEBjb3VudCBjbHVzdGVycyBzdGFydGluZyBhdCB0aGUgY2x1c3RlciBAc3RhcnRfdmNuIGluIHRoZSBydW5saXN0Ci0gKiBkZXNjcmliZWQgYnkgdGhlIHZmcyBpbm9kZSBAdmkuCisgKiBkZXNjcmliZWQgYnkgdGhlIG50ZnMgaW5vZGUgQG5pLgogICoKICAqIElmIEBjb3VudCBpcyAtMSwgYWxsIGNsdXN0ZXJzIGZyb20gQHN0YXJ0X3ZjbiB0byB0aGUgZW5kIG9mIHRoZSBydW5saXN0IGFyZQogICogZGVhbGxvY2F0ZWQuICBUaHVzLCB0byBjb21wbGV0ZWx5IGZyZWUgYWxsIGNsdXN0ZXJzIGluIGEgcnVubGlzdCwgdXNlCkBAIC02NSwxOSArNjUsMTggQEAKICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGRlYWxsb2NhdGVkIGNsdXN0ZXJzIChub3QgY291bnRpbmcgc3BhcnNlIG9uZXMpIG9uCiAgKiBzdWNjZXNzIGFuZCAtZXJybm8gb24gZXJyb3IuCiAgKgotICogTG9ja2luZzogLSBUaGUgcnVubGlzdCBkZXNjcmliZWQgYnkgQHZpIG11c3QgYmUgbG9ja2VkIG9uIGVudHJ5IGFuZCBpcwotICoJICAgICAgbG9ja2VkIG9uIHJldHVybi4gIE5vdGUgaWYgdGhlIHJ1bmxpc3QgaXMgbG9ja2VkIGZvciByZWFkaW5nIHRoZQotICoJICAgICAgbG9jayBtYXkgYmUgZHJvcHBlZCBhbmQgcmVhY3F1aXJlZC4gIE5vdGUgdGhlIHJ1bmxpc3QgbWF5IGJlCi0gKgkgICAgICBtb2RpZmllZCB3aGVuIG5lZWRlZCBydW5saXN0IGZyYWdtZW50cyBuZWVkIHRvIGJlIG1hcHBlZC4KKyAqIExvY2tpbmc6IC0gVGhlIHJ1bmxpc3QgZGVzY3JpYmVkIGJ5IEBuaSBtdXN0IGJlIGxvY2tlZCBmb3Igd3JpdGluZyBvbiBlbnRyeQorICoJICAgICAgYW5kIGlzIGxvY2tlZCBvbiByZXR1cm4uICBOb3RlIHRoZSBydW5saXN0IG1heSBiZSBtb2RpZmllZCB3aGVuCisgKgkgICAgICBuZWVkZWQgcnVubGlzdCBmcmFnbWVudHMgbmVlZCB0byBiZSBtYXBwZWQuCiAgKgkgICAgLSBUaGUgdm9sdW1lIGxjbiBiaXRtYXAgbXVzdCBiZSB1bmxvY2tlZCBvbiBlbnRyeSBhbmQgaXMgdW5sb2NrZWQKICAqCSAgICAgIG9uIHJldHVybi4KICAqCSAgICAtIFRoaXMgZnVuY3Rpb24gdGFrZXMgdGhlIHZvbHVtZSBsY24gYml0bWFwIGxvY2sgZm9yIHdyaXRpbmcgYW5kCiAgKgkgICAgICBtb2RpZmllcyB0aGUgYml0bWFwIGNvbnRlbnRzLgogICovCi1zdGF0aWMgaW5saW5lIHM2NCBudGZzX2NsdXN0ZXJfZnJlZShzdHJ1Y3QgaW5vZGUgKnZpLCBjb25zdCBWQ04gc3RhcnRfdmNuLAotCQlzNjQgY291bnQsIGNvbnN0IEJPT0wgd3JpdGVfbG9ja2VkKQorc3RhdGljIGlubGluZSBzNjQgbnRmc19jbHVzdGVyX2ZyZWUobnRmc19pbm9kZSAqbmksIGNvbnN0IFZDTiBzdGFydF92Y24sCisJCXM2NCBjb3VudCkKIHsKLQlyZXR1cm4gX19udGZzX2NsdXN0ZXJfZnJlZSh2aSwgc3RhcnRfdmNuLCBjb3VudCwgd3JpdGVfbG9ja2VkLCBGQUxTRSk7CisJcmV0dXJuIF9fbnRmc19jbHVzdGVyX2ZyZWUobmksIHN0YXJ0X3ZjbiwgY291bnQsIEZBTFNFKTsKIH0KIAogZXh0ZXJuIGludCBudGZzX2NsdXN0ZXJfZnJlZV9mcm9tX3JsX25vbG9jayhudGZzX3ZvbHVtZSAqdm9sLApkaWZmIC0tZ2l0IGEvZnMvbnRmcy9sb2dmaWxlLmMgYi9mcy9udGZzL2xvZ2ZpbGUuYwppbmRleCAwMTczZTk1Li4wZmQ3MDI5IDEwMDY0NAotLS0gYS9mcy9udGZzL2xvZ2ZpbGUuYworKysgYi9mcy9udGZzL2xvZ2ZpbGUuYwpAQCAtNTEsNyArNTEsOCBAQAogCQlSRVNUQVJUX1BBR0VfSEVBREVSICpycCwgczY0IHBvcykKIHsKIAl1MzIgbG9nZmlsZV9zeXN0ZW1fcGFnZV9zaXplLCBsb2dmaWxlX2xvZ19wYWdlX3NpemU7Ci0JdTE2IHVzYV9jb3VudCwgdXNhX29mcywgdXNhX2VuZCwgcmFfb2ZzOworCXUxNiByYV9vZnMsIHVzYV9jb3VudCwgdXNhX29mcywgdXNhX2VuZCA9IDA7CisJQk9PTCBoYXZlX3VzYSA9IFRSVUU7CiAKIAludGZzX2RlYnVnKCJFbnRlcmluZy4iKTsKIAkvKgpAQCAtODYsNiArODcsMTQgQEAKIAkJCQkoaW50KXNsZTE2X3RvX2NwdShycC0+bWlub3JfdmVyKSk7CiAJCXJldHVybiBGQUxTRTsKIAl9CisJLyoKKwkgKiBJZiBjaGtkc2sgaGFzIGJlZW4gcnVuIHRoZSByZXN0YXJ0IHBhZ2UgbWF5IG5vdCBiZSBwcm90ZWN0ZWQgYnkgYW4KKwkgKiB1cGRhdGUgc2VxdWVuY2UgYXJyYXkuCisJICovCisJaWYgKG50ZnNfaXNfY2hrZF9yZWNvcmQocnAtPm1hZ2ljKSAmJiAhbGUxNl90b19jcHUocnAtPnVzYV9jb3VudCkpIHsKKwkJaGF2ZV91c2EgPSBGQUxTRTsKKwkJZ290byBza2lwX3VzYV9jaGVja3M7CisJfQogCS8qIFZlcmlmeSB0aGUgc2l6ZSBvZiB0aGUgdXBkYXRlIHNlcXVlbmNlIGFycmF5LiAqLwogCXVzYV9jb3VudCA9IDEgKyAobG9nZmlsZV9zeXN0ZW1fcGFnZV9zaXplID4+IE5URlNfQkxPQ0tfU0laRV9CSVRTKTsKIAlpZiAodXNhX2NvdW50ICE9IGxlMTZfdG9fY3B1KHJwLT51c2FfY291bnQpKSB7CkBAIC0xMDIsNiArMTExLDcgQEAKIAkJCQkiaW5jb25zaXN0ZW50IHVwZGF0ZSBzZXF1ZW5jZSBhcnJheSBvZmZzZXQuIik7CiAJCXJldHVybiBGQUxTRTsKIAl9Citza2lwX3VzYV9jaGVja3M6CiAJLyoKIAkgKiBWZXJpZnkgdGhlIHBvc2l0aW9uIG9mIHRoZSByZXN0YXJ0IGFyZWEuICBJdCBtdXN0IGJlOgogCSAqCS0gYWxpZ25lZCB0byA4LWJ5dGUgYm91bmRhcnksCkBAIC0xMDksNyArMTE5LDggQEAKIAkgKgktIHdpdGhpbiB0aGUgc3lzdGVtIHBhZ2Ugc2l6ZS4KIAkgKi8KIAlyYV9vZnMgPSBsZTE2X3RvX2NwdShycC0+cmVzdGFydF9hcmVhX29mZnNldCk7Ci0JaWYgKHJhX29mcyAmIDcgfHwgcmFfb2ZzIDwgdXNhX2VuZCB8fAorCWlmIChyYV9vZnMgJiA3IHx8IChoYXZlX3VzYSA/IHJhX29mcyA8IHVzYV9lbmQgOgorCQkJcmFfb2ZzIDwgc2l6ZW9mKFJFU1RBUlRfUEFHRV9IRUFERVIpKSB8fAogCQkJcmFfb2ZzID4gbG9nZmlsZV9zeXN0ZW1fcGFnZV9zaXplKSB7CiAJCW50ZnNfZXJyb3IodmktPmlfc2IsICIkTG9nRmlsZSByZXN0YXJ0IHBhZ2Ugc3BlY2lmaWVzICIKIAkJCQkiaW5jb25zaXN0ZW50IHJlc3RhcnQgYXJlYSBvZmZzZXQuIik7CkBAIC00MDIsOCArNDEzLDEyIEBACiAJCQlpZHgrKzsKIAkJfSB3aGlsZSAodG9fcmVhZCA+IDApOwogCX0KLQkvKiBQZXJmb3JtIHRoZSBtdWx0aSBzZWN0b3IgdHJhbnNmZXIgZGVwcm90ZWN0aW9uIG9uIHRoZSBidWZmZXIuICovCi0JaWYgKHBvc3RfcmVhZF9tc3RfZml4dXAoKE5URlNfUkVDT1JEKil0cnAsCisJLyoKKwkgKiBQZXJmb3JtIHRoZSBtdWx0aSBzZWN0b3IgdHJhbnNmZXIgZGVwcm90ZWN0aW9uIG9uIHRoZSBidWZmZXIgaWYgdGhlCisJICogcmVzdGFydCBwYWdlIGlzIHByb3RlY3RlZC4KKwkgKi8KKwlpZiAoKCFudGZzX2lzX2Noa2RfcmVjb3JkKHRycC0+bWFnaWMpIHx8IGxlMTZfdG9fY3B1KHRycC0+dXNhX2NvdW50KSkKKwkJCSYmIHBvc3RfcmVhZF9tc3RfZml4dXAoKE5URlNfUkVDT1JEKil0cnAsCiAJCQlsZTMyX3RvX2NwdShycC0+c3lzdGVtX3BhZ2Vfc2l6ZSkpKSB7CiAJCS8qCiAJCSAqIEEgbXVsdGkgc2VjdG9yIHRyYW5mZXIgZXJyb3Igd2FzIGRldGVjdGVkLiAgV2Ugb25seSBuZWVkIHRvCkBAIC02MTUsMTEgKzYzMCwxNiBAQAogCQkgKiBPdGhlcndpc2UganVzdCB0aHJvdyBpdCBhd2F5LgogCQkgKi8KIAkJaWYgKHJzdHIyX2xzbiA+IHJzdHIxX2xzbikgeworCQkJbnRmc19kZWJ1ZygiVXNpbmcgc2Vjb25kIHJlc3RhcnQgcGFnZSBhcyBpdCBpcyBtb3JlICIKKwkJCQkJInJlY2VudC4iKTsKIAkJCW50ZnNfZnJlZShyc3RyMV9waCk7CiAJCQlyc3RyMV9waCA9IHJzdHIyX3BoOwogCQkJLyogcnN0cjFfbHNuID0gcnN0cjJfbHNuOyAqLwotCQl9IGVsc2UKKwkJfSBlbHNlIHsKKwkJCW50ZnNfZGVidWcoIlVzaW5nIGZpcnN0IHJlc3RhcnQgcGFnZSBhcyBpdCBpcyBtb3JlICIKKwkJCQkJInJlY2VudC4iKTsKIAkJCW50ZnNfZnJlZShyc3RyMl9waCk7CisJCX0KIAkJcnN0cjJfcGggPSBOVUxMOwogCX0KIAkvKiBBbGwgY29uc2lzdGVuY3kgY2hlY2tzIHBhc3NlZC4gKi8KZGlmZiAtLWdpdCBhL2ZzL250ZnMvbG9nZmlsZS5oIGIvZnMvbnRmcy9sb2dmaWxlLmgKaW5kZXggNDIzODhmOS4uYTUxZjNkZCAxMDA2NDQKLS0tIGEvZnMvbnRmcy9sb2dmaWxlLmgKKysrIGIvZnMvbnRmcy9sb2dmaWxlLmgKQEAgLTExMyw3ICsxMTMsNyBAQAogICovCiBlbnVtIHsKIAlSRVNUQVJUX1ZPTFVNRV9JU19DTEVBTgk9IGNvbnN0X2NwdV90b19sZTE2KDB4MDAwMiksCi0JUkVTVEFSVF9TUEFDRV9GSUxMRVIJPSAweGZmZmYsIC8qIGdjYzogRm9yY2UgZW51bSBiaXQgd2lkdGggdG8gMTYuICovCisJUkVTVEFSVF9TUEFDRV9GSUxMRVIJPSBjb25zdF9jcHVfdG9fbGUxNigweGZmZmYpLCAvKiBnY2M6IEZvcmNlIGVudW0gYml0IHdpZHRoIHRvIDE2LiAqLwogfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOwogCiB0eXBlZGVmIGxlMTYgUkVTVEFSVF9BUkVBX0ZMQUdTOwpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9tYWxsb2MuaCBiL2ZzL250ZnMvbWFsbG9jLmgKaW5kZXggMzI4OGJjYy4uNTkwODg3YiAxMDA2NDQKLS0tIGEvZnMvbnRmcy9tYWxsb2MuaAorKysgYi9mcy9udGZzL21hbGxvYy5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIG1hbGxvYy5oIC0gTlRGUyBrZXJuZWwgbWVtb3J5IGhhbmRsaW5nLiBQYXJ0IG9mIHRoZSBMaW51eC1OVEZTIHByb2plY3QuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDQgQW50b24gQWx0YXBhcm1ha292CisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSBBbnRvbiBBbHRhcGFybWFrb3YKICAqCiAgKiBUaGlzIHByb2dyYW0vaW5jbHVkZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCkBAIC00MCw3ICs0MCw3IEBACiAgKiBEZXBlbmRpbmcgb24gQGdmcF9tYXNrIHRoZSBhbGxvY2F0aW9uIG1heSBiZSBndWFyYW50ZWVkIHRvIHN1Y2NlZWQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCAqX19udGZzX21hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUsCi0JCXVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaykKKwkJZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJaWYgKGxpa2VseShzaXplIDw9IFBBR0VfU0laRSkpIHsKIAkJQlVHX09OKCFzaXplKTsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvbWZ0LmMgYi9mcy9udGZzL21mdC5jCmluZGV4IDJjMzJiODQuLmIwMTEzNjkgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvbWZ0LmMKKysrIGIvZnMvbnRmcy9tZnQuYwpAQCAtNTgsNyArNTgsOCBAQAogCSAqIG92ZXJmbG93aW5nIHRoZSB1bnNpZ25lZCBsb25nLCBidXQgSSBkb24ndCB0aGluayB3ZSB3b3VsZCBldmVyIGdldAogCSAqIGhlcmUgaWYgdGhlIHZvbHVtZSB3YXMgdGhhdCBiaWcuLi4KIAkgKi8KLQlpbmRleCA9IG5pLT5tZnRfbm8gPDwgdm9sLT5tZnRfcmVjb3JkX3NpemVfYml0cyA+PiBQQUdFX0NBQ0hFX1NISUZUOworCWluZGV4ID0gKHU2NCluaS0+bWZ0X25vIDw8IHZvbC0+bWZ0X3JlY29yZF9zaXplX2JpdHMgPj4KKwkJCVBBR0VfQ0FDSEVfU0hJRlQ7CiAJb2ZzID0gKG5pLT5tZnRfbm8gPDwgdm9sLT5tZnRfcmVjb3JkX3NpemVfYml0cykgJiB+UEFHRV9DQUNIRV9NQVNLOwogCiAJaV9zaXplID0gaV9zaXplX3JlYWQobWZ0X3ZpKTsKQEAgLTE5NTMsNyArMTk1NCw3IEBACiAJYSA9IGN0eC0+YXR0cjsKIAlhLT5kYXRhLm5vbl9yZXNpZGVudC5oaWdoZXN0X3ZjbiA9IGNwdV90b19zbGU2NChvbGRfbGFzdF92Y24gLSAxKTsKIHVuZG9fYWxsb2M6Ci0JaWYgKG50ZnNfY2x1c3Rlcl9mcmVlKHZvbC0+bWZ0X2lubywgb2xkX2xhc3RfdmNuLCAtMSwgVFJVRSkgPCAwKSB7CisJaWYgKG50ZnNfY2x1c3Rlcl9mcmVlKG1mdF9uaSwgb2xkX2xhc3RfdmNuLCAtMSkgPCAwKSB7CiAJCW50ZnNfZXJyb3Iodm9sLT5zYiwgIkZhaWxlZCB0byBmcmVlIGNsdXN0ZXJzIGZyb20gbWZ0IGRhdGEgIgogCQkJCSJhdHRyaWJ1dGUuJXMiLCBlcyk7CiAJCU5Wb2xTZXRFcnJvcnModm9sKTsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvcnVubGlzdC5jIGIvZnMvbnRmcy9ydW5saXN0LmMKaW5kZXggZjViMmFjOS4uMDYxYjVmZiAxMDA2NDQKLS0tIGEvZnMvbnRmcy9ydW5saXN0LmMKKysrIGIvZnMvbnRmcy9ydW5saXN0LmMKQEAgLTIsNyArMiw3IEBACiAgKiBydW5saXN0LmMgLSBOVEZTIHJ1bmxpc3QgaGFuZGxpbmcgY29kZS4gIFBhcnQgb2YgdGhlIExpbnV4LU5URlMgcHJvamVjdC4KICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSBBbnRvbiBBbHRhcGFybWFrb3YKLSAqIENvcHlyaWdodCAoYykgMjAwMiBSaWNoYXJkIFJ1c3NvbgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgUmljaGFyZCBSdXNzb24KICAqCiAgKiBUaGlzIHByb2dyYW0vaW5jbHVkZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCkBAIC0xNTgsMTcgKzE1OCwyMSBAQAogCUJVR19PTighZHN0KTsKIAlCVUdfT04oIXNyYyk7CiAKLQlpZiAoKGRzdC0+bGNuIDwgMCkgfHwgKHNyYy0+bGNuIDwgMCkpIHsgICAvKiBBcmUgd2UgbWVyZ2luZyBob2xlcz8gKi8KLQkJaWYgKGRzdC0+bGNuID09IExDTl9IT0xFICYmIHNyYy0+bGNuID09IExDTl9IT0xFKQotCQkJcmV0dXJuIFRSVUU7CisJLyogV2UgY2FuIG1lcmdlIHVubWFwcGVkIHJlZ2lvbnMgZXZlbiBpZiB0aGV5IGFyZSBtaXNhbGlnbmVkLiAqLworCWlmICgoZHN0LT5sY24gPT0gTENOX1JMX05PVF9NQVBQRUQpICYmIChzcmMtPmxjbiA9PSBMQ05fUkxfTk9UX01BUFBFRCkpCisJCXJldHVybiBUUlVFOworCS8qIElmIHRoZSBydW5zIGFyZSBtaXNhbGlnbmVkLCB3ZSBjYW5ub3QgbWVyZ2UgdGhlbS4gKi8KKwlpZiAoKGRzdC0+dmNuICsgZHN0LT5sZW5ndGgpICE9IHNyYy0+dmNuKQogCQlyZXR1cm4gRkFMU0U7Ci0JfQotCWlmICgoZHN0LT5sY24gKyBkc3QtPmxlbmd0aCkgIT0gc3JjLT5sY24pIC8qIEFyZSB0aGUgcnVucyBjb250aWd1b3VzPyAqLwotCQlyZXR1cm4gRkFMU0U7Ci0JaWYgKChkc3QtPnZjbiArIGRzdC0+bGVuZ3RoKSAhPSBzcmMtPnZjbikgLyogQXJlIHRoZSBydW5zIG1pc2FsaWduZWQ/ICovCi0JCXJldHVybiBGQUxTRTsKLQotCXJldHVybiBUUlVFOworCS8qIElmIGJvdGggcnVucyBhcmUgbm9uLXNwYXJzZSBhbmQgY29udGlndW91cywgd2UgY2FuIG1lcmdlIHRoZW0uICovCisJaWYgKChkc3QtPmxjbiA+PSAwKSAmJiAoc3JjLT5sY24gPj0gMCkgJiYKKwkJCSgoZHN0LT5sY24gKyBkc3QtPmxlbmd0aCkgPT0gc3JjLT5sY24pKQorCQlyZXR1cm4gVFJVRTsKKwkvKiBJZiB3ZSBhcmUgbWVyZ2luZyB0d28gaG9sZXMsIHdlIGNhbiBtZXJnZSB0aGVtLiAqLworCWlmICgoZHN0LT5sY24gPT0gTENOX0hPTEUpICYmIChzcmMtPmxjbiA9PSBMQ05fSE9MRSkpCisJCXJldHVybiBUUlVFOworCS8qIENhbm5vdCBtZXJnZS4gKi8KKwlyZXR1cm4gRkFMU0U7CiB9CiAKIC8qKgpAQCAtMjE0LDE0ICsyMTgsMTUgQEAKIHN0YXRpYyBpbmxpbmUgcnVubGlzdF9lbGVtZW50ICpudGZzX3JsX2FwcGVuZChydW5saXN0X2VsZW1lbnQgKmRzdCwKIAkJaW50IGRzaXplLCBydW5saXN0X2VsZW1lbnQgKnNyYywgaW50IHNzaXplLCBpbnQgbG9jKQogewotCUJPT0wgcmlnaHQ7Ci0JaW50IG1hZ2ljOworCUJPT0wgcmlnaHQgPSBGQUxTRTsJLyogUmlnaHQgZW5kIG9mIEBzcmMgbmVlZHMgbWVyZ2luZy4gKi8KKwlpbnQgbWFya2VyOwkJLyogRW5kIG9mIHRoZSBpbnNlcnRlZCBydW5zLiAqLwogCiAJQlVHX09OKCFkc3QpOwogCUJVR19PTighc3JjKTsKIAogCS8qIEZpcnN0LCBjaGVjayBpZiB0aGUgcmlnaHQgaGFuZCBlbmQgbmVlZHMgbWVyZ2luZy4gKi8KLQlyaWdodCA9IG50ZnNfYXJlX3JsX21lcmdlYWJsZShzcmMgKyBzc2l6ZSAtIDEsIGRzdCArIGxvYyArIDEpOworCWlmICgobG9jICsgMSkgPCBkc2l6ZSkKKwkJcmlnaHQgPSBudGZzX2FyZV9ybF9tZXJnZWFibGUoc3JjICsgc3NpemUgLSAxLCBkc3QgKyBsb2MgKyAxKTsKIAogCS8qIFNwYWNlIHJlcXVpcmVkOiBAZHN0IHNpemUgKyBAc3JjIHNpemUsIGxlc3Mgb25lIGlmIHdlIG1lcmdlZC4gKi8KIAlkc3QgPSBudGZzX3JsX3JlYWxsb2MoZHN0LCBkc2l6ZSwgZHNpemUgKyBzc2l6ZSAtIHJpZ2h0KTsKQEAgLTIzNiwxOCArMjQxLDE5IEBACiAJaWYgKHJpZ2h0KQogCQlfX250ZnNfcmxfbWVyZ2Uoc3JjICsgc3NpemUgLSAxLCBkc3QgKyBsb2MgKyAxKTsKIAotCW1hZ2ljID0gbG9jICsgc3NpemU7CisJLyogRmlyc3QgcnVuIGFmdGVyIHRoZSBAc3JjIHJ1bnMgdGhhdCBoYXZlIGJlZW4gaW5zZXJ0ZWQuICovCisJbWFya2VyID0gbG9jICsgc3NpemUgKyAxOwogCiAJLyogTW92ZSB0aGUgdGFpbCBvZiBAZHN0IG91dCBvZiB0aGUgd2F5LCB0aGVuIGNvcHkgaW4gQHNyYy4gKi8KLQludGZzX3JsX21tKGRzdCwgbWFnaWMgKyAxLCBsb2MgKyAxICsgcmlnaHQsIGRzaXplIC0gbG9jIC0gMSAtIHJpZ2h0KTsKKwludGZzX3JsX21tKGRzdCwgbWFya2VyLCBsb2MgKyAxICsgcmlnaHQsIGRzaXplIC0gKGxvYyArIDEgKyByaWdodCkpOwogCW50ZnNfcmxfbWMoZHN0LCBsb2MgKyAxLCBzcmMsIDAsIHNzaXplKTsKIAogCS8qIEFkanVzdCB0aGUgc2l6ZSBvZiB0aGUgcHJlY2VkaW5nIGhvbGUuICovCiAJZHN0W2xvY10ubGVuZ3RoID0gZHN0W2xvYyArIDFdLnZjbiAtIGRzdFtsb2NdLnZjbjsKIAogCS8qIFdlIG1heSBoYXZlIGNoYW5nZWQgdGhlIGxlbmd0aCBvZiB0aGUgZmlsZSwgc28gZml4IHRoZSBlbmQgbWFya2VyICovCi0JaWYgKGRzdFttYWdpYyArIDFdLmxjbiA9PSBMQ05fRU5PRU5UKQotCQlkc3RbbWFnaWMgKyAxXS52Y24gPSBkc3RbbWFnaWNdLnZjbiArIGRzdFttYWdpY10ubGVuZ3RoOworCWlmIChkc3RbbWFya2VyXS5sY24gPT0gTENOX0VOT0VOVCkKKwkJZHN0W21hcmtlcl0udmNuID0gZHN0W21hcmtlciAtIDFdLnZjbiArIGRzdFttYXJrZXIgLSAxXS5sZW5ndGg7CiAKIAlyZXR1cm4gZHN0OwogfQpAQCAtMjc5LDE4ICsyODUsMTcgQEAKIHN0YXRpYyBpbmxpbmUgcnVubGlzdF9lbGVtZW50ICpudGZzX3JsX2luc2VydChydW5saXN0X2VsZW1lbnQgKmRzdCwKIAkJaW50IGRzaXplLCBydW5saXN0X2VsZW1lbnQgKnNyYywgaW50IHNzaXplLCBpbnQgbG9jKQogewotCUJPT0wgbGVmdCA9IEZBTFNFOwotCUJPT0wgZGlzYyA9IEZBTFNFOwkvKiBEaXNjb250aW51aXR5ICovCi0JQk9PTCBob2xlID0gRkFMU0U7CS8qIEZvbGxvd2luZyBhIGhvbGUgKi8KLQlpbnQgbWFnaWM7CisJQk9PTCBsZWZ0ID0gRkFMU0U7CS8qIExlZnQgZW5kIG9mIEBzcmMgbmVlZHMgbWVyZ2luZy4gKi8KKwlCT09MIGRpc2MgPSBGQUxTRTsJLyogRGlzY29udGludWl0eSBiZXR3ZWVuIEBkc3QgYW5kIEBzcmMuICovCisJaW50IG1hcmtlcjsJCS8qIEVuZCBvZiB0aGUgaW5zZXJ0ZWQgcnVucy4gKi8KIAogCUJVR19PTighZHN0KTsKIAlCVUdfT04oIXNyYyk7CiAKLQkvKiBkaXNjID0+IERpc2NvbnRpbnVpdHkgYmV0d2VlbiB0aGUgZW5kIG9mIEBkc3QgYW5kIHRoZSBzdGFydCBvZiBAc3JjLgotCSAqCSAgIFRoaXMgbWVhbnMgd2UgbWlnaHQgbmVlZCB0byBpbnNlcnQgYSBob2xlLgotCSAqIGhvbGUgPT4gQGRzdCBlbmRzIHdpdGggYSBob2xlIG9yIGFuIHVubWFwcGVkIHJlZ2lvbiB3aGljaCB3ZSBjYW4KLQkgKgkgICBleHRlbmQgdG8gbWF0Y2ggdGhlIGRpc2NvbnRpbnVpdHkuICovCisJLyoKKwkgKiBkaXNjID0+IERpc2NvbnRpbnVpdHkgYmV0d2VlbiB0aGUgZW5kIG9mIEBkc3QgYW5kIHRoZSBzdGFydCBvZiBAc3JjLgorCSAqCSAgIFRoaXMgbWVhbnMgd2UgbWlnaHQgbmVlZCB0byBpbnNlcnQgYSAibm90IG1hcHBlZCIgcnVuLgorCSAqLwogCWlmIChsb2MgPT0gMCkKIAkJZGlzYyA9IChzcmNbMF0udmNuID4gMCk7CiAJZWxzZSB7CkBAIC0zMDMsNTggKzMwOCw0OSBAQAogCQkJbWVyZ2VkX2xlbmd0aCArPSBzcmMtPmxlbmd0aDsKIAogCQlkaXNjID0gKHNyY1swXS52Y24gPiBkc3RbbG9jIC0gMV0udmNuICsgbWVyZ2VkX2xlbmd0aCk7Ci0JCWlmIChkaXNjKQotCQkJaG9sZSA9IChkc3RbbG9jIC0gMV0ubGNuID09IExDTl9IT0xFKTsKIAl9Ci0KLQkvKiBTcGFjZSByZXF1aXJlZDogQGRzdCBzaXplICsgQHNyYyBzaXplLCBsZXNzIG9uZSBpZiB3ZSBtZXJnZWQsIHBsdXMKLQkgKiBvbmUgaWYgdGhlcmUgd2FzIGEgZGlzY29udGludWl0eSwgbGVzcyBvbmUgZm9yIGEgdHJhaWxpbmcgaG9sZS4gKi8KLQlkc3QgPSBudGZzX3JsX3JlYWxsb2MoZHN0LCBkc2l6ZSwgZHNpemUgKyBzc2l6ZSAtIGxlZnQgKyBkaXNjIC0gaG9sZSk7CisJLyoKKwkgKiBTcGFjZSByZXF1aXJlZDogQGRzdCBzaXplICsgQHNyYyBzaXplLCBsZXNzIG9uZSBpZiB3ZSBtZXJnZWQsIHBsdXMKKwkgKiBvbmUgaWYgdGhlcmUgd2FzIGEgZGlzY29udGludWl0eS4KKwkgKi8KKwlkc3QgPSBudGZzX3JsX3JlYWxsb2MoZHN0LCBkc2l6ZSwgZHNpemUgKyBzc2l6ZSAtIGxlZnQgKyBkaXNjKTsKIAlpZiAoSVNfRVJSKGRzdCkpCiAJCXJldHVybiBkc3Q7CiAJLyoKIAkgKiBXZSBhcmUgZ3VhcmFudGVlZCB0byBzdWNjZWVkIGZyb20gaGVyZSBzbyBjYW4gc3RhcnQgbW9kaWZ5aW5nIHRoZQogCSAqIG9yaWdpbmFsIHJ1bmxpc3QuCiAJICovCi0KIAlpZiAobGVmdCkKIAkJX19udGZzX3JsX21lcmdlKGRzdCArIGxvYyAtIDEsIHNyYyk7Ci0KLQltYWdpYyA9IGxvYyArIHNzaXplIC0gbGVmdCArIGRpc2MgLSBob2xlOworCS8qCisJICogRmlyc3QgcnVuIGFmdGVyIHRoZSBAc3JjIHJ1bnMgdGhhdCBoYXZlIGJlZW4gaW5zZXJ0ZWQuCisJICogTm9taW5hbGx5LCAgQG1hcmtlciBlcXVhbHMgQGxvYyArIEBzc2l6ZSwgaS5lLiBsb2NhdGlvbiArIG51bWJlciBvZgorCSAqIHJ1bnMgaW4gQHNyYy4gIEhvd2V2ZXIsIGlmIEBsZWZ0LCB0aGVuIHRoZSBmaXJzdCBydW4gaW4gQHNyYyBoYXMKKwkgKiBiZWVuIG1lcmdlZCB3aXRoIG9uZSBpbiBAZHN0LiAgQW5kIGlmIEBkaXNjLCB0aGVuIEBkc3QgYW5kIEBzcmMgZG8KKwkgKiBub3QgbWVldCBhbmQgd2UgbmVlZCBhbiBleHRyYSBydW4gdG8gZmlsbCB0aGUgZ2FwLgorCSAqLworCW1hcmtlciA9IGxvYyArIHNzaXplIC0gbGVmdCArIGRpc2M7CiAKIAkvKiBNb3ZlIHRoZSB0YWlsIG9mIEBkc3Qgb3V0IG9mIHRoZSB3YXksIHRoZW4gY29weSBpbiBAc3JjLiAqLwotCW50ZnNfcmxfbW0oZHN0LCBtYWdpYywgbG9jLCBkc2l6ZSAtIGxvYyk7Ci0JbnRmc19ybF9tYyhkc3QsIGxvYyArIGRpc2MgLSBob2xlLCBzcmMsIGxlZnQsIHNzaXplIC0gbGVmdCk7CisJbnRmc19ybF9tbShkc3QsIG1hcmtlciwgbG9jLCBkc2l6ZSAtIGxvYyk7CisJbnRmc19ybF9tYyhkc3QsIGxvYyArIGRpc2MsIHNyYywgbGVmdCwgc3NpemUgLSBsZWZ0KTsKIAotCS8qIEFkanVzdCB0aGUgVkNOIG9mIHRoZSBsYXN0IHJ1biAuLi4gKi8KLQlpZiAoZHN0W21hZ2ljXS5sY24gPD0gTENOX0hPTEUpCi0JCWRzdFttYWdpY10udmNuID0gZHN0W21hZ2ljIC0gMV0udmNuICsgZHN0W21hZ2ljIC0gMV0ubGVuZ3RoOworCS8qIEFkanVzdCB0aGUgVkNOIG9mIHRoZSBmaXJzdCBydW4gYWZ0ZXIgdGhlIGluc2VydGlvbi4uLiAqLworCWRzdFttYXJrZXJdLnZjbiA9IGRzdFttYXJrZXIgLSAxXS52Y24gKyBkc3RbbWFya2VyIC0gMV0ubGVuZ3RoOwogCS8qIC4uLiBhbmQgdGhlIGxlbmd0aC4gKi8KLQlpZiAoZHN0W21hZ2ljXS5sY24gPT0gTENOX0hPTEUgfHwgZHN0W21hZ2ljXS5sY24gPT0gTENOX1JMX05PVF9NQVBQRUQpCi0JCWRzdFttYWdpY10ubGVuZ3RoID0gZHN0W21hZ2ljICsgMV0udmNuIC0gZHN0W21hZ2ljXS52Y247CisJaWYgKGRzdFttYXJrZXJdLmxjbiA9PSBMQ05fSE9MRSB8fCBkc3RbbWFya2VyXS5sY24gPT0gTENOX1JMX05PVF9NQVBQRUQpCisJCWRzdFttYXJrZXJdLmxlbmd0aCA9IGRzdFttYXJrZXIgKyAxXS52Y24gLSBkc3RbbWFya2VyXS52Y247CiAKLQkvKiBXcml0aW5nIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCB0aGVyZSdzIGEgZGlzY29udGludWl0eS4gKi8KKwkvKiBXcml0aW5nIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCB0aGVyZSBpcyBhIGRpc2NvbnRpbnVpdHkuICovCiAJaWYgKGRpc2MpIHsKLQkJaWYgKGhvbGUpCi0JCQlkc3RbbG9jIC0gMV0ubGVuZ3RoID0gZHN0W2xvY10udmNuIC0gZHN0W2xvYyAtIDFdLnZjbjsKLQkJZWxzZSB7Ci0JCQlpZiAobG9jID4gMCkgewotCQkJCWRzdFtsb2NdLnZjbiA9IGRzdFtsb2MgLSAxXS52Y24gKwotCQkJCQkJZHN0W2xvYyAtIDFdLmxlbmd0aDsKLQkJCQlkc3RbbG9jXS5sZW5ndGggPSBkc3RbbG9jICsgMV0udmNuIC0KLQkJCQkJCWRzdFtsb2NdLnZjbjsKLQkJCX0gZWxzZSB7Ci0JCQkJZHN0W2xvY10udmNuID0gMDsKLQkJCQlkc3RbbG9jXS5sZW5ndGggPSBkc3RbbG9jICsgMV0udmNuOwotCQkJfQotCQkJZHN0W2xvY10ubGNuID0gTENOX1JMX05PVF9NQVBQRUQ7CisJCWlmIChsb2MgPiAwKSB7CisJCQlkc3RbbG9jXS52Y24gPSBkc3RbbG9jIC0gMV0udmNuICsgZHN0W2xvYyAtIDFdLmxlbmd0aDsKKwkJCWRzdFtsb2NdLmxlbmd0aCA9IGRzdFtsb2MgKyAxXS52Y24gLSBkc3RbbG9jXS52Y247CisJCX0gZWxzZSB7CisJCQlkc3RbbG9jXS52Y24gPSAwOworCQkJZHN0W2xvY10ubGVuZ3RoID0gZHN0W2xvYyArIDFdLnZjbjsKIAkJfQotCi0JCW1hZ2ljICs9IGhvbGU7Ci0KLQkJaWYgKGRzdFttYWdpY10ubGNuID09IExDTl9FTk9FTlQpCi0JCQlkc3RbbWFnaWNdLnZjbiA9IGRzdFttYWdpYyAtIDFdLnZjbiArCi0JCQkJCWRzdFttYWdpYyAtIDFdLmxlbmd0aDsKKwkJZHN0W2xvY10ubGNuID0gTENOX1JMX05PVF9NQVBQRUQ7CiAJfQogCXJldHVybiBkc3Q7CiB9CkBAIC0zODUsMjAgKzM4MSwyMyBAQAogc3RhdGljIGlubGluZSBydW5saXN0X2VsZW1lbnQgKm50ZnNfcmxfcmVwbGFjZShydW5saXN0X2VsZW1lbnQgKmRzdCwKIAkJaW50IGRzaXplLCBydW5saXN0X2VsZW1lbnQgKnNyYywgaW50IHNzaXplLCBpbnQgbG9jKQogewotCUJPT0wgbGVmdCA9IEZBTFNFOwotCUJPT0wgcmlnaHQ7Ci0JaW50IG1hZ2ljOworCUJPT0wgbGVmdCA9IEZBTFNFOwkvKiBMZWZ0IGVuZCBvZiBAc3JjIG5lZWRzIG1lcmdpbmcuICovCisJQk9PTCByaWdodCA9IEZBTFNFOwkvKiBSaWdodCBlbmQgb2YgQHNyYyBuZWVkcyBtZXJnaW5nLiAqLworCWludCB0YWlsOwkJLyogU3RhcnQgb2YgdGFpbCBvZiBAZHN0LiAqLworCWludCBtYXJrZXI7CQkvKiBFbmQgb2YgdGhlIGluc2VydGVkIHJ1bnMuICovCiAKIAlCVUdfT04oIWRzdCk7CiAJQlVHX09OKCFzcmMpOwogCi0JLyogRmlyc3QsIG1lcmdlIHRoZSBsZWZ0IGFuZCByaWdodCBlbmRzLCBpZiBuZWNlc3NhcnkuICovCi0JcmlnaHQgPSBudGZzX2FyZV9ybF9tZXJnZWFibGUoc3JjICsgc3NpemUgLSAxLCBkc3QgKyBsb2MgKyAxKTsKKwkvKiBGaXJzdCwgc2VlIGlmIHRoZSBsZWZ0IGFuZCByaWdodCBlbmRzIG5lZWQgbWVyZ2luZy4gKi8KKwlpZiAoKGxvYyArIDEpIDwgZHNpemUpCisJCXJpZ2h0ID0gbnRmc19hcmVfcmxfbWVyZ2VhYmxlKHNyYyArIHNzaXplIC0gMSwgZHN0ICsgbG9jICsgMSk7CiAJaWYgKGxvYyA+IDApCiAJCWxlZnQgPSBudGZzX2FyZV9ybF9tZXJnZWFibGUoZHN0ICsgbG9jIC0gMSwgc3JjKTsKLQotCS8qIEFsbG9jYXRlIHNvbWUgc3BhY2UuIFdlJ2xsIG5lZWQgbGVzcyBpZiB0aGUgbGVmdCwgcmlnaHQsIG9yIGJvdGgKLQkgKiBlbmRzIHdlcmUgbWVyZ2VkLiAqLworCS8qCisJICogQWxsb2NhdGUgc29tZSBzcGFjZS4gIFdlIHdpbGwgbmVlZCBsZXNzIGlmIHRoZSBsZWZ0LCByaWdodCwgb3IgYm90aAorCSAqIGVuZHMgZ2V0IG1lcmdlZC4KKwkgKi8KIAlkc3QgPSBudGZzX3JsX3JlYWxsb2MoZHN0LCBkc2l6ZSwgZHNpemUgKyBzc2l6ZSAtIGxlZnQgLSByaWdodCk7CiAJaWYgKElTX0VSUihkc3QpKQogCQlyZXR1cm4gZHN0OwpAQCAtNDA2LDIxICs0MDUsMzcgQEAKIAkgKiBXZSBhcmUgZ3VhcmFudGVlZCB0byBzdWNjZWVkIGZyb20gaGVyZSBzbyBjYW4gc3RhcnQgbW9kaWZ5aW5nIHRoZQogCSAqIG9yaWdpbmFsIHJ1bmxpc3RzLgogCSAqLworCisJLyogRmlyc3QsIG1lcmdlIHRoZSBsZWZ0IGFuZCByaWdodCBlbmRzLCBpZiBuZWNlc3NhcnkuICovCiAJaWYgKHJpZ2h0KQogCQlfX250ZnNfcmxfbWVyZ2Uoc3JjICsgc3NpemUgLSAxLCBkc3QgKyBsb2MgKyAxKTsKIAlpZiAobGVmdCkKIAkJX19udGZzX3JsX21lcmdlKGRzdCArIGxvYyAtIDEsIHNyYyk7Ci0KLQkvKiBGSVhNRTogV2hhdCBkb2VzIHRoaXMgbWVhbj8gKEFJQSkgKi8KLQltYWdpYyA9IGxvYyArIHNzaXplIC0gbGVmdDsKKwkvKgorCSAqIE9mZnNldCBvZiB0aGUgdGFpbCBvZiBAZHN0LiAgVGhpcyBuZWVkcyB0byBiZSBtb3ZlZCBvdXQgb2YgdGhlIHdheQorCSAqIHRvIG1ha2Ugc3BhY2UgZm9yIHRoZSBydW5zIHRvIGJlIGNvcGllZCBmcm9tIEBzcmMsIGkuZS4gdGhlIGZpcnN0CisJICogcnVuIG9mIHRoZSB0YWlsIG9mIEBkc3QuCisJICogTm9taW5hbGx5LCBAdGFpbCBlcXVhbHMgQGxvYyArIDEsIGkuZS4gbG9jYXRpb24sIHNraXBwaW5nIHRoZQorCSAqIHJlcGxhY2VkIHJ1bi4gIEhvd2V2ZXIsIGlmIEByaWdodCwgdGhlbiBvbmUgb2YgQGRzdCdzIHJ1bnMgaXMKKwkgKiBhbHJlYWR5IG1lcmdlZCBpbnRvIEBzcmMuCisJICovCisJdGFpbCA9IGxvYyArIHJpZ2h0ICsgMTsKKwkvKgorCSAqIEZpcnN0IHJ1biBhZnRlciB0aGUgQHNyYyBydW5zIHRoYXQgaGF2ZSBiZWVuIGluc2VydGVkLCBpLmUuIHdoZXJlCisJICogdGhlIHRhaWwgb2YgQGRzdCBuZWVkcyB0byBiZSBtb3ZlZCB0by4KKwkgKiBOb21pbmFsbHksIEBtYXJrZXIgZXF1YWxzIEBsb2MgKyBAc3NpemUsIGkuZS4gbG9jYXRpb24gKyBudW1iZXIgb2YKKwkgKiBydW5zIGluIEBzcmMuICBIb3dldmVyLCBpZiBAbGVmdCwgdGhlbiB0aGUgZmlyc3QgcnVuIGluIEBzcmMgaGFzCisJICogYmVlbiBtZXJnZWQgd2l0aCBvbmUgaW4gQGRzdC4KKwkgKi8KKwltYXJrZXIgPSBsb2MgKyBzc2l6ZSAtIGxlZnQ7CiAKIAkvKiBNb3ZlIHRoZSB0YWlsIG9mIEBkc3Qgb3V0IG9mIHRoZSB3YXksIHRoZW4gY29weSBpbiBAc3JjLiAqLwotCW50ZnNfcmxfbW0oZHN0LCBtYWdpYywgbG9jICsgcmlnaHQgKyAxLCBkc2l6ZSAtIGxvYyAtIHJpZ2h0IC0gMSk7CisJbnRmc19ybF9tbShkc3QsIG1hcmtlciwgdGFpbCwgZHNpemUgLSB0YWlsKTsKIAludGZzX3JsX21jKGRzdCwgbG9jLCBzcmMsIGxlZnQsIHNzaXplIC0gbGVmdCk7CiAKLQkvKiBXZSBtYXkgaGF2ZSBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGZpbGUsIHNvIGZpeCB0aGUgZW5kIG1hcmtlciAqLwotCWlmIChkc3RbbWFnaWNdLmxjbiA9PSBMQ05fRU5PRU5UKQotCQlkc3RbbWFnaWNdLnZjbiA9IGRzdFttYWdpYyAtIDFdLnZjbiArIGRzdFttYWdpYyAtIDFdLmxlbmd0aDsKKwkvKiBXZSBtYXkgaGF2ZSBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGZpbGUsIHNvIGZpeCB0aGUgZW5kIG1hcmtlci4gKi8KKwlpZiAoZHNpemUgLSB0YWlsID4gMCAmJiBkc3RbbWFya2VyXS5sY24gPT0gTENOX0VOT0VOVCkKKwkJZHN0W21hcmtlcl0udmNuID0gZHN0W21hcmtlciAtIDFdLnZjbiArIGRzdFttYXJrZXIgLSAxXS5sZW5ndGg7CiAJcmV0dXJuIGRzdDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbnRmcy91bmlzdHIuYyBiL2ZzL250ZnMvdW5pc3RyLmMKaW5kZXggYTM4OWE1YS4uMGVhODg3ZiAxMDA2NDQKLS0tIGEvZnMvbnRmcy91bmlzdHIuYworKysgYi9mcy9udGZzL3VuaXN0ci5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIHVuaXN0ci5jIC0gTlRGUyBVbmljb2RlIHN0cmluZyBoYW5kbGluZy4gUGFydCBvZiB0aGUgTGludXgtTlRGUyBwcm9qZWN0LgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA0IEFudG9uIEFsdGFwYXJtYWtvdgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUgQW50b24gQWx0YXBhcm1ha292CiAgKgogICogVGhpcyBwcm9ncmFtL2luY2x1ZGUgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZApkaWZmIC0tZ2l0IGEvZnMvcG9zaXhfYWNsLmMgYi9mcy9wb3NpeF9hY2wuYwppbmRleCAyOTY0ODBlLi42YzhkY2Y3IDEwMDY0NAotLS0gYS9mcy9wb3NpeF9hY2wuYworKysgYi9mcy9wb3NpeF9hY2wuYwpAQCAtMzUsNyArMzUsNyBAQAogICogQWxsb2NhdGUgYSBuZXcgQUNMIHdpdGggdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgZW50cmllcy4KICAqLwogc3RydWN0IHBvc2l4X2FjbCAqCi1wb3NpeF9hY2xfYWxsb2MoaW50IGNvdW50LCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZ3MpCitwb3NpeF9hY2xfYWxsb2MoaW50IGNvdW50LCBnZnBfdCBmbGFncykKIHsKIAljb25zdCBzaXplX3Qgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcG9zaXhfYWNsKSArCiAJICAgICAgICAgICAgICAgICAgICBjb3VudCAqIHNpemVvZihzdHJ1Y3QgcG9zaXhfYWNsX2VudHJ5KTsKQEAgLTUxLDcgKzUxLDcgQEAKICAqIENsb25lIGFuIEFDTC4KICAqLwogc3RydWN0IHBvc2l4X2FjbCAqCi1wb3NpeF9hY2xfY2xvbmUoY29uc3Qgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZ3MpCitwb3NpeF9hY2xfY2xvbmUoY29uc3Qgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBnZnBfdCBmbGFncykKIHsKIAlzdHJ1Y3QgcG9zaXhfYWNsICpjbG9uZSA9IE5VTEw7CiAKQEAgLTE4NSw3ICsxODUsNyBAQAogICogQ3JlYXRlIGFuIEFDTCByZXByZXNlbnRpbmcgdGhlIGZpbGUgbW9kZSBwZXJtaXNzaW9uIGJpdHMgb2YgYW4gaW5vZGUuCiAgKi8KIHN0cnVjdCBwb3NpeF9hY2wgKgotcG9zaXhfYWNsX2Zyb21fbW9kZShtb2RlX3QgbW9kZSwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGZsYWdzKQorcG9zaXhfYWNsX2Zyb21fbW9kZShtb2RlX3QgbW9kZSwgZ2ZwX3QgZmxhZ3MpCiB7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsID0gcG9zaXhfYWNsX2FsbG9jKDMsIGZsYWdzKTsKIAlpZiAoIWFjbCkKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYXJyYXkuYyBiL2ZzL3Byb2MvYXJyYXkuYwppbmRleCBkODhkNTE4Li5kODRlZWNhIDEwMDY0NAotLS0gYS9mcy9wcm9jL2FycmF5LmMKKysrIGIvZnMvcHJvYy9hcnJheS5jCkBAIC03NCw2ICs3NCw3IEBACiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVzLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1c2V0Lmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KQEAgLTE4MCwxMiArMTgxLDE0IEBACiAJCXAtPmdpZCwgcC0+ZWdpZCwgcC0+c2dpZCwgcC0+ZnNnaWQpOwogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAl0YXNrX2xvY2socCk7CisJcmN1X3JlYWRfbG9jaygpOwogCWlmIChwLT5maWxlcykKIAkJZmR0ID0gZmlsZXNfZmR0YWJsZShwLT5maWxlcyk7CiAJYnVmZmVyICs9IHNwcmludGYoYnVmZmVyLAogCQkiRkRTaXplOlx0JWRcbiIKIAkJIkdyb3VwczpcdCIsCiAJCWZkdCA/IGZkdC0+bWF4X2ZkcyA6IDApOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJZ3JvdXBfaW5mbyA9IHAtPmdyb3VwX2luZm87CiAJZ2V0X2dyb3VwX2luZm8oZ3JvdXBfaW5mbyk7CmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IDIzZGI0NTIuLmExNzA0NTAgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCisrKyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC0xMDMsNyArMTAzLDkgQEAKIAlQUk9DX1RHSURfTlVNQV9NQVBTLAogCVBST0NfVEdJRF9NT1VOVFMsCiAJUFJPQ19UR0lEX1dDSEFOLAorI2lmZGVmIENPTkZJR19NTVUKIAlQUk9DX1RHSURfU01BUFMsCisjZW5kaWYKICNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwogCVBST0NfVEdJRF9TQ0hFRFNUQVQsCiAjZW5kaWYKQEAgLTE0MSw3ICsxNDMsOSBAQAogCVBST0NfVElEX05VTUFfTUFQUywKIAlQUk9DX1RJRF9NT1VOVFMsCiAJUFJPQ19USURfV0NIQU4sCisjaWZkZWYgQ09ORklHX01NVQogCVBST0NfVElEX1NNQVBTLAorI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NDSEVEU1RBVFMKIAlQUk9DX1RJRF9TQ0hFRFNUQVQsCiAjZW5kaWYKQEAgLTE5NSw3ICsxOTksOSBAQAogCUUoUFJPQ19UR0lEX1JPT1QsICAgICAgInJvb3QiLCAgICBTX0lGTE5LfFNfSVJXWFVHTyksCiAJRShQUk9DX1RHSURfRVhFLCAgICAgICAiZXhlIiwgICAgIFNfSUZMTkt8U19JUldYVUdPKSwKIAlFKFBST0NfVEdJRF9NT1VOVFMsICAgICJtb3VudHMiLCAgU19JRlJFR3xTX0lSVUdPKSwKKyNpZmRlZiBDT05GSUdfTU1VCiAJRShQUk9DX1RHSURfU01BUFMsICAgICAic21hcHMiLCAgIFNfSUZSRUd8U19JUlVHTyksCisjZW5kaWYKICNpZmRlZiBDT05GSUdfU0VDVVJJVFkKIAlFKFBST0NfVEdJRF9BVFRSLCAgICAgICJhdHRyIiwgICAgU19JRkRJUnxTX0lSVUdPfFNfSVhVR08pLAogI2VuZGlmCkBAIC0yMzUsNyArMjQxLDkgQEAKIAlFKFBST0NfVElEX1JPT1QsICAgICAgICJyb290IiwgICAgU19JRkxOS3xTX0lSV1hVR08pLAogCUUoUFJPQ19USURfRVhFLCAgICAgICAgImV4ZSIsICAgICBTX0lGTE5LfFNfSVJXWFVHTyksCiAJRShQUk9DX1RJRF9NT1VOVFMsICAgICAibW91bnRzIiwgIFNfSUZSRUd8U19JUlVHTyksCisjaWZkZWYgQ09ORklHX01NVQogCUUoUFJPQ19USURfU01BUFMsICAgICAgInNtYXBzIiwgICBTX0lGUkVHfFNfSVJVR08pLAorI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZCiAJRShQUk9DX1RJRF9BVFRSLCAgICAgICAiYXR0ciIsICAgIFNfSUZESVJ8U19JUlVHT3xTX0lYVUdPKSwKICNlbmRpZgpAQCAtMzQwLDYgKzM0OCw1NCBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKKworLyogU2FtZSBhcyBwcm9jX3Jvb3RfbGluaywgYnV0IHRoaXMgYWRkaW9uYWxseSB0cmllcyB0byBnZXQgZnMgZnJvbSBvdGhlcgorICogdGhyZWFkcyBpbiB0aGUgZ3JvdXAgKi8KK3N0YXRpYyBpbnQgcHJvY190YXNrX3Jvb3RfbGluayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICoqZGVudHJ5LAorCQkJCXN0cnVjdCB2ZnNtb3VudCAqKm1udCkKK3sKKwlzdHJ1Y3QgZnNfc3RydWN0ICpmczsKKwlpbnQgcmVzdWx0ID0gLUVOT0VOVDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmxlYWRlciA9IHByb2NfdGFzayhpbm9kZSk7CisKKwl0YXNrX2xvY2sobGVhZGVyKTsKKwlmcyA9IGxlYWRlci0+ZnM7CisJaWYgKGZzKSB7CisJCWF0b21pY19pbmMoJmZzLT5jb3VudCk7CisJCXRhc2tfdW5sb2NrKGxlYWRlcik7CisJfSBlbHNlIHsKKwkJLyogVHJ5IHRvIGdldCBmcyBmcm9tIG90aGVyIHRocmVhZHMgKi8KKwkJdGFza191bmxvY2sobGVhZGVyKTsKKwkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJaWYgKHBpZF9hbGl2ZShsZWFkZXIpKSB7CisJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBsZWFkZXI7CisKKwkJCXdoaWxlICgodGFzayA9IG5leHRfdGhyZWFkKHRhc2spKSAhPSBsZWFkZXIpIHsKKwkJCQl0YXNrX2xvY2sodGFzayk7CisJCQkJZnMgPSB0YXNrLT5mczsKKwkJCQlpZiAoZnMpIHsKKwkJCQkJYXRvbWljX2luYygmZnMtPmNvdW50KTsKKwkJCQkJdGFza191bmxvY2sodGFzayk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQl0YXNrX3VubG9jayh0YXNrKTsKKwkJCX0KKwkJfQorCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJfQorCisJaWYgKGZzKSB7CisJCXJlYWRfbG9jaygmZnMtPmxvY2spOworCQkqbW50ID0gbW50Z2V0KGZzLT5yb290bW50KTsKKwkJKmRlbnRyeSA9IGRnZXQoZnMtPnJvb3QpOworCQlyZWFkX3VubG9jaygmZnMtPmxvY2spOworCQlyZXN1bHQgPSAwOworCQlwdXRfZnNfc3RydWN0KGZzKTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworCiAjZGVmaW5lIE1BWV9QVFJBQ0UodGFzaykgXAogCSh0YXNrID09IGN1cnJlbnQgfHwgXAogCSh0YXNrLT5wYXJlbnQgPT0gY3VycmVudCAmJiBcCkBAIC00NzEsMTQgKzUyNywxNCBAQAogCiAvKiBwZXJtaXNzaW9uIGNoZWNrcyAqLwogCi1zdGF0aWMgaW50IHByb2NfY2hlY2tfcm9vdChzdHJ1Y3QgaW5vZGUgKmlub2RlKQorLyogSWYgdGhlIHByb2Nlc3MgYmVpbmcgcmVhZCBpcyBzZXBhcmF0ZWQgYnkgY2hyb290IGZyb20gdGhlIHJlYWRpbmcgcHJvY2VzcywKKyAqIGRvbid0IGxldCB0aGUgcmVhZGVyIGFjY2VzcyB0aGUgdGhyZWFkcy4KKyAqLworc3RhdGljIGludCBwcm9jX2NoZWNrX2Nocm9vdChzdHJ1Y3QgZGVudHJ5ICpyb290LCBzdHJ1Y3QgdmZzbW91bnQgKnZmc21udCkKIHsKLQlzdHJ1Y3QgZGVudHJ5ICpkZSwgKmJhc2UsICpyb290OwotCXN0cnVjdCB2ZnNtb3VudCAqb3VyX3Zmc21udCwgKnZmc21udCwgKm1udDsKKwlzdHJ1Y3QgZGVudHJ5ICpkZSwgKmJhc2U7CisJc3RydWN0IHZmc21vdW50ICpvdXJfdmZzbW50LCAqbW50OwogCWludCByZXMgPSAwOwotCi0JaWYgKHByb2Nfcm9vdF9saW5rKGlub2RlLCAmcm9vdCwgJnZmc21udCkpIC8qIEV3d3cuLi4gKi8KLQkJcmV0dXJuIC1FTk9FTlQ7CiAJcmVhZF9sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CiAJb3VyX3Zmc21udCA9IG1udGdldChjdXJyZW50LT5mcy0+cm9vdG1udCk7CiAJYmFzZSA9IGRnZXQoY3VycmVudC0+ZnMtPnJvb3QpOwpAQCAtNTExLDYgKzU2NywxNiBAQAogCWdvdG8gZXhpdDsKIH0KIAorc3RhdGljIGludCBwcm9jX2NoZWNrX3Jvb3Qoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpyb290OworCXN0cnVjdCB2ZnNtb3VudCAqdmZzbW50OworCisJaWYgKHByb2Nfcm9vdF9saW5rKGlub2RlLCAmcm9vdCwgJnZmc21udCkpIC8qIEV3d3cuLi4gKi8KKwkJcmV0dXJuIC1FTk9FTlQ7CisJcmV0dXJuIHByb2NfY2hlY2tfY2hyb290KHJvb3QsIHZmc21udCk7Cit9CisKIHN0YXRpYyBpbnQgcHJvY19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKIAlpZiAoZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCBOVUxMKSAhPSAwKQpAQCAtNTE4LDYgKzU4NCwyMCBAQAogCXJldHVybiBwcm9jX2NoZWNrX3Jvb3QoaW5vZGUpOwogfQogCitzdGF0aWMgaW50IHByb2NfdGFza19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpyb290OworCXN0cnVjdCB2ZnNtb3VudCAqdmZzbW50OworCisJaWYgKGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgTlVMTCkgIT0gMCkKKwkJcmV0dXJuIC1FQUNDRVM7CisKKwlpZiAocHJvY190YXNrX3Jvb3RfbGluayhpbm9kZSwgJnJvb3QsICZ2ZnNtbnQpKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXJldHVybiBwcm9jX2NoZWNrX2Nocm9vdChyb290LCB2ZnNtbnQpOworfQorCiBleHRlcm4gc3RydWN0IHNlcV9vcGVyYXRpb25zIHByb2NfcGlkX21hcHNfb3A7CiBzdGF0aWMgaW50IG1hcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKQEAgLTU1OCw2ICs2MzgsNyBAQAogfTsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX01NVQogZXh0ZXJuIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcm9jX3BpZF9zbWFwc19vcDsKIHN0YXRpYyBpbnQgc21hcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKQEAgLTU3Niw2ICs2NTcsNyBAQAogCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAogCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCiB9OworI2VuZGlmCiAKIGV4dGVybiBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbW91bnRzX29wOwogc3RhdGljIGludCBtb3VudHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTE0MTksNyArMTUwMSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBwcm9jX3Rhc2tfaW5vZGVfb3BlcmF0aW9ucyA9IHsKIAkubG9va3VwCQk9IHByb2NfdGFza19sb29rdXAsCi0JLnBlcm1pc3Npb24JPSBwcm9jX3Blcm1pc3Npb24sCisJLnBlcm1pc3Npb24JPSBwcm9jX3Rhc2tfcGVybWlzc2lvbiwKIH07CiAKICNpZmRlZiBDT05GSUdfU0VDVVJJVFkKQEAgLTE2MDksMTAgKzE2OTEsMTIgQEAKIAkJY2FzZSBQUk9DX1RHSURfTU9VTlRTOgogCQkJaW5vZGUtPmlfZm9wID0gJnByb2NfbW91bnRzX29wZXJhdGlvbnM7CiAJCQlicmVhazsKKyNpZmRlZiBDT05GSUdfTU1VCiAJCWNhc2UgUFJPQ19USURfU01BUFM6CiAJCWNhc2UgUFJPQ19UR0lEX1NNQVBTOgogCQkJaW5vZGUtPmlfZm9wID0gJnByb2Nfc21hcHNfb3BlcmF0aW9uczsKIAkJCWJyZWFrOworI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZCiAJCWNhc2UgUFJPQ19USURfQVRUUjoKIAkJCWlub2RlLT5pX25saW5rID0gMjsKZGlmZiAtLWdpdCBhL2ZzL3Byb2Mvbm9tbXUuYyBiL2ZzL3Byb2Mvbm9tbXUuYwppbmRleCBmM2JmMDE2Li5jZmYxMGFiIDEwMDY0NAotLS0gYS9mcy9wcm9jL25vbW11LmMKKysrIGIvZnMvcHJvYy9ub21tdS5jCkBAIC05MSw2ICs5MSw3IEBACiAJCQluZXh0ID0gX3JiOwogCQkJYnJlYWs7CiAJCX0KKwkJcG9zLS07CiAJfQogCiAJcmV0dXJuIG5leHQ7CmRpZmYgLS1naXQgYS9mcy9yZWFkX3dyaXRlLmMgYi9mcy9yZWFkX3dyaXRlLmMKaW5kZXggYjYwMzI0YS4uYTA5MWVlNCAxMDA2NDQKLS0tIGEvZnMvcmVhZF93cml0ZS5jCisrKyBiL2ZzL3JlYWRfd3JpdGUuYwpAQCAtNDk5LDYgKzQ5OSw5IEBACiAJcmV0ID0gcndfdmVyaWZ5X2FyZWEodHlwZSwgZmlsZSwgcG9zLCB0b3RfbGVuKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKKwlyZXQgPSBzZWN1cml0eV9maWxlX3Blcm1pc3Npb24oZmlsZSwgdHlwZSA9PSBSRUFEID8gTUFZX1JFQUQgOiBNQVlfV1JJVEUpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OwogCiAJZm52ID0gTlVMTDsKIAlpZiAodHlwZSA9PSBSRUFEKSB7CmRpZmYgLS1naXQgYS9mcy9yZWxheWZzL2J1ZmZlcnMuYyBiL2ZzL3JlbGF5ZnMvYnVmZmVycy5jCmluZGV4IDJhYThlMjcuLjg0ZTIxZmYgMTAwNjQ0Ci0tLSBhL2ZzL3JlbGF5ZnMvYnVmZmVycy5jCisrKyBiL2ZzL3JlbGF5ZnMvYnVmZmVycy5jCkBAIC0xMDksNyArMTA5LDcgQEAKIAkJaWYgKHVubGlrZWx5KCFidWYtPnBhZ2VfYXJyYXlbaV0pKQogCQkJZ290byBkZXBvcHVsYXRlOwogCX0KLQltZW0gPSB2bWFwKGJ1Zi0+cGFnZV9hcnJheSwgbl9wYWdlcywgR0ZQX0tFUk5FTCwgUEFHRV9LRVJORUwpOworCW1lbSA9IHZtYXAoYnVmLT5wYWdlX2FycmF5LCBuX3BhZ2VzLCBWTV9NQVAsIFBBR0VfS0VSTkVMKTsKIAlpZiAoIW1lbSkKIAkJZ290byBkZXBvcHVsYXRlOwogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L2ttZW0uYyBiL2ZzL3hmcy9saW51eC0yLjYva21lbS5jCmluZGV4IDRiMTg0NTUuLmQyNjUzYjUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYva21lbS5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYva21lbS5jCkBAIC00NSw3ICs0NSw3IEBACiAKIAogdm9pZCAqCi1rbWVtX2FsbG9jKHNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZ3MpCitrbWVtX2FsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncykKIHsKIAlpbnQJCXJldHJpZXMgPSAwOwogCXVuc2lnbmVkIGludAlsZmxhZ3MgPSBrbWVtX2ZsYWdzX2NvbnZlcnQoZmxhZ3MpOwpAQCAtNjcsNyArNjcsNyBAQAogfQogCiB2b2lkICoKLWttZW1femFsbG9jKHNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZ3MpCitrbWVtX3phbGxvYyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpCiB7CiAJdm9pZAkqcHRyOwogCkBAIC05MCw3ICs5MCw3IEBACiAKIHZvaWQgKgoga21lbV9yZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IG5ld3NpemUsIHNpemVfdCBvbGRzaXplLAotCSAgICAgdW5zaWduZWQgaW50IF9fbm9jYXN0IGZsYWdzKQorCSAgICAgZ2ZwX3QgZmxhZ3MpCiB7CiAJdm9pZAkqbmV3OwogCkBAIC0xMDUsNyArMTA1LDcgQEAKIH0KIAogdm9pZCAqCi1rbWVtX3pvbmVfYWxsb2Moa21lbV96b25lX3QgKnpvbmUsIHVuc2lnbmVkIGludCBfX25vY2FzdCBmbGFncykKK2ttZW1fem9uZV9hbGxvYyhrbWVtX3pvbmVfdCAqem9uZSwgZ2ZwX3QgZmxhZ3MpCiB7CiAJaW50CQlyZXRyaWVzID0gMDsKIAl1bnNpZ25lZCBpbnQJbGZsYWdzID0ga21lbV9mbGFnc19jb252ZXJ0KGZsYWdzKTsKQEAgLTEyNCw3ICsxMjQsNyBAQAogfQogCiB2b2lkICoKLWttZW1fem9uZV96YWxsb2Moa21lbV96b25lX3QgKnpvbmUsIHVuc2lnbmVkIGludCBfX25vY2FzdCBmbGFncykKK2ttZW1fem9uZV96YWxsb2Moa21lbV96b25lX3QgKnpvbmUsIGdmcF90IGZsYWdzKQogewogCXZvaWQJKnB0cjsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi9rbWVtLmggYi9mcy94ZnMvbGludXgtMi42L2ttZW0uaAppbmRleCAxMDlmY2YyLi5lZTcwMTBmIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L2ttZW0uaAorKysgYi9mcy94ZnMvbGludXgtMi42L2ttZW0uaApAQCAtODEsNyArODEsNyBAQAogCSooTlNUQVRFUCkgPSAqKE9TVEFURVApOwlcCiB9IHdoaWxlICgwKQogCi1zdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50IGttZW1fZmxhZ3NfY29udmVydCh1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZ3MpCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50IGttZW1fZmxhZ3NfY29udmVydChnZnBfdCBmbGFncykKIHsKIAl1bnNpZ25lZCBpbnQJbGZsYWdzID0gX19HRlBfTk9XQVJOOwkvKiB3ZSdsbCByZXBvcnQgcHJvYmxlbXMsIGlmIG5lZWQgYmUgKi8KIApAQCAtMTI1LDEzICsxMjUsMTIgQEAKIAkJQlVHKCk7CiB9CiAKLWV4dGVybiB2b2lkCSAgICAqa21lbV96b25lX3phbGxvYyhrbWVtX3pvbmVfdCAqLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QpOwotZXh0ZXJuIHZvaWQJICAgICprbWVtX3pvbmVfYWxsb2Moa21lbV96b25lX3QgKiwgdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKK2V4dGVybiB2b2lkCSAgICAqa21lbV96b25lX3phbGxvYyhrbWVtX3pvbmVfdCAqLCBnZnBfdCk7CitleHRlcm4gdm9pZAkgICAgKmttZW1fem9uZV9hbGxvYyhrbWVtX3pvbmVfdCAqLCBnZnBfdCk7CiAKLWV4dGVybiB2b2lkCSAgICAqa21lbV9hbGxvYyhzaXplX3QsIHVuc2lnbmVkIGludCBfX25vY2FzdCk7Ci1leHRlcm4gdm9pZAkgICAgKmttZW1fcmVhbGxvYyh2b2lkICosIHNpemVfdCwgc2l6ZV90LAotCQkJCSAgdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKLWV4dGVybiB2b2lkCSAgICAqa21lbV96YWxsb2Moc2l6ZV90LCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QpOworZXh0ZXJuIHZvaWQJICAgICprbWVtX2FsbG9jKHNpemVfdCwgZ2ZwX3QpOworZXh0ZXJuIHZvaWQJICAgICprbWVtX3JlYWxsb2Modm9pZCAqLCBzaXplX3QsIHNpemVfdCwgZ2ZwX3QpOworZXh0ZXJuIHZvaWQJICAgICprbWVtX3phbGxvYyhzaXplX3QsIGdmcF90KTsKIGV4dGVybiB2b2lkICAgICAgICAga21lbV9mcmVlKHZvaWQgKiwgc2l6ZV90KTsKIAogdHlwZWRlZiBzdHJ1Y3Qgc2hyaW5rZXIgKmttZW1fc2hha2VyX3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2F0b21pYy5oCmluZGV4IDFiMzgzZTMuLjIwYWMzZDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2F0b21pYy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfQUxQSEFfQVRPTUlDX0gKICNkZWZpbmUgX0FMUEhBX0FUT01JQ19ICiAKKyNpbmNsdWRlIDxhc20vYmFycmllci5oPgorCiAvKgogICogQXRvbWljIG9wZXJhdGlvbnMgdGhhdCBDIGNhbid0IGd1YXJhbnRlZSB1cy4gIFVzZWZ1bCBmb3IKICAqIHJlc291cmNlIGNvdW50aW5nIGV0Yy4uLgpAQCAtMTAwLDE4ICsxMDIsMTkgQEAKIHN0YXRpYyBfX2lubGluZV9fIGxvbmcgYXRvbWljX2FkZF9yZXR1cm4oaW50IGksIGF0b21pY190ICogdikKIHsKIAlsb25nIHRlbXAsIHJlc3VsdDsKKwlzbXBfbWIoKTsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkiMToJbGRsX2wgJTAsJTFcbiIKIAkiCWFkZGwgJTAsJTMsJTJcbiIKIAkiCWFkZGwgJTAsJTMsJTBcbiIKIAkiCXN0bF9jICUwLCUxXG4iCiAJIgliZXEgJTAsMmZcbiIKLQkiCW1iXG4iCiAJIi5zdWJzZWN0aW9uIDJcbiIKIAkiMjoJYnIgMWJcbiIKIAkiLnByZXZpb3VzIgogCToiPSZyIiAodGVtcCksICI9bSIgKHYtPmNvdW50ZXIpLCAiPSZyIiAocmVzdWx0KQogCToiSXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKKwlzbXBfbWIoKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMjAsNTQgKzEyMyw1NyBAQAogc3RhdGljIF9faW5saW5lX18gbG9uZyBhdG9taWM2NF9hZGRfcmV0dXJuKGxvbmcgaSwgYXRvbWljNjRfdCAqIHYpCiB7CiAJbG9uZyB0ZW1wLCByZXN1bHQ7CisJc21wX21iKCk7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJIjE6CWxkcV9sICUwLCUxXG4iCiAJIglhZGRxICUwLCUzLCUyXG4iCiAJIglhZGRxICUwLCUzLCUwXG4iCiAJIglzdHFfYyAlMCwlMVxuIgogCSIJYmVxICUwLDJmXG4iCi0JIgltYlxuIgogCSIuc3Vic2VjdGlvbiAyXG4iCiAJIjI6CWJyIDFiXG4iCiAJIi5wcmV2aW91cyIKIAk6Ij0mciIgKHRlbXApLCAiPW0iICh2LT5jb3VudGVyKSwgIj0mciIgKHJlc3VsdCkKIAk6IklyIiAoaSksICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7CisJc21wX21iKCk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIF9faW5saW5lX18gbG9uZyBhdG9taWNfc3ViX3JldHVybihpbnQgaSwgYXRvbWljX3QgKiB2KQogewogCWxvbmcgdGVtcCwgcmVzdWx0OworCXNtcF9tYigpOwogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCSIxOglsZGxfbCAlMCwlMVxuIgogCSIJc3VibCAlMCwlMywlMlxuIgogCSIJc3VibCAlMCwlMywlMFxuIgogCSIJc3RsX2MgJTAsJTFcbiIKIAkiCWJlcSAlMCwyZlxuIgotCSIJbWJcbiIKIAkiLnN1YnNlY3Rpb24gMlxuIgogCSIyOgliciAxYlxuIgogCSIucHJldmlvdXMiCiAJOiI9JnIiICh0ZW1wKSwgIj1tIiAodi0+Y291bnRlciksICI9JnIiIChyZXN1bHQpCiAJOiJJciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOworCXNtcF9tYigpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBfX2lubGluZV9fIGxvbmcgYXRvbWljNjRfc3ViX3JldHVybihsb25nIGksIGF0b21pYzY0X3QgKiB2KQogewogCWxvbmcgdGVtcCwgcmVzdWx0OworCXNtcF9tYigpOwogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCSIxOglsZHFfbCAlMCwlMVxuIgogCSIJc3VicSAlMCwlMywlMlxuIgogCSIJc3VicSAlMCwlMywlMFxuIgogCSIJc3RxX2MgJTAsJTFcbiIKIAkiCWJlcSAlMCwyZlxuIgotCSIJbWJcbiIKIAkiLnN1YnNlY3Rpb24gMlxuIgogCSIyOgliciAxYlxuIgogCSIucHJldmlvdXMiCiAJOiI9JnIiICh0ZW1wKSwgIj1tIiAodi0+Y291bnRlciksICI9JnIiIChyZXN1bHQpCiAJOiJJciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOworCXNtcF9tYigpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2JhcnJpZXIuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2JhcnJpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjljODNmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvYmFycmllci5oCkBAIC0wLDAgKzEsMzQgQEAKKyNpZm5kZWYgX19CQVJSSUVSX0gKKyNkZWZpbmUgX19CQVJSSUVSX0gKKworI2RlZmluZSBtYigpIFwKK19fYXNtX18gX192b2xhdGlsZV9fKCJtYiI6IDogOiJtZW1vcnkiKQorCisjZGVmaW5lIHJtYigpIFwKK19fYXNtX18gX192b2xhdGlsZV9fKCJtYiI6IDogOiJtZW1vcnkiKQorCisjZGVmaW5lIHdtYigpIFwKK19fYXNtX18gX192b2xhdGlsZV9fKCJ3bWIiOiA6IDoibWVtb3J5IikKKworI2RlZmluZSByZWFkX2JhcnJpZXJfZGVwZW5kcygpIFwKK19fYXNtX18gX192b2xhdGlsZV9fKCJtYiI6IDogOiJtZW1vcnkiKQorCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBzbXBfbWIoKQltYigpCisjZGVmaW5lIHNtcF9ybWIoKQlybWIoKQorI2RlZmluZSBzbXBfd21iKCkJd21iKCkKKyNkZWZpbmUgc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCkJcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQorI2Vsc2UKKyNkZWZpbmUgc21wX21iKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9ybWIoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3dtYigpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQliYXJyaWVyKCkKKyNlbmRpZgorCisjZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKSBcCitkbyB7IHZhciA9IHZhbHVlOyBtYigpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHNldF93bWIodmFyLCB2YWx1ZSkgXAorZG8geyB2YXIgPSB2YWx1ZTsgd21iKCk7IH0gd2hpbGUgKDApCisKKyNlbmRpZgkJLyogX19CQVJSSUVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2NvbXBpbGVyLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9jb21waWxlci5oCmluZGV4IDM5OWMzM2IuLjBhNGE4YjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL2NvbXBpbGVyLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvY29tcGlsZXIuaApAQCAtOTgsNiArOTgsOSBAQAogI3VuZGVmIGlubGluZQogI3VuZGVmIF9faW5saW5lX18KICN1bmRlZiBfX2lubGluZQotCisjaWYgX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSAxIHx8IF9fR05VQ19fID4gMworI3VuZGVmIF9fYWx3YXlzX2lubGluZQorI2RlZmluZSBfX2Fsd2F5c19pbmxpbmUJCWlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKKyNlbmRpZgogCiAjZW5kaWYgLyogX19BTFBIQV9DT01QSUxFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9mdXRleC5oIGIvaW5jbHVkZS9hc20tYWxwaGEvZnV0ZXguaAppbmRleCAyY2FjNWVjLi45ZmVmZjRjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvZnV0ZXguaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9mdXRleC5oCkBAIC0xNCw3ICsxNCw3IEBACiAJaW50IGNtcCA9IChlbmNvZGVkX29wID4+IDI0KSAmIDE1OwogCWludCBvcGFyZyA9IChlbmNvZGVkX29wIDw8IDgpID4+IDIwOwogCWludCBjbXBhcmcgPSAoZW5jb2RlZF9vcCA8PCAyMCkgPj4gMjA7Ci0JaW50IG9sZHZhbCA9IDAsIHJldCwgdGVtOworCWludCBvbGR2YWwgPSAwLCByZXQ7CiAJaWYgKGVuY29kZWRfb3AgJiAoRlVURVhfT1BfT1BBUkdfU0hJRlQgPDwgMjgpKQogCQlvcGFyZyA9IDEgPDwgb3Bhcmc7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvc3lzdGVtLmgKaW5kZXggYmRiNGQ2Ni4uMDUwZTg2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvc3lzdGVtLmgKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3BhbC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KIAogLyoKICAqIFN5c3RlbSBkZWZpbmVzLi4gTm90ZSB0aGF0IHRoaXMgaXMgaW5jbHVkZWQgYm90aCBmcm9tIC5jIGFuZCAuUwpAQCAtMTM5LDM2ICsxNDAsNiBAQAogc3RydWN0IHRhc2tfc3RydWN0OwogZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqYWxwaGFfc3dpdGNoX3RvKHVuc2lnbmVkIGxvbmcsIHN0cnVjdCB0YXNrX3N0cnVjdCopOwogCi0jZGVmaW5lIG1iKCkgXAotX19hc21fXyBfX3ZvbGF0aWxlX18oIm1iIjogOiA6Im1lbW9yeSIpCi0KLSNkZWZpbmUgcm1iKCkgXAotX19hc21fXyBfX3ZvbGF0aWxlX18oIm1iIjogOiA6Im1lbW9yeSIpCi0KLSNkZWZpbmUgd21iKCkgXAotX19hc21fXyBfX3ZvbGF0aWxlX18oIndtYiI6IDogOiJtZW1vcnkiKQotCi0jZGVmaW5lIHJlYWRfYmFycmllcl9kZXBlbmRzKCkgXAotX19hc21fXyBfX3ZvbGF0aWxlX18oIm1iIjogOiA6Im1lbW9yeSIpCi0KLSNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIHNtcF9tYigpCW1iKCkKLSNkZWZpbmUgc21wX3JtYigpCXJtYigpCi0jZGVmaW5lIHNtcF93bWIoKQl3bWIoKQotI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlyZWFkX2JhcnJpZXJfZGVwZW5kcygpCi0jZWxzZQotI2RlZmluZSBzbXBfbWIoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX3JtYigpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfd21iKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpCWJhcnJpZXIoKQotI2VuZGlmCi0KLSNkZWZpbmUgc2V0X21iKHZhciwgdmFsdWUpIFwKLWRvIHsgdmFyID0gdmFsdWU7IG1iKCk7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgc2V0X3dtYih2YXIsIHZhbHVlKSBcCi1kbyB7IHZhciA9IHZhbHVlOyB3bWIoKTsgfSB3aGlsZSAoMCkKLQogI2RlZmluZSBpbWIoKSBcCiBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImNhbGxfcGFsICUwICNpbWIiIDogOiAiaSIgKFBBTF9pbWIpIDogIm1lbW9yeSIpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFhZWMyMDAwL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYWFlYzIwMDAvbWVtb3J5LmgKaW5kZXggNjgxYjZhNi4uNzljOTA4MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYWFlYzIwMDAvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYWFlYzIwMDAvbWVtb3J5LmgKQEAgLTY0LDEwICs2NCw2IEBACiAjZGVmaW5lIE5PREVfTUFYX01FTV9TSElGVAkyNgogI2RlZmluZSBOT0RFX01BWF9NRU1fU0laRQkoMSA8PCBOT0RFX01BWF9NRU1fU0hJRlQpCiAKLSNlbHNlCi0KLSNkZWZpbmUgUEZOX1RPX05JRChhZGRyKQkoMCkKLQogI2VuZGlmIC8qIENPTkZJR19ESVNDT05USUdNRU0gKi8KIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTUVNT1JZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaDcyMHgvc3lzdGVtLmgKaW5kZXggMGIwMjVlMi4uMDllZGE4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaDcyMHgvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaDcyMHgvc3lzdGVtLmgKQEAgLTE3LDkgKzE3LDExIEBACiBzdGF0aWMgdm9pZCBhcmNoX2lkbGUodm9pZCkKIHsKIAlDUFVfUkVHIChQTVVfQkFTRSwgUE1VX01PREUpID0gUE1VX01PREVfSURMRTsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkibW92CXIwLCByMFxuXHQiCi0JIm1vdglyMCwgcjAiKTsKKwlub3AoKTsKKwlub3AoKTsKKwlDUFVfUkVHIChQTVVfQkFTRSwgUE1VX01PREUpID0gUE1VX01PREVfUlVOOworCW5vcCgpOworCW5vcCgpOwogfQogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9pbXgtcmVncy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L2lteC1yZWdzLmgKaW5kZXggOTNiODQwZS4uYTY5MTJiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L2lteC1yZWdzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L2lteC1yZWdzLmgKQEAgLTc2LDYgKzc2LDcgQEAKICNkZWZpbmUgR1BJT19QSU5fTUFTSyAweDFmCiAjZGVmaW5lIEdQSU9fUE9SVF9NQVNLICgweDMgPDwgNSkKIAorI2RlZmluZSBHUElPX1BPUlRfU0hJRlQgNQogI2RlZmluZSBHUElPX1BPUlRBICgwPDw1KQogI2RlZmluZSBHUElPX1BPUlRCICgxPDw1KQogI2RlZmluZSBHUElPX1BPUlRDICgyPDw1KQpAQCAtODgsMjQgKzg5LDM3IEBACiAjZGVmaW5lIEdQSU9fUEYgICAgKDA8PDkpCiAjZGVmaW5lIEdQSU9fQUYgICAgKDE8PDkpCiAKKyNkZWZpbmUgR1BJT19PQ1JfU0hJRlQgMTAKICNkZWZpbmUgR1BJT19PQ1JfTUFTSyAoMzw8MTApCiAjZGVmaW5lIEdQSU9fQUlOICAgKDA8PDEwKQogI2RlZmluZSBHUElPX0JJTiAgICgxPDwxMCkKICNkZWZpbmUgR1BJT19DSU4gICAoMjw8MTApCi0jZGVmaW5lIEdQSU9fR1BJTyAgKDM8PDEwKQorI2RlZmluZSBHUElPX0RSICAgICgzPDwxMCkKIAotI2RlZmluZSBHUElPX0FPVVQgICgxPDwxMikKLSNkZWZpbmUgR1BJT19CT1VUICAoMTw8MTMpCisjZGVmaW5lIEdQSU9fQU9VVF9TSElGVCAxMgorI2RlZmluZSBHUElPX0FPVVRfTUFTSyAoMzw8MTIpCisjZGVmaW5lIEdQSU9fQU9VVCAgICAgKDA8PDEyKQorI2RlZmluZSBHUElPX0FPVVRfSVNSICgxPDwxMikKKyNkZWZpbmUgR1BJT19BT1VUXzAgICAoMjw8MTIpCisjZGVmaW5lIEdQSU9fQU9VVF8xICAgKDM8PDEyKQorCisjZGVmaW5lIEdQSU9fQk9VVF9TSElGVCAxNAorI2RlZmluZSBHUElPX0JPVVRfTUFTSyAoMzw8MTQpCisjZGVmaW5lIEdQSU9fQk9VVCAgICAgICgwPDwxNCkKKyNkZWZpbmUgR1BJT19CT1VUX0lTUiAgKDE8PDE0KQorI2RlZmluZSBHUElPX0JPVVRfMCAgICAoMjw8MTQpCisjZGVmaW5lIEdQSU9fQk9VVF8xICAgICgzPDwxNCkKKworI2RlZmluZSBHUElPX0dJVVMgICAgICAoMTw8MTYpCiAKIC8qIGFzc2lnbmVtZW50cyBmb3IgR1BJTyBhbHRlcm5hdGUvcHJpbWFyeSBmdW5jdGlvbnMgKi8KIAogLyogRklYTUU6IFRoaXMgbGlzdCBpcyBub3QgY29tcGxldGVkLiBUaGUgY29ycmVjdCBkaXJlY3Rpb25zIGFyZQogICogbWlzc2luZyBvbiBzb21lIChtYW55KSBwaW5zCiAgKi8KLSNkZWZpbmUgUEEwX1BGX0EyNCAgICAgICAgICAgKCBHUElPX1BPUlRBIHwgR1BJT19QRiB8IDAgKQotI2RlZmluZSBQQTBfQUlOX1NQSTJfQ0xLICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fQUlOIHwgMCApCisjZGVmaW5lIFBBMF9BSU5fU1BJMl9DTEsgICAgICggR1BJT19HSVVTIHwgR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgMCApCiAjZGVmaW5lIFBBMF9BRl9FVE1UUkFDRVNZTkMgICggR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAwICkKLSNkZWZpbmUgUEExX0FPVVRfU1BJMl9SWEQgICAgKCBHUElPX1BPUlRBIHwgR1BJT19JTiB8IEdQSU9fQU9VVCB8IDEgKQorI2RlZmluZSBQQTFfQU9VVF9TUEkyX1JYRCAgICAoIEdQSU9fR0lVUyB8IEdQSU9fUE9SVEEgfCBHUElPX0lOIHwgMSApCiAjZGVmaW5lIFBBMV9QRl9USU4gICAgICAgICAgICggR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAxICkKICNkZWZpbmUgUEEyX1BGX1BXTTAgICAgICAgICAgKCBHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMiApCiAjZGVmaW5lIFBBM19QRl9DU0lfTUNMSyAgICAgICggR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAzICkKQEAgLTEyMyw3ICsxMzcsNyBAQAogI2RlZmluZSBQQTE1X1BGX0kyQ19TREEgICAgICAoIEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxNSApCiAjZGVmaW5lIFBBMTZfUEZfSTJDX1NDTCAgICAgICggR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE2ICkKICNkZWZpbmUgUEExN19BRl9FVE1UUkFDRVBLVDQgKCBHUElPX1BPUlRBIHwgR1BJT19BRiB8IDE3ICkKLSNkZWZpbmUgUEExN19BSU5fU1BJMl9TUyAgICAgKCBHUElPX1BPUlRBIHwgR1BJT19BSU4gfCAxNyApCisjZGVmaW5lIFBBMTdfQUlOX1NQSTJfU1MgICAgICggR1BJT19HSVVTIHwgR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgMTcgKQogI2RlZmluZSBQQTE4X0FGX0VUTVRSQUNFUEtUNSAoIEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTggKQogI2RlZmluZSBQQTE5X0FGX0VUTVRSQUNFUEtUNiAoIEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTkgKQogI2RlZmluZSBQQTIwX0FGX0VUTVRSQUNFUEtUNyAoIEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjAgKQpAQCAtMTkxLDE5ICsyMDUsMjcgQEAKICNkZWZpbmUgUEMxNV9QRl9TUEkxX1NTICAgICAgKCBHUElPX1BPUlRDIHwgR1BJT19QRiB8IDE1ICkKICNkZWZpbmUgUEMxNl9QRl9TUEkxX01JU08gICAgKCBHUElPX1BPUlRDIHwgR1BJT19QRiB8IDE2ICkKICNkZWZpbmUgUEMxN19QRl9TUEkxX01PU0kgICAgKCBHUElPX1BPUlRDIHwgR1BJT19QRiB8IDE3ICkKKyNkZWZpbmUgUEMyNF9CSU5fVUFSVDNfUkkgICAgKCBHUElPX0dJVVMgfCBHUElPX1BPUlRDIHwgR1BJT19PVVQgfCBHUElPX0JJTiB8IDI0ICkKKyNkZWZpbmUgUEMyNV9CSU5fVUFSVDNfRFNSICAgKCBHUElPX0dJVVMgfCBHUElPX1BPUlRDIHwgR1BJT19PVVQgfCBHUElPX0JJTiB8IDI1ICkKKyNkZWZpbmUgUEMyNl9BT1VUX1VBUlQzX0RUUiAgKCBHUElPX0dJVVMgfCBHUElPX1BPUlRDIHwgR1BJT19JTiB8IDI2ICkKKyNkZWZpbmUgUEMyN19CSU5fVUFSVDNfRENEICAgKCBHUElPX0dJVVMgfCBHUElPX1BPUlRDIHwgR1BJT19PVVQgfCBHUElPX0JJTiB8IDI3ICkKKyNkZWZpbmUgUEMyOF9CSU5fVUFSVDNfQ1RTICAgKCBHUElPX0dJVVMgfCBHUElPX1BPUlRDIHwgR1BJT19PVVQgfCBHUElPX0JJTiB8IDI4ICkKKyNkZWZpbmUgUEMyOV9BT1VUX1VBUlQzX1JUUyAgKCBHUElPX0dJVVMgfCBHUElPX1BPUlRDIHwgR1BJT19JTiB8IDI5ICkKKyNkZWZpbmUgUEMzMF9CSU5fVUFSVDNfVFggICAgKCBHUElPX0dJVVMgfCBHUElPX1BPUlRDIHwgR1BJT19CSU4gfCAzMCApCisjZGVmaW5lIFBDMzFfQU9VVF9VQVJUM19SWCAgICggR1BJT19HSVVTIHwgR1BJT19QT1JUQyB8IEdQSU9fSU4gfCAzMSkKICNkZWZpbmUgUEQ2X1BGX0xTQ0xLICAgICAgICAgKCBHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgNiApCiAjZGVmaW5lIFBEN19QRl9SRVYgICAgICAgICAgICggR1BJT19QT1JURCB8IEdQSU9fUEYgfCA3ICkKLSNkZWZpbmUgUEQ3X0FGX1VBUlQyX0RUUiAgICAgKCBHUElPX1BPUlREIHwgR1BJT19JTiB8IEdQSU9fQUYgfCA3ICkKLSNkZWZpbmUgUEQ3X0FJTl9TUEkyX1NDTEsgICAgKCBHUElPX1BPUlREIHwgR1BJT19BSU4gfCA3ICkKKyNkZWZpbmUgUEQ3X0FGX1VBUlQyX0RUUiAgICAgKCBHUElPX0dJVVMgfCBHUElPX1BPUlREIHwgR1BJT19JTiB8IEdQSU9fQUYgfCA3ICkKKyNkZWZpbmUgUEQ3X0FJTl9TUEkyX1NDTEsgICAgKCBHUElPX0dJVVMgfCBHUElPX1BPUlREIHwgR1BJT19BSU4gfCA3ICkKICNkZWZpbmUgUEQ4X1BGX0NMUyAgICAgICAgICAgKCBHUElPX1BPUlREIHwgR1BJT19QRiB8IDggKQogI2RlZmluZSBQRDhfQUZfVUFSVDJfRENEICAgICAoIEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fQUYgfCA4ICkKLSNkZWZpbmUgUEQ4X0FJTl9TUEkyX1NTICAgICAgKCBHUElPX1BPUlREIHwgR1BJT19BSU4gfCA4ICkKKyNkZWZpbmUgUEQ4X0FJTl9TUEkyX1NTICAgICAgKCBHUElPX0dJVVMgfCBHUElPX1BPUlREIHwgR1BJT19BSU4gfCA4ICkKICNkZWZpbmUgUEQ5X1BGX1BTICAgICAgICAgICAgKCBHUElPX1BPUlREIHwgR1BJT19QRiB8IDkgKQogI2RlZmluZSBQRDlfQUZfVUFSVDJfUkkgICAgICAoIEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fQUYgfCA5ICkKLSNkZWZpbmUgUEQ5X0FPVVRfU1BJMl9SWEQgICAgKCBHUElPX1BPUlREIHwgR1BJT19JTiB8IEdQSU9fQU9VVCB8IDkgKQorI2RlZmluZSBQRDlfQU9VVF9TUEkyX1JYRCAgICAoIEdQSU9fR0lVUyB8IEdQSU9fUE9SVEQgfCBHUElPX0lOIHwgOSApCiAjZGVmaW5lIFBEMTBfUEZfU1BMX1NQUiAgICAgICggR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDEwICkKICNkZWZpbmUgUEQxMF9BRl9VQVJUMl9EU1IgICAgKCBHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX0FGIHwgMTAgKQotI2RlZmluZSBQRDEwX0FJTl9TUEkyX1RYRCAgICAoIEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fQUlOIHwgMTAgKQorI2RlZmluZSBQRDEwX0FJTl9TUEkyX1RYRCAgICAoIEdQSU9fR0lVUyB8IEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IDEwICkKICNkZWZpbmUgUEQxMV9QRl9DT05UUkFTVCAgICAgKCBHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTEgKQogI2RlZmluZSBQRDEyX1BGX0FDRF9PRSAgICAgICAoIEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxMiApCiAjZGVmaW5lIFBEMTNfUEZfTFBfSFNZTkMgICAgICggR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDEzICkKQEAgLTIyNSw3ICsyNDcsNyBAQAogI2RlZmluZSBQRDI5X1BGX0xEMTQgICAgICAgICAoIEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyOSApCiAjZGVmaW5lIFBEMzBfUEZfTEQxNSAgICAgICAgICggR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDMwICkKICNkZWZpbmUgUEQzMV9QRl9UTVIyT1VUICAgICAgKCBHUElPX1BPUlREIHwgR1BJT19QRiB8IDMxICkKLSNkZWZpbmUgUEQzMV9CSU5fU1BJMl9UWEQgICAgKCBHUElPX1BPUlREIHwgR1BJT19CSU4gfCAzMSApCisjZGVmaW5lIFBEMzFfQklOX1NQSTJfVFhEICAgICggR1BJT19HSVVTIHwgR1BJT19QT1JURCB8IEdQSU9fQklOIHwgMzEgKQogCiAvKgogICogUFdNIGNvbnRyb2xsZXIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9tZW1vcnkuaAppbmRleCBkYzQ3MzVjLi40NTM1MWY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L21lbW9yeS5oCkBAIC0zNiw2ICszNiw0IEBACiAKICNlbmRpZgogCi0jZGVmaW5lIFBGTl9UT19OSUQoYWRkcikJKDApCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9peHAyMDAwLXJlZ3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvaXhwMjAwMC1yZWdzLmgKaW5kZXggNzU2MjNmOC4uMzJhZWNlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9peHAyMDAwLXJlZ3MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL2l4cDIwMDAtcmVncy5oCkBAIC0zNzAsOCArMzcwLDYgQEAKICNkZWZpbmUgR0xPQkFMX1JFR19CQVNFCQkJKElYUDIwMDBfR0xPQkFMX1JFR19WSVJUX0JBU0UgKyAweDBhMDApCiAjZGVmaW5lIEdMT0JBTF9SRUcoeCkJCQkodm9sYXRpbGUgdW5zaWduZWQgbG9uZyopKEdMT0JBTF9SRUdfQkFTRSB8ICh4KSkKIAotI2RlZmluZSBJWFAyMDAwX1BST0RfSUQJCQlHTE9CQUxfUkVHKDB4MDApCi0KICNkZWZpbmUgSVhQMjAwMF9NQUpfUFJPRF9UWVBFX01BU0sJMHgwMDFGMDAwMAogI2RlZmluZSBJWFAyMDAwX01BSl9QUk9EX1RZUEVfSVhQMjAwMAkweDAwMDAwMDAwCiAjZGVmaW5lIElYUDIwMDBfTUlOX1BST0RfVFlQRV9NQVNLIAkweDAwMDBGRjAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL3BsYXRmb3JtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL3BsYXRmb3JtLmgKaW5kZXggYzBjYWYzZS4uYWJkY2Y1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9wbGF0Zm9ybS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvcGxhdGZvcm0uaApAQCAtMzEsMjAgKzMxLDI0IEBACiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CQkvKiBQaWNrdXAgbG9jYWxfaXJxXyBmdW5jdGlvbnMgKi8KIAotc3RhdGljIGlubGluZSB2b2lkIGl4cDIwMDBfcmVnX3dyaXRlKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnJlZywgdW5zaWduZWQgbG9uZyB2YWwpCitzdGF0aWMgaW5saW5lIHZvaWQgaXhwMjAwMF9yZWdfd3JpdGUodm9sYXRpbGUgdm9pZCAqcmVnLCB1bnNpZ25lZCBsb25nIHZhbCkKIHsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGR1bW15OworCXVuc2lnbmVkIGxvbmcgZHVtbXk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkqcmVnID0gdmFsOworCSooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilyZWcpID0gdmFsOwogCWJhcnJpZXIoKTsKLQlkdW1teSA9ICpyZWc7CisJZHVtbXkgPSAqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopcmVnKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAjZWxzZQotI2RlZmluZQlpeHAyMDAwX3JlZ193cml0ZShyZWcsIHZhbCkgKCpyZWcgPSB2YWwpCitzdGF0aWMgaW5saW5lIHZvaWQgaXhwMjAwMF9yZWdfd3JpdGUodm9sYXRpbGUgdm9pZCAqcmVnLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopcmVnKSA9IHZhbDsKK30KICNlbmRpZgkvKiBJWERQMjQwMCB8fCBJWERQMjQwMSAqLworI2RlZmluZSBpeHAyMDAwX3JlZ19yZWFkKHJlZykJKCooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilyZWcpKQogCiAvKgogICogQm9hcmRzIG1heSBtdWx0aXBsZXggZGlmZmVyZW50IGRldmljZXMgb24gdGhlIDJuZCBjaGFubmVsIG9mIApAQCAtODQsNyArODgsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGl4cDIwMDBfaGFzX2Jyb2tlbl9zbG93cG9ydCh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgaWQgPSAqSVhQMjAwMF9QUk9EX0lEOworCXVuc2lnbmVkIGxvbmcgaWQgPSAqSVhQMjAwMF9QUk9EVUNUX0lEOwogCXVuc2lnbmVkIGxvbmcgaWRfcHJvZCA9IGlkICYgKElYUDIwMDBfTUFKX1BST0RfVFlQRV9NQVNLIHwKIAkJCQkgICAgICBJWFAyMDAwX01JTl9QUk9EX1RZUEVfTUFTSyk7CiAJcmV0dXJuICgoKGlkX3Byb2QgPT0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2VudHJ5LW1hY3JvLlMKaW5kZXggNDU1ZGE2NC4uMzIzYjBiYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2VudHJ5LW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2VudHJ5LW1hY3JvLlMKQEAgLTE1LDI1ICsxNSwyNiBAQAogCQlsZHIJXGlycXN0YXQsID0oSVhQNFhYX0lOVENfQkFTRV9WSVJUK0lYUDRYWF9JQ0lQX09GRlNFVCkKIAkJbGRyCVxpcnFzdGF0LCBbXGlycXN0YXRdCQlAIGdldCBpbnRlcnJ1cHRzCiAJCWNtcAlcaXJxc3RhdCwgIzAKLQkJYmVxCTEwMDFmCisJCWJlcQkxMDAxZgkJCQlAIHVwcGVyIElSUT8KIAkJY2x6ICAgICBcaXJxbnIsIFxpcnFzdGF0CiAJCW1vdiAgICAgXGJhc2UsICMzMQotCQlzdWJzICAgIFxpcnFuciwgXGJhc2UsIFxpcnFucgorCQlzdWIgICAgIFxpcnFuciwgXGJhc2UsIFxpcnFucgorCQliCTEwMDJmCQkJCUAgbG93ZXIgSVJRIGJlaW5nCisJCQkJCQkJQCBoYW5kbGVkCiAKIDEwMDE6CiAJCS8qCiAJCSAqIElYUDQ2NSBoYXMgYW4gdXBwZXIgSVJRIHN0YXR1cyByZWdpc3RlcgogCQkgKi8KICNpZiBkZWZpbmVkKENPTkZJR19DUFVfSVhQNDZYKQotCQlibmUgCTEwMDJmCiAJCWxkcglcaXJxc3RhdCwgPShJWFA0WFhfSU5UQ19CQVNFX1ZJUlQrSVhQNFhYX0lDSVAyX09GRlNFVCkKIAkJbGRyCVxpcnFzdGF0LCBbXGlycXN0YXRdCQlAIGdldCB1cHBlciBpbnRlcnJ1cHRzCiAJCW1vdglcaXJxbnIsICM2MwogCQljbHoJXGlycXN0YXQsIFxpcnFzdGF0CiAgCQljbXAJXGlycXN0YXQsICMzMgogCQlzdWJuZQlcaXJxbnIsIFxpcnFuciwgXGlycXN0YXQKLTEwMDI6CiAjZW5kaWYKKzEwMDI6CiAJCS5lbmRtCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaGFyZHdhcmUuaAppbmRleCA0YWM5NjRiLi41NWQ4NWVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaGFyZHdhcmUuaApAQCAtMjcsNyArMjcsNyBAQAogCiAjZGVmaW5lIHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKQkxCiAKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfSVhQNDY1KSAmJiAhZGVmaW5lZChfX0FTU0VNQkxZX18pCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0lYUDQ2WCkgJiYgIWRlZmluZWQoX19BU1NFTUJMWV9fKQogZXh0ZXJuIHVuc2lnbmVkIGludCBwcm9jZXNzb3JfaWQ7CiAjZGVmaW5lIGNwdV9pc19peHA0NjUoKSAoKHByb2Nlc3Nvcl9pZCAmIDB4ZmZmZmZmYzApID09IDB4NjkwNTQyMDApCiAjZWxzZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L3BsYXRmb3JtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvcGxhdGZvcm0uaAppbmRleCBkMTNlZTdmLi5mMTRlZDYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvcGxhdGZvcm0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvcGxhdGZvcm0uaApAQCAtOTMsNyArOTMsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19saW5lX2NvbmZpZyh1OCBsaW5lLCB1MzIgZGlyZWN0aW9uKQogewotCWlmIChkaXJlY3Rpb24gPT0gSVhQNFhYX0dQSU9fT1VUKQorCWlmIChkaXJlY3Rpb24gPT0gSVhQNFhYX0dQSU9fSU4pCiAJCSpJWFA0WFhfR1BJT19HUE9FUiB8PSAoMSA8PCBsaW5lKTsKIAllbHNlCiAJCSpJWFA0WFhfR1BJT19HUE9FUiAmPSB+KDEgPDwgbGluZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9tZW1vcnkuaAppbmRleCA3ZTJmZWEzLi5jNjUwZTZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L21lbW9yeS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvbWVtb3J5LmgKQEAgLTg1LDEwICs4NSw2IEBACiAgICAgICAgKCgodW5zaWduZWQgbG9uZykoYWRkcikgJiAweDAxZmZmZmZmKSA+PiBQQUdFX1NISUZUKQogIyBlbmRpZgogCi0jZWxzZQotCi0jIGRlZmluZSBQRk5fVE9fTklEKGFkZHIpCSgwKQotCiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tZW1vcnkuaAppbmRleCA4NGY4MWUzLi5lZjMyZDYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21lbW9yeS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWVtb3J5LmgKQEAgLTg2LDYgKzg2LDUgQEAKIAogI2VuZGlmCS8qIENPTkZJR19BUkNIX09NQVAxNTEwICovCiAKLSNkZWZpbmUgUEhZU19UT19OSUQoYWRkcikgKDApCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL21lbW9yeS5oCmluZGV4IDIxN2E4MGIuLjU4YmFkOTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvbWVtb3J5LmgKQEAgLTY3LDEwICs2Nyw2IEBACiAjZGVmaW5lIExPQ0FMX01BUF9OUihhZGRyKSBcCiAJKCgodW5zaWduZWQgbG9uZykoYWRkcikgJiAweDAzZmZmZmZmKSA+PiBQQUdFX1NISUZUKQogCi0jZWxzZQotCi0jZGVmaW5lIFBGTl9UT19OSUQoYWRkcikJKDApCi0KICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9wb29kbGUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9wb29kbGUuaAppbmRleCA1OGJkYTlkLi42YjVhYzUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcG9vZGxlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3Bvb2RsZS5oCkBAIC0zNywyNCArMzcsMjUgQEAKICNkZWZpbmUgUE9PRExFX0dQSU9fblNEX0RFVEVDVAkJKDkpCiAjZGVmaW5lIFBPT0RMRV9HUElPX01BSU5fQkFUX0xPVwkoMTMpCiAjZGVmaW5lIFBPT0RMRV9HUElPX0JBVF9DT1ZFUgkJKDEzKQorI2RlZmluZSBQT09ETEVfR1BJT19VU0JfUFVMTFVQCQkoMjApCiAjZGVmaW5lIFBPT0RMRV9HUElPX0FEQ19URU1QX09OCQkoMjEpCiAjZGVmaW5lIFBPT0RMRV9HUElPX0JZUEFTU19PTgkJKDM2KQogI2RlZmluZSBQT09ETEVfR1BJT19DSFJHX09OCQkoMzgpCiAjZGVmaW5lIFBPT0RMRV9HUElPX0NIUkdfRlVMTAkJKDE2KQogCiAvKiBQWEEgR1BJT3MgKi8KLSNkZWZpbmUgUE9PRExFX0lSUV9HUElPX09OX0tFWQkJSVJRX0dQSU8wCi0jZGVmaW5lIFBPT0RMRV9JUlFfR1BJT19BQ19JTgkJSVJRX0dQSU8xCi0jZGVmaW5lIFBPT0RMRV9JUlFfR1BJT19IUF9JTgkJSVJRX0dQSU80Ci0jZGVmaW5lIFBPT0RMRV9JUlFfR1BJT19DTwkJSVJRX0dQSU8xNgotI2RlZmluZSBQT09ETEVfSVJRX0dQSU9fVFBfSU5UCQlJUlFfR1BJTzUKLSNkZWZpbmUgUE9PRExFX0lSUV9HUElPX1dBS0VVUAkJSVJRX0dQSU8xMQotI2RlZmluZSBQT09ETEVfSVJRX0dQSU9fR0FfSU5UCQlJUlFfR1BJTzEwCi0jZGVmaW5lIFBPT0RMRV9JUlFfR1BJT19DRl9JUlEJCUlSUV9HUElPMTcKLSNkZWZpbmUgUE9PRExFX0lSUV9HUElPX0NGX0NECQlJUlFfR1BJTzE0Ci0jZGVmaW5lIFBPT0RMRV9JUlFfR1BJT19uU0RfSU5UCQlJUlFfR1BJTzgKLSNkZWZpbmUgUE9PRExFX0lSUV9HUElPX25TRF9ERVRFQ1QJSVJRX0dQSU85Ci0jZGVmaW5lIFBPT0RMRV9JUlFfR1BJT19NQUlOX0JBVF9MT1cJSVJRX0dQSU8xMworI2RlZmluZSBQT09ETEVfSVJRX0dQSU9fT05fS0VZCQlJUlFfR1BJTygwKQorI2RlZmluZSBQT09ETEVfSVJRX0dQSU9fQUNfSU4JCUlSUV9HUElPKDEpCisjZGVmaW5lIFBPT0RMRV9JUlFfR1BJT19IUF9JTgkJSVJRX0dQSU8oNCkKKyNkZWZpbmUgUE9PRExFX0lSUV9HUElPX0NPCQlJUlFfR1BJTygxNikKKyNkZWZpbmUgUE9PRExFX0lSUV9HUElPX1RQX0lOVAkJSVJRX0dQSU8oNSkKKyNkZWZpbmUgUE9PRExFX0lSUV9HUElPX1dBS0VVUAkJSVJRX0dQSU8oMTEpCisjZGVmaW5lIFBPT0RMRV9JUlFfR1BJT19HQV9JTlQJCUlSUV9HUElPKDEwKQorI2RlZmluZSBQT09ETEVfSVJRX0dQSU9fQ0ZfSVJRCQlJUlFfR1BJTygxNykKKyNkZWZpbmUgUE9PRExFX0lSUV9HUElPX0NGX0NECQlJUlFfR1BJTygxNCkKKyNkZWZpbmUgUE9PRExFX0lSUV9HUElPX25TRF9JTlQJCUlSUV9HUElPKDgpCisjZGVmaW5lIFBPT0RMRV9JUlFfR1BJT19uU0RfREVURUNUCUlSUV9HUElPKDkpCisjZGVmaW5lIFBPT0RMRV9JUlFfR1BJT19NQUlOX0JBVF9MT1cJSVJRX0dQSU8oMTMpCiAKIC8qIFNDT09QIEdQSU9zICovCiAjZGVmaW5lIFBPT0RMRV9TQ09PUF9DSEFSR0VfT04JU0NPT1BfR1BDUl9QQTExCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhLXJlZ3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEtcmVncy5oCmluZGV4IDkzOWQ5ZTUuLjNhZjcxNjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEtcmVncy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEtcmVncy5oCkBAIC0xMjYsOCArMTI2LDggQEAKICNkZWZpbmUgRFJDTVIxMgkJX19SRUcoMHg0MDAwMDEzMCkgIC8qIFJlcXVlc3QgdG8gQ2hhbm5lbCBNYXAgUmVnaXN0ZXIgZm9yIEFDOTcgYXVkaW8gdHJhbnNtaXQgUmVxdWVzdCAqLwogI2RlZmluZSBEUkNNUjEzCQlfX1JFRygweDQwMDAwMTM0KSAgLyogUmVxdWVzdCB0byBDaGFubmVsIE1hcCBSZWdpc3RlciBmb3IgU1NQIHJlY2VpdmUgUmVxdWVzdCAqLwogI2RlZmluZSBEUkNNUjE0CQlfX1JFRygweDQwMDAwMTM4KSAgLyogUmVxdWVzdCB0byBDaGFubmVsIE1hcCBSZWdpc3RlciBmb3IgU1NQIHRyYW5zbWl0IFJlcXVlc3QgKi8KLSNkZWZpbmUgRFJDTVIxNQkJX19SRUcoMHg0MDAwMDEzYykgIC8qIFJlc2VydmVkICovCi0jZGVmaW5lIERSQ01SMTYJCV9fUkVHKDB4NDAwMDAxNDApICAvKiBSZXNlcnZlZCAqLworI2RlZmluZSBEUkNNUjE1CQlfX1JFRygweDQwMDAwMTNjKSAgLyogUmVxdWVzdCB0byBDaGFubmVsIE1hcCBSZWdpc3RlciBmb3IgU1NQMiByZWNlaXZlIFJlcXVlc3QgKi8KKyNkZWZpbmUgRFJDTVIxNgkJX19SRUcoMHg0MDAwMDE0MCkgIC8qIFJlcXVlc3QgdG8gQ2hhbm5lbCBNYXAgUmVnaXN0ZXIgZm9yIFNTUDIgdHJhbnNtaXQgUmVxdWVzdCAqLwogI2RlZmluZSBEUkNNUjE3CQlfX1JFRygweDQwMDAwMTQ0KSAgLyogUmVxdWVzdCB0byBDaGFubmVsIE1hcCBSZWdpc3RlciBmb3IgSUNQIHJlY2VpdmUgUmVxdWVzdCAqLwogI2RlZmluZSBEUkNNUjE4CQlfX1JFRygweDQwMDAwMTQ4KSAgLyogUmVxdWVzdCB0byBDaGFubmVsIE1hcCBSZWdpc3RlciBmb3IgSUNQIHRyYW5zbWl0IFJlcXVlc3QgKi8KICNkZWZpbmUgRFJDTVIxOQkJX19SRUcoMHg0MDAwMDE0YykgIC8qIFJlcXVlc3QgdG8gQ2hhbm5lbCBNYXAgUmVnaXN0ZXIgZm9yIFNUVUFSVCByZWNlaXZlIFJlcXVlc3QgKi8KQEAgLTE1MSw3ICsxNTEsOCBAQAogI2RlZmluZSBEUkNNUjM3CQlfX1JFRygweDQwMDAwMTk0KSAgLyogUmVxdWVzdCB0byBDaGFubmVsIE1hcCBSZWdpc3RlciBmb3IgVVNCIGVuZHBvaW50IDEzIFJlcXVlc3QgKi8KICNkZWZpbmUgRFJDTVIzOAkJX19SRUcoMHg0MDAwMDE5OCkgIC8qIFJlcXVlc3QgdG8gQ2hhbm5lbCBNYXAgUmVnaXN0ZXIgZm9yIFVTQiBlbmRwb2ludCAxNCBSZXF1ZXN0ICovCiAjZGVmaW5lIERSQ01SMzkJCV9fUkVHKDB4NDAwMDAxOUMpICAvKiBSZXNlcnZlZCAqLwotCisjZGVmaW5lIERSQ01SNjYJCV9fUkVHKDB4NDAwMDExMDgpICAvKiBSZXF1ZXN0IHRvIENoYW5uZWwgTWFwIFJlZ2lzdGVyIGZvciBTU1AzIHJlY2VpdmUgUmVxdWVzdCAqLworI2RlZmluZSBEUkNNUjY3CQlfX1JFRygweDQwMDAxMTBDKSAgLyogUmVxdWVzdCB0byBDaGFubmVsIE1hcCBSZWdpc3RlciBmb3IgU1NQMyB0cmFuc21pdCBSZXF1ZXN0ICovCiAjZGVmaW5lIERSQ01SNjgJCV9fUkVHKDB4NDAwMDExMTApICAvKiBSZXF1ZXN0IHRvIENoYW5uZWwgTWFwIFJlZ2lzdGVyIGZvciBDYW1lcmEgRklGTyAwIFJlcXVlc3QgKi8KICNkZWZpbmUgRFJDTVI2OQkJX19SRUcoMHg0MDAwMTExNCkgIC8qIFJlcXVlc3QgdG8gQ2hhbm5lbCBNYXAgUmVnaXN0ZXIgZm9yIENhbWVyYSBGSUZPIDEgUmVxdWVzdCAqLwogI2RlZmluZSBEUkNNUjcwCQlfX1JFRygweDQwMDAxMTE4KSAgLyogUmVxdWVzdCB0byBDaGFubmVsIE1hcCBSZWdpc3RlciBmb3IgQ2FtZXJhIEZJRk8gMiBSZXF1ZXN0ICovCkBAIC02NTIsNyArNjUzLDcgQEAKIAogI2RlZmluZSBVRENDU19JT19SRlMJKDEgPDwgMCkJLyogUmVjZWl2ZSBGSUZPIHNlcnZpY2UgKi8KICNkZWZpbmUgVURDQ1NfSU9fUlBDCSgxIDw8IDEpCS8qIFJlY2VpdmUgcGFja2V0IGNvbXBsZXRlICovCi0jZGVmaW5lIFVEQ0NTX0lPX1JPRgkoMSA8PCAzKQkvKiBSZWNlaXZlIG92ZXJmbG93ICovCisjZGVmaW5lIFVEQ0NTX0lPX1JPRgkoMSA8PCAyKQkvKiBSZWNlaXZlIG92ZXJmbG93ICovCiAjZGVmaW5lIFVEQ0NTX0lPX0RNRQkoMSA8PCAzKQkvKiBETUEgZW5hYmxlICovCiAjZGVmaW5lIFVEQ0NTX0lPX1JORQkoMSA8PCA2KQkvKiBSZWNlaXZlIEZJRk8gbm90IGVtcHR5ICovCiAjZGVmaW5lIFVEQ0NTX0lPX1JTUAkoMSA8PCA3KQkvKiBSZWNlaXZlIHNob3J0IHBhY2tldCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YWZiLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhZmIuaAppbmRleCAyMWMwZTE2Li5hYmE5YjMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhZmIuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhZmIuaApAQCAtNjYsNCArNjYsNSBAQAogCiB9Owogdm9pZCBzZXRfcHhhX2ZiX2luZm8oc3RydWN0IHB4YWZiX21hY2hfaW5mbyAqaGFyZF9weGFfZmJfaW5mbyk7Cit2b2lkIHNldF9weGFfZmJfcGFyZW50KHN0cnVjdCBkZXZpY2UgKnBhcmVudF9kZXYpOwogdW5zaWduZWQgbG9uZyBweGFmYl9nZXRfaHN5bmNfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvaGFyZHdhcmUuaAppbmRleCBiZTk3NTRhLi45ZDdmODczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvaGFyZHdhcmUuaApAQCAtMTUsNyArMTUsNyBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL21lbW9yeS5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotI2RlZmluZSBJT01FTSh4KSAoKHZvaWQgX19pb21lbSAqKSh4KSkKKyNkZWZpbmUgSU9NRU0oeCkgKCh2b2lkIF9faW9tZW0gKikodW5zaWduZWQgbG9uZykoeCkpCiAjZWxzZQogI2RlZmluZSBJT01FTSh4KSB4CiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCkBAIC01Miw3ICs1Miw3IEBACiAvKgogICogSU8gQWRkcmVzc2VzCiAgKi8KLSNkZWZpbmUgVklEQ19CQVNFCQkodm9pZCBfX2lvbWVtICopMHhlMDQwMDAwMAorI2RlZmluZSBWSURDX0JBU0UJCUlPTUVNKDB4ZTA0MDAwMDApCiAjZGVmaW5lIEVYUE1BU0tfQkFTRQkJMHhlMDM2MDAwMAogI2RlZmluZSBJT01EX0JBU0UJCUlPTUVNKDB4ZTAyMDAwMDApCiAjZGVmaW5lIElPQ19CQVNFCQlJT01FTSgweGUwMjAwMDAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9hbnViaXMtbWFwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2FudWJpcy1tYXAuaAppbmRleCA5Nzc0MWQ2Li5kNTI5ZmZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2FudWJpcy1tYXAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2FudWJpcy1tYXAuaApAQCAtMjAsMjIgKzIwLDIyIEBACiAKIC8qIHN0YXJ0IHBlcmlwaGVyYWxzIG9mZiBhZnRlciB0aGUgUzNDMjQxMCAqLwogCi0jZGVmaW5lIEFOVUJJU19JT0FERFIoeCkJKFMzQzI0MTBfQUREUigoeCkgKyAweDAyMDAwMDAwKSkKKyNkZWZpbmUgQU5VQklTX0lPQUREUih4KQkoUzNDMjQxMF9BRERSKCh4KSArIDB4MDE4MDAwMDApKQogCiAjZGVmaW5lIEFOVUJJU19QQV9DUExECQkoUzNDMjQxMF9DUzEgfCAoMTw8MjYpKQogCiAvKiB3ZSBwdXQgdGhlIENQTEQgcmVnaXN0ZXJzIG5leHQsIHRvIGdldCB0aGVtIG91dCBvZiB0aGUgd2F5ICovCiAKLSNkZWZpbmUgQU5VQklTX1ZBX0NUUkwxCSAgICBBTlVCSVNfSU9BRERSKDB4MDAwMDAwMDApCSAvKiAweDAxMzAwMDAwICovCisjZGVmaW5lIEFOVUJJU19WQV9DVFJMMQkgICAgQU5VQklTX0lPQUREUigweDAwMDAwMDAwKQkgLyogMHgwMTgwMDAwMCAqLwogI2RlZmluZSBBTlVCSVNfUEFfQ1RSTDEJICAgIChBTlVCSVNfUEFfQ1BMRCkKIAotI2RlZmluZSBBTlVCSVNfVkFfQ1RSTDIJICAgIEFOVUJJU19JT0FERFIoMHgwMDEwMDAwMCkJIC8qIDB4MDE0MDAwMDAgKi8KKyNkZWZpbmUgQU5VQklTX1ZBX0NUUkwyCSAgICBBTlVCSVNfSU9BRERSKDB4MDAxMDAwMDApCSAvKiAweDAxOTAwMDAwICovCiAjZGVmaW5lIEFOVUJJU19QQV9DVFJMMgkgICAgKEFOVUJJU19QQV9DUExEKQogCi0jZGVmaW5lIEFOVUJJU19WQV9DVFJMMwkgICAgQU5VQklTX0lPQUREUigweDAwMjAwMDAwKQkgLyogMHgwMTUwMDAwMCAqLworI2RlZmluZSBBTlVCSVNfVkFfQ1RSTDMJICAgIEFOVUJJU19JT0FERFIoMHgwMDIwMDAwMCkJIC8qIDB4MDFBMDAwMDAgKi8KICNkZWZpbmUgQU5VQklTX1BBX0NUUkwzCSAgICAoQU5VQklTX1BBX0NQTEQpCiAKLSNkZWZpbmUgQU5VQklTX1ZBX0NUUkw0CSAgICBBTlVCSVNfSU9BRERSKDB4MDAzMDAwMDApCSAvKiAweDAxNjAwMDAwICovCisjZGVmaW5lIEFOVUJJU19WQV9DVFJMNAkgICAgQU5VQklTX0lPQUREUigweDAwMzAwMDAwKQkgLyogMHgwMUIwMDAwMCAqLwogI2RlZmluZSBBTlVCSVNfUEFfQ1RSTDQJICAgIChBTlVCSVNfUEFfQ1BMRCkKIAogI2RlZmluZSBBTlVCSVNfSURFUFJJCSAgICBBTlVCSVNfSU9BRERSKDB4MDEwMDAwMDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2hhcmR3YXJlLmgKaW5kZXggNDhhMzk5MS4uMWM5ZGUyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9oYXJkd2FyZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvaGFyZHdhcmUuaApAQCAtOTIsNiArOTIsMTMgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBzM2MyNDEwX21vZGlmeV9taXNjY3IodW5zaWduZWQgaW50IGNsciwgdW5zaWduZWQgaW50IGNoZyk7CiAKKyNpZmRlZiBDT05GSUdfQ1BVX1MzQzI0NDAKKworZXh0ZXJuIGludCBzM2MyNDQwX3NldF9kc2ModW5zaWduZWQgaW50IHBpbiwgdW5zaWduZWQgaW50IHZhbHVlKTsKKworI2VuZGlmIC8qIENPTkZJR19DUFVfUzNDMjQ0MCAqLworCisKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9pby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9pby5oCmluZGV4IDQxODIzM2EuLjRiZjI3MmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2lvLmgKQEAgLTksNyArOSw3IEBACiAgKiAgMDYtRGVjLTE5OTcJUk1LCUNyZWF0ZWQuCiAgKiAgMDItU2VwLTIwMDMgQkpECU1vZGlmaWVkIGZvciBTM0MyNDEwCiAgKiAgMTAtTWFyLTIwMDUgTENWUglDaGFuZ2VkIFMzQzI0MTBfVkEgdG8gUzNDMjRYWF9WQQotICoKKyAqICAxMy1PY3QtMjAwNSBCSkQJRml4ZWQgcHJvYmxlbXMgd2l0aCBMRFJIL1NUUkggb2Zmc2V0IHJhbmdlCiAgKi8KIAogI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9JT19ICkBAIC05Nyw3ICs5Nyw3IEBACiAJZWxzZQkJCQkJCQkJXAogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKIAkJInN0cmIJJTAsIFslMSwgIzBdCUAgb3V0YmMiCQkJXAotCQk6IDogInIiICh2YWx1ZSksICJyIiAoKHBvcnQpKSk7CQlcCisJCTogOiAiciIgKHZhbHVlKSwgInIiICgocG9ydCkpKTsJCQkJXAogfSkKIAogI2RlZmluZSBfX2luYmMocG9ydCkJCQkJCQkJXApAQCAtMTEwLDM1ICsxMTAsNjEgQEAKIAllbHNlCQkJCQkJCQlcCiAJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAogCQkibGRyYgklMCwgWyUxLCAjMF0JQCBpbmJjIgkJCQlcCi0JCTogIj1yIiAocmVzdWx0KSA6ICJyIiAoKHBvcnQpKSk7CVwKKwkJOiAiPXIiIChyZXN1bHQpIDogInIiICgocG9ydCkpKTsJCQlcCiAJcmVzdWx0OwkJCQkJCQkJXAogfSkKIAogI2RlZmluZSBfX291dHdjKHZhbHVlLHBvcnQpCQkJCQkJXAogKHsJCQkJCQkJCQlcCiAJdW5zaWduZWQgbG9uZyB2ID0gdmFsdWU7CQkJCQlcCi0JaWYgKF9fUE9SVF9QQ0lPKChwb3J0KSkpCQkJCQlcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAotCQkic3RyaAklMCwgWyUxLCAlMl0JQCBvdXR3YyIJCQlcCi0JCTogOiAiciIgKHYpLCAiciIgKFBDSU9fQkFTRSksICJKciIgKChwb3J0KSkpOwlcCi0JZWxzZQkJCQkJCQkJXAorCWlmIChfX1BPUlRfUENJTygocG9ydCkpKSB7CQkJCQlcCisJCWlmICgocG9ydCkgPCAyNTYgJiYgKHBvcnQpID4gLTI1NikJCQlcCisJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJXAorCQkJInN0cmgJJTAsIFslMSwgJTJdCUAgb3V0d2MiCQlcCisJCQk6IDogInIiICh2KSwgInIiIChQQ0lPX0JBU0UpLCAiSnIiICgocG9ydCkpKTsJXAorCQllbHNlIGlmICgocG9ydCkgPiAwKQkJCQkJXAorCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCVwKKwkJCSJzdHJoCSUwLCBbJTEsICUyXQlAIG91dHdjIgkJXAorCQkJOiA6ICJyIiAodiksCQkJCQlcCisJCQkgICAgInIiIChQQ0lPX0JBU0UgKyAoKHBvcnQpICYgfjB4ZmYpKSwJCVwKKwkJCSAgICAgIkpyIiAoKChwb3J0KSAmIDB4ZmYpKSk7CQkJXAorCQllbHNlCQkJCQkJCVwKKwkJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQlcCisJCQkic3RyaAklMCwgWyUxLCAjMF0JQCBvdXR3YyIJCVwKKwkJCTogOiAiciIgKHYpLAkJCQkJXAorCQkJICAgICJyIiAoUENJT19CQVNFICsgKHBvcnQpKSk7CQkJXAorCX0gZWxzZQkJCQkJCQkJXAogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKIAkJInN0cmgJJTAsIFslMSwgIzBdCUAgb3V0d2MiCQkJXAotCQk6IDogInIiICh2KSwgInIiICgocG9ydCkpKTsJXAorCQk6IDogInIiICh2KSwgInIiICgocG9ydCkpKTsJCQkJXAogfSkKIAogI2RlZmluZSBfX2lud2MocG9ydCkJCQkJCQkJXAogKHsJCQkJCQkJCQlcCiAJdW5zaWduZWQgc2hvcnQgcmVzdWx0OwkJCQkJCVwKLQlpZiAoX19QT1JUX1BDSU8oKHBvcnQpKSkJCQkJCVwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCi0JCSJsZHJoCSUwLCBbJTEsICUyXQlAIGlud2MiCQkJCVwKLQkJOiAiPXIiIChyZXN1bHQpIDogInIiIChQQ0lPX0JBU0UpLCAiSnIiICgocG9ydCkpKTsJXAotCWVsc2UJCQkJCQkJCVwKKwlpZiAoX19QT1JUX1BDSU8oKHBvcnQpKSkgewkJCQkJXAorCQlpZiAoKHBvcnQpIDwgMjU2ICYmIChwb3J0KSA+IC0yNTYgKQkJCVwKKwkJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQlcCisJCQkibGRyaAklMCwgWyUxLCAlMl0JQCBpbndjIgkJCVwKKwkJCTogIj1yIiAocmVzdWx0KQkJCQkJXAorCQkJOiAiciIgKFBDSU9fQkFTRSksCQkJCVwKKwkJCSAgIkpyIiAoKHBvcnQpKSk7CQkJCVwKKwkJZWxzZSBpZiAoKHBvcnQpID4gMCkJCQkJCVwKKwkJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQlcCisJCQkibGRyaAklMCwgWyUxLCAlMl0JQCBpbndjIgkJCVwKKwkJCTogIj1yIiAocmVzdWx0KQkJCQkJXAorCQkJOiAiciIgKFBDSU9fQkFTRSArICgocG9ydCkgJiB+MHhmZikpLAkJXAorCQkJICAiSnIiICgoKHBvcnQpICYgMHhmZikpKTsJCQlcCisJCWVsc2UJCQkJCQkJXAorCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCVwKKwkJCSJsZHJoCSUwLCBbJTEsICMwXQlAIGlud2MiCQkJXAorCQkJOiAiPXIiIChyZXN1bHQpCQkJCQlcCisJCQk6ICJyIiAoUENJT19CQVNFICsgKChwb3J0KSkpKTsJCQlcCisJfSBlbHNlCQkJCQkJCQlcCiAJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAogCQkibGRyaAklMCwgWyUxLCAjMF0JQCBpbndjIgkJCQlcCi0JCTogIj1yIiAocmVzdWx0KSA6ICJyIiAoKHBvcnQpKSk7CQlcCi0JcmVzdWx0OwkJCQkJCVwKKwkJOiAiPXIiIChyZXN1bHQpIDogInIiICgocG9ydCkpKTsJCQlcCisJcmVzdWx0OwkJCQkJCQkJXAogfSkKIAogI2RlZmluZSBfX291dGxjKHZhbHVlLHBvcnQpCQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWNsb2NrLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtY2xvY2suaAppbmRleCAxNmY0YzNjLi4zNDM2MDcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtY2xvY2suaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtY2xvY2suaApAQCAtMTgsNyArMTgsOSBAQAogICogICAgMTAtRmViLTIwMDUgQmVuIERvb2tzCSAgICBGaXhlZCBDQU1ESVZOIGFkZHJlc3MgKEd1aWxsYXVtZSBHb3VyYXQpCiAgKiAgICAxMC1NYXItMjAwNSBMdWNhcyBWaWxsYSBSZWFsICBDaGFuZ2VkIFMzQzI0MTBfVkEgdG8gUzNDMjRYWF9WQQogICogICAgMjctQXVnLTIwMDUgQmVuIERvb2tzCSAgICBBZGQgY2xvY2stc2xvdyBpbmZvCi0gKi8KKyAqICAgIDIwLU9jdC0yMDA1IEJlbiBEb29rcwkgICAgRml4ZWQgb3ZlcmZsb3cgaW4gUExMIChHdWlsbGF1bWUgR291cmF0KQorICogICAgMjAtT2N0LTIwMDUgQmVuIERvb2tzCSAgICBBZGQgbWFza3MgZm9yIERDTEsgKEd1aWxsYXVtZSBHb3VyYXQpCisqLwogCiAjaWZuZGVmIF9fQVNNX0FSTV9SRUdTX0NMT0NLCiAjZGVmaW5lIF9fQVNNX0FSTV9SRUdTX0NMT0NLICIkSWQ6IGNsb2NrLmgsdiAxLjQgMjAwMy8wNC8zMCAxNDo1MDo1MSBiZW4gRXhwICQiCkBAIC02NiwxMSArNjgsMTYgQEAKICNkZWZpbmUgUzNDMjQxMF9EQ0xLQ09OX0RDTEswX1VDTEsgICAoMTw8MSkKICNkZWZpbmUgUzNDMjQxMF9EQ0xLQ09OX0RDTEswX0RJVih4KSAoKCh4KSAtIDEgKTw8NCkKICNkZWZpbmUgUzNDMjQxMF9EQ0xLQ09OX0RDTEswX0NNUCh4KSAoKCh4KSAtIDEgKTw8OCkKKyNkZWZpbmUgUzNDMjQxMF9EQ0xLQ09OX0RDTEswX0RJVl9NQVNLICgoMHhmKTw8NCkKKyNkZWZpbmUgUzNDMjQxMF9EQ0xLQ09OX0RDTEswX0NNUF9NQVNLICgoMHhmKTw8OCkKIAogI2RlZmluZSBTM0MyNDEwX0RDTEtDT05fRENMSzFFTgkgICAgICgxPDwxNikKICNkZWZpbmUgUzNDMjQxMF9EQ0xLQ09OX0RDTEsxX1BDTEsgICAoMDw8MTcpCiAjZGVmaW5lIFMzQzI0MTBfRENMS0NPTl9EQ0xLMV9VQ0xLICAgKDE8PDE3KQogI2RlZmluZSBTM0MyNDEwX0RDTEtDT05fRENMSzFfRElWKHgpICgoKHgpIC0gMSkgPDwyMCkKKyNkZWZpbmUgUzNDMjQxMF9EQ0xLQ09OX0RDTEsxX0NNUCh4KSAoKCh4KSAtIDEpIDw8MjQpCisjZGVmaW5lIFMzQzI0MTBfRENMS0NPTl9EQ0xLMV9ESVZfTUFTSyAoKDB4ZikgPDwyMCkKKyNkZWZpbmUgUzNDMjQxMF9EQ0xLQ09OX0RDTEsxX0NNUF9NQVNLICgoMHhmKSA8PDI0KQogCiAjZGVmaW5lIFMzQzI0MTBfQ0xLRElWTl9QRElWTgkgICAgICgxPDwwKQogI2RlZmluZSBTM0MyNDEwX0NMS0RJVk5fSERJVk4JICAgICAoMTw8MSkKQEAgLTgzLDEwICs5MCwxMyBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Ci1zM2MyNDEwX2dldF9wbGwoaW50IHBsbHZhbCwgaW50IGJhc2VjbGspCitzM2MyNDEwX2dldF9wbGwodW5zaWduZWQgaW50IHBsbHZhbCwgdW5zaWduZWQgaW50IGJhc2VjbGspCiB7Ci0JaW50IG1kaXYsIHBkaXYsIHNkaXY7CisJdW5zaWduZWQgaW50IG1kaXYsIHBkaXYsIHNkaXY7CisJdWludDY0X3QgZnZjbzsKIAogCW1kaXYgPSBwbGx2YWwgPj4gUzNDMjQxMF9QTExDT05fTURJVlNISUZUOwogCXBkaXYgPSBwbGx2YWwgPj4gUzNDMjQxMF9QTExDT05fUERJVlNISUZUOwpAQCAtOTYsNyArMTA2LDEwIEBACiAJcGRpdiAmPSBTM0MyNDEwX1BMTENPTl9QRElWTUFTSzsKIAlzZGl2ICY9IFMzQzI0MTBfUExMQ09OX1NESVZNQVNLOwogCi0JcmV0dXJuIChiYXNlY2xrICogKG1kaXYgKyA4KSkgLyAoKHBkaXYgKyAyKSA8PCBzZGl2KTsKKwlmdmNvID0gKHVpbnQ2NF90KWJhc2VjbGsgKiAobWRpdiArIDgpOworCWRvX2RpdihmdmNvLCAocGRpdiArIDIpIDw8IHNkaXYpOworCisJcmV0dXJuICh1bnNpZ25lZCBpbnQpZnZjbzsKIH0KIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL21lbW9yeS5oCmluZGV4IDMyZDNkNWIuLjg3NDNmZjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvbWVtb3J5LmgKQEAgLTk5LDEwICs5OSw2IEBACiAjZGVmaW5lIExPQ0FMX01BUF9OUihhZGRyKSBcCiAJKCgodW5zaWduZWQgbG9uZykoYWRkcikgJiAweDA3ZmZmZmZmKSA+PiBQQUdFX1NISUZUKQogCi0jZWxzZQotCi0jZGVmaW5lIFBGTl9UT19OSUQoYWRkcikJKDApCi0KICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXZlcnNhdGlsZS9pby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL2lvLmgKaW5kZXggOWY4OTViZi4uNDdlOTA0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL2lvLmgKQEAgLTIyLDcgKzIyLDExIEBACiAKICNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmZmZmZgogCi0jZGVmaW5lIF9faW8oYSkJCQkoKHZvaWQgX19pb21lbSAqKShhKSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICpfX2lvKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKWFkZHI7Cit9CisjZGVmaW5lIF9faW8oYSkJX19pbyhhKQogI2RlZmluZSBfX21lbV9wY2koYSkJCShhKQogI2RlZmluZSBfX21lbV9pc2EoYSkJCShhKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYml0b3BzLmggYi9pbmNsdWRlL2FzbS1hcm0vYml0b3BzLmgKaW5kZXggYWFkN2FhZC4uZTAwN2RkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9iaXRvcHMuaApAQCAtMzQ3LDcgKzM0Nyw2IEBACiAgKiB0aGUgY2x6IGluc3RydWN0aW9uIGZvciBtdWNoIGJldHRlciBjb2RlIGVmZmljaWVuY3kuCiAgKi8KIAotc3RhdGljIF9faW5saW5lX18gaW50IGdlbmVyaWNfZmxzKGludCB4KTsKICNkZWZpbmUgZmxzKHgpIFwKIAkoIF9fYnVpbHRpbl9jb25zdGFudF9wKHgpID8gZ2VuZXJpY19mbHMoeCkgOiBcCiAJICAoeyBpbnQgX19yOyBhc20oImNselx0JTAsICUxIiA6ICI9ciIoX19yKSA6ICJyIih4KSA6ICJjYyIpOyAzMi1fX3I7IH0pICkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9lbGYuaCBiL2luY2x1ZGUvYXNtLWFybS9lbGYuaAppbmRleCBhMTY5NmJhLi43ZGE5N2E5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vZWxmLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2VsZi5oCkBAIC0xMjQsNiArMTI0LDggQEAKIAlpZiAoKChleCkuZV9mbGFncyAmIEVGX0FSTV9FQUJJX01BU0spIHx8IFwKIAkgICAgKChleCkuZV9mbGFncyAmIEVGX0FSTV9TT0ZUX0ZMT0FUKSkgXAogCQlzZXRfdGhyZWFkX2ZsYWcoVElGX1VTSU5HX0lXTU1YVCk7IFwKKwllbHNlIFwKKwkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1VTSU5HX0lXTU1YVCk7IFwKIH0gd2hpbGUgKDApCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2Z1dGV4LmggYi9pbmNsdWRlL2FzbS1hcm0vZnV0ZXguaAppbmRleCAyY2FjNWVjLi45ZmVmZjRjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2Z1dGV4LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2Z1dGV4LmgKQEAgLTE0LDcgKzE0LDcgQEAKIAlpbnQgY21wID0gKGVuY29kZWRfb3AgPj4gMjQpICYgMTU7CiAJaW50IG9wYXJnID0gKGVuY29kZWRfb3AgPDwgOCkgPj4gMjA7CiAJaW50IGNtcGFyZyA9IChlbmNvZGVkX29wIDw8IDIwKSA+PiAyMDsKLQlpbnQgb2xkdmFsID0gMCwgcmV0LCB0ZW07CisJaW50IG9sZHZhbCA9IDAsIHJldDsKIAlpZiAoZW5jb2RlZF9vcCAmIChGVVRFWF9PUF9PUEFSR19TSElGVCA8PCAyOCkpCiAJCW9wYXJnID0gMSA8PCBvcGFyZzsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL3Njb29wLmggYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvc2Nvb3AuaAppbmRleCA1Mjc0MDRiLi5hOGYxMDEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvc2Nvb3AuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvc2Nvb3AuaApAQCAtMzgsNiArMzgsOCBAQAogc3RydWN0IHNjb29wX2NvbmZpZyB7CiAJdW5zaWduZWQgc2hvcnQgaW9fb3V0OwogCXVuc2lnbmVkIHNob3J0IGlvX2RpcjsKKwl1bnNpZ25lZCBzaG9ydCBzdXNwZW5kX2NscjsKKwl1bnNpZ25lZCBzaG9ydCBzdXNwZW5kX3NldDsKIH07CiAKIC8qIFN0cnVjdHVyZSBmb3IgbGlua2luZyBzY29vcCBkZXZpY2VzIHRvIFBDTUNJQSBzb2NrZXRzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9pby5oCmluZGV4IGNmYTcxYTAuLjVjNGFlOGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9pby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9pby5oCkBAIC0xMzYsOSArMTM2LDkgQEAKIC8qCiAgKiBTdHJpbmcgdmVyc2lvbiBvZiBJTyBtZW1vcnkgYWNjZXNzIG9wczoKICAqLwotZXh0ZXJuIHZvaWQgX21lbWNweV9mcm9taW8odm9pZCAqLCB2b2lkIF9faW9tZW0gKiwgc2l6ZV90KTsKLWV4dGVybiB2b2lkIF9tZW1jcHlfdG9pbyh2b2lkIF9faW9tZW0gKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwotZXh0ZXJuIHZvaWQgX21lbXNldF9pbyh2b2lkIF9faW9tZW0gKiwgaW50LCBzaXplX3QpOworZXh0ZXJuIHZvaWQgX21lbWNweV9mcm9taW8odm9pZCAqLCBjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKiwgc2l6ZV90KTsKK2V4dGVybiB2b2lkIF9tZW1jcHlfdG9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOworZXh0ZXJuIHZvaWQgX21lbXNldF9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKiwgaW50LCBzaXplX3QpOwogCiAjZGVmaW5lIG1taW93YigpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9sb2Nrcy5oIGIvaW5jbHVkZS9hc20tYXJtL2xvY2tzLmgKaW5kZXggZjA4ZGM4NC4uODUyMjIwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2xvY2tzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2xvY2tzLmgKQEAgLTEwMyw3ICsxMDMsNyBAQAogCSh7CQkJCQlcCiAJc21wX21iKCk7CQkJCVwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQlcCi0JIkAgdXBfb3BfcmVhZFxuIgkJCVwKKwkiQCB1cF9vcF93cml0ZVxuIgkJCVwKICIxOglsZHJleAlsciwgWyUwXVxuIgkJCVwKICIJYWRkcwlsciwgbHIsICUxXG4iCQkJXAogIglzdHJleAlpcCwgbHIsIFslMF1cbiIJCQlcCkBAIC0yMzEsNyArMjMxLDcgQEAKICNkZWZpbmUgX191cF9vcF93cml0ZShwdHIsd2FrZSkJCQlcCiAJKHsJCQkJCVwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQlcCi0JIkAgdXBfb3BfcmVhZFxuIgkJCVwKKwkiQCB1cF9vcF93cml0ZVxuIgkJCVwKICIJbXJzCWlwLCBjcHNyXG4iCQkJXAogIglvcnIJbHIsIGlwLCAjMTI4XG4iCQkJXAogIgltc3IJY3Bzcl9jLCBsclxuIgkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9tYWNoL2FyY2guaCBiL2luY2x1ZGUvYXNtLWFybS9tYWNoL2FyY2guaAppbmRleCA1NmM2YmY0Li40ZmE5NTA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vbWFjaC9hcmNoLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvYXJjaC5oCkBAIC01MCw3ICs1MCw3IEBACiAgKi8KICNkZWZpbmUgTUFDSElORV9TVEFSVChfdHlwZSxfbmFtZSkJCVwKIGNvbnN0IHN0cnVjdCBtYWNoaW5lX2Rlc2MgX19tYWNoX2Rlc2NfIyNfdHlwZQlcCi0gX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5hcmNoLmluZm8iKSkpID0gewlcCisgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5hcmNoLmluZm8uaW5pdCIpKSkgPSB7CVwKIAkubnIJCT0gTUFDSF9UWVBFXyMjX3R5cGUsCVwKIAkubmFtZQkJPSBfbmFtZSwKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL21lbW9yeS5oCmluZGV4IGU0N2JlYTcuLmE4YTkzM2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vbWVtb3J5LmgKQEAgLTE2MCwxMiArMTYwLDI1IEBACiAjZGVmaW5lIHBhZ2VfdG9fcGZuKHBhZ2UpCQkJCQlcCiAJKCggKHBhZ2UpIC0gcGFnZV96b25lKHBhZ2UpLT56b25lX21lbV9tYXApCQlcCiAJICArIHBhZ2Vfem9uZShwYWdlKS0+em9uZV9zdGFydF9wZm4pCisKICNkZWZpbmUgcGZuX3RvX3BhZ2UocGZuKQkJCQkJXAogCShQRk5fVE9fTUFQQkFTRShwZm4pICsgTE9DQUxfTUFQX05SKChwZm4pIDw8IFBBR0VfU0hJRlQpKQotI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJKFBGTl9UT19OSUQocGZuKSA8IE1BWF9OVU1OT0RFUykKKworI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJCQkJCVwKKwkoewkJCQkJCQlcCisJCXVuc2lnbmVkIGludCBuaWQgPSBQRk5fVE9fTklEKHBmbik7CQlcCisJCWludCB2YWxpZCA9IG5pZCA8IE1BWF9OVU1OT0RFUzsJCQlcCisJCWlmICh2YWxpZCkgewkJCQkJXAorCQkJcGdfZGF0YV90ICpub2RlID0gTk9ERV9EQVRBKG5pZCk7CVwKKwkJCXZhbGlkID0gKHBmbiAtIG5vZGUtPm5vZGVfc3RhcnRfcGZuKSA8CVwKKwkJCQlub2RlLT5ub2RlX3NwYW5uZWRfcGFnZXM7CVwKKwkJfQkJCQkJCVwKKwkJdmFsaWQ7CQkJCQkJXAorCX0pCiAKICNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKQkJCQkJXAogCShBRERSX1RPX01BUEJBU0Uoa2FkZHIpICsgTE9DQUxfTUFQX05SKGthZGRyKSkKKwogI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCShLVkFERFJfVE9fTklEKGthZGRyKSA8IE1BWF9OVU1OT0RFUykKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9zZXR1cC5oIGIvaW5jbHVkZS9hc20tYXJtL3NldHVwLmgKaW5kZXggYWRjYmQ3OS4uZWEzZWQyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3NldHVwLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3NldHVwLmgKQEAgLTE3MSw3ICsxNzEsNyBAQAogCWludCAoKnBhcnNlKShjb25zdCBzdHJ1Y3QgdGFnICopOwogfTsKIAotI2RlZmluZSBfX3RhZyBfX2F0dHJpYnV0ZV91c2VkX18gX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi50YWdsaXN0IikpKQorI2RlZmluZSBfX3RhZyBfX2F0dHJpYnV0ZV91c2VkX18gX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi50YWdsaXN0LmluaXQiKSkpCiAjZGVmaW5lIF9fdGFndGFibGUodGFnLCBmbikgXAogc3RhdGljIHN0cnVjdCB0YWd0YWJsZSBfX3RhZ3RhYmxlXyMjZm4gX190YWcgPSB7IHRhZywgZm4gfQogCkBAIC0yMTMsNiArMjEzLDYgQEAKIAogI2RlZmluZSBfX2Vhcmx5X3BhcmFtKG5hbWUsZm4pCQkJCQlcCiBzdGF0aWMgc3RydWN0IGVhcmx5X3BhcmFtcyBfX2Vhcmx5XyMjZm4gX19hdHRyaWJ1dGVfdXNlZF9fCVwKLV9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCJfX2Vhcmx5X3BhcmFtIikpKSA9IHsgbmFtZSwgZm4gfQorX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5lYXJseV9wYXJhbS5pbml0IikpKSA9IHsgbmFtZSwgZm4gfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLWFybS9zaWduYWwuaAppbmRleCA3NjBmNmU2NS4uY2VkNjkxNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9zaWduYWwuaApAQCAtMTE1LDcgKzExNSw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5lIFNBX1RJTUVSCQkweDQwMDAwMDAwCi0jZGVmaW5lIFNBX0lSUU5PTUFTSwkJMHgwODAwMDAwMAogI2VuZGlmCiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWduYWwuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L2Z1dGV4LmggYi9pbmNsdWRlL2FzbS1hcm0yNi9mdXRleC5oCmluZGV4IDJjYWM1ZWMuLjlmZWZmNGNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi9mdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2Z1dGV4LmgKQEAgLTE0LDcgKzE0LDcgQEAKIAlpbnQgY21wID0gKGVuY29kZWRfb3AgPj4gMjQpICYgMTU7CiAJaW50IG9wYXJnID0gKGVuY29kZWRfb3AgPDwgOCkgPj4gMjA7CiAJaW50IGNtcGFyZyA9IChlbmNvZGVkX29wIDw8IDIwKSA+PiAyMDsKLQlpbnQgb2xkdmFsID0gMCwgcmV0LCB0ZW07CisJaW50IG9sZHZhbCA9IDAsIHJldDsKIAlpZiAoZW5jb2RlZF9vcCAmIChGVVRFWF9PUF9PUEFSR19TSElGVCA8PCAyOCkpCiAJCW9wYXJnID0gMSA8PCBvcGFyZzsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9mdXRleC5oIGIvaW5jbHVkZS9hc20tY3Jpcy9mdXRleC5oCmluZGV4IDJjYWM1ZWMuLjlmZWZmNGNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL2Z1dGV4LmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9mdXRleC5oCkBAIC0xNCw3ICsxNCw3IEBACiAJaW50IGNtcCA9IChlbmNvZGVkX29wID4+IDI0KSAmIDE1OwogCWludCBvcGFyZyA9IChlbmNvZGVkX29wIDw8IDgpID4+IDIwOwogCWludCBjbXBhcmcgPSAoZW5jb2RlZF9vcCA8PCAyMCkgPj4gMjA7Ci0JaW50IG9sZHZhbCA9IDAsIHJldCwgdGVtOworCWludCBvbGR2YWwgPSAwLCByZXQ7CiAJaWYgKGVuY29kZWRfb3AgJiAoRlVURVhfT1BfT1BBUkdfU0hJRlQgPDwgMjgpKQogCQlvcGFyZyA9IDEgPDwgb3Bhcmc7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9mdXRleC5oIGIvaW5jbHVkZS9hc20tZnJ2L2Z1dGV4LmgKaW5kZXggMmNhYzVlYy4uOWZlZmY0Y2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9mdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9mdXRleC5oCkBAIC0xNCw3ICsxNCw3IEBACiAJaW50IGNtcCA9IChlbmNvZGVkX29wID4+IDI0KSAmIDE1OwogCWludCBvcGFyZyA9IChlbmNvZGVkX29wIDw8IDgpID4+IDIwOwogCWludCBjbXBhcmcgPSAoZW5jb2RlZF9vcCA8PCAyMCkgPj4gMjA7Ci0JaW50IG9sZHZhbCA9IDAsIHJldCwgdGVtOworCWludCBvbGR2YWwgPSAwLCByZXQ7CiAJaWYgKGVuY29kZWRfb3AgJiAoRlVURVhfT1BfT1BBUkdfU0hJRlQgPDwgMjgpKQogCQlvcGFyZyA9IDEgPDwgb3Bhcmc7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZG1hLW1hcHBpbmcuaAppbmRleCA4Y2VmNjYzLi43NDdkNzkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9kbWEtbWFwcGluZy5oCkBAIC0zNSw3ICszNSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqCiBkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwKLQkJICAgdW5zaWduZWQgaW50IF9fbm9jYXN0IGZsYWcpCisJCSAgIGdmcF90IGZsYWcpCiB7CiAJQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOwogCkBAIC0xNjgsNyArMTY4LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkICoKIGRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLAotCQkgICB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZykKKwkJICAgZ2ZwX3QgZmxhZykKIHsKIAlCVUcoKTsKIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLmgKaW5kZXggZjg2YzFlNS4uZmYyOGM4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLmgKQEAgLTE1OCw2ICsxNTgsMTkgQEAKICNkZWZpbmUgbGF6eV9tbXVfcHJvdF91cGRhdGUocHRlKQlkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAorI2lmbmRlZiBfX0hBVkVfQVJDSF9NVUxUSVBMRV9aRVJPX1BBR0UKKyNkZWZpbmUgbW92ZV9wdGUocHRlLCBwcm90LCBvbGRfYWRkciwgbmV3X2FkZHIpCShwdGUpCisjZWxzZQorI2RlZmluZSBtb3ZlX3B0ZShwdGUsIHByb3QsIG9sZF9hZGRyLCBuZXdfYWRkcikJCQkJXAorKHsJCQkJCQkJCQlcCisgCXB0ZV90IG5ld3B0ZSA9IChwdGUpOwkJCQkJCVwKKwlpZiAocHRlX3ByZXNlbnQocHRlKSAmJiBwZm5fdmFsaWQocHRlX3BmbihwdGUpKSAmJgkJXAorCQkJcHRlX3BhZ2UocHRlKSA9PSBaRVJPX1BBR0Uob2xkX2FkZHIpKQkJXAorCQluZXdwdGUgPSBta19wdGUoWkVST19QQUdFKG5ld19hZGRyKSwgKHByb3QpKTsJCVwKKwluZXdwdGU7CQkJCQkJCQlcCit9KQorI2VuZGlmCisKIC8qCiAgKiBXaGVuIHdhbGtpbmcgcGFnZSB0YWJsZXMsIGdldCB0aGUgYWRkcmVzcyBvZiB0aGUgbmV4dCBib3VuZGFyeSwKICAqIG9yIHRoZSBlbmQgYWRkcmVzcyBvZiB0aGUgcmFuZ2UgaWYgdGhhdCBjb21lcyBlYXJsaWVyLiAgQWx0aG91Z2ggbm8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL2Z1dGV4LmggYi9pbmNsdWRlL2FzbS1oODMwMC9mdXRleC5oCmluZGV4IDJjYWM1ZWMuLjlmZWZmNGNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1oODMwMC9mdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL2Z1dGV4LmgKQEAgLTE0LDcgKzE0LDcgQEAKIAlpbnQgY21wID0gKGVuY29kZWRfb3AgPj4gMjQpICYgMTU7CiAJaW50IG9wYXJnID0gKGVuY29kZWRfb3AgPDwgOCkgPj4gMjA7CiAJaW50IGNtcGFyZyA9IChlbmNvZGVkX29wIDw8IDIwKSA+PiAyMDsKLQlpbnQgb2xkdmFsID0gMCwgcmV0LCB0ZW07CisJaW50IG9sZHZhbCA9IDAsIHJldDsKIAlpZiAoZW5jb2RlZF9vcCAmIChGVVRFWF9PUF9PUEFSR19TSElGVCA8PCAyOCkpCiAJCW9wYXJnID0gMSA8PCBvcGFyZzsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20taTM4Ni9kbWEtbWFwcGluZy5oCmluZGV4IDU2Mzk2NGIuLmU1NmMzMzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvZG1hLW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2RtYS1tYXBwaW5nLmgKQEAgLTExLDcgKzExLDcgQEAKICNkZWZpbmUgZG1hX2ZyZWVfbm9uY29oZXJlbnQoZCwgcywgdiwgaCkgZG1hX2ZyZWVfY29oZXJlbnQoZCwgcywgdiwgaCkKIAogdm9pZCAqZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCi0JCQkgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZyk7CisJCQkgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKTsKIAogdm9pZCBkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCQkJIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9mdXRleC5oIGIvaW5jbHVkZS9hc20taTM4Ni9mdXRleC5oCmluZGV4IDQ0YjlkYjguLmU3YTI3MWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvZnV0ZXguaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2Z1dGV4LmgKQEAgLTYxLDcgKzYxLDcgQEAKIAlpZiAob3AgPT0gRlVURVhfT1BfU0VUKQogCQlfX2Z1dGV4X2F0b21pY19vcDEoInhjaGdsICUwLCAlMiIsIHJldCwgb2xkdmFsLCB1YWRkciwgb3BhcmcpOwogCWVsc2UgewotI2lmbmRlZiBDT05GSUdfWDg2X0JTV0FQCisjaWYgIWRlZmluZWQoQ09ORklHX1g4Nl9CU1dBUCkgJiYgIWRlZmluZWQoQ09ORklHX1VNTCkKIAkJaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDMpCiAJCQlyZXQgPSAtRU5PU1lTOwogCQllbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2h3X2lycS5oIGIvaW5jbHVkZS9hc20taTM4Ni9od19pcnEuaAppbmRleCA0YWM4NGNjLi42MjI4MTViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2h3X2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvaHdfaXJxLmgKQEAgLTE4LDYgKzE4LDggQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAKK3N0cnVjdCBod19pbnRlcnJ1cHRfdHlwZTsKKwogLyoKICAqIFZhcmlvdXMgbG93LWxldmVsIGlycSBkZXRhaWxzIG5lZWRlZCBieSBpcnEuYywgcHJvY2Vzcy5jLAogICogdGltZS5jLCBpb19hcGljLmMgYW5kIHNtcC5jCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2Z1dGV4LmggYi9pbmNsdWRlL2FzbS1pYTY0L2Z1dGV4LmgKaW5kZXggMmNhYzVlYy4uOWZlZmY0Y2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvZnV0ZXguaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2Z1dGV4LmgKQEAgLTE0LDcgKzE0LDcgQEAKIAlpbnQgY21wID0gKGVuY29kZWRfb3AgPj4gMjQpICYgMTU7CiAJaW50IG9wYXJnID0gKGVuY29kZWRfb3AgPDwgOCkgPj4gMjA7CiAJaW50IGNtcGFyZyA9IChlbmNvZGVkX29wIDw8IDIwKSA+PiAyMDsKLQlpbnQgb2xkdmFsID0gMCwgcmV0LCB0ZW07CisJaW50IG9sZHZhbCA9IDAsIHJldDsKIAlpZiAoZW5jb2RlZF9vcCAmIChGVVRFWF9PUF9PUEFSR19TSElGVCA8PCAyOCkpCiAJCW9wYXJnID0gMSA8PCBvcGFyZzsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjX2hwengxLmggYi9pbmNsdWRlL2FzbS1pYTY0L21hY2h2ZWNfaHB6eDEuaAppbmRleCBkYWFmZTUwLi5lOTBkYWY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L21hY2h2ZWNfaHB6eDEuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L21hY2h2ZWNfaHB6eDEuaApAQCAtMSw4ICsxLDcgQEAKICNpZm5kZWYgX0FTTV9JQTY0X01BQ0hWRUNfSFBaWDFfaAogI2RlZmluZSBfQVNNX0lBNjRfTUFDSFZFQ19IUFpYMV9oCiAKLWV4dGVybiBpYTY0X212X3NldHVwX3QgZGlnX3NldHVwOwotZXh0ZXJuIGlhNjRfbXZfc2V0dXBfdAkJCXNiYV9zZXR1cDsKK2V4dGVybiBpYTY0X212X3NldHVwX3QJCQlkaWdfc2V0dXA7CiBleHRlcm4gaWE2NF9tdl9kbWFfYWxsb2NfY29oZXJlbnQJc2JhX2FsbG9jX2NvaGVyZW50OwogZXh0ZXJuIGlhNjRfbXZfZG1hX2ZyZWVfY29oZXJlbnQJc2JhX2ZyZWVfY29oZXJlbnQ7CiBleHRlcm4gaWE2NF9tdl9kbWFfbWFwX3NpbmdsZQkJc2JhX21hcF9zaW5nbGU7CkBAIC0xOSwxNSArMTgsMTUgQEAKICAqIHBsYXRmb3JtJ3MgbWFjaHZlYyBzdHJ1Y3R1cmUuICBXaGVuIGNvbXBpbGluZyBhIG5vbi1nZW5lcmljIGtlcm5lbCwKICAqIHRoZSBtYWNyb3MgYXJlIHVzZWQgZGlyZWN0bHkuCiAgKi8KLSNkZWZpbmUgcGxhdGZvcm1fbmFtZQkJCSJocHp4MSIKLSNkZWZpbmUgcGxhdGZvcm1fc2V0dXAJCQlzYmFfc2V0dXAKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX2luaXQJCW1hY2h2ZWNfbm9vcAotI2RlZmluZSBwbGF0Zm9ybV9kbWFfYWxsb2NfY29oZXJlbnQJc2JhX2FsbG9jX2NvaGVyZW50Ci0jZGVmaW5lIHBsYXRmb3JtX2RtYV9mcmVlX2NvaGVyZW50CXNiYV9mcmVlX2NvaGVyZW50Ci0jZGVmaW5lIHBsYXRmb3JtX2RtYV9tYXBfc2luZ2xlCQlzYmFfbWFwX3NpbmdsZQotI2RlZmluZSBwbGF0Zm9ybV9kbWFfdW5tYXBfc2luZ2xlCXNiYV91bm1hcF9zaW5nbGUKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX21hcF9zZwkJc2JhX21hcF9zZwotI2RlZmluZSBwbGF0Zm9ybV9kbWFfdW5tYXBfc2cJCXNiYV91bm1hcF9zZworI2RlZmluZSBwbGF0Zm9ybV9uYW1lCQkJCSJocHp4MSIKKyNkZWZpbmUgcGxhdGZvcm1fc2V0dXAJCQkJZGlnX3NldHVwCisjZGVmaW5lIHBsYXRmb3JtX2RtYV9pbml0CQkJbWFjaHZlY19ub29wCisjZGVmaW5lIHBsYXRmb3JtX2RtYV9hbGxvY19jb2hlcmVudAkJc2JhX2FsbG9jX2NvaGVyZW50CisjZGVmaW5lIHBsYXRmb3JtX2RtYV9mcmVlX2NvaGVyZW50CQlzYmFfZnJlZV9jb2hlcmVudAorI2RlZmluZSBwbGF0Zm9ybV9kbWFfbWFwX3NpbmdsZQkJCXNiYV9tYXBfc2luZ2xlCisjZGVmaW5lIHBsYXRmb3JtX2RtYV91bm1hcF9zaW5nbGUJCXNiYV91bm1hcF9zaW5nbGUKKyNkZWZpbmUgcGxhdGZvcm1fZG1hX21hcF9zZwkJCXNiYV9tYXBfc2cKKyNkZWZpbmUgcGxhdGZvcm1fZG1hX3VubWFwX3NnCQkJc2JhX3VubWFwX3NnCiAjZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1CW1hY2h2ZWNfZG1hX3N5bmNfc2luZ2xlCiAjZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NnX2Zvcl9jcHUJCW1hY2h2ZWNfZG1hX3N5bmNfc2cKICNkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UJbWFjaHZlY19kbWFfc3luY19zaW5nbGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbWFjaHZlY19ocHp4MV9zd2lvdGxiLmggYi9pbmNsdWRlL2FzbS1pYTY0L21hY2h2ZWNfaHB6eDFfc3dpb3RsYi5oCmluZGV4IDk5MjRiMWIuLmYwMGEzNGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvbWFjaHZlY19ocHp4MV9zd2lvdGxiLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjX2hwengxX3N3aW90bGIuaApAQCAtMiw3ICsyLDYgQEAKICNkZWZpbmUgX0FTTV9JQTY0X01BQ0hWRUNfSFBaWDFfU1dJT1RMQl9oCiAKIGV4dGVybiBpYTY0X212X3NldHVwX3QJCQkJZGlnX3NldHVwOwotZXh0ZXJuIGlhNjRfbXZfZG1hX2luaXQJCQkJaHdzd19pbml0OwogZXh0ZXJuIGlhNjRfbXZfZG1hX2FsbG9jX2NvaGVyZW50CQlod3N3X2FsbG9jX2NvaGVyZW50OwogZXh0ZXJuIGlhNjRfbXZfZG1hX2ZyZWVfY29oZXJlbnQJCWh3c3dfZnJlZV9jb2hlcmVudDsKIGV4dGVybiBpYTY0X212X2RtYV9tYXBfc2luZ2xlCQkJaHdzd19tYXBfc2luZ2xlOwpAQCAtMjYsNyArMjUsNyBAQAogI2RlZmluZSBwbGF0Zm9ybV9uYW1lCQkJCSJocHp4MV9zd2lvdGxiIgogCiAjZGVmaW5lIHBsYXRmb3JtX3NldHVwCQkJCWRpZ19zZXR1cAotI2RlZmluZSBwbGF0Zm9ybV9kbWFfaW5pdAkJCWh3c3dfaW5pdAorI2RlZmluZSBwbGF0Zm9ybV9kbWFfaW5pdAkJCW1hY2h2ZWNfbm9vcAogI2RlZmluZSBwbGF0Zm9ybV9kbWFfYWxsb2NfY29oZXJlbnQJCWh3c3dfYWxsb2NfY29oZXJlbnQKICNkZWZpbmUgcGxhdGZvcm1fZG1hX2ZyZWVfY29oZXJlbnQJCWh3c3dfZnJlZV9jb2hlcmVudAogI2RlZmluZSBwbGF0Zm9ybV9kbWFfbWFwX3NpbmdsZQkJCWh3c3dfbWFwX3NpbmdsZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9tY2EuaCBiL2luY2x1ZGUvYXNtLWlhNjQvbWNhLmgKaW5kZXggOTdhMjhiOC4uYzdkOWM5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9tY2EuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L21jYS5oCkBAIC04MCw3ICs4MCwxMiBAQAogCXU2NAkJCXNhbF9yYTsJCQkvKiBSZXR1cm4gYWRkcmVzcyBpbiBTQUwsIHBoeXNpY2FsICovCiAJdTY0CQkJc2FsX2dwOwkJCS8qIEdQIG9mIHRoZSBTQUwgLSBwaHlzaWNhbCAqLwogCXBhbF9taW5fc3RhdGVfYXJlYV90CSpwYWxfbWluX3N0YXRlOwkJLyogZnJvbSBSMTcuICBwaHlzaWNhbCBpbiBhc20sIHZpcnR1YWwgaW4gQyAqLworCS8qIFByZXZpb3VzIHZhbHVlcyBvZiBJQTY0X0tSKENVUlJFTlQpIGFuZCBJQTY0X0tSKENVUlJFTlRfU1RBQ0spLgorCSAqIE5vdGU6IGlmIHRoZSBNQ0EvSU5JVCByZWNvdmVyeSBjb2RlIHdhbnRzIHRvIHJlc3VtZSB0byBhIG5ldyBjb250ZXh0CisJICogdGhlbiBpdCBtdXN0IGNoYW5nZSB0aGVzZSB2YWx1ZXMgdG8gcmVmbGVjdCB0aGUgbmV3IGtlcm5lbCBzdGFjay4KKwkgKi8KIAl1NjQJCQlwcmV2X0lBNjRfS1JfQ1VSUkVOVDsJLyogcHJldmlvdXMgdmFsdWUgb2YgSUE2NF9LUihDVVJSRU5UKSAqLworCXU2NAkJCXByZXZfSUE2NF9LUl9DVVJSRU5UX1NUQUNLOwogCXN0cnVjdCB0YXNrX3N0cnVjdAkqcHJldl90YXNrOwkJLyogcHJldmlvdXMgdGFzaywgTlVMTCBpZiBpdCBpcyBub3QgdXNlZnVsICovCiAJLyogU29tZSBpbnRlcnJ1cHQgcmVnaXN0ZXJzIGFyZSBub3Qgc2F2ZWQgaW4gbWluc3RhdGUsIHB0X3JlZ3Mgb3IKIAkgKiBzd2l0Y2hfc3RhY2suICBCZWNhdXNlIE1DQS9JTklUIGNhbiBvY2N1ciB3aGVuIGludGVycnVwdHMgYXJlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL2lvLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL2lvLmgKaW5kZXggNDIyMDk3My4uNzU5N2E1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zbi9pby5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vaW8uaApAQCAtMzYsNiArMzYsMTUgQEAKICNkZWZpbmUgX19zbl9yZWFkcV9yZWxheGVkIF9fX3NuX3JlYWRxX3JlbGF4ZWQKIAogLyoKKyAqIENvbnZlbmllbmNlIG1hY3JvcyBmb3Igc2V0dGluZy9jbGVhcmluZyBiaXRzIHVzaW5nIHRoZSBhYm92ZSBhY2Nlc3NvcnMKKyAqLworCisjZGVmaW5lIF9fc25fc2V0cV9yZWxheGVkKGFkZHIsIHZhbCkgXAorCXdyaXRlcSgoX19zbl9yZWFkcV9yZWxheGVkKGFkZHIpIHwgKHZhbCkpLCAoYWRkcikpCisjZGVmaW5lIF9fc25fY2xycV9yZWxheGVkKGFkZHIsIHZhbCkgXAorCXdyaXRlcSgoX19zbl9yZWFkcV9yZWxheGVkKGFkZHIpICYgfih2YWwpKSwgKGFkZHIpKQorCisvKgogICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBhcmUgU04gUGxhdGZvcm0gc3BlY2lmaWMsIGNhbGxlZCB3aGVuCiAgKiBhIHJlZmVyZW5jZSBpcyBtYWRlIHRvIGluWC9vdXRYIHNldCBtYWNyb3MuICBTTiBQbGF0Zm9ybQogICogaW5YIHNldCBvZiBtYWNyb3MgZW5zdXJlcyB0aGF0IFBvc3RlZCBETUEgd3JpdGVzIG9uIHRoZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi9sMS5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9sMS5oCmluZGV4IDJlNWYwYWEuLmUzYjgxOTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24vbDEuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL2wxLmgKQEAgLTM1LDQgKzM1LDE2IEBACiAjZGVmaW5lIEwxX0JSSUNLVFlQRV9BVEhFTkEJMHgyYiAgICAgICAgICAgIC8qICsgKi8KICNkZWZpbmUgTDFfQlJJQ0tUWVBFX0RBWVRPTkEJMHg3YSAgICAgICAgICAgIC8qIHogKi8KIAorLyogYm9hcmQgdHlwZSByZXNwb25zZSBjb2RlcyAqLworI2RlZmluZSBMMV9CT0FSRFRZUEVfSVA2OSAgICAgICAweDAxMDAgICAgICAgICAgLyogQ0EgKi8KKyNkZWZpbmUgTDFfQk9BUkRUWVBFX0lQNjMgICAgICAgMHgwMjAwICAgICAgICAgIC8qIENCICovCisjZGVmaW5lIEwxX0JPQVJEVFlQRV9CQVNFSU8gICAgIDB4MDMwMCAgICAgICAgICAvKiBJQiAqLworI2RlZmluZSBMMV9CT0FSRFRZUEVfUENJRTJTTE9UICAweDA0MDAgICAgICAgICAgLyogSUMgKi8KKyNkZWZpbmUgTDFfQk9BUkRUWVBFX1BDSVgzU0xPVCAgMHgwNTAwICAgICAgICAgIC8qIElEICovCisjZGVmaW5lIEwxX0JPQVJEVFlQRV9QQ0lYUENJRTRTTE9UIDB4MDYwMCAgICAgICAvKiBJRSAqLworI2RlZmluZSBMMV9CT0FSRFRZUEVfQUJBQ1VTICAgICAweDA3MDAgICAgICAgICAgLyogQUIgKi8KKyNkZWZpbmUgTDFfQk9BUkRUWVBFX0RBWVRPTkEgICAgMHgwODAwICAgICAgICAgIC8qIEFEICovCisjZGVmaW5lIEwxX0JPQVJEVFlQRV9JTlZBTCAgICAgICgtMSkgICAgICAgICAgICAvKiBpbnZhbGlkIGJyaWNrIHR5cGUgKi8KKworCiAjZW5kaWYgLyogX0FTTV9JQTY0X1NOX0wxX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fc2FsLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX3NhbC5oCmluZGV4IGZlYTM1YjMuLjM0ZjMxMjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fc2FsLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9zYWwuaApAQCAtNDcsNiArNDcsNyBAQAogI2RlZmluZSAgU05fU0FMX0NPTlNPTEVfUFVUQgkJCSAgIDB4MDIwMDAwMjgKICNkZWZpbmUgIFNOX1NBTF9DT05TT0xFX1hNSVRfQ0hBUlMJCSAgIDB4MDIwMDAwMmEKICNkZWZpbmUgIFNOX1NBTF9DT05TT0xFX1JFQURDCQkJICAgMHgwMjAwMDAyYgorI2RlZmluZSAgU05fU0FMX1NZU0NUTF9PUAkJCSAgIDB4MDIwMDAwMzAKICNkZWZpbmUgIFNOX1NBTF9TWVNDVExfTU9ESURfR0VUCSAgICAgICAgICAgMHgwMjAwMDAzMQogI2RlZmluZSAgU05fU0FMX1NZU0NUTF9HRVQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAzMgogI2RlZmluZSAgU05fU0FMX1NZU0NUTF9JT0JSSUNLX01PRFVMRV9HRVQgICAgICAgICAgMHgwMjAwMDAzMwpAQCAtMTAxLDYgKzEwMiwxMyBAQAogI2RlZmluZSBTQUxfSU5UUl9GUkVFCQkyCiAKIC8qCisgKiBvcGVyYXRpb25zIGF2YWlsYWJsZSBvbiB0aGUgZ2VuZXJpYyBTTl9TQUxfU1lTQ1RMX09QCisgKiBydW50aW1lIHNlcnZpY2UKKyAqLworI2RlZmluZSBTQUxfU1lTQ1RMX09QX0lPQk9BUkQJCTB4MDAwMSAgLyogIHJldHJpZXZlIGJvYXJkIHR5cGUgKi8KKyNkZWZpbmUgU0FMX1NZU0NUTF9PUF9USU9fSkxDS19SU1QgICAgICAweDAwMDIgIC8qIGlzc3VlIFRJTyBjbG9jayByZXNldCAqLworCisvKgogICogSVJvdXRlciAoaS5lLiBnZW5lcmFsaXplZCBzeXN0ZW0gY29udHJvbGxlcikgb3BlcmF0aW9ucwogICovCiAjZGVmaW5lIFNBTF9JUk9VVEVSX09QRU4JMAkvKiBvcGVuIGEgc3ViY2hhbm5lbCAqLwpAQCAtODczLDYgKzg4MSw0MSBAQAogICAgICAgICByZXR1cm4gKGludCkgcnYudjA7CiB9CiAKKy8qCisgKiBBc2sgdGhlIHN5c3RlbSBjb250cm9sbGVyIG9uIHRoZSBzcGVjaWZpZWQgbmFzaWQgdG8gcmVzZXQKKyAqIHRoZSBDWCBjb3JlbGV0IGNsb2NrLiAgT25seSB2YWxpZCBvbiBUSU8gbm9kZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitpYTY0X3NuX3N5c2N0bF90aW9fY2xvY2tfcmVzZXQobmFzaWRfdCBuYXNpZCkKK3sKKwlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIHJ2OworCVNBTF9DQUxMX1JFRU5UUkFOVChydiwgU05fU0FMX1NZU0NUTF9PUCwgU0FMX1NZU0NUTF9PUF9USU9fSkxDS19SU1QsCisJCQluYXNpZCwgMCwgMCwgMCwgMCwgMCk7CisJaWYgKHJ2LnN0YXR1cyAhPSAwKQorCQlyZXR1cm4gKGludClydi5zdGF0dXM7CisJaWYgKHJ2LnYwICE9IDApCisJCXJldHVybiAoaW50KXJ2LnYwOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBHZXQgdGhlIGFzc29jaWF0ZWQgaW9ib2FyZCB0eXBlIGZvciBhIGdpdmVuIG5hc2lkLgorICovCitzdGF0aWMgaW5saW5lIGludAoraWE2NF9zbl9zeXNjdGxfaW9ib2FyZF9nZXQobmFzaWRfdCBuYXNpZCkKK3sKKyAgICAgICAgc3RydWN0IGlhNjRfc2FsX3JldHZhbCBydjsKKyAgICAgICAgU0FMX0NBTExfUkVFTlRSQU5UKHJ2LCBTTl9TQUxfU1lTQ1RMX09QLCBTQUxfU1lTQ1RMX09QX0lPQk9BUkQsCisgICAgICAgICAgICAgICAgICAgICAgICBuYXNpZCwgMCwgMCwgMCwgMCwgMCk7CisgICAgICAgIGlmIChydi52MCAhPSAwKQorICAgICAgICAgICAgICAgIHJldHVybiAoaW50KXJ2LnYwOworICAgICAgICBpZiAocnYudjEgIT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gKGludClydi52MTsKKworICAgICAgICByZXR1cm4gMDsKK30KKwogLyoqCiAgKiBpYTY0X3NuX2dldF9maXRfY29tcHQgLSByZWFkIGEgRklUIGVudHJ5IGZyb20gdGhlIFBST00gaGVhZGVyCiAgKiBAbmFzaWQ6IE5BU0lEIG9mIG5vZGUgdG8gcmVhZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi90aW9jYV9wcm92aWRlci5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi90aW9jYV9wcm92aWRlci5oCmluZGV4IDVjY2VjNjAuLmI1MzJlZjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24vdGlvY2FfcHJvdmlkZXIuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3Rpb2NhX3Byb3ZpZGVyLmgKQEAgLTE4MiwxMSArMTgyLDExIEBACiAJCQkgKiB0b3VjaCBldmVyeSBDTCBhbGlnbmVkIEdBUlQgZW50cnkuCiAJCQkgKi8KIAotCQkJY2FfYmFzZS0+Y2FfY29udHJvbDIgJj0gfihDQV9HQVJUX01FTV9QQVJBTSk7Ci0JCQljYV9iYXNlLT5jYV9jb250cm9sMiB8PSBDQV9HQVJUX0ZMVVNIX1RMQjsKLQkJCWNhX2Jhc2UtPmNhX2NvbnRyb2wyIHw9Ci0JCQkgICAgKDB4MnVsbCA8PCBDQV9HQVJUX01FTV9QQVJBTV9TSEZUKTsKLQkJCXRtcCA9IGNhX2Jhc2UtPmNhX2NvbnRyb2wyOworCQkJX19zbl9jbHJxX3JlbGF4ZWQoJmNhX2Jhc2UtPmNhX2NvbnRyb2wyLCBDQV9HQVJUX01FTV9QQVJBTSk7CisJCQlfX3NuX3NldHFfcmVsYXhlZCgmY2FfYmFzZS0+Y2FfY29udHJvbDIsIENBX0dBUlRfRkxVU0hfVExCKTsKKwkJCV9fc25fc2V0cV9yZWxheGVkKCZjYV9iYXNlLT5jYV9jb250cm9sMiwKKwkJCSAgICAoMHgydWxsIDw8IENBX0dBUlRfTUVNX1BBUkFNX1NIRlQpKTsKKwkJCXRtcCA9IF9fc25fcmVhZHFfcmVsYXhlZCgmY2FfYmFzZS0+Y2FfY29udHJvbDIpOwogCQl9CiAKIAkJcmV0dXJuOwpAQCAtMTk2LDggKzE5Niw4IEBACiAJICogR2FydCBpbiB1bmNhY2hlZCBtb2RlIC4uLiBuZWVkIGFuIGV4cGxpY2l0IGZsdXNoLgogCSAqLwogCi0JY2FfYmFzZS0+Y2FfY29udHJvbDIgfD0gQ0FfR0FSVF9GTFVTSF9UTEI7Ci0JdG1wID0gY2FfYmFzZS0+Y2FfY29udHJvbDI7CisJX19zbl9zZXRxX3JlbGF4ZWQoJmNhX2Jhc2UtPmNhX2NvbnRyb2wyLCBDQV9HQVJUX0ZMVVNIX1RMQik7CisJdG1wID0gX19zbl9yZWFkcV9yZWxheGVkKCZjYV9iYXNlLT5jYV9jb250cm9sMik7CiB9CiAKIGV4dGVybiB1aW50MzJfdAl0aW9jYV9nYXJ0X2ZvdW5kOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi90aW9jeC5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi90aW9jeC5oCmluZGV4IGM1NDQ3YTUuLjU2OTllNzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24vdGlvY3guaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3Rpb2N4LmgKQEAgLTE5LDYgKzE5LDcgQEAKIAogc3RydWN0IGN4X2RldiB7CiAJc3RydWN0IGN4X2lkX3MgY3hfaWQ7CisJaW50IGJ0OwkJCQkvKiBib2FyZC9ibGFkZSB0eXBlICovCiAJdm9pZCAqc29mdDsJCQkvKiBkcml2ZXIgc3BlY2lmaWMgKi8KIAlzdHJ1Y3QgaHViZGV2X2luZm8gKmh1YmRldjsKIAlzdHJ1Y3QgZGV2aWNlIGRldjsKQEAgLTU5LDcgKzYwLDcgQEAKIGV4dGVybiBzdHJ1Y3Qgc25faXJxX2luZm8gKnRpb2N4X2lycV9hbGxvYyhuYXNpZF90LCBpbnQsIGludCwgbmFzaWRfdCwgaW50KTsKIGV4dGVybiB2b2lkIHRpb2N4X2lycV9mcmVlKHN0cnVjdCBzbl9pcnFfaW5mbyAqKTsKIGV4dGVybiBpbnQgY3hfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IGN4X2RldiAqKTsKLWV4dGVybiBpbnQgY3hfZGV2aWNlX3JlZ2lzdGVyKG5hc2lkX3QsIGludCwgaW50LCBzdHJ1Y3QgaHViZGV2X2luZm8gKik7CitleHRlcm4gaW50IGN4X2RldmljZV9yZWdpc3RlcihuYXNpZF90LCBpbnQsIGludCwgc3RydWN0IGh1YmRldl9pbmZvICosIGludCk7CiBleHRlcm4gaW50IGN4X2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBjeF9kcnYgKik7CiBleHRlcm4gaW50IGN4X2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgY3hfZHJ2ICopOwogZXh0ZXJuIHVpbnQ2NF90IHRpb2N4X2RtYV9hZGRyKHVpbnQ2NF90IGFkZHIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS1pYTY0L3VhY2Nlc3MuaAppbmRleCAzYTc4MjliLi45YWRiNTEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3VhY2Nlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3VhY2Nlc3MuaApAQCAtMTg3LDggKzE4Nyw4IEBACiAoewkJCQkJCQkJCQkJXAogCWNvbnN0IF9fdHlwZW9mX18oKihwdHIpKSBfX3VzZXIgKl9fZ3VfcHRyID0gKHB0cik7CQkJCVwKIAlfX3R5cGVvZl9fIChzaXplKSBfX2d1X3NpemUgPSAoc2l6ZSk7CQkJCQkJXAotCWxvbmcgX19ndV9lcnIgPSAtRUZBVUxULCBfX2d1X3ZhbCA9IDA7CQkJCQkJXAotCQkJCQkJCQkJCQlcCisJbG9uZyBfX2d1X2VyciA9IC1FRkFVTFQ7CQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZ3VfdmFsID0gMDsJCQkJCQkJXAogCWlmICghY2hlY2sgfHwgX19hY2Nlc3Nfb2soX19ndV9wdHIsIHNpemUsIHNlZ21lbnQpKQkJCQlcCiAJCXN3aXRjaCAoX19ndV9zaXplKSB7CQkJCQkJCVwKIAkJICAgICAgY2FzZSAxOiBfX2dldF91c2VyX3NpemUoX19ndV92YWwsIF9fZ3VfcHRyLCAxLCBfX2d1X2Vycik7IGJyZWFrOwlcCkBAIC0yNDAsMTMgKzI0MCwxMyBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCiBfX2NvcHlfdG9fdXNlciAodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIGNvdW50KQogewotCXJldHVybiBfX2NvcHlfdXNlcih0bywgKHZvaWQgX191c2VyICopIGZyb20sIGNvdW50KTsKKwlyZXR1cm4gX19jb3B5X3VzZXIodG8sIChfX2ZvcmNlIHZvaWQgX191c2VyICopIGZyb20sIGNvdW50KTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCiBfX2NvcHlfZnJvbV91c2VyICh2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7Ci0JcmV0dXJuIF9fY29weV91c2VyKCh2b2lkIF9fdXNlciAqKSB0bywgZnJvbSwgY291bnQpOworCXJldHVybiBfX2NvcHlfdXNlcigoX19mb3JjZSB2b2lkIF9fdXNlciAqKSB0bywgZnJvbSwgY291bnQpOwogfQogCiAjZGVmaW5lIF9fY29weV90b191c2VyX2luYXRvbWljCQlfX2NvcHlfdG9fdXNlcgpAQCAtMjU4LDcgKzI1OCw3IEBACiAJbG9uZyBfX2N1X2xlbiA9IChuKTsJCQkJCQkJCVwKIAkJCQkJCQkJCQkJXAogCWlmIChfX2FjY2Vzc19vayhfX2N1X3RvLCBfX2N1X2xlbiwgZ2V0X2ZzKCkpKQkJCQkJXAotCQlfX2N1X2xlbiA9IF9fY29weV91c2VyKF9fY3VfdG8sICh2b2lkIF9fdXNlciAqKSBfX2N1X2Zyb20sIF9fY3VfbGVuKTsJXAorCQlfX2N1X2xlbiA9IF9fY29weV91c2VyKF9fY3VfdG8sIChfX2ZvcmNlIHZvaWQgX191c2VyICopIF9fY3VfZnJvbSwgX19jdV9sZW4pOwlcCiAJX19jdV9sZW47CQkJCQkJCQkJXAogfSkKIApAQCAtMjcwLDcgKzI3MCw3IEBACiAJCQkJCQkJCQkJCVwKIAlfX2Noa191c2VyX3B0cihfX2N1X2Zyb20pOwkJCQkJCQlcCiAJaWYgKF9fYWNjZXNzX29rKF9fY3VfZnJvbSwgX19jdV9sZW4sIGdldF9mcygpKSkJCQkJCVwKLQkJX19jdV9sZW4gPSBfX2NvcHlfdXNlcigodm9pZCBfX3VzZXIgKikgX19jdV90bywgX19jdV9mcm9tLCBfX2N1X2xlbik7CVwKKwkJX19jdV9sZW4gPSBfX2NvcHlfdXNlcigoX19mb3JjZSB2b2lkIF9fdXNlciAqKSBfX2N1X3RvLCBfX2N1X2Zyb20sIF9fY3VfbGVuKTsJXAogCV9fY3VfbGVuOwkJCQkJCQkJCVwKIH0pCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvZnV0ZXguaCBiL2luY2x1ZGUvYXNtLW0zMnIvZnV0ZXguaAppbmRleCAyY2FjNWVjLi45ZmVmZjRjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9mdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvZnV0ZXguaApAQCAtMTQsNyArMTQsNyBAQAogCWludCBjbXAgPSAoZW5jb2RlZF9vcCA+PiAyNCkgJiAxNTsKIAlpbnQgb3BhcmcgPSAoZW5jb2RlZF9vcCA8PCA4KSA+PiAyMDsKIAlpbnQgY21wYXJnID0gKGVuY29kZWRfb3AgPDwgMjApID4+IDIwOwotCWludCBvbGR2YWwgPSAwLCByZXQsIHRlbTsKKwlpbnQgb2xkdmFsID0gMCwgcmV0OwogCWlmIChlbmNvZGVkX29wICYgKEZVVEVYX09QX09QQVJHX1NISUZUIDw8IDI4KSkKIAkJb3BhcmcgPSAxIDw8IG9wYXJnOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2lvLmggYi9pbmNsdWRlL2FzbS1tMzJyL2lvLmgKaW5kZXggOGU5ZTQ4MS4uNzBhZDFjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9pby5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvaW8uaApAQCAtNjAsNyArNjAsNyBAQAogICoJYWRkcmVzcy4KICAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgKiBpb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqaW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQogewogCXJldHVybiBfX2lvcmVtYXAob2Zmc2V0LCBzaXplLCAwKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tbTMyci91YWNjZXNzLmgKaW5kZXggOTNkODYzYy4uMGRhN2M0NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci91YWNjZXNzLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci91YWNjZXNzLmgKQEAgLTIwOCw3ICsyMDgsOCBAQAogICogT24gZXJyb3IsIHRoZSB2YXJpYWJsZSBAeCBpcyBzZXQgdG8gemVyby4KICAqLwogI2RlZmluZSBnZXRfdXNlcih4LHB0cikJCQkJCQkJXAotKHsJaW50IF9fcmV0X2d1LF9fdmFsX2d1OwkJCQkJCVwKKyh7CWludCBfX3JldF9ndTsJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX192YWxfZ3U7CQkJCQkJXAogCV9fY2hrX3VzZXJfcHRyKHB0cik7CQkJCQkJXAogCXN3aXRjaChzaXplb2YgKCoocHRyKSkpIHsJCQkJCVwKIAljYXNlIDE6ICBfX2dldF91c2VyX3goMSxfX3JldF9ndSxfX3ZhbF9ndSxwdHIpOyBicmVhazsJCVwKQEAgLTQwMyw3ICs0MDQsOCBAQAogCiAjZGVmaW5lIF9fZ2V0X3VzZXJfbm9jaGVjayh4LHB0cixzaXplKQkJCQkJXAogKHsJCQkJCQkJCQlcCi0JbG9uZyBfX2d1X2VyciwgX19ndV92YWw7CQkJCQlcCisJbG9uZyBfX2d1X2VycjsJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX19ndV92YWw7CQkJCQkJXAogCV9fZ2V0X3VzZXJfc2l6ZShfX2d1X3ZhbCwocHRyKSwoc2l6ZSksX19ndV9lcnIpOwkJXAogCSh4KSA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19ndV92YWw7CQkJCVwKIAlfX2d1X2VycjsJCQkJCQkJXApAQCAtNTk0LDggKzU5Niw4IEBACiAJcmV0dXJuIG47CiB9CiAKLXVuc2lnbmVkIGxvbmcgX19nZW5lcmljX2NvcHlfdG9fdXNlcih2b2lkICosIGNvbnN0IHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7Ci11bnNpZ25lZCBsb25nIF9fZ2VuZXJpY19jb3B5X2Zyb21fdXNlcih2b2lkICosIGNvbnN0IHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7Cit1bnNpZ25lZCBsb25nIF9fZ2VuZXJpY19jb3B5X3RvX3VzZXIodm9pZCBfX3VzZXIgKiwgY29uc3Qgdm9pZCAqLCB1bnNpZ25lZCBsb25nKTsKK3Vuc2lnbmVkIGxvbmcgX19nZW5lcmljX2NvcHlfZnJvbV91c2VyKHZvaWQgKiwgY29uc3Qgdm9pZCBfX3VzZXIgKiwgdW5zaWduZWQgbG9uZyk7CiAKIC8qKgogICogX19jb3B5X3RvX3VzZXI6IC0gQ29weSBhIGJsb2NrIG9mIGRhdGEgaW50byB1c2VyIHNwYWNlLCB3aXRoIGxlc3MgY2hlY2tpbmcuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2Z1dGV4LmggYi9pbmNsdWRlL2FzbS1tNjhrL2Z1dGV4LmgKaW5kZXggMmNhYzVlYy4uOWZlZmY0Y2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvZnV0ZXguaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2Z1dGV4LmgKQEAgLTE0LDcgKzE0LDcgQEAKIAlpbnQgY21wID0gKGVuY29kZWRfb3AgPj4gMjQpICYgMTU7CiAJaW50IG9wYXJnID0gKGVuY29kZWRfb3AgPDwgOCkgPj4gMjA7CiAJaW50IGNtcGFyZyA9IChlbmNvZGVkX29wIDw8IDIwKSA+PiAyMDsKLQlpbnQgb2xkdmFsID0gMCwgcmV0LCB0ZW07CisJaW50IG9sZHZhbCA9IDAsIHJldDsKIAlpZiAoZW5jb2RlZF9vcCAmIChGVVRFWF9PUF9PUEFSR19TSElGVCA8PCAyOCkpCiAJCW9wYXJnID0gMSA8PCBvcGFyZzsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2Z1dGV4LmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZnV0ZXguaAppbmRleCAyY2FjNWVjLi45ZmVmZjRjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2Z1dGV4LmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2Z1dGV4LmgKQEAgLTE0LDcgKzE0LDcgQEAKIAlpbnQgY21wID0gKGVuY29kZWRfb3AgPj4gMjQpICYgMTU7CiAJaW50IG9wYXJnID0gKGVuY29kZWRfb3AgPDwgOCkgPj4gMjA7CiAJaW50IGNtcGFyZyA9IChlbmNvZGVkX29wIDw8IDIwKSA+PiAyMDsKLQlpbnQgb2xkdmFsID0gMCwgcmV0LCB0ZW07CisJaW50IG9sZHZhbCA9IDAsIHJldDsKIAlpZiAoZW5jb2RlZF9vcCAmIChGVVRFWF9PUF9PUEFSR19TSElGVCA8PCAyOCkpCiAJCW9wYXJnID0gMSA8PCBvcGFyZzsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUuaAppbmRleCBjYmQxNjcyLi5lYWY1ZDliIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUuaApAQCAtNjgsNiArNjgsOCBAQAogI2RlZmluZSBaRVJPX1BBR0UodmFkZHIpIFwKIAkodmlydF90b19wYWdlKGVtcHR5X3plcm9fcGFnZSArICgoKHVuc2lnbmVkIGxvbmcpKHZhZGRyKSkgJiB6ZXJvX3BhZ2VfbWFzaykpKQogCisjZGVmaW5lIF9fSEFWRV9BUkNIX01VTFRJUExFX1pFUk9fUEFHRQorCiBleHRlcm4gdm9pZCBwYWdpbmdfaW5pdCh2b2lkKTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9mdXRleC5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2Z1dGV4LmgKaW5kZXggMmNhYzVlYy4uOWZlZmY0Y2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9mdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9mdXRleC5oCkBAIC0xNCw3ICsxNCw3IEBACiAJaW50IGNtcCA9IChlbmNvZGVkX29wID4+IDI0KSAmIDE1OwogCWludCBvcGFyZyA9IChlbmNvZGVkX29wIDw8IDgpID4+IDIwOwogCWludCBjbXBhcmcgPSAoZW5jb2RlZF9vcCA8PCAyMCkgPj4gMjA7Ci0JaW50IG9sZHZhbCA9IDAsIHJldCwgdGVtOworCWludCBvbGR2YWwgPSAwLCByZXQ7CiAJaWYgKGVuY29kZWRfb3AgJiAoRlVURVhfT1BfT1BBUkdfU0hJRlQgPDwgMjgpKQogCQlvcGFyZyA9IDEgPDwgb3Bhcmc7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdGltZXguaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdGltZXguaAppbmRleCA1MWM1YjMxLi5jMDJkMTVhYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy90aW1leC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdGltZXguaApAQCAtMTAsNyArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogCi0jZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkxMTkzMTgwIC8qIFVuZGVybHlpbmcgSFogKi8KKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCTEwMjQwMDAgLyogVW5kZXJseWluZyBIWiAqLwogCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgY3ljbGVzX3Q7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9jcHV0YWJsZS5oIGIvaW5jbHVkZS9hc20tcHBjL2NwdXRhYmxlLmgKaW5kZXggNDFkOGY4NC4uZTE3YzQ5MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL2NwdXRhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL2NwdXRhYmxlLmgKQEAgLTI0LDYgKzI0LDcgQEAKICNkZWZpbmUgUFBDX0ZFQVRVUkVfSEFTX1NQRQkJMHgwMDgwMDAwMAogI2RlZmluZSBQUENfRkVBVFVSRV9IQVNfRUZQX1NJTkdMRQkweDAwNDAwMDAwCiAjZGVmaW5lIFBQQ19GRUFUVVJFX0hBU19FRlBfRE9VQkxFCTB4MDAyMDAwMDAKKyNkZWZpbmUgUFBDX0ZFQVRVUkVfTk9fVEIJCTB4MDAxMDAwMDAKIAogI2lmZGVmIF9fS0VSTkVMX18KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS1wcGMvZG1hLW1hcHBpbmcuaAppbmRleCA5MmI4ZWU3Li4wNjFiZmNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvZG1hLW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvZG1hLW1hcHBpbmcuaApAQCAtNjEsNyArNjEsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgKmRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCQkJCSAgICAgICBkbWFfYWRkcl90ICogZG1hX2hhbmRsZSwKLQkJCQkgICAgICAgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCkKKwkJCQkgICAgICAgZ2ZwX3QgZ2ZwKQogewogI2lmZGVmIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUKIAlyZXR1cm4gX19kbWFfYWxsb2NfY29oZXJlbnQoc2l6ZSwgZG1hX2hhbmRsZSwgZ2ZwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9mdXRleC5oIGIvaW5jbHVkZS9hc20tcHBjL2Z1dGV4LmgKaW5kZXggMmNhYzVlYy4uOWZlZmY0Y2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9mdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9mdXRleC5oCkBAIC0xNCw3ICsxNCw3IEBACiAJaW50IGNtcCA9IChlbmNvZGVkX29wID4+IDI0KSAmIDE1OwogCWludCBvcGFyZyA9IChlbmNvZGVkX29wIDw8IDgpID4+IDIwOwogCWludCBjbXBhcmcgPSAoZW5jb2RlZF9vcCA8PCAyMCkgPj4gMjA7Ci0JaW50IG9sZHZhbCA9IDAsIHJldCwgdGVtOworCWludCBvbGR2YWwgPSAwLCByZXQ7CiAJaWYgKGVuY29kZWRfb3AgJiAoRlVURVhfT1BfT1BBUkdfU0hJRlQgPDwgMjgpKQogCQlvcGFyZyA9IDEgPDwgb3Bhcmc7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9pby5oIGIvaW5jbHVkZS9hc20tcHBjL2lvLmgKaW5kZXggN2ViN2NmNi4uOTRkODM5OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL2lvLmgKQEAgLTU2LDcgKzU2LDcgQEAKICAqIGlzIGFjdHVhbGx5IHBlcmZvcm1lZCAoaS5lLiB0aGUgZGF0YSBoYXMgY29tZSBiYWNrKSBiZWZvcmUgd2Ugc3RhcnQKICAqIGV4ZWN1dGluZyBhbnkgZm9sbG93aW5nIGluc3RydWN0aW9ucy4KICAqLwotZXh0ZXJuIGlubGluZSBpbnQgaW5fOCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIF9faW9tZW0gKmFkZHIpCitleHRlcm4gaW5saW5lIGludCBpbl84KGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgX19pb21lbSAqYWRkcikKIHsKIAlpbnQgcmV0OwogCkBAIC03Miw3ICs3Miw3IEBACiAJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YiVVMCVYMCAlMSwlMDsgZWllaW8iIDogIj1tIiAoKmFkZHIpIDogInIiICh2YWwpKTsKIH0KIAotZXh0ZXJuIGlubGluZSBpbnQgaW5fbGUxNih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBfX2lvbWVtICphZGRyKQorZXh0ZXJuIGlubGluZSBpbnQgaW5fbGUxNihjb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBfX2lvbWVtICphZGRyKQogewogCWludCByZXQ7CiAKQEAgLTgzLDcgKzgzLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1leHRlcm4gaW5saW5lIGludCBpbl9iZTE2KHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IF9faW9tZW0gKmFkZHIpCitleHRlcm4gaW5saW5lIGludCBpbl9iZTE2KGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IF9faW9tZW0gKmFkZHIpCiB7CiAJaW50IHJldDsKIApAQCAtMTA0LDcgKzEwNCw3IEBACiAJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aCVVMCVYMCAlMSwlMDsgZWllaW8iIDogIj1tIiAoKmFkZHIpIDogInIiICh2YWwpKTsKIH0KIAotZXh0ZXJuIGlubGluZSB1bnNpZ25lZCBpbl9sZTMyKHZvbGF0aWxlIHVuc2lnbmVkIF9faW9tZW0gKmFkZHIpCitleHRlcm4gaW5saW5lIHVuc2lnbmVkIGluX2xlMzIoY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgX19pb21lbSAqYWRkcikKIHsKIAl1bnNpZ25lZCByZXQ7CiAKQEAgLTExNSw3ICsxMTUsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWV4dGVybiBpbmxpbmUgdW5zaWduZWQgaW5fYmUzMih2b2xhdGlsZSB1bnNpZ25lZCBfX2lvbWVtICphZGRyKQorZXh0ZXJuIGlubGluZSB1bnNpZ25lZCBpbl9iZTMyKGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIF9faW9tZW0gKmFkZHIpCiB7CiAJdW5zaWduZWQgcmV0OwogCkBAIC0xMzksNyArMTM5LDcgQEAKICNkZWZpbmUgcmVhZGIoYWRkcikgaW5fOCgodm9sYXRpbGUgdTggKikoYWRkcikpCiAjZGVmaW5lIHdyaXRlYihiLGFkZHIpIG91dF84KCh2b2xhdGlsZSB1OCAqKShhZGRyKSwgKGIpKQogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgX191OCByZWFkYih2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCitzdGF0aWMgaW5saW5lIF9fdTggcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCXJldHVybiBpbl84KGFkZHIpOwogfQpAQCAtMTUwLDExICsxNTAsMTEgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfQVBVUykKLXN0YXRpYyBpbmxpbmUgX191MTYgcmVhZHcodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQorc3RhdGljIGlubGluZSBfX3UxNiByZWFkdyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJcmV0dXJuICooX19mb3JjZSB2b2xhdGlsZSBfX3UxNiAqKShhZGRyKTsKIH0KLXN0YXRpYyBpbmxpbmUgX191MzIgcmVhZGwodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQorc3RhdGljIGlubGluZSBfX3UzMiByZWFkbChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJcmV0dXJuICooX19mb3JjZSB2b2xhdGlsZSBfX3UzMiAqKShhZGRyKTsKIH0KQEAgLTE3MywxMSArMTczLDExIEBACiAjZGVmaW5lIHdyaXRldyhiLGFkZHIpIG91dF9sZTE2KCh2b2xhdGlsZSB1MTYgKikoYWRkciksKGIpKQogI2RlZmluZSB3cml0ZWwoYixhZGRyKSBvdXRfbGUzMigodm9sYXRpbGUgdTMyICopKGFkZHIpLChiKSkKICNlbHNlCi1zdGF0aWMgaW5saW5lIF9fdTE2IHJlYWR3KHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3N0YXRpYyBpbmxpbmUgX191MTYgcmVhZHcoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCXJldHVybiBpbl9sZTE2KGFkZHIpOwogfQotc3RhdGljIGlubGluZSBfX3UzMiByZWFkbCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCitzdGF0aWMgaW5saW5lIF9fdTMyIHJlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlyZXR1cm4gaW5fbGUzMihhZGRyKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9pcnEuaCBiL2luY2x1ZGUvYXNtLXBwYy9pcnEuaAppbmRleCA1NTc1MjQ3Li5iZDk2NzQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL2lycS5oCkBAIC0xMzgsNiArMTM4LDE2IEBACiAjZGVmaW5lCVNJVV9JUlE3CSgxNCkKICNkZWZpbmUJU0lVX0xFVkVMNwkoMTUpCiAKKyNkZWZpbmUgTVBDOHh4X0lOVF9GRUMxCQlTSVVfTEVWRUwxCisjZGVmaW5lIE1QQzh4eF9JTlRfRkVDMgkJU0lVX0xFVkVMMworCisjZGVmaW5lIE1QQzh4eF9JTlRfU0NDMQkJKENQTV9JUlFfT0ZGU0VUICsgQ1BNVkVDX1NDQzEpCisjZGVmaW5lIE1QQzh4eF9JTlRfU0NDMgkJKENQTV9JUlFfT0ZGU0VUICsgQ1BNVkVDX1NDQzIpCisjZGVmaW5lIE1QQzh4eF9JTlRfU0NDMwkJKENQTV9JUlFfT0ZGU0VUICsgQ1BNVkVDX1NDQzMpCisjZGVmaW5lIE1QQzh4eF9JTlRfU0NDNAkJKENQTV9JUlFfT0ZGU0VUICsgQ1BNVkVDX1NDQzQpCisjZGVmaW5lIE1QQzh4eF9JTlRfU01DMQkJKENQTV9JUlFfT0ZGU0VUICsgQ1BNVkVDX1NNQzEpCisjZGVmaW5lIE1QQzh4eF9JTlRfU01DMgkJKENQTV9JUlFfT0ZGU0VUICsgQ1BNVkVDX1NNQzIpCisKIC8qIFRoZSBpbnRlcm5hbCBpbnRlcnJ1cHRzIHdlIGNhbiBjb25maWd1cmUgYXMgd2Ugc2VlIGZpdC4KICAqIE15IHBlcnNvbmFsIHByZWZlcmVuY2UgaXMgQ1BNIGF0IGxldmVsIDIsIHdoaWNoIHB1dHMgaXQgYWJvdmUgdGhlCiAgKiBNQlggUENJL0lTQS9JREUgaW50ZXJydXB0cy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9tYWNpby5oIGIvaW5jbHVkZS9hc20tcHBjL21hY2lvLmgKaW5kZXggYTQ4MWI3Ny4uYjU1M2RkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL21hY2lvLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL21hY2lvLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fTUFDSU9fQVNJQ19IX18KICNkZWZpbmUgX19NQUNJT19BU0lDX0hfXwogCi0jaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL29mX2RldmljZS5oPgogCiBleHRlcm4gc3RydWN0IGJ1c190eXBlIG1hY2lvX2J1c190eXBlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL21wYzh4eC5oIGIvaW5jbHVkZS9hc20tcHBjL21wYzh4eC5oCmluZGV4IGRjOGU1OTguLjIwOGEyZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9tcGM4eHguaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvbXBjOHh4LmgKQEAgLTk3LDYgKzk3LDIyIEBACiAKIHN0cnVjdCBwdF9yZWdzOwogCitlbnVtIHBwY19zeXNfZGV2aWNlcyB7CisJTVBDOHh4X0NQTV9GRUMxLAorCU1QQzh4eF9DUE1fRkVDMiwKKwlNUEM4eHhfQ1BNX0kyQywKKwlNUEM4eHhfQ1BNX1NDQzEsCisJTVBDOHh4X0NQTV9TQ0MyLAorCU1QQzh4eF9DUE1fU0NDMywKKwlNUEM4eHhfQ1BNX1NDQzQsCisJTVBDOHh4X0NQTV9TUEksCisJTVBDOHh4X0NQTV9NQ0MxLAorCU1QQzh4eF9DUE1fTUNDMiwKKwlNUEM4eHhfQ1BNX1NNQzEsCisJTVBDOHh4X0NQTV9TTUMyLAorCU1QQzh4eF9DUE1fVVNCLAorfTsKKwogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAvKiBDT05GSUdfOHh4ICovCiAjZW5kaWYgLyogX19DT05GSUdfOHh4X0RFRlMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9tdjY0eDYwLmggYi9pbmNsdWRlL2FzbS1wcGMvbXY2NHg2MC5oCmluZGV4IDc1YzJmZmEuLmVlMmY5MTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9tdjY0eDYwLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL212NjR4NjAuaApAQCAtMjMzLDcgKzIzMyw3IEBACiBzdHJ1Y3QgbXY2NHg2MF9oYW5kbGUgewogCXUzMgkJdHlwZTsJCS8qIHR5cGUgb2YgYnJpZGdlICovCiAJdTMyCQlyZXY7CQkvKiByZXZpc2lvbiBvZiBicmlkZ2UgKi8KLQl2b2lkCQkqdl9iYXNlOwkvKiB2aXJ0dWFsIGJhc2UgYWRkciBvZiBicmlkZ2UgcmVncyAqLworCXZvaWQJCV9faW9tZW0gKnZfYmFzZTsvKiB2aXJ0dWFsIGJhc2UgYWRkciBvZiBicmlkZ2UgcmVncyAqLwogCXBoeXNfYWRkcl90CXBfYmFzZTsJCS8qIHBoeXNpY2FsIGJhc2UgYWRkciBvZiBicmlkZ2UgcmVncyAqLwogCiAJdTMyCQlwY2lfbW9kZV9hOwkvKiBwY2kgMCBtb2RlOiBjb252ZW50aW9uYWwgcGNpLCBwY2kteCovCkBAIC0zMDMsNyArMzAzLDcgQEAKIAl1MzIgY2ZnX2RhdGEsIHN0cnVjdCBwY2lfY29udHJvbGxlciAqKmhvc2UpOwogaW50IG12NjR4NjBfZ2V0X3R5cGUoc3RydWN0IG12NjR4NjBfaGFuZGxlICpiaCk7CiBpbnQgbXY2NHg2MF9zZXR1cF9mb3JfY2hpcChzdHJ1Y3QgbXY2NHg2MF9oYW5kbGUgKmJoKTsKLXZvaWQgKm12NjR4NjBfZ2V0X2JyaWRnZV92YmFzZSh2b2lkKTsKK3ZvaWQgX19pb21lbSAqbXY2NHg2MF9nZXRfYnJpZGdlX3ZiYXNlKHZvaWQpOwogdTMyIG12NjR4NjBfZ2V0X2JyaWRnZV90eXBlKHZvaWQpOwogdTMyIG12NjR4NjBfZ2V0X2JyaWRnZV9yZXYodm9pZCk7CiB2b2lkIG12NjR4NjBfZ2V0X21lbV93aW5kb3dzKHN0cnVjdCBtdjY0eDYwX2hhbmRsZSAqYmgsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvb2ZfZGV2aWNlLmggYi9pbmNsdWRlL2FzbS1wcGMvb2ZfZGV2aWNlLmgKaW5kZXggNGIyNjRjZi4uNTc1YmNlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL29mX2RldmljZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9vZl9kZXZpY2UuaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX19PRl9ERVZJQ0VfSF9fCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogCiAvKgpAQCAtNTUsNyArNTYsOSBAQAogZXh0ZXJuIHZvaWQgb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciAqZHJ2KTsKIGV4dGVybiBpbnQgb2ZfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KTsKIGV4dGVybiB2b2lkIG9mX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KTsKLWV4dGVybiBzdHJ1Y3Qgb2ZfZGV2aWNlICpvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNvbnN0IGNoYXIgKmJ1c19pZCk7CitleHRlcm4gc3RydWN0IG9mX2RldmljZSAqb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCQkJICAgY29uc3QgY2hhciAqYnVzX2lkLAorCQkJCQkJICAgc3RydWN0IGRldmljZSAqcGFyZW50KTsKIGV4dGVybiB2b2lkIG9mX3JlbGVhc2VfZGV2KHN0cnVjdCBkZXZpY2UgKmRldik7CiAKICNlbmRpZiAvKiBfX09GX0RFVklDRV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wcGNfc3lzLmggYi9pbmNsdWRlL2FzbS1wcGMvcHBjX3N5cy5oCmluZGV4IDA0OGY3YzguLjU0OWY0NDg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvcHBjX3N5cy5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9wcGNfc3lzLmgKQEAgLTI3LDYgKzI3LDggQEAKICNpbmNsdWRlIDxhc20vbXBjODN4eC5oPgogI2VsaWYgZGVmaW5lZChDT05GSUdfODV4eCkKICNpbmNsdWRlIDxhc20vbXBjODV4eC5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfOHh4KQorI2luY2x1ZGUgPGFzbS9tcGM4eHguaD4KICNlbGlmIGRlZmluZWQoQ09ORklHX1BQQ19NUEM1Mnh4KQogI2luY2x1ZGUgPGFzbS9tcGM1Mnh4Lmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR19NUEMxMFhfQlJJREdFKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2RtYS1tYXBwaW5nLmgKaW5kZXggOWFkOGFkZS4uZmI2OGZhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvZG1hLW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9kbWEtbWFwcGluZy5oCkBAIC0xOSw3ICsxOSw3IEBACiBleHRlcm4gaW50IGRtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzayk7CiBleHRlcm4gaW50IGRtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBkbWFfbWFzayk7CiBleHRlcm4gdm9pZCAqZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCi0JCWRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIHVuc2lnbmVkIGludCBfX25vY2FzdCBmbGFnKTsKKwkJZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZyk7CiBleHRlcm4gdm9pZCBkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICpjcHVfYWRkciwKIAkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlKTsKIGV4dGVybiBkbWFfYWRkcl90IGRtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsCkBAIC0xMTgsNyArMTE4LDcgQEAKICAqLwogc3RydWN0IGRtYV9tYXBwaW5nX29wcyB7CiAJdm9pZCAqCQkoKmFsbG9jX2NvaGVyZW50KShzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJCWRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIHVuc2lnbmVkIGludCBfX25vY2FzdCBmbGFnKTsKKwkJCQlkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKTsKIAl2b2lkCQkoKmZyZWVfY29oZXJlbnQpKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCQkJdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSk7CiAJZG1hX2FkZHJfdAkoKm1hcF9zaW5nbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcHRyLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvaW9tbXUuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2lvbW11LmgKaW5kZXggNzJkY2Y4MS4uYzJmM2I2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvaW9tbXUuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9pb21tdS5oCkBAIC0xMjIsNyArMTIyLDcgQEAKIAkJaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKIAogZXh0ZXJuIHZvaWQgKmlvbW11X2FsbG9jX2NvaGVyZW50KHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLCBzaXplX3Qgc2l6ZSwKLQkJZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGZsYWcpOworCQlkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKTsKIGV4dGVybiB2b2lkIGlvbW11X2ZyZWVfY29oZXJlbnQoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIHNpemVfdCBzaXplLAogCQl2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKTsKIGV4dGVybiBkbWFfYWRkcl90IGlvbW11X21hcF9zaW5nbGUoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIHZvaWQgKnZhZGRyLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvc211LmggYi9pbmNsdWRlL2FzbS1wcGM2NC9zbXUuaAppbmRleCAxMGI0Mzk3Li5kZWU4ZWVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9zbXUuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9zbXUuaApAQCAtMSwyMiArMSwzNzkgQEAKKyNpZm5kZWYgX1NNVV9ICisjZGVmaW5lIF9TTVVfSAorCiAvKgogICogRGVmaW5pdGlvbnMgZm9yIHRhbGtpbmcgdG8gdGhlIFNNVSBjaGlwIGluIG5ld2VyIEc1IFBvd2VyTWFjcwogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKIC8qCi0gKiBCYXNpYyByb3V0aW5lcyBmb3IgdXNlIGJ5IGFyY2hpdGVjdHVyZS4gVG8gYmUgZXh0ZW5kZWQgYXMKLSAqIHdlIHVuZGVyc3RhbmQgbW9yZSBvZiB0aGUgY2hpcAorICogS25vd24gU01VIGNvbW1hbmRzCisgKgorICogTW9zdCBvZiB3aGF0IGlzIGJlbG93IGNvbWVzIGZyb20gbG9va2luZyBhdCB0aGUgT3BlbiBGaXJtd2FyZSBkcml2ZXIsCisgKiB0aG91Z2ggdGhpcyBpcyBzdGlsbCBpbmNvbXBsZXRlIGFuZCBjb3VsZCB1c2UgYmV0dGVyIGRvY3VtZW50YXRpb24gaGVyZQorICogb3IgdGhlcmUuLi4KKyAqLworCisKKy8qCisgKiBQYXJ0aXRpb24gaW5mbyBjb21tYW5kcworICoKKyAqIEkgZG8gbm90IGtub3cgd2hhdCB0aG9zZSBhcmUgZm9yIGF0IHRoaXMgcG9pbnQKKyAqLworI2RlZmluZSBTTVVfQ01EX1BBUlRJVElPTl9DT01NQU5ECQkweDNlCisKKworLyoKKyAqIEZhbiBjb250cm9sCisgKgorICogVGhpcyBpcyBhICJtdXgiIGZvciBmYW4gY29udHJvbCBjb21tYW5kcywgZmlyc3QgYnl0ZSBpcyB0aGUKKyAqICJzdWIiIGNvbW1hbmQuCisgKi8KKyNkZWZpbmUgU01VX0NNRF9GQU5fQ09NTUFORAkJCTB4NGEKKworCisvKgorICogQmF0dGVyeSBhY2Nlc3MKKyAqCisgKiBTYW1lIGNvbW1hbmQgbnVtYmVyIGFzIHRoZSBQTVUsIGNvdWxkIGl0IGJlIHNhbWUgc3ludGF4ID8KKyAqLworI2RlZmluZSBTTVVfQ01EX0JBVFRFUllfQ09NTUFORAkJCTB4NmYKKyNkZWZpbmUgICBTTVVfQ01EX0dFVF9CQVRURVJZX0lORk8JCTB4MDAKKworLyoKKyAqIFJlYWwgdGltZSBjbG9jayBjb250cm9sCisgKgorICogVGhpcyBpcyBhICJtdXgiLCBmaXJzdCBkYXRhIGJ5dGUgY29udGFpbnMgdGhlICJzdWIiIGNvbW1hbmQuCisgKiBUaGUgIlJUQyIgcGFydCBvZiB0aGUgU01VIGNvbnRyb2xzIHRoZSBkYXRlLCB0aW1lLCBwb3dlcnVwCisgKiB0aW1lciwgYnV0IGFsc28gYSBQUkFNCisgKgorICogRGF0ZXMgYXJlIGluIEJDRCBmb3JtYXQgb24gNyBieXRlczoKKyAqIFtzZWNdIFttaW5dIFtob3VyXSBbd2Vla2RheV0gW21vbnRoIGRheV0gW21vbnRoXSBbeWVhcl0KKyAqIHdpdGggbW9udGggYmVpbmcgMSBiYXNlZCBhbmQgeWVhciBtaW51cyAxMDAKKyAqLworI2RlZmluZSBTTVVfQ01EX1JUQ19DT01NQU5ECQkJMHg4ZQorI2RlZmluZSAgIFNNVV9DTURfUlRDX1NFVF9QV1JVUF9USU1FUgkJMHgwMCAvKiBpOiA3IGJ5dGVzIGRhdGUgKi8KKyNkZWZpbmUgICBTTVVfQ01EX1JUQ19HRVRfUFdSVVBfVElNRVIJCTB4MDEgLyogbzogNyBieXRlcyBkYXRlICovCisjZGVmaW5lICAgU01VX0NNRF9SVENfU1RPUF9QV1JVUF9USU1FUgkJMHgwMgorI2RlZmluZSAgIFNNVV9DTURfUlRDX1NFVF9QUkFNX0JZVEVfQUNDCQkweDIwIC8qIGk6IDEgYnl0ZSAoYWRkcmVzcz8pICovCisjZGVmaW5lICAgU01VX0NNRF9SVENfU0VUX1BSQU1fQVVUT0lOQwkJMHgyMSAvKiBpOiAxIGJ5dGUgKGRhdGE/KSAqLworI2RlZmluZSAgIFNNVV9DTURfUlRDX1NFVF9QUkFNX0xPX0JZVEVTIAkweDIyIC8qIGk6IDEwIGJ5dGVzICovCisjZGVmaW5lICAgU01VX0NNRF9SVENfU0VUX1BSQU1fSElfQllURVMgCTB4MjMgLyogaTogMTAgYnl0ZXMgKi8KKyNkZWZpbmUgICBTTVVfQ01EX1JUQ19HRVRfUFJBTV9CWVRFCQkweDI4IC8qIGk6IDEgYnl0ZXMgKGFkZHJlc3M/KSAqLworI2RlZmluZSAgIFNNVV9DTURfUlRDX0dFVF9QUkFNX0xPX0JZVEVTIAkweDI5IC8qIG86IDEwIGJ5dGVzICovCisjZGVmaW5lICAgU01VX0NNRF9SVENfR0VUX1BSQU1fSElfQllURVMgCTB4MmEgLyogbzogMTAgYnl0ZXMgKi8KKyNkZWZpbmUJICBTTVVfQ01EX1JUQ19TRVRfREFURVRJTUUJCTB4ODAgLyogaTogNyBieXRlcyBkYXRlICovCisjZGVmaW5lICAgU01VX0NNRF9SVENfR0VUX0RBVEVUSU1FCQkweDgxIC8qIG86IDcgYnl0ZXMgZGF0ZSAqLworCisgLyoKKyAgKiBpMmMgY29tbWFuZHMKKyAgKgorICAqIFRvIGlzc3VlIGFuIGkyYyBjb21tYW5kLCBmaXJzdCBpcyB0byBzZW5kIGEgcGFyYW1ldGVyIGJsb2NrIHRvIHRoZQorICAqIHRoZSBTTVUuIFRoaXMgaXMgYSBjb21tYW5kIG9mIHR5cGUgMHg5YSB3aXRoIDkgYnl0ZXMgb2YgaGVhZGVyCisgICogZXZlbnR1YWxseSBmb2xsb3dlZCBieSBkYXRhIGZvciBhIHdyaXRlOgorICAqCisgICogMDogYnVzIG51bWJlciAoZnJvbSBkZXZpY2UtdHJlZSB1c3VhbGx5LCBTTVUgaGFzIGxvdHMgb2YgYnVzc2VzICEpCisgICogMTogdHJhbnNmZXIgdHlwZS9mb3JtYXQgKHNlZSBiZWxvdykKKyAgKiAyOiBkZXZpY2UgYWRkcmVzcy4gRm9yIGNvbWJpbmVkIGFuZCBjb21iaW5lZDQgdHlwZSB0cmFuc2ZlcnMsIHRoaXMKKyAgKiAgICBpcyB0aGUgIndyaXRlIiB2ZXJzaW9uIG9mIHRoZSBhZGRyZXNzIChiaXQgMHgwMSBjbGVhcmVkKQorICAqIDM6IHN1YmFkZHJlc3MgbGVuZ3RoICgwLi4zKQorICAqIDQ6IHN1YmFkZHJlc3MgYnl0ZSAwIChvciBvbmx5IGJ5dGUgZm9yIHN1YmFkZHJlc3MgbGVuZ3RoIDEpCisgICogNTogc3ViYWRkcmVzcyBieXRlIDEKKyAgKiA2OiBzdWJhZGRyZXNzIGJ5dGUgMgorICAqIDc6IGNvbWJpbmVkIGFkZHJlc3MgKGRldmljZSBhZGRyZXNzIGZvciBjb21iaW5lZCBtb2RlIGRhdGEgcGhhc2UpCisgICogODogZGF0YSBsZW5ndGgKKyAgKgorICAqIFRoZSB0cmFuc2ZlciB0eXBlcyBhcmUgdGhlIHNhbWUgZ29vZCBvbGQgQXBwbGUgb25lcyBpdCBzZWVtcywKKyAgKiB0aGF0IGlzOgorICAqICAgLSAweDAwOiBTaW1wbGUgdHJhbnNmZXIKKyAgKiAgIC0gMHgwMTogU3ViYWRkcmVzcyB0cmFuc2ZlciAoYWRkciB3cml0ZSArIGRhdGEgdHgsIG5vIHJlc3RhcnQpCisgICogICAtIDB4MDI6IENvbWJpbmVkIHRyYW5zZmVyIChhZGRyIHdyaXRlICsgcmVzdGFydCArIGRhdGEgdHgpCisgICoKKyAgKiBUaGlzIGlzIHRoZW4gZm9sbG93ZWQgYnkgYWN0dWFsIGRhdGEgZm9yIGEgd3JpdGUuCisgICoKKyAgKiBBdCB0aGlzIHBvaW50LCB0aGUgT0YgZHJpdmVyIHNlZW1zIHRvIGhhdmUgYSBsaW1pdGF0aW9uIG9uIHRyYW5zZmVyCisgICogc2l6ZXMgb2YgMHhkIGJ5dGVzIG9uIHJlYWRzIGFuZCAweDUgYnl0ZXMgb24gd3JpdGVzLiBJIGRvIG5vdCBrbm93CisgICogd2V0aGVyIHRoaXMgaXMganVzdCBhbiBPRiBsaW1pdCBkdWUgdG8gc29tZSB0ZW1wb3JhcnkgYnVmZmVyIHNpemUKKyAgKiBvciBpZiB0aGlzIGlzIGFuIFNNVSBpbXBvc2VkIGxpbWl0LiBUaGlzIGRyaXZlciBoYXMgdGhlIHNhbWUgbGltaXRhdGlvbgorICAqIGZvciBub3cgYXMgSSB1c2UgYSAweDEwIGJ5dGVzIHRlbXBvcmFyeSBidWZmZXIgYXMgd2VsbAorICAqCisgICogT25jZSB0aGF0IGlzIGNvbXBsZXRlZCwgYSByZXNwb25zZSBpcyBleHBlY3RlZCBmcm9tIHRoZSBTTVUuIFRoaXMgaXMKKyAgKiBvYnRhaW5lZCB2aWEgYSBjb21tYW5kIG9mIHR5cGUgMHg5YSB3aXRoIGEgbGVuZ3RoIG9mIDEgYnl0ZSBjb250YWluaW5nCisgICogMCBhcyB0aGUgZGF0YSBieXRlLiBPRiBhbHNvIGZpbGxzIHRoZSByZXN0IG9mIHRoZSBkYXRhIGJ1ZmZlciB3aXRoIDB4ZmYncworICAqIHRob3VnaCBJIGNhbid0IHRlbGwgeWV0IGlmIHRoaXMgaXMgYWN0dWFsbHkgbmVjZXNzYXJ5LiBPbmNlIHRoaXMgY29tbWFuZAorICAqIGlzIGNvbXBsZXRlLCBhdCB0aGlzIHBvaW50LCBhbGwgSSBjYW4gdGVsbCBpcyB3aGF0IE9GIGRvZXMuIE9GIHRlc3RzCisgICogYnl0ZSAwIG9mIHRoZSByZXBseToKKyAgKiAgIC0gb24gcmVhZCwgMHhmZSBvciAweGZjIDogYnVzIGlzIGJ1c3ksIHdhaXQgKHNlZSBiZWxvdykgb3IgbmFrID8KKyAgKiAgIC0gb24gcmVhZCwgMHgwMCBvciAweDAxIDogcmVwbHkgaXMgaW4gYnVmZmVyIChhZnRlciB0aGUgYnl0ZSAwKQorICAqICAgLSBvbiB3cml0ZSwgPCAwIC0+IGZhaWx1cmUgKGltbWVkaWF0ZSBleGl0KQorICAqICAgLSBlbHNlLCBPRiBqdXN0IGV4aXN0cyAod2l0aG91dCBlcnJvciwgd2VpcmQpCisgICoKKyAgKiBTbyBvbiByZWFkLCB0aGVyZSBpcyB0aGlzIHdhaXQtZm9yLWJ1c3kgdGhpbmcgd2hlbiBnZXR0aW5nIGEgMHhmYyBvcgorICAqIDB4ZmUgcmVzdWx0LiBPRiBkb2VzIGEgbG9vcCBvZiB1cCB0byA2NCByZXRyaWVzLCB3YWl0aW5nIDIwbXMgYW5kCisgICogZG9pbmcgdGhlIGFib3ZlIGFnYWluIHVudGlsIGVpdGhlciB0aGUgcmV0cmllcyBleHBpcmUgb3IgdGhlIHJlc3VsdAorICAqIGlzIG5vIGxvbmdlciAweGZlIG9yIDB4ZmMKKyAgKgorICAqIFRoZSBEYXJ3aW4gSTJDIGRyaXZlciBpcyBsZXNzIHN1YnRsZSB0aG91Z2guIE9uIGFueSBub24tc3VjY2VzcyBzdGF0dXMKKyAgKiBmcm9tIHRoZSByZXNwb25zZSBjb21tYW5kLCBpdCB3YWl0cyA1bXMgYW5kIHRyaWVzIGFnYWluIHVwIHRvIDIwIHRpbWVzLAorICAqIGl0IGRvZXNuJ3QgZGlmZmVyZW5jaWF0ZSBiZXR3ZWVuIGZhdGFsIGVycm9ycyBvciAiYnVzeSIgc3RhdHVzLgorICAqCisgICogVGhpcyBkcml2ZXIgcHJvdmlkZXMgYW4gYXN5bmNocm9ub3VzIHBhcmFtYmxvY2sgYmFzZWQgaTJjIGNvbW1hbmQKKyAgKiBpbnRlcmZhY2UgdG8gYmUgdXNlZCBlaXRoZXIgZGlyZWN0bHkgYnkgbG93IGxldmVsIGNvZGUgb3IgYnkgYSBoaWdoZXIKKyAgKiBsZXZlbCBkcml2ZXIgaW50ZXJmYWNpbmcgdG8gdGhlIGxpbnV4IGkyYyBsYXllci4gVGhlIGN1cnJlbnQKKyAgKiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIHJlbGllcyBvbiB3b3JraW5nIHRpbWVycyAmIHRpbWVyIGludGVycnVwdHMKKyAgKiB0aG91Z2gsIHNvIGJlIGNhcmVmdWwgb2YgY2FsbGluZyBjb250ZXh0IGZvciBub3cuIFRoaXMgbWF5IGJlICJmaXhlZCIKKyAgKiBpbiB0aGUgZnV0dXJlIGJ5IGFkZGluZyBhIHBvbGxpbmcgZmFjaWxpdHkuCisgICovCisjZGVmaW5lIFNNVV9DTURfSTJDX0NPTU1BTkQJCQkweDlhCisgICAgICAgICAgLyogdHJhbnNmZXIgdHlwZXMgKi8KKyNkZWZpbmUgICBTTVVfSTJDX1RSQU5TRkVSX1NJTVBMRQkweDAwCisjZGVmaW5lICAgU01VX0kyQ19UUkFOU0ZFUl9TVERTVUIJMHgwMQorI2RlZmluZSAgIFNNVV9JMkNfVFJBTlNGRVJfQ09NQklORUQJMHgwMgorCisvKgorICogUG93ZXIgc3VwcGx5IGNvbnRyb2wKKyAqCisgKiBUaGUgInN1YiIgY29tbWFuZCBpcyBhbiBBU0NJSSBzdHJpbmcgaW4gdGhlIGRhdGEsIHRoZQorICogZGF0YSBsZW5naHQgaXMgdGhhdCBvZiB0aGUgc3RyaW5nLgorICoKKyAqIFRoZSBWU0xFVyBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIGdldCBvciBzZXQgdGhlIHZvbHRhZ2Ugc2xld2luZy4KKyAqICAtIGxlbmdodCA1IChvbmx5ICJWU0xFVyIpIDogaXQgcmV0dXJucyAiRE9ORSIgYW5kIDMgYnl0ZXMgb2YKKyAqICAgIHJlcGx5IGF0IGRhdGEgb2Zmc2V0IDYsIDcgYW5kIDguCisgKiAgLSBsZW5naHQgOCAoIlZTTEVXeHl6IikgaGFzIDMgYWRkaXRpb25hbCBieXRlcyBhcHBlbmRlZCwgYW5kIGlzCisgKiAgICB1c2VkIHRvIHNldCB0aGUgdm9sdGFnZSBzbGV3aW5nIHBvaW50LiBUaGUgU01VIHJlcGxpZXMgd2l0aCAiRE9ORSIKKyAqIEkgeWV0IGhhdmUgdG8gZmlndXJlIG91dCB0aGVpciBleGFjdCBtZWFuaW5nIG9mIHRob3NlIDMgYnl0ZXMgaW4KKyAqIGJvdGggY2FzZXMuCisgKgorICovCisjZGVmaW5lIFNNVV9DTURfUE9XRVJfQ09NTUFORAkJCTB4YWEKKyNkZWZpbmUgICBTTVVfQ01EX1BPV0VSX1JFU1RBUlQJCSAgICAgICAJIlJFU1RBUlQiCisjZGVmaW5lICAgU01VX0NNRF9QT1dFUl9TSFVURE9XTgkJIlNIVVRET1dOIgorI2RlZmluZSAgIFNNVV9DTURfUE9XRVJfVk9MVEFHRV9TTEVXCQkiVlNMRVciCisKKy8qIE1pc2MgY29tbWFuZHMKKyAqCisgKiBUaGlzIGNvbW1hbmQgc2VlbSB0byBiZSBhIGdyYWIgYmFnIG9mIHZhcmlvdXMgdGhpbmdzCisgKi8KKyNkZWZpbmUgU01VX0NNRF9NSVNDX2RmX0NPTU1BTkQJCQkweGRmCisjZGVmaW5lICAgU01VX0NNRF9NSVNDX2RmX1NFVF9ESVNQTEFZX0xJVAkweDAyIC8qIGk6IDEgYnl0ZSAqLworI2RlZmluZSAgIFNNVV9DTURfTUlTQ19kZl9OTUlfT1BUSU9OCQkweDA0CisKKy8qCisgKiBWZXJzaW9uIGluZm8gY29tbWFuZHMKKyAqCisgKiBJIGhhdmVuJ3QgcXVpdGUgdHJpZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2Ugd29yaworICovCisjZGVmaW5lIFNNVV9DTURfVkVSU0lPTl9DT01NQU5ECQkJMHhlYQorCisKKy8qCisgKiBNaXNjIGNvbW1hbmRzCisgKgorICogVGhpcyBjb21tYW5kIHNlZW0gdG8gYmUgYSBncmFiIGJhZyBvZiB2YXJpb3VzIHRoaW5ncworICovCisjZGVmaW5lIFNNVV9DTURfTUlTQ19lZV9DT01NQU5ECQkJMHhlZQorI2RlZmluZSAgIFNNVV9DTURfTUlTQ19lZV9HRVRfREFUQUJMT0NLX1JFQwkweDAyCisjZGVmaW5lCSAgU01VX0NNRF9NSVNDX2VlX0xFRFNfQ1RSTAkJMHgwNCAvKiBpOiAwMCAoMDAsMDEpIFswMF0gKi8KKyNkZWZpbmUgICBTTVVfQ01EX01JU0NfZWVfR0VUX0RBVEEJCTB4MDUgLyogaTogMDAgLCBvOiA/PyAqLworCisKKworLyoKKyAqIC0gS2VybmVsIHNpZGUgaW50ZXJmYWNlIC0KKyAqLworCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogQXN5bmNocm9ub3VzIFNNVSBjb21tYW5kcworICoKKyAqIEZpbGwgdXAgdGhpcyBzdHJ1Y3R1cmUgYW5kIHN1Ym1pdCBpdCB2aWEgc211X3F1ZXVlX2NvbW1hbmQoKSwKKyAqIGFuZCBnZXQgbm90aWZpZWQgYnkgdGhlIG9wdGlvbmFsIGRvbmUoKSBjYWxsYmFjaywgb3IgYmVjYXVzZQorICogc3RhdHVzIGJlY29tZXMgIT0gMQorICovCisKK3N0cnVjdCBzbXVfY21kOworCitzdHJ1Y3Qgc211X2NtZAoreworCS8qIHB1YmxpYyAqLworCXU4CQkJY21kOwkJLyogY29tbWFuZCAqLworCWludAkJCWRhdGFfbGVuOwkvKiBkYXRhIGxlbiAqLworCWludAkJCXJlcGx5X2xlbjsJLyogcmVwbHkgbGVuICovCisJdm9pZAkJCSpkYXRhX2J1ZjsJLyogZGF0YSBidWZmZXIgKi8KKwl2b2lkCQkJKnJlcGx5X2J1ZjsJLyogcmVwbHkgYnVmZmVyICovCisJaW50CQkJc3RhdHVzOwkJLyogY29tbWFuZCBzdGF0dXMgKi8KKwl2b2lkCQkJKCpkb25lKShzdHJ1Y3Qgc211X2NtZCAqY21kLCB2b2lkICptaXNjKTsKKwl2b2lkCQkJKm1pc2M7CisKKwkvKiBwcml2YXRlICovCisJc3RydWN0IGxpc3RfaGVhZAlsaW5rOworfTsKKworLyoKKyAqIFF1ZXVlcyBhbiBTTVUgY29tbWFuZCwgYWxsIGZpZWxkcyBoYXZlIHRvIGJlIGluaXRpYWxpemVkCisgKi8KK2V4dGVybiBpbnQgc211X3F1ZXVlX2NtZChzdHJ1Y3Qgc211X2NtZCAqY21kKTsKKworLyoKKyAqIFNpbXBsZSBjb21tYW5kIHdyYXBwZXIuIFRoaXMgc3RydWN0dXJlIGVtYmVkcyBhIHNtYWxsIGJ1ZmZlcgorICogdG8gZWFzZSBzZW5kaW5nIHNpbXBsZSBTTVUgY29tbWFuZHMgZnJvbSB0aGUgc3RhY2sKKyAqLworc3RydWN0IHNtdV9zaW1wbGVfY21kCit7CisJc3RydWN0IHNtdV9jbWQJY21kOworCXU4CSAgICAgICAJYnVmZmVyWzE2XTsKK307CisKKy8qCisgKiBRdWV1ZXMgYSBzaW1wbGUgY29tbWFuZC4gQWxsIGZpZWxkcyB3aWxsIGJlIGluaXRpYWxpemVkIGJ5IHRoYXQKKyAqIGZ1bmN0aW9uCisgKi8KK2V4dGVybiBpbnQgc211X3F1ZXVlX3NpbXBsZShzdHJ1Y3Qgc211X3NpbXBsZV9jbWQgKnNjbWQsIHU4IGNvbW1hbmQsCisJCQkgICAgdW5zaWduZWQgaW50IGRhdGFfbGVuLAorCQkJICAgIHZvaWQgKCpkb25lKShzdHJ1Y3Qgc211X2NtZCAqY21kLCB2b2lkICptaXNjKSwKKwkJCSAgICB2b2lkICptaXNjLAorCQkJICAgIC4uLik7CisKKy8qCisgKiBDb21wbGV0aW9uIGhlbHBlci4gUGFzcyBpdCB0byBzbXVfcXVldWVfc2ltcGxlIG9yIGFzICdkb25lJworICogbWVtYmVyIHRvIHNtdV9xdWV1ZV9jbWQsIGl0IHdpbGwgY2FsbCBjb21wbGV0ZSgpIG9uIHRoZSBzdHJ1Y3QKKyAqIGNvbXBsZXRpb24gcGFzc2VkIGluIHRoZSAibWlzYyIgYXJndW1lbnQKKyAqLworZXh0ZXJuIHZvaWQgc211X2RvbmVfY29tcGxldGUoc3RydWN0IHNtdV9jbWQgKmNtZCwgdm9pZCAqbWlzYyk7CisKKy8qCisgKiBTeW5jaHJvbm91cyBoZWxwZXJzLiBXaWxsIHNwaW4td2FpdCBmb3IgY29tcGxldGlvbiBvZiBhIGNvbW1hbmQKKyAqLworZXh0ZXJuIHZvaWQgc211X3NwaW53YWl0X2NtZChzdHJ1Y3Qgc211X2NtZCAqY21kKTsKKworc3RhdGljIGlubGluZSB2b2lkIHNtdV9zcGlud2FpdF9zaW1wbGUoc3RydWN0IHNtdV9zaW1wbGVfY21kICpzY21kKQoreworCXNtdV9zcGlud2FpdF9jbWQoJnNjbWQtPmNtZCk7Cit9CisKKy8qCisgKiBQb2xsIHJvdXRpbmUgdG8gY2FsbCBpZiBibG9ja2VkIHdpdGggaXJxcyBvZmYKKyAqLworZXh0ZXJuIHZvaWQgc211X3BvbGwodm9pZCk7CisKKworLyoKKyAqIEluaXQgcm91dGluZSwgcHJlc2VuY2UgY2hlY2suLi4uCiAgKi8KIGV4dGVybiBpbnQgc211X2luaXQodm9pZCk7CiBleHRlcm4gaW50IHNtdV9wcmVzZW50KHZvaWQpOworc3RydWN0IG9mX2RldmljZTsKK2V4dGVybiBzdHJ1Y3Qgb2ZfZGV2aWNlICpzbXVfZ2V0X29mZGV2KHZvaWQpOworCisKKy8qCisgKiBDb21tb24gY29tbWFuZCB3cmFwcGVycworICovCiBleHRlcm4gdm9pZCBzbXVfc2h1dGRvd24odm9pZCk7CiBleHRlcm4gdm9pZCBzbXVfcmVzdGFydCh2b2lkKTsKLWV4dGVybiBpbnQgc211X2dldF9ydGNfdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUpOwotZXh0ZXJuIGludCBzbXVfc2V0X3J0Y190aW1lKHN0cnVjdCBydGNfdGltZSAqdGltZSk7CitzdHJ1Y3QgcnRjX3RpbWU7CitleHRlcm4gaW50IHNtdV9nZXRfcnRjX3RpbWUoc3RydWN0IHJ0Y190aW1lICp0aW1lLCBpbnQgc3BpbndhaXQpOworZXh0ZXJuIGludCBzbXVfc2V0X3J0Y190aW1lKHN0cnVjdCBydGNfdGltZSAqdGltZSwgaW50IHNwaW53YWl0KTsKIAogLyoKICAqIFNNVSBjb21tYW5kIGJ1ZmZlciBhYnNvbHV0ZSBhZGRyZXNzLCBleHBvcnRlZCBieSBwbWFjX3NldHVwLAogICogdGhpcyBpcyBhbGxvY2F0ZWQgdmVyeSBlYXJseSBkdXJpbmcgYm9vdC4KICAqLwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc211X2NtZGJ1Zl9hYnM7CisKKworLyoKKyAqIEtlbnJlbCBhc3luY2hyb25vdXMgaTJjIGludGVyZmFjZQorICovCisKKy8qIFNNVSBpMmMgaGVhZGVyLCBleGFjdGx5IG1hdGNoZXMgaTJjIGhlYWRlciBvbiB3aXJlICovCitzdHJ1Y3Qgc211X2kyY19wYXJhbQoreworCXU4CWJ1czsJCS8qIFNNVSBidXMgSUQgKGZyb20gZGV2aWNlIHRyZWUpICovCisJdTgJdHlwZTsJCS8qIGkyYyB0cmFuc2ZlciB0eXBlICovCisJdTgJZGV2YWRkcjsJLyogZGV2aWNlIGFkZHJlc3MgKGluY2x1ZGVzIGRpcmVjdGlvbikgKi8KKwl1OAlzdWJsZW47CQkvKiBzdWJhZGRyZXNzIGxlbmd0aCAqLworCXU4CXN1YmFkZHJbM107CS8qIHN1YmFkZHJlc3MgKi8KKwl1OAljYWRkcjsJCS8qIGNvbWJpbmVkIGFkZHJlc3MsIGZpbGxlZCBieSBTTVUgZHJpdmVyICovCisJdTgJZGF0YWxlbjsJLyogbGVuZ3RoIG9mIHRyYW5zZmVyICovCisJdTgJZGF0YVs3XTsJLyogZGF0YSAqLworfTsKKworI2RlZmluZSBTTVVfSTJDX1JFQURfTUFYCTB4MGQKKyNkZWZpbmUgU01VX0kyQ19XUklURV9NQVgJMHgwNQorCitzdHJ1Y3Qgc211X2kyY19jbWQKK3sKKwkvKiBwdWJsaWMgKi8KKwlzdHJ1Y3Qgc211X2kyY19wYXJhbQlpbmZvOworCXZvaWQJCQkoKmRvbmUpKHN0cnVjdCBzbXVfaTJjX2NtZCAqY21kLCB2b2lkICptaXNjKTsKKwl2b2lkCQkJKm1pc2M7CisJaW50CQkJc3RhdHVzOyAvKiAxID0gcGVuZGluZywgMCA9IG9rLCA8MCA9IGZhaWwgKi8KKworCS8qIHByaXZhdGUgKi8KKwlzdHJ1Y3Qgc211X2NtZAkJc2NtZDsKKwlpbnQJCQlyZWFkOworCWludAkJCXN0YWdlOworCWludAkJCXJldHJpZXM7CisJdTgJCQlwZGF0YVsweDEwXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpbms7Cit9OworCisvKgorICogQ2FsbCB0aGlzIHRvIHF1ZXVlIGFuIGkyYyBjb21tYW5kIHRvIHRoZSBTTVUuIFlvdSBtdXN0IGZpbGwgaW5mbywKKyAqIGluY2x1ZGluZyBpbmZvLmRhdGEgZm9yIGEgd3JpdGUsIGRvbmUgYW5kIG1pc2MuCisgKiBGb3Igbm93LCBubyBwb2xsaW5nIGludGVyZmFjZSBpcyBwcm92aWRlZCBzbyB5b3UgaGF2ZSB0byB1c2UgY29tcGxldGlvbgorICogY2FsbGJhY2suCisgKi8KK2V4dGVybiBpbnQgc211X3F1ZXVlX2kyYyhzdHJ1Y3Qgc211X2kyY19jbWQgKmNtZCk7CisKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworLyoKKyAqIC0gVXNlcmxhbmQgaW50ZXJmYWNlIC0KKyAqLworCisvKgorICogQSBnaXZlbiBpbnN0YW5jZSBvZiB0aGUgZGV2aWNlIGNhbiBiZSBjb25maWd1cmVkIGZvciAyIGRpZmZlcmVudAorICogdGhpbmdzIGF0IHRoZSBtb21lbnQ6CisgKgorICogIC0gc2VuZGluZyBTTVUgY29tbWFuZHMgKGRlZmF1bHQgYXQgb3BlbigpIHRpbWUpCisgKiAgLSByZWNlaXZpbmcgU01VIGV2ZW50cyAobm90IHlldCBpbXBsZW1lbnRlZCkKKyAqCisgKiBDb21tYW5kcyBhcmUgd3JpdHRlbiB3aXRoIHdyaXRlKCkgb2YgYSBjb21tYW5kIGJsb2NrLiBUaGV5IGNhbiBiZQorICogImRyaXZlciIgY29tbWFuZHMgKGZvciBleGFtcGxlIHRvIHN3aXRjaCB0byBldmVudCByZWNlcHRpb24gbW9kZSkKKyAqIG9yIHJlYWwgU01VIGNvbW1hbmRzLiBUaGV5IGFyZSBtYWRlIG9mIGEgaGVhZGVyIGZvbGxvd2VkIGJ5IGNvbW1hbmQKKyAqIGRhdGEgaWYgYW55LgorICoKKyAqIEZvciBTTVUgY29tbWFuZHMgKG5vdCBmb3IgZHJpdmVyIGNvbW1hbmRzKSwgeW91IGNhbiB0aGVuIHJlYWQoKSBiYWNrCisgKiBhIHJlcGx5LiBUaGUgcmVhZGVyIHdpbGwgYmUgYmxvY2tlZCBvciBub3QgZGVwZW5kaW5nIG9uIGhvdyB0aGUgZGV2aWNlCisgKiBmaWxlIGlzIG9wZW5lZC4gcG9sbCgpIGlzbid0IGltcGxlbWVudGVkIHlldC4gVGhlIHJlcGx5IHdpbGwgY29uc2lzdAorICogb2YgYSBoZWFkZXIgYXMgd2VsbCwgZm9sbG93ZWQgYnkgdGhlIHJlcGx5IGRhdGEgaWYgYW55LiBZb3Ugc2hvdWxkCisgKiBhbHdheXMgcHJvdmlkZSBhIGJ1ZmZlciBsYXJnZSBlbm91Z2ggZm9yIHRoZSBtYXhpbXVtIHJlcGx5IGRhdGEsIEkKKyAqIHJlY29tbWFuZCBvbmUgcGFnZS4KKyAqCisgKiBJdCBpcyBpbGxlZ2FsIHRvIHNlbmQgU01VIGNvbW1hbmRzIHRocm91Z2ggYSBmaWxlIGRlc2NyaXB0b3IgY29uZmlndXJlZAorICogZm9yIGV2ZW50cyByZWNlcHRpb24KKyAqCisgKi8KK3N0cnVjdCBzbXVfdXNlcl9jbWRfaGRyCit7CisJX191MzIJCWNtZHR5cGU7CisjZGVmaW5lIFNNVV9DTURUWVBFX1NNVQkJCTAJLyogU01VIGNvbW1hbmQgKi8KKyNkZWZpbmUgU01VX0NNRFRZUEVfV0FOVFNfRVZFTlRTCTEJLyogc3dpdGNoIGZkIHRvIGV2ZW50cyBtb2RlICovCisKKwlfX3U4CQljbWQ7CQkJLyogU01VIGNvbW1hbmQgYnl0ZSAqLworCV9fdTMyCQlkYXRhX2xlbjsJCS8qIExlbmdodCBvZiBkYXRhIGZvbGxvd2luZyAqLworfTsKKworc3RydWN0IHNtdV91c2VyX3JlcGx5X2hkcgoreworCV9fdTMyCQlzdGF0dXM7CQkJLyogQ29tbWFuZCBzdGF0dXMgKi8KKwlfX3UzMgkJcmVwbHlfbGVuOwkJLyogTGVuZ2h0IG9mIGRhdGEgZm9sbHdpbmcgKi8KK307CisKKyNlbmRpZiAvKiAgX1NNVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tcHBjNjQvdGxiZmx1c2guaAppbmRleCA0NTQxMWE2Li43NDI3MWQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3RsYmZsdXNoLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAlwdGVfdCBwdGVbUFBDNjRfVExCX0JBVENIX05SXTsKIAl1bnNpZ25lZCBsb25nIGFkZHJbUFBDNjRfVExCX0JBVENIX05SXTsKIAl1bnNpZ25lZCBsb25nIHZhZGRyW1BQQzY0X1RMQl9CQVRDSF9OUl07CisJdW5zaWduZWQgaW50IGxhcmdlOwogfTsKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgcHBjNjRfdGxiX2JhdGNoLCBwcGM2NF90bGJfYmF0Y2gpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS1wcGM2NC91YWNjZXNzLmgKaW5kZXggYzE4MWE2MGQuLjEzMmMxMjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L3VhY2Nlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC91YWNjZXNzLmgKQEAgLTE2NCw3ICsxNjQsOCBAQAogCiAjZGVmaW5lIF9fZ2V0X3VzZXJfbm9jaGVjayh4LHB0cixzaXplKQkJCQlcCiAoewkJCQkJCQkJXAotCWxvbmcgX19ndV9lcnIsIF9fZ3VfdmFsOwkJCQlcCisJbG9uZyBfX2d1X2VycjsJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX2d1X3ZhbDsJCQkJCVwKIAltaWdodF9zbGVlcCgpOwkJCQkJCVwKIAlfX2dldF91c2VyX3NpemUoX19ndV92YWwsKHB0ciksKHNpemUpLF9fZ3VfZXJyLC1FRkFVTFQpO1wKIAkoeCkgPSAoX190eXBlb2ZfXygqKHB0cikpKV9fZ3VfdmFsOwkJCVwKQEAgLTE3Myw3ICsxNzQsOCBAQAogCiAjZGVmaW5lIF9fZ2V0X3VzZXJfY2hlY2soeCxwdHIsc2l6ZSkJCQkJCVwKICh7CQkJCQkJCQkJXAotCWxvbmcgX19ndV9lcnIgPSAtRUZBVUxULCBfX2d1X3ZhbCA9IDA7CQkJCVwKKwlsb25nIF9fZ3VfZXJyID0gLUVGQVVMVDsJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZ3VfdmFsID0gMDsJCQkJCVwKIAljb25zdCBfX3R5cGVvZl9fKCoocHRyKSkgX191c2VyICpfX2d1X2FkZHIgPSAocHRyKTsJCVwKIAltaWdodF9zbGVlcCgpOwkJCQkJCQlcCiAJaWYgKGFjY2Vzc19vayhWRVJJRllfUkVBRCxfX2d1X2FkZHIsc2l6ZSkpCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9mdXRleC5oIGIvaW5jbHVkZS9hc20tczM5MC9mdXRleC5oCmluZGV4IDJjYWM1ZWMuLjlmZWZmNGNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2Z1dGV4LmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9mdXRleC5oCkBAIC0xNCw3ICsxNCw3IEBACiAJaW50IGNtcCA9IChlbmNvZGVkX29wID4+IDI0KSAmIDE1OwogCWludCBvcGFyZyA9IChlbmNvZGVkX29wIDw8IDgpID4+IDIwOwogCWludCBjbXBhcmcgPSAoZW5jb2RlZF9vcCA8PCAyMCkgPj4gMjA7Ci0JaW50IG9sZHZhbCA9IDAsIHJldCwgdGVtOworCWludCBvbGR2YWwgPSAwLCByZXQ7CiAJaWYgKGVuY29kZWRfb3AgJiAoRlVURVhfT1BfT1BBUkdfU0hJRlQgPDwgMjgpKQogCQlvcGFyZyA9IDEgPDwgb3Bhcmc7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvc2lnY29udGV4dC5oIGIvaW5jbHVkZS9hc20tczM5MC9zaWdjb250ZXh0LmgKaW5kZXggZDU3YmMwYy4uODAzNTQ1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9zaWdjb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9zaWdjb250ZXh0LmgKQEAgLTYxLDcgKzYxLDcgQEAKIHN0cnVjdCBzaWdjb250ZXh0CiB7CiAJdW5zaWduZWQgbG9uZwlvbGRtYXNrW19TSUdDT05URVhUX05TSUdfV09SRFNdOwotCV9zaWdyZWdzICAgICAgICAqc3JlZ3M7CisJX3NpZ3JlZ3MgICAgICAgIF9fdXNlciAqc3JlZ3M7CiB9OwogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1zMzkwL3NpZ25hbC5oCmluZGV4IDNkNmUxMWMuLjcwODQ2MjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9zaWduYWwuaApAQCAtMTY1LDcgKzE2NSw3IEBACiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiB0eXBlZGVmIHN0cnVjdCBzaWdhbHRzdGFjayB7Ci0gICAgICAgIHZvaWQgKnNzX3NwOworICAgICAgICB2b2lkIF9fdXNlciAqc3Nfc3A7CiAgICAgICAgIGludCBzc19mbGFnczsKICAgICAgICAgc2l6ZV90IHNzX3NpemU7CiB9IHN0YWNrX3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9mdXRleC5oIGIvaW5jbHVkZS9hc20tc2gvZnV0ZXguaAppbmRleCAyY2FjNWVjLi45ZmVmZjRjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvZnV0ZXguaAorKysgYi9pbmNsdWRlL2FzbS1zaC9mdXRleC5oCkBAIC0xNCw3ICsxNCw3IEBACiAJaW50IGNtcCA9IChlbmNvZGVkX29wID4+IDI0KSAmIDE1OwogCWludCBvcGFyZyA9IChlbmNvZGVkX29wIDw8IDgpID4+IDIwOwogCWludCBjbXBhcmcgPSAoZW5jb2RlZF9vcCA8PCAyMCkgPj4gMjA7Ci0JaW50IG9sZHZhbCA9IDAsIHJldCwgdGVtOworCWludCBvbGR2YWwgPSAwLCByZXQ7CiAJaWYgKGVuY29kZWRfb3AgJiAoRlVURVhfT1BfT1BBUkdfU0hJRlQgPDwgMjgpKQogCQlvcGFyZyA9IDEgPDwgb3Bhcmc7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvZnV0ZXguaCBiL2luY2x1ZGUvYXNtLXNoNjQvZnV0ZXguaAppbmRleCAyY2FjNWVjLi45ZmVmZjRjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2g2NC9mdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvZnV0ZXguaApAQCAtMTQsNyArMTQsNyBAQAogCWludCBjbXAgPSAoZW5jb2RlZF9vcCA+PiAyNCkgJiAxNTsKIAlpbnQgb3BhcmcgPSAoZW5jb2RlZF9vcCA8PCA4KSA+PiAyMDsKIAlpbnQgY21wYXJnID0gKGVuY29kZWRfb3AgPDwgMjApID4+IDIwOwotCWludCBvbGR2YWwgPSAwLCByZXQsIHRlbTsKKwlpbnQgb2xkdmFsID0gMCwgcmV0OwogCWlmIChlbmNvZGVkX29wICYgKEZVVEVYX09QX09QQVJHX1NISUZUIDw8IDI4KSkKIAkJb3BhcmcgPSAxIDw8IG9wYXJnOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9idGZpeHVwLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9idGZpeHVwLmgKaW5kZXggYjg0Yzk2Yy4uYzI4NjhkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvYnRmaXh1cC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2J0Zml4dXAuaApAQCAtNDksMTcgKzQ5LDE3IEBACiAvKiBQdXQgYm90dG9tIDEzYml0cyBpbnRvIHNvbWUgcmVnaXN0ZXIgdmFyaWFibGUgKi8KIAogI2RlZmluZSBCVEZJWFVQREVGX1NJTU0xMyhfX25hbWUpCQkJCQkJCVwKLQlleHRlcm4gdW5zaWduZWQgaW50IF9fX3NmXyMjX19uYW1lKHZvaWQpIF9fYXR0cmlidXRlX2NvbnN0X187CQlcCisJc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19fc2ZfIyNfX25hbWUodm9pZCkgX19hdHRyaWJ1dGVfY29uc3RfXzsJCVwKIAlleHRlcm4gdW5zaWduZWQgX19fc3NfIyNfX25hbWVbMl07CQkJCQkJXAotCWV4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX19zZl8jI19fbmFtZSh2b2lkKSB7CQkJCVwKKwlzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX19zZl8jI19fbmFtZSh2b2lkKSB7CQkJCVwKIAkJdW5zaWduZWQgaW50IHJldDsJCQkJCQkJXAogCQlfX2FzbV9fICgib3IgJSVnMCwgX19fc18iICNfX25hbWUgIiwgJTAiIDogIj1yIihyZXQpKTsJCQlcCiAJCXJldHVybiByZXQ7CQkJCQkJCQlcCiAJfQogI2RlZmluZSBCVEZJWFVQREVGX1NJTU0xM19JTklUKF9fbmFtZSxfX3ZhbCkJCQkJCQlcCi0JZXh0ZXJuIHVuc2lnbmVkIGludCBfX19zZl8jI19fbmFtZSh2b2lkKSBfX2F0dHJpYnV0ZV9jb25zdF9fOwkJXAorCXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fX3NmXyMjX19uYW1lKHZvaWQpIF9fYXR0cmlidXRlX2NvbnN0X187CQlcCiAJZXh0ZXJuIHVuc2lnbmVkIF9fX3NzXyMjX19uYW1lWzJdOwkJCQkJCVwKLQlleHRlcm4gX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19fc2ZfIyNfX25hbWUodm9pZCkgewkJCQlcCisJc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19fc2ZfIyNfX25hbWUodm9pZCkgewkJCQlcCiAJCXVuc2lnbmVkIGludCByZXQ7CQkJCQkJCVwKIAkJX19hc21fXyAoIm9yICUlZzAsIF9fX3NfIiAjX19uYW1lICJfX2J0c2V0XyIgI19fdmFsICIsICUwIiA6ICI9ciIocmV0KSk7XAogCQlyZXR1cm4gcmV0OwkJCQkJCQkJXApAQCAtNzEsMTcgKzcxLDE3IEBACiAgKi8KIAogI2RlZmluZSBCVEZJWFVQREVGX0hBTEYoX19uYW1lKQkJCQkJCQkJXAotCWV4dGVybiB1bnNpZ25lZCBpbnQgX19fYWZfIyNfX25hbWUodm9pZCkgX19hdHRyaWJ1dGVfY29uc3RfXzsJCVwKKwlzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX19hZl8jI19fbmFtZSh2b2lkKSBfX2F0dHJpYnV0ZV9jb25zdF9fOwkJXAogCWV4dGVybiB1bnNpZ25lZCBfX19hc18jI19fbmFtZVsyXTsJCQkJCQlcCi0JZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fX2FmXyMjX19uYW1lKHZvaWQpIHsJCQkJXAorCXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fX2FmXyMjX19uYW1lKHZvaWQpIHsJCQkJXAogCQl1bnNpZ25lZCBpbnQgcmV0OwkJCQkJCQlcCiAJCV9fYXNtX18gKCJvciAlJWcwLCBfX19hXyIgI19fbmFtZSAiLCAlMCIgOiAiPXIiKHJldCkpOwkJCVwKIAkJcmV0dXJuIHJldDsJCQkJCQkJCVwKIAl9CiAjZGVmaW5lIEJURklYVVBERUZfSEFMRl9JTklUKF9fbmFtZSxfX3ZhbCkJCQkJCQlcCi0JZXh0ZXJuIHVuc2lnbmVkIGludCBfX19hZl8jI19fbmFtZSh2b2lkKSBfX2F0dHJpYnV0ZV9jb25zdF9fOwkJXAorCXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fX2FmXyMjX19uYW1lKHZvaWQpIF9fYXR0cmlidXRlX2NvbnN0X187CQlcCiAJZXh0ZXJuIHVuc2lnbmVkIF9fX2FzXyMjX19uYW1lWzJdOwkJCQkJCVwKLQlleHRlcm4gX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19fYWZfIyNfX25hbWUodm9pZCkgewkJCQlcCisJc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19fYWZfIyNfX25hbWUodm9pZCkgewkJCQlcCiAJCXVuc2lnbmVkIGludCByZXQ7CQkJCQkJCVwKIAkJX19hc21fXyAoIm9yICUlZzAsIF9fX2FfIiAjX19uYW1lICJfX2J0c2V0XyIgI19fdmFsICIsICUwIiA6ICI9ciIocmV0KSk7XAogCQlyZXR1cm4gcmV0OwkJCQkJCQkJXApAQCAtOTAsMTcgKzkwLDE3IEBACiAvKiBQdXQgdXBwZXIgMjIgYml0cyBpbnRvIHNvbWUgcmVnaXN0ZXIgdmFyaWFibGUgKi8KIAogI2RlZmluZSBCVEZJWFVQREVGX1NFVEhJKF9fbmFtZSkJCQkJCQkJXAotCWV4dGVybiB1bnNpZ25lZCBpbnQgX19faGZfIyNfX25hbWUodm9pZCkgX19hdHRyaWJ1dGVfY29uc3RfXzsJCVwKKwlzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX19oZl8jI19fbmFtZSh2b2lkKSBfX2F0dHJpYnV0ZV9jb25zdF9fOwkJXAogCWV4dGVybiB1bnNpZ25lZCBfX19oc18jI19fbmFtZVsyXTsJCQkJCQlcCi0JZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fX2hmXyMjX19uYW1lKHZvaWQpIHsJCQkJXAorCXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fX2hmXyMjX19uYW1lKHZvaWQpIHsJCQkJXAogCQl1bnNpZ25lZCBpbnQgcmV0OwkJCQkJCQlcCiAJCV9fYXNtX18gKCJzZXRoaSAlJWhpKF9fX2hfIiAjX19uYW1lICIpLCAlMCIgOiAiPXIiKHJldCkpOwkJXAogCQlyZXR1cm4gcmV0OwkJCQkJCQkJXAogCX0KICNkZWZpbmUgQlRGSVhVUERFRl9TRVRISV9JTklUKF9fbmFtZSxfX3ZhbCkJCQkJCQlcCi0JZXh0ZXJuIHVuc2lnbmVkIGludCBfX19oZl8jI19fbmFtZSh2b2lkKSBfX2F0dHJpYnV0ZV9jb25zdF9fOwkJXAorCXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fX2hmXyMjX19uYW1lKHZvaWQpIF9fYXR0cmlidXRlX2NvbnN0X187CQlcCiAJZXh0ZXJuIHVuc2lnbmVkIF9fX2hzXyMjX19uYW1lWzJdOwkJCQkJCVwKLQlleHRlcm4gX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19faGZfIyNfX25hbWUodm9pZCkgewkJCQlcCisJc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19faGZfIyNfX25hbWUodm9pZCkgewkJCQlcCiAJCXVuc2lnbmVkIGludCByZXQ7CQkJCQkJCVwKIAkJX19hc21fXyAoInNldGhpICUlaGkoX19faF8iICNfX25hbWUgIl9fYnRzZXRfIiAjX192YWwgIiksICUwIiA6IAlcCiAJCQkgIj1yIihyZXQpKTsJCQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2NhY2hlLmgKaW5kZXggZTYzMTZmZC4uYTEwNTIyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvY2FjaGUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9jYWNoZS5oCkBAIC0yNyw3ICsyNyw3IEBACiAgKi8KIAogLyogRmlyc3QsIGNhY2hlLXRhZyBhY2Nlc3MuICovCi1leHRlcm4gX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgZ2V0X2ljYWNoZV90YWcoaW50IHNldG51bSwgaW50IHRhZ251bSkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9pY2FjaGVfdGFnKGludCBzZXRudW0sIGludCB0YWdudW0pCiB7CiAJdW5zaWduZWQgaW50IHZhZGRyLCByZXR2YWw7CiAKQEAgLTM4LDcgKzM4LDcgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1leHRlcm4gX19pbmxpbmVfXyB2b2lkIHB1dF9pY2FjaGVfdGFnKGludCBzZXRudW0sIGludCB0YWdudW0sIHVuc2lnbmVkIGludCBlbnRyeSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRfaWNhY2hlX3RhZyhpbnQgc2V0bnVtLCBpbnQgdGFnbnVtLCB1bnNpZ25lZCBpbnQgZW50cnkpCiB7CiAJdW5zaWduZWQgaW50IHZhZGRyOwogCkBAIC01MSw3ICs1MSw3IEBACiAvKiBTZWNvbmQgY2FjaGUtZGF0YSBhY2Nlc3MuICBUaGUgZGF0YSBpcyByZXR1cm5lZCB0d28tMzJiaXQgcXVhbnRpdGllcwogICogYXQgYSB0aW1lLgogICovCi1leHRlcm4gX19pbmxpbmVfXyB2b2lkIGdldF9pY2FjaGVfZGF0YShpbnQgc2V0bnVtLCBpbnQgdGFnbnVtLCBpbnQgc3ViYmxvY2ssCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2ljYWNoZV9kYXRhKGludCBzZXRudW0sIGludCB0YWdudW0sIGludCBzdWJibG9jaywKIAkJCQkgICAgICAgdW5zaWduZWQgaW50ICpkYXRhKQogewogCXVuc2lnbmVkIGludCB2YWx1ZTEsIHZhbHVlMiwgdmFkZHI7CkBAIC02Nyw3ICs2Nyw3IEBACiAJZGF0YVswXSA9IHZhbHVlMTsgZGF0YVsxXSA9IHZhbHVlMjsKIH0KIAotZXh0ZXJuIF9faW5saW5lX18gdm9pZCBwdXRfaWNhY2hlX2RhdGEoaW50IHNldG51bSwgaW50IHRhZ251bSwgaW50IHN1YmJsb2NrLAorc3RhdGljIGlubGluZSB2b2lkIHB1dF9pY2FjaGVfZGF0YShpbnQgc2V0bnVtLCBpbnQgdGFnbnVtLCBpbnQgc3ViYmxvY2ssCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAl1bnNpZ25lZCBpbnQgdmFsdWUxLCB2YWx1ZTIsIHZhZGRyOwpAQCAtOTIsMzUgKzkyLDM1IEBACiAgKi8KIAogLyogRmx1c2hlcyB3aGljaCBjbGVhciBvdXQgYm90aCB0aGUgb24tY2hpcCBhbmQgZXh0ZXJuYWwgY2FjaGVzICovCi1leHRlcm4gX19pbmxpbmVfXyB2b2lkIGZsdXNoX2VpX3BhZ2UodW5zaWduZWQgaW50IGFkZHIpCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfZWlfcGFnZSh1bnNpZ25lZCBpbnQgYWRkcikKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUlZzAsIFslMF0gJTFcblx0IiA6IDoKIAkJCSAgICAgInIiIChhZGRyKSwgImkiIChBU0lfTV9GTFVTSF9QQUdFKSA6CiAJCQkgICAgICJtZW1vcnkiKTsKIH0KIAotZXh0ZXJuIF9faW5saW5lX18gdm9pZCBmbHVzaF9laV9zZWcodW5zaWduZWQgaW50IGFkZHIpCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfZWlfc2VnKHVuc2lnbmVkIGludCBhZGRyKQogewogCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGEgJSVnMCwgWyUwXSAlMVxuXHQiIDogOgogCQkJICAgICAiciIgKGFkZHIpLCAiaSIgKEFTSV9NX0ZMVVNIX1NFRykgOgogCQkJICAgICAibWVtb3J5Iik7CiB9CiAKLWV4dGVybiBfX2lubGluZV9fIHZvaWQgZmx1c2hfZWlfcmVnaW9uKHVuc2lnbmVkIGludCBhZGRyKQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2VpX3JlZ2lvbih1bnNpZ25lZCBpbnQgYWRkcikKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUlZzAsIFslMF0gJTFcblx0IiA6IDoKIAkJCSAgICAgInIiIChhZGRyKSwgImkiIChBU0lfTV9GTFVTSF9SRUdJT04pIDoKIAkJCSAgICAgIm1lbW9yeSIpOwogfQogCi1leHRlcm4gX19pbmxpbmVfXyB2b2lkIGZsdXNoX2VpX2N0eCh1bnNpZ25lZCBpbnQgYWRkcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9laV9jdHgodW5zaWduZWQgaW50IGFkZHIpCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YSAlJWcwLCBbJTBdICUxXG5cdCIgOiA6CiAJCQkgICAgICJyIiAoYWRkciksICJpIiAoQVNJX01fRkxVU0hfQ1RYKSA6CiAJCQkgICAgICJtZW1vcnkiKTsKIH0KIAotZXh0ZXJuIF9faW5saW5lX18gdm9pZCBmbHVzaF9laV91c2VyKHVuc2lnbmVkIGludCBhZGRyKQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2VpX3VzZXIodW5zaWduZWQgaW50IGFkZHIpCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YSAlJWcwLCBbJTBdICUxXG5cdCIgOiA6CiAJCQkgICAgICJyIiAoYWRkciksICJpIiAoQVNJX01fRkxVU0hfVVNFUikgOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvY3lwcmVzcy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvY3lwcmVzcy5oCmluZGV4IGZjOTJmYzguLjk5NTk5NTMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9jeXByZXNzLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvY3lwcmVzcy5oCkBAIC00OCwyNSArNDgsMjUgQEAKICNkZWZpbmUgQ1lQUkVTU19ORkFVTFQgICAgMHgwMDAwMDAwMgogI2RlZmluZSBDWVBSRVNTX01FTkFCTEUgICAweDAwMDAwMDAxCiAKLWV4dGVybiBfX2lubGluZV9fIHZvaWQgY3lwcmVzc19mbHVzaF9wYWdlKHVuc2lnbmVkIGxvbmcgcGFnZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjeXByZXNzX2ZsdXNoX3BhZ2UodW5zaWduZWQgbG9uZyBwYWdlKQogewogCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGEgJSVnMCwgWyUwXSAlMVxuXHQiIDogOgogCQkJICAgICAiciIgKHBhZ2UpLCAiaSIgKEFTSV9NX0ZMVVNIX1BBR0UpKTsKIH0KIAotZXh0ZXJuIF9faW5saW5lX18gdm9pZCBjeXByZXNzX2ZsdXNoX3NlZ21lbnQodW5zaWduZWQgbG9uZyBhZGRyKQorc3RhdGljIGlubGluZSB2b2lkIGN5cHJlc3NfZmx1c2hfc2VnbWVudCh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YSAlJWcwLCBbJTBdICUxXG5cdCIgOiA6CiAJCQkgICAgICJyIiAoYWRkciksICJpIiAoQVNJX01fRkxVU0hfU0VHKSk7CiB9CiAKLWV4dGVybiBfX2lubGluZV9fIHZvaWQgY3lwcmVzc19mbHVzaF9yZWdpb24odW5zaWduZWQgbG9uZyBhZGRyKQorc3RhdGljIGlubGluZSB2b2lkIGN5cHJlc3NfZmx1c2hfcmVnaW9uKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUlZzAsIFslMF0gJTFcblx0IiA6IDoKIAkJCSAgICAgInIiIChhZGRyKSwgImkiIChBU0lfTV9GTFVTSF9SRUdJT04pKTsKIH0KIAotZXh0ZXJuIF9faW5saW5lX18gdm9pZCBjeXByZXNzX2ZsdXNoX2NvbnRleHQodm9pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjeXByZXNzX2ZsdXNoX2NvbnRleHQodm9pZCkKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUlZzAsIFslJWcwXSAlMFxuXHQiIDogOgogCQkJICAgICAiaSIgKEFTSV9NX0ZMVVNIX0NUWCkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvZGVsYXkuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2RlbGF5LmgKaW5kZXggNmVkZjJjYi4uN2VjOGU5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvZGVsYXkuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9kZWxheS5oCkBAIC0xMCw3ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2NwdWRhdGEuaD4KIAotZXh0ZXJuIF9faW5saW5lX18gdm9pZCBfX2RlbGF5KHVuc2lnbmVkIGxvbmcgbG9vcHMpCitzdGF0aWMgaW5saW5lIHZvaWQgX19kZWxheSh1bnNpZ25lZCBsb25nIGxvb3BzKQogewogCV9fYXNtX18gX192b2xhdGlsZV9fKCJjbXAgJTAsIDBcblx0IgogCQkJICAgICAiMTogYm5lIDFiXG5cdCIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2RtYS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZG1hLmgKaW5kZXggMDdlNjM2OC4uOGVjMjA2YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvZG1hLmgKQEAgLTE5OCw3ICsxOTgsNyBAQAogLyogUGF1c2UgdW50aWwgY291bnRlciBydW5zIG91dCBvciBCSVQgaXNuJ3Qgc2V0IGluIHRoZSBETUEgY29uZGl0aW9uCiAgKiByZWdpc3Rlci4KICAqLwotZXh0ZXJuIF9faW5saW5lX18gdm9pZCBzcGFyY19kbWFfcGF1c2Uoc3RydWN0IHNwYXJjX2RtYV9yZWdpc3RlcnMgKnJlZ3MsCitzdGF0aWMgaW5saW5lIHZvaWQgc3BhcmNfZG1hX3BhdXNlKHN0cnVjdCBzcGFyY19kbWFfcmVnaXN0ZXJzICpyZWdzLAogCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGJpdCkKIHsKIAlpbnQgY3RyID0gNTAwMDA7ICAgLyogTGV0J3MgZmluZCBzb21lIGJ1Z3MgOykgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2Z1dGV4LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9mdXRleC5oCmluZGV4IDJjYWM1ZWMuLjlmZWZmNGNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9mdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2Z1dGV4LmgKQEAgLTE0LDcgKzE0LDcgQEAKIAlpbnQgY21wID0gKGVuY29kZWRfb3AgPj4gMjQpICYgMTU7CiAJaW50IG9wYXJnID0gKGVuY29kZWRfb3AgPDwgOCkgPj4gMjA7CiAJaW50IGNtcGFyZyA9IChlbmNvZGVkX29wIDw8IDIwKSA+PiAyMDsKLQlpbnQgb2xkdmFsID0gMCwgcmV0LCB0ZW07CisJaW50IG9sZHZhbCA9IDAsIHJldDsKIAlpZiAoZW5jb2RlZF9vcCAmIChGVVRFWF9PUF9PUEFSR19TSElGVCA8PCAyOCkpCiAJCW9wYXJnID0gMSA8PCBvcGFyZzsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaW9tbXUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2lvbW11LmgKaW5kZXggODE3MTM2Mi4uNzBjNTg5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvaW9tbXUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9pb21tdS5oCkBAIC0xMDgsMTIgKzEwOCwxMiBAQAogCXN0cnVjdCBiaXRfbWFwIHVzZW1hcDsKIH07CiAKLWV4dGVybiBfX2lubGluZV9fIHZvaWQgaW9tbXVfaW52YWxpZGF0ZShzdHJ1Y3QgaW9tbXVfcmVncyAqcmVncykKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb21tdV9pbnZhbGlkYXRlKHN0cnVjdCBpb21tdV9yZWdzICpyZWdzKQogewogCXJlZ3MtPnRsYmZsdXNoID0gMDsKIH0KIAotZXh0ZXJuIF9faW5saW5lX18gdm9pZCBpb21tdV9pbnZhbGlkYXRlX3BhZ2Uoc3RydWN0IGlvbW11X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYmEpCitzdGF0aWMgaW5saW5lIHZvaWQgaW9tbXVfaW52YWxpZGF0ZV9wYWdlKHN0cnVjdCBpb21tdV9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGJhKQogewogCXJlZ3MtPnBhZ2VmbHVzaCA9IChiYSAmIFBBR0VfTUFTSyk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9rZGVidWcuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2tkZWJ1Zy5oCmluZGV4IDNlYTQ5MTYuLmZiYTkyNDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL2tkZWJ1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2tkZWJ1Zy5oCkBAIC00Niw3ICs0Niw3IEBACiBleHRlcm4gc3RydWN0IGtlcm5lbF9kZWJ1ZyAqbGludXhfZGJ2ZWM7CiAKIC8qIFVzZSB0aGlzIG1hY3JvIGluIEMtY29kZSB0byBlbnRlciB0aGUgZGVidWdnZXIuICovCi1leHRlcm4gX19pbmxpbmVfXyB2b2lkIHNwX2VudGVyX2RlYnVnZ2VyKHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgc3BfZW50ZXJfZGVidWdnZXIodm9pZCkKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygiam1wbCAlMCwgJSVvN1xuXHQiCiAJCQkgICAgICJub3Bcblx0IiA6IDoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL21idXMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL21idXMuaAppbmRleCA1ZjI3NDkwLi5lY2FjZGY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9tYnVzLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvbWJ1cy5oCkBAIC04Myw3ICs4Myw3IEBACiAgKi8KICNkZWZpbmUgVEJSX0lEX1NISUZUICAgICAgICAgICAgMjAKIAotZXh0ZXJuIF9faW5saW5lX18gaW50IGdldF9jcHVpZCh2b2lkKQorc3RhdGljIGlubGluZSBpbnQgZ2V0X2NwdWlkKHZvaWQpCiB7CiAJcmVnaXN0ZXIgaW50IHJldHZhbDsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygicmQgJSV0YnIsICUwXG5cdCIKQEAgLTkzLDcgKzkzLDcgQEAKIAlyZXR1cm4gKHJldHZhbCAmIDMpOwogfQogCi1leHRlcm4gX19pbmxpbmVfXyBpbnQgZ2V0X21vZGlkKHZvaWQpCitzdGF0aWMgaW5saW5lIGludCBnZXRfbW9kaWQodm9pZCkKIHsKIAlyZXR1cm4gKGdldF9jcHVpZCgpIHwgMHg4KTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL21zaS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvbXNpLmgKaW5kZXggYjY5NTQzZC4uZmY3MmNiZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvbXNpLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvbXNpLmgKQEAgLTE5LDcgKzE5LDcgQEAKICNkZWZpbmUgTVNJX0FTWU5DX01PREUgIDB4ODAwMDAwMDAJLyogT3BlcmF0ZSB0aGUgTVNJIGFzeW5jaHJvbm91c2x5ICovCiAKIAotZXh0ZXJuIF9faW5saW5lX18gdm9pZCBtc2lfc2V0X3N5bmModm9pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBtc2lfc2V0X3N5bmModm9pZCkKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxkYSBbJTBdICUxLCAlJWczXG5cdCIKIAkJCSAgICAgICJhbmRuICUlZzMsICUyLCAlJWczXG5cdCIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL214Y2MuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL214Y2MuaAppbmRleCA2MGVmOWQ2Li4xMjhmZTk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9teGNjLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvbXhjYy5oCkBAIC04NSw3ICs4NSw3IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLWV4dGVybiBfX2lubGluZV9fIHZvaWQgbXhjY19zZXRfc3RyZWFtX3NyYyh1bnNpZ25lZCBsb25nICpwYWRkcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBteGNjX3NldF9zdHJlYW1fc3JjKHVuc2lnbmVkIGxvbmcgKnBhZGRyKQogewogCXVuc2lnbmVkIGxvbmcgZGF0YTAgPSBwYWRkclswXTsKIAl1bnNpZ25lZCBsb25nIGRhdGExID0gcGFkZHJbMV07CkBAIC05OCw3ICs5OCw3IEBACiAJCQkgICAgICAiaSIgKEFTSV9NX01YQ0MpIDogImcyIiwgImczIik7CiB9CiAKLWV4dGVybiBfX2lubGluZV9fIHZvaWQgbXhjY19zZXRfc3RyZWFtX2RzdCh1bnNpZ25lZCBsb25nICpwYWRkcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBteGNjX3NldF9zdHJlYW1fZHN0KHVuc2lnbmVkIGxvbmcgKnBhZGRyKQogewogCXVuc2lnbmVkIGxvbmcgZGF0YTAgPSBwYWRkclswXTsKIAl1bnNpZ25lZCBsb25nIGRhdGExID0gcGFkZHJbMV07CkBAIC0xMTEsNyArMTExLDcgQEAKIAkJCSAgICAgICJpIiAoQVNJX01fTVhDQykgOiAiZzIiLCAiZzMiKTsKIH0KIAotZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBteGNjX2dldF9jcmVnKHZvaWQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbXhjY19nZXRfY3JlZyh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgbXhjY19jb250cm9sOwogCkBAIC0xMjUsNyArMTI1LDcgQEAKIAlyZXR1cm4gbXhjY19jb250cm9sOwogfQogCi1leHRlcm4gX19pbmxpbmVfXyB2b2lkIG14Y2Nfc2V0X2NyZWcodW5zaWduZWQgbG9uZyBteGNjX2NvbnRyb2wpCitzdGF0aWMgaW5saW5lIHZvaWQgbXhjY19zZXRfY3JlZyh1bnNpZ25lZCBsb25nIG14Y2NfY29udHJvbCkKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUwLCBbJTFdICUyXG5cdCIgOiA6CiAJCQkgICAgICJyIiAobXhjY19jb250cm9sKSwgInIiIChNWENDX0NSRUcpLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvb2Jpby5oIGIvaW5jbHVkZS9hc20tc3BhcmMvb2Jpby5oCmluZGV4IDYyZTFkNzcuLjQ3ODU0YTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL29iaW8uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9vYmlvLmgKQEAgLTk4LDcgKzk4LDcgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotZXh0ZXJuIF9faW5saW5lX18gaW50IGJ3X2dldF9pbnRyX21hc2soaW50IHNidXNfbGV2ZWwpCitzdGF0aWMgaW5saW5lIGludCBid19nZXRfaW50cl9tYXNrKGludCBzYnVzX2xldmVsKQogewogCWludCBtYXNrOwogCQpAQCAtMTA5LDcgKzEwOSw3IEBACiAJcmV0dXJuIG1hc2s7CiB9CiAKLWV4dGVybiBfX2lubGluZV9fIHZvaWQgYndfY2xlYXJfaW50cl9tYXNrKGludCBzYnVzX2xldmVsLCBpbnQgbWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBid19jbGVhcl9pbnRyX21hc2soaW50IHNidXNfbGV2ZWwsIGludCBtYXNrKQogewogCV9fYXNtX18gX192b2xhdGlsZV9fICgic3RoYSAlMCwgWyUxXSAlMiIgOiA6CiAJCQkgICAgICAiciIgKG1hc2spLApAQCAtMTE3LDcgKzExNyw3IEBACiAJCQkgICAgICAiaSIgKEFTSV9NX0NUTCkpOwogfQogCi1leHRlcm4gX19pbmxpbmVfXyB1bnNpZ25lZCBid19nZXRfcHJvZl9saW1pdChpbnQgY3B1KQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBid19nZXRfcHJvZl9saW1pdChpbnQgY3B1KQogewogCXVuc2lnbmVkIGxpbWl0OwogCQpAQCAtMTI4LDcgKzEyOCw3IEBACiAJcmV0dXJuIGxpbWl0OwogfQogCi1leHRlcm4gX19pbmxpbmVfXyB2b2lkIGJ3X3NldF9wcm9mX2xpbWl0KGludCBjcHUsIHVuc2lnbmVkIGxpbWl0KQorc3RhdGljIGlubGluZSB2b2lkIGJ3X3NldF9wcm9mX2xpbWl0KGludCBjcHUsIHVuc2lnbmVkIGxpbWl0KQogewogCV9fYXNtX18gX192b2xhdGlsZV9fICgic3RhICUwLCBbJTFdICUyIiA6IDoKIAkJCSAgICAgICJyIiAobGltaXQpLApAQCAtMTM2LDcgKzEzNiw3IEBACiAJCQkgICAgICAiaSIgKEFTSV9NX0NUTCkpOwogfQogCi1leHRlcm4gX19pbmxpbmVfXyB1bnNpZ25lZCBid19nZXRfY3RybChpbnQgY3B1KQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBid19nZXRfY3RybChpbnQgY3B1KQogewogCXVuc2lnbmVkIGN0cmw7CiAJCkBAIC0xNDcsNyArMTQ3LDcgQEAKIAlyZXR1cm4gY3RybDsKIH0KIAotZXh0ZXJuIF9faW5saW5lX18gdm9pZCBid19zZXRfY3RybChpbnQgY3B1LCB1bnNpZ25lZCBjdHJsKQorc3RhdGljIGlubGluZSB2b2lkIGJ3X3NldF9jdHJsKGludCBjcHUsIHVuc2lnbmVkIGN0cmwpCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdGEgJTAsIFslMV0gJTIiIDogOgogCQkJICAgICAgInIiIChjdHJsKSwKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCiBleHRlcm4gdW5zaWduZWQgY2hhciBjcHVfbGVkc1szMl07CiAKLWV4dGVybiBfX2lubGluZV9fIHZvaWQgc2hvd19sZWRzKGludCBjcHVpZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaG93X2xlZHMoaW50IGNwdWlkKQogewogCWNwdWlkICY9IDB4MWU7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdGJhICUwLCBbJTFdICUyIiA6IDoKQEAgLTE2Niw3ICsxNjYsNyBAQAogCQkJICAgICAgImkiIChBU0lfTV9DVEwpKTsKIH0KIAotZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgY2NfZ2V0X2lwZW4odm9pZCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2NfZ2V0X2lwZW4odm9pZCkKIHsKIAl1bnNpZ25lZCBwZW5kaW5nOwogCQpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJcmV0dXJuIHBlbmRpbmc7CiB9CiAKLWV4dGVybiBfX2lubGluZV9fIHZvaWQgY2Nfc2V0X2ljbHIodW5zaWduZWQgY2xlYXIpCitzdGF0aWMgaW5saW5lIHZvaWQgY2Nfc2V0X2ljbHIodW5zaWduZWQgY2xlYXIpCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdGhhICUwLCBbJTFdICUyIiA6IDoKIAkJCSAgICAgICJyIiAoY2xlYXIpLApAQCAtMTg1LDcgKzE4NSw3IEBACiAJCQkgICAgICAiaSIgKEFTSV9NX01YQ0MpKTsKIH0KIAotZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgY2NfZ2V0X2ltc2sodm9pZCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2NfZ2V0X2ltc2sodm9pZCkKIHsKIAl1bnNpZ25lZCBtYXNrOwogCQpAQCAtMTk2LDcgKzE5Niw3IEBACiAJcmV0dXJuIG1hc2s7CiB9CiAKLWV4dGVybiBfX2lubGluZV9fIHZvaWQgY2Nfc2V0X2ltc2sodW5zaWduZWQgbWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBjY19zZXRfaW1zayh1bnNpZ25lZCBtYXNrKQogewogCV9fYXNtX18gX192b2xhdGlsZV9fICgic3RoYSAlMCwgWyUxXSAlMiIgOiA6CiAJCQkgICAgICAiciIgKG1hc2spLApAQCAtMjA0LDcgKzIwNCw3IEBACiAJCQkgICAgICAiaSIgKEFTSV9NX01YQ0MpKTsKIH0KIAotZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgY2NfZ2V0X2ltc2tfb3RoZXIoaW50IGNwdWlkKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBjY19nZXRfaW1za19vdGhlcihpbnQgY3B1aWQpCiB7CiAJdW5zaWduZWQgbWFzazsKIAkKQEAgLTIxNSw3ICsyMTUsNyBAQAogCXJldHVybiBtYXNrOwogfQogCi1leHRlcm4gX19pbmxpbmVfXyB2b2lkIGNjX3NldF9pbXNrX290aGVyKGludCBjcHVpZCwgdW5zaWduZWQgbWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBjY19zZXRfaW1za19vdGhlcihpbnQgY3B1aWQsIHVuc2lnbmVkIG1hc2spCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdGhhICUwLCBbJTFdICUyIiA6IDoKIAkJCSAgICAgICJyIiAobWFzayksCkBAIC0yMjMsNyArMjIzLDcgQEAKIAkJCSAgICAgICJpIiAoQVNJX01fQ1RMKSk7CiB9CiAKLWV4dGVybiBfX2lubGluZV9fIHZvaWQgY2Nfc2V0X2lnZW4odW5zaWduZWQgZ2VuKQorc3RhdGljIGlubGluZSB2b2lkIGNjX3NldF9pZ2VuKHVuc2lnbmVkIGdlbikKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0YSAlMCwgWyUxXSAlMiIgOiA6CiAJCQkgICAgICAiciIgKGdlbiksCkBAIC0yMzksNyArMjM5LDcgQEAKICNkZWZpbmUgSUdFTl9NRVNTQUdFKGJjYXN0LCBkZXZpZCwgc2lkLCBsZXZlbHMpIFwKIAkoKChiY2FzdCkgPDwgMzEpIHwgKChkZXZpZCkgPDwgMjMpIHwgKChzaWQpIDw8IDE1KSB8IChsZXZlbHMpKQogICAgICAgICAgICAgCi1leHRlcm4gX19pbmxpbmVfXyB2b2lkIHN1bjRkX3NlbmRfaXBpKGludCBjcHUsIGludCBsZXZlbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdW40ZF9zZW5kX2lwaShpbnQgY3B1LCBpbnQgbGV2ZWwpCiB7CiAJY2Nfc2V0X2lnZW4oSUdFTl9NRVNTQUdFKDAsIGNwdSA8PCAzLCA2ICsgKChsZXZlbCA+PiAxKSAmIDcpLCAxIDw8IChsZXZlbCAtIDEpKSk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9wY2kuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3BjaS5oCmluZGV4IDk3MDUyYmEuLjM4NjQ0NzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3BjaS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3BjaS5oCkBAIC0xNSwxMiArMTUsMTIgQEAKIAogI2RlZmluZSBQQ0lfSVJRX05PTkUJCTB4ZmZmZmZmZmYKIAotZXh0ZXJuIGlubGluZSB2b2lkIHBjaWJpb3Nfc2V0X21hc3RlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGlubGluZSB2b2lkIHBjaWJpb3Nfc2V0X21hc3RlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCS8qIE5vIHNwZWNpYWwgYnVzIG1hc3RlcmluZyBzZXR1cCBoYW5kbGluZyAqLwogfQogCi1leHRlcm4gaW5saW5lIHZvaWQgcGNpYmlvc19wZW5hbGl6ZV9pc2FfaXJxKGludCBpcnEsIGludCBhY3RpdmUpCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpYmlvc19wZW5hbGl6ZV9pc2FfaXJxKGludCBpcnEsIGludCBhY3RpdmUpCiB7CiAJLyogV2UgZG9uJ3QgZG8gZHluYW1pYyBQQ0kgSVJRIGFsbG9jYXRpb24gKi8KIH0KQEAgLTEzNyw3ICsxMzcsNyBAQAogICogb25seSBkcml2ZSB0aGUgbG93IDI0LWJpdHMgZHVyaW5nIFBDSSBidXMgbWFzdGVyaW5nLCB0aGVuCiAgKiB5b3Ugd291bGQgcGFzcyAweDAwZmZmZmZmIGFzIHRoZSBtYXNrIHRvIHRoaXMgZnVuY3Rpb24uCiAgKi8KLWV4dGVybiBpbmxpbmUgaW50IHBjaV9kbWFfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpod2RldiwgdTY0IG1hc2spCitzdGF0aWMgaW5saW5lIGludCBwY2lfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHU2NCBtYXNrKQogewogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcGd0YWJsZS5oCmluZGV4IDhmNGY2YTkuLmExNGU5ODYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9wZ3RhYmxlLmgKQEAgLTgyLDYgKzgyLDggQEAKIC8qIFRvcC1sZXZlbCBwYWdlIGRpcmVjdG9yeSAqLwogZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyWzEwMjRdOwogCitleHRlcm4gdm9pZCBwYWdpbmdfaW5pdCh2b2lkKTsKKwogLyogUGFnZSB0YWJsZSBmb3IgMC00TUIgZm9yIGV2ZXJ5Ym9keSwgb24gdGhlIFNwYXJjIHRoaXMKICAqIGhvbGRzIHRoZSBzYW1lIGFzIG9uIHRoZSBpMzg2LgogICovCkBAIC0xNTIsNyArMTU0LDcgQEAKIEJURklYVVBERUZfQ0FMTCh2b2lkLCBwdGVfY2xlYXIsIHB0ZV90ICopCiBCVEZJWFVQREVGX0NBTEwoaW50LCBwdGVfcmVhZCwgcHRlX3QpCiAKLWV4dGVybiBfX2lubGluZV9fIGludCBwdGVfbm9uZShwdGVfdCBwdGUpCitzdGF0aWMgaW5saW5lIGludCBwdGVfbm9uZShwdGVfdCBwdGUpCiB7CiAJcmV0dXJuICEocHRlX3ZhbChwdGUpICYgfkJURklYVVBfU0VUSEkobm9uZV9tYXNrKSk7CiB9CkBAIC0xNjUsNyArMTY3LDcgQEAKIEJURklYVVBERUZfQ0FMTF9DT05TVChpbnQsIHBtZF9wcmVzZW50LCBwbWRfdCkKIEJURklYVVBERUZfQ0FMTCh2b2lkLCBwbWRfY2xlYXIsIHBtZF90ICopCiAKLWV4dGVybiBfX2lubGluZV9fIGludCBwbWRfbm9uZShwbWRfdCBwbWQpCitzdGF0aWMgaW5saW5lIGludCBwbWRfbm9uZShwbWRfdCBwbWQpCiB7CiAJcmV0dXJuICEocG1kX3ZhbChwbWQpICYgfkJURklYVVBfU0VUSEkobm9uZV9tYXNrKSk7CiB9CkBAIC0xOTIsMjAgKzE5NCwyMCBAQAogQlRGSVhVUERFRl9IQUxGKHB0ZV9kaXJ0eWkpCiBCVEZJWFVQREVGX0hBTEYocHRlX3lvdW5naSkKIAotZXh0ZXJuIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKSBfX2F0dHJpYnV0ZV9jb25zdF9fOwotZXh0ZXJuIF9faW5saW5lX18gaW50IHB0ZV93cml0ZShwdGVfdCBwdGUpCitzdGF0aWMgaW50IHB0ZV93cml0ZShwdGVfdCBwdGUpIF9fYXR0cmlidXRlX2NvbnN0X187CitzdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKQogewogCXJldHVybiBwdGVfdmFsKHB0ZSkgJiBCVEZJWFVQX0hBTEYocHRlX3dyaXRlaSk7CiB9CiAKLWV4dGVybiBpbnQgcHRlX2RpcnR5KHB0ZV90IHB0ZSkgX19hdHRyaWJ1dGVfY29uc3RfXzsKLWV4dGVybiBfX2lubGluZV9fIGludCBwdGVfZGlydHkocHRlX3QgcHRlKQorc3RhdGljIGludCBwdGVfZGlydHkocHRlX3QgcHRlKSBfX2F0dHJpYnV0ZV9jb25zdF9fOworc3RhdGljIGlubGluZSBpbnQgcHRlX2RpcnR5KHB0ZV90IHB0ZSkKIHsKIAlyZXR1cm4gcHRlX3ZhbChwdGUpICYgQlRGSVhVUF9IQUxGKHB0ZV9kaXJ0eWkpOwogfQogCi1leHRlcm4gaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpIF9fYXR0cmlidXRlX2NvbnN0X187Ci1leHRlcm4gX19pbmxpbmVfXyBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkKK3N0YXRpYyBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkgX19hdHRyaWJ1dGVfY29uc3RfXzsKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCiB7CiAJcmV0dXJuIHB0ZV92YWwocHRlKSAmIEJURklYVVBfSEFMRihwdGVfeW91bmdpKTsKIH0KQEAgLTIxNSw4ICsyMTcsOCBAQAogICovCiBCVEZJWFVQREVGX0hBTEYocHRlX2ZpbGVpKQogCi1leHRlcm4gaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkgX19hdHRyaWJ1dGVfY29uc3RfXzsKLWV4dGVybiBfX2lubGluZV9fIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCitzdGF0aWMgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkgX19hdHRyaWJ1dGVfY29uc3RfXzsKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkKIHsKIAlyZXR1cm4gcHRlX3ZhbChwdGUpICYgQlRGSVhVUF9IQUxGKHB0ZV9maWxlaSk7CiB9CkBAIC0yMjcsMjAgKzIyOSwyMCBAQAogQlRGSVhVUERFRl9IQUxGKHB0ZV9ta2NsZWFuaSkKIEJURklYVVBERUZfSEFMRihwdGVfbWtvbGRpKQogCi1leHRlcm4gcHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpIF9fYXR0cmlidXRlX2NvbnN0X187Ci1leHRlcm4gX19pbmxpbmVfXyBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkKK3N0YXRpYyBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkgX19hdHRyaWJ1dGVfY29uc3RfXzsKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpCiB7CiAJcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSAmIH5CVEZJWFVQX0hBTEYocHRlX3dycHJvdGVjdGkpKTsKIH0KIAotZXh0ZXJuIHB0ZV90IHB0ZV9ta2NsZWFuKHB0ZV90IHB0ZSkgX19hdHRyaWJ1dGVfY29uc3RfXzsKLWV4dGVybiBfX2lubGluZV9fIHB0ZV90IHB0ZV9ta2NsZWFuKHB0ZV90IHB0ZSkKK3N0YXRpYyBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpIF9fYXR0cmlidXRlX2NvbnN0X187CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2NsZWFuKHB0ZV90IHB0ZSkKIHsKIAlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpICYgfkJURklYVVBfSEFMRihwdGVfbWtjbGVhbmkpKTsKIH0KIAotZXh0ZXJuIHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpIF9fYXR0cmlidXRlX2NvbnN0X187Ci1leHRlcm4gX19pbmxpbmVfXyBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKQorc3RhdGljIHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpIF9fYXR0cmlidXRlX2NvbnN0X187CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpCiB7CiAJcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSAmIH5CVEZJWFVQX0hBTEYocHRlX21rb2xkaSkpOwogfQpAQCAtMjc2LDggKzI3OCw4IEBACiAKIEJURklYVVBERUZfSU5UKHB0ZV9tb2RpZnlfbWFzaykKIAotZXh0ZXJuIHB0ZV90IHB0ZV9tb2RpZnkocHRlX3QgcHRlLCBwZ3Byb3RfdCBuZXdwcm90KSBfX2F0dHJpYnV0ZV9jb25zdF9fOwotZXh0ZXJuIF9faW5saW5lX18gcHRlX3QgcHRlX21vZGlmeShwdGVfdCBwdGUsIHBncHJvdF90IG5ld3Byb3QpCitzdGF0aWMgcHRlX3QgcHRlX21vZGlmeShwdGVfdCBwdGUsIHBncHJvdF90IG5ld3Byb3QpIF9fYXR0cmlidXRlX2NvbnN0X187CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9tb2RpZnkocHRlX3QgcHRlLCBwZ3Byb3RfdCBuZXdwcm90KQogewogCXJldHVybiBfX3B0ZSgocHRlX3ZhbChwdGUpICYgQlRGSVhVUF9JTlQocHRlX21vZGlmeV9tYXNrKSkgfAogCQlwZ3Byb3RfdmFsKG5ld3Byb3QpKTsKQEAgLTM4NCwxMyArMzg2LDEzIEBACiAKICNkZWZpbmUgTk9fQ09OVEVYVCAgICAgLTEKIAotZXh0ZXJuIF9faW5saW5lX18gdm9pZCByZW1vdmVfZnJvbV9jdHhfbGlzdChzdHJ1Y3QgY3R4X2xpc3QgKmVudHJ5KQorc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9mcm9tX2N0eF9saXN0KHN0cnVjdCBjdHhfbGlzdCAqZW50cnkpCiB7CiAJZW50cnktPm5leHQtPnByZXYgPSBlbnRyeS0+cHJldjsKIAllbnRyeS0+cHJldi0+bmV4dCA9IGVudHJ5LT5uZXh0OwogfQogCi1leHRlcm4gX19pbmxpbmVfXyB2b2lkIGFkZF90b19jdHhfbGlzdChzdHJ1Y3QgY3R4X2xpc3QgKmhlYWQsIHN0cnVjdCBjdHhfbGlzdCAqZW50cnkpCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkX3RvX2N0eF9saXN0KHN0cnVjdCBjdHhfbGlzdCAqaGVhZCwgc3RydWN0IGN0eF9saXN0ICplbnRyeSkKIHsKIAllbnRyeS0+bmV4dCA9IGhlYWQ7CiAJKGVudHJ5LT5wcmV2ID0gaGVhZC0+cHJldiktPm5leHQgPSBlbnRyeTsKQEAgLTM5OSw3ICs0MDEsNyBAQAogI2RlZmluZSBhZGRfdG9fZnJlZV9jdHhsaXN0KGVudHJ5KSBhZGRfdG9fY3R4X2xpc3QoJmN0eF9mcmVlLCBlbnRyeSkKICNkZWZpbmUgYWRkX3RvX3VzZWRfY3R4bGlzdChlbnRyeSkgYWRkX3RvX2N0eF9saXN0KCZjdHhfdXNlZCwgZW50cnkpCiAKLWV4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwogX19nZXRfcGh5cyAodW5zaWduZWQgbG9uZyBhZGRyKQogewogCXN3aXRjaCAoc3BhcmNfY3B1X21vZGVsKXsKQEAgLTQxNCw3ICs0MTYsNyBAQAogCX0KIH0KIAotZXh0ZXJuIF9faW5saW5lX18gaW50CitzdGF0aWMgaW5saW5lIGludAogX19nZXRfaW9zcGFjZSAodW5zaWduZWQgbG9uZyBhZGRyKQogewogCXN3aXRjaCAoc3BhcmNfY3B1X21vZGVsKXsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3BndHNybW11LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9wZ3Rzcm1tdS5oCmluZGV4IGVlM2I5ZDkuLmVkZWI5ODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3BndHNybW11LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvcGd0c3JtbXUuaApAQCAtMTQ4LDcgKzE0OCw3IEBACiAjZGVmaW5lIF9fbm9jYWNoZV9maXgoVkFERFIpIF9fdmEoX19ub2NhY2hlX3BhKFZBRERSKSkKIAogLyogQWNjZXNzaW5nIHRoZSBNTVUgY29udHJvbCByZWdpc3Rlci4gKi8KLWV4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIGludCBzcm1tdV9nZXRfbW11cmVnKHZvaWQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzcm1tdV9nZXRfbW11cmVnKHZvaWQpCiB7CiAgICAgICAgIHVuc2lnbmVkIGludCByZXR2YWw7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkYSBbJSVnMF0gJTEsICUwXG5cdCIgOgpAQCAtMTU3LDE0ICsxNTcsMTQgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1leHRlcm4gX19pbmxpbmVfXyB2b2lkIHNybW11X3NldF9tbXVyZWcodW5zaWduZWQgbG9uZyByZWd2YWwpCitzdGF0aWMgaW5saW5lIHZvaWQgc3JtbXVfc2V0X21tdXJlZyh1bnNpZ25lZCBsb25nIHJlZ3ZhbCkKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUwLCBbJSVnMF0gJTFcblx0IiA6IDoKIAkJCSAgICAgInIiIChyZWd2YWwpLCAiaSIgKEFTSV9NX01NVVJFR1MpIDogIm1lbW9yeSIpOwogCiB9CiAKLWV4dGVybiBfX2lubGluZV9fIHZvaWQgc3JtbXVfc2V0X2N0YWJsZV9wdHIodW5zaWduZWQgbG9uZyBwYWRkcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcm1tdV9zZXRfY3RhYmxlX3B0cih1bnNpZ25lZCBsb25nIHBhZGRyKQogewogCXBhZGRyID0gKChwYWRkciA+PiA0KSAmIFNSTU1VX0NUWF9QTUFTSyk7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YSAlMCwgWyUxXSAlMlxuXHQiIDogOgpAQCAtMTczLDcgKzE3Myw3IEBACiAJCQkgICAgICJtZW1vcnkiKTsKIH0KIAotZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBzcm1tdV9nZXRfY3RhYmxlX3B0cih2b2lkKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNybW11X2dldF9jdGFibGVfcHRyKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IHJldHZhbDsKIApAQCAtMTg0LDE0ICsxODQsMTQgQEAKIAlyZXR1cm4gKHJldHZhbCAmIFNSTU1VX0NUWF9QTUFTSykgPDwgNDsKIH0KIAotZXh0ZXJuIF9faW5saW5lX18gdm9pZCBzcm1tdV9zZXRfY29udGV4dChpbnQgY29udGV4dCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcm1tdV9zZXRfY29udGV4dChpbnQgY29udGV4dCkKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUwLCBbJTFdICUyXG5cdCIgOiA6CiAJCQkgICAgICJyIiAoY29udGV4dCksICJyIiAoU1JNTVVfQ1RYX1JFRyksCiAJCQkgICAgICJpIiAoQVNJX01fTU1VUkVHUykgOiAibWVtb3J5Iik7CiB9CiAKLWV4dGVybiBfX2lubGluZV9fIGludCBzcm1tdV9nZXRfY29udGV4dCh2b2lkKQorc3RhdGljIGlubGluZSBpbnQgc3JtbXVfZ2V0X2NvbnRleHQodm9pZCkKIHsKIAlyZWdpc3RlciBpbnQgcmV0dmFsOwogCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZGEgWyUxXSAlMiwgJTBcblx0IiA6CkBAIC0yMDEsNyArMjAxLDcgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1leHRlcm4gX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgc3JtbXVfZ2V0X2ZzdGF0dXModm9pZCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNybW11X2dldF9mc3RhdHVzKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IHJldHZhbDsKIApAQCAtMjExLDcgKzIxMSw3IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgaW50IHNybW11X2dldF9mYWRkcih2b2lkKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc3JtbXVfZ2V0X2ZhZGRyKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IHJldHZhbDsKIApAQCAtMjIyLDcgKzIyMiw3IEBACiB9CiAKIC8qIFRoaXMgaXMgZ3VhcmFudGVlZCBvbiBhbGwgU1JNTVUncy4gKi8KLWV4dGVybiBfX2lubGluZV9fIHZvaWQgc3JtbXVfZmx1c2hfd2hvbGVfdGxiKHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgc3JtbXVfZmx1c2hfd2hvbGVfdGxiKHZvaWQpCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YSAlJWcwLCBbJTBdICUxXG5cdCI6IDoKIAkJCSAgICAgInIiICgweDQwMCksICAgICAgICAvKiBGbHVzaCBlbnRpcmUgVExCISEgKi8KQEAgLTIzMSw3ICsyMzEsNyBAQAogfQogCiAvKiBUaGVzZSBmbHVzaCB0eXBlcyBhcmUgbm90IGF2YWlsYWJsZSBvbiBhbGwgY2hpcHMuLi4gKi8KLWV4dGVybiBfX2lubGluZV9fIHZvaWQgc3JtbXVfZmx1c2hfdGxiX2N0eCh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIHNybW11X2ZsdXNoX3RsYl9jdHgodm9pZCkKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUlZzAsIFslMF0gJTFcblx0IjogOgogCQkJICAgICAiciIgKDB4MzAwKSwgICAgICAgIC8qIEZsdXNoIFRMQiBjdHguLiAqLwpAQCAtMjM5LDcgKzIzOSw3IEBACiAKIH0KIAotZXh0ZXJuIF9faW5saW5lX18gdm9pZCBzcm1tdV9mbHVzaF90bGJfcmVnaW9uKHVuc2lnbmVkIGxvbmcgYWRkcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcm1tdV9mbHVzaF90bGJfcmVnaW9uKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlhZGRyICY9IFNSTU1VX1BHRElSX01BU0s7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YSAlJWcwLCBbJTBdICUxXG5cdCI6IDoKQEAgLTI0OSw3ICsyNDksNyBAQAogfQogCiAKLWV4dGVybiBfX2lubGluZV9fIHZvaWQgc3JtbXVfZmx1c2hfdGxiX3NlZ21lbnQodW5zaWduZWQgbG9uZyBhZGRyKQorc3RhdGljIGlubGluZSB2b2lkIHNybW11X2ZsdXNoX3RsYl9zZWdtZW50KHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlhZGRyICY9IFNSTU1VX1JFQUxfUE1EX01BU0s7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YSAlJWcwLCBbJTBdICUxXG5cdCI6IDoKQEAgLTI1OCw3ICsyNTgsNyBAQAogCiB9CiAKLWV4dGVybiBfX2lubGluZV9fIHZvaWQgc3JtbXVfZmx1c2hfdGxiX3BhZ2UodW5zaWduZWQgbG9uZyBwYWdlKQorc3RhdGljIGlubGluZSB2b2lkIHNybW11X2ZsdXNoX3RsYl9wYWdlKHVuc2lnbmVkIGxvbmcgcGFnZSkKIHsKIAlwYWdlICY9IFBBR0VfTUFTSzsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUlZzAsIFslMF0gJTFcblx0IjogOgpAQCAtMjY3LDcgKzI2Nyw3IEBACiAKIH0KIAotZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBzcm1tdV9od3Byb2JlKHVuc2lnbmVkIGxvbmcgdmFkZHIpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc3JtbXVfaHdwcm9iZSh1bnNpZ25lZCBsb25nIHZhZGRyKQogewogCXVuc2lnbmVkIGxvbmcgcmV0dmFsOwogCkBAIC0yNzksNyArMjc5LDcgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1leHRlcm4gX19pbmxpbmVfXyBpbnQKK3N0YXRpYyBpbmxpbmUgaW50CiBzcm1tdV9nZXRfcHRlICh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBlbnRyeTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcHJvY2Vzc29yLmgKaW5kZXggNWE3YTFhOC4uNmZiYjNmMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvcHJvY2Vzc29yLmgKQEAgLTc5LDcgKzc5LDcgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHRocmVhZF9zYXZlZF9wYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpOwogCiAvKiBEbyBuZWNlc3Nhcnkgc2V0dXAgdG8gc3RhcnQgdXAgYSBuZXdseSBleGVjdXRlZCB0aHJlYWQuICovCi1leHRlcm4gX19pbmxpbmVfXyB2b2lkIHN0YXJ0X3RocmVhZChzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIHVuc2lnbmVkIGxvbmcgcGMsCitzdGF0aWMgaW5saW5lIHZvaWQgc3RhcnRfdGhyZWFkKHN0cnVjdCBwdF9yZWdzICogcmVncywgdW5zaWduZWQgbG9uZyBwYywKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBzcCkKIHsKIAlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHplcm8gYXNtKCJnMSIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvcHNyLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9wc3IuaAppbmRleCA5Nzc4YjhjLi4xOWM5NzgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9wc3IuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9wc3IuaApAQCAtMzgsNyArMzgsNyBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogLyogR2V0IHRoZSAlcHNyIHJlZ2lzdGVyLiAqLwotZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgaW50IGdldF9wc3Iodm9pZCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9wc3Iodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgcHNyOwogCV9fYXNtX18gX192b2xhdGlsZV9fKApAQCAtNTMsNyArNTMsNyBAQAogCXJldHVybiBwc3I7CiB9CiAKLWV4dGVybiBfX2lubGluZV9fIHZvaWQgcHV0X3Bzcih1bnNpZ25lZCBpbnQgbmV3X3BzcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRfcHNyKHVuc2lnbmVkIGludCBuZXdfcHNyKQogewogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCQkid3IJJTAsIDB4MCwgJSVwc3Jcblx0IgpAQCAtNzIsNyArNzIsNyBAQAogCiBleHRlcm4gdW5zaWduZWQgaW50IGZzcl9zdG9yYWdlOwogCi1leHRlcm4gX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgZ2V0X2Zzcih2b2lkKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X2Zzcih2b2lkKQogewogCXVuc2lnbmVkIGludCBmc3IgPSAwOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zYmkuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NiaS5oCmluZGV4IDczOWNjYWMuLjg2YTYwM2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3NiaS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3NiaS5oCkBAIC02NSw3ICs2NSw3IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLWV4dGVybiBfX2lubGluZV9fIGludCBhY3F1aXJlX3NiaShpbnQgZGV2aWQsIGludCBtYXNrKQorc3RhdGljIGlubGluZSBpbnQgYWNxdWlyZV9zYmkoaW50IGRldmlkLCBpbnQgbWFzaykKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN3YXBhIFslMl0gJTMsICUwIiA6CiAJCQkgICAgICAiPXIiIChtYXNrKSA6CkBAIC03NSw3ICs3NSw3IEBACiAJcmV0dXJuIG1hc2s7CiB9CiAKLWV4dGVybiBfX2lubGluZV9fIHZvaWQgcmVsZWFzZV9zYmkoaW50IGRldmlkLCBpbnQgbWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWxlYXNlX3NiaShpbnQgZGV2aWQsIGludCBtYXNrKQogewogCV9fYXNtX18gX192b2xhdGlsZV9fICgic3RhICUwLCBbJTFdICUyIiA6IDoKIAkJCSAgICAgICJyIiAobWFzayksCkBAIC04Myw3ICs4Myw3IEBACiAJCQkgICAgICAiaSIgKEFTSV9NX0NUTCkpOwogfQogCi1leHRlcm4gX19pbmxpbmVfXyB2b2lkIHNldF9zYmlfdGlkKGludCBkZXZpZCwgaW50IHRhcmdldGlkKQorc3RhdGljIGlubGluZSB2b2lkIHNldF9zYmlfdGlkKGludCBkZXZpZCwgaW50IHRhcmdldGlkKQogewogCV9fYXNtX18gX192b2xhdGlsZV9fICgic3RhICUwLCBbJTFdICUyIiA6IDoKIAkJCSAgICAgICJyIiAodGFyZ2V0aWQpLApAQCAtOTEsNyArOTEsNyBAQAogCQkJICAgICAgImkiIChBU0lfTV9DVEwpKTsKIH0KIAotZXh0ZXJuIF9faW5saW5lX18gaW50IGdldF9zYmlfY3RsKGludCBkZXZpZCwgaW50IGNmZ25vKQorc3RhdGljIGlubGluZSBpbnQgZ2V0X3NiaV9jdGwoaW50IGRldmlkLCBpbnQgY2Znbm8pCiB7CiAJaW50IGNmZzsKIAkKQEAgLTEwMiw3ICsxMDIsNyBAQAogCXJldHVybiBjZmc7CiB9CiAKLWV4dGVybiBfX2lubGluZV9fIHZvaWQgc2V0X3NiaV9jdGwoaW50IGRldmlkLCBpbnQgY2Znbm8sIGludCBjZmcpCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3NiaV9jdGwoaW50IGRldmlkLCBpbnQgY2Znbm8sIGludCBjZmcpCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdGEgJTAsIFslMV0gJTIiIDogOgogCQkJICAgICAgInIiIChjZmcpLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc2J1cy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc2J1cy5oCmluZGV4IDNhOGIzOTAuLmExM2NkZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3NidXMuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zYnVzLmgKQEAgLTI4LDEyICsyOCwxMiBAQAogICogbnVtYmVycyArIG9mZnNldHMsIGFuZCB2aWNlIHZlcnNhLgogICovCiAKLWV4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgc2J1c19kZXZhZGRyKGludCBzbG90bnVtLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzYnVzX2RldmFkZHIoaW50IHNsb3RudW0sIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewogICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpIChTVU5fU0JVU19CVkFERFIrKChzbG90bnVtKTw8MjUpKyhvZmZzZXQpKTsKIH0KIAotZXh0ZXJuIF9faW5saW5lX18gaW50IHNidXNfZGV2X3Nsb3QodW5zaWduZWQgbG9uZyBkZXZfYWRkcikKK3N0YXRpYyBpbmxpbmUgaW50IHNidXNfZGV2X3Nsb3QodW5zaWduZWQgbG9uZyBkZXZfYWRkcikKIHsKICAgcmV0dXJuIChpbnQpICgoKGRldl9hZGRyKS1TVU5fU0JVU19CVkFERFIpPj4yNSk7CiB9CkBAIC04MCw3ICs4MCw3IEBACiAKIGV4dGVybiBzdHJ1Y3Qgc2J1c19idXMgKnNidXNfcm9vdDsKIAotZXh0ZXJuIF9faW5saW5lX18gaW50CitzdGF0aWMgaW5saW5lIGludAogc2J1c19pc19zbGF2ZShzdHJ1Y3Qgc2J1c19kZXYgKmRldikKIHsKIAkvKiBYWFggSGF2ZSB0byB3cml0ZSB0aGlzIGZvciBzdW40YydzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zbXAuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NtcC5oCmluZGV4IDRmOTZkODMuLjU4MGM1MWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3NtcC5oCkBAIC02MCwyMiArNjAsMjIgQEAKICNkZWZpbmUgc21wX2Nyb3NzX2NhbGwoZnVuYyxhcmcxLGFyZzIsYXJnMyxhcmc0LGFyZzUpIEJURklYVVBfQ0FMTChzbXBfY3Jvc3NfY2FsbCkoZnVuYyxhcmcxLGFyZzIsYXJnMyxhcmc0LGFyZzUpCiAjZGVmaW5lIHNtcF9tZXNzYWdlX3Bhc3ModGFyZ2V0LG1zZyxkYXRhLHdhaXQpIEJURklYVVBfQ0FMTChzbXBfbWVzc2FnZV9wYXNzKSh0YXJnZXQsbXNnLGRhdGEsd2FpdCkKIAotZXh0ZXJuIF9faW5saW5lX18gdm9pZCB4YzAoc21wZnVuY190IGZ1bmMpIHsgc21wX2Nyb3NzX2NhbGwoZnVuYywgMCwgMCwgMCwgMCwgMCk7IH0KLWV4dGVybiBfX2lubGluZV9fIHZvaWQgeGMxKHNtcGZ1bmNfdCBmdW5jLCB1bnNpZ25lZCBsb25nIGFyZzEpCitzdGF0aWMgaW5saW5lIHZvaWQgeGMwKHNtcGZ1bmNfdCBmdW5jKSB7IHNtcF9jcm9zc19jYWxsKGZ1bmMsIDAsIDAsIDAsIDAsIDApOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgeGMxKHNtcGZ1bmNfdCBmdW5jLCB1bnNpZ25lZCBsb25nIGFyZzEpCiB7IHNtcF9jcm9zc19jYWxsKGZ1bmMsIGFyZzEsIDAsIDAsIDAsIDApOyB9Ci1leHRlcm4gX19pbmxpbmVfXyB2b2lkIHhjMihzbXBmdW5jX3QgZnVuYywgdW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIpCitzdGF0aWMgaW5saW5lIHZvaWQgeGMyKHNtcGZ1bmNfdCBmdW5jLCB1bnNpZ25lZCBsb25nIGFyZzEsIHVuc2lnbmVkIGxvbmcgYXJnMikKIHsgc21wX2Nyb3NzX2NhbGwoZnVuYywgYXJnMSwgYXJnMiwgMCwgMCwgMCk7IH0KLWV4dGVybiBfX2lubGluZV9fIHZvaWQgeGMzKHNtcGZ1bmNfdCBmdW5jLCB1bnNpZ25lZCBsb25nIGFyZzEsIHVuc2lnbmVkIGxvbmcgYXJnMiwKK3N0YXRpYyBpbmxpbmUgdm9pZCB4YzMoc21wZnVuY190IGZ1bmMsIHVuc2lnbmVkIGxvbmcgYXJnMSwgdW5zaWduZWQgbG9uZyBhcmcyLAogCQkJICAgdW5zaWduZWQgbG9uZyBhcmczKQogeyBzbXBfY3Jvc3NfY2FsbChmdW5jLCBhcmcxLCBhcmcyLCBhcmczLCAwLCAwKTsgfQotZXh0ZXJuIF9faW5saW5lX18gdm9pZCB4YzQoc21wZnVuY190IGZ1bmMsIHVuc2lnbmVkIGxvbmcgYXJnMSwgdW5zaWduZWQgbG9uZyBhcmcyLAorc3RhdGljIGlubGluZSB2b2lkIHhjNChzbXBmdW5jX3QgZnVuYywgdW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsCiAJCQkgICB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNCkKIHsgc21wX2Nyb3NzX2NhbGwoZnVuYywgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgMCk7IH0KLWV4dGVybiBfX2lubGluZV9fIHZvaWQgeGM1KHNtcGZ1bmNfdCBmdW5jLCB1bnNpZ25lZCBsb25nIGFyZzEsIHVuc2lnbmVkIGxvbmcgYXJnMiwKK3N0YXRpYyBpbmxpbmUgdm9pZCB4YzUoc21wZnVuY190IGZ1bmMsIHVuc2lnbmVkIGxvbmcgYXJnMSwgdW5zaWduZWQgbG9uZyBhcmcyLAogCQkJICAgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQsIHVuc2lnbmVkIGxvbmcgYXJnNSkKIHsgc21wX2Nyb3NzX2NhbGwoZnVuYywgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSk7IH0KIAotZXh0ZXJuIF9faW5saW5lX18gaW50IHNtcF9jYWxsX2Z1bmN0aW9uKHZvaWQgKCpmdW5jKSh2b2lkICppbmZvKSwgdm9pZCAqaW5mbywgaW50IG5vbmF0b21pYywgaW50IHdhaXQpCitzdGF0aWMgaW5saW5lIGludCBzbXBfY2FsbF9mdW5jdGlvbih2b2lkICgqZnVuYykodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sIGludCBub25hdG9taWMsIGludCB3YWl0KQogewogCXhjMSgoc21wZnVuY190KWZ1bmMsICh1bnNpZ25lZCBsb25nKWluZm8pOwogCXJldHVybiAwOwpAQCAtODQsMTYgKzg0LDE2IEBACiBleHRlcm4gX192b2xhdGlsZV9fIGludCBfX2NwdV9udW1iZXJfbWFwW05SX0NQVVNdOwogZXh0ZXJuIF9fdm9sYXRpbGVfXyBpbnQgX19jcHVfbG9naWNhbF9tYXBbTlJfQ1BVU107CiAKLWV4dGVybiBfX2lubGluZV9fIGludCBjcHVfbG9naWNhbF9tYXAoaW50IGNwdSkKK3N0YXRpYyBpbmxpbmUgaW50IGNwdV9sb2dpY2FsX21hcChpbnQgY3B1KQogewogCXJldHVybiBfX2NwdV9sb2dpY2FsX21hcFtjcHVdOwogfQotZXh0ZXJuIF9faW5saW5lX18gaW50IGNwdV9udW1iZXJfbWFwKGludCBjcHUpCitzdGF0aWMgaW5saW5lIGludCBjcHVfbnVtYmVyX21hcChpbnQgY3B1KQogewogCXJldHVybiBfX2NwdV9udW1iZXJfbWFwW2NwdV07CiB9CiAKLWV4dGVybiBfX2lubGluZV9fIGludCBoYXJkX3NtcDRtX3Byb2Nlc3Nvcl9pZCh2b2lkKQorc3RhdGljIGlubGluZSBpbnQgaGFyZF9zbXA0bV9wcm9jZXNzb3JfaWQodm9pZCkKIHsKIAlpbnQgY3B1aWQ7CiAKQEAgLTEwNCw3ICsxMDQsNyBAQAogCXJldHVybiBjcHVpZDsKIH0KIAotZXh0ZXJuIF9faW5saW5lX18gaW50IGhhcmRfc21wNGRfcHJvY2Vzc29yX2lkKHZvaWQpCitzdGF0aWMgaW5saW5lIGludCBoYXJkX3NtcDRkX3Byb2Nlc3Nvcl9pZCh2b2lkKQogewogCWludCBjcHVpZDsKIApAQCAtMTE0LDcgKzExNCw3IEBACiB9CiAKICNpZm5kZWYgTU9EVUxFCi1leHRlcm4gX19pbmxpbmVfXyBpbnQgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCitzdGF0aWMgaW5saW5lIGludCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKIHsKIAlpbnQgY3B1aWQ7CiAKQEAgLTEzNiw3ICsxMzYsNyBAQAogCXJldHVybiBjcHVpZDsKIH0KICNlbHNlCi1leHRlcm4gX19pbmxpbmVfXyBpbnQgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCitzdGF0aWMgaW5saW5lIGludCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKIHsKIAlpbnQgY3B1aWQ7CiAJCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zbXBwcmltLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zbXBwcmltLmgKaW5kZXggOWI5YzI4ZS4uZTdiNmQzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvc21wcHJpbS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3NtcHByaW0uaApAQCAtMTUsNyArMTUsNyBAQAogICogYXRvbWljLgogICovCiAKLWV4dGVybiBfX2lubGluZV9fIF9fdm9sYXRpbGVfXyBjaGFyIHRlc3RfYW5kX3NldCh2b2lkICphZGRyKQorc3RhdGljIGlubGluZSBfX3ZvbGF0aWxlX18gY2hhciB0ZXN0X2FuZF9zZXQodm9pZCAqYWRkcikKIHsKIAljaGFyIHN0YXRlID0gMDsKIApAQCAtMjcsNyArMjcsNyBAQAogfQogCiAvKiBJbml0aWFsaXplIGEgc3Bpbi1sb2NrLiAqLwotZXh0ZXJuIF9faW5saW5lX18gX192b2xhdGlsZV9fIHNtcF9pbml0bG9jayh2b2lkICpzcGlubG9jaykKK3N0YXRpYyBpbmxpbmUgX192b2xhdGlsZV9fIHNtcF9pbml0bG9jayh2b2lkICpzcGlubG9jaykKIHsKIAkvKiBVbnNldCB0aGUgbG9jay4gKi8KIAkqKCh1bnNpZ25lZCBjaGFyICopIHNwaW5sb2NrKSA9IDA7CkBAIC0zNiw3ICszNiw3IEBACiB9CiAKIC8qIFRoaXMgcm91dGluZSBzcGlucyB1bnRpbCBpdCBhY3F1aXJlcyB0aGUgbG9jayBhdCBBRERSLiAqLwotZXh0ZXJuIF9faW5saW5lX18gX192b2xhdGlsZV9fIHNtcF9sb2NrKHZvaWQgKmFkZHIpCitzdGF0aWMgaW5saW5lIF9fdm9sYXRpbGVfXyBzbXBfbG9jayh2b2lkICphZGRyKQogewogCXdoaWxlKHRlc3RfYW5kX3NldChhZGRyKSA9PSAweGZmKQogCQk7CkBAIC00Niw3ICs0Niw3IEBACiB9CiAKIC8qIFRoaXMgcm91dGluZSByZWxlYXNlcyB0aGUgbG9jayBhdCBBRERSLiAqLwotZXh0ZXJuIF9faW5saW5lX18gX192b2xhdGlsZV9fIHNtcF91bmxvY2sodm9pZCAqYWRkcikKK3N0YXRpYyBpbmxpbmUgX192b2xhdGlsZV9fIHNtcF91bmxvY2sodm9pZCAqYWRkcikKIHsKIAkqKCh1bnNpZ25lZCBjaGFyICopIGFkZHIpID0gMDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zcGlubG9jay5oCmluZGV4IDExMTcyN2EuLmUzNDRjOTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc3BpbmxvY2suaApAQCAtMTcsNyArMTcsNyBAQAogI2RlZmluZSBfX3Jhd19zcGluX3VubG9ja193YWl0KGxvY2spIFwKIAlkbyB7IHdoaWxlIChfX3Jhd19zcGluX2lzX2xvY2tlZChsb2NrKSkgY3B1X3JlbGF4KCk7IH0gd2hpbGUgKDApCiAKLWV4dGVybiBfX2lubGluZV9fIHZvaWQgX19yYXdfc3Bpbl9sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fbG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkiXG4xOlxuXHQiCkBAIC0zNyw3ICszNyw3IEBACiAJOiAiZzIiLCAibWVtb3J5IiwgImNjIik7CiB9CiAKLWV4dGVybiBfX2lubGluZV9fIGludCBfX3Jhd19zcGluX3RyeWxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgaW5saW5lIGludCBfX3Jhd19zcGluX3RyeWxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJdW5zaWduZWQgaW50IHJlc3VsdDsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGRzdHViIFslMV0sICUwIgpAQCAtNDcsNyArNDcsNyBAQAogCXJldHVybiAocmVzdWx0ID09IDApOwogfQogCi1leHRlcm4gX19pbmxpbmVfXyB2b2lkIF9fcmF3X3NwaW5fdW5sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fdW5sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQogewogCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGIgJSVnMCwgWyUwXSIgOiA6ICJyIiAobG9jaykgOiAibWVtb3J5Iik7CiB9CkBAIC03OCw3ICs3OCw3IEBACiAgKgogICogVW5mb3J0dW5hdGVseSB0aGlzIHNjaGVtZSBsaW1pdHMgdXMgdG8gfjE2LDAwMCwwMDAgY3B1cy4KICAqLwotZXh0ZXJuIF9faW5saW5lX18gdm9pZCBfX3JlYWRfbG9jayhyYXdfcndsb2NrX3QgKnJ3KQorc3RhdGljIGlubGluZSB2b2lkIF9fcmVhZF9sb2NrKHJhd19yd2xvY2tfdCAqcncpCiB7CiAJcmVnaXN0ZXIgcmF3X3J3bG9ja190ICpscCBhc20oImcxIik7CiAJbHAgPSBydzsKQEAgLTk4LDcgKzk4LDcgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IFwKIH0gd2hpbGUoMCkKIAotZXh0ZXJuIF9faW5saW5lX18gdm9pZCBfX3JlYWRfdW5sb2NrKHJhd19yd2xvY2tfdCAqcncpCitzdGF0aWMgaW5saW5lIHZvaWQgX19yZWFkX3VubG9jayhyYXdfcndsb2NrX3QgKnJ3KQogewogCXJlZ2lzdGVyIHJhd19yd2xvY2tfdCAqbHAgYXNtKCJnMSIpOwogCWxwID0gcnc7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3N5c3RlbS5oCmluZGV4IDM1NTc3ODEuLjFmNmI3MWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3N5c3RlbS5oCkBAIC0yMDQsNyArMjA0LDcgQEAKIEJURklYVVBERUZfQ0FMTCh2b2lkLCBfX194Y2hnMzIsIHZvaWQpCiAjZW5kaWYKIAotZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyB4Y2hnX3UzMihfX3ZvbGF0aWxlX18gdW5zaWduZWQgbG9uZyAqbSwgdW5zaWduZWQgbG9uZyB2YWwpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgeGNoZ191MzIoX192b2xhdGlsZV9fIHVuc2lnbmVkIGxvbmcgKm0sIHVuc2lnbmVkIGxvbmcgdmFsKQogewogI2lmZGVmIENPTkZJR19TTVAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3dhcCBbJTJdLCAlMCIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3RyYXBzLmggYi9pbmNsdWRlL2FzbS1zcGFyYy90cmFwcy5oCmluZGV4IDY2OTBhYjkuLmY2MmM3ZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3RyYXBzLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdHJhcHMuaApAQCAtMjIsNyArMjIsNyBAQAogLyogV2Ugc2V0IHRoaXMgdG8gX3N0YXJ0IGluIHN5c3RlbSBzZXR1cC4gKi8KIGV4dGVybiBzdHJ1Y3QgdHRfZW50cnkgKnNwYXJjX3R0YWJsZTsKIAotZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBnZXRfdGJyKHZvaWQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X3Ricih2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgdGJyOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvY2FjaGVmbHVzaC5oCmluZGV4IDUxYjI2ZTgxLi5iM2Y2MTY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2NhY2hlZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2NhY2hlZmx1c2guaApAQCAtNCwxMyArNCw2IEBACiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAotLyogRmx1c2hpbmcgZm9yIEQtY2FjaGUgYWxpYXMgaGFuZGxpbmcgaXMgb25seSBuZWVkZWQgaWYKLSAqIHRoZSBwYWdlIHNpemUgaXMgc21hbGxlciB0aGFuIDE2Sy4KLSAqLwotI2lmIFBBR0VfU0hJRlQgPCAxNAotI2RlZmluZSBEQ0FDSEVfQUxJQVNJTkdfUE9TU0lCTEUKLSNlbmRpZgotCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KQEAgLTczLDYgKzY2LDExIEBACiAjZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfY2FjaGVfdnVubWFwKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCiAKKyNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCisvKiBpbnRlcm5hbCBkZWJ1Z2dpbmcgZnVuY3Rpb24gKi8KK3ZvaWQga2VybmVsX21hcF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzLCBpbnQgZW5hYmxlKTsKKyNlbmRpZgorCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogCiAjZW5kaWYgLyogX1NQQVJDNjRfQ0FDSEVGTFVTSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2NwdWRhdGEuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvY3B1ZGF0YS5oCmluZGV4IDlhM2E4MWYuLjc0ZGU3OWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvY3B1ZGF0YS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvY3B1ZGF0YS5oCkBAIC0yMiw2ICsyMiwxNiBAQAogCXVuc2lnbmVkIGludAlfX3BhZDE7CiAJdW5zaWduZWQgbG9uZwkqcHRlX2NhY2hlWzJdOwogCXVuc2lnbmVkIGxvbmcJKnBnZF9jYWNoZTsKKworCS8qIERjYWNoZSBsaW5lIDMsIHJhcmVseSB1c2VkICovCisJdW5zaWduZWQgaW50CWRjYWNoZV9zaXplOworCXVuc2lnbmVkIGludAlkY2FjaGVfbGluZV9zaXplOworCXVuc2lnbmVkIGludAlpY2FjaGVfc2l6ZTsKKwl1bnNpZ25lZCBpbnQJaWNhY2hlX2xpbmVfc2l6ZTsKKwl1bnNpZ25lZCBpbnQJZWNhY2hlX3NpemU7CisJdW5zaWduZWQgaW50CWVjYWNoZV9saW5lX3NpemU7CisJdW5zaWduZWQgaW50CV9fcGFkMjsKKwl1bnNpZ25lZCBpbnQJX19wYWQzOwogfSBjcHVpbmZvX3NwYXJjOwogCiBERUNMQVJFX1BFUl9DUFUoY3B1aW5mb19zcGFyYywgX19jcHVfZGF0YSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2Z1dGV4LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2Z1dGV4LmgKaW5kZXggMmNhYzVlYy4uOWZlZmY0Y2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZnV0ZXguaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2Z1dGV4LmgKQEAgLTE0LDcgKzE0LDcgQEAKIAlpbnQgY21wID0gKGVuY29kZWRfb3AgPj4gMjQpICYgMTU7CiAJaW50IG9wYXJnID0gKGVuY29kZWRfb3AgPDwgOCkgPj4gMjA7CiAJaW50IGNtcGFyZyA9IChlbmNvZGVkX29wIDw8IDIwKSA+PiAyMDsKLQlpbnQgb2xkdmFsID0gMCwgcmV0LCB0ZW07CisJaW50IG9sZHZhbCA9IDAsIHJldDsKIAlpZiAoZW5jb2RlZF9vcCAmIChGVVRFWF9PUF9PUEFSR19TSElGVCA8PCAyOCkpCiAJCW9wYXJnID0gMSA8PCBvcGFyZzsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9oZWFkLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2hlYWQuaAppbmRleCBiNjNhMzNjLi4wYWJkM2E2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2hlYWQuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2hlYWQuaApAQCAtMTIsOSArMTIsMTIgQEAKICNkZWZpbmUgX19KQUxBUEVOT19JRAkweDAwM2UwMDE2CiAKICNkZWZpbmUgQ0hFRVRBSF9NQU5VRgkJMHgwMDNlCi0jZGVmaW5lIENIRUVUQUhfSU1QTAkJMHgwMDE0Ci0jZGVmaW5lIENIRUVUQUhfUExVU19JTVBMCTB4MDAxNQotI2RlZmluZSBKQUxBUEVOT19JTVBMCQkweDAwMTYKKyNkZWZpbmUgQ0hFRVRBSF9JTVBMCQkweDAwMTQgLyogVWx0cmEtSUlJICAgKi8KKyNkZWZpbmUgQ0hFRVRBSF9QTFVTX0lNUEwJMHgwMDE1IC8qIFVsdHJhLUlJSSsgICovCisjZGVmaW5lIEpBTEFQRU5PX0lNUEwJCTB4MDAxNiAvKiBVbHRyYS1JSUlpICAqLworI2RlZmluZSBKQUdVQVJfSU1QTAkJMHgwMDE4IC8qIFVsdHJhLUlWICAgICovCisjZGVmaW5lIFBBTlRIRVJfSU1QTAkJMHgwMDE5IC8qIFVsdHJhLUlWKyAgICovCisjZGVmaW5lIFNFUlJBTk9fSU1QTAkJMHgwMDIyIC8qIFVsdHJhLUlJSWkrICovCiAKICNkZWZpbmUgQlJBTkNIX0lGX0NIRUVUQUhfQkFTRSh0bXAxLHRtcDIsbGFiZWwpCVwKIAlyZHByCSV2ZXIsICV0bXAxOwkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaWRlLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2lkZS5oCmluZGV4IDRjMTA5ODQuLmMzOTNmODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaWRlLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9pZGUuaApAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zcGl0ZmlyZS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogI2lmbmRlZiBNQVhfSFdJRlMKICMgaWZkZWYgQ09ORklHX0JMS19ERVZfSURFUENJCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L29wZW5wcm9tLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L29wZW5wcm9tLmgKaW5kZXggMGEzMzY5MC4uYjQ5NTlkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9vcGVucHJvbS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvb3BlbnByb20uaApAQCAtMTg2LDggKzE4Niw4IEBACiB9OwogCiBzdHJ1Y3QgbGludXhfcHJvbTY0X3JlZ2lzdGVycyB7Ci0JbG9uZyBwaHlzX2FkZHI7Ci0JbG9uZyByZWdfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHBoeXNfYWRkcjsKKwl1bnNpZ25lZCBsb25nIHJlZ19zaXplOwogfTsKIAogc3RydWN0IGxpbnV4X3Byb21faXJxcyB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L29wbGliLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L29wbGliLmgKaW5kZXggYTQzMmQ5ZS4uZDAyZjFlOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9vcGxpYi5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvb3BsaWIuaApAQCAtMzgsNiArMzgsMjAgQEAKICAqLwogZXh0ZXJuIGludCBwcm9tX2Nob3Nlbl9ub2RlOwogCisvKiBIZWxwZXIgdmFsdWVzIGFuZCBzdHJpbmdzIGluIGFyY2gvc3BhcmM2NC9rZXJuZWwvaGVhZC5TICovCitleHRlcm4gY29uc3QgY2hhciBwcm9tX2ZpbmRkZXZfbmFtZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgcHJvbV9jaG9zZW5fcGF0aFtdOworZXh0ZXJuIGNvbnN0IGNoYXIgcHJvbV9nZXRwcm9wX25hbWVbXTsKK2V4dGVybiBjb25zdCBjaGFyIHByb21fbW11X25hbWVbXTsKK2V4dGVybiBjb25zdCBjaGFyIHByb21fY2FsbG1ldGhvZF9uYW1lW107CitleHRlcm4gY29uc3QgY2hhciBwcm9tX3RyYW5zbGF0ZV9uYW1lW107CitleHRlcm4gY29uc3QgY2hhciBwcm9tX21hcF9uYW1lW107CitleHRlcm4gY29uc3QgY2hhciBwcm9tX3VubWFwX25hbWVbXTsKK2V4dGVybiBpbnQgcHJvbV9tbXVfaWhhbmRsZV9jYWNoZTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgcHJvbV9ib290X21hcHBlZF9wYzsKK2V4dGVybiB1bnNpZ25lZCBpbnQgcHJvbV9ib290X21hcHBpbmdfbW9kZTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHByb21fYm9vdF9tYXBwaW5nX3BoeXNfaGlnaCwgcHJvbV9ib290X21hcHBpbmdfcGh5c19sb3c7CisKIHN0cnVjdCBsaW51eF9tbGlzdF9wMTI3NSB7CiAJc3RydWN0IGxpbnV4X21saXN0X3AxMjc1ICp0aGVyZXNfbW9yZTsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X2FkcjsKQEAgLTY4LDcgKzgyLDcgQEAKICAqIG9mIHRoZSBzdHJpbmcgaXMgZGlmZmVyZW50IG9uIFYwIHZzLiBWMi0+aGlnaGVyIHByb21zLiAgVGhlIGNhbGxlciBtdXN0CiAgKiBrbm93IHdoYXQgaGUvc2hlIGlzIGRvaW5nISAgUmV0dXJucyB0aGUgZGV2aWNlIGRlc2NyaXB0b3IsIGFuIGludC4KICAqLwotZXh0ZXJuIGludCBwcm9tX2Rldm9wZW4oY2hhciAqZGV2aWNlX3N0cmluZyk7CitleHRlcm4gaW50IHByb21fZGV2b3Blbihjb25zdCBjaGFyICpkZXZpY2Vfc3RyaW5nKTsKIAogLyogQ2xvc2UgYSBwcmV2aW91c2x5IG9wZW5lZCBkZXZpY2UgZGVzY3JpYmVkIGJ5IHRoZSBwYXNzZWQgaW50ZWdlcgogICogZGVzY3JpcHRvci4KQEAgLTgxLDI3ICs5NSwxMyBAQAogZXh0ZXJuIHZvaWQgcHJvbV9zZWVrKGludCBkZXZpY2VfaGFuZGxlLCB1bnNpZ25lZCBpbnQgc2Vla19oaXZhbCwKIAkJICAgICAgdW5zaWduZWQgaW50IHNlZWtfbG93dmFsKTsKIAotLyogTWFjaGluZSBtZW1vcnkgY29uZmlndXJhdGlvbiByb3V0aW5lLiAqLwotCi0vKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBWMCBmb3JtYXQgbWVtb3J5IGRlc2NyaXB0b3IgdGFibGUsIGl0IGhhcyB0aHJlZQotICogZW50cmllcy4gIE9uZSBmb3IgdGhlIHRvdGFsIGFtb3VudCBvZiBwaHlzaWNhbCByYW0gb24gdGhlIG1hY2hpbmUsIG9uZQotICogZm9yIHRoZSBhbW91bnQgb2YgcGh5c2ljYWwgcmFtIGF2YWlsYWJsZSwgYW5kIG9uZSBkZXNjcmliaW5nIHRoZSB2aXJ0dWFsCi0gKiBhcmVhcyB3aGljaCBhcmUgYWxsb2NhdGVkIGJ5IHRoZSBwcm9tLiAgU28sIGluIGEgc2Vuc2UgdGhlIHBoeXNpY2FsCi0gKiBhdmFpbGFibGUgaXMgYSBjYWxjdWxhdGlvbiBvZiB0aGUgdG90YWwgcGh5c2ljYWwgbWludXMgdGhlIHBoeXNpY2FsIG1hcHBlZAotICogYnkgdGhlIHByb20gd2l0aCB2aXJ0dWFsIG1hcHBpbmdzLgotICoKLSAqIFRoZXNlIGxpc3RzIGFyZSByZXR1cm5lZCBwcmUtc29ydGVkLCB0aGlzIHNob3VsZCBtYWtlIHlvdXIgbGlmZSBlYXNpZXIKLSAqIHNpbmNlIHRoZSBwcm9tIGl0c2VsZiBpcyB3YXkgdG9vIGxhenkgdG8gZG8gc3VjaCBuaWNlIHRoaW5ncy4KLSAqLwotZXh0ZXJuIHN0cnVjdCBsaW51eF9tZW1fcDEyNzUgKnByb21fbWVtaW5mbyh2b2lkKTsKLQogLyogTWlzY2VsbGFuZW91cyByb3V0aW5lcywgZG9uJ3QgcmVhbGx5IGZpdCBpbiBhbnkgY2F0ZWdvcnkgcGVyIHNlLiAqLwogCiAvKiBSZWJvb3QgdGhlIG1hY2hpbmUgd2l0aCB0aGUgY29tbWFuZCBsaW5lIHBhc3NlZC4gKi8KLWV4dGVybiB2b2lkIHByb21fcmVib290KGNoYXIgKmJvb3RfY29tbWFuZCk7CitleHRlcm4gdm9pZCBwcm9tX3JlYm9vdChjb25zdCBjaGFyICpib290X2NvbW1hbmQpOwogCiAvKiBFdmFsdWF0ZSB0aGUgZm9ydGggc3RyaW5nIHBhc3NlZC4gKi8KLWV4dGVybiB2b2lkIHByb21fZmV2YWwoY2hhciAqZm9ydGhfc3RyaW5nKTsKK2V4dGVybiB2b2lkIHByb21fZmV2YWwoY29uc3QgY2hhciAqZm9ydGhfc3RyaW5nKTsKIAogLyogRW50ZXIgdGhlIHByb20sIHdpdGggcG9zc2liaWxpdHkgb2YgY29udGludWF0aW9uIHdpdGggdGhlICdnbycKICAqIGNvbW1hbmQgaW4gbmV3ZXIgcHJvbXMuCkBAIC0xNTQsNyArMTU0LDcgQEAKIGV4dGVybiB2b2lkIHByb21fcHV0Y2hhcihjaGFyIGNoYXJhY3Rlcik7CiAKIC8qIFByb20ncyBpbnRlcm5hbCByb3V0aW5lcywgZG9uJ3QgdXNlIGluIGtlcm5lbC9ib290IGNvZGUuICovCi1leHRlcm4gdm9pZCBwcm9tX3ByaW50ZihjaGFyICpmbXQsIC4uLik7CitleHRlcm4gdm9pZCBwcm9tX3ByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLik7CiBleHRlcm4gdm9pZCBwcm9tX3dyaXRlKGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbik7CiAKIC8qIFF1ZXJ5IGZvciBpbnB1dCBkZXZpY2UgdHlwZSAqLwpAQCAtMjE1LDcgKzIxNSw3IEBACiAJCQkgICBjaGFyICpidWYsIGludCBidWZsZW4pOwogCiAvKiBSZXRhaW4gcGh5c2ljYWwgbWVtb3J5IHRvIHRoZSBjYWxsZXIgYWNyb3NzIHNvZnQgcmVzZXRzLiAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJvbV9yZXRhaW4oY2hhciAqbmFtZSwKK2V4dGVybiB1bnNpZ25lZCBsb25nIHByb21fcmV0YWluKGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJIHVuc2lnbmVkIGxvbmcgcGFfbG93LCB1bnNpZ25lZCBsb25nIHBhX2hpZ2gsCiAJCQkJIGxvbmcgc2l6ZSwgbG9uZyBhbGlnbik7CiAKQEAgLTI2OSwyOCArMjY5LDI4IEBACiAvKiBHZXQgdGhlIGxlbmd0aCwgYXQgdGhlIHBhc3NlZCBub2RlLCBvZiB0aGUgZ2l2ZW4gcHJvcGVydHkgdHlwZS4KICAqIFJldHVybnMgLTEgb24gZXJyb3IgKGllLiBubyBzdWNoIHByb3BlcnR5IGF0IHRoaXMgbm9kZSkuCiAgKi8KLWV4dGVybiBpbnQgcHJvbV9nZXRwcm9wbGVuKGludCB0aGlzbm9kZSwgY2hhciAqcHJvcGVydHkpOworZXh0ZXJuIGludCBwcm9tX2dldHByb3BsZW4oaW50IHRoaXNub2RlLCBjb25zdCBjaGFyICpwcm9wZXJ0eSk7CiAKIC8qIEZldGNoIHRoZSByZXF1ZXN0ZWQgcHJvcGVydHkgdXNpbmcgdGhlIGdpdmVuIGJ1ZmZlci4gIFJldHVybnMKICAqIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhlIHByb20gcHV0IGludG8geW91ciBidWZmZXIgb3IgLTEgb24gZXJyb3IuCiAgKi8KLWV4dGVybiBpbnQgcHJvbV9nZXRwcm9wZXJ0eShpbnQgdGhpc25vZGUsIGNoYXIgKnByb3BlcnR5LAorZXh0ZXJuIGludCBwcm9tX2dldHByb3BlcnR5KGludCB0aGlzbm9kZSwgY29uc3QgY2hhciAqcHJvcGVydHksCiAJCQkgICAgY2hhciAqcHJvcF9idWZmZXIsIGludCBwcm9wYnVmX3NpemUpOwogCiAvKiBBY3F1aXJlIGFuIGludGVnZXIgcHJvcGVydHkuICovCi1leHRlcm4gaW50IHByb21fZ2V0aW50KGludCBub2RlLCBjaGFyICpwcm9wZXJ0eSk7CitleHRlcm4gaW50IHByb21fZ2V0aW50KGludCBub2RlLCBjb25zdCBjaGFyICpwcm9wZXJ0eSk7CiAKIC8qIEFjcXVpcmUgYW4gaW50ZWdlciBwcm9wZXJ0eSwgd2l0aCBhIGRlZmF1bHQgdmFsdWUuICovCi1leHRlcm4gaW50IHByb21fZ2V0aW50ZGVmYXVsdChpbnQgbm9kZSwgY2hhciAqcHJvcGVydHksIGludCBkZWZ2YWwpOworZXh0ZXJuIGludCBwcm9tX2dldGludGRlZmF1bHQoaW50IG5vZGUsIGNvbnN0IGNoYXIgKnByb3BlcnR5LCBpbnQgZGVmdmFsKTsKIAogLyogQWNxdWlyZSBhIGJvb2xlYW4gcHJvcGVydHksIDA9RkFMU0UgMT1UUlVFLiAqLwotZXh0ZXJuIGludCBwcm9tX2dldGJvb2woaW50IG5vZGUsIGNoYXIgKnByb3ApOworZXh0ZXJuIGludCBwcm9tX2dldGJvb2woaW50IG5vZGUsIGNvbnN0IGNoYXIgKnByb3ApOwogCiAvKiBBY3F1aXJlIGEgc3RyaW5nIHByb3BlcnR5LCBudWxsIHN0cmluZyBvbiBlcnJvci4gKi8KLWV4dGVybiB2b2lkIHByb21fZ2V0c3RyaW5nKGludCBub2RlLCBjaGFyICpwcm9wLCBjaGFyICpidWYsIGludCBidWZzaXplKTsKK2V4dGVybiB2b2lkIHByb21fZ2V0c3RyaW5nKGludCBub2RlLCBjb25zdCBjaGFyICpwcm9wLCBjaGFyICpidWYsIGludCBidWZzaXplKTsKIAogLyogRG9lcyB0aGUgcGFzc2VkIG5vZGUgaGF2ZSB0aGUgZ2l2ZW4gIm5hbWUiPyBZRVM9MSBOTz0wICovCi1leHRlcm4gaW50IHByb21fbm9kZW1hdGNoKGludCB0aGlzbm9kZSwgY2hhciAqbmFtZSk7CitleHRlcm4gaW50IHByb21fbm9kZW1hdGNoKGludCB0aGlzbm9kZSwgY29uc3QgY2hhciAqbmFtZSk7CiAKIC8qIFB1dHMgaW4gYnVmZmVyIGEgcHJvbSBuYW1lIGluIHRoZSBmb3JtIG5hbWVAeCx5IG9yIG5hbWUgKHggZm9yIHdoaWNoX2lvIAogICogYW5kIHkgZm9yIGZpcnN0IHJlZ3MgcGh5cyBhZGRyZXNzCkBAIC0zMDAsNyArMzAwLDcgQEAKIC8qIFNlYXJjaCBhbGwgc2libGluZ3Mgc3RhcnRpbmcgYXQgdGhlIHBhc3NlZCBub2RlIGZvciAibmFtZSIgbWF0Y2hpbmcKICAqIHRoZSBnaXZlbiBzdHJpbmcuICBSZXR1cm5zIHRoZSBub2RlIG9uIHN1Y2Nlc3MsIHplcm8gb24gZmFpbHVyZS4KICAqLwotZXh0ZXJuIGludCBwcm9tX3NlYXJjaHNpYmxpbmdzKGludCBub2RlX3N0YXJ0LCBjaGFyICpuYW1lKTsKK2V4dGVybiBpbnQgcHJvbV9zZWFyY2hzaWJsaW5ncyhpbnQgbm9kZV9zdGFydCwgY29uc3QgY2hhciAqbmFtZSk7CiAKIC8qIFJldHVybiB0aGUgZmlyc3QgcHJvcGVydHkgdHlwZSwgYXMgYSBzdHJpbmcsIGZvciB0aGUgZ2l2ZW4gbm9kZS4KICAqIFJldHVybnMgYSBudWxsIHN0cmluZyBvbiBlcnJvci4gQnVmZmVyIHNob3VsZCBiZSBhdCBsZWFzdCAzMkIgbG9uZy4KQEAgLTMxMCwyMSArMzEwLDIxIEBACiAvKiBSZXR1cm5zIHRoZSBuZXh0IHByb3BlcnR5IGFmdGVyIHRoZSBwYXNzZWQgcHJvcGVydHkgZm9yIHRoZSBnaXZlbgogICogbm9kZS4gIFJldHVybnMgbnVsbCBzdHJpbmcgb24gZmFpbHVyZS4gQnVmZmVyIHNob3VsZCBiZSBhdCBsZWFzdCAzMkIgbG9uZy4KICAqLwotZXh0ZXJuIGNoYXIgKnByb21fbmV4dHByb3AoaW50IG5vZGUsIGNoYXIgKnByZXZfcHJvcGVydHksIGNoYXIgKmJ1ZmZlcik7CitleHRlcm4gY2hhciAqcHJvbV9uZXh0cHJvcChpbnQgbm9kZSwgY29uc3QgY2hhciAqcHJldl9wcm9wZXJ0eSwgY2hhciAqYnVmZmVyKTsKIAogLyogUmV0dXJucyAxIGlmIHRoZSBzcGVjaWZpZWQgbm9kZSBoYXMgZ2l2ZW4gcHJvcGVydHkuICovCi1leHRlcm4gaW50IHByb21fbm9kZV9oYXNfcHJvcGVydHkoaW50IG5vZGUsIGNoYXIgKnByb3BlcnR5KTsKK2V4dGVybiBpbnQgcHJvbV9ub2RlX2hhc19wcm9wZXJ0eShpbnQgbm9kZSwgY29uc3QgY2hhciAqcHJvcGVydHkpOwogCiAvKiBSZXR1cm5zIHBoYW5kbGUgb2YgdGhlIHBhdGggc3BlY2lmaWVkICovCi1leHRlcm4gaW50IHByb21fZmluZGRldmljZShjaGFyICpuYW1lKTsKK2V4dGVybiBpbnQgcHJvbV9maW5kZGV2aWNlKGNvbnN0IGNoYXIgKm5hbWUpOwogCiAvKiBTZXQgdGhlIGluZGljYXRlZCBwcm9wZXJ0eSBhdCB0aGUgZ2l2ZW4gbm9kZSB3aXRoIHRoZSBwYXNzZWQgdmFsdWUuCiAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgeW91ciB2YWx1ZSB0aGF0IHRoZSBwcm9tIHRvb2suCiAgKi8KLWV4dGVybiBpbnQgcHJvbV9zZXRwcm9wKGludCBub2RlLCBjaGFyICpwcm9wX25hbWUsIGNoYXIgKnByb3BfdmFsdWUsCitleHRlcm4gaW50IHByb21fc2V0cHJvcChpbnQgbm9kZSwgY29uc3QgY2hhciAqcHJvcF9uYW1lLCBjaGFyICpwcm9wX3ZhbHVlLAogCQkJaW50IHZhbHVlX3NpemUpOwogCQkJCi1leHRlcm4gaW50IHByb21fcGF0aHRvaW5vZGUoY2hhciAqcGF0aCk7CitleHRlcm4gaW50IHByb21fcGF0aHRvaW5vZGUoY29uc3QgY2hhciAqcGF0aCk7CiBleHRlcm4gaW50IHByb21faW5zdDJwa2coaW50KTsKIAogLyogQ1BVIHByb2JpbmcgaGVscGVycy4gICovCkBAIC0zMzQsNyArMzM0LDcgQEAKIC8qIENsaWVudCBpbnRlcmZhY2UgbGV2ZWwgcm91dGluZXMuICovCiBleHRlcm4gdm9pZCBwcm9tX3NldF90cmFwX3RhYmxlKHVuc2lnbmVkIGxvbmcgdGJhKTsKIAotZXh0ZXJuIGxvbmcgcDEyNzVfY21kIChjaGFyICosIGxvbmcsIC4uLik7CitleHRlcm4gbG9uZyBwMTI3NV9jbWQoY29uc3QgY2hhciAqLCBsb25nLCAuLi4pOwogCQkJCSAgIAogCiAjaWYgMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wYWdlLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BhZ2UuaAppbmRleCBjOWY4ZWYyLi41NDI2YmIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BhZ2UuaApAQCAtMjEsNiArMjEsMTMgQEAKICNkZWZpbmUgUEFHRV9TSVpFICAgIChfQUMoMSxVTCkgPDwgUEFHRV9TSElGVCkKICNkZWZpbmUgUEFHRV9NQVNLICAgICh+KFBBR0VfU0laRS0xKSkKIAorLyogRmx1c2hpbmcgZm9yIEQtY2FjaGUgYWxpYXMgaGFuZGxpbmcgaXMgb25seSBuZWVkZWQgaWYKKyAqIHRoZSBwYWdlIHNpemUgaXMgc21hbGxlciB0aGFuIDE2Sy4KKyAqLworI2lmIFBBR0VfU0hJRlQgPCAxNAorI2RlZmluZSBEQ0FDSEVfQUxJQVNJTkdfUE9TU0lCTEUKKyNlbmRpZgorCiAjaWZkZWYgX19LRVJORUxfXwogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpAQCAtMTMzLDIzICsxNDAsNiBAQAogI2RlZmluZSB2aXJ0X3RvX3BoeXMgX19wYQogI2RlZmluZSBwaHlzX3RvX3ZpcnQgX192YQogCi0vKiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpcyB1c2VkIHRvIGhvbGQgdGhlIHBoeXNpY2FsCi0gKiBtZW1vcnkgY29uZmlndXJhdGlvbiBvZiB0aGUgbWFjaGluZS4gIFRoaXMgaXMgZmlsbGVkIGluCi0gKiBwcm9iZV9tZW1vcnkoKSBhbmQgaXMgbGF0ZXIgdXNlZCBieSBtZW1faW5pdCgpIHRvIHNldCB1cAotICogbWVtX21hcFtdLiAgV2Ugc3RhdGljYWxseSBhbGxvY2F0ZSBTUEFSQ19QSFlTX0JBTktTIG9mCi0gKiB0aGVzZSBzdHJ1Y3RzLCB0aGlzIGlzIGFyYml0cmFyeS4gIFRoZSBlbnRyeSBhZnRlciB0aGUKLSAqIGxhc3QgdmFsaWQgb25lIGhhcyBudW1fYnl0ZXM9PTAuCi0gKi8KLQotc3RydWN0IHNwYXJjX3BoeXNfYmFua3MgewotCXVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyOwotCXVuc2lnbmVkIGxvbmcgbnVtX2J5dGVzOwotfTsKLQotI2RlZmluZSBTUEFSQ19QSFlTX0JBTktTIDMyCi0KLWV4dGVybiBzdHJ1Y3Qgc3BhcmNfcGh5c19iYW5rcyBzcF9iYW5rc1tTUEFSQ19QSFlTX0JBTktTXTsKLQogI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLwogCiAjZGVmaW5lIFZNX0RBVEFfREVGQVVMVF9GTEFHUwkoVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQyB8IFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGJtLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BibS5oCmluZGV4IDM4YmJiY2MuLmRkMzVhMmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGJtLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wYm0uaApAQCAtMjcsMjMgKzI3LDI3IEBACiAgKiBQQ0kgYnVzLgogICovCiAKLSNkZWZpbmUgUEJNX0xPR0NMVVNURVJTIDMKLSNkZWZpbmUgUEJNX05DTFVTVEVSUyAoMSA8PCBQQk1fTE9HQ0xVU1RFUlMpCi0KIHN0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvOwogCiAvKiBUaGlzIGNvbnRhaW5zIHRoZSBzb2Z0d2FyZSBzdGF0ZSBuZWNlc3NhcnkgdG8gZHJpdmUgYSBQQ0kKICAqIGNvbnRyb2xsZXIncyBJT01NVS4KICAqLworc3RydWN0IHBjaV9pb21tdV9hcmVuYSB7CisJdW5zaWduZWQgbG9uZwkqbWFwOworCXVuc2lnbmVkIGludAloaW50OworCXVuc2lnbmVkIGludAlsaW1pdDsKK307CisKIHN0cnVjdCBwY2lfaW9tbXUgewogCS8qIFRoaXMgcHJvdGVjdHMgdGhlIGNvbnRyb2xsZXIncyBJT01NVSBhbmQgYWxsCiAJICogc3RyZWFtaW5nIGJ1ZmZlcnMgdW5kZXJuZWF0aC4KIAkgKi8KIAlzcGlubG9ja190CWxvY2s7CiAKKwlzdHJ1Y3QgcGNpX2lvbW11X2FyZW5hIGFyZW5hOworCiAJLyogSU9NTVUgcGFnZSB0YWJsZSwgYSBsaW5lYXIgYXJyYXkgb2YgaW9wdGVzLiAqLwogCWlvcHRlX3QJCSpwYWdlX3RhYmxlOwkJLyogVGhlIHBhZ2UgdGFibGUgaXRzZWxmLiAqLwotCWludAkJcGFnZV90YWJsZV9zel9iaXRzOwkvKiBsb2cyIG9mIG93IG1hbnkgcGFnZXMgZG9lcyBpdCBtYXA/ICovCiAKIAkvKiBCYXNlIFBDSSBtZW1vcnkgc3BhY2UgYWRkcmVzcyB3aGVyZSBJT01NVSBtYXBwaW5ncwogCSAqIGJlZ2luLgpAQCAtNjIsMTIgKzY2LDYgQEAKIAkgKi8KIAl1bnNpZ25lZCBsb25nCXdyaXRlX2NvbXBsZXRlX3JlZzsKIAotCS8qIFRoZSBsb3dlc3QgdXNlZCBjb25zaXN0ZW50IG1hcHBpbmcgZW50cnkuICBTaW5jZQotCSAqIHdlIGFsbG9jYXRlIGNvbnNpc3RlbnQgbWFwcyBvdXQgb2YgY2x1c3RlciAwIHRoaXMKLQkgKiBpcyByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nIG9mIGNsb3N0ZXIgMC4KLQkgKi8KLQl1MzIJCWxvd2VzdF9jb25zaXN0ZW50X21hcDsKLQogCS8qIEluIG9yZGVyIHRvIGRlYWwgd2l0aCBzb21lIGJ1Z2d5IHRoaXJkLXBhcnR5IFBDSSBicmlkZ2VzIHRoYXQKIAkgKiBkbyB3cm9uZyBwcmVmZXRjaGluZywgd2UgbmV2ZXIgbWFyayB2YWxpZCBtYXBwaW5ncyBhcyBpbnZhbGlkLgogCSAqIEluc3RlYWQgd2UgcG9pbnQgdGhlbSBhdCB0aGlzIGR1bW15IHBhZ2UuCkBAIC03NSwxNiArNzMsNiBAQAogCXVuc2lnbmVkIGxvbmcJZHVtbXlfcGFnZTsKIAl1bnNpZ25lZCBsb25nCWR1bW15X3BhZ2VfcGE7CiAKLQkvKiBJZiBQQk1fTkNMVVNURVJTIGlzIGV2ZXIgZGVjcmVhc2VkIHRvIDQgb3IgbG93ZXIsCi0JICogb3IgaWYgbGFyZ2VzdCBzdXBwb3J0ZWQgcGFnZV90YWJsZV9zeiAqIDhLIGdvZXMgYWJvdmUKLQkgKiAyR0IsIHlvdSBtdXN0IGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSB0eXBlIG9mCi0JICogdGhlc2UgY291bnRlcnMuICBZb3UgaGF2ZSBiZWVuIGR1bHkgd2FybmVkLiAtRGF2ZU0KLQkgKi8KLQlzdHJ1Y3QgewotCQl1MTYJbmV4dDsKLQkJdTE2CWZsdXNoOwotCX0gYWxsb2NfaW5mb1tQQk1fTkNMVVNURVJTXTsKLQogCS8qIENUWCBhbGxvY2F0aW9uLiAqLwogCXVuc2lnbmVkIGxvbmcgY3R4X2xvd2VzdF9mcmVlOwogCXVuc2lnbmVkIGxvbmcgY3R4X2JpdG1hcFtJT01NVV9OVU1fQ1RYUyAvIChzaXplb2YodW5zaWduZWQgbG9uZykgKiA4KV07CkBAIC0xMDIsNyArOTAsNyBAQAogCXUzMiBkbWFfYWRkcl9tYXNrOwogfTsKIAotZXh0ZXJuIHZvaWQgcGNpX2lvbW11X3RhYmxlX2luaXQoc3RydWN0IHBjaV9pb21tdSAqLCBpbnQpOworZXh0ZXJuIHZvaWQgcGNpX2lvbW11X3RhYmxlX2luaXQoc3RydWN0IHBjaV9pb21tdSAqaW9tbXUsIGludCB0c2JzaXplLCB1MzIgZG1hX29mZnNldCwgdTMyIGRtYV9hZGRyX21hc2spOwogCiAvKiBUaGlzIGRlc2NyaWJlcyBhIFBDSSBidXMgbW9kdWxlJ3Mgc3RyZWFtaW5nIGJ1ZmZlci4gKi8KIHN0cnVjdCBwY2lfc3RyYnVmIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ2FsbG9jLmgKaW5kZXggYjliMTkxNC4uYTk2MDY3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ2FsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ2FsbG9jLmgKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlIDxhc20vc3BpdGZpcmUuaD4KICNpbmNsdWRlIDxhc20vY3B1ZGF0YS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogLyogUGFnZSB0YWJsZSBhbGxvY2F0aW9uL2ZyZWVpbmcuICovCiAjaWZkZWYgQ09ORklHX1NNUApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BndGFibGUuaAppbmRleCBhMmI0ZjVlLi44YzZkZmM2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ3RhYmxlLmgKQEAgLTI0LDIxICsyNCwyMyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vY29uc3QuaD4KIAotLyogVGhlIGtlcm5lbCBpbWFnZSBvY2N1cGllcyAweDQwMDAwMDAgdG8gMHgxMDAwMDAwICg0TUIgLS0+IDE2TUIpLgotICogVGhlIHBhZ2UgY29weSBibG9ja29wcyB1c2UgMHgxMDAwMDAwIHRvIDB4MTgwMDAwMDAgKDE2TUIgLS0+IDI0TUIpLgorLyogVGhlIGtlcm5lbCBpbWFnZSBvY2N1cGllcyAweDQwMDAwMDAgdG8gMHgxMDAwMDAwICg0TUIgLS0+IDMyTUIpLgorICogVGhlIHBhZ2UgY29weSBibG9ja29wcyBjYW4gdXNlIDB4MjAwMDAwMCB0byAweDEwMDAwMDAwLgogICogVGhlIFBST00gcmVzaWRlcyBpbiBhbiBhcmVhIHNwYW5uaW5nIDB4ZjAwMDAwMDAgdG8gMHgxMDAwMDAwMDAuCi0gKiBUaGUgdm1hbGxvYyBhcmVhIHNwYW5zIDB4MTQwMDAwMDAwIHRvIDB4MjAwMDAwMDAwLgorICogVGhlIHZtYWxsb2MgYXJlYSBzcGFucyAweDEwMDAwMDAwMCB0byAweDIwMDAwMDAwMC4KKyAqIFNpbmNlIG1vZHVsZXMgbmVlZCB0byBiZSBpbiB0aGUgbG93ZXN0IDMyLWJpdHMgb2YgdGhlIGFkZHJlc3Mgc3BhY2UsCisgKiB3ZSBwbGFjZSB0aGVtIHJpZ2h0IGJlZm9yZSB0aGUgT0JQIGFyZWEgZnJvbSAweDEwMDAwMDAwIHRvIDB4ZjAwMDAwMDAuCiAgKiBUaGVyZSBpcyBhIHNpbmdsZSBzdGF0aWMga2VybmVsIFBNRCB3aGljaCBtYXBzIGZyb20gMHgwIHRvIGFkZHJlc3MKICAqIDB4NDAwMDAwMDAwLgogICovCi0jZGVmaW5lCVRMQlRFTVBfQkFTRQkJX0FDKDB4MDAwMDAwMDAwMTAwMDAwMCxVTCkKLSNkZWZpbmUgTU9EVUxFU19WQUREUgkJX0FDKDB4MDAwMDAwMDAwMjAwMDAwMCxVTCkKLSNkZWZpbmUgTU9EVUxFU19MRU4JCV9BQygweDAwMDAwMDAwN2UwMDAwMDAsVUwpCi0jZGVmaW5lIE1PRFVMRVNfRU5ECQlfQUMoMHgwMDAwMDAwMDgwMDAwMDAwLFVMKQotI2RlZmluZSBWTUFMTE9DX1NUQVJUCQlfQUMoMHgwMDAwMDAwMTQwMDAwMDAwLFVMKQotI2RlZmluZSBWTUFMTE9DX0VORAkJX0FDKDB4MDAwMDAwMDIwMDAwMDAwMCxVTCkKKyNkZWZpbmUJVExCVEVNUF9CQVNFCQlfQUMoMHgwMDAwMDAwMDAyMDAwMDAwLFVMKQorI2RlZmluZSBNT0RVTEVTX1ZBRERSCQlfQUMoMHgwMDAwMDAwMDEwMDAwMDAwLFVMKQorI2RlZmluZSBNT0RVTEVTX0xFTgkJX0FDKDB4MDAwMDAwMDBlMDAwMDAwMCxVTCkKKyNkZWZpbmUgTU9EVUxFU19FTkQJCV9BQygweDAwMDAwMDAwZjAwMDAwMDAsVUwpCiAjZGVmaW5lIExPV19PQlBfQUREUkVTUwkJX0FDKDB4MDAwMDAwMDBmMDAwMDAwMCxVTCkKICNkZWZpbmUgSElfT0JQX0FERFJFU1MJCV9BQygweDAwMDAwMDAxMDAwMDAwMDAsVUwpCisjZGVmaW5lIFZNQUxMT0NfU1RBUlQJCV9BQygweDAwMDAwMDAxMDAwMDAwMDAsVUwpCisjZGVmaW5lIFZNQUxMT0NfRU5ECQlfQUMoMHgwMDAwMDAwMjAwMDAwMDAwLFVMKQogCiAvKiBYWFggQWxsIG9mIHRoaXMgbmVlZHMgdG8gYmUgcmV0aG91Z2h0IHNvIHdlIGNhbiB0YWtlIGFkdmFudGFnZQogICogWFhYIGNoZWV0YWgncyBmdWxsIDY0LWJpdCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UsIGllLiBubyBtb3JlIGhvbGUKQEAgLTU4LDEzICs2MCwxMyBAQAogICogdGFibGUgY2FuIG1hcAogICovCiAjZGVmaW5lIFBNRF9TSElGVAkoUEFHRV9TSElGVCArIChQQUdFX1NISUZULTMpKQotI2RlZmluZSBQTURfU0laRQkoMVVMIDw8IFBNRF9TSElGVCkKKyNkZWZpbmUgUE1EX1NJWkUJKF9BQygxLFVMKSA8PCBQTURfU0hJRlQpCiAjZGVmaW5lIFBNRF9NQVNLCSh+KFBNRF9TSVpFLTEpKQogI2RlZmluZSBQTURfQklUUwkoUEFHRV9TSElGVCAtIDIpCiAKIC8qIFBHRElSX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLwogI2RlZmluZSBQR0RJUl9TSElGVAkoUEFHRV9TSElGVCArIChQQUdFX1NISUZULTMpICsgUE1EX0JJVFMpCi0jZGVmaW5lIFBHRElSX1NJWkUJKDFVTCA8PCBQR0RJUl9TSElGVCkKKyNkZWZpbmUgUEdESVJfU0laRQkoX0FDKDEsVUwpIDw8IFBHRElSX1NISUZUKQogI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUtMSkpCiAjZGVmaW5lIFBHRElSX0JJVFMJKFBBR0VfU0hJRlQgLSAyKQogCkBAIC05Niw3ICs5OCw5IEBACiAjZGVmaW5lIF9QQUdFX05GTwlfQUMoMHgxMDAwMDAwMDAwMDAwMDAwLFVMKSAvKiBObyBGYXVsdCBPbmx5ICAgICAgICAgICovCiAjZGVmaW5lIF9QQUdFX0lFCV9BQygweDA4MDAwMDAwMDAwMDAwMDAsVUwpIC8qIEludmVydCBFbmRpYW5uZXNzICAgICAgKi8KICNkZWZpbmUgX1BBR0VfU09GVDIJX0FDKDB4MDdGQzAwMDAwMDAwMDAwMCxVTCkgLyogU29mdHdhcmUgYml0cywgc2V0IDIgICAqLwotI2RlZmluZSBfUEFHRV9SRVMxCV9BQygweDAwMDMwMDAwMDAwMDAwMDAsVUwpIC8qIFJlc2VydmVkICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfUkVTMQlfQUMoMHgwMDAyMDAwMDAwMDAwMDAwLFVMKSAvKiBSZXNlcnZlZCAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9QQUdFX1NaMzJNQglfQUMoMHgwMDAxMDAwMDAwMDAwMDAwLFVMKSAvKiAoUGFudGhlcikgMzJNQiBwYWdlICAgICovCisjZGVmaW5lIF9QQUdFX1NaMjU2TUIJX0FDKDB4MjAwMTAwMDAwMDAwMDAwMCxVTCkgLyogKFBhbnRoZXIpIDI1Nk1CIHBhZ2UgICAqLwogI2RlZmluZSBfUEFHRV9TTglfQUMoMHgwMDAwODAwMDAwMDAwMDAwLFVMKSAvKiAoQ2hlZXRhaCkgU25vb3AgICAgICAgICovCiAjZGVmaW5lIF9QQUdFX1JFUzIJX0FDKDB4MDAwMDc4MDAwMDAwMDAwMCxVTCkgLyogUmVzZXJ2ZWQgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfUEFHRV9QQUREUl9TRglfQUMoMHgwMDAwMDFGRkZGRkZFMDAwLFVMKSAvKiAoU3BpdGZpcmUpIHBhZGRyWzQwOjEzXSovCkBAIC0zMzQsNyArMzM4LDExIEBACiAjZGVmaW5lIHB0ZV9jbGVhcihtbSxhZGRyLHB0ZXApCQlcCiAJc2V0X3B0ZV9hdCgobW0pLCAoYWRkciksIChwdGVwKSwgX19wdGUoMFVMKSkKIAotZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyWzFdOworZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyWzIwNDhdOworZXh0ZXJuIHBtZF90IHN3YXBwZXJfbG93X3BtZF9kaXJbMjA0OF07CisKK2V4dGVybiB2b2lkIHBhZ2luZ19pbml0KHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZmluZF9lY2FjaGVfZmx1c2hfc3Bhbih1bnNpZ25lZCBsb25nIHNpemUpOwogCiAvKiBUaGVzZSBkbyBub3RoaW5nIHdpdGggdGhlIHdheSBJIGhhdmUgdGhpbmdzIHNldHVwLiAqLwogI2RlZmluZSBtbXVfbG9ja2FyZWEodmFkZHIsIGxlbikJCSh2YWRkcikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC91YWNjZXNzLmgKaW5kZXggODBhNjVkNy4uMjAzZThlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC91YWNjZXNzLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC91YWNjZXNzLmgKQEAgLTcwLDI2ICs3MCwxNCBAQAogICogd2l0aCB0aGUgbWFpbiBpbnN0cnVjdGlvbiBwYXRoLiAgVGhpcyBtZWFucyB3aGVuIGV2ZXJ5dGhpbmcgaXMgd2VsbCwKICAqIHdlIGRvbid0IGV2ZW4gaGF2ZSB0byBqdW1wIG92ZXIgdGhlbS4gIEZ1cnRoZXIsIHRoZXkgZG8gbm90IGludHJ1ZGUKICAqIG9uIG91ciBjYWNoZSBvciB0bGIgZW50cmllcy4KLSAqCi0gKiBUaGVyZSBpcyBhIHNwZWNpYWwgd2F5IGhvdyB0byBwdXQgYSByYW5nZSBvZiBwb3RlbnRpYWxseSBmYXVsdGluZwotICogaW5zbnMgKGxpa2UgdHdlbnR5IGxkZC9zdGQncyB3aXRoIG5vdyBpbnRlcnZlbmluZyBvdGhlciBpbnN0cnVjdGlvbnMpCi0gKiBZb3Ugc3BlY2lmeSBhZGRyZXNzIG9mIGZpcnN0IGluIGluc24gYW5kIDAgaW4gZml4dXAgYW5kIGluIHRoZSBuZXh0Ci0gKiBleGNlcHRpb25fdGFibGVfZW50cnkgeW91IHNwZWNpZnkgbGFzdCBwb3RlbnRpYWxseSBmYXVsdGluZyBpbnNuICsgMQotICogYW5kIGluIGZpeHVwIHRoZSByb3V0aW5lIHdoaWNoIHNob3VsZCBoYW5kbGUgdGhlIGZhdWx0LgotICogVGhhdCBmaXh1cCBjb2RlIHdpbGwgZ2V0Ci0gKiAoZmF1bHRpbmdfaW5zbl9hZGRyZXNzIC0gZmlyc3RfaW5zbl9pbl90aGVfcmFuZ2VfYWRkcmVzcykvNAotICogaW4gJWcyIChpZS4gaW5kZXggb2YgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uIGluIHRoZSByYW5nZSkuCiAgKi8KIAotc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeQotewotICAgICAgICB1bnNpZ25lZCBpbnNuLCBmaXh1cDsKK3N0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgeworICAgICAgICB1bnNpZ25lZCBpbnQgaW5zbiwgZml4dXA7CiB9OwogCi0vKiBTcGVjaWFsIGV4YWJsZSBzZWFyY2gsIHdoaWNoIGhhbmRsZXMgcmFuZ2VzLiAgUmV0dXJucyBmaXh1cCAqLwotdW5zaWduZWQgbG9uZyBzZWFyY2hfZXh0YWJsZXNfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nICpnMik7Ci0KIGV4dGVybiB2b2lkIF9fcmV0X2VmYXVsdCh2b2lkKTsKK2V4dGVybiB2b2lkIF9fcmV0bF9lZmF1bHQodm9pZCk7CiAKIC8qIFVoLCB0aGVzZSBzaG91bGQgYmVjb21lIHRoZSBtYWluIHNpbmdsZS12YWx1ZSB0cmFuc2ZlciByb3V0aW5lcy4uCiAgKiBUaGV5IGF1dG9tYXRpY2FsbHkgdXNlIHRoZSByaWdodCBzaXplIGlmIHdlIGp1c3QgaGF2ZSB0aGUgcmlnaHQKQEAgLTI2Myw3ICsyNTEsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgcmV0ID0gX19fY29weV9mcm9tX3VzZXIodG8sIGZyb20sIHNpemUpOwogCi0JaWYgKHJldCkKKwlpZiAodW5saWtlbHkocmV0KSkKIAkJcmV0ID0gY29weV9mcm9tX3VzZXJfZml4dXAodG8sIGZyb20sIHNpemUpOwogCXJldHVybiByZXQ7CiB9CkBAIC0yNzksNyArMjY3LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHJldCA9IF9fX2NvcHlfdG9fdXNlcih0bywgZnJvbSwgc2l6ZSk7CiAKLQlpZiAocmV0KQorCWlmICh1bmxpa2VseShyZXQpKQogCQlyZXQgPSBjb3B5X3RvX3VzZXJfZml4dXAodG8sIGZyb20sIHNpemUpOwogCXJldHVybiByZXQ7CiB9CkBAIC0yOTUsNyArMjgzLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHJldCA9IF9fX2NvcHlfaW5fdXNlcih0bywgZnJvbSwgc2l6ZSk7CiAKLQlpZiAocmV0KQorCWlmICh1bmxpa2VseShyZXQpKQogCQlyZXQgPSBjb3B5X2luX3VzZXJfZml4dXAodG8sIGZyb20sIHNpemUpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9mdXRleC5oIGIvaW5jbHVkZS9hc20tdW0vZnV0ZXguaAppbmRleCAyY2FjNWVjLi4xNDJlZTJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9mdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL2Z1dGV4LmgKQEAgLTEsNTMgKzEsMTIgQEAKLSNpZm5kZWYgX0FTTV9GVVRFWF9ICi0jZGVmaW5lIF9BU01fRlVURVhfSAotCi0jaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfX1VNX0ZVVEVYX0gKKyNkZWZpbmUgX19VTV9GVVRFWF9ICiAKICNpbmNsdWRlIDxsaW51eC9mdXRleC5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotc3RhdGljIGlubGluZSBpbnQKLWZ1dGV4X2F0b21pY19vcF9pbnVzZXIgKGludCBlbmNvZGVkX29wLCBpbnQgX191c2VyICp1YWRkcikKLXsKLQlpbnQgb3AgPSAoZW5jb2RlZF9vcCA+PiAyOCkgJiA3OwotCWludCBjbXAgPSAoZW5jb2RlZF9vcCA+PiAyNCkgJiAxNTsKLQlpbnQgb3BhcmcgPSAoZW5jb2RlZF9vcCA8PCA4KSA+PiAyMDsKLQlpbnQgY21wYXJnID0gKGVuY29kZWRfb3AgPDwgMjApID4+IDIwOwotCWludCBvbGR2YWwgPSAwLCByZXQsIHRlbTsKLQlpZiAoZW5jb2RlZF9vcCAmIChGVVRFWF9PUF9PUEFSR19TSElGVCA8PCAyOCkpCi0JCW9wYXJnID0gMSA8PCBvcGFyZzsKKyNpbmNsdWRlICJhc20vYXJjaC9mdXRleC5oIgogCi0JaWYgKCEgYWNjZXNzX29rIChWRVJJRllfV1JJVEUsIHVhZGRyLCBzaXplb2YoaW50KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaW5jX3ByZWVtcHRfY291bnQoKTsKLQotCXN3aXRjaCAob3ApIHsKLQljYXNlIEZVVEVYX09QX1NFVDoKLQljYXNlIEZVVEVYX09QX0FERDoKLQljYXNlIEZVVEVYX09QX09SOgotCWNhc2UgRlVURVhfT1BfQU5ETjoKLQljYXNlIEZVVEVYX09QX1hPUjoKLQlkZWZhdWx0OgotCQlyZXQgPSAtRU5PU1lTOwotCX0KLQotCWRlY19wcmVlbXB0X2NvdW50KCk7Ci0KLQlpZiAoIXJldCkgewotCQlzd2l0Y2ggKGNtcCkgewotCQljYXNlIEZVVEVYX09QX0NNUF9FUTogcmV0ID0gKG9sZHZhbCA9PSBjbXBhcmcpOyBicmVhazsKLQkJY2FzZSBGVVRFWF9PUF9DTVBfTkU6IHJldCA9IChvbGR2YWwgIT0gY21wYXJnKTsgYnJlYWs7Ci0JCWNhc2UgRlVURVhfT1BfQ01QX0xUOiByZXQgPSAob2xkdmFsIDwgY21wYXJnKTsgYnJlYWs7Ci0JCWNhc2UgRlVURVhfT1BfQ01QX0dFOiByZXQgPSAob2xkdmFsID49IGNtcGFyZyk7IGJyZWFrOwotCQljYXNlIEZVVEVYX09QX0NNUF9MRTogcmV0ID0gKG9sZHZhbCA8PSBjbXBhcmcpOyBicmVhazsKLQkJY2FzZSBGVVRFWF9PUF9DTVBfR1Q6IHJldCA9IChvbGR2YWwgPiBjbXBhcmcpOyBicmVhazsKLQkJZGVmYXVsdDogcmV0ID0gLUVOT1NZUzsKLQkJfQotCX0KLQlyZXR1cm4gcmV0OwotfQotCi0jZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tdW0vcGd0YWJsZS5oCmluZGV4IGVkMDYxNzAuLjYxNmQwMmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS11bS9wZ3RhYmxlLmgKQEAgLTM0Niw3ICszNDYsNiBAQAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkKIHsKIAlwdGVfc2V0X3ZhbChwdGUsIChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9DSEdfTUFTSyksIG5ld3Byb3QpOwotCWlmKHB0ZV9wcmVzZW50KHB0ZSkpIHB0ZSA9IHB0ZV9ta25ld3BhZ2UocHRlX21rbmV3cHJvdChwdGUpKTsKIAlyZXR1cm4gcHRlOyAKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcHJvY2Vzc29yLWdlbmVyaWMuaCBiL2luY2x1ZGUvYXNtLXVtL3Byb2Nlc3Nvci1nZW5lcmljLmgKaW5kZXggYjJmYzk0Zi4uMDc1NzcxYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vcHJvY2Vzc29yLWdlbmVyaWMuaAorKysgYi9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3ItZ2VuZXJpYy5oCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSAibGludXgvY29uZmlnLmgiCiAjaW5jbHVkZSAiYXNtL3B0cmFjZS5oIgogI2luY2x1ZGUgImNob29zZS1tb2RlLmgiCisjaW5jbHVkZSAicmVnaXN0ZXJzLmgiCiAKIHN0cnVjdCBtbV9zdHJ1Y3Q7CiAKQEAgLTIxLDYgKzIyLDcgQEAKIAkgKiBjb3B5X3RocmVhZCkgdG8gbWFyayB0aGF0IHdlIGFyZSBiZWdpbiBjYWxsZWQgZnJvbSB1c2Vyc3BhY2UgKGZvcmsgLwogCSAqIHZmb3JrIC8gY2xvbmUpLCBhbmQgcmVzZXQgdG8gMCBhZnRlci4gSXQgaXMgbGVmdCB0byAwIHdoZW4gY2FsbGVkCiAJICogZnJvbSBrZXJuZWxzcGFjZSAoaS5lLiBrZXJuZWxfdGhyZWFkKCkgb3IgZm9ya19pZGxlKCksIGFzIG9mIDIuNi4xMSkuICovCisJc3RydWN0IHRhc2tfc3RydWN0ICpzYXZlZF90YXNrOwogCWludCBmb3JraW5nOwogCWludCBuc3lzY2FsbHM7CiAJc3RydWN0IHB0X3JlZ3MgcmVnczsKQEAgLTEzNSwxOSArMTM3LDE1IEBACiAjZGVmaW5lIGN1cnJlbnRfY3B1X2RhdGEgYm9vdF9jcHVfZGF0YQogI2VuZGlmCiAKLSNkZWZpbmUgS1NUS19FSVAodHNrKSAoUFRfUkVHU19JUCgmdHNrLT50aHJlYWQucmVncykpCi0jZGVmaW5lIEtTVEtfRVNQKHRzaykgKFBUX1JFR1NfU1AoJnRzay0+dGhyZWFkLnJlZ3MpKQorCisjaWZkZWYgQ09ORklHX01PREVfU0tBUworI2RlZmluZSBLU1RLX1JFRyh0c2ssIHJlZykgXAorCSh7IHVuaW9uIHVtbF9wdF9yZWdzIHJlZ3M7IFwKKwkgICBnZXRfdGhyZWFkX3JlZ3MoJnJlZ3MsIHRzay0+dGhyZWFkLm1vZGUuc2thcy5zd2l0Y2hfYnVmKTsgXAorCSAgIFVQVF9SRUcoJnJlZ3MsIHJlZyk7IH0pCisjZWxzZQorI2RlZmluZSBLU1RLX1JFRyh0c2ssIHJlZykgKDB4YmFkYmFiZSkKKyNlbmRpZgogI2RlZmluZSBnZXRfd2NoYW4ocCkgKDApCiAKICNlbmRpZgotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcHJvY2Vzc29yLWkzODYuaCBiL2luY2x1ZGUvYXNtLXVtL3Byb2Nlc3Nvci1pMzg2LmgKaW5kZXggNDMxYmFkMy4uNDEwOGE1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vcHJvY2Vzc29yLWkzODYuaAorKysgYi9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3ItaTM4Ni5oCkBAIC00MywxNyArNDMsMTAgQEAKICNkZWZpbmUgQVJDSF9JU19TVEFDS0dST1coYWRkcmVzcykgXAogICAgICAgIChhZGRyZXNzICsgMzIgPj0gVVBUX1NQKCZjdXJyZW50LT50aHJlYWQucmVncy5yZWdzKSkKIAorI2RlZmluZSBLU1RLX0VJUCh0c2spIEtTVEtfUkVHKHRzaywgRUlQKQorI2RlZmluZSBLU1RLX0VTUCh0c2spIEtTVEtfUkVHKHRzaywgVUVTUCkKKyNkZWZpbmUgS1NUS19FQlAodHNrKSBLU1RLX1JFRyh0c2ssIEVCUCkKKwogI2luY2x1ZGUgImFzbS9wcm9jZXNzb3ItZ2VuZXJpYy5oIgogCiAjZW5kaWYKLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3Byb2Nlc3Nvci14ODZfNjQuaCBiL2luY2x1ZGUvYXNtLXVtL3Byb2Nlc3Nvci14ODZfNjQuaAppbmRleCAwYmViOWE0Li5lMWUxMjU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3IteDg2XzY0LmgKKysrIGIvaW5jbHVkZS9hc20tdW0vcHJvY2Vzc29yLXg4Nl82NC5oCkBAIC0zNiwxNyArMzYsOSBAQAogI2RlZmluZSBBUkNIX0lTX1NUQUNLR1JPVyhhZGRyZXNzKSBcCiAgICAgICAgIChhZGRyZXNzICsgMTI4ID49IFVQVF9TUCgmY3VycmVudC0+dGhyZWFkLnJlZ3MucmVncykpCiAKKyNkZWZpbmUgS1NUS19FSVAodHNrKSBLU1RLX1JFRyh0c2ssIFJJUCkKKyNkZWZpbmUgS1NUS19FU1AodHNrKSBLU1RLX1JFRyh0c2ssIFJTUCkKKwogI2luY2x1ZGUgImFzbS9wcm9jZXNzb3ItZ2VuZXJpYy5oIgogCiAjZW5kaWYKLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3N5c3RlbS1pMzg2LmggYi9pbmNsdWRlL2FzbS11bS9zeXN0ZW0taTM4Ni5oCmluZGV4IGVhODM4MWQuLmM0MzYyNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL3N5c3RlbS1pMzg2LmgKKysrIGIvaW5jbHVkZS9hc20tdW0vc3lzdGVtLWkzODYuaApAQCAtMyw2ICszLDQgQEAKIAogI2luY2x1ZGUgImFzbS9zeXN0ZW0tZ2VuZXJpYy5oIgogICAgIAotI2RlZmluZSBfX0hBVkVfQVJDSF9DTVBYQ0hHIDEKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS11bS91YWNjZXNzLmgKaW5kZXggODAxNzEwZC4uMmVlMDI4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL3VhY2Nlc3MuaApAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICBjb25zdCBfX3R5cGVvZl9fKHB0cikgX19wcml2YXRlX3B0ciA9IHB0cjsgXAogICAgICAgICBfX3R5cGVvZl9fKCooX19wcml2YXRlX3B0cikpIF9fcHJpdmF0ZV92YWw7IFwKICAgICAgICAgaW50IF9fcHJpdmF0ZV9yZXQgPSAtRUZBVUxUOyBcCi0gICAgICAgICh4KSA9IDA7IFwKKyAgICAgICAgKHgpID0gKF9fdHlwZW9mX18oKihfX3ByaXZhdGVfcHRyKSkpMDsgXAogCWlmIChfX2NvcHlfZnJvbV91c2VyKCZfX3ByaXZhdGVfdmFsLCAoX19wcml2YXRlX3B0ciksIFwKIAkgICAgc2l6ZW9mKCooX19wcml2YXRlX3B0cikpKSA9PSAwKSB7XAogICAgICAgICAJKHgpID0gKF9fdHlwZW9mX18oKihfX3ByaXZhdGVfcHRyKSkpIF9fcHJpdmF0ZV92YWw7IFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvZnV0ZXguaCBiL2luY2x1ZGUvYXNtLXY4NTAvZnV0ZXguaAppbmRleCAyY2FjNWVjLi45ZmVmZjRjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdjg1MC9mdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvZnV0ZXguaApAQCAtMTQsNyArMTQsNyBAQAogCWludCBjbXAgPSAoZW5jb2RlZF9vcCA+PiAyNCkgJiAxNTsKIAlpbnQgb3BhcmcgPSAoZW5jb2RlZF9vcCA8PCA4KSA+PiAyMDsKIAlpbnQgY21wYXJnID0gKGVuY29kZWRfb3AgPDwgMjApID4+IDIwOwotCWludCBvbGR2YWwgPSAwLCByZXQsIHRlbTsKKwlpbnQgb2xkdmFsID0gMCwgcmV0OwogCWlmIChlbmNvZGVkX29wICYgKEZVVEVYX09QX09QQVJHX1NISUZUIDw8IDI4KSkKIAkJb3BhcmcgPSAxIDw8IG9wYXJnOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvZGVzYy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2Rlc2MuaAppbmRleCA1OTRlNjEwLi42OGFjM2M2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvZGVzYy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9kZXNjLmgKQEAgLTgsNiArOCw4IEBACiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisKICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgogI2luY2x1ZGUgPGFzbS9tbXUuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L21zci5oIGIvaW5jbHVkZS9hc20teDg2XzY0L21zci5oCmluZGV4IDRkNzI3ZjMuLjVhN2ZlM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9tc3IuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvbXNyLmgKQEAgLTIzNCw2ICsyMzQsNyBAQAogI2RlZmluZSBNU1JfSzhfVE9QX01FTTEJCSAgIDB4QzAwMTAwMUEKICNkZWZpbmUgTVNSX0s4X1RPUF9NRU0yCQkgICAweEMwMDEwMDFECiAjZGVmaW5lIE1TUl9LOF9TWVNDRkcJCSAgIDB4QzAwMTAwMTAKKyNkZWZpbmUgTVNSX0s4X0hXQ1IJCSAgIDB4QzAwMTAwMTUKIAogLyogSzYgTVNScyAqLwogI2RlZmluZSBNU1JfSzZfRUZFUgkJCTB4QzAwMDAwODAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvcGd0YWJsZS5oCmluZGV4IDJjYjQ4MzUuLmRkODcxMWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3BndGFibGUuaApAQCAtMzg0LDcgKzM4NCw3IEBACiB9CiAKICNkZWZpbmUgcHRlX2luZGV4KGFkZHJlc3MpIFwKLQkJKChhZGRyZXNzID4+IFBBR0VfU0hJRlQpICYgKFBUUlNfUEVSX1BURSAtIDEpKQorCQkoKChhZGRyZXNzKSA+PiBQQUdFX1NISUZUKSAmIChQVFJTX1BFUl9QVEUgLSAxKSkKICNkZWZpbmUgcHRlX29mZnNldF9rZXJuZWwoZGlyLCBhZGRyZXNzKSAoKHB0ZV90ICopIHBtZF9wYWdlX2tlcm5lbCgqKGRpcikpICsgXAogCQkJcHRlX2luZGV4KGFkZHJlc3MpKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvc21wLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvc21wLmgKaW5kZXggMjRlMzI2MS4uYzU3Y2U0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zbXAuaApAQCAtODEsNiArODEsNyBAQAogZXh0ZXJuIGludCBzYWZlX3NtcF9wcm9jZXNzb3JfaWQodm9pZCk7CiBleHRlcm4gaW50IF9fY3B1X2Rpc2FibGUodm9pZCk7CiBleHRlcm4gdm9pZCBfX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gdm9pZCBwcmVmaWxsX3Bvc3NpYmxlX21hcCh2b2lkKTsKIAogI2VuZGlmIC8qICFBU1NFTUJMWSAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvYXRvbWljLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvYXRvbWljLmgKaW5kZXggMjRmODZmMC4uMTJiNTczMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9hdG9taWMuaApAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKLSNkZWZpbmUgQVRPTUlDX0lOSVQoaSkJKCAoYXRvbWljX3QpIHsgKGkpIH0gKQorI2RlZmluZSBBVE9NSUNfSU5JVChpKQl7IChpKSB9CiAKIC8qCiAgKiBUaGlzIFh0ZW5zYSBpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIHRoYXQgdGhlIHJpZ2h0IG1lY2hhbmlzbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20teHRlbnNhL2JpdG9wcy5oCmluZGV4IGQzOTVlZjIuLmU3NmVlODggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvYml0b3BzLmgKQEAgLTE3NCw3ICsxNzQsNyBAQAogCXJldHVybiAxVUwgJiAoKChjb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKilhZGRyKVtucj4+NV0gPj4gKG5yJjMxKSk7CiB9CiAKLSNpZiBYQ0hBTF9IQVZFX05TQVUKKyNpZiBYQ0hBTF9IQVZFX05TQQogCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19jbnRseiAodW5zaWduZWQgbG9uZyB4KQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9oYXJkaXJxLmgKaW5kZXggZTA3Yzc2Yy4uYWE5YzFhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL2hhcmRpcnEuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvaGFyZGlycS5oCkBAIC0yMyw2ICsyMyw3IEBACiAJdW5zaWduZWQgaW50IF9fbm1pX2NvdW50OwkgICAgICAgLyogYXJjaCBkZXBlbmRlbnQgKi8KIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkIGlycV9jcHVzdGF0X3Q7CiAKK3ZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSk7CiAjaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4JLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KIAogI2VuZGlmCS8qIF9YVEVOU0FfSEFSRElSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2Evc2VtYXBob3JlLmggYi9pbmNsdWRlL2FzbS14dGVuc2Evc2VtYXBob3JlLmgKaW5kZXggZGI3NDBiOC4uMDllODlhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3NlbWFwaG9yZS5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9zZW1hcGhvcmUuaApAQCAtMjAsMjggKzIwLDE5IEBACiAJYXRvbWljX3QgY291bnQ7CiAJaW50IHNsZWVwZXJzOwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Ci0jaWYgV0FJVFFVRVVFX0RFQlVHCi0JbG9uZyBfX21hZ2ljOwotI2VuZGlmCiB9OwogCi0jaWYgV0FJVFFVRVVFX0RFQlVHCi0jIGRlZmluZSBfX1NFTV9ERUJVR19JTklUKG5hbWUpIFwKLQkJLCAoaW50KSYobmFtZSkuX19tYWdpYwotI2Vsc2UKLSMgZGVmaW5lIF9fU0VNX0RFQlVHX0lOSVQobmFtZSkKLSNlbmRpZgorI2RlZmluZSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLG4pCQkJCQlcCit7CQkJCQkJCQkJXAorCS5jb3VudAkJPSBBVE9NSUNfSU5JVChuKSwJCQkJXAorCS5zbGVlcGVycwk9IDAsCQkJCQkJXAorCS53YWl0CQk9IF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSKChuYW1lKS53YWl0KQlcCit9CiAKLSNkZWZpbmUgX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSxjb3VudCkJCQlcCi0JeyBBVE9NSUNfSU5JVChjb3VudCksIAkJCQkJXAotCSAgMCwJCQkJCQkJXAotCSAgX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIoKG5hbWUpLndhaXQpCQlcCi0JX19TRU1fREVCVUdfSU5JVChuYW1lKSB9Ci0KLSNkZWZpbmUgX19NVVRFWF9JTklUSUFMSVpFUihuYW1lKSBcCisjZGVmaW5lIF9fTVVURVhfSU5JVElBTElaRVIobmFtZSkgCQkJCQlcCiAJX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSwgMSkKIAotI2RlZmluZSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSxjb3VudCkgXAorI2RlZmluZSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSxjb3VudCkgCQkJXAogCXN0cnVjdCBzZW1hcGhvcmUgbmFtZSA9IF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsY291bnQpCiAKICNkZWZpbmUgREVDTEFSRV9NVVRFWChuYW1lKSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwxKQpAQCAtNDksMTcgKzQwLDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHNlbWFfaW5pdCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtLCBpbnQgdmFsKQogewotLyoKLSAqCSpzZW0gPSAoc3RydWN0IHNlbWFwaG9yZSlfX1NFTUFQSE9SRV9JTklUSUFMSVpFUigoKnNlbSksdmFsKTsKLSAqCi0gKiBpJ2QgcmF0aGVyIHVzZSB0aGUgbW9yZSBmbGV4aWJsZSBpbml0aWFsaXphdGlvbiBhYm92ZSwgYnV0IHNhZGx5Ci0gKiBHQ0MgMi43LjIuMyBlbWl0cyBhIGJvZ3VzIHdhcm5pbmcuIEVHQ1MgZG9lc250LiBPaCB3ZWxsLgotICovCiAJYXRvbWljX3NldCgmc2VtLT5jb3VudCwgdmFsKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZW0tPndhaXQpOwotI2lmIFdBSVRRVUVVRV9ERUJVRwotCXNlbS0+X19tYWdpYyA9IChpbnQpJnNlbS0+X19tYWdpYzsKLSNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQpAQCAtODEsOSArNjMsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQogewotI2lmIFdBSVRRVUVVRV9ERUJVRwotCUNIRUNLX01BR0lDKHNlbS0+X19tYWdpYyk7Ci0jZW5kaWYKKwltaWdodF9zbGVlcCgpOwogCiAJaWYgKGF0b21pY19zdWJfcmV0dXJuKDEsICZzZW0tPmNvdW50KSA8IDApCiAJCV9fZG93bihzZW0pOwpAQCAtOTIsOSArNzIsOCBAQAogc3RhdGljIGlubGluZSBpbnQgZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCiB7CiAJaW50IHJldCA9IDA7Ci0jaWYgV0FJVFFVRVVFX0RFQlVHCi0JQ0hFQ0tfTUFHSUMoc2VtLT5fX21hZ2ljKTsKLSNlbmRpZgorCisJbWlnaHRfc2xlZXAoKTsKIAogCWlmIChhdG9taWNfc3ViX3JldHVybigxLCAmc2VtLT5jb3VudCkgPCAwKQogCQlyZXQgPSBfX2Rvd25faW50ZXJydXB0aWJsZShzZW0pOwpAQCAtMTA0LDkgKzgzLDYgQEAKIHN0YXRpYyBpbmxpbmUgaW50IGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQogewogCWludCByZXQgPSAwOwotI2lmIFdBSVRRVUVVRV9ERUJVRwotCUNIRUNLX01BR0lDKHNlbS0+X19tYWdpYyk7Ci0jZW5kaWYKIAogCWlmIChhdG9taWNfc3ViX3JldHVybigxLCAmc2VtLT5jb3VudCkgPCAwKQogCQlyZXQgPSBfX2Rvd25fdHJ5bG9jayhzZW0pOwpAQCAtMTE5LDkgKzk1LDYgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIHVwKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCiB7Ci0jaWYgV0FJVFFVRVVFX0RFQlVHCi0JQ0hFQ0tfTUFHSUMoc2VtLT5fX21hZ2ljKTsKLSNlbmRpZgogCWlmIChhdG9taWNfYWRkX3JldHVybigxLCAmc2VtLT5jb3VudCkgPD0gMCkKIAkJX191cChzZW0pOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20teHRlbnNhL3N5c3RlbS5oCmluZGV4IGYwOTM5MzIuLjkyODQ4NjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2Evc3lzdGVtLmgKQEAgLTE4OSwyMCArMTg5LDYgQEAKIAogI2RlZmluZSB0YXMocHRyKSAoeGNoZygocHRyKSwxKSkKIAotI2lmICggX19YQ0NfXyA9PSAxICkKLQotLyogeHQteGNjIHByb2Nlc3NlcyBfX2lubGluZV9fIGRpZmZlcmVudGx5IHRoYW4geHQtZ2NjIGFuZCBkZWNpZGVzIHRvCi0gKiBpbnNlcnQgYW4gb3V0LW9mLWxpbmUgY29weSBvZiBmdW5jdGlvbiBfX3hjaGcuICBUaGlzIHByZXNlbnRzIHRoZQotICogdW5yZXNvbHZlZCBzeW1ib2wgYXQgbGluayB0aW1lIG9mIF9feGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlciwKLSAqIGV2ZW4gdGhvdWdoIHN1Y2ggYSBmdW5jdGlvbiB3b3VsZCBuZXZlciBiZSBjYWxsZWQgYXQgcnVuLXRpbWUuCi0gKiB4dC1nY2MgYWx3YXlzIGlubGluZXMgX194Y2hnLCBhbmQgb3B0aW1pemVzIGF3YXkgdGhlIHVuZGVmaW5lZAotICogYmFkX3BvaW50ZXIgZnVuY3Rpb24uCi0gKi8KLQotI2RlZmluZSB4Y2hnKHB0cix4KSB4Y2hnX3UzMihwdHIseCkKLQotI2Vsc2UgIC8qIGFzc3VtZSB4dC1nY2MgKi8KLQogI2RlZmluZSB4Y2hnKHB0cix4KSAoKF9fdHlwZW9mX18oKihwdHIpKSlfX3hjaGcoKHVuc2lnbmVkIGxvbmcpKHgpLChwdHIpLHNpemVvZigqKHB0cikpKSkKIAogLyoKQEAgLTIyNCw4ICsyMTAsNiBAQAogCXJldHVybiB4OwogfQogCi0jZW5kaWYKLQogZXh0ZXJuIHZvaWQgc2V0X2V4Y2VwdF92ZWN0b3IoaW50IG4sIHZvaWQgKmFkZHIpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3BpbGxfcmVnaXN0ZXJzKHZvaWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FjY3QuaCBiL2luY2x1ZGUvbGludXgvYWNjdC5oCmluZGV4IDE5OTNhMzYuLjE5ZjcwNDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYWNjdC5oCisrKyBiL2luY2x1ZGUvbGludXgvYWNjdC5oCkBAIC0xNjIsMTMgKzE2MiwxMyBAQAogI2lmZGVmIF9fS0VSTkVMX18KIC8qCiAgKiBZZXQgYW5vdGhlciBzZXQgb2YgSFogdG8gKkhaIGhlbHBlciBmdW5jdGlvbnMuCi0gKiBTZWUgPGxpbnV4L3RpbWVzLmg+IGZvciB0aGUgb3JpZ2luYWwuCisgKiBTZWUgPGxpbnV4L2ppZmZpZXMuaD4gZm9yIHRoZSBvcmlnaW5hbC4KICAqLwogCiBzdGF0aWMgaW5saW5lIHUzMiBqaWZmaWVzX3RvX0FIWih1bnNpZ25lZCBsb25nIHgpCiB7CiAjaWYgKFRJQ0tfTlNFQyAlIChOU0VDX1BFUl9TRUMgLyBBSFopKSA9PSAwCi0JcmV0dXJuIHggLyAoSFogLyBVU0VSX0haKTsKKwlyZXR1cm4geCAvIChIWiAvIEFIWik7CiAjZWxzZQogICAgICAgICB1NjQgdG1wID0gKHU2NCl4ICogVElDS19OU0VDOwogICAgICAgICBkb19kaXYodG1wLCAoTlNFQ19QRVJfU0VDIC8gQUhaKSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Fpby5oIGIvaW5jbHVkZS9saW51eC9haW8uaAppbmRleCBhNGQ1YWY5Li4wZGVjZjY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Fpby5oCisrKyBiL2luY2x1ZGUvbGludXgvYWlvLmgKQEAgLTI0LDcgKzI0LDEyIEBACiAjZGVmaW5lIEtJT0NCX1NZTkNfS0VZCQkofjBVKQogCiAvKiBraV9mbGFncyBiaXRzICovCi0jZGVmaW5lIEtJRl9MT0NLRUQJCTAKKy8qCisgKiBUaGlzIG1heSBiZSB1c2VkIGZvciBjYW5jZWwvcmV0cnkgc2VyaWFsaXphdGlvbiBpbiB0aGUgZnV0dXJlLCBidXQKKyAqIGZvciBub3cgaXQncyB1bnVzZWQgYW5kIHdlIHByb2JhYmx5IGRvbid0IHdhbnQgbW9kdWxlcyB0byBldmVuCisgKiB0aGluayB0aGV5IGNhbiB1c2UgaXQuCisgKi8KKy8qICNkZWZpbmUgS0lGX0xPQ0tFRAkJMCAqLwogI2RlZmluZSBLSUZfS0lDS0VECQkxCiAjZGVmaW5lIEtJRl9DQU5DRUxMRUQJCTIKIApAQCAtNDMsNiArNDgsNDAgQEAKICNkZWZpbmUga2lvY2JJc0tpY2tlZChpb2NiKQl0ZXN0X2JpdChLSUZfS0lDS0VELCAmKGlvY2IpLT5raV9mbGFncykKICNkZWZpbmUga2lvY2JJc0NhbmNlbGxlZChpb2NiKQl0ZXN0X2JpdChLSUZfQ0FOQ0VMTEVELCAmKGlvY2IpLT5raV9mbGFncykKIAorLyogaXMgdGhlcmUgYSBiZXR0ZXIgcGxhY2UgdG8gZG9jdW1lbnQgZnVuY3Rpb24gcG9pbnRlciBtZXRob2RzPyAqLworLyoqCisgKiBraV9yZXRyeQktCWlvY2IgZm9yd2FyZCBwcm9ncmVzcyBjYWxsYmFjaworICogQGtpb2NiOglUaGUga2lvY2Igc3RydWN0IHRvIGFkdmFuY2UgYnkgcGVyZm9ybWluZyBhbiBvcGVyYXRpb24uCisgKgorICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgQUlPIGNvcmUgd2FudHMgYSBnaXZlbiBBSU8gb3BlcmF0aW9uCisgKiB0byBtYWtlIGZvcndhcmQgcHJvZ3Jlc3MuICBUaGUga2lvY2IgYXJndW1lbnQgZGVzY3JpYmVzIHRoZSBvcGVyYXRpb24KKyAqIHRoYXQgaXMgdG8gYmUgcGVyZm9ybWVkLiAgQXMgdGhlIG9wZXJhdGlvbiBwcm9jZWVkcywgcGVyaGFwcyBwYXJ0aWFsbHksCisgKiBraV9yZXRyeSBpcyBleHBlY3RlZCB0byB1cGRhdGUgdGhlIGtpb2NiIHdpdGggcHJvZ3Jlc3MgbWFkZS4gIFR5cGljYWxseQorICoga2lfcmV0cnkgaXMgc2V0IGluIHRoZSBBSU8gY29yZSBhbmQgaXQgaXRzZWxmIGNhbGxzIGZpbGVfb3BlcmF0aW9ucworICogaGVscGVycy4KKyAqCisgKiBraV9yZXRyeSdzIHJldHVybiB2YWx1ZSBkZXRlcm1pbmVzIHdoZW4gdGhlIEFJTyBvcGVyYXRpb24gaXMgY29tcGxldGVkCisgKiBhbmQgYW4gZXZlbnQgaXMgZ2VuZXJhdGVkIGluIHRoZSBBSU8gZXZlbnQgcmluZy4gIEV4Y2VwdCB0aGUgc3BlY2lhbAorICogcmV0dXJuIHZhbHVlcyBkZXNjcmliZWQgYmVsb3csIHRoZSB2YWx1ZSB0aGF0IGlzIHJldHVybmVkIGZyb20ga2lfcmV0cnkKKyAqIGlzIHRyYW5zZmVycmVkIGRpcmVjdGx5IGludG8gdGhlIGNvbXBsZXRpb24gcmluZyBhcyB0aGUgb3BlcmF0aW9uJ3MKKyAqIHJlc3VsdGluZyBzdGF0dXMuICBPbmNlIHRoaXMgaGFzIGhhcHBlbmVkIGtpX3JldHJ5ICpNVVNUIE5PVCogcmVmZXJlbmNlCisgKiB0aGUga2lvY2IgcG9pbnRlciBhZ2Fpbi4KKyAqCisgKiBJZiBraV9yZXRyeSByZXR1cm5zIC1FSU9DQlFVRVVFRCBpdCBoYXMgbWFkZSBhIHByb21pc2UgdGhhdCBhaW9fY29tcGxldGUoKQorICogd2lsbCBiZSBjYWxsZWQgb24gdGhlIGtpb2NiIHBvaW50ZXIgaW4gdGhlIGZ1dHVyZS4gIFRoZSBBSU8gY29yZSB3aWxsCisgKiBub3QgYXNrIHRoZSBtZXRob2QgYWdhaW4gLS0ga2lfcmV0cnkgbXVzdCBlbnN1cmUgZm9yd2FyZCBwcm9ncmVzcy4KKyAqIGFpb19jb21wbGV0ZSgpIG11c3QgYmUgY2FsbGVkIG9uY2UgYW5kIG9ubHkgb25jZSBpbiB0aGUgZnV0dXJlLCBtdWx0aXBsZQorICogY2FsbHMgbWF5IHJlc3VsdCBpbiB1bmRlZmluZWQgYmVoYXZpb3VyLgorICoKKyAqIElmIGtpX3JldHJ5IHJldHVybnMgLUVJT0NCUkVUUlkgaXQgaGFzIG1hZGUgYSBwcm9taXNlIHRoYXQga2lja19pb2NiKCkKKyAqIHdpbGwgYmUgY2FsbGVkIG9uIHRoZSBraW9jYiBwb2ludGVyIGluIHRoZSBmdXR1cmUuICBUaGlzIG1heSBoYXBwZW4KKyAqIHRocm91Z2ggZ2VuZXJpYyBoZWxwZXJzIHRoYXQgYXNzb2NpYXRlIGtpb2NiLT5raV93YWl0IHdpdGggYSB3YWl0CisgKiBxdWV1ZSBoZWFkIHRoYXQga2lfcmV0cnkgdXNlcyB2aWEgY3VycmVudC0+aW9fd2FpdC4gIEl0IGNhbiBhbHNvIGhhcHBlbgorICogd2l0aCBjdXN0b20gdHJhY2tpbmcgYW5kIG1hbnVhbCBjYWxscyB0byBraWNrX2lvY2IoKSwgdGhvdWdoIHRoYXQgaXMKKyAqIGRpc2NvdXJhZ2VkLiAgSW4gZWl0aGVyIGNhc2UsIGtpY2tfaW9jYigpIG11c3QgYmUgY2FsbGVkIG9uY2UgYW5kIG9ubHkKKyAqIG9uY2UuICBraV9yZXRyeSBtdXN0IGVuc3VyZSBmb3J3YXJkIHByb2dyZXNzLCB0aGUgQUlPIGNvcmUgd2lsbCB3YWl0CisgKiBpbmRlZmluaXRlbHkgZm9yIGtpY2tfaW9jYigpIHRvIGJlIGNhbGxlZC4KKyAqLwogc3RydWN0IGtpb2NiIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWtpX3J1bl9saXN0OwogCWxvbmcJCQlraV9mbGFnczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXRtZGV2LmggYi9pbmNsdWRlL2xpbnV4L2F0bWRldi5oCmluZGV4IDlmMzc0Y2YuLmU3ZDA1OTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXRtZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9hdG1kZXYuaApAQCAtNzYsNiArNzYsMTMgQEAKIAkJCQkJLyogc2V0IGludGVyZmFjZSBFU0kgKi8KICNkZWZpbmUgQVRNX1NFVEVTSUYJX0lPVygnYScsQVRNSU9DX0lURisxMyxzdHJ1Y3QgYXRtaWZfc2lvYykKIAkJCQkJLyogZm9yY2UgaW50ZXJmYWNlIEVTSSAqLworI2RlZmluZSBBVE1fQURETEVDU0FERFIJX0lPVygnYScsIEFUTUlPQ19JVEYrMTQsIHN0cnVjdCBhdG1pZl9zaW9jKQorCQkJCQkvKiByZWdpc3RlciBhIExFQ1MgYWRkcmVzcyAqLworI2RlZmluZSBBVE1fREVMTEVDU0FERFIJX0lPVygnYScsIEFUTUlPQ19JVEYrMTUsIHN0cnVjdCBhdG1pZl9zaW9jKQorCQkJCQkvKiB1bnJlZ2lzdGVyIGEgTEVDUyBhZGRyZXNzICovCisjZGVmaW5lIEFUTV9HRVRMRUNTQUREUglfSU9XKCdhJywgQVRNSU9DX0lURisxNiwgc3RydWN0IGF0bWlmX3Npb2MpCisJCQkJCS8qIHJldHJpZXZlIExFQ1MgYWRkcmVzcyhlcykgKi8KKwogI2RlZmluZSBBVE1fR0VUU1RBVAlfSU9XKCdhJyxBVE1JT0NfU0FSQ09NKzAsc3RydWN0IGF0bWlmX3Npb2MpCiAJCQkJCS8qIGdldCBBQUwgbGF5ZXIgc3RhdGlzdGljcyAqLwogI2RlZmluZSBBVE1fR0VUU1RBVFoJX0lPVygnYScsQVRNSU9DX1NBUkNPTSsxLHN0cnVjdCBhdG1pZl9zaW9jKQpAQCAtMzI4LDYgKzMzNSw4IEBACiAJc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsJCS8qIG5leHQgYWRkcmVzcyAqLwogfTsKIAorZW51bSBhdG1fYWRkcl90eXBlX3QgeyBBVE1fQUREUl9MT0NBTCwgQVRNX0FERFJfTEVDUyB9OworCiBzdHJ1Y3QgYXRtX2RldiB7CiAJY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wczsJLyogZGV2aWNlIG9wZXJhdGlvbnM7IE5VTEwgaWYgdW51c2VkICovCiAJY29uc3Qgc3RydWN0IGF0bXBoeV9vcHMgKnBoeTsJLyogUEhZIG9wZXJhdGlvbnMsIG1heSBiZSB1bmRlZmluZWQgKi8KQEAgLTMzOCw2ICszNDcsNyBAQAogCXZvaWQJCSpwaHlfZGF0YTsJLyogcHJpdmF0ZSBQSFkgZGF0ZSAqLwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CQkvKiBkZXZpY2UgZmxhZ3MgKEFUTV9ERl8qKSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbG9jYWw7CQkvKiBsb2NhbCBBVE0gYWRkcmVzc2VzICovCisJc3RydWN0IGxpc3RfaGVhZCBsZWNzOwkJLyogTEVDUyBBVE0gYWRkcmVzc2VzIGxlYXJuZWQgdmlhIElMTUkgKi8KIAl1bnNpZ25lZCBjaGFyCWVzaVtFU0lfTEVOXTsJLyogRVNJICgiTUFDIiBhZGRyKSAqLwogCXN0cnVjdCBhdG1fY2lyYW5nZSBjaV9yYW5nZTsJLyogVlBJL1ZDSSByYW5nZSAqLwogCXN0cnVjdCBrX2F0bV9kZXZfc3RhdHMgc3RhdHM7CS8qIHN0YXRpc3RpY3MgKi8KQEAgLTQ1Nyw3ICs0NjcsNyBAQAogCiBpbnQgYXRtX2NoYXJnZShzdHJ1Y3QgYXRtX3ZjYyAqdmNjLGludCB0cnVlc2l6ZSk7CiBzdHJ1Y3Qgc2tfYnVmZiAqYXRtX2FsbG9jX2NoYXJnZShzdHJ1Y3QgYXRtX3ZjYyAqdmNjLGludCBwZHVfc2l6ZSwKLSAgICBpbnQgZ2ZwX2ZsYWdzKTsKKyAgICBnZnBfdCBnZnBfZmxhZ3MpOwogaW50IGF0bV9wY3JfZ29hbChzdHJ1Y3QgYXRtX3RyYWZwcm0gKnRwKTsKIAogdm9pZCB2Y2NfcmVsZWFzZV9hc3luYyhzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBpbnQgcmVwbHkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvYmZzX2ZzLmgKaW5kZXggYzEyMzdhYS4uOGVkNmRmZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmZzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9iZnNfZnMuaApAQCAtMjAsMTkgKzIwLDE5IEBACiAKIC8qIEJGUyBpbm9kZSBsYXlvdXQgb24gZGlzayAqLwogc3RydWN0IGJmc19pbm9kZSB7Ci0JX191MTYgaV9pbm87CisJX19sZTE2IGlfaW5vOwogCV9fdTE2IGlfdW51c2VkOwotCV9fdTMyIGlfc2Jsb2NrOwotCV9fdTMyIGlfZWJsb2NrOwotCV9fdTMyIGlfZW9mZnNldDsKLQlfX3UzMiBpX3Z0eXBlOwotCV9fdTMyIGlfbW9kZTsKLQlfX3MzMiBpX3VpZDsKLQlfX3MzMiBpX2dpZDsKLQlfX3UzMiBpX25saW5rOwotCV9fdTMyIGlfYXRpbWU7Ci0JX191MzIgaV9tdGltZTsKLQlfX3UzMiBpX2N0aW1lOworCV9fbGUzMiBpX3NibG9jazsKKwlfX2xlMzIgaV9lYmxvY2s7CisJX19sZTMyIGlfZW9mZnNldDsKKwlfX2xlMzIgaV92dHlwZTsKKwlfX2xlMzIgaV9tb2RlOworCV9fbGUzMiBpX3VpZDsKKwlfX2xlMzIgaV9naWQ7CisJX19sZTMyIGlfbmxpbms7CisJX19sZTMyIGlfYXRpbWU7CisJX19sZTMyIGlfbXRpbWU7CisJX19sZTMyIGlfY3RpbWU7CiAJX191MzIgaV9wYWRkaW5nWzRdOwogfTsKIApAQCAtNDEsMTcgKzQxLDE3IEBACiAjZGVmaW5lIEJGU19ESVJTX1BFUl9CTE9DSwkzMgogCiBzdHJ1Y3QgYmZzX2RpcmVudCB7Ci0JX191MTYgaW5vOworCV9fbGUxNiBpbm87CiAJY2hhciBuYW1lW0JGU19OQU1FTEVOXTsKIH07CiAKIC8qIEJGUyBzdXBlcmJsb2NrIGxheW91dCBvbiBkaXNrICovCiBzdHJ1Y3QgYmZzX3N1cGVyX2Jsb2NrIHsKLQlfX3UzMiBzX21hZ2ljOwotCV9fdTMyIHNfc3RhcnQ7Ci0JX191MzIgc19lbmQ7Ci0JX19zMzIgc19mcm9tOwotCV9fczMyIHNfdG87CisJX19sZTMyIHNfbWFnaWM7CisJX19sZTMyIHNfc3RhcnQ7CisJX19sZTMyIHNfZW5kOworCV9fbGUzMiBzX2Zyb207CisJX19sZTMyIHNfdG87CiAJX19zMzIgc19iZnJvbTsKIAlfX3MzMiBzX2J0bzsKIAljaGFyICBzX2ZzbmFtZVs2XTsKQEAgLTY2LDE1ICs2NiwxNSBAQAogI2RlZmluZSBCRlNfSU5PMk9GRihpbm8pIFwKIAkoKF9fdTMyKSgoKGlubykgLSBCRlNfUk9PVF9JTk8pICogc2l6ZW9mKHN0cnVjdCBiZnNfaW5vZGUpKSArIEJGU19CU0laRSkKICNkZWZpbmUgQkZTX05aRklMRVNJWkUoaXApIFwKLSAgICAgICAgKChjcHVfdG9fbGUzMigoaXApLT5pX2VvZmZzZXQpICsgMSkgLSAgY3B1X3RvX2xlMzIoKGlwKS0+aV9zYmxvY2spICogQkZTX0JTSVpFKQorICAgICAgICAoKGxlMzJfdG9fY3B1KChpcCktPmlfZW9mZnNldCkgKyAxKSAtICBsZTMyX3RvX2NwdSgoaXApLT5pX3NibG9jaykgKiBCRlNfQlNJWkUpCiAKICNkZWZpbmUgQkZTX0ZJTEVTSVpFKGlwKSBcCiAgICAgICAgICgoaXApLT5pX3NibG9jayA9PSAwID8gMCA6IEJGU19OWkZJTEVTSVpFKGlwKSkKIAogI2RlZmluZSBCRlNfRklMRUJMT0NLUyhpcCkgXAotICAgICAgICAoKGlwKS0+aV9zYmxvY2sgPT0gMCA/IDAgOiAoY3B1X3RvX2xlMzIoKGlwKS0+aV9lYmxvY2spICsgMSkgLSAgY3B1X3RvX2xlMzIoKGlwKS0+aV9zYmxvY2spKQorICAgICAgICAoKGlwKS0+aV9zYmxvY2sgPT0gMCA/IDAgOiAobGUzMl90b19jcHUoKGlwKS0+aV9lYmxvY2spICsgMSkgLSAgbGUzMl90b19jcHUoKGlwKS0+aV9zYmxvY2spKQogI2RlZmluZSBCRlNfVU5DTEVBTihiZnNfc2IsIHNiKQlcCi0JKChjcHVfdG9fbGUzMihiZnNfc2ItPnNfZnJvbSkgIT0gLTEpICYmIChjcHVfdG9fbGUzMihiZnNfc2ItPnNfdG8pICE9IC0xKSAmJiAhKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkKKwkoKGxlMzJfdG9fY3B1KGJmc19zYi0+c19mcm9tKSAhPSAtMSkgJiYgKGxlMzJfdG9fY3B1KGJmc19zYi0+c190bykgIT0gLTEpICYmICEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKQogCiAKICNlbmRpZgkvKiBfTElOVVhfQkZTX0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmlvLmggYi9pbmNsdWRlL2xpbnV4L2Jpby5oCmluZGV4IDZlMWM3OWMuLjMzNDRiNGU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jpby5oCisrKyBiL2luY2x1ZGUvbGludXgvYmlvLmgKQEAgLTI3Niw4ICsyNzYsOCBAQAogZXh0ZXJuIHN0cnVjdCBiaW9fc2V0ICpiaW9zZXRfY3JlYXRlKGludCwgaW50LCBpbnQpOwogZXh0ZXJuIHZvaWQgYmlvc2V0X2ZyZWUoc3RydWN0IGJpb19zZXQgKik7CiAKLWV4dGVybiBzdHJ1Y3QgYmlvICpiaW9fYWxsb2ModW5zaWduZWQgaW50IF9fbm9jYXN0LCBpbnQpOwotZXh0ZXJuIHN0cnVjdCBiaW8gKmJpb19hbGxvY19iaW9zZXQodW5zaWduZWQgaW50IF9fbm9jYXN0LCBpbnQsIHN0cnVjdCBiaW9fc2V0ICopOworZXh0ZXJuIHN0cnVjdCBiaW8gKmJpb19hbGxvYyhnZnBfdCwgaW50KTsKK2V4dGVybiBzdHJ1Y3QgYmlvICpiaW9fYWxsb2NfYmlvc2V0KGdmcF90LCBpbnQsIHN0cnVjdCBiaW9fc2V0ICopOwogZXh0ZXJuIHZvaWQgYmlvX3B1dChzdHJ1Y3QgYmlvICopOwogZXh0ZXJuIHZvaWQgYmlvX2ZyZWUoc3RydWN0IGJpbyAqLCBzdHJ1Y3QgYmlvX3NldCAqKTsKIApAQCAtMjg3LDcgKzI4Nyw3IEBACiBleHRlcm4gaW50IGJpb19od19zZWdtZW50cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBzdHJ1Y3QgYmlvICopOwogCiBleHRlcm4gdm9pZCBfX2Jpb19jbG9uZShzdHJ1Y3QgYmlvICosIHN0cnVjdCBiaW8gKik7Ci1leHRlcm4gc3RydWN0IGJpbyAqYmlvX2Nsb25lKHN0cnVjdCBiaW8gKiwgdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKK2V4dGVybiBzdHJ1Y3QgYmlvICpiaW9fY2xvbmUoc3RydWN0IGJpbyAqLCBnZnBfdCk7CiAKIGV4dGVybiB2b2lkIGJpb19pbml0KHN0cnVjdCBiaW8gKik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oIGIvaW5jbHVkZS9saW51eC9ib290bWVtLmgKaW5kZXggODJiZDg4NC4uM2IwM2IwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ib290bWVtLmgKKysrIGIvaW5jbHVkZS9saW51eC9ib290bWVtLmgKQEAgLTQzLDcgKzQzLDcgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9faW5pdCBib290bWVtX2Jvb3RtYXBfcGFnZXMgKHVuc2lnbmVkIGxvbmcpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pbml0IGluaXRfYm9vdG1lbSAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIG1lbWVuZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgZnJlZV9ib290bWVtICh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1leHRlcm4gdm9pZCAqIF9faW5pdCBfX2FsbG9jX2Jvb3RtZW0gKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbiwgdW5zaWduZWQgbG9uZyBnb2FsKTsKK2V4dGVybiB2b2lkICogX19pbml0IF9fYWxsb2NfYm9vdG1lbV9saW1pdCAodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLCB1bnNpZ25lZCBsb25nIGdvYWwsIHVuc2lnbmVkIGxvbmcgbGltaXQpOwogI2lmbmRlZiBDT05GSUdfSEFWRV9BUkNIX0JPT1RNRU1fTk9ERQogZXh0ZXJuIHZvaWQgX19pbml0IHJlc2VydmVfYm9vdG1lbSAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpOwogI2RlZmluZSBhbGxvY19ib290bWVtKHgpIFwKQEAgLTU0LDYgKzU0LDE2IEBACiAJX19hbGxvY19ib290bWVtKCh4KSwgUEFHRV9TSVpFLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpCiAjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKHgpIFwKIAlfX2FsbG9jX2Jvb3RtZW0oKHgpLCBQQUdFX1NJWkUsIDApCisKKyNkZWZpbmUgYWxsb2NfYm9vdG1lbV9saW1pdCh4LCBsaW1pdCkJCQkJCQlcCisJX19hbGxvY19ib290bWVtX2xpbWl0KCh4KSwgU01QX0NBQ0hFX0JZVEVTLCBfX3BhKE1BWF9ETUFfQUREUkVTUyksIChsaW1pdCkpCisjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fbG93X2xpbWl0KHgsIGxpbWl0KQkJCVwKKwlfX2FsbG9jX2Jvb3RtZW1fbGltaXQoKHgpLCBTTVBfQ0FDSEVfQllURVMsIDAsIChsaW1pdCkpCisjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fcGFnZXNfbGltaXQoeCwgbGltaXQpCQkJCQlcCisJX19hbGxvY19ib290bWVtX2xpbWl0KCh4KSwgUEFHRV9TSVpFLCBfX3BhKE1BWF9ETUFfQUREUkVTUyksIChsaW1pdCkpCisjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzX2xpbWl0KHgsIGxpbWl0KQkJXAorCV9fYWxsb2NfYm9vdG1lbV9saW1pdCgoeCksIFBBR0VfU0laRSwgMCwgKGxpbWl0KSkKKwogI2VuZGlmIC8qICFDT05GSUdfSEFWRV9BUkNIX0JPT1RNRU1fTk9ERSAqLwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pbml0IGZyZWVfYWxsX2Jvb3RtZW0gKHZvaWQpOwogCkBAIC02MSw3ICs3MSw3IEBACiBleHRlcm4gdm9pZCBfX2luaXQgcmVzZXJ2ZV9ib290bWVtX25vZGUgKHBnX2RhdGFfdCAqcGdkYXQsIHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBleHRlcm4gdm9pZCBfX2luaXQgZnJlZV9ib290bWVtX25vZGUgKHBnX2RhdGFfdCAqcGdkYXQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9faW5pdCBmcmVlX2FsbF9ib290bWVtX25vZGUgKHBnX2RhdGFfdCAqcGdkYXQpOwotZXh0ZXJuIHZvaWQgKiBfX2luaXQgX19hbGxvY19ib290bWVtX25vZGUgKHBnX2RhdGFfdCAqcGdkYXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbiwgdW5zaWduZWQgbG9uZyBnb2FsKTsKK2V4dGVybiB2b2lkICogX19pbml0IF9fYWxsb2NfYm9vdG1lbV9ub2RlX2xpbWl0IChwZ19kYXRhX3QgKnBnZGF0LCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZ29hbCwgdW5zaWduZWQgbG9uZyBsaW1pdCk7CiAjaWZuZGVmIENPTkZJR19IQVZFX0FSQ0hfQk9PVE1FTV9OT0RFCiAjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fbm9kZShwZ2RhdCwgeCkgXAogCV9fYWxsb2NfYm9vdG1lbV9ub2RlKChwZ2RhdCksICh4KSwgU01QX0NBQ0hFX0JZVEVTLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpCkBAIC02OSw2ICs3OSwxNCBAQAogCV9fYWxsb2NfYm9vdG1lbV9ub2RlKChwZ2RhdCksICh4KSwgUEFHRV9TSVpFLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpCiAjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzX25vZGUocGdkYXQsIHgpIFwKIAlfX2FsbG9jX2Jvb3RtZW1fbm9kZSgocGdkYXQpLCAoeCksIFBBR0VfU0laRSwgMCkKKworI2RlZmluZSBhbGxvY19ib290bWVtX25vZGVfbGltaXQocGdkYXQsIHgsIGxpbWl0KQkJCQlcCisJX19hbGxvY19ib290bWVtX25vZGVfbGltaXQoKHBnZGF0KSwgKHgpLCBTTVBfQ0FDSEVfQllURVMsIF9fcGEoTUFYX0RNQV9BRERSRVNTKSwgKGxpbWl0KSkKKyNkZWZpbmUgYWxsb2NfYm9vdG1lbV9wYWdlc19ub2RlX2xpbWl0KHBnZGF0LCB4LCBsaW1pdCkJCQkJXAorCV9fYWxsb2NfYm9vdG1lbV9ub2RlX2xpbWl0KChwZ2RhdCksICh4KSwgUEFHRV9TSVpFLCBfX3BhKE1BWF9ETUFfQUREUkVTUyksIChsaW1pdCkpCisjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzX25vZGVfbGltaXQocGdkYXQsIHgsIGxpbWl0KQkJXAorCV9fYWxsb2NfYm9vdG1lbV9ub2RlX2xpbWl0KChwZ2RhdCksICh4KSwgUEFHRV9TSVpFLCAwLCAobGltaXQpKQorCiAjZW5kaWYgLyogIUNPTkZJR19IQVZFX0FSQ0hfQk9PVE1FTV9OT0RFICovCiAKICNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0FMTE9DX1JFTUFQCkBAIC0xMDUsNSArMTIzLDE1IEBACiAjZW5kaWYKIGV4dGVybiBpbnQgX19pbml0ZGF0YSBoYXNoZGlzdDsJCS8qIERpc3RyaWJ1dGUgaGFzaGVzIGFjcm9zcyBOVU1BIG5vZGVzPyAqLwogCitzdGF0aWMgaW5saW5lIHZvaWQgKl9fYWxsb2NfYm9vdG1lbSAodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLCB1bnNpZ25lZCBsb25nIGdvYWwpCit7CisJcmV0dXJuIF9fYWxsb2NfYm9vdG1lbV9saW1pdChzaXplLCBhbGlnbiwgZ29hbCwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqX19hbGxvY19ib290bWVtX25vZGUgKHBnX2RhdGFfdCAqcGdkYXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbiwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZ29hbCkKK3sKKwlyZXR1cm4gX19hbGxvY19ib290bWVtX25vZGVfbGltaXQocGdkYXQsIHNpemUsIGFsaWduLCBnb2FsLCAwKTsKK30KIAogI2VuZGlmIC8qIF9MSU5VWF9CT09UTUVNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaCBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaAppbmRleCA5MDgyODQ5Li42YTFkMTU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgKKysrIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oCkBAIC0xNzIsNyArMTcyLDcgQEAKIHZvaWQgX19iZm9yZ2V0KHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKIHZvaWQgX19icmVhZGFoZWFkKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgc2VjdG9yX3QgYmxvY2ssIGludCBzaXplKTsKIHN0cnVjdCBidWZmZXJfaGVhZCAqX19icmVhZChzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIHNlY3Rvcl90IGJsb2NrLCBpbnQgc2l6ZSk7Ci1zdHJ1Y3QgYnVmZmVyX2hlYWQgKmFsbG9jX2J1ZmZlcl9oZWFkKHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfZmxhZ3MpOworc3RydWN0IGJ1ZmZlcl9oZWFkICphbGxvY19idWZmZXJfaGVhZChnZnBfdCBnZnBfZmxhZ3MpOwogdm9pZCBmcmVlX2J1ZmZlcl9oZWFkKHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoKTsKIHZvaWQgRkFTVENBTEwodW5sb2NrX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKSk7CiB2b2lkIEZBU1RDQUxMKF9fbG9ja19idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oIGIvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oCmluZGV4IDVmZGU2ZjQuLjA0YmQ3NTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9nZW5lcmljLmgKQEAgLTUsNiArNSwxMCBAQAogICogbGludXgvYnl0ZW9yZGVyX2dlbmVyaWMuaAogICogR2VuZXJpYyBCeXRlLXJlb3JkZXJpbmcgc3VwcG9ydAogICoKKyAqIFRoZSAiLi4uIHAiIG1hY3JvcywgbGlrZSBsZTY0X3RvX2NwdXAsIGNhbiBiZSB1c2VkIHdpdGggcG9pbnRlcnMKKyAqIHRvIHVuYWxpZ25lZCBkYXRhLCBidXQgdGhlcmUgd2lsbCBiZSBhIHBlcmZvcm1hbmNlIHBlbmFsdHkgb24gCisgKiBzb21lIGFyY2hpdGVjdHVyZXMuICBVc2UgZ2V0X3VuYWxpZ25lZCBmb3IgdW5hbGlnbmVkIGRhdGEuCisgKgogICogRnJhbmNvaXMtUmVuZSBSaWRlYXUgPGZhcmVAdHVuZXMub3JnPiAxOTk3MDcwNwogICogICAgZ2F0aGVyZWQgYWxsIHRoZSBnb29kIGlkZWFzIGZyb20gYWxsIGFzbS1mb28vYnl0ZW9yZGVyLmggaW50byBvbmUgZmlsZSwKICAqICAgIGNsZWFuZWQgdGhlbSB1cC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmggYi9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oCmluZGV4IDk2ZGUyNjMuLjk1OTUyY2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaApAQCAtMTA0LDEyICsxMDQsMTkgQEAKIAlzdHJ1Y3Qgc29jayAqbmxzOwogfTsKIAotc3RydWN0IGNuX2NhbGxiYWNrIHsKK3N0cnVjdCBjbl9jYWxsYmFja19pZCB7CiAJdW5zaWduZWQgY2hhciBuYW1lW0NOX0NCUV9OQU1FTEVOXTsKLQogCXN0cnVjdCBjYl9pZCBpZDsKK307CisKK3N0cnVjdCBjbl9jYWxsYmFja19kYXRhIHsKKwl2b2lkICgqZGVzdHJ1Y3RfZGF0YSkgKHZvaWQgKik7CisJdm9pZCAqZGRhdGE7CisJCisJdm9pZCAqY2FsbGJhY2tfcHJpdjsKIAl2b2lkICgqY2FsbGJhY2spICh2b2lkICopOwotCXZvaWQgKnByaXY7CisKKwl2b2lkICpmcmVlOwogfTsKIAogc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5IHsKQEAgLTExOCw4ICsxMjUsOCBAQAogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogCXN0cnVjdCBjbl9xdWV1ZV9kZXYgKnBkZXY7CiAKLQl2b2lkICgqZGVzdHJ1Y3RfZGF0YSkgKHZvaWQgKik7Ci0Jdm9pZCAqZGRhdGE7CisJc3RydWN0IGNuX2NhbGxiYWNrX2lkIGlkOworCXN0cnVjdCBjbl9jYWxsYmFja19kYXRhIGRhdGE7CiAKIAlpbnQgc2VxLCBncm91cDsKIAlzdHJ1Y3Qgc29jayAqbmxzOwpAQCAtMTQyLDkgKzE0OSw5IEBACiAKIGludCBjbl9hZGRfY2FsbGJhY2soc3RydWN0IGNiX2lkICosIGNoYXIgKiwgdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqKSk7CiB2b2lkIGNuX2RlbF9jYWxsYmFjayhzdHJ1Y3QgY2JfaWQgKik7Ci1pbnQgY25fbmV0bGlua19zZW5kKHN0cnVjdCBjbl9tc2cgKiwgdTMyLCBpbnQpOworaW50IGNuX25ldGxpbmtfc2VuZChzdHJ1Y3QgY25fbXNnICosIHUzMiwgZ2ZwX3QpOwogCi1pbnQgY25fcXVldWVfYWRkX2NhbGxiYWNrKHN0cnVjdCBjbl9xdWV1ZV9kZXYgKmRldiwgc3RydWN0IGNuX2NhbGxiYWNrICpjYik7CitpbnQgY25fcXVldWVfYWRkX2NhbGxiYWNrKHN0cnVjdCBjbl9xdWV1ZV9kZXYgKmRldiwgY2hhciAqbmFtZSwgc3RydWN0IGNiX2lkICppZCwgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICopKTsKIHZvaWQgY25fcXVldWVfZGVsX2NhbGxiYWNrKHN0cnVjdCBjbl9xdWV1ZV9kZXYgKmRldiwgc3RydWN0IGNiX2lkICppZCk7CiAKIHN0cnVjdCBjbl9xdWV1ZV9kZXYgKmNuX3F1ZXVlX2FsbG9jX2RldihjaGFyICpuYW1lLCBzdHJ1Y3Qgc29jayAqKTsKQEAgLTE1Miw2ICsxNTksOCBAQAogCiBpbnQgY25fY2JfZXF1YWwoc3RydWN0IGNiX2lkICosIHN0cnVjdCBjYl9pZCAqKTsKIAordm9pZCBjbl9xdWV1ZV93cmFwcGVyKHZvaWQgKmRhdGEpOworCiBleHRlcm4gaW50IGNuX2FscmVhZHlfaW5pdGlhbGl6ZWQ7CiAKICNlbmRpZgkJCQkvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdW1hc2suaCBiL2luY2x1ZGUvbGludXgvY3B1bWFzay5oCmluZGV4IGIxNTgyNmYuLjliZGJhODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3B1bWFzay5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1bWFzay5oCkBAIC0zOTIsNCArMzkyLDE0IEBACiAjZGVmaW5lIGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSAgZm9yX2VhY2hfY3B1X21hc2soKGNwdSksIGNwdV9vbmxpbmVfbWFwKQogI2RlZmluZSBmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpIGZvcl9lYWNoX2NwdV9tYXNrKChjcHUpLCBjcHVfcHJlc2VudF9tYXApCiAKKy8qIEZpbmQgdGhlIGhpZ2hlc3QgcG9zc2libGUgc21wX3Byb2Nlc3Nvcl9pZCgpICovCisjZGVmaW5lIGhpZ2hlc3RfcG9zc2libGVfcHJvY2Vzc29yX2lkKCkgXAorKHsgXAorCXVuc2lnbmVkIGludCBjcHUsIGhpZ2hlc3QgPSAwOyBcCisJZm9yX2VhY2hfY3B1X21hc2soY3B1LCBjcHVfcG9zc2libGVfbWFwKSBcCisJCWhpZ2hlc3QgPSBjcHU7IFwKKwloaWdoZXN0OyBcCit9KQorCisKICNlbmRpZiAvKiBfX0xJTlVYX0NQVU1BU0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcHVzZXQuaCBiL2luY2x1ZGUvbGludXgvY3B1c2V0LmgKaW5kZXggMjQwNjJhMS4uNmUyZGVlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcHVzZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NwdXNldC5oCkBAIC0yMyw3ICsyMyw3IEBACiB2b2lkIGNwdXNldF91cGRhdGVfY3VycmVudF9tZW1zX2FsbG93ZWQodm9pZCk7CiB2b2lkIGNwdXNldF9yZXN0cmljdF90b19tZW1zX2FsbG93ZWQodW5zaWduZWQgbG9uZyAqbm9kZXMpOwogaW50IGNwdXNldF96b25lbGlzdF92YWxpZF9tZW1zX2FsbG93ZWQoc3RydWN0IHpvbmVsaXN0ICp6bCk7Ci1leHRlcm4gaW50IGNwdXNldF96b25lX2FsbG93ZWQoc3RydWN0IHpvbmUgKnosIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzayk7CitleHRlcm4gaW50IGNwdXNldF96b25lX2FsbG93ZWQoc3RydWN0IHpvbmUgKnosIGdmcF90IGdmcF9tYXNrKTsKIGV4dGVybiBpbnQgY3B1c2V0X2V4Y2xfbm9kZXNfb3ZlcmxhcChjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19jcHVzZXRfb3BlcmF0aW9uczsKIGV4dGVybiBjaGFyICpjcHVzZXRfdGFza19zdGF0dXNfYWxsb3dlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNoYXIgKmJ1ZmZlcik7CkBAIC00OSw4ICs0OSw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGNwdXNldF96b25lX2FsbG93ZWQoc3RydWN0IHpvbmUgKnosCi0JCQkJCXVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaykKK3N0YXRpYyBpbmxpbmUgaW50IGNwdXNldF96b25lX2FsbG93ZWQoc3RydWN0IHpvbmUgKnosIGdmcF90IGdmcF9tYXNrKQogewogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kY2NwLmggYi9pbmNsdWRlL2xpbnV4L2RjY3AuaAppbmRleCA4YmY0YmFjLi43MWZhYjQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RjY3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RjY3AuaApAQCAtNCwxNiArNCw2IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKLS8qIFN0cnVjdHVyZSBkZXNjcmliaW5nIGFuIEludGVybmV0IChEQ0NQKSBzb2NrZXQgYWRkcmVzcy4gKi8KLXN0cnVjdCBzb2NrYWRkcl9kY2NwIHsKLQlfX3UxNglzZGNjcF9mYW1pbHk7CS8qIEFkZHJlc3MgZmFtaWx5ICAgKi8KLQlfX3UxNglzZGNjcF9wb3J0OwkvKiBQb3J0IG51bWJlcgkgICAgKi8KLQlfX3UzMglzZGNjcF9hZGRyOwkvKiBJbnRlcm5ldCBhZGRyZXNzICovCi0JX191MzIJc2RjY3Bfc2VydmljZTsJLyogU2VydmljZQkgICAgKi8KLQkvKiBQYWQgdG8gc2l6ZSBvZiBgc3RydWN0IHNvY2thZGRyJzogMTYgYnl0ZXMgLiAqLwotCV9fdTMyCXNkY2NwX3BhZDsKLX07Ci0KIC8qKgogICogc3RydWN0IGRjY3BfaGRyIC0gZ2VuZXJpYyBwYXJ0IG9mIERDQ1AgcGFja2V0IGhlYWRlcgogICoKQEAgLTE4OCw2ICsxNzgsMTEgQEAKIAogLyogRENDUCBzb2NrZXQgb3B0aW9ucyAqLwogI2RlZmluZSBEQ0NQX1NPQ0tPUFRfUEFDS0VUX1NJWkUJMQorI2RlZmluZSBEQ0NQX1NPQ0tPUFRfU0VSVklDRQkJMgorI2RlZmluZSBEQ0NQX1NPQ0tPUFRfQ0NJRF9SWF9JTkZPCTEyOAorI2RlZmluZSBEQ0NQX1NPQ0tPUFRfQ0NJRF9UWF9JTkZPCTE5MgorCisjZGVmaW5lIERDQ1BfU0VSVklDRV9MSVNUX01BWF9MRU4gICAgICAzMgogCiAjaWZkZWYgX19LRVJORUxfXwogCkBAIC0zMzcsNyArMzMyLDggQEAKICAgKi8KIHN0cnVjdCBkY2NwX29wdGlvbnMgewogCV9fdTY0CWRjY3BvX3NlcXVlbmNlX3dpbmRvdzsKLQlfX3U4CWRjY3BvX2NjaWQ7CisJX191OAlkY2Nwb19yeF9jY2lkOworCV9fdTgJZGNjcG9fdHhfY2NpZDsKIAlfX3U4CWRjY3BvX3NlbmRfYWNrX3ZlY3RvcjsKIAlfX3U4CWRjY3BvX3NlbmRfbmRwX2NvdW50OwogfTsKQEAgLTM2MCwxNCArMzU2LDggQEAKIAogZXh0ZXJuIHN0cnVjdCBpbmV0X3RpbWV3YWl0X2RlYXRoX3JvdyBkY2NwX2RlYXRoX3JvdzsKIAotLyogUmVhZCBhYm91dCB0aGUgRUNOIG5vbmNlIHRvIHNlZSB3aHkgaXQgaXMgMjUzICovCi0jZGVmaW5lIERDQ1BfTUFYX0FDS19WRUNUT1JfTEVOIDI1MwotCiBzdHJ1Y3QgZGNjcF9vcHRpb25zX3JlY2VpdmVkIHsKLQl1MzIJZGNjcG9yX25kcDoyNCwKLQkJZGNjcG9yX2Fja192ZWN0b3JfbGVuOjg7Ci0JdTMyCWRjY3Bvcl9hY2tfdmVjdG9yX2lkeDoxMDsKLQkvKiAyMiBiaXRzIGhvbGUsIHRyeSB0byBwYWNrICovCisJdTMyCWRjY3Bvcl9uZHA7IC8qIG9ubHkgMjQgYml0cyAqLwogCXUzMglkY2Nwb3JfdGltZXN0YW1wOwogCXUzMglkY2Nwb3JfdGltZXN0YW1wX2VjaG87CiAJdTMyCWRjY3Bvcl9lbGFwc2VkX3RpbWU7CkBAIC0zODIsNiArMzcyLDI3IEBACiAJRENDUF9ST0xFX1NFUlZFUiwKIH07CiAKK3N0cnVjdCBkY2NwX3NlcnZpY2VfbGlzdCB7CisJX191MzIJZGNjcHNsX25yOworCV9fdTMyCWRjY3BzbF9saXN0WzBdOworfTsKKworI2RlZmluZSBEQ0NQX1NFUlZJQ0VfSU5WQUxJRF9WQUxVRSBodG9ubCgoX191MzIpLTEpCisKK3N0YXRpYyBpbmxpbmUgaW50IGRjY3BfbGlzdF9oYXNfc2VydmljZShjb25zdCBzdHJ1Y3QgZGNjcF9zZXJ2aWNlX2xpc3QgKnNsLAorCQkJCQljb25zdCB1MzIgc2VydmljZSkKK3sKKwlpZiAobGlrZWx5KHNsICE9IE5VTEwpKSB7CisJCXUzMiBpID0gc2wtPmRjY3BzbF9ucjsKKwkJd2hpbGUgKGktLSkKKwkJCWlmIChzbC0+ZGNjcHNsX2xpc3RbaV0gPT0gc2VydmljZSkKKwkJCQlyZXR1cm4gMTsgCisJfQorCXJldHVybiAwOworfQorCitzdHJ1Y3QgZGNjcF9hY2t2ZWM7CisKIC8qKgogICogc3RydWN0IGRjY3Bfc29jayAtIERDQ1Agc29ja2V0IHN0YXRlCiAgKgpAQCAtNDAyLDcgKzQxMyw3IEBACiAgKiBAZGNjcHNfcGFja2V0X3NpemUgLSBTZXQgdGhydSBzZXRzb2Nrb3B0CiAgKiBAZGNjcHNfcm9sZSAtIFJvbGUgb2YgdGhpcyBzb2NrLCBvbmUgb2YgJWRjY3Bfcm9sZQogICogQGRjY3BzX25kcF9jb3VudCAtIG51bWJlciBvZiBOb24gRGF0YSBQYWNrZXRzIHNpbmNlIGxhc3QgZGF0YSBwYWNrZXQKLSAqIEBkY2Nwc19oY19yeF9hY2twa3RzIC0gcmVjZWl2ZXIgaGFsZiBjb25uZWN0aW9uIGFja2VkIHBhY2tldHMKKyAqIEBkY2Nwc19oY19yeF9hY2t2ZWMgLSByeCBoYWxmIGNvbm5lY3Rpb24gYWNrIHZlY3RvcgogICovCiBzdHJ1Y3QgZGNjcF9zb2NrIHsKIAkvKiBpbmV0X2Nvbm5lY3Rpb25fc29jayBoYXMgdG8gYmUgdGhlIGZpcnN0IG1lbWJlciBvZiBkY2NwX3NvY2sgKi8KQEAgLTQxNyw3ICs0MjgsOCBAQAogCV9fdTY0CQkJCWRjY3BzX2dzczsKIAlfX3U2NAkJCQlkY2Nwc19nc3I7CiAJX191NjQJCQkJZGNjcHNfZ2FyOwotCXVuc2lnbmVkIGxvbmcJCQlkY2Nwc19zZXJ2aWNlOworCV9fdTMyCQkJCWRjY3BzX3NlcnZpY2U7CisJc3RydWN0IGRjY3Bfc2VydmljZV9saXN0CSpkY2Nwc19zZXJ2aWNlX2xpc3Q7CiAJc3RydWN0IHRpbWV2YWwJCQlkY2Nwc190aW1lc3RhbXBfdGltZTsKIAlfX3UzMgkJCQlkY2Nwc190aW1lc3RhbXBfZWNobzsKIAlfX3UzMgkJCQlkY2Nwc19wYWNrZXRfc2l6ZTsKQEAgLTQyNiw3ICs0MzgsNyBAQAogCV9fdTMyCQkJCWRjY3BzX3BtdHVfY29va2llOwogCV9fdTMyCQkJCWRjY3BzX21zc19jYWNoZTsKIAlzdHJ1Y3QgZGNjcF9vcHRpb25zCQlkY2Nwc19vcHRpb25zOwotCXN0cnVjdCBkY2NwX2Fja3BrdHMJCSpkY2Nwc19oY19yeF9hY2twa3RzOworCXN0cnVjdCBkY2NwX2Fja3ZlYwkJKmRjY3BzX2hjX3J4X2Fja3ZlYzsKIAl2b2lkCQkJCSpkY2Nwc19oY19yeF9jY2lkX3ByaXZhdGU7CiAJdm9pZAkJCQkqZGNjcHNfaGNfdHhfY2NpZF9wcml2YXRlOwogCXN0cnVjdCBjY2lkCQkJKmRjY3BzX2hjX3J4X2NjaWQ7CkBAIC00NDMsNiArNDU1LDExIEBACiAJcmV0dXJuIChzdHJ1Y3QgZGNjcF9zb2NrICopc2s7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGRjY3Bfc2VydmljZV9ub3RfaW5pdGlhbGl6ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQoreworCXJldHVybiBkY2NwX3NrKHNrKS0+ZGNjcHNfc2VydmljZSA9PSBEQ0NQX1NFUlZJQ0VfSU5WQUxJRF9WQUxVRTsKK30KKwogc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpkY2NwX3JvbGUoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQogewogCXN3aXRjaCAoZGNjcF9zayhzayktPmRjY3BzX3JvbGUpIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCmluZGV4IDA2ZTVkNDIuLjk1ZDYwN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaApAQCAtMzE3LDYgKzMxNywxMSBAQAogCWRldi0+ZHJpdmVyX2RhdGEgPSBkYXRhOwogfQogCitzdGF0aWMgaW5saW5lIGludCBkZXZpY2VfaXNfcmVnaXN0ZXJlZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGtsaXN0X25vZGVfYXR0YWNoZWQoJmRldi0+a25vZGVfYnVzKTsKK30KKwogLyoKICAqIEhpZ2ggbGV2ZWwgcm91dGluZXMgZm9yIHVzZSBieSB0aGUgYnVzIGRyaXZlcnMKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWFwb29sLmggYi9pbmNsdWRlL2xpbnV4L2RtYXBvb2wuaAppbmRleCA0OTMyZWU1Li43NmYxMmY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtYXBvb2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtYXBvb2wuaApAQCAtMTksNyArMTksNyBAQAogCiB2b2lkIGRtYV9wb29sX2Rlc3Ryb3koc3RydWN0IGRtYV9wb29sICpwb29sKTsKIAotdm9pZCAqZG1hX3Bvb2xfYWxsb2Moc3RydWN0IGRtYV9wb29sICpwb29sLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgbWVtX2ZsYWdzLAordm9pZCAqZG1hX3Bvb2xfYWxsb2Moc3RydWN0IGRtYV9wb29sICpwb29sLCBnZnBfdCBtZW1fZmxhZ3MsCiAJCSAgICAgZG1hX2FkZHJfdCAqaGFuZGxlKTsKIAogdm9pZCBkbWFfcG9vbF9mcmVlKHN0cnVjdCBkbWFfcG9vbCAqcG9vbCwgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgYWRkcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmcC5oIGIvaW5jbHVkZS9saW51eC9nZnAuaAppbmRleCA0ZGM5OTBmLi4zMDEwZTE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dmcC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKQEAgLTg1LDkgKzg1LDkgQEAKICNlbmRpZgogCiBleHRlcm4gc3RydWN0IHBhZ2UgKgotRkFTVENBTEwoX19hbGxvY19wYWdlcyh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgc3RydWN0IHpvbmVsaXN0ICopKTsKK0ZBU1RDQUxMKF9fYWxsb2NfcGFnZXMoZ2ZwX3QsIHVuc2lnbmVkIGludCwgc3RydWN0IHpvbmVsaXN0ICopKTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbm9kZShpbnQgbmlkLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX21hc2ssCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICphbGxvY19wYWdlc19ub2RlKGludCBuaWQsIGdmcF90IGdmcF9tYXNrLAogCQkJCQkJdW5zaWduZWQgaW50IG9yZGVyKQogewogCWlmICh1bmxpa2VseShvcmRlciA+PSBNQVhfT1JERVIpKQpAQCAtOTgsMTcgKzk4LDE3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfTlVNQQotZXh0ZXJuIHN0cnVjdCBwYWdlICphbGxvY19wYWdlc19jdXJyZW50KHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaywgdW5zaWduZWQgb3JkZXIpOworZXh0ZXJuIHN0cnVjdCBwYWdlICphbGxvY19wYWdlc19jdXJyZW50KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBvcmRlcik7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKgotYWxsb2NfcGFnZXModW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpCithbGxvY19wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKQogewogCWlmICh1bmxpa2VseShvcmRlciA+PSBNQVhfT1JERVIpKQogCQlyZXR1cm4gTlVMTDsKIAogCXJldHVybiBhbGxvY19wYWdlc19jdXJyZW50KGdmcF9tYXNrLCBvcmRlcik7CiB9Ci1leHRlcm4gc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2Vfdm1hKHVuc2lnbmVkIF9fbm9jYXN0IGdmcF9tYXNrLAorZXh0ZXJuIHN0cnVjdCBwYWdlICphbGxvY19wYWdlX3ZtYShnZnBfdCBnZnBfbWFzaywKIAkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpOwogI2Vsc2UKICNkZWZpbmUgYWxsb2NfcGFnZXMoZ2ZwX21hc2ssIG9yZGVyKSBcCkBAIC0xMTcsOCArMTE3LDggQEAKICNlbmRpZgogI2RlZmluZSBhbGxvY19wYWdlKGdmcF9tYXNrKSBhbGxvY19wYWdlcyhnZnBfbWFzaywgMCkKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgRkFTVENBTEwoX19nZXRfZnJlZV9wYWdlcyh1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcikpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgRkFTVENBTEwoZ2V0X3plcm9lZF9wYWdlKHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaykpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgRkFTVENBTEwoX19nZXRfZnJlZV9wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBGQVNUQ0FMTChnZXRfemVyb2VkX3BhZ2UoZ2ZwX3QgZ2ZwX21hc2spKTsKIAogI2RlZmluZSBfX2dldF9mcmVlX3BhZ2UoZ2ZwX21hc2spIFwKIAkJX19nZXRfZnJlZV9wYWdlcygoZ2ZwX21hc2spLDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCmluZGV4IGU2NzBiMGQuLmQ2NjQzMzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCisrKyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCkBAIC0yNSw2ICsyNSw4IEBACiB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfdG90YWxfcGFnZXModm9pZCk7CiBzdHJ1Y3QgcGFnZSAqYWxsb2NfaHVnZV9wYWdlKHZvaWQpOwogdm9pZCBmcmVlX2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZSAqKTsKK2ludCBodWdldGxiX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IHdyaXRlX2FjY2Vzcyk7CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIG1heF9odWdlX3BhZ2VzOwogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGxvbmcgaHVnZXRsYl96ZXJvLCBodWdldGxiX2luZmluaXR5OwpAQCAtOTksNiArMTAxLDcgQEAKIAkJCQkJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYWxsb2NfaHVnZV9wYWdlKCkJCQkoeyBOVUxMOyB9KQogI2RlZmluZSBmcmVlX2h1Z2VfcGFnZShwKQkJCSh7ICh2b2lkKShwKTsgQlVHKCk7IH0pCisjZGVmaW5lIGh1Z2V0bGJfZmF1bHQobW0sIHZtYSwgYWRkciwgd3JpdGUpCSh7IEJVRygpOyAwOyB9KQogCiAjaWZuZGVmIEhQQUdFX01BU0sKICNkZWZpbmUgSFBBR0VfTUFTSwkwCQkvKiBLZWVwIHRoZSBjb21waWxlciBoYXBweSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMuaCBiL2luY2x1ZGUvbGludXgvaTJjLmgKaW5kZXggYmUzNTMzMi4uM2Q0OWEzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy5oCkBAIC0yMzAsMTEgKzIzMCw2IEBACiAJc3RydWN0IGRldmljZSBkZXY7CQkvKiB0aGUgYWRhcHRlciBkZXZpY2UgKi8KIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlIGNsYXNzX2RldjsJLyogdGhlIGNsYXNzIGRldmljZSAqLwogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMgCi0JLyogTm8gbmVlZCB0byBzZXQgdGhpcyB3aGVuIHlvdSBpbml0aWFsaXplIHRoZSBhZGFwdGVyICAgICAgICAgICovCi0JaW50IGlub2RlOwotI2VuZGlmIC8qIGRlZiBDT05GSUdfUFJPQ19GUyAqLwotCiAJaW50IG5yOwogCXN0cnVjdCBsaXN0X2hlYWQgY2xpZW50czsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lkci5oIGIvaW5jbHVkZS9saW51eC9pZHIuaAppbmRleCBjYTNiN2U0Li4zZDVkZTQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lkci5oCisrKyBiL2luY2x1ZGUvbGludXgvaWRyLmgKQEAgLTc1LDQgKzc1LDUgQEAKIGludCBpZHJfZ2V0X25ldyhzdHJ1Y3QgaWRyICppZHAsIHZvaWQgKnB0ciwgaW50ICppZCk7CiBpbnQgaWRyX2dldF9uZXdfYWJvdmUoc3RydWN0IGlkciAqaWRwLCB2b2lkICpwdHIsIGludCBzdGFydGluZ19pZCwgaW50ICppZCk7CiB2b2lkIGlkcl9yZW1vdmUoc3RydWN0IGlkciAqaWRwLCBpbnQgaWQpOwordm9pZCBpZHJfZGVzdHJveShzdHJ1Y3QgaWRyICppZHApOwogdm9pZCBpZHJfaW5pdChzdHJ1Y3QgaWRyICppZHApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oIGIvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oCmluZGV4IGZjMmQ0YzguLmQyMWMzMDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmgKQEAgLTExMSw3ICsxMTEsOSBAQAogCXJldHVybiAoc3RydWN0IGV0aGhkciAqKXNrYi0+bWFjLnJhdzsKIH0KIAorI2lmZGVmIENPTkZJR19TWVNDVEwKIGV4dGVybiBzdHJ1Y3QgY3RsX3RhYmxlIGV0aGVyX3RhYmxlW107CiAjZW5kaWYKKyNlbmRpZgogCiAjZW5kaWYJLyogX0xJTlVYX0lGX0VUSEVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oIGIvaW5jbHVkZS9saW51eC9pZl92bGFuLmgKaW5kZXggMTdkMGMwZC4uZWVmMDg3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl92bGFuLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl92bGFuLmgKQEAgLTQyLDggKzQyLDggQEAKIHN0cnVjdCB2bGFuX2V0aGhkciB7CiAgICB1bnNpZ25lZCBjaGFyCWhfZGVzdFtFVEhfQUxFTl07CSAgIC8qIGRlc3RpbmF0aW9uIGV0aCBhZGRyCSovCiAgICB1bnNpZ25lZCBjaGFyCWhfc291cmNlW0VUSF9BTEVOXTsJICAgLyogc291cmNlIGV0aGVyIGFkZHIJKi8KLSAgIHVuc2lnbmVkIHNob3J0ICAgICAgIGhfdmxhbl9wcm90bzsgICAgICAgICAgICAgIC8qIFNob3VsZCBhbHdheXMgYmUgMHg4MTAwICovCi0gICB1bnNpZ25lZCBzaG9ydCAgICAgICBoX3ZsYW5fVENJOyAgICAgICAgICAgICAgICAvKiBFbmNhcHN1bGF0ZXMgcHJpb3JpdHkgYW5kIFZMQU4gSUQgKi8KKyAgIF9fYmUxNiAgICAgICAgICAgICAgIGhfdmxhbl9wcm90bzsgICAgICAgICAgICAgIC8qIFNob3VsZCBhbHdheXMgYmUgMHg4MTAwICovCisgICBfX2JlMTYgICAgICAgICAgICAgICBoX3ZsYW5fVENJOyAgICAgICAgICAgICAgICAvKiBFbmNhcHN1bGF0ZXMgcHJpb3JpdHkgYW5kIFZMQU4gSUQgKi8KICAgIHVuc2lnbmVkIHNob3J0CWhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87IC8qIHBhY2tldCB0eXBlIElEIGZpZWxkIChvciBsZW4pICovCiB9OwogCkBAIC01NSw4ICs1NSw4IEBACiB9CiAKIHN0cnVjdCB2bGFuX2hkciB7Ci0gICB1bnNpZ25lZCBzaG9ydCAgICAgICBoX3ZsYW5fVENJOyAgICAgICAgICAgICAgICAvKiBFbmNhcHN1bGF0ZXMgcHJpb3JpdHkgYW5kIFZMQU4gSUQgKi8KLSAgIHVuc2lnbmVkIHNob3J0ICAgICAgIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87IC8qIHBhY2tldCB0eXBlIElEIGZpZWxkIChvciBsZW4pICovCisgICBfX2JlMTYgICAgICAgICAgICAgICBoX3ZsYW5fVENJOyAgICAgICAgICAgICAgICAvKiBFbmNhcHN1bGF0ZXMgcHJpb3JpdHkgYW5kIFZMQU4gSUQgKi8KKyAgIF9fYmUxNiAgICAgICAgICAgICAgIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87IC8qIHBhY2tldCB0eXBlIElEIGZpZWxkIChvciBsZW4pICovCiB9OwogCiAjZGVmaW5lIFZMQU5fVklEX01BU0sJMHhmZmYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgKaW5kZXggN2UxZTE1Zi4uZmQ3YWY4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgKQEAgLTE0MiwxMyArMTQyLDIxIEBACiAKICNkZWZpbmUgZW5kZm9yX2lmYShpbl9kZXYpIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5fZGV2aWNlICpfX2luX2Rldl9nZXRfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gZGV2LT5pcF9wdHI7CisJaWYgKGluX2RldikKKwkJaW5fZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGluX2Rldik7CisJcmV0dXJuIGluX2RldjsKK30KKwogc3RhdGljIF9faW5saW5lX18gc3RydWN0IGluX2RldmljZSAqCiBpbl9kZXZfZ2V0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCiAJcmN1X3JlYWRfbG9jaygpOwotCWluX2RldiA9IGRldi0+aXBfcHRyOworCWluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTsKIAlpZiAoaW5fZGV2KQogCQlhdG9taWNfaW5jKCZpbl9kZXYtPnJlZmNudCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CkBAIC0xNTYsNyArMTY0LDcgQEAKIH0KIAogc3RhdGljIF9faW5saW5lX18gc3RydWN0IGluX2RldmljZSAqCi1fX2luX2Rldl9nZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK19faW5fZGV2X2dldF9ydG5sKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIChzdHJ1Y3QgaW5fZGV2aWNlKilkZXYtPmlwX3B0cjsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXB2Ni5oIGIvaW5jbHVkZS9saW51eC9pcHY2LmgKaW5kZXggYmI2Zjg4ZS4uZTBiOTIyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcHY2LmgKKysrIGIvaW5jbHVkZS9saW51eC9pcHY2LmgKQEAgLTM3Miw4ICszNzIsOSBAQAogI2RlZmluZSBpbmV0X3Y2X2lwdjZvbmx5KF9fc2spCQkwCiAjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpICovCiAKLSNkZWZpbmUgSU5FVDZfTUFUQ0goX19zaywgX19zYWRkciwgX19kYWRkciwgX19wb3J0cywgX19kaWYpCSAgIFwKLQkoKCgqKChfX3UzMiAqKSYoaW5ldF9zayhfX3NrKS0+ZHBvcnQpKSkgPT0gKF9fcG9ydHMpKSAgCSYmIFwKKyNkZWZpbmUgSU5FVDZfTUFUQ0goX19zaywgX19oYXNoLCBfX3NhZGRyLCBfX2RhZGRyLCBfX3BvcnRzLCBfX2RpZilcCisJKCgoX19zayktPnNrX2hhc2ggPT0gKF9faGFzaCkpCQkJCSYmIFwKKwkgKCgqKChfX3UzMiAqKSYoaW5ldF9zayhfX3NrKS0+ZHBvcnQpKSkgPT0gKF9fcG9ydHMpKSAgCSYmIFwKIAkgKChfX3NrKS0+c2tfZmFtaWx5CQk9PSBBRl9JTkVUNikJCSYmIFwKIAkgaXB2Nl9hZGRyX2VxdWFsKCZpbmV0Nl9zayhfX3NrKS0+ZGFkZHIsIChfX3NhZGRyKSkJJiYgXAogCSBpcHY2X2FkZHJfZXF1YWwoJmluZXQ2X3NrKF9fc2spLT5yY3Zfc2FkZHIsIChfX2RhZGRyKSkJJiYgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qYmQuaCBiL2luY2x1ZGUvbGludXgvamJkLmgKaW5kZXggZGUwOTcyNi4uZmY4NTNiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qYmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2piZC5oCkBAIC05MzUsNyArOTM1LDcgQEAKICAqLwogZXh0ZXJuIGttZW1fY2FjaGVfdCAqamJkX2hhbmRsZV9jYWNoZTsKIAotc3RhdGljIGlubGluZSBoYW5kbGVfdCAqamJkX2FsbG9jX2hhbmRsZSh1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX2ZsYWdzKQorc3RhdGljIGlubGluZSBoYW5kbGVfdCAqamJkX2FsbG9jX2hhbmRsZShnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MoamJkX2hhbmRsZV9jYWNoZSwgZ2ZwX2ZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvam95c3RpY2suaCBiL2luY2x1ZGUvbGludXgvam95c3RpY2suaAppbmRleCAwNmI5YWY3Li41ZmQyMGRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2pveXN0aWNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9qb3lzdGljay5oCkBAIC0xMTEsMjkgKzExMSwzMCBAQAogI2RlZmluZSBKU19TRVRfQUxMCQk4CiAKIHN0cnVjdCBKU19EQVRBX1RZUEUgewotCV9fczMyIGJ1dHRvbnM7Ci0JX19zMzIgeDsKLQlfX3MzMiB5OworCWludDMyX3QgYnV0dG9uczsKKwlpbnQzMl90IHg7CisJaW50MzJfdCB5OwogfTsKIAogc3RydWN0IEpTX0RBVEFfU0FWRV9UWVBFXzMyIHsKLQlfX3MzMiBKU19USU1FT1VUOwotCV9fczMyIEJVU1k7Ci0JX19zMzIgSlNfRVhQSVJFVElNRTsKLQlfX3MzMiBKU19USU1FTElNSVQ7CisJaW50MzJfdCBKU19USU1FT1VUOworCWludDMyX3QgQlVTWTsKKwlpbnQzMl90IEpTX0VYUElSRVRJTUU7CisJaW50MzJfdCBKU19USU1FTElNSVQ7CiAJc3RydWN0IEpTX0RBVEFfVFlQRSBKU19TQVZFOwogCXN0cnVjdCBKU19EQVRBX1RZUEUgSlNfQ09SUjsKIH07CiAKIHN0cnVjdCBKU19EQVRBX1NBVkVfVFlQRV82NCB7Ci0JX19zMzIgSlNfVElNRU9VVDsKLQlfX3MzMiBCVVNZOwotCV9fczY0IEpTX0VYUElSRVRJTUU7Ci0JX19zNjQgSlNfVElNRUxJTUlUOworCWludDMyX3QgSlNfVElNRU9VVDsKKwlpbnQzMl90IEJVU1k7CisJaW50NjRfdCBKU19FWFBJUkVUSU1FOworCWludDY0X3QgSlNfVElNRUxJTUlUOwogCXN0cnVjdCBKU19EQVRBX1RZUEUgSlNfU0FWRTsKIAlzdHJ1Y3QgSlNfREFUQV9UWVBFIEpTX0NPUlI7CiB9OwogCisjaWZkZWYgX19LRVJORUxfXwogI2lmIEJJVFNfUEVSX0xPTkcgPT0gNjQKICNkZWZpbmUgSlNfREFUQV9TQVZFX1RZUEUgSlNfREFUQV9TQVZFX1RZUEVfNjQKICNlbGlmIEJJVFNfUEVSX0xPTkcgPT0gMzIKQEAgLTE0MSw1ICsxNDIsNiBAQAogI2Vsc2UKICNlcnJvciBVbmV4cGVjdGVkIEJJVFNfUEVSX0xPTkcKICNlbmRpZgorI2VuZGlmCiAKICNlbmRpZiAvKiBfTElOVVhfSk9ZU1RJQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXktdWkuaCBiL2luY2x1ZGUvbGludXgva2V5LXVpLmgKaW5kZXggY2MzMjYxNy4uN2EyZTMzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXktdWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tleS11aS5oCkBAIC0zOCw5MiArMzgsMjEgQEAKIAlzdHJ1Y3Qga2V5CSprZXlzWzBdOwogfTsKIAotCiAvKgogICogY2hlY2sgdG8gc2VlIHdoZXRoZXIgcGVybWlzc2lvbiBpcyBncmFudGVkIHRvIHVzZSBhIGtleSBpbiB0aGUgZGVzaXJlZCB3YXkKICAqLwotc3RhdGljIGlubGluZSBpbnQga2V5X3Blcm1pc3Npb24oY29uc3Qgc3RydWN0IGtleSAqa2V5LCBrZXlfcGVybV90IHBlcm0pCitleHRlcm4gaW50IGtleV90YXNrX3Blcm1pc3Npb24oY29uc3Qga2V5X3JlZl90IGtleV9yZWYsCisJCQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpjb250ZXh0LAorCQkJICAgICAgIGtleV9wZXJtX3QgcGVybSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGtleV9wZXJtaXNzaW9uKGNvbnN0IGtleV9yZWZfdCBrZXlfcmVmLCBrZXlfcGVybV90IHBlcm0pCiB7Ci0Ja2V5X3Blcm1fdCBrcGVybTsKLQotCWlmIChrZXktPnVpZCA9PSBjdXJyZW50LT5mc3VpZCkKLQkJa3Blcm0gPSBrZXktPnBlcm0gPj4gMTY7Ci0JZWxzZSBpZiAoa2V5LT5naWQgIT0gLTEgJiYKLQkJIGtleS0+cGVybSAmIEtFWV9HUlBfQUxMICYmCi0JCSBpbl9ncm91cF9wKGtleS0+Z2lkKQotCQkgKQotCQlrcGVybSA9IGtleS0+cGVybSA+PiA4OwotCWVsc2UKLQkJa3Blcm0gPSBrZXktPnBlcm07Ci0KLQlrcGVybSA9IGtwZXJtICYgcGVybSAmIEtFWV9BTEw7Ci0KLQlyZXR1cm4ga3Blcm0gPT0gcGVybTsKKwlyZXR1cm4ga2V5X3Rhc2tfcGVybWlzc2lvbihrZXlfcmVmLCBjdXJyZW50LCBwZXJtKTsKIH0KIAotLyoKLSAqIGNoZWNrIHRvIHNlZSB3aGV0aGVyIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byB1c2UgYSBrZXkgaW4gYXQgbGVhc3Qgb25lIG9mCi0gKiB0aGUgZGVzaXJlZCB3YXlzCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGtleV9hbnlfcGVybWlzc2lvbihjb25zdCBzdHJ1Y3Qga2V5ICprZXksIGtleV9wZXJtX3QgcGVybSkKLXsKLQlrZXlfcGVybV90IGtwZXJtOwotCi0JaWYgKGtleS0+dWlkID09IGN1cnJlbnQtPmZzdWlkKQotCQlrcGVybSA9IGtleS0+cGVybSA+PiAxNjsKLQllbHNlIGlmIChrZXktPmdpZCAhPSAtMSAmJgotCQkga2V5LT5wZXJtICYgS0VZX0dSUF9BTEwgJiYKLQkJIGluX2dyb3VwX3Aoa2V5LT5naWQpCi0JCSApCi0JCWtwZXJtID0ga2V5LT5wZXJtID4+IDg7Ci0JZWxzZQotCQlrcGVybSA9IGtleS0+cGVybTsKLQotCWtwZXJtID0ga3Blcm0gJiBwZXJtICYgS0VZX0FMTDsKLQotCXJldHVybiBrcGVybSAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBrZXlfdGFza19ncm91cHNfc2VhcmNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBnaWRfdCBnaWQpCi17Ci0JaW50IHJldDsKLQotCXRhc2tfbG9jayh0c2spOwotCXJldCA9IGdyb3Vwc19zZWFyY2godHNrLT5ncm91cF9pbmZvLCBnaWQpOwotCXRhc2tfdW5sb2NrKHRzayk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQga2V5X3Rhc2tfcGVybWlzc2lvbihjb25zdCBzdHJ1Y3Qga2V5ICprZXksCi0JCQkJICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpjb250ZXh0LAotCQkJCSAgICAgIGtleV9wZXJtX3QgcGVybSkKLXsKLQlrZXlfcGVybV90IGtwZXJtOwotCi0JaWYgKGtleS0+dWlkID09IGNvbnRleHQtPmZzdWlkKSB7Ci0JCWtwZXJtID0ga2V5LT5wZXJtID4+IDE2OwotCX0KLQllbHNlIGlmIChrZXktPmdpZCAhPSAtMSAmJgotCQkga2V5LT5wZXJtICYgS0VZX0dSUF9BTEwgJiYgKAotCQkJIGtleS0+Z2lkID09IGNvbnRleHQtPmZzZ2lkIHx8Ci0JCQkga2V5X3Rhc2tfZ3JvdXBzX3NlYXJjaChjb250ZXh0LCBrZXktPmdpZCkKLQkJCSApCi0JCSApIHsKLQkJa3Blcm0gPSBrZXktPnBlcm0gPj4gODsKLQl9Ci0JZWxzZSB7Ci0JCWtwZXJtID0ga2V5LT5wZXJtOwotCX0KLQotCWtwZXJtID0ga3Blcm0gJiBwZXJtICYgS0VZX0FMTDsKLQotCXJldHVybiBrcGVybSA9PSBwZXJtOwotCi19Ci0KLWV4dGVybiBzdHJ1Y3Qga2V5ICpsb29rdXBfdXNlcl9rZXkoc3RydWN0IHRhc2tfc3RydWN0ICpjb250ZXh0LAotCQkJCSAgIGtleV9zZXJpYWxfdCBpZCwgaW50IGNyZWF0ZSwgaW50IHBhcnRpYWwsCi0JCQkJICAga2V5X3Blcm1fdCBwZXJtKTsKK2V4dGVybiBrZXlfcmVmX3QgbG9va3VwX3VzZXJfa2V5KHN0cnVjdCB0YXNrX3N0cnVjdCAqY29udGV4dCwKKwkJCQkga2V5X3NlcmlhbF90IGlkLCBpbnQgY3JlYXRlLCBpbnQgcGFydGlhbCwKKwkJCQkga2V5X3Blcm1fdCBwZXJtKTsKIAogZXh0ZXJuIGxvbmcgam9pbl9zZXNzaW9uX2tleXJpbmcoY29uc3QgY2hhciAqbmFtZSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2V5LmggYi9pbmNsdWRlL2xpbnV4L2tleS5oCmluZGV4IDk3MGJiZDkuLmYxZWZhMDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2V5LmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXkuaApAQCAtMzUsMTEgKzM1LDE4IEBACiAKICN1bmRlZiBLRVlfREVCVUdHSU5HCiAKLSNkZWZpbmUgS0VZX1VTUl9WSUVXCTB4MDAwMTAwMDAJLyogdXNlciBjYW4gdmlldyBhIGtleSdzIGF0dHJpYnV0ZXMgKi8KLSNkZWZpbmUgS0VZX1VTUl9SRUFECTB4MDAwMjAwMDAJLyogdXNlciBjYW4gcmVhZCBrZXkgcGF5bG9hZCAvIHZpZXcga2V5cmluZyAqLwotI2RlZmluZSBLRVlfVVNSX1dSSVRFCTB4MDAwNDAwMDAJLyogdXNlciBjYW4gdXBkYXRlIGtleSBwYXlsb2FkIC8gYWRkIGxpbmsgdG8ga2V5cmluZyAqLwotI2RlZmluZSBLRVlfVVNSX1NFQVJDSAkweDAwMDgwMDAwCS8qIHVzZXIgY2FuIGZpbmQgYSBrZXkgaW4gc2VhcmNoIC8gc2VhcmNoIGEga2V5cmluZyAqLwotI2RlZmluZSBLRVlfVVNSX0xJTksJMHgwMDEwMDAwMAkvKiB1c2VyIGNhbiBjcmVhdGUgYSBsaW5rIHRvIGEga2V5L2tleXJpbmcgKi8KKyNkZWZpbmUgS0VZX1BPU19WSUVXCTB4MDEwMDAwMDAJLyogcG9zc2Vzc29yIGNhbiB2aWV3IGEga2V5J3MgYXR0cmlidXRlcyAqLworI2RlZmluZSBLRVlfUE9TX1JFQUQJMHgwMjAwMDAwMAkvKiBwb3NzZXNzb3IgY2FuIHJlYWQga2V5IHBheWxvYWQgLyB2aWV3IGtleXJpbmcgKi8KKyNkZWZpbmUgS0VZX1BPU19XUklURQkweDA0MDAwMDAwCS8qIHBvc3Nlc3NvciBjYW4gdXBkYXRlIGtleSBwYXlsb2FkIC8gYWRkIGxpbmsgdG8ga2V5cmluZyAqLworI2RlZmluZSBLRVlfUE9TX1NFQVJDSAkweDA4MDAwMDAwCS8qIHBvc3Nlc3NvciBjYW4gZmluZCBhIGtleSBpbiBzZWFyY2ggLyBzZWFyY2ggYSBrZXlyaW5nICovCisjZGVmaW5lIEtFWV9QT1NfTElOSwkweDEwMDAwMDAwCS8qIHBvc3Nlc3NvciBjYW4gY3JlYXRlIGEgbGluayB0byBhIGtleS9rZXlyaW5nICovCisjZGVmaW5lIEtFWV9QT1NfQUxMCTB4MWYwMDAwMDAKKworI2RlZmluZSBLRVlfVVNSX1ZJRVcJMHgwMDAxMDAwMAkvKiB1c2VyIHBlcm1pc3Npb25zLi4uICovCisjZGVmaW5lIEtFWV9VU1JfUkVBRAkweDAwMDIwMDAwCisjZGVmaW5lIEtFWV9VU1JfV1JJVEUJMHgwMDA0MDAwMAorI2RlZmluZSBLRVlfVVNSX1NFQVJDSAkweDAwMDgwMDAwCisjZGVmaW5lIEtFWV9VU1JfTElOSwkweDAwMTAwMDAwCiAjZGVmaW5lIEtFWV9VU1JfQUxMCTB4MDAxZjAwMDAKIAogI2RlZmluZSBLRVlfR1JQX1ZJRVcJMHgwMDAwMDEwMAkvKiBncm91cCBwZXJtaXNzaW9ucy4uLiAqLwpAQCAtNjcsNiArNzQsMzggQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKKyAqIGtleSByZWZlcmVuY2Ugd2l0aCBwb3NzZXNzaW9uIGF0dHJpYnV0ZSBoYW5kbGluZworICoKKyAqIE5PVEUhIGtleV9yZWZfdCBpcyBhIHR5cGVkZWYnZCBwb2ludGVyIHRvIGEgdHlwZSB0aGF0IGlzIG5vdCBhY3R1YWxseQorICogZGVmaW5lZC4gVGhpcyBpcyBiZWNhdXNlIHdlIGFidXNlIHRoZSBib3R0b20gYml0IG9mIHRoZSByZWZlcmVuY2UgdG8gY2FycnkgYQorICogZmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBjYWxsaW5nIHByb2Nlc3MgcG9zc2Vzc2VzIHRoYXQga2V5IGluIG9uZSBvZgorICogaXRzIGtleXJpbmdzLgorICoKKyAqIHRoZSBrZXlfcmVmX3QgaGFzIGJlZW4gbWFkZSBhIHNlcGFyYXRlIHR5cGUgc28gdGhhdCB0aGUgY29tcGlsZXIgY2FuIHJlamVjdAorICogYXR0ZW1wdHMgdG8gZGVyZWZlcmVuY2UgaXQgd2l0aG91dCBwcm9wZXIgY29udmVyc2lvbi4KKyAqCisgKiB0aGUgdGhyZWUgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGFzc2VtYmxlIGFuZCBkaXNhc3NlbWJsZSByZWZlcmVuY2VzCisgKi8KK3R5cGVkZWYgc3RydWN0IF9fa2V5X3JlZmVyZW5jZV93aXRoX2F0dHJpYnV0ZXMgKmtleV9yZWZfdDsKKworc3RhdGljIGlubGluZSBrZXlfcmVmX3QgbWFrZV9rZXlfcmVmKGNvbnN0IHN0cnVjdCBrZXkgKmtleSwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgcG9zc2Vzc2lvbikKK3sKKwlyZXR1cm4gKGtleV9yZWZfdCkgKCh1bnNpZ25lZCBsb25nKSBrZXkgfCBwb3NzZXNzaW9uKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qga2V5ICprZXlfcmVmX3RvX3B0cihjb25zdCBrZXlfcmVmX3Qga2V5X3JlZikKK3sKKwlyZXR1cm4gKHN0cnVjdCBrZXkgKikgKCh1bnNpZ25lZCBsb25nKSBrZXlfcmVmICYgfjFVTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBpc19rZXlfcG9zc2Vzc2VkKGNvbnN0IGtleV9yZWZfdCBrZXlfcmVmKQoreworCXJldHVybiAodW5zaWduZWQgbG9uZykga2V5X3JlZiAmIDFVTDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKICAqIGF1dGhlbnRpY2F0aW9uIHRva2VuIC8gYWNjZXNzIGNyZWRlbnRpYWwgLyBrZXlyaW5nCiAgKiAtIHR5cGVzIG9mIGtleSBpbmNsdWRlOgogICogICAtIGtleXJpbmdzCkBAIC0yMTUsMjAgKzI1NCwyNSBAQAogCXJldHVybiBrZXk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBrZXlfcmVmX3B1dChrZXlfcmVmX3Qga2V5X3JlZikKK3sKKwlrZXlfcHV0KGtleV9yZWZfdG9fcHRyKGtleV9yZWYpKTsKK30KKwogZXh0ZXJuIHN0cnVjdCBrZXkgKnJlcXVlc3Rfa2V5KHN0cnVjdCBrZXlfdHlwZSAqdHlwZSwKIAkJCSAgICAgICBjb25zdCBjaGFyICpkZXNjcmlwdGlvbiwKIAkJCSAgICAgICBjb25zdCBjaGFyICpjYWxsb3V0X2luZm8pOwogCiBleHRlcm4gaW50IGtleV92YWxpZGF0ZShzdHJ1Y3Qga2V5ICprZXkpOwogCi1leHRlcm4gc3RydWN0IGtleSAqa2V5X2NyZWF0ZV9vcl91cGRhdGUoc3RydWN0IGtleSAqa2V5cmluZywKLQkJCQkJY29uc3QgY2hhciAqdHlwZSwKLQkJCQkJY29uc3QgY2hhciAqZGVzY3JpcHRpb24sCi0JCQkJCWNvbnN0IHZvaWQgKnBheWxvYWQsCi0JCQkJCXNpemVfdCBwbGVuLAotCQkJCQlpbnQgbm90X2luX3F1b3RhKTsKK2V4dGVybiBrZXlfcmVmX3Qga2V5X2NyZWF0ZV9vcl91cGRhdGUoa2V5X3JlZl90IGtleXJpbmcsCisJCQkJICAgICAgY29uc3QgY2hhciAqdHlwZSwKKwkJCQkgICAgICBjb25zdCBjaGFyICpkZXNjcmlwdGlvbiwKKwkJCQkgICAgICBjb25zdCB2b2lkICpwYXlsb2FkLAorCQkJCSAgICAgIHNpemVfdCBwbGVuLAorCQkJCSAgICAgIGludCBub3RfaW5fcXVvdGEpOwogCi1leHRlcm4gaW50IGtleV91cGRhdGUoc3RydWN0IGtleSAqa2V5LAorZXh0ZXJuIGludCBrZXlfdXBkYXRlKGtleV9yZWZfdCBrZXksCiAJCSAgICAgIGNvbnN0IHZvaWQgKnBheWxvYWQsCiAJCSAgICAgIHNpemVfdCBwbGVuKTsKIApAQCAtMjQzLDkgKzI4Nyw5IEBACiAKIGV4dGVybiBpbnQga2V5cmluZ19jbGVhcihzdHJ1Y3Qga2V5ICprZXlyaW5nKTsKIAotZXh0ZXJuIHN0cnVjdCBrZXkgKmtleXJpbmdfc2VhcmNoKHN0cnVjdCBrZXkgKmtleXJpbmcsCi0JCQkJICBzdHJ1Y3Qga2V5X3R5cGUgKnR5cGUsCi0JCQkJICBjb25zdCBjaGFyICpkZXNjcmlwdGlvbik7CitleHRlcm4ga2V5X3JlZl90IGtleXJpbmdfc2VhcmNoKGtleV9yZWZfdCBrZXlyaW5nLAorCQkJCXN0cnVjdCBrZXlfdHlwZSAqdHlwZSwKKwkJCQljb25zdCBjaGFyICpkZXNjcmlwdGlvbik7CiAKIGV4dGVybiBpbnQga2V5cmluZ19hZGRfa2V5KHN0cnVjdCBrZXkgKmtleXJpbmcsCiAJCQkgICBzdHJ1Y3Qga2V5ICprZXkpOwpAQCAtMjg1LDYgKzMyOSwxMCBAQAogI2RlZmluZSBrZXlfc2VyaWFsKGspCQkJMAogI2RlZmluZSBrZXlfZ2V0KGspIAkJCSh7IE5VTEw7IH0pCiAjZGVmaW5lIGtleV9wdXQoaykJCQlkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUga2V5X3JlZl9wdXQoaykJCQlkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgbWFrZV9rZXlfcmVmKGspCQkJKHsgTlVMTDsgfSkKKyNkZWZpbmUga2V5X3JlZl90b19wdHIoaykJCSh7IE5VTEw7IH0pCisjZGVmaW5lIGlzX2tleV9wb3NzZXNzZWQoaykJCTAKICNkZWZpbmUgYWxsb2NfdWlkX2tleXJpbmcodSkJCTAKICNkZWZpbmUgc3dpdGNoX3VpZF9rZXlyaW5nKHUpCQlkbyB7IH0gd2hpbGUoMCkKICNkZWZpbmUgX19pbnN0YWxsX3Nlc3Npb25fa2V5cmluZyh0LCBrKQkoeyBOVUxMOyB9KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZmlmby5oIGIvaW5jbHVkZS9saW51eC9rZmlmby5oCmluZGV4IGMyN2NkNDIuLjQ4ZWNjZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2ZpZm8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2tmaWZvLmgKQEAgLTM1LDggKzM1LDggQEAKIH07CiAKIGV4dGVybiBzdHJ1Y3Qga2ZpZm8gKmtmaWZvX2luaXQodW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgc2l6ZSwKLQkJCQl1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX21hc2ssIHNwaW5sb2NrX3QgKmxvY2spOwotZXh0ZXJuIHN0cnVjdCBrZmlmbyAqa2ZpZm9fYWxsb2ModW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaywKKwkJCQlnZnBfdCBnZnBfbWFzaywgc3BpbmxvY2tfdCAqbG9jayk7CitleHRlcm4gc3RydWN0IGtmaWZvICprZmlmb19hbGxvYyh1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssCiAJCQkJIHNwaW5sb2NrX3QgKmxvY2spOwogZXh0ZXJuIHZvaWQga2ZpZm9fZnJlZShzdHJ1Y3Qga2ZpZm8gKmZpZm8pOwogZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX3B1dChzdHJ1Y3Qga2ZpZm8gKmZpZm8sCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaAppbmRleCAwMjIxMDVjLi5jZWVlMWZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCisrKyBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKQEAgLTM5Myw2ICszOTMsNyBAQAogZXh0ZXJuIHZvaWQgYXRhX3BjaV9yZW1vdmVfb25lIChzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiAjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogZXh0ZXJuIGludCBhdGFfZGV2aWNlX2FkZChzdHJ1Y3QgYXRhX3Byb2JlX2VudCAqZW50KTsKK2V4dGVybiB2b2lkIGF0YV9ob3N0X3NldF9yZW1vdmUoc3RydWN0IGF0YV9ob3N0X3NldCAqaG9zdF9zZXQpOwogZXh0ZXJuIGludCBhdGFfc2NzaV9kZXRlY3QoU2NzaV9Ib3N0X1RlbXBsYXRlICpzaHQpOwogZXh0ZXJuIGludCBhdGFfc2NzaV9pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZyk7CiBleHRlcm4gaW50IGF0YV9zY3NpX3F1ZXVlY21kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saXN0LmggYi9pbmNsdWRlL2xpbnV4L2xpc3QuaAppbmRleCBlNmVjNTk2Li4wODQ5NzFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xpc3QuaApAQCAtNDQyLDEyICs0NDIsMTQgQEAKICAqIGFzIGxvbmcgYXMgdGhlIHRyYXZlcnNhbCBpcyBndWFyZGVkIGJ5IHJjdV9yZWFkX2xvY2soKS4KICAqLwogI2RlZmluZSBsaXN0X2Zvcl9lYWNoX3JjdShwb3MsIGhlYWQpIFwKLQlmb3IgKHBvcyA9IChoZWFkKS0+bmV4dDsgcHJlZmV0Y2gocG9zLT5uZXh0KSwgcG9zICE9IChoZWFkKTsgXAotICAgICAgICAJcG9zID0gcmN1X2RlcmVmZXJlbmNlKHBvcy0+bmV4dCkpCisJZm9yIChwb3MgPSAoaGVhZCktPm5leHQ7IFwKKwkJcHJlZmV0Y2gocmN1X2RlcmVmZXJlbmNlKHBvcyktPm5leHQpLCBwb3MgIT0gKGhlYWQpOyBcCisgICAgICAgIAlwb3MgPSBwb3MtPm5leHQpCiAKICNkZWZpbmUgX19saXN0X2Zvcl9lYWNoX3JjdShwb3MsIGhlYWQpIFwKLQlmb3IgKHBvcyA9IChoZWFkKS0+bmV4dDsgcG9zICE9IChoZWFkKTsgXAotICAgICAgICAJcG9zID0gcmN1X2RlcmVmZXJlbmNlKHBvcy0+bmV4dCkpCisJZm9yIChwb3MgPSAoaGVhZCktPm5leHQ7IFwKKwkJcmN1X2RlcmVmZXJlbmNlKHBvcykgIT0gKGhlYWQpOyBcCisgICAgICAgIAlwb3MgPSBwb3MtPm5leHQpCiAKIC8qKgogICogbGlzdF9mb3JfZWFjaF9zYWZlX3JjdQktCWl0ZXJhdGUgb3ZlciBhbiByY3UtcHJvdGVjdGVkIGxpc3Qgc2FmZQpAQCAtNDYxLDggKzQ2Myw5IEBACiAgKiBhcyBsb25nIGFzIHRoZSB0cmF2ZXJzYWwgaXMgZ3VhcmRlZCBieSByY3VfcmVhZF9sb2NrKCkuCiAgKi8KICNkZWZpbmUgbGlzdF9mb3JfZWFjaF9zYWZlX3JjdShwb3MsIG4sIGhlYWQpIFwKLQlmb3IgKHBvcyA9IChoZWFkKS0+bmV4dCwgbiA9IHBvcy0+bmV4dDsgcG9zICE9IChoZWFkKTsgXAotCQlwb3MgPSByY3VfZGVyZWZlcmVuY2UobiksIG4gPSBwb3MtPm5leHQpCisJZm9yIChwb3MgPSAoaGVhZCktPm5leHQ7IFwKKwkJbiA9IHJjdV9kZXJlZmVyZW5jZShwb3MpLT5uZXh0LCBwb3MgIT0gKGhlYWQpOyBcCisJCXBvcyA9IG4pCiAKIC8qKgogICogbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UJLQlpdGVyYXRlIG92ZXIgcmN1IGxpc3Qgb2YgZ2l2ZW4gdHlwZQpAQCAtNDc0LDExICs0NzcsMTEgQEAKICAqIHRoZSBfcmN1IGxpc3QtbXV0YXRpb24gcHJpbWl0aXZlcyBzdWNoIGFzIGxpc3RfYWRkX3JjdSgpCiAgKiBhcyBsb25nIGFzIHRoZSB0cmF2ZXJzYWwgaXMgZ3VhcmRlZCBieSByY3VfcmVhZF9sb2NrKCkuCiAgKi8KLSNkZWZpbmUgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9zLCBoZWFkLCBtZW1iZXIpCQkJXAotCWZvciAocG9zID0gbGlzdF9lbnRyeSgoaGVhZCktPm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKTsJXAotCSAgICAgcHJlZmV0Y2gocG9zLT5tZW1iZXIubmV4dCksICZwb3MtPm1lbWJlciAhPSAoaGVhZCk7IAlcCi0JICAgICBwb3MgPSByY3VfZGVyZWZlcmVuY2UobGlzdF9lbnRyeShwb3MtPm1lbWJlci5uZXh0LCAJXAotCQkJCQl0eXBlb2YoKnBvcyksIG1lbWJlcikpKQorI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3MsIGhlYWQsIG1lbWJlcikgXAorCWZvciAocG9zID0gbGlzdF9lbnRyeSgoaGVhZCktPm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKTsgXAorCQlwcmVmZXRjaChyY3VfZGVyZWZlcmVuY2UocG9zKS0+bWVtYmVyLm5leHQpLCBcCisJCQkmcG9zLT5tZW1iZXIgIT0gKGhlYWQpOyBcCisJCXBvcyA9IGxpc3RfZW50cnkocG9zLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpKQogCiAKIC8qKgpAQCAtNDkyLDggKzQ5NSw5IEBACiAgKiBhcyBsb25nIGFzIHRoZSB0cmF2ZXJzYWwgaXMgZ3VhcmRlZCBieSByY3VfcmVhZF9sb2NrKCkuCiAgKi8KICNkZWZpbmUgbGlzdF9mb3JfZWFjaF9jb250aW51ZV9yY3UocG9zLCBoZWFkKSBcCi0JZm9yICgocG9zKSA9IChwb3MpLT5uZXh0OyBwcmVmZXRjaCgocG9zKS0+bmV4dCksIChwb3MpICE9IChoZWFkKTsgXAotICAgICAgICAJKHBvcykgPSByY3VfZGVyZWZlcmVuY2UoKHBvcyktPm5leHQpKQorCWZvciAoKHBvcykgPSAocG9zKS0+bmV4dDsgXAorCQlwcmVmZXRjaChyY3VfZGVyZWZlcmVuY2UoKHBvcykpLT5uZXh0KSwgKHBvcykgIT0gKGhlYWQpOyBcCisgICAgICAgIAkocG9zKSA9IChwb3MpLT5uZXh0KQogCiAvKgogICogRG91YmxlIGxpbmtlZCBsaXN0cyB3aXRoIGEgc2luZ2xlIHBvaW50ZXIgbGlzdCBoZWFkLgpAQCAtNjk2LDggKzcwMCw5IEBACiAJICAgICBwb3MgPSBuKQogCiAjZGVmaW5lIGhsaXN0X2Zvcl9lYWNoX3JjdShwb3MsIGhlYWQpIFwKLQlmb3IgKChwb3MpID0gKGhlYWQpLT5maXJzdDsgcG9zICYmICh7IHByZWZldGNoKChwb3MpLT5uZXh0KTsgMTsgfSk7IFwKLQkJKHBvcykgPSByY3VfZGVyZWZlcmVuY2UoKHBvcyktPm5leHQpKQorCWZvciAoKHBvcykgPSAoaGVhZCktPmZpcnN0OyBcCisJCXJjdV9kZXJlZmVyZW5jZSgocG9zKSkgJiYgKHsgcHJlZmV0Y2goKHBvcyktPm5leHQpOyAxOyB9KTsgXAorCQkocG9zKSA9IChwb3MpLT5uZXh0KQogCiAvKioKICAqIGhsaXN0X2Zvcl9lYWNoX2VudHJ5CS0gaXRlcmF0ZSBvdmVyIGxpc3Qgb2YgZ2l2ZW4gdHlwZQpAQCAtNzYyLDkgKzc2Nyw5IEBACiAgKi8KICNkZWZpbmUgaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHRwb3MsIHBvcywgaGVhZCwgbWVtYmVyKQkJIFwKIAlmb3IgKHBvcyA9IChoZWFkKS0+Zmlyc3Q7CQkJCQkgXAotCSAgICAgcG9zICYmICh7IHByZWZldGNoKHBvcy0+bmV4dCk7IDE7fSkgJiYJCQkgXAorCSAgICAgcmN1X2RlcmVmZXJlbmNlKHBvcykgJiYgKHsgcHJlZmV0Y2gocG9zLT5uZXh0KTsgMTt9KSAmJgkgXAogCQkoeyB0cG9zID0gaGxpc3RfZW50cnkocG9zLCB0eXBlb2YoKnRwb3MpLCBtZW1iZXIpOyAxO30pOyBcCi0JICAgICBwb3MgPSByY3VfZGVyZWZlcmVuY2UocG9zLT5uZXh0KSkKKwkgICAgIHBvcyA9IHBvcy0+bmV4dCkKIAogI2Vsc2UKICN3YXJuaW5nICJkb24ndCBpbmNsdWRlIGtlcm5lbCBoZWFkZXJzIGluIHVzZXJzcGFjZSIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oIGIvaW5jbHVkZS9saW51eC9tZW1wb29sLmgKaW5kZXggNzk2MjIwYy4uZjI0MjdkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1wb29sLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZW1wb29sLmgKQEAgLTYsNyArNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAKLXR5cGVkZWYgdm9pZCAqIChtZW1wb29sX2FsbG9jX3QpKHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaywgdm9pZCAqcG9vbF9kYXRhKTsKK3R5cGVkZWYgdm9pZCAqIChtZW1wb29sX2FsbG9jX3QpKGdmcF90IGdmcF9tYXNrLCB2b2lkICpwb29sX2RhdGEpOwogdHlwZWRlZiB2b2lkIChtZW1wb29sX2ZyZWVfdCkodm9pZCAqZWxlbWVudCwgdm9pZCAqcG9vbF9kYXRhKTsKIAogdHlwZWRlZiBzdHJ1Y3QgbWVtcG9vbF9zIHsKQEAgLTI2LDE3ICsyNiwxNiBAQAogZXh0ZXJuIG1lbXBvb2xfdCAqbWVtcG9vbF9jcmVhdGVfbm9kZShpbnQgbWluX25yLCBtZW1wb29sX2FsbG9jX3QgKmFsbG9jX2ZuLAogCQkJbWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sIHZvaWQgKnBvb2xfZGF0YSwgaW50IG5pZCk7CiAKLWV4dGVybiBpbnQgbWVtcG9vbF9yZXNpemUobWVtcG9vbF90ICpwb29sLCBpbnQgbmV3X21pbl9uciwKLQkJCXVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzayk7CitleHRlcm4gaW50IG1lbXBvb2xfcmVzaXplKG1lbXBvb2xfdCAqcG9vbCwgaW50IG5ld19taW5fbnIsIGdmcF90IGdmcF9tYXNrKTsKIGV4dGVybiB2b2lkIG1lbXBvb2xfZGVzdHJveShtZW1wb29sX3QgKnBvb2wpOwotZXh0ZXJuIHZvaWQgKiBtZW1wb29sX2FsbG9jKG1lbXBvb2xfdCAqcG9vbCwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrKTsKK2V4dGVybiB2b2lkICogbWVtcG9vbF9hbGxvYyhtZW1wb29sX3QgKnBvb2wsIGdmcF90IGdmcF9tYXNrKTsKIGV4dGVybiB2b2lkIG1lbXBvb2xfZnJlZSh2b2lkICplbGVtZW50LCBtZW1wb29sX3QgKnBvb2wpOwogCiAvKgogICogQSBtZW1wb29sX2FsbG9jX3QgYW5kIG1lbXBvb2xfZnJlZV90IHRoYXQgZ2V0IHRoZSBtZW1vcnkgZnJvbQogICogYSBzbGFiIHRoYXQgaXMgcGFzc2VkIGluIHRocm91Z2ggcG9vbF9kYXRhLgogICovCi12b2lkICptZW1wb29sX2FsbG9jX3NsYWIodW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrLCB2b2lkICpwb29sX2RhdGEpOwordm9pZCAqbWVtcG9vbF9hbGxvY19zbGFiKGdmcF90IGdmcF9tYXNrLCB2b2lkICpwb29sX2RhdGEpOwogdm9pZCBtZW1wb29sX2ZyZWVfc2xhYih2b2lkICplbGVtZW50LCB2b2lkICpwb29sX2RhdGEpOwogCiAjZW5kaWYgLyogX0xJTlVYX01FTVBPT0xfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDgyZDcwMjQuLjA5N2IzYTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTEzNiw2ICsxMzYsNyBAQAogI2RlZmluZSBWTV9FWEVDCQkweDAwMDAwMDA0CiAjZGVmaW5lIFZNX1NIQVJFRAkweDAwMDAwMDA4CiAKKy8qIG1wcm90ZWN0KCkgaGFyZGNvZGVzIFZNX01BWVJFQUQgPj4gNCA9PSBWTV9SRUFELCBhbmQgc28gZm9yIHIvdy94IGJpdHMuICovCiAjZGVmaW5lIFZNX01BWVJFQUQJMHgwMDAwMDAxMAkvKiBsaW1pdHMgZm9yIG1wcm90ZWN0KCkgZXRjICovCiAjZGVmaW5lIFZNX01BWVdSSVRFCTB4MDAwMDAwMjAKICNkZWZpbmUgVk1fTUFZRVhFQwkweDAwMDAwMDQwCkBAIC0zNTAsNyArMzUxLDggQEAKICAqIG9ubHkgb25lIGNvcHkgaW4gbWVtb3J5LCBhdCBtb3N0LCBub3JtYWxseS4KICAqCiAgKiBGb3IgdGhlIG5vbi1yZXNlcnZlZCBwYWdlcywgcGFnZV9jb3VudChwYWdlKSBkZW5vdGVzIGEgcmVmZXJlbmNlIGNvdW50LgotICogICBwYWdlX2NvdW50KCkgPT0gMCBtZWFucyB0aGUgcGFnZSBpcyBmcmVlLgorICogICBwYWdlX2NvdW50KCkgPT0gMCBtZWFucyB0aGUgcGFnZSBpcyBmcmVlLiBwYWdlLT5scnUgaXMgdGhlbiB1c2VkIGZvcgorICogICBmcmVlbGlzdCBtYW5hZ2VtZW50IGluIHRoZSBidWRkeSBhbGxvY2F0b3IuCiAgKiAgIHBhZ2VfY291bnQoKSA9PSAxIG1lYW5zIHRoZSBwYWdlIGlzIHVzZWQgZm9yIGV4YWN0bHkgb25lIHB1cnBvc2UKICAqICAgKGUuZy4gYSBwcml2YXRlIGRhdGEgcGFnZSBvZiBvbmUgcHJvY2VzcykuCiAgKgpAQCAtMzc2LDEwICszNzgsOCBAQAogICogYXR0YWNoZXMsIHBsdXMgMSBpZiBgcHJpdmF0ZScgY29udGFpbnMgc29tZXRoaW5nLCBwbHVzIG9uZSBmb3IKICAqIHRoZSBwYWdlIGNhY2hlIGl0c2VsZi4KICAqCi0gKiBBbGwgcGFnZXMgYmVsb25naW5nIHRvIGFuIGlub2RlIGFyZSBpbiB0aGVzZSBkb3VibHkgbGlua2VkIGxpc3RzOgotICogbWFwcGluZy0+Y2xlYW5fcGFnZXMsIG1hcHBpbmctPmRpcnR5X3BhZ2VzIGFuZCBtYXBwaW5nLT5sb2NrZWRfcGFnZXM7Ci0gKiB1c2luZyB0aGUgcGFnZS0+bGlzdCBsaXN0X2hlYWQuIFRoZXNlIGZpZWxkcyBhcmUgYWxzbyB1c2VkIGZvcgotICogZnJlZWxpc3QgbWFuYWdlbWV0ICh3aGVuIHBhZ2VfY291bnQoKT09MCkuCisgKiBJbnN0ZWFkIG9mIGtlZXBpbmcgZGlydHkvY2xlYW4gcGFnZXMgaW4gcGVyIGFkZHJlc3Mtc3BhY2UgbGlzdHMsIHdlIGluc3RlYWQKKyAqIG5vdyB0YWcgcGFnZXMgYXMgZGlydHkvdW5kZXIgd3JpdGViYWNrIGluIHRoZSByYWRpeCB0cmVlLgogICoKICAqIFRoZXJlIGlzIGFsc28gYSBwZXItbWFwcGluZyByYWRpeCB0cmVlIG1hcHBpbmcgaW5kZXggdG8gdGhlIHBhZ2UKICAqIGluIG1lbW9yeSBpZiBwcmVzZW50LiBUaGUgdHJlZSBpcyByb290ZWQgYXQgbWFwcGluZy0+cm9vdC4gIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaCBiL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmgKaW5kZXggNDdkYTM5Yi4uMmYwMjk5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oCkBAIC0xODMsNyArMTgzLDcgQEAKIAljaGFyCW5hbWVbMzJdOwogCWNoYXIJdHlwZVszMl07CiAJY2hhcgljb21wYXRpYmxlWzEyOF07Ci0jaWYgX19LRVJORUxfXworI2lmZGVmIF9fS0VSTkVMX18KIAl2b2lkCSpkYXRhOwogI2Vsc2UKIAlrZXJuZWxfdWxvbmdfdCBkYXRhOwpAQCAtMjA5LDEwICsyMDksMTEgQEAKIAkvKiBmb3IgcmVhbCBtdWx0aS1mdW5jdGlvbiBkZXZpY2VzICovCiAJX191OCAgCQlmdW5jdGlvbjsKIAotCS8qIGZvciBwc2V1ZGUgbXVsdGktZnVuY3Rpb24gZGV2aWNlcyAqLworCS8qIGZvciBwc2V1ZG8gbXVsdGktZnVuY3Rpb24gZGV2aWNlcyAqLwogCV9fdTggIAkJZGV2aWNlX25vOwogCi0JX191MzIgCQlwcm9kX2lkX2hhc2hbNF07CisJX191MzIgCQlwcm9kX2lkX2hhc2hbNF0KKwkJX19hdHRyaWJ1dGVfXygoYWxpZ25lZChzaXplb2YoX191MzIpKSkpOwogCiAJLyogbm90IG1hdGNoZWQgYWdhaW5zdCBpbiBrZXJuZWxzcGFjZSovCiAjaWZkZWYgX19LRVJORUxfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggN2M3MTc5MC4uMzY4ZTRjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC0yNjUsNiArMjY1LDggQEAKIAkgKiB0aGUgaW50ZXJmYWNlLgogCSAqLwogCWNoYXIJCQluYW1lW0lGTkFNU0laXTsKKwkvKiBkZXZpY2UgbmFtZSBoYXNoIGNoYWluICovCisJc3RydWN0IGhsaXN0X25vZGUJbmFtZV9obGlzdDsKIAogCS8qCiAJICoJSS9PIHNwZWNpZmljIGZpZWxkcwpAQCAtMjkyLDYgKzI5NCwyMSBAQAogCiAJLyogLS0tLS0tLSBGaWVsZHMgcHJlaW5pdGlhbGl6ZWQgaW4gU3BhY2UuYyBmaW5pc2ggaGVyZSAtLS0tLS0tICovCiAKKwkvKiBOZXQgZGV2aWNlIGZlYXR1cmVzICovCisJdW5zaWduZWQgbG9uZwkJZmVhdHVyZXM7CisjZGVmaW5lIE5FVElGX0ZfU0cJCTEJLyogU2NhdHRlci9nYXRoZXIgSU8uICovCisjZGVmaW5lIE5FVElGX0ZfSVBfQ1NVTQkJMgkvKiBDYW4gY2hlY2tzdW0gb25seSBUQ1AvVURQIG92ZXIgSVB2NC4gKi8KKyNkZWZpbmUgTkVUSUZfRl9OT19DU1VNCQk0CS8qIERvZXMgbm90IHJlcXVpcmUgY2hlY2tzdW0uIEYuZS4gbG9vcGFjay4gKi8KKyNkZWZpbmUgTkVUSUZfRl9IV19DU1VNCQk4CS8qIENhbiBjaGVja3N1bSBhbGwgdGhlIHBhY2tldHMuICovCisjZGVmaW5lIE5FVElGX0ZfSElHSERNQQkJMzIJLyogQ2FuIERNQSB0byBoaWdoIG1lbW9yeS4gKi8KKyNkZWZpbmUgTkVUSUZfRl9GUkFHTElTVAk2NAkvKiBTY2F0dGVyL2dhdGhlciBJTy4gKi8KKyNkZWZpbmUgTkVUSUZfRl9IV19WTEFOX1RYCTEyOAkvKiBUcmFuc21pdCBWTEFOIGh3IGFjY2VsZXJhdGlvbiAqLworI2RlZmluZSBORVRJRl9GX0hXX1ZMQU5fUlgJMjU2CS8qIFJlY2VpdmUgVkxBTiBodyBhY2NlbGVyYXRpb24gKi8KKyNkZWZpbmUgTkVUSUZfRl9IV19WTEFOX0ZJTFRFUgk1MTIJLyogUmVjZWl2ZSBmaWx0ZXJpbmcgb24gVkxBTiAqLworI2RlZmluZSBORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRAkxMDI0CS8qIERldmljZSBjYW5ub3QgaGFuZGxlIFZMQU4gcGFja2V0cyAqLworI2RlZmluZSBORVRJRl9GX1RTTwkJMjA0OAkvKiBDYW4gb2ZmbG9hZCBUQ1AvSVAgc2VnbWVudGF0aW9uICovCisjZGVmaW5lIE5FVElGX0ZfTExUWAkJNDA5NgkvKiBMb2NrTGVzcyBUWCAqLworCiAJc3RydWN0IG5ldF9kZXZpY2UJKm5leHRfc2NoZWQ7CiAKIAkvKiBJbnRlcmZhY2UgaW5kZXguIFVuaXF1ZSBkZXZpY2UgaWRlbnRpZmllcgkqLwpAQCAtMzE2LDkgKzMzMyw2IEBACiAJICogd2lsbCAocmVhZDogbWF5IGJlIGNsZWFuZWQgdXAgYXQgd2lsbCkuCiAJICovCiAKLQkvKiBUaGVzZSBtYXkgYmUgbmVlZGVkIGZvciBmdXR1cmUgbmV0d29yay1wb3dlci1kb3duIGNvZGUuICovCi0JdW5zaWduZWQgbG9uZwkJdHJhbnNfc3RhcnQ7CS8qIFRpbWUgKGluIGppZmZpZXMpIG9mIGxhc3QgVHgJKi8KLQl1bnNpZ25lZCBsb25nCQlsYXN0X3J4OwkvKiBUaW1lIG9mIGxhc3QgUngJKi8KIAogCXVuc2lnbmVkIHNob3J0CQlmbGFnczsJLyogaW50ZXJmYWNlIGZsYWdzIChhIGxhIEJTRCkJKi8KIAl1bnNpZ25lZCBzaG9ydAkJZ2ZsYWdzOwpAQCAtMzI4LDE1ICszNDIsMTIgQEAKIAl1bnNpZ25lZAkJbXR1OwkvKiBpbnRlcmZhY2UgTVRVIHZhbHVlCQkqLwogCXVuc2lnbmVkIHNob3J0CQl0eXBlOwkvKiBpbnRlcmZhY2UgaGFyZHdhcmUgdHlwZQkqLwogCXVuc2lnbmVkIHNob3J0CQloYXJkX2hlYWRlcl9sZW47CS8qIGhhcmR3YXJlIGhkciBsZW5ndGgJKi8KLQl2b2lkCQkJKnByaXY7CS8qIHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhCSovCiAKIAlzdHJ1Y3QgbmV0X2RldmljZQkqbWFzdGVyOyAvKiBQb2ludGVyIHRvIG1hc3RlciBkZXZpY2Ugb2YgYSBncm91cCwKIAkJCQkJICAqIHdoaWNoIHRoaXMgZGV2aWNlIGlzIG1lbWJlciBvZi4KIAkJCQkJICAqLwogCiAJLyogSW50ZXJmYWNlIGFkZHJlc3MgaW5mby4gKi8KLQl1bnNpZ25lZCBjaGFyCQlicm9hZGNhc3RbTUFYX0FERFJfTEVOXTsJLyogaHcgYmNhc3QgYWRkCSovCi0JdW5zaWduZWQgY2hhcgkJZGV2X2FkZHJbTUFYX0FERFJfTEVOXTsJLyogaHcgYWRkcmVzcwkqLwogCXVuc2lnbmVkIGNoYXIJCXBlcm1fYWRkcltNQVhfQUREUl9MRU5dOyAvKiBwZXJtYW5lbnQgaHcgYWRkcmVzcyAqLwogCXVuc2lnbmVkIGNoYXIJCWFkZHJfbGVuOwkvKiBoYXJkd2FyZSBhZGRyZXNzIGxlbmd0aAkqLwogCXVuc2lnbmVkIHNob3J0ICAgICAgICAgIGRldl9pZDsJCS8qIGZvciBzaGFyZWQgbmV0d29yayBjYXJkcyAqLwpAQCAtMzQ2LDggKzM1Nyw2IEBACiAJaW50CQkJcHJvbWlzY3VpdHk7CiAJaW50CQkJYWxsbXVsdGk7CiAKLQlpbnQJCQl3YXRjaGRvZ190aW1lbzsKLQlzdHJ1Y3QgdGltZXJfbGlzdAl3YXRjaGRvZ190aW1lcjsKIAogCS8qIFByb3RvY29sIHNwZWNpZmljIHBvaW50ZXJzICovCiAJCkBAIC0zNTgsMzIgKzM2Nyw2MiBAQAogCXZvaWQJCQkqZWNfcHRyOwkvKiBFY29uZXQgc3BlY2lmaWMgZGF0YQkqLwogCXZvaWQJCQkqYXgyNV9wdHI7CS8qIEFYLjI1IHNwZWNpZmljIGRhdGEgKi8KIAotCXN0cnVjdCBsaXN0X2hlYWQJcG9sbF9saXN0OwkvKiBMaW5rIHRvIHBvbGwgbGlzdAkqLworLyoKKyAqIENhY2hlIGxpbmUgbW9zdGx5IHVzZWQgb24gcmVjZWl2ZSBwYXRoIChpbmNsdWRpbmcgZXRoX3R5cGVfdHJhbnMoKSkKKyAqLworCXN0cnVjdCBsaXN0X2hlYWQJcG9sbF9saXN0IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CisJCQkJCS8qIExpbmsgdG8gcG9sbCBsaXN0CSovCisKKwlpbnQJCQkoKnBvbGwpIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgKnF1b3RhKTsKIAlpbnQJCQlxdW90YTsKIAlpbnQJCQl3ZWlnaHQ7CisJdW5zaWduZWQgbG9uZwkJbGFzdF9yeDsJLyogVGltZSBvZiBsYXN0IFJ4CSovCisJLyogSW50ZXJmYWNlIGFkZHJlc3MgaW5mbyB1c2VkIGluIGV0aF90eXBlX3RyYW5zKCkgKi8KKwl1bnNpZ25lZCBjaGFyCQlkZXZfYWRkcltNQVhfQUREUl9MRU5dOwkvKiBodyBhZGRyZXNzLCAoYmVmb3JlIGJjYXN0IAorCQkJCQkJCWJlY2F1c2UgbW9zdCBwYWNrZXRzIGFyZSB1bmljYXN0KSAqLwogCisJdW5zaWduZWQgY2hhcgkJYnJvYWRjYXN0W01BWF9BRERSX0xFTl07CS8qIGh3IGJjYXN0IGFkZAkqLworCisvKgorICogQ2FjaGUgbGluZSBtb3N0bHkgdXNlZCBvbiBxdWV1ZSB0cmFuc21pdCBwYXRoIChxZGlzYykKKyAqLworCS8qIGRldmljZSBxdWV1ZSBsb2NrICovCisJc3BpbmxvY2tfdAkJcXVldWVfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCXN0cnVjdCBRZGlzYwkJKnFkaXNjOwogCXN0cnVjdCBRZGlzYwkJKnFkaXNjX3NsZWVwaW5nOwotCXN0cnVjdCBRZGlzYwkJKnFkaXNjX2luZ3Jlc3M7CiAJc3RydWN0IGxpc3RfaGVhZAlxZGlzY19saXN0OwogCXVuc2lnbmVkIGxvbmcJCXR4X3F1ZXVlX2xlbjsJLyogTWF4IGZyYW1lcyBwZXIgcXVldWUgYWxsb3dlZCAqLwogCiAJLyogaW5ncmVzcyBwYXRoIHN5bmNocm9uaXplciAqLwogCXNwaW5sb2NrX3QJCWluZ3Jlc3NfbG9jazsKKwlzdHJ1Y3QgUWRpc2MJCSpxZGlzY19pbmdyZXNzOworCisvKgorICogT25lIHBhcnQgaXMgbW9zdGx5IHVzZWQgb24geG1pdCBwYXRoIChkZXZpY2UpCisgKi8KIAkvKiBoYXJkX3N0YXJ0X3htaXQgc3luY2hyb25pemVyICovCi0Jc3BpbmxvY2tfdAkJeG1pdF9sb2NrOworCXNwaW5sb2NrX3QJCXhtaXRfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCS8qIGNwdSBpZCBvZiBwcm9jZXNzb3IgZW50ZXJlZCB0byBoYXJkX3N0YXJ0X3htaXQgb3IgLTEsCiAJICAgaWYgbm9ib2R5IGVudGVyZWQgdGhlcmUuCiAJICovCiAJaW50CQkJeG1pdF9sb2NrX293bmVyOwotCS8qIGRldmljZSBxdWV1ZSBsb2NrICovCi0Jc3BpbmxvY2tfdAkJcXVldWVfbG9jazsKKwl2b2lkCQkJKnByaXY7CS8qIHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhCSovCisJaW50CQkJKCpoYXJkX3N0YXJ0X3htaXQpIChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCS8qIFRoZXNlIG1heSBiZSBuZWVkZWQgZm9yIGZ1dHVyZSBuZXR3b3JrLXBvd2VyLWRvd24gY29kZS4gKi8KKwl1bnNpZ25lZCBsb25nCQl0cmFuc19zdGFydDsJLyogVGltZSAoaW4gamlmZmllcykgb2YgbGFzdCBUeAkqLworCisJaW50CQkJd2F0Y2hkb2dfdGltZW87IC8qIHVzZWQgYnkgZGV2X3dhdGNoZG9nKCkgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdAl3YXRjaGRvZ190aW1lcjsKKworLyoKKyAqIHJlZmNudCBpcyBhIHZlcnkgaG90IHBvaW50LCBzbyBhbGlnbiBpdCBvbiBTTVAKKyAqLwogCS8qIE51bWJlciBvZiByZWZlcmVuY2VzIHRvIHRoaXMgZGV2aWNlICovCi0JYXRvbWljX3QJCXJlZmNudDsKKwlhdG9taWNfdAkJcmVmY250IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CisKIAkvKiBkZWxheWVkIHJlZ2lzdGVyL3VucmVnaXN0ZXIgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCXRvZG9fbGlzdDsKLQkvKiBkZXZpY2UgbmFtZSBoYXNoIGNoYWluICovCi0Jc3RydWN0IGhsaXN0X25vZGUJbmFtZV9obGlzdDsKIAkvKiBkZXZpY2UgaW5kZXggaGFzaCBjaGFpbiAqLwogCXN0cnVjdCBobGlzdF9ub2RlCWluZGV4X2hsaXN0OwogCkBAIC0zOTYsMjEgKzQzNSw2IEBACiAJICAgICAgIE5FVFJFR19SRUxFQVNFRCwJCS8qIGNhbGxlZCBmcmVlX25ldGRldiAqLwogCX0gcmVnX3N0YXRlOwogCi0JLyogTmV0IGRldmljZSBmZWF0dXJlcyAqLwotCXVuc2lnbmVkIGxvbmcJCWZlYXR1cmVzOwotI2RlZmluZSBORVRJRl9GX1NHCQkxCS8qIFNjYXR0ZXIvZ2F0aGVyIElPLiAqLwotI2RlZmluZSBORVRJRl9GX0lQX0NTVU0JCTIJLyogQ2FuIGNoZWNrc3VtIG9ubHkgVENQL1VEUCBvdmVyIElQdjQuICovCi0jZGVmaW5lIE5FVElGX0ZfTk9fQ1NVTQkJNAkvKiBEb2VzIG5vdCByZXF1aXJlIGNoZWNrc3VtLiBGLmUuIGxvb3BhY2suICovCi0jZGVmaW5lIE5FVElGX0ZfSFdfQ1NVTQkJOAkvKiBDYW4gY2hlY2tzdW0gYWxsIHRoZSBwYWNrZXRzLiAqLwotI2RlZmluZSBORVRJRl9GX0hJR0hETUEJCTMyCS8qIENhbiBETUEgdG8gaGlnaCBtZW1vcnkuICovCi0jZGVmaW5lIE5FVElGX0ZfRlJBR0xJU1QJNjQJLyogU2NhdHRlci9nYXRoZXIgSU8uICovCi0jZGVmaW5lIE5FVElGX0ZfSFdfVkxBTl9UWAkxMjgJLyogVHJhbnNtaXQgVkxBTiBodyBhY2NlbGVyYXRpb24gKi8KLSNkZWZpbmUgTkVUSUZfRl9IV19WTEFOX1JYCTI1NgkvKiBSZWNlaXZlIFZMQU4gaHcgYWNjZWxlcmF0aW9uICovCi0jZGVmaW5lIE5FVElGX0ZfSFdfVkxBTl9GSUxURVIJNTEyCS8qIFJlY2VpdmUgZmlsdGVyaW5nIG9uIFZMQU4gKi8KLSNkZWZpbmUgTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQJMTAyNAkvKiBEZXZpY2UgY2Fubm90IGhhbmRsZSBWTEFOIHBhY2tldHMgKi8KLSNkZWZpbmUgTkVUSUZfRl9UU08JCTIwNDgJLyogQ2FuIG9mZmxvYWQgVENQL0lQIHNlZ21lbnRhdGlvbiAqLwotI2RlZmluZSBORVRJRl9GX0xMVFgJCTQwOTYJLyogTG9ja0xlc3MgVFggKi8KLQogCS8qIENhbGxlZCBhZnRlciBkZXZpY2UgaXMgZGV0YWNoZWQgZnJvbSBuZXR3b3JrLiAqLwogCXZvaWQJCQkoKnVuaW5pdCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAJLyogQ2FsbGVkIGFmdGVyIGxhc3QgdXNlciByZWZlcmVuY2UgZGlzYXBwZWFycy4gKi8KQEAgLTQxOSwxMCArNDQzLDcgQEAKIAkvKiBQb2ludGVycyB0byBpbnRlcmZhY2Ugc2VydmljZSByb3V0aW5lcy4JKi8KIAlpbnQJCQkoKm9wZW4pKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCWludAkJCSgqc3RvcCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0JaW50CQkJKCpoYXJkX3N0YXJ0X3htaXQpIChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogI2RlZmluZSBIQVZFX05FVERFVl9QT0xMCi0JaW50CQkJKCpwb2xsKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50ICpxdW90YSk7CiAJaW50CQkJKCpoYXJkX2hlYWRlcikgKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQkJdW5zaWduZWQgc2hvcnQgdHlwZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmgKaW5kZXggMWQ1YjEwYS4uZjA4ZTg3MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmgKQEAgLTQxLDExICs0MSwxNSBAQAogc3RydWN0IG5mYXR0cgogewogCXVfaW50MTZfdCBuZmFfbGVuOwotCXVfaW50MTZfdCBuZmFfdHlwZTsKKwl1X2ludDE2X3QgbmZhX3R5cGU7CS8qIHdlIHVzZSAxNSBiaXRzIGZvciB0aGUgdHlwZSwgYW5kIHRoZSBoaWdoZXN0CisJCQkJICogYml0IHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgbmVzdGVkICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotLyogRklYTUU6IFNoYW1lbGVzc2x5IGNvcHkgYW5kIHBhc3RlZCBmcm9tIHJ0bmV0bGluay5oLCBpdCdzIHRpbWUKLSAqIAkgIHRvIHB1dCB0aGlzIGluIGEgZ2VuZXJpYyBmaWxlICovCisvKiBGSVhNRTogQXBhcnQgZnJvbSBORk5MX05GQV9ORVNURUQgc2hhbWVsZXNzbHkgY29weSBhbmQgcGFzdGVkIGZyb20KKyAqIHJ0bmV0bGluay5oLCBpdCdzIHRpbWUgdG8gcHV0IHRoaXMgaW4gYSBnZW5lcmljIGZpbGUgKi8KKworI2RlZmluZSBORk5MX05GQV9ORVNUCTB4ODAwMAorI2RlZmluZSBORkFfVFlQRShhdHRyKSAJKChhdHRyKS0+bmZhX3R5cGUgJiAweDdmZmYpCiAKICNkZWZpbmUgTkZBX0FMSUdOVE8gICAgIDQKICNkZWZpbmUgTkZBX0FMSUdOKGxlbikJKCgobGVuKSArIE5GQV9BTElHTlRPIC0gMSkgJiB+KE5GQV9BTElHTlRPIC0gMSkpCkBAIC01OSw3ICs2Myw3IEBACiAjZGVmaW5lIE5GQV9QQVlMT0FEKG5mYSkgKChpbnQpKChuZmEpLT5uZmFfbGVuKSAtIE5GQV9MRU5HVEgoMCkpCiAjZGVmaW5lIE5GQV9ORVNUKHNrYiwgdHlwZSkgXAogKHsJc3RydWN0IG5mYXR0ciAqX19zdGFydCA9IChzdHJ1Y3QgbmZhdHRyICopIChza2IpLT50YWlsOyBcCi0JTkZBX1BVVChza2IsIHR5cGUsIDAsIE5VTEwpOyBcCisJTkZBX1BVVChza2IsIChORk5MX05GQV9ORVNUIHwgdHlwZSksIDAsIE5VTEwpOyBcCiAJX19zdGFydDsgIH0pCiAjZGVmaW5lIE5GQV9ORVNUX0VORChza2IsIHN0YXJ0KSBcCiAoeyAgICAgIChzdGFydCktPm5mYV9sZW4gPSAoKHNrYiktPnRhaWwgLSAodW5zaWduZWQgY2hhciAqKSAoc3RhcnQpKTsgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oCmluZGV4IDVjNTU3NTEuLjExNmZjYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmgKQEAgLTcwLDE1ICs3MCwyNCBAQAogCiBlbnVtIGN0YXR0cl9wcm90b2luZm8gewogCUNUQV9QUk9UT0lORk9fVU5TUEVDLAotCUNUQV9QUk9UT0lORk9fVENQX1NUQVRFLAorCUNUQV9QUk9UT0lORk9fVENQLAogCV9fQ1RBX1BST1RPSU5GT19NQVgKIH07CiAjZGVmaW5lIENUQV9QUk9UT0lORk9fTUFYIChfX0NUQV9QUk9UT0lORk9fTUFYIC0gMSkKIAorZW51bSBjdGF0dHJfcHJvdG9pbmZvX3RjcCB7CisJQ1RBX1BST1RPSU5GT19UQ1BfVU5TUEVDLAorCUNUQV9QUk9UT0lORk9fVENQX1NUQVRFLAorCV9fQ1RBX1BST1RPSU5GT19UQ1BfTUFYCit9OworI2RlZmluZSBDVEFfUFJPVE9JTkZPX1RDUF9NQVggKF9fQ1RBX1BST1RPSU5GT19UQ1BfTUFYIC0gMSkKKwogZW51bSBjdGF0dHJfY291bnRlcnMgewogCUNUQV9DT1VOVEVSU19VTlNQRUMsCi0JQ1RBX0NPVU5URVJTX1BBQ0tFVFMsCi0JQ1RBX0NPVU5URVJTX0JZVEVTLAorCUNUQV9DT1VOVEVSU19QQUNLRVRTLAkJLyogb2xkIDY0Yml0IGNvdW50ZXJzICovCisJQ1RBX0NPVU5URVJTX0JZVEVTLAkJLyogb2xkIDY0Yml0IGNvdW50ZXJzICovCisJQ1RBX0NPVU5URVJTMzJfUEFDS0VUUywKKwlDVEFfQ09VTlRFUlMzMl9CWVRFUywKIAlfX0NUQV9DT1VOVEVSU19NQVgKIH07CiAjZGVmaW5lIENUQV9DT1VOVEVSU19NQVggKF9fQ1RBX0NPVU5URVJTX01BWCAtIDEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2suaAppbmRleCA3ZTAzM2U5Li5kMDc4YmI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmgKQEAgLTExNyw2ICsxMTcsMTAgQEAKIAkvKiBOQVQgaW5mbyAqLwogCUlQQ1RfTkFUSU5GT19CSVQgPSAxMCwKIAlJUENUX05BVElORk8gPSAoMSA8PCBJUENUX05BVElORk9fQklUKSwKKworCS8qIENvdW50ZXIgaGlnaGVzdCBiaXQgaGFzIGJlZW4gc2V0ICovCisJSVBDVF9DT1VOVEVSX0ZJTExJTkdfQklUID0gMTEsCisJSVBDVF9DT1VOVEVSX0ZJTExJTkcgPSAoMSA8PCBJUENUX0NPVU5URVJfRklMTElOR19CSVQpLAogfTsKIAogZW51bSBpcF9jb25udHJhY2tfZXhwZWN0X2V2ZW50cyB7CkBAIC0xMzMsMTEgKzEzNywxMyBAQAogCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3RjcC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19pY21wLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3Byb3RvX2dyZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19zY3RwLmg+CiAKIC8qIHBlciBjb25udHJhY2s6IHByb3RvY29sIHByaXZhdGUgZGF0YSAqLwogdW5pb24gaXBfY29ubnRyYWNrX3Byb3RvIHsKIAkvKiBpbnNlcnQgY29ubnRyYWNrIHByb3RvIHByaXZhdGUgZGF0YSBoZXJlICovCisJc3RydWN0IGlwX2N0X2dyZSBncmU7CiAJc3RydWN0IGlwX2N0X3NjdHAgc2N0cDsKIAlzdHJ1Y3QgaXBfY3RfdGNwIHRjcDsKIAlzdHJ1Y3QgaXBfY3RfaWNtcCBpY21wOwpAQCAtMTQ4LDYgKzE1NCw3IEBACiB9OwogCiAvKiBBZGQgcHJvdG9jb2wgaGVscGVyIGluY2x1ZGUgZmlsZSBoZXJlICovCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3BwdHAuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfYW1hbmRhLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2Z0cC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19pcmMuaD4KQEAgLTE1NSwxMiArMTYyLDIwIEBACiAvKiBwZXIgY29ubnRyYWNrOiBhcHBsaWNhdGlvbiBoZWxwZXIgcHJpdmF0ZSBkYXRhICovCiB1bmlvbiBpcF9jb25udHJhY2tfaGVscCB7CiAJLyogaW5zZXJ0IGNvbm50cmFjayBoZWxwZXIgcHJpdmF0ZSBkYXRhIChtYXN0ZXIpIGhlcmUgKi8KKwlzdHJ1Y3QgaXBfY3RfcHB0cF9tYXN0ZXIgY3RfcHB0cF9pbmZvOwogCXN0cnVjdCBpcF9jdF9mdHBfbWFzdGVyIGN0X2Z0cF9pbmZvOwogCXN0cnVjdCBpcF9jdF9pcmNfbWFzdGVyIGN0X2lyY19pbmZvOwogfTsKIAogI2lmZGVmIENPTkZJR19JUF9ORl9OQVRfTkVFREVECiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0X3BwdHAuaD4KKworLyogcGVyIGNvbm50cmFjazogbmF0IGFwcGxpY2F0aW9uIGhlbHBlciBwcml2YXRlIGRhdGEgKi8KK3VuaW9uIGlwX2Nvbm50cmFja19uYXRfaGVscCB7CisJLyogaW5zZXJ0IG5hdCBoZWxwZXIgcHJpdmF0ZSBkYXRhIGhlcmUgKi8KKwlzdHJ1Y3QgaXBfbmF0X3BwdHAgbmF0X3BwdHBfaW5mbzsKK307CiAjZW5kaWYKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC0xODEsOCArMTk2LDggQEAKIAogc3RydWN0IGlwX2Nvbm50cmFja19jb3VudGVyCiB7Ci0JdV9pbnQ2NF90IHBhY2tldHM7Ci0JdV9pbnQ2NF90IGJ5dGVzOworCXVfaW50MzJfdCBwYWNrZXRzOworCXVfaW50MzJfdCBieXRlczsKIH07CiAKIHN0cnVjdCBpcF9jb25udHJhY2tfaGVscGVyOwpAQCAtMjIzLDYgKzIzOCw3IEBACiAjaWZkZWYgQ09ORklHX0lQX05GX05BVF9ORUVERUQKIAlzdHJ1Y3QgewogCQlzdHJ1Y3QgaXBfbmF0X2luZm8gaW5mbzsKKwkJdW5pb24gaXBfY29ubnRyYWNrX25hdF9oZWxwIGhlbHA7CiAjaWYgZGVmaW5lZChDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREUpIHx8IFwKIAlkZWZpbmVkKENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERV9NT0RVTEUpCiAJCWludCBtYXNxX2luZGV4OwpAQCAtMzIwLDExICszMzYsMjggQEAKIGV4dGVybiBpbnQgaW52ZXJ0X3R1cGxlcHIoc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqaW52ZXJzZSwKIAkJCSAgY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqb3JpZyk7CiAKK2V4dGVybiB2b2lkIF9faXBfY3RfcmVmcmVzaF9hY2N0KHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkJICAgICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkgICAgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgICAgdW5zaWduZWQgbG9uZyBleHRyYV9qaWZmaWVzLAorCQkJCSBpbnQgZG9fYWNjdCk7CisKKy8qIFJlZnJlc2ggY29ubnRyYWNrIGZvciB0aGlzIG1hbnkgamlmZmllcyBhbmQgZG8gYWNjb3VudGluZyAqLworc3RhdGljIGlubGluZSB2b2lkIGlwX2N0X3JlZnJlc2hfYWNjdChzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwgCisJCQkJICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGV4dHJhX2ppZmZpZXMpCit7CisJX19pcF9jdF9yZWZyZXNoX2FjY3QoY3QsIGN0aW5mbywgc2tiLCBleHRyYV9qaWZmaWVzLCAxKTsKK30KKwogLyogUmVmcmVzaCBjb25udHJhY2sgZm9yIHRoaXMgbWFueSBqaWZmaWVzICovCi1leHRlcm4gdm9pZCBpcF9jdF9yZWZyZXNoX2FjY3Qoc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCi0JCQkgICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGV4dHJhX2ppZmZpZXMpOworc3RhdGljIGlubGluZSB2b2lkIGlwX2N0X3JlZnJlc2goc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCQkJIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkJIHVuc2lnbmVkIGxvbmcgZXh0cmFfamlmZmllcykKK3sKKwlfX2lwX2N0X3JlZnJlc2hfYWNjdChjdCwgMCwgc2tiLCBleHRyYV9qaWZmaWVzLCAwKTsKK30KIAogLyogVGhlc2UgYXJlIGZvciBOQVQuICBJY2t5LiAqLwogLyogVXBkYXRlIFRDUCB3aW5kb3cgdHJhY2tpbmcgZGF0YSB3aGVuIE5BVCBtYW5nbGVzIHRoZSBwYWNrZXQgKi8KQEAgLTM3Miw3ICs0MDUsNyBAQAogX19pcF9jb25udHJhY2tfZXhwZWN0X2ZpbmQoY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOwogCiBleHRlcm4gc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKgotaXBfY29ubnRyYWNrX2V4cGVjdF9maW5kX2dldChjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICp0dXBsZSk7CitpcF9jb25udHJhY2tfZXhwZWN0X2ZpbmQoY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOwogCiBleHRlcm4gc3RydWN0IGlwX2Nvbm50cmFja190dXBsZV9oYXNoICoKIF9faXBfY29ubnRyYWNrX2ZpbmQoY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19wcHRwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19wcHRwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE2MTQ0YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3BwdHAuaApAQCAtMCwwICsxLDMyNSBAQAorLyogUFBUUCBjb25zdGFudHMgYW5kIHN0cnVjdHMgKi8KKyNpZm5kZWYgX0NPTk5UUkFDS19QUFRQX0gKKyNkZWZpbmUgX0NPTk5UUkFDS19QUFRQX0gKKworLyogc3RhdGUgb2YgdGhlIGNvbnRyb2wgc2Vzc2lvbiAqLworZW51bSBwcHRwX2N0cmxzZXNzX3N0YXRlIHsKKwlQUFRQX1NFU1NJT05fTk9ORSwJCQkvKiBubyBzZXNzaW9uIHByZXNlbnQgKi8KKwlQUFRQX1NFU1NJT05fRVJST1IsCQkJLyogc29tZSBzZXNzaW9uIGVycm9yICovCisJUFBUUF9TRVNTSU9OX1NUT1BSRVEsCQkJLyogc3RvcF9zZXNzIHJlcXVlc3Qgc2VlbiAqLworCVBQVFBfU0VTU0lPTl9SRVFVRVNURUQsCQkJLyogc3RhcnRfc2VzcyByZXF1ZXN0IHNlZW4gKi8KKwlQUFRQX1NFU1NJT05fQ09ORklSTUVELAkJCS8qIHNlc3Npb24gZXN0YWJsaXNoZWQgKi8KK307CisKKy8qIHN0YXRlIG9mIHRoZSBjYWxsIGluc2lkZSB0aGUgY29udHJvbCBzZXNzaW9uICovCitlbnVtIHBwdHBfY3RybGNhbGxfc3RhdGUgeworCVBQVFBfQ0FMTF9OT05FLAorCVBQVFBfQ0FMTF9FUlJPUiwKKwlQUFRQX0NBTExfT1VUX1JFUSwKKwlQUFRQX0NBTExfT1VUX0NPTkYsCisJUFBUUF9DQUxMX0lOX1JFUSwKKwlQUFRQX0NBTExfSU5fUkVQLAorCVBQVFBfQ0FMTF9JTl9DT05GLAorCVBQVFBfQ0FMTF9DTEVBUl9SRVEsCit9OworCisKKy8qIGNvbm50cmFjayBwcml2YXRlIGRhdGEgKi8KK3N0cnVjdCBpcF9jdF9wcHRwX21hc3RlciB7CisJZW51bSBwcHRwX2N0cmxzZXNzX3N0YXRlIHNzdGF0ZTsJLyogc2Vzc2lvbiBzdGF0ZSAqLworCisJLyogZXZlcnl0aGluZyBiZWxvdyBpcyBnb2luZyB0byBiZSBwZXItZXhwZWN0YXRpb24gaW4gbmV3bmF0LAorCSAqIHNpbmNlIHRoZXJlIGNvdWxkIGJlIG1vcmUgdGhhbiBvbmUgY2FsbCB3aXRoaW4gb25lIHNlc3Npb24gKi8KKwllbnVtIHBwdHBfY3RybGNhbGxfc3RhdGUgY3N0YXRlOwkvKiBjYWxsIHN0YXRlICovCisJdV9pbnQxNl90IHBhY19jYWxsX2lkOwkJCS8qIGNhbGwgaWQgb2YgUEFDLCBob3N0IGJ5dGUgb3JkZXIgKi8KKwl1X2ludDE2X3QgcG5zX2NhbGxfaWQ7CQkJLyogY2FsbCBpZCBvZiBQTlMsIGhvc3QgYnl0ZSBvcmRlciAqLworCisJLyogaW4gcHJlLTIuNi4xMSB0aGlzIHVzZWQgdG8gYmUgcGVyLWV4cGVjdC4gTm93IGl0IGlzIHBlci1jb25udHJhY2sKKwkgKiBhbmQgdGhlcmVmb3JlIGltcG9zZXMgYSBmaXhlZCBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIG1hcHMgKi8KKwlzdHJ1Y3QgaXBfY3RfZ3JlX2tleW1hcCAqa2V5bWFwX29yaWcsICprZXltYXBfcmVwbHk7Cit9OworCisvKiBjb25udHJhY2tfZXhwZWN0IHByaXZhdGUgbWVtYmVyICovCitzdHJ1Y3QgaXBfY3RfcHB0cF9leHBlY3QgeworCWVudW0gcHB0cF9jdHJsY2FsbF9zdGF0ZSBjc3RhdGU7IAkvKiBjYWxsIHN0YXRlICovCisJdV9pbnQxNl90IHBhY19jYWxsX2lkOwkJCS8qIGNhbGwgaWQgb2YgUEFDICovCisJdV9pbnQxNl90IHBuc19jYWxsX2lkOwkJCS8qIGNhbGwgaWQgb2YgUE5TICovCit9OworCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgSVBfQ09OTlRSX1BQVFAJCVBQVFBfQ09OVFJPTF9QT1JUCisKKyNkZWZpbmUgUFBUUF9DT05UUk9MX1BPUlQJMTcyMworCisjZGVmaW5lIFBQVFBfUEFDS0VUX0NPTlRST0wJMQorI2RlZmluZSBQUFRQX1BBQ0tFVF9NR01UCTIKKworI2RlZmluZSBQUFRQX01BR0lDX0NPT0tJRQkweDFhMmIzYzRkCisKK3N0cnVjdCBwcHRwX3BrdF9oZHIgeworCV9fdTE2CXBhY2tldExlbmd0aDsKKwlfX2JlMTYJcGFja2V0VHlwZTsKKwlfX2JlMzIJbWFnaWNDb29raWU7Cit9OworCisvKiBQcHRwQ29udHJvbE1lc3NhZ2VUeXBlIHZhbHVlcyAqLworI2RlZmluZSBQUFRQX1NUQVJUX1NFU1NJT05fUkVRVUVTVAkxCisjZGVmaW5lIFBQVFBfU1RBUlRfU0VTU0lPTl9SRVBMWQkyCisjZGVmaW5lIFBQVFBfU1RPUF9TRVNTSU9OX1JFUVVFU1QJMworI2RlZmluZSBQUFRQX1NUT1BfU0VTU0lPTl9SRVBMWQkJNAorI2RlZmluZSBQUFRQX0VDSE9fUkVRVUVTVAkJNQorI2RlZmluZSBQUFRQX0VDSE9fUkVQTFkJCQk2CisjZGVmaW5lIFBQVFBfT1VUX0NBTExfUkVRVUVTVAkJNworI2RlZmluZSBQUFRQX09VVF9DQUxMX1JFUExZCQk4CisjZGVmaW5lIFBQVFBfSU5fQ0FMTF9SRVFVRVNUCQk5CisjZGVmaW5lIFBQVFBfSU5fQ0FMTF9SRVBMWQkJMTAKKyNkZWZpbmUgUFBUUF9JTl9DQUxMX0NPTk5FQ1QJCTExCisjZGVmaW5lIFBQVFBfQ0FMTF9DTEVBUl9SRVFVRVNUCQkxMgorI2RlZmluZSBQUFRQX0NBTExfRElTQ09OTkVDVF9OT1RJRlkJMTMKKyNkZWZpbmUgUFBUUF9XQU5fRVJST1JfTk9USUZZCQkxNAorI2RlZmluZSBQUFRQX1NFVF9MSU5LX0lORk8JCTE1CisKKyNkZWZpbmUgUFBUUF9NU0dfTUFYCQkJMTUKKworLyogUHB0cEdlbmVyYWxFcnJvciB2YWx1ZXMgKi8KKyNkZWZpbmUgUFBUUF9FUlJPUl9DT0RFX05PTkUJCTAKKyNkZWZpbmUgUFBUUF9OT1RfQ09OTkVDVEVECQkxCisjZGVmaW5lIFBQVFBfQkFEX0ZPUk1BVAkJCTIKKyNkZWZpbmUgUFBUUF9CQURfVkFMVUUJCQkzCisjZGVmaW5lIFBQVFBfTk9fUkVTT1VSQ0UJCTQKKyNkZWZpbmUgUFBUUF9CQURfQ0FMTElECQkJNQorI2RlZmluZSBQUFRQX1JFTU9WRV9ERVZJQ0VfRVJST1IJNgorCitzdHJ1Y3QgUHB0cENvbnRyb2xIZWFkZXIgeworCV9fYmUxNgltZXNzYWdlVHlwZTsKKwlfX3UxNglyZXNlcnZlZDsKK307CisKKy8qIEZyYW1pbmdDYXBhYmlsaXR5IEJpdG1hcCBWYWx1ZXMgKi8KKyNkZWZpbmUgUFBUUF9GUkFNRV9DQVBfQVNZTkMJCTB4MQorI2RlZmluZSBQUFRQX0ZSQU1FX0NBUF9TWU5DCQkweDIKKworLyogQmVhcmVyQ2FwYWJpbGl0eSBCaXRtYXAgVmFsdWVzICovCisjZGVmaW5lIFBQVFBfQkVBUkVSX0NBUF9BTkFMT0cJCTB4MQorI2RlZmluZSBQUFRQX0JFQVJFUl9DQVBfRElHSVRBTAkJMHgyCisKK3N0cnVjdCBQcHRwU3RhcnRTZXNzaW9uUmVxdWVzdCB7CisJX19iZTE2CXByb3RvY29sVmVyc2lvbjsKKwlfX3U4CXJlc2VydmVkMTsKKwlfX3U4CXJlc2VydmVkMjsKKwlfX2JlMzIJZnJhbWluZ0NhcGFiaWxpdHk7CisJX19iZTMyCWJlYXJlckNhcGFiaWxpdHk7CisJX19iZTE2CW1heENoYW5uZWxzOworCV9fYmUxNglmaXJtd2FyZVJldmlzaW9uOworCV9fdTgJaG9zdE5hbWVbNjRdOworCV9fdTgJdmVuZG9yU3RyaW5nWzY0XTsKK307CisKKy8qIFBwdHBTdGFydFNlc3Npb25SZXN1bHRDb2RlIFZhbHVlcyAqLworI2RlZmluZSBQUFRQX1NUQVJUX09LCQkJMQorI2RlZmluZSBQUFRQX1NUQVJUX0dFTkVSQUxfRVJST1IJMgorI2RlZmluZSBQUFRQX1NUQVJUX0FMUkVBRFlfQ09OTkVDVEVECTMKKyNkZWZpbmUgUFBUUF9TVEFSVF9OT1RfQVVUSE9SSVpFRAk0CisjZGVmaW5lIFBQVFBfU1RBUlRfVU5LTk9XTl9QUk9UT0NPTAk1CisKK3N0cnVjdCBQcHRwU3RhcnRTZXNzaW9uUmVwbHkgeworCV9fYmUxNglwcm90b2NvbFZlcnNpb247CisJX191OAlyZXN1bHRDb2RlOworCV9fdTgJZ2VuZXJhbEVycm9yQ29kZTsKKwlfX2JlMzIJZnJhbWluZ0NhcGFiaWxpdHk7CisJX19iZTMyCWJlYXJlckNhcGFiaWxpdHk7CisJX19iZTE2CW1heENoYW5uZWxzOworCV9fYmUxNglmaXJtd2FyZVJldmlzaW9uOworCV9fdTgJaG9zdE5hbWVbNjRdOworCV9fdTgJdmVuZG9yU3RyaW5nWzY0XTsKK307CisKKy8qIFBwdHBTdG9wUmVhc29ucyAqLworI2RlZmluZSBQUFRQX1NUT1BfTk9ORQkJCTEKKyNkZWZpbmUgUFBUUF9TVE9QX1BST1RPQ09MCQkyCisjZGVmaW5lIFBQVFBfU1RPUF9MT0NBTF9TSFVURE9XTgkzCisKK3N0cnVjdCBQcHRwU3RvcFNlc3Npb25SZXF1ZXN0IHsKKwlfX3U4CXJlYXNvbjsKK307CisKKy8qIFBwdHBTdG9wU2Vzc2lvblJlc3VsdENvZGUgKi8KKyNkZWZpbmUgUFBUUF9TVE9QX09LCQkJMQorI2RlZmluZSBQUFRQX1NUT1BfR0VORVJBTF9FUlJPUgkJMgorCitzdHJ1Y3QgUHB0cFN0b3BTZXNzaW9uUmVwbHkgeworCV9fdTgJcmVzdWx0Q29kZTsKKwlfX3U4CWdlbmVyYWxFcnJvckNvZGU7Cit9OworCitzdHJ1Y3QgUHB0cEVjaG9SZXF1ZXN0IHsKKwlfX2JlMzIgaWRlbnROdW1iZXI7Cit9OworCisvKiBQcHRwRWNob1JlcGx5UmVzdWx0Q29kZSAqLworI2RlZmluZSBQUFRQX0VDSE9fT0sJCQkxCisjZGVmaW5lIFBQVFBfRUNIT19HRU5FUkFMX0VSUk9SCQkyCisKK3N0cnVjdCBQcHRwRWNob1JlcGx5IHsKKwlfX2JlMzIJaWRlbnROdW1iZXI7CisJX191OAlyZXN1bHRDb2RlOworCV9fdTgJZ2VuZXJhbEVycm9yQ29kZTsKKwlfX3UxNglyZXNlcnZlZDsKK307CisKKy8qIFBwdHBGcmFtaW5nVHlwZSAqLworI2RlZmluZSBQUFRQX0FTWU5DX0ZSQU1JTkcJCTEKKyNkZWZpbmUgUFBUUF9TWU5DX0ZSQU1JTkcJCTIKKyNkZWZpbmUgUFBUUF9ET05UX0NBUkVfRlJBTUlORwkJMworCisvKiBQcHRwQ2FsbEJlYXJlclR5cGUgKi8KKyNkZWZpbmUgUFBUUF9BTkFMT0dfVFlQRQkJMQorI2RlZmluZSBQUFRQX0RJR0lUQUxfVFlQRQkJMgorI2RlZmluZSBQUFRQX0RPTlRfQ0FSRV9CRUFSRVJfVFlQRQkzCisKK3N0cnVjdCBQcHRwT3V0Q2FsbFJlcXVlc3QgeworCV9fYmUxNgljYWxsSUQ7CisJX19iZTE2CWNhbGxTZXJpYWxOdW1iZXI7CisJX19iZTMyCW1pbkJQUzsKKwlfX2JlMzIJbWF4QlBTOworCV9fYmUzMgliZWFyZXJUeXBlOworCV9fYmUzMglmcmFtaW5nVHlwZTsKKwlfX2JlMTYJcGFja2V0V2luZG93OworCV9fYmUxNglwYWNrZXRQcm9jRGVsYXk7CisJX191MTYJcmVzZXJ2ZWQxOworCV9fYmUxNglwaG9uZU51bWJlckxlbmd0aDsKKwlfX3UxNglyZXNlcnZlZDI7CisJX191OAlwaG9uZU51bWJlcls2NF07CisJX191OAlzdWJBZGRyZXNzWzY0XTsKK307CisKKy8qIFBwdHBDYWxsUmVzdWx0Q29kZSAqLworI2RlZmluZSBQUFRQX09VVENBTExfQ09OTkVDVAkJMQorI2RlZmluZSBQUFRQX09VVENBTExfR0VORVJBTF9FUlJPUgkyCisjZGVmaW5lIFBQVFBfT1VUQ0FMTF9OT19DQVJSSUVSCQkzCisjZGVmaW5lIFBQVFBfT1VUQ0FMTF9CVVNZCQk0CisjZGVmaW5lIFBQVFBfT1VUQ0FMTF9OT19ESUFMX1RPTkUJNQorI2RlZmluZSBQUFRQX09VVENBTExfVElNRU9VVAkJNgorI2RlZmluZSBQUFRQX09VVENBTExfRE9OVF9BQ0NFUFQJNworCitzdHJ1Y3QgUHB0cE91dENhbGxSZXBseSB7CisJX19iZTE2CWNhbGxJRDsKKwlfX2JlMTYJcGVlcnNDYWxsSUQ7CisJX191OAlyZXN1bHRDb2RlOworCV9fdTgJZ2VuZXJhbEVycm9yQ29kZTsKKwlfX2JlMTYJY2F1c2VDb2RlOworCV9fYmUzMgljb25uZWN0U3BlZWQ7CisJX19iZTE2CXBhY2tldFdpbmRvdzsKKwlfX2JlMTYJcGFja2V0UHJvY0RlbGF5OworCV9fYmUzMglwaHlzQ2hhbm5lbElEOworfTsKKworc3RydWN0IFBwdHBJbkNhbGxSZXF1ZXN0IHsKKwlfX2JlMTYJY2FsbElEOworCV9fYmUxNgljYWxsU2VyaWFsTnVtYmVyOworCV9fYmUzMgljYWxsQmVhcmVyVHlwZTsKKwlfX2JlMzIJcGh5c0NoYW5uZWxJRDsKKwlfX2JlMTYJZGlhbGVkTnVtYmVyTGVuZ3RoOworCV9fYmUxNglkaWFsaW5nTnVtYmVyTGVuZ3RoOworCV9fdTgJZGlhbGVkTnVtYmVyWzY0XTsKKwlfX3U4CWRpYWxpbmdOdW1iZXJbNjRdOworCV9fdTgJc3ViQWRkcmVzc1s2NF07Cit9OworCisvKiBQcHRwSW5DYWxsUmVzdWx0Q29kZSAqLworI2RlZmluZSBQUFRQX0lOQ0FMTF9BQ0NFUFQJCTEKKyNkZWZpbmUgUFBUUF9JTkNBTExfR0VORVJBTF9FUlJPUgkyCisjZGVmaW5lIFBQVFBfSU5DQUxMX0RPTlRfQUNDRVBUCQkzCisKK3N0cnVjdCBQcHRwSW5DYWxsUmVwbHkgeworCV9fYmUxNgljYWxsSUQ7CisJX19iZTE2CXBlZXJzQ2FsbElEOworCV9fdTgJcmVzdWx0Q29kZTsKKwlfX3U4CWdlbmVyYWxFcnJvckNvZGU7CisJX19iZTE2CXBhY2tldFdpbmRvdzsKKwlfX2JlMTYJcGFja2V0UHJvY0RlbGF5OworCV9fdTE2CXJlc2VydmVkOworfTsKKworc3RydWN0IFBwdHBJbkNhbGxDb25uZWN0ZWQgeworCV9fYmUxNglwZWVyc0NhbGxJRDsKKwlfX3UxNglyZXNlcnZlZDsKKwlfX2JlMzIJY29ubmVjdFNwZWVkOworCV9fYmUxNglwYWNrZXRXaW5kb3c7CisJX19iZTE2CXBhY2tldFByb2NEZWxheTsKKwlfX2JlMzIJY2FsbEZyYW1pbmdUeXBlOworfTsKKworc3RydWN0IFBwdHBDbGVhckNhbGxSZXF1ZXN0IHsKKwlfX2JlMTYJY2FsbElEOworCV9fdTE2CXJlc2VydmVkOworfTsKKworc3RydWN0IFBwdHBDYWxsRGlzY29ubmVjdE5vdGlmeSB7CisJX19iZTE2CWNhbGxJRDsKKwlfX3U4CXJlc3VsdENvZGU7CisJX191OAlnZW5lcmFsRXJyb3JDb2RlOworCV9fYmUxNgljYXVzZUNvZGU7CisJX191MTYJcmVzZXJ2ZWQ7CisJX191OAljYWxsU3RhdGlzdGljc1sxMjhdOworfTsKKworc3RydWN0IFBwdHBXYW5FcnJvck5vdGlmeSB7CisJX19iZTE2CXBlZXJzQ2FsbElEOworCV9fdTE2CXJlc2VydmVkOworCV9fYmUzMgljcmNFcnJvcnM7CisJX19iZTMyCWZyYW1pbmdFcnJvcnM7CisJX19iZTMyCWhhcmR3YXJlT3ZlclJ1bnM7CisJX19iZTMyCWJ1ZmZlck92ZXJSdW5zOworCV9fYmUzMgl0aW1lb3V0RXJyb3JzOworCV9fYmUzMglhbGlnbm1lbnRFcnJvcnM7Cit9OworCitzdHJ1Y3QgUHB0cFNldExpbmtJbmZvIHsKKwlfX2JlMTYJcGVlcnNDYWxsSUQ7CisJX191MTYJcmVzZXJ2ZWQ7CisJX19iZTMyCXNlbmRBY2NtOworCV9fYmUzMglyZWN2QWNjbTsKK307CisKK3VuaW9uIHBwdHBfY3RybF91bmlvbiB7CisJCXN0cnVjdCBQcHRwU3RhcnRTZXNzaW9uUmVxdWVzdAlzcmVxOworCQlzdHJ1Y3QgUHB0cFN0YXJ0U2Vzc2lvblJlcGx5CXNyZXA7CisJCXN0cnVjdCBQcHRwU3RvcFNlc3Npb25SZXF1ZXN0CXN0cmVxOworCQlzdHJ1Y3QgUHB0cFN0b3BTZXNzaW9uUmVwbHkJc3RyZXA7CisgICAgICAgICAgICAgICAgc3RydWN0IFBwdHBPdXRDYWxsUmVxdWVzdCAgICAgICBvY3JlcTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgUHB0cE91dENhbGxSZXBseSAgICAgICAgIG9jYWNrOworICAgICAgICAgICAgICAgIHN0cnVjdCBQcHRwSW5DYWxsUmVxdWVzdCAgICAgICAgaWNyZXE7CisgICAgICAgICAgICAgICAgc3RydWN0IFBwdHBJbkNhbGxSZXBseSAgICAgICAgICBpY2FjazsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgUHB0cEluQ2FsbENvbm5lY3RlZCAgICAgIGljY29uOworCQlzdHJ1Y3QgUHB0cENsZWFyQ2FsbFJlcXVlc3QJY2xycmVxOworICAgICAgICAgICAgICAgIHN0cnVjdCBQcHRwQ2FsbERpc2Nvbm5lY3ROb3RpZnkgZGlzYzsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgUHB0cFdhbkVycm9yTm90aWZ5ICAgICAgIHdhbmVycjsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgUHB0cFNldExpbmtJbmZvICAgICAgICAgIHNldGxpbms7Cit9OworCitleHRlcm4gaW50CisoKmlwX25hdF9wcHRwX2hvb2tfb3V0Ym91bmQpKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCSAgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCQkgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJICBzdHJ1Y3QgUHB0cENvbnRyb2xIZWFkZXIgKmN0bGgsCisJCQkgIHVuaW9uIHBwdHBfY3RybF91bmlvbiAqcHB0cFJlcSk7CisKK2V4dGVybiBpbnQKKygqaXBfbmF0X3BwdHBfaG9va19pbmJvdW5kKShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkgIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkJICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgc3RydWN0IFBwdHBDb250cm9sSGVhZGVyICpjdGxoLAorCQkJICB1bmlvbiBwcHRwX2N0cmxfdW5pb24gKnBwdHBSZXEpOworCitleHRlcm4gaW50CisoKmlwX25hdF9wcHRwX2hvb2tfZXhwX2dyZSkoc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cF9vcmlnLAorCQkJICAgIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpleHBfcmVwbHkpOworCitleHRlcm4gdm9pZAorKCppcF9uYXRfcHB0cF9ob29rX2V4cGVjdGZuKShzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJCSAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cCk7CisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9DT05OVFJBQ0tfUFBUUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19wcm90b19ncmUuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3Byb3RvX2dyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMDkwZWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19wcm90b19ncmUuaApAQCAtMCwwICsxLDExNCBAQAorI2lmbmRlZiBfQ09OTlRSQUNLX1BST1RPX0dSRV9ICisjZGVmaW5lIF9DT05OVFJBQ0tfUFJPVE9fR1JFX0gKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKy8qIEdSRSBQUk9UT0NPTCBIRUFERVIgKi8KKworLyogR1JFIFZlcnNpb24gZmllbGQgKi8KKyNkZWZpbmUgR1JFX1ZFUlNJT05fMTcwMQkweDAKKyNkZWZpbmUgR1JFX1ZFUlNJT05fUFBUUAkweDEKKworLyogR1JFIFByb3RvY29sIGZpZWxkICovCisjZGVmaW5lIEdSRV9QUk9UT0NPTF9QUFRQCTB4ODgwQgorCisvKiBHUkUgRmxhZ3MgKi8KKyNkZWZpbmUgR1JFX0ZMQUdfQwkJMHg4MAorI2RlZmluZSBHUkVfRkxBR19SCQkweDQwCisjZGVmaW5lIEdSRV9GTEFHX0sJCTB4MjAKKyNkZWZpbmUgR1JFX0ZMQUdfUwkJMHgxMAorI2RlZmluZSBHUkVfRkxBR19BCQkweDgwCisKKyNkZWZpbmUgR1JFX0lTX0MoZikJKChmKSZHUkVfRkxBR19DKQorI2RlZmluZSBHUkVfSVNfUihmKQkoKGYpJkdSRV9GTEFHX1IpCisjZGVmaW5lIEdSRV9JU19LKGYpCSgoZikmR1JFX0ZMQUdfSykKKyNkZWZpbmUgR1JFX0lTX1MoZikJKChmKSZHUkVfRkxBR19TKQorI2RlZmluZSBHUkVfSVNfQShmKQkoKGYpJkdSRV9GTEFHX0EpCisKKy8qIEdSRSBpcyBhIG1lc3M6IEZvdXIgZGlmZmVyZW50IHN0YW5kYXJkcyAqLworc3RydWN0IGdyZV9oZHIgeworI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTE2CXJlYzozLAorCQlzcnI6MSwKKwkJc2VxOjEsCisJCWtleToxLAorCQlyb3V0aW5nOjEsCisJCWNzdW06MSwKKwkJdmVyc2lvbjozLAorCQlyZXNlcnZlZDo0LAorCQlhY2s6MTsKKyNlbGlmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTE2CWNzdW06MSwKKwkJcm91dGluZzoxLAorCQlrZXk6MSwKKwkJc2VxOjEsCisJCXNycjoxLAorCQlyZWM6MywKKwkJYWNrOjEsCisJCXJlc2VydmVkOjQsCisJCXZlcnNpb246MzsKKyNlbHNlCisjZXJyb3IgIkFkanVzdCB5b3VyIDxhc20vYnl0ZW9yZGVyLmg+IGRlZmluZXMiCisjZW5kaWYKKwlfX3UxNglwcm90b2NvbDsKK307CisKKy8qIG1vZGlmaWVkIEdSRSBoZWFkZXIgZm9yIFBQVFAgKi8KK3N0cnVjdCBncmVfaGRyX3BwdHAgeworCV9fdTggIGZsYWdzOwkJLyogYml0ZmllbGQgKi8KKwlfX3U4ICB2ZXJzaW9uOwkJLyogc2hvdWxkIGJlIEdSRV9WRVJTSU9OX1BQVFAgKi8KKwlfX3UxNiBwcm90b2NvbDsJCS8qIHNob3VsZCBiZSBHUkVfUFJPVE9DT0xfUFBUUCAqLworCV9fdTE2IHBheWxvYWRfbGVuOwkvKiBzaXplIG9mIHBwcCBwYXlsb2FkLCBub3QgaW5jLiBncmUgaGVhZGVyICovCisJX191MTYgY2FsbF9pZDsJCS8qIHBlZXIncyBjYWxsX2lkIGZvciB0aGlzIHNlc3Npb24gKi8KKwlfX3UzMiBzZXE7CQkvKiBzZXF1ZW5jZSBudW1iZXIuICBQcmVzZW50IGlmIFM9PTEgKi8KKwlfX3UzMiBhY2s7CQkvKiBzZXEgbnVtYmVyIG9mIGhpZ2hlc3QgcGFja2V0IHJlY2lldmVkIGJ5ICovCisJCQkJLyogIHNlbmRlciBpbiB0aGlzIHNlc3Npb24gKi8KK307CisKKworLyogdGhpcyBpcyBwYXJ0IG9mIGlwX2Nvbm50cmFjayAqLworc3RydWN0IGlwX2N0X2dyZSB7CisJdW5zaWduZWQgaW50IHN0cmVhbV90aW1lb3V0OworCXVuc2lnbmVkIGludCB0aW1lb3V0OworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KK3N0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0Oworc3RydWN0IGlwX2Nvbm50cmFjazsKKworLyogc3RydWN0dXJlIGZvciBvcmlnaW5hbCA8LT4gcmVwbHkga2V5bWFwICovCitzdHJ1Y3QgaXBfY3RfZ3JlX2tleW1hcCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCisJc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSB0dXBsZTsKK307CisKKy8qIGFkZCBuZXcgdHVwbGUtPmtleV9yZXBseSBwYWlyIHRvIGtleW1hcCAqLworaW50IGlwX2N0X2dyZV9rZXltYXBfYWRkKHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkJIHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnQsCisJCQkgaW50IHJlcGx5KTsKKworLyogZGVsZXRlIGtleW1hcCBlbnRyaWVzICovCit2b2lkIGlwX2N0X2dyZV9rZXltYXBfZGVzdHJveShzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCk7CisKKworLyogZ2V0IHBvaW50ZXIgdG8gZ3JlIGtleSwgaWYgcHJlc2VudCAqLworc3RhdGljIGlubGluZSB1X2ludDMyX3QgKmdyZV9rZXkoc3RydWN0IGdyZV9oZHIgKmdyZWgpCit7CisJaWYgKCFncmVoLT5rZXkpCisJCXJldHVybiBOVUxMOworCWlmIChncmVoLT5jc3VtIHx8IGdyZWgtPnJvdXRpbmcpCisJCXJldHVybiAodV9pbnQzMl90ICopIChncmVoK3NpemVvZigqZ3JlaCkrNCk7CisJcmV0dXJuICh1X2ludDMyX3QgKikgKGdyZWgrc2l6ZW9mKCpncmVoKSk7Cit9CisKKy8qIGdldCBwb2ludGVyIG90IGdyZSBjc3VtLCBpZiBwcmVzZW50ICovCitzdGF0aWMgaW5saW5lIHVfaW50MTZfdCAqZ3JlX2NzdW0oc3RydWN0IGdyZV9oZHIgKmdyZWgpCit7CisJaWYgKCFncmVoLT5jc3VtKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gKHVfaW50MTZfdCAqKSAoZ3JlaCtzaXplb2YoKmdyZWgpKTsKK30KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9DT05OVFJBQ0tfUFJPVE9fR1JFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3Byb3RvY29sLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19wcm90b2NvbC5oCmluZGV4IGI2Yjk5YmUuLjJjNzZiODcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3Byb3RvY29sLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfcHJvdG9jb2wuaApAQCAtNTIsNiArNTIsOSBAQAogCWludCAoKnRvX25mYXR0cikoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mYXR0ciAqbmZhLAogCQkJIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2sgKmN0KTsKIAorCS8qIGNvbnZlcnQgbmZuZXRsaW5rIGF0dHJpYnV0ZXMgdG8gcHJvdG9pbmZvICovCisJaW50ICgqZnJvbV9uZmF0dHIpKHN0cnVjdCBuZmF0dHIgKnRiW10sIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0KTsKKwogCWludCAoKnR1cGxlX3RvX25mYXR0cikoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICp0KTsKIAlpbnQgKCpuZmF0dHJfdG9fdHVwbGUpKHN0cnVjdCBuZmF0dHIgKnRiW10sCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja190dXBsZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfdHVwbGUuaAppbmRleCBjMzNmMGI1Li4zMjMyZGIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja190dXBsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3R1cGxlLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9JUF9DT05OVFJBQ0tfVFVQTEVfSAogI2RlZmluZSBfSVBfQ09OTlRSQUNLX1RVUExFX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIEEgYHR1cGxlJyBpcyBhIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBpbmZvcm1hdGlvbiB0byB1bmlxdWVseQogICBpZGVudGlmeSBhIGNvbm5lY3Rpb24uICBpZS4gaWYgdHdvIHBhY2tldHMgaGF2ZSB0aGUgc2FtZSB0dXBsZSwgdGhleQogICBhcmUgaW4gdGhlIHNhbWUgY29ubmVjdGlvbjsgaWYgbm90LCB0aGV5IGFyZSBub3QuCkBAIC0xNyw3ICsxOSw3IEBACiAJdV9pbnQxNl90IGFsbDsKIAogCXN0cnVjdCB7Ci0JCXVfaW50MTZfdCBwb3J0OworCQlfX2JlMTYgcG9ydDsKIAl9IHRjcDsKIAlzdHJ1Y3QgewogCQl1X2ludDE2X3QgcG9ydDsKQEAgLTI4LDYgKzMwLDkgQEAKIAlzdHJ1Y3QgewogCQl1X2ludDE2X3QgcG9ydDsKIAl9IHNjdHA7CisJc3RydWN0IHsKKwkJX19iZTE2IGtleTsJLyoga2V5IGlzIDMyYml0LCBwcHRwIG9ubHkgdXNlcyAxNiAqLworCX0gZ3JlOwogfTsKIAogLyogVGhlIG1hbmlwdWxhYmxlIHBhcnQgb2YgdGhlIHR1cGxlLiAqLwpAQCAtNjEsNiArNjYsMTAgQEAKIAkJCXN0cnVjdCB7CiAJCQkJdV9pbnQxNl90IHBvcnQ7CiAJCQl9IHNjdHA7CisJCQlzdHJ1Y3QgeworCQkJCV9fYmUxNiBrZXk7CS8qIGtleSBpcyAzMmJpdCwgCisJCQkJCQkgKiBwcHRwIG9ubHkgdXNlcyAxNiAqLworCQkJfSBncmU7CiAJCX0gdTsKIAogCQkvKiBUaGUgcHJvdG9jb2wuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXQuaAppbmRleCBlMjAxZWM2Li40MWExMDdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0LmgKQEAgLTU4LDEwICs1OCw2IEBACiBzdHJ1Y3QgaXBfbmF0X2luZm8KIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGJ5c291cmNlOwotCi0JLyogSGVscGVyIChOVUxMIGlmIG5vbmUpLiAqLwotCXN0cnVjdCBpcF9uYXRfaGVscGVyICpoZWxwZXI7Ci0KIAlzdHJ1Y3QgaXBfbmF0X3NlcSBzZXFbSVBfQ1RfRElSX01BWF07CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdF9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdF9jb3JlLmgKaW5kZXggM2I1MGViOS4uMzBkYjIzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXRfY29yZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0X2NvcmUuaApAQCAtNSwxNiArNSwxNCBAQAogCiAvKiBUaGlzIGhlYWRlciB1c2VkIHRvIHNoYXJlIGNvcmUgZnVuY3Rpb25hbGl0eSBiZXR3ZWVuIHRoZSBzdGFuZGFsb25lCiAgICBOQVQgbW9kdWxlLCBhbmQgdGhlIGNvbXBhdGliaWxpdHkgbGF5ZXIncyB1c2Ugb2YgTkFUIGZvciBtYXNxdWVyYWRpbmcuICovCi1leHRlcm4gaW50IGlwX25hdF9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgaXBfbmF0X2NsZWFudXAodm9pZCk7CiAKLWV4dGVybiB1bnNpZ25lZCBpbnQgbmF0X3BhY2tldChzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKK2V4dGVybiB1bnNpZ25lZCBpbnQgaXBfbmF0X3BhY2tldChzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKIAkJCSAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGNvbm50cmFja2luZm8sCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sCiAJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKipwc2tiKTsKIAotZXh0ZXJuIGludCBpY21wX3JlcGx5X3RyYW5zbGF0aW9uKHN0cnVjdCBza19idWZmICoqcHNrYiwKLQkJCQkgIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAotCQkJCSAgZW51bSBpcF9uYXRfbWFuaXBfdHlwZSBtYW5pcCwKLQkJCQkgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIpOworZXh0ZXJuIGludCBpcF9uYXRfaWNtcF9yZXBseV90cmFuc2xhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkJCSBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJCQkJIGVudW0gaXBfbmF0X21hbmlwX3R5cGUgbWFuaXAsCisJCQkJCSBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyKTsKICNlbmRpZiAvKiBfSVBfTkFUX0NPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXRfcHB0cC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXRfcHB0cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZjY2YzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdF9wcHRwLmgKQEAgLTAsMCArMSwxMSBAQAorLyogUFBUUCBjb25zdGFudHMgYW5kIHN0cnVjdHMgKi8KKyNpZm5kZWYgX05BVF9QUFRQX0gKKyNkZWZpbmUgX05BVF9QUFRQX0gKKworLyogY29ubnRyYWNrIHByaXZhdGUgZGF0YSAqLworc3RydWN0IGlwX25hdF9wcHRwIHsKKwl1X2ludDE2X3QgcG5zX2NhbGxfaWQ7CQkvKiBOQVQnZWQgUE5TIGNhbGwgaWQgKi8KKwl1X2ludDE2X3QgcGFjX2NhbGxfaWQ7CQkvKiBOQVQnZWQgUEFDIGNhbGwgaWQgKi8KK307CisKKyNlbmRpZiAvKiBfTkFUX1BQVFBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaAppbmRleCA1OGM3MmE1Li41OWY3MGIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaApAQCAtNDU1LDYgKzQ1NSw5IEBACiAKIC8qIENoZWNrIGZvciBhbiBleHRlbnNpb24gKi8KIGV4dGVybiBpbnQgaXA2dF9leHRfaGRyKHU4IG5leHRoZHIpOworLyogZmluZCBzcGVjaWZpZWQgaGVhZGVyIGFuZCBnZXQgb2Zmc2V0IHRvIGl0ICovCitleHRlcm4gaW50IGlwdjZfZmluZF9oZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50ICpvZmZzZXQsCisJCQkgdTggdGFyZ2V0KTsKIAogI2RlZmluZSBJUDZUX0FMSUdOKHMpICgoKHMpICsgKF9fYWxpZ25vZl9fKHN0cnVjdCBpcDZ0X2VudHJ5KS0xKSkgJiB+KF9fYWxpZ25vZl9fKHN0cnVjdCBpcDZ0X2VudHJ5KS0xKSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaAppbmRleCA3YmJkMjU5Li5iYTI1Y2E4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaApAQCAtMjAsNiArMjAsNyBAQAogI2RlZmluZSBORVRMSU5LX0lQNl9GVwkJMTMKICNkZWZpbmUgTkVUTElOS19ETlJUTVNHCQkxNAkvKiBERUNuZXQgcm91dGluZyBtZXNzYWdlcyAqLwogI2RlZmluZSBORVRMSU5LX0tPQkpFQ1RfVUVWRU5UCTE1CS8qIEtlcm5lbCBtZXNzYWdlcyB0byB1c2Vyc3BhY2UgKi8KKyNkZWZpbmUgTkVUTElOS19HRU5FUklDCQkxNgogCiAjZGVmaW5lIE1BWF9MSU5LUyAzMgkJCiAKQEAgLTEzMCw3ICsxMzEsNyBAQAogZXh0ZXJuIHZvaWQgbmV0bGlua19hY2soc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsIGludCBlcnIpOwogZXh0ZXJuIGludCBuZXRsaW5rX3VuaWNhc3Qoc3RydWN0IHNvY2sgKnNzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191MzIgcGlkLCBpbnQgbm9uYmxvY2spOwogZXh0ZXJuIGludCBuZXRsaW5rX2Jyb2FkY2FzdChzdHJ1Y3Qgc29jayAqc3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3UzMiBwaWQsCi0JCQkgICAgIF9fdTMyIGdyb3VwLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgYWxsb2NhdGlvbik7CisJCQkgICAgIF9fdTMyIGdyb3VwLCBnZnBfdCBhbGxvY2F0aW9uKTsKIGV4dGVybiB2b2lkIG5ldGxpbmtfc2V0X2VycihzdHJ1Y3Qgc29jayAqc3NrLCBfX3UzMiBwaWQsIF9fdTMyIGdyb3VwLCBpbnQgY29kZSk7CiBleHRlcm4gaW50IG5ldGxpbmtfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CiBleHRlcm4gaW50IG5ldGxpbmtfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmgKaW5kZXggNWFkZTU0YS4uY2E1YTg3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmgKQEAgLTg2LDcgKzg2LDcgQEAKIAogI2Vsc2UKICNkZWZpbmUgbmV0cG9sbF9yeChhKSAwCi0jZGVmaW5lIG5ldHBvbGxfcG9sbF9sb2NrKGEpIDAKKyNkZWZpbmUgbmV0cG9sbF9wb2xsX2xvY2soYSkgTlVMTAogI2RlZmluZSBuZXRwb2xsX3BvbGxfdW5sb2NrKGEpCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAppbmRleCBkOWEyNTY0Li5hY2JmMzFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaApAQCAtMTksNyArMTksNyBAQAogI2RlZmluZQlBU19FSU8JCShfX0dGUF9CSVRTX1NISUZUICsgMCkJLyogSU8gZXJyb3Igb24gYXN5bmMgd3JpdGUgKi8KICNkZWZpbmUgQVNfRU5PU1BDCShfX0dGUF9CSVRTX1NISUZUICsgMSkJLyogRU5PU1BDIG9uIGFzeW5jIHdyaXRlICovCiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fbm9jYXN0IG1hcHBpbmdfZ2ZwX21hc2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiBtYXBwaW5nKQorc3RhdGljIGlubGluZSBnZnBfdCBtYXBwaW5nX2dmcF9tYXNrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICogbWFwcGluZykKIHsKIAlyZXR1cm4gbWFwcGluZy0+ZmxhZ3MgJiBfX0dGUF9CSVRTX01BU0s7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCmluZGV4IDcyZmUzMzguLjcxODM0ZjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC0xODUsNiArMTg1LDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfNjFDMTAyCTB4MDkwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV82M0M4MTUJMHgxMDAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNjQJMHgwMDUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNjRSCTB4MDQxMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDY2CTB4MDA1RQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDY4CTB4MDA1NAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDY0QQkweDAwNUMKQEAgLTM5Miw2ICszOTMsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TXzg3NTYwX1VTQgkweDAwMTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OU184MzgxNQkJMHgwMDIwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfODM4MjAJCTB4MDAyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TX1NBVFVSTgkJMHgwMDM1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfU0N4MjAwX0JSSURHRQkweDA1MDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OU19TQ3gyMDBfU01JCTB4MDUwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TX1NDeDIwMF9JREUJMHgwNTAyCkBAIC00OTEsNiArNDkzLDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTUlfTUVHQVJBSUQyCTB4OTA2MAogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQU1ECQkweDEwMjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfSzhfTkIJCTB4MTEwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9MQU5DRQkJMHgyMDAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0xBTkNFX0hPTUUJMHgyMDAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX1NDU0kJCTB4MjAyMApAQCAtNTU4LDYgKzU2MSw3IEBACiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfREVMTAkJMHgxMDI4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfREVMTF9SQUNJSUkJMHgwMDA4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfREVMTF9SQUM0CQkweDAwMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ERUxMX1BFUkM1CTB4MDAxNQogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfTUFUUk9YCQkweDEwMkIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVRST1hfTUdBXzIJMHgwNTE4CkBAIC03MTksNiArNzIzLDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9ESVZBX0VWRVJFU1QJMHgxMjgyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfRElWQV9BVVgJMHgxMjkwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfRElWQV9STVAzCTB4MTMwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX0RJVkFfSFVSUklDQU5FCTB4MTMyYQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX0NJU1MJCTB4MzIxMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX0NJU1NBCQkweDMyMjAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9DSVNTQgkJMHgzMjIyCkBAIC03NjgsNiArNzczLDggQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV9UVlA0MDEwCTB4M2QwNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1RWUDQwMjAJMHgzZDA3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfNDQ1MAkJMHg4MDExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfWFgyMV9YWDExCTB4ODAzMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1g1MTUJCTB4ODAzNgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzExMzAJCTB4YWMxMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzEwMzEJCTB4YWMxMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzExMzEJCTB4YWMxNQpAQCAtNzg0LDEyICs3OTEsMTcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV80NDUxCQkweGFjNDIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV80NTEwCQkweGFjNDQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV80NTIwCQkweGFjNDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV83NTEwCQkweGFjNDcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV83NjEwCQkweGFjNDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV83NDEwCQkweGFjNDkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xNDEwCQkweGFjNTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xNDIwCQkweGFjNTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xNDUxQQkJMHhhYzUyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTYyMAkJMHhhYzU0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTUyMAkJMHhhYzU1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTUxMAkJMHhhYzU2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfWDYyMAkJMHhhYzhkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfWDQyMAkJMHhhYzhlCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TT05ZCQkweDEwNGQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TT05ZX0NYRDMyMjIJMHg4MDM5CkBAIC05NzUsNiArOTg3LDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TVU5fU0FCUkUJCTB4YTAwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NVTl9IVU1NSU5HQklSRAkweGEwMDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TVU5fVE9NQVRJTExPCTB4YTgwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NVTl9DQVNTSU5JCTB4YWJiYQogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ01ECQkweDEwOTUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DTURfNjQwCQkweDA2NDAKQEAgLTEyNjcsNyArMTI4MCw4IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A1MV9TQVRBCTB4MDI2NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNTFfU0FUQTIJMHgwMjY3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A1NV9JREUJMHgwMzZFCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A1NV9TQVRBCTB4MDM2RgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNTVfU0FUQQkweDAzN0UKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDU1X1NBVEEyCTB4MDM3RgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTIJCTB4MDI2OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTMJCTB4MDI2OQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9NQ1A1MV9BVURJTwkweDAyNkIKQEAgLTIxODUsNyArMjE5OSwxMiBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VORV8xMjExCQkweDEyMTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9FTkVfMTIyNQkJMHgxMjI1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRU5FXzE0MTAJCTB4MTQxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VORV83MTAJCTB4MTQxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VORV83MTIJCTB4MTQxMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VORV8xNDIwCQkweDE0MjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FTkVfNzIwCQkweDE0MjEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FTkVfNzIyCQkweDE0MjIKKwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NIRUxTSU8JCTB4MTQyNQogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfTUlQUwkJMHgxNTNmCkBAIC0yMjUyLDYgKzIyNzEsOSBAQAogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfSU5GSU5JQ09OCQkweDE4MjAKIAorI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NJVEVDT00JCTB4MTgyZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJVEVDT01fREMxMDVWMgkweDMwNjkKKwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RPUFNQSU4JCTB4MTg2NwogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVERJICAgICAgICAgICAgICAgMHgxOTJFCkBAIC0yNjc1LDYgKzI2OTcsNyBAQAogCiAjZGVmaW5lIFBDSV9TVUJWRU5ET1JfSURfRVhTWVMJCTB4ZDg0ZAogI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0VYU1lTXzQwMTQJMHg0MDE0CisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfRVhTWVNfNDA1NQkweDQwNTUKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RJR0VSSkVUCQkweGUxNTkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdFUkpFVF8zMDAJMHgwMDAxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oIGIvaW5jbHVkZS9saW51eC9wb3NpeF9hY2wuaAppbmRleCA0Y2FlZGRkLi40YmMyNDEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oCisrKyBiL2luY2x1ZGUvbGludXgvcG9zaXhfYWNsLmgKQEAgLTcxLDExICs3MSwxMSBAQAogCiAvKiBwb3NpeF9hY2wuYyAqLwogCi1leHRlcm4gc3RydWN0IHBvc2l4X2FjbCAqcG9zaXhfYWNsX2FsbG9jKGludCwgdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKLWV4dGVybiBzdHJ1Y3QgcG9zaXhfYWNsICpwb3NpeF9hY2xfY2xvbmUoY29uc3Qgc3RydWN0IHBvc2l4X2FjbCAqLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QpOworZXh0ZXJuIHN0cnVjdCBwb3NpeF9hY2wgKnBvc2l4X2FjbF9hbGxvYyhpbnQsIGdmcF90KTsKK2V4dGVybiBzdHJ1Y3QgcG9zaXhfYWNsICpwb3NpeF9hY2xfY2xvbmUoY29uc3Qgc3RydWN0IHBvc2l4X2FjbCAqLCBnZnBfdCk7CiBleHRlcm4gaW50IHBvc2l4X2FjbF92YWxpZChjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICopOwogZXh0ZXJuIGludCBwb3NpeF9hY2xfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKiwgY29uc3Qgc3RydWN0IHBvc2l4X2FjbCAqLCBpbnQpOwotZXh0ZXJuIHN0cnVjdCBwb3NpeF9hY2wgKnBvc2l4X2FjbF9mcm9tX21vZGUobW9kZV90LCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QpOworZXh0ZXJuIHN0cnVjdCBwb3NpeF9hY2wgKnBvc2l4X2FjbF9mcm9tX21vZGUobW9kZV90LCBnZnBfdCk7CiBleHRlcm4gaW50IHBvc2l4X2FjbF9lcXVpdl9tb2RlKGNvbnN0IHN0cnVjdCBwb3NpeF9hY2wgKiwgbW9kZV90ICopOwogZXh0ZXJuIGludCBwb3NpeF9hY2xfY3JlYXRlX21hc3Eoc3RydWN0IHBvc2l4X2FjbCAqLCBtb2RlX3QgKik7CiBleHRlcm4gaW50IHBvc2l4X2FjbF9jaG1vZF9tYXNxKHN0cnVjdCBwb3NpeF9hY2wgKiwgbW9kZV90KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFkaXgtdHJlZS5oIGIvaW5jbHVkZS9saW51eC9yYWRpeC10cmVlLmgKaW5kZXggOWM1MTkxNy4uMDQ1ZDQ3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yYWRpeC10cmVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yYWRpeC10cmVlLmgKQEAgLTUwLDcgKzUwLDcgQEAKIHVuc2lnbmVkIGludAogcmFkaXhfdHJlZV9nYW5nX2xvb2t1cChzdHJ1Y3QgcmFkaXhfdHJlZV9yb290ICpyb290LCB2b2lkICoqcmVzdWx0cywKIAkJCXVuc2lnbmVkIGxvbmcgZmlyc3RfaW5kZXgsIHVuc2lnbmVkIGludCBtYXhfaXRlbXMpOwotaW50IHJhZGl4X3RyZWVfcHJlbG9hZCh1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX21hc2spOworaW50IHJhZGl4X3RyZWVfcHJlbG9hZChnZnBfdCBnZnBfbWFzayk7CiB2b2lkIHJhZGl4X3RyZWVfaW5pdCh2b2lkKTsKIHZvaWQgKnJhZGl4X3RyZWVfdGFnX3NldChzdHJ1Y3QgcmFkaXhfdHJlZV9yb290ICpyb290LAogCQkJdW5zaWduZWQgbG9uZyBpbmRleCwgaW50IHRhZyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmggYi9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKaW5kZXggNGU2NWViNC4uNzAxOTFhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaApAQCAtOTQsNiArOTQsNyBAQAogCWxvbmcgIAkgICAgICAgCWJhdGNoOyAgICAgICAgICAgLyogQmF0Y2ggIyBmb3IgY3VycmVudCBSQ1UgYmF0Y2ggKi8KIAlzdHJ1Y3QgcmN1X2hlYWQgKm54dGxpc3Q7CiAJc3RydWN0IHJjdV9oZWFkICoqbnh0dGFpbDsKKwlsb25nICAgICAgICAgICAgY291bnQ7IC8qICMgb2YgcXVldWVkIGl0ZW1zICovCiAJc3RydWN0IHJjdV9oZWFkICpjdXJsaXN0OwogCXN0cnVjdCByY3VfaGVhZCAqKmN1cnRhaWw7CiAJc3RydWN0IHJjdV9oZWFkICpkb25lbGlzdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVib290LmggYi9pbmNsdWRlL2xpbnV4L3JlYm9vdC5oCmluZGV4IDNiMzI2NmYuLjdhYjJjZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVib290LmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWJvb3QuaApAQCAtNTksNiArNTksMTAgQEAKICAqIEFyY2hpdGVjdHVyZSBpbmRlcGVuZGVudCBpbXBsZW1lbmF0aW9ucyBvZiBzeXNfcmVib290IGNvbW1hbmRzLgogICovCiAKK2V4dGVybiB2b2lkIGtlcm5lbF9yZXN0YXJ0X3ByZXBhcmUoY2hhciAqY21kKTsKK2V4dGVybiB2b2lkIGtlcm5lbF9oYWx0X3ByZXBhcmUodm9pZCk7CitleHRlcm4gdm9pZCBrZXJuZWxfcG93ZXJfb2ZmX3ByZXBhcmUodm9pZCk7CisKIGV4dGVybiB2b2lkIGtlcm5lbF9yZXN0YXJ0KGNoYXIgKmNtZCk7CiBleHRlcm4gdm9pZCBrZXJuZWxfaGFsdCh2b2lkKTsKIGV4dGVybiB2b2lkIGtlcm5lbF9wb3dlcl9vZmYodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKaW5kZXggNDllNjE3Zi4uMjc1MTlkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtMTA3LDEzICsxMDcsMjUgQEAKIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAorLyoKKyAqIFRhc2sgc3RhdGUgYml0bWFzay4gTk9URSEgVGhlc2UgYml0cyBhcmUgYWxzbworICogZW5jb2RlZCBpbiBmcy9wcm9jL2FycmF5LmM6IGdldF90YXNrX3N0YXRlKCkuCisgKgorICogV2UgaGF2ZSB0d28gc2VwYXJhdGUgc2V0cyBvZiBmbGFnczogdGFzay0+c3RhdGUKKyAqIGlzIGFib3V0IHJ1bm5hYmlsaXR5LCB3aGlsZSB0YXNrLT5leGl0X3N0YXRlIGFyZQorICogYWJvdXQgdGhlIHRhc2sgZXhpdGluZy4gQ29uZnVzaW5nLCBidXQgdGhpcyB3YXkKKyAqIG1vZGlmeWluZyBvbmUgc2V0IGNhbid0IG1vZGlmeSB0aGUgb3RoZXIgb25lIGJ5CisgKiBtaXN0YWtlLgorICovCiAjZGVmaW5lIFRBU0tfUlVOTklORwkJMAogI2RlZmluZSBUQVNLX0lOVEVSUlVQVElCTEUJMQogI2RlZmluZSBUQVNLX1VOSU5URVJSVVBUSUJMRQkyCiAjZGVmaW5lIFRBU0tfU1RPUFBFRAkJNAogI2RlZmluZSBUQVNLX1RSQUNFRAkJOAorLyogaW4gdHNrLT5leGl0X3N0YXRlICovCiAjZGVmaW5lIEVYSVRfWk9NQklFCQkxNgogI2RlZmluZSBFWElUX0RFQUQJCTMyCisvKiBpbiB0c2stPnN0YXRlIGFnYWluICovCiAjZGVmaW5lIFRBU0tfTk9OSU5URVJBQ1RJVkUJNjQKIAogI2RlZmluZSBfX3NldF90YXNrX3N0YXRlKHRzaywgc3RhdGVfdmFsdWUpCQlcCkBAIC0xMDA2LDYgKzEwMTgsNyBAQAogZXh0ZXJuIGludCBfX2tpbGxfcGdfaW5mbyhpbnQgc2lnLCBzdHJ1Y3Qgc2lnaW5mbyAqaW5mbywgcGlkX3QgcGdycCk7CiBleHRlcm4gaW50IGtpbGxfcGdfaW5mbyhpbnQsIHN0cnVjdCBzaWdpbmZvICosIHBpZF90KTsKIGV4dGVybiBpbnQga2lsbF9wcm9jX2luZm8oaW50LCBzdHJ1Y3Qgc2lnaW5mbyAqLCBwaWRfdCk7CitleHRlcm4gaW50IGtpbGxfcHJvY19pbmZvX2FzX3VpZChpbnQsIHN0cnVjdCBzaWdpbmZvICosIHBpZF90LCB1aWRfdCwgdWlkX3QpOwogZXh0ZXJuIHZvaWQgZG9fbm90aWZ5X3BhcmVudChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgaW50KTsKIGV4dGVybiB2b2lkIGZvcmNlX3NpZyhpbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIGV4dGVybiB2b2lkIGZvcmNlX3NpZ19zcGVjaWZpYyhpbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAppbmRleCAwZTQzNDYwLi42MjczODJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKKysrIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCkBAIC0yNjM0LDggKzI2MzQsNyBAQAogCXJldHVybiBzZWN1cml0eV9vcHMtPnNvY2tldF9nZXRwZWVyc2VjKHNvY2ssIG9wdHZhbCwgb3B0bGVuLCBsZW4pOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9za19hbGxvYyhzdHJ1Y3Qgc29jayAqc2ssIGludCBmYW1pbHksCi0JCQkJICAgIHVuc2lnbmVkIGludCBfX25vY2FzdCBwcmlvcml0eSkKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3NrX2FsbG9jKHN0cnVjdCBzb2NrICpzaywgaW50IGZhbWlseSwgZ2ZwX3QgcHJpb3JpdHkpCiB7CiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+c2tfYWxsb2Nfc2VjdXJpdHkoc2ssIGZhbWlseSwgcHJpb3JpdHkpOwogfQpAQCAtMjc1Miw4ICsyNzUxLDcgQEAKIAlyZXR1cm4gLUVOT1BST1RPT1BUOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9za19hbGxvYyhzdHJ1Y3Qgc29jayAqc2ssIGludCBmYW1pbHksCi0JCQkJICAgIHVuc2lnbmVkIGludCBfX25vY2FzdCBwcmlvcml0eSkKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3NrX2FsbG9jKHN0cnVjdCBzb2NrICpzaywgaW50IGZhbWlseSwgZ2ZwX3QgcHJpb3JpdHkpCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCAyNzQxYzBjLi44ZjVkOWU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKQEAgLTE1NSw4ICsxNTUsNiBAQAogI2RlZmluZSBTS0JfREFUQVJFRl9TSElGVCAxNgogI2RlZmluZSBTS0JfREFUQVJFRl9NQVNLICgoMSA8PCBTS0JfREFUQVJFRl9TSElGVCkgLSAxKQogCi1leHRlcm4gc3RydWN0IHRpbWV2YWwgc2tiX3R2X2Jhc2U7Ci0KIHN0cnVjdCBza2JfdGltZXZhbCB7CiAJdTMyCW9mZl9zZWM7CiAJdTMyCW9mZl91c2VjOwpAQCAtMTc1LDcgKzE3Myw3IEBACiAgKglAcHJldjogUHJldmlvdXMgYnVmZmVyIGluIGxpc3QKICAqCUBsaXN0OiBMaXN0IHdlIGFyZSBvbgogICoJQHNrOiBTb2NrZXQgd2UgYXJlIG93bmVkIGJ5Ci0gKglAdHN0YW1wOiBUaW1lIHdlIGFycml2ZWQgc3RvcmVkIGFzIG9mZnNldCB0byBza2JfdHZfYmFzZQorICoJQHRzdGFtcDogVGltZSB3ZSBhcnJpdmVkCiAgKglAZGV2OiBEZXZpY2Ugd2UgYXJyaXZlZCBvbi9hcmUgbGVhdmluZyBieQogICoJQGlucHV0X2RldjogRGV2aWNlIHdlIGFycml2ZWQgb24KICAqCUBoOiBUcmFuc3BvcnQgbGF5ZXIgaGVhZGVyCkBAIC0zMDQsMzcgKzMwMiwzNyBAQAogCiBleHRlcm4gdm9pZAkgICAgICAgX19rZnJlZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gc3RydWN0IHNrX2J1ZmYgKl9fYWxsb2Nfc2tiKHVuc2lnbmVkIGludCBzaXplLAotCQkJCSAgIHVuc2lnbmVkIGludCBfX25vY2FzdCBwcmlvcml0eSwgaW50IGZjbG9uZSk7CisJCQkJICAgZ2ZwX3QgcHJpb3JpdHksIGludCBmY2xvbmUpOwogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqYWxsb2Nfc2tiKHVuc2lnbmVkIGludCBzaXplLAotCQkJCQl1bnNpZ25lZCBpbnQgX19ub2Nhc3QgcHJpb3JpdHkpCisJCQkJCWdmcF90IHByaW9yaXR5KQogewogCXJldHVybiBfX2FsbG9jX3NrYihzaXplLCBwcmlvcml0eSwgMCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmFsbG9jX3NrYl9mY2xvbmUodW5zaWduZWQgaW50IHNpemUsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgcHJpb3JpdHkpCisJCQkJCSAgICAgICBnZnBfdCBwcmlvcml0eSkKIHsKIAlyZXR1cm4gX19hbGxvY19za2Ioc2l6ZSwgcHJpb3JpdHksIDEpOwogfQogCiBleHRlcm4gc3RydWN0IHNrX2J1ZmYgKmFsbG9jX3NrYl9mcm9tX2NhY2hlKGttZW1fY2FjaGVfdCAqY3AsCiAJCQkJCSAgICB1bnNpZ25lZCBpbnQgc2l6ZSwKLQkJCQkJICAgIHVuc2lnbmVkIGludCBfX25vY2FzdCBwcmlvcml0eSk7CisJCQkJCSAgICBnZnBfdCBwcmlvcml0eSk7CiBleHRlcm4gdm9pZAkgICAgICAga2ZyZWVfc2tibWVtKHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIHN0cnVjdCBza19idWZmICpza2JfY2xvbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgdW5zaWduZWQgaW50IF9fbm9jYXN0IHByaW9yaXR5KTsKKwkJCQkgZ2ZwX3QgcHJpb3JpdHkpOwogZXh0ZXJuIHN0cnVjdCBza19idWZmICpza2JfY29weShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCXVuc2lnbmVkIGludCBfX25vY2FzdCBwcmlvcml0eSk7CisJCQkJZ2ZwX3QgcHJpb3JpdHkpOwogZXh0ZXJuIHN0cnVjdCBza19idWZmICpwc2tiX2NvcHkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrKTsKKwkJCQkgZ2ZwX3QgZ2ZwX21hc2spOwogZXh0ZXJuIGludAkgICAgICAgcHNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQlpbnQgbmhlYWQsIGludCBudGFpbCwKLQkJCQkJdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrKTsKKwkJCQkJZ2ZwX3QgZ2ZwX21hc2spOwogZXh0ZXJuIHN0cnVjdCBza19idWZmICpza2JfcmVhbGxvY19oZWFkcm9vbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgICAgdW5zaWduZWQgaW50IGhlYWRyb29tKTsKIGV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2NvcHlfZXhwYW5kKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgICAgIGludCBuZXdoZWFkcm9vbSwgaW50IG5ld3RhaWxyb29tLAotCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgcHJpb3JpdHkpOworCQkJCSAgICAgICBnZnBfdCBwcmlvcml0eSk7CiBleHRlcm4gc3RydWN0IHNrX2J1ZmYgKgkJc2tiX3BhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcGFkKTsKICNkZWZpbmUgZGV2X2tmcmVlX3NrYihhKQlrZnJlZV9za2IoYSkKIGV4dGVybiB2b2lkCSAgICAgIHNrYl9vdmVyX3BhbmljKHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4sCkBAIC00ODYsNyArNDg0LDcgQEAKICAqCU5VTEwgaXMgcmV0dXJuZWQgb24gYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLgogICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpza2Jfc2hhcmVfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJICAgICAgdW5zaWduZWQgaW50IF9fbm9jYXN0IHByaSkKKwkJCQkJICAgICAgZ2ZwX3QgcHJpKQogewogCW1pZ2h0X3NsZWVwX2lmKHByaSAmIF9fR0ZQX1dBSVQpOwogCWlmIChza2Jfc2hhcmVkKHNrYikpIHsKQEAgLTUxOCw3ICs1MTYsNyBAQAogICoJJU5VTEwgaXMgcmV0dXJuZWQgb24gYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLgogICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpza2JfdW5zaGFyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQkgIHVuc2lnbmVkIGludCBfX25vY2FzdCBwcmkpCisJCQkJCSAgZ2ZwX3QgcHJpKQogewogCW1pZ2h0X3NsZWVwX2lmKHByaSAmIF9fR0ZQX1dBSVQpOwogCWlmIChza2JfY2xvbmVkKHNrYikpIHsKQEAgLTEwMTksNyArMTAxNyw3IEBACiAgKgklTlVMTCBpcyByZXR1cm5lZCBpbiB0aGVyZSBpcyBubyBmcmVlIG1lbW9yeS4KICAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqX19kZXZfYWxsb2Nfc2tiKHVuc2lnbmVkIGludCBsZW5ndGgsCi0JCQkJCSAgICAgIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaykKKwkJCQkJICAgICAgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGFsbG9jX3NrYihsZW5ndGggKyAxNiwgZ2ZwX21hc2spOwogCWlmIChsaWtlbHkoc2tiKSkKQEAgLTExMzIsOCArMTEzMCw4IEBACiAgKglJZiB0aGVyZSBpcyBubyBmcmVlIG1lbW9yeSAtRU5PTUVNIGlzIHJldHVybmVkLCBvdGhlcndpc2UgemVybwogICoJaXMgcmV0dXJuZWQgYW5kIHRoZSBvbGQgc2tiIGRhdGEgcmVsZWFzZWQuCiAgKi8KLWV4dGVybiBpbnQgX19za2JfbGluZWFyaXplKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnApOwotc3RhdGljIGlubGluZSBpbnQgc2tiX2xpbmVhcml6ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwKQorZXh0ZXJuIGludCBfX3NrYl9saW5lYXJpemUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwKTsKK3N0YXRpYyBpbmxpbmUgaW50IHNrYl9saW5lYXJpemUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwKQogewogCXJldHVybiBfX3NrYl9saW5lYXJpemUoc2tiLCBnZnApOwogfQpAQCAtMTI1NSwxMCArMTI1Myw2IEBACiB7CiAJc3RhbXAtPnR2X3NlYyAgPSBza2ItPnRzdGFtcC5vZmZfc2VjOwogCXN0YW1wLT50dl91c2VjID0gc2tiLT50c3RhbXAub2ZmX3VzZWM7Ci0JaWYgKHNrYi0+dHN0YW1wLm9mZl9zZWMpIHsKLQkJc3RhbXAtPnR2X3NlYyAgKz0gc2tiX3R2X2Jhc2UudHZfc2VjOwotCQlzdGFtcC0+dHZfdXNlYyArPSBza2JfdHZfYmFzZS50dl91c2VjOwotCX0KIH0KIAogLyoqCkBAIC0xMjcyLDggKzEyNjYsOCBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF90aW1lc3RhbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRpbWV2YWwgKnN0YW1wKQogewotCXNrYi0+dHN0YW1wLm9mZl9zZWMgID0gc3RhbXAtPnR2X3NlYyAtIHNrYl90dl9iYXNlLnR2X3NlYzsKLQlza2ItPnRzdGFtcC5vZmZfdXNlYyA9IHN0YW1wLT50dl91c2VjIC0gc2tiX3R2X2Jhc2UudHZfdXNlYzsKKwlza2ItPnRzdGFtcC5vZmZfc2VjICA9IHN0YW1wLT50dl9zZWM7CisJc2tiLT50c3RhbXAub2ZmX3VzZWMgPSBzdGFtcC0+dHZfdXNlYzsKIH0KIAogZXh0ZXJuIHZvaWQgX19uZXRfdGltZXN0YW1wKHN0cnVjdCBza19idWZmICpza2IpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbGFiLmggYi9pbmNsdWRlL2xpbnV4L3NsYWIuaAppbmRleCAxZjM1NmYzLi41ZmMwNGExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NsYWIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NsYWIuaApAQCAtNjEsMTEgKzYxLDExIEBACiAJCQkJICAgICAgIHZvaWQgKCopKHZvaWQgKiwga21lbV9jYWNoZV90ICosIHVuc2lnbmVkIGxvbmcpKTsKIGV4dGVybiBpbnQga21lbV9jYWNoZV9kZXN0cm95KGttZW1fY2FjaGVfdCAqKTsKIGV4dGVybiBpbnQga21lbV9jYWNoZV9zaHJpbmsoa21lbV9jYWNoZV90ICopOwotZXh0ZXJuIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Moa21lbV9jYWNoZV90ICosIHVuc2lnbmVkIGludCBfX25vY2FzdCk7CitleHRlcm4gdm9pZCAqa21lbV9jYWNoZV9hbGxvYyhrbWVtX2NhY2hlX3QgKiwgZ2ZwX3QpOwogZXh0ZXJuIHZvaWQga21lbV9jYWNoZV9mcmVlKGttZW1fY2FjaGVfdCAqLCB2b2lkICopOwogZXh0ZXJuIHVuc2lnbmVkIGludCBrbWVtX2NhY2hlX3NpemUoa21lbV9jYWNoZV90ICopOwogZXh0ZXJuIGNvbnN0IGNoYXIgKmttZW1fY2FjaGVfbmFtZShrbWVtX2NhY2hlX3QgKik7Ci1leHRlcm4ga21lbV9jYWNoZV90ICprbWVtX2ZpbmRfZ2VuZXJhbF9jYWNoZXAoc2l6ZV90IHNpemUsIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBmbGFncyk7CitleHRlcm4ga21lbV9jYWNoZV90ICprbWVtX2ZpbmRfZ2VuZXJhbF9jYWNoZXAoc2l6ZV90IHNpemUsIGdmcF90IGdmcGZsYWdzKTsKIAogLyogU2l6ZSBkZXNjcmlwdGlvbiBzdHJ1Y3QgZm9yIGdlbmVyYWwgY2FjaGVzLiAqLwogc3RydWN0IGNhY2hlX3NpemVzIHsKQEAgLTc0LDkgKzc0LDkgQEAKIAlrbWVtX2NhY2hlX3QJKmNzX2RtYWNhY2hlcDsKIH07CiBleHRlcm4gc3RydWN0IGNhY2hlX3NpemVzIG1hbGxvY19zaXplc1tdOwotZXh0ZXJuIHZvaWQgKl9fa21hbGxvYyhzaXplX3QsIHVuc2lnbmVkIGludCBfX25vY2FzdCk7CitleHRlcm4gdm9pZCAqX19rbWFsbG9jKHNpemVfdCwgZ2ZwX3QpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgKmttYWxsb2Moc2l6ZV90IHNpemUsIHVuc2lnbmVkIGludCBfX25vY2FzdCBmbGFncykKK3N0YXRpYyBpbmxpbmUgdm9pZCAqa21hbGxvYyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpCiB7CiAJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpemUpKSB7CiAJCWludCBpID0gMDsKQEAgLTk5LDcgKzk5LDcgQEAKIAlyZXR1cm4gX19rbWFsbG9jKHNpemUsIGZsYWdzKTsKIH0KIAotZXh0ZXJuIHZvaWQgKmt6YWxsb2Moc2l6ZV90LCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QpOworZXh0ZXJuIHZvaWQgKmt6YWxsb2Moc2l6ZV90LCBnZnBfdCk7CiAKIC8qKgogICoga2NhbGxvYyAtIGFsbG9jYXRlIG1lbW9yeSBmb3IgYW4gYXJyYXkuIFRoZSBtZW1vcnkgaXMgc2V0IHRvIHplcm8uCkBAIC0xMDcsNyArMTA3LDcgQEAKICAqIEBzaXplOiBlbGVtZW50IHNpemUuCiAgKiBAZmxhZ3M6IHRoZSB0eXBlIG9mIG1lbW9yeSB0byBhbGxvY2F0ZS4KICAqLwotc3RhdGljIGlubGluZSB2b2lkICprY2FsbG9jKHNpemVfdCBuLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGZsYWdzKQorc3RhdGljIGlubGluZSB2b2lkICprY2FsbG9jKHNpemVfdCBuLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpCiB7CiAJaWYgKG4gIT0gMCAmJiBzaXplID4gSU5UX01BWCAvIG4pCiAJCXJldHVybiBOVUxMOwpAQCAtMTE4LDE1ICsxMTgsMTQgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQga3NpemUoY29uc3Qgdm9pZCAqKTsKIAogI2lmZGVmIENPTkZJR19OVU1BCi1leHRlcm4gdm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlKGttZW1fY2FjaGVfdCAqLAotCQkJdW5zaWduZWQgaW50IF9fbm9jYXN0IGZsYWdzLCBpbnQgbm9kZSk7Ci1leHRlcm4gdm9pZCAqa21hbGxvY19ub2RlKHNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZ3MsIGludCBub2RlKTsKK2V4dGVybiB2b2lkICprbWVtX2NhY2hlX2FsbG9jX25vZGUoa21lbV9jYWNoZV90ICosIGdmcF90IGZsYWdzLCBpbnQgbm9kZSk7CitleHRlcm4gdm9pZCAqa21hbGxvY19ub2RlKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlKGttZW1fY2FjaGVfdCAqY2FjaGVwLCBpbnQgZmxhZ3MsIGludCBub2RlKQogewogCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKGNhY2hlcCwgZmxhZ3MpOwogfQotc3RhdGljIGlubGluZSB2b2lkICprbWFsbG9jX25vZGUoc2l6ZV90IHNpemUsIHVuc2lnbmVkIGludCBfX25vY2FzdCBmbGFncywgaW50IG5vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgKmttYWxsb2Nfbm9kZShzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKQogewogCXJldHVybiBrbWFsbG9jKHNpemUsIGZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCmluZGV4IGRhYjI2NTJhYy4uMzY5YmUzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCkBAIC04OCw3ICs4OCw3IEBACiBleHRlcm4gdm9pZCAqIG1lbWNocihjb25zdCB2b2lkICosaW50LF9fa2VybmVsX3NpemVfdCk7CiAjZW5kaWYKIAotZXh0ZXJuIGNoYXIgKmtzdHJkdXAoY29uc3QgY2hhciAqcywgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCk7CitleHRlcm4gY2hhciAqa3N0cmR1cChjb25zdCBjaGFyICpzLCBnZnBfdCBnZnApOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oIGIvaW5jbHVkZS9saW51eC9zdXNwZW5kLmgKaW5kZXggZjJlOTZmZC4uYWQxNWE1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdXNwZW5kLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdXNwZW5kLmgKQEAgLTcxLDUgKzcxLDcgQEAKIHN0cnVjdCBzYXZlZF9jb250ZXh0Owogdm9pZCBfX3NhdmVfcHJvY2Vzc29yX3N0YXRlKHN0cnVjdCBzYXZlZF9jb250ZXh0ICpjdHh0KTsKIHZvaWQgX19yZXN0b3JlX3Byb2Nlc3Nvcl9zdGF0ZShzdHJ1Y3Qgc2F2ZWRfY29udGV4dCAqY3R4dCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfdXNhYmxlX3BhZ2UodW5zaWduZWQgZ2ZwX21hc2spOworZXh0ZXJuIHZvaWQgZnJlZV9lYXRlbl9tZW1vcnkodm9pZCk7CiAKICNlbmRpZiAvKiBfTElOVVhfU1dTVVNQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKaW5kZXggM2M5ZmYwMC4uYTdiZjFhM2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3dhcC5oCkBAIC0xNDcsNyArMTQ3LDcgQEAKICNkZWZpbmUgdm1fc3dhcF9mdWxsKCkgKG5yX3N3YXBfcGFnZXMqMiA8IHRvdGFsX3N3YXBfcGFnZXMpCiAKIC8qIGxpbnV4L21tL29vbV9raWxsLmMgKi8KLWV4dGVybiB2b2lkIG91dF9vZl9tZW1vcnkodW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrLCBpbnQgb3JkZXIpOworZXh0ZXJuIHZvaWQgb3V0X29mX21lbW9yeShnZnBfdCBnZnBfbWFzaywgaW50IG9yZGVyKTsKIAogLyogbGludXgvbW0vbWVtb3J5LmMgKi8KIGV4dGVybiB2b2lkIHN3YXBpbl9yZWFkYWhlYWQoc3dwX2VudHJ5X3QsIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaCBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAppbmRleCA0MjVmNThjLi5hNmYwM2U0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCkBAIC01MDgsNSArNTA4LDcgQEAKIAogYXNtbGlua2FnZSBsb25nIHN5c19pb3ByaW9fc2V0KGludCB3aGljaCwgaW50IHdobywgaW50IGlvcHJpbyk7CiBhc21saW5rYWdlIGxvbmcgc3lzX2lvcHJpb19nZXQoaW50IHdoaWNoLCBpbnQgd2hvKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc2V0X21lbXBvbGljeShpbnQgbW9kZSwgdW5zaWduZWQgbG9uZyBfX3VzZXIgKm5tYXNrLAorCQkJCQl1bnNpZ25lZCBsb25nIG1heG5vZGUpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY3RsLmggYi9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCmluZGV4IDNhMjlhOWYuLmZjOGUzNjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNjdGwuaApAQCAtMjAyLDcgKzIwMiw4IEBACiAJTkVUX1RSPTE0LAogCU5FVF9ERUNORVQ9MTUsCiAJTkVUX0VDT05FVD0xNiwKLQlORVRfU0NUUD0xNywgCisJTkVUX1NDVFA9MTcsCisJTkVUX0xMQz0xOCwKIH07CiAKIC8qIC9wcm9jL3N5cy9rZXJuZWwvcmFuZG9tICovCkBAIC01MjIsNiArNTIzLDI5IEBACiAJTkVUX0lQWF9GT1JXQVJESU5HPTIKIH07CiAKKy8qIC9wcm9jL3N5cy9uZXQvbGxjICovCitlbnVtIHsKKwlORVRfTExDMj0xLAorCU5FVF9MTENfU1RBVElPTj0yLAorfTsKKworLyogL3Byb2Mvc3lzL25ldC9sbGMvbGxjMiAqLworZW51bSB7CisJTkVUX0xMQzJfVElNRU9VVD0xLAorfTsKKworLyogL3Byb2Mvc3lzL25ldC9sbGMvc3RhdGlvbiAqLworZW51bSB7CisJTkVUX0xMQ19TVEFUSU9OX0FDS19USU1FT1VUPTEsCit9OworCisvKiAvcHJvYy9zeXMvbmV0L2xsYy9sbGMyL3RpbWVvdXQgKi8KK2VudW0geworCU5FVF9MTEMyX0FDS19USU1FT1VUPTEsCisJTkVUX0xMQzJfUF9USU1FT1VUPTIsCisJTkVUX0xMQzJfUkVKX1RJTUVPVVQ9MywKKwlORVRfTExDMl9CVVNZX1RJTUVPVVQ9NCwKK307CiAKIC8qIC9wcm9jL3N5cy9uZXQvYXBwbGV0YWxrICovCiBlbnVtIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGNfZW1hdGNoL3RjX2VtX21ldGEuaCBiL2luY2x1ZGUvbGludXgvdGNfZW1hdGNoL3RjX2VtX21ldGEuaAppbmRleCAwODFiMWVlLi5lMjE5MzdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RjX2VtYXRjaC90Y19lbV9tZXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC90Y19lbWF0Y2gvdGNfZW1fbWV0YS5oCkBAIC03MSw3ICs3MSw3IEBACiAJVENGX01FVEFfSURfU0tfU05EQlVGLAogIAlUQ0ZfTUVUQV9JRF9TS19BTExPQ1MsCiAgCVRDRl9NRVRBX0lEX1NLX1JPVVRFX0NBUFMsCi0gCVRDRl9NRVRBX0lEX1NLX0hBU0hFTlQsCisgCVRDRl9NRVRBX0lEX1NLX0hBU0gsCiAgCVRDRl9NRVRBX0lEX1NLX0xJTkdFUlRJTUUsCiAgCVRDRl9NRVRBX0lEX1NLX0FDS19CQUNLTE9HLAogIAlUQ0ZfTUVUQV9JRF9TS19NQVhfQUNLX0JBQ0tMT0csCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RleHRzZWFyY2guaCBiL2luY2x1ZGUvbGludXgvdGV4dHNlYXJjaC5oCmluZGV4IDk0MWY0NWEuLjUxNTA0NmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGV4dHNlYXJjaC5oCisrKyBiL2luY2x1ZGUvbGludXgvdGV4dHNlYXJjaC5oCkBAIC0xNTgsNyArMTU4LDggQEAKICNkZWZpbmUgVFNfUFJJVl9BTElHTlRPCTgKICNkZWZpbmUgVFNfUFJJVl9BTElHTihsZW4pICgoKGxlbikgKyBUU19QUklWX0FMSUdOVE8tMSkgJiB+KFRTX1BSSVZfQUxJR05UTy0xKSkKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgdHNfY29uZmlnICphbGxvY190c19jb25maWcoc2l6ZV90IHBheWxvYWQsIGludCBnZnBfbWFzaykKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRzX2NvbmZpZyAqYWxsb2NfdHNfY29uZmlnKHNpemVfdCBwYXlsb2FkLAorCQkJCQkJZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJc3RydWN0IHRzX2NvbmZpZyAqY29uZjsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90ZnJjLmggYi9pbmNsdWRlL2xpbnV4L3RmcmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGFiNzgzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC90ZnJjLmgKQEAgLTAsMCArMSwzNSBAQAorI2lmbmRlZiBfTElOVVhfVEZSQ19IXworI2RlZmluZSBfTElOVVhfVEZSQ19IXworLyoKKyAqICBpbmNsdWRlL2xpbnV4L3RmcmMuaAorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIFVuaXZlcnNpdHkgb2YgV2Fpa2F0bywgSGFtaWx0b24sIE5ldyBaZWFsYW5kLgorICogIENvcHlyaWdodCAoYykgMjAwNSBJYW4gTWNEb25hbGQgPGlhbTRAY3Mud2Fpa2F0by5hYy5uej4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+CisgKiAgQ29weXJpZ2h0IChjKSAyMDAzIE5pbHMtRXJpayBNYXR0c3NvbiwgSm9hY2ltIEhhZ2dtYXJrLCBNYWdudXMgRXJpeHpvbgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgdGZyY19yeF9pbmZvIHsKKyAgCV9fdTMyIHRmcmNyeF94X3JlY3Y7CisJX191MzIgdGZyY3J4X3J0dDsKKyAgCV9fdTMyIHRmcmNyeF9wOworfTsKKworc3RydWN0IHRmcmNfdHhfaW5mbyB7CisJX191MzIgdGZyY3R4X3g7CisJX191MzIgdGZyY3R4X3hfcmVjdjsKKwlfX3UzMiB0ZnJjdHhfeF9jYWxjOworCV9fdTMyIHRmcmN0eF9ydHQ7CisJX191MzIgdGZyY3R4X3A7CisJX191MzIgdGZyY3R4X3J0bzsKKwlfX3UzMiB0ZnJjdHhfaXBpOworfTsKKworI2VuZGlmIC8qIF9MSU5VWF9URlJDX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKaW5kZXggMmI2NzhjMi4uMGFlZTM0ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvdHlwZXMuaApAQCAtMTY1LDYgKzE2NSwxMCBAQAogdHlwZWRlZiBfX3U2NCBfX2JpdHdpc2UgX19iZTY0OwogI2VuZGlmCiAKKyNpZmRlZiBfX0tFUk5FTF9fCit0eXBlZGVmIHVuc2lnbmVkIF9fbm9jYXN0IGdmcF90OworI2VuZGlmCisKIHN0cnVjdCB1c3RhdCB7CiAJX19rZXJuZWxfZGFkZHJfdAlmX3RmcmVlOwogCV9fa2VybmVsX2lub190CQlmX3Rpbm9kZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oIGIvaW5jbHVkZS9saW51eC92bWFsbG9jLmgKaW5kZXggYjI0NGY2OS4uMzcwMWEwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92bWFsbG9jLmgKKysrIGIvaW5jbHVkZS9saW51eC92bWFsbG9jLmgKQEAgLTM0LDggKzM0LDggQEAKIGV4dGVybiB2b2lkICp2bWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBleHRlcm4gdm9pZCAqdm1hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBleHRlcm4gdm9pZCAqdm1hbGxvY18zMih1bnNpZ25lZCBsb25nIHNpemUpOwotZXh0ZXJuIHZvaWQgKl9fdm1hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaywgcGdwcm90X3QgcHJvdCk7Ci1leHRlcm4gdm9pZCAqX192bWFsbG9jX2FyZWEoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrLCBwZ3Byb3RfdCBwcm90KTsKK2V4dGVybiB2b2lkICpfX3ZtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplLCBnZnBfdCBnZnBfbWFzaywgcGdwcm90X3QgcHJvdCk7CitleHRlcm4gdm9pZCAqX192bWFsbG9jX2FyZWEoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSwgZ2ZwX3QgZ2ZwX21hc2ssIHBncHJvdF90IHByb3QpOwogZXh0ZXJuIHZvaWQgdmZyZWUodm9pZCAqYWRkcik7CiAKIGV4dGVybiB2b2lkICp2bWFwKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBjb3VudCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2F4MjUuaCBiL2luY2x1ZGUvbmV0L2F4MjUuaAppbmRleCA5ZGJjZDllLi4zMGJiNGE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9heDI1LmgKKysrIGIvaW5jbHVkZS9uZXQvYXgyNS5oCkBAIC0xNzEsNyArMTcxLDcgQEAKIAlheDI1X2FkZHJlc3MJCWNhbGxzW0FYMjVfTUFYX0RJR0lTXTsKIAl1bnNpZ25lZCBjaGFyCQlyZXBlYXRlZFtBWDI1X01BWF9ESUdJU107CiAJdW5zaWduZWQgY2hhcgkJbmRpZ2k7Ci0JY2hhcgkJCWxhc3RyZXBlYXQ7CisJc2lnbmVkIGNoYXIJCWxhc3RyZXBlYXQ7CiB9IGF4MjVfZGlnaTsKIAogdHlwZWRlZiBzdHJ1Y3QgYXgyNV9yb3V0ZSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmgKaW5kZXggNmRmYTRhNi4uMjEwNDU4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9ibHVldG9vdGguaApAQCAtMTM2LDcgKzEzNiw3IEBACiB9OwogI2RlZmluZSBidF9jYihza2IpICgoc3RydWN0IGJ0X3NrYl9jYiAqKShza2ItPmNiKSkgCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmJ0X3NrYl9hbGxvYyh1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgaG93KQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqYnRfc2tiX2FsbG9jKHVuc2lnbmVkIGludCBsZW4sIGdmcF90IGhvdykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvcmZjb21tLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvcmZjb21tLmgKaW5kZXggZmZlYTlkNS4uZmJlNTU3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL3JmY29tbS5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9yZmNvbW0uaApAQCAtMjMwLDcgKzIzMCw3IEBACiAJCQl1OCB4b25fY2hhciwgdTggeG9mZl9jaGFyLCB1MTYgcGFyYW1fbWFzayk7CiAKIC8qIC0tLS0gUkZDT01NIERMQ3MgKGNoYW5uZWxzKSAtLS0tICovCi1zdHJ1Y3QgcmZjb21tX2RsYyAqcmZjb21tX2RsY19hbGxvYyh1bnNpZ25lZCBpbnQgX19ub2Nhc3QgcHJpbyk7CitzdHJ1Y3QgcmZjb21tX2RsYyAqcmZjb21tX2RsY19hbGxvYyhnZnBfdCBwcmlvKTsKIHZvaWQgcmZjb21tX2RsY19mcmVlKHN0cnVjdCByZmNvbW1fZGxjICpkKTsKIGludCAgcmZjb21tX2RsY19vcGVuKHN0cnVjdCByZmNvbW1fZGxjICpkLCBiZGFkZHJfdCAqc3JjLCBiZGFkZHJfdCAqZHN0LCB1OCBjaGFubmVsKTsKIGludCAgcmZjb21tX2RsY19jbG9zZShzdHJ1Y3QgcmZjb21tX2RsYyAqZCwgaW50IHJlYXNvbik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kbl9uc3AuaCBiL2luY2x1ZGUvbmV0L2RuX25zcC5oCmluZGV4IDZiYmVhZmEuLjFiYTAzYmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2RuX25zcC5oCisrKyBiL2luY2x1ZGUvbmV0L2RuX25zcC5oCkBAIC0xOSw5ICsxOSw5IEBACiBleHRlcm4gdm9pZCBkbl9uc3Bfc2VuZF9vdGhfYWNrKHN0cnVjdCBzb2NrICpzayk7CiBleHRlcm4gdm9pZCBkbl9uc3BfZGVsYXllZF9hY2soc3RydWN0IHNvY2sgKnNrKTsKIGV4dGVybiB2b2lkIGRuX3NlbmRfY29ubl9hY2soc3RydWN0IHNvY2sgKnNrKTsKLWV4dGVybiB2b2lkIGRuX3NlbmRfY29ubl9jb25mKHN0cnVjdCBzb2NrICpzaywgaW50IGdmcCk7CitleHRlcm4gdm9pZCBkbl9zZW5kX2Nvbm5fY29uZihzdHJ1Y3Qgc29jayAqc2ssIGdmcF90IGdmcCk7CiBleHRlcm4gdm9pZCBkbl9uc3Bfc2VuZF9kaXNjKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgY2hhciB0eXBlLCAKLQkJCQl1bnNpZ25lZCBzaG9ydCByZWFzb24sIGludCBnZnApOworCQkJdW5zaWduZWQgc2hvcnQgcmVhc29uLCBnZnBfdCBnZnApOwogZXh0ZXJuIHZvaWQgZG5fbnNwX3JldHVybl9kaXNjKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGNoYXIgdHlwZSwKIAkJCQl1bnNpZ25lZCBzaG9ydCByZWFzb24pOwogZXh0ZXJuIHZvaWQgZG5fbnNwX3NlbmRfbGluayhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGNoYXIgbHNmbGFncywgY2hhciBmY3ZhbCk7CkBAIC0yOSwxNCArMjksMTQgQEAKIAogZXh0ZXJuIHZvaWQgZG5fbnNwX291dHB1dChzdHJ1Y3Qgc29jayAqc2spOwogZXh0ZXJuIGludCBkbl9uc3BfY2hlY2tfeG1pdF9xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmX2hlYWQgKnEsIHVuc2lnbmVkIHNob3J0IGFja251bSk7Ci1leHRlcm4gdm9pZCBkbl9uc3BfcXVldWVfeG1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGludCBnZnAsIGludCBvb2IpOworZXh0ZXJuIHZvaWQgZG5fbnNwX3F1ZXVlX3htaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnAsIGludCBvb2IpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZG5fbnNwX3BlcnNpc3Qoc3RydWN0IHNvY2sgKnNrKTsKIGV4dGVybiBpbnQgZG5fbnNwX3htaXRfdGltZW91dChzdHJ1Y3Qgc29jayAqc2spOwogCiBleHRlcm4gaW50IGRuX25zcF9yeChzdHJ1Y3Qgc2tfYnVmZiAqKTsKIGV4dGVybiBpbnQgZG5fbnNwX2JhY2tsb2dfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKLWV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqZG5fYWxsb2Nfc2tiKHN0cnVjdCBzb2NrICpzaywgaW50IHNpemUsIGludCBwcmkpOworZXh0ZXJuIHN0cnVjdCBza19idWZmICpkbl9hbGxvY19za2Ioc3RydWN0IHNvY2sgKnNrLCBpbnQgc2l6ZSwgZ2ZwX3QgcHJpKTsKIGV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqZG5fYWxsb2Nfc2VuZF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzaXplX3QgKnNpemUsIGludCBub2Jsb2NrLCBsb25nIHRpbWVvLCBpbnQgKmVycik7CiAKICNkZWZpbmUgTlNQX1JFQVNPTl9PSyAwCQkvKiBObyBlcnJvciAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZG5fcm91dGUuaCBiL2luY2x1ZGUvbmV0L2RuX3JvdXRlLmgKaW5kZXggZDA4NDcyMS4uNTEyMmRhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZG5fcm91dGUuaAorKysgYi9pbmNsdWRlL25ldC9kbl9yb3V0ZS5oCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLWV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqZG5fYWxsb2Nfc2tiKHN0cnVjdCBzb2NrICpzaywgaW50IHNpemUsIGludCBwcmkpOworZXh0ZXJuIHN0cnVjdCBza19idWZmICpkbl9hbGxvY19za2Ioc3RydWN0IHNvY2sgKnNrLCBpbnQgc2l6ZSwgZ2ZwX3QgcHJpKTsKIGV4dGVybiBpbnQgZG5fcm91dGVfb3V0cHV0X3NvY2soc3RydWN0IGRzdF9lbnRyeSAqKnBwcnQsIHN0cnVjdCBmbG93aSAqLCBzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncyk7CiBleHRlcm4gaW50IGRuX2NhY2hlX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTsKIGV4dGVybiBpbnQgZG5fY2FjaGVfZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsIHZvaWQgKmFyZyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0Nl9oYXNodGFibGVzLmggYi9pbmNsdWRlL25ldC9pbmV0Nl9oYXNodGFibGVzLmgKaW5kZXggMDNkZjNiMS4uNWEyYmVlZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldDZfaGFzaHRhYmxlcy5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXQ2X2hhc2h0YWJsZXMuaApAQCAtMjYsMTkgKzI2LDE4IEBACiBzdHJ1Y3QgaW5ldF9oYXNoaW5mbzsKIAogLyogSSBoYXZlIG5vIGlkZWEgaWYgdGhpcyBpcyBhIGdvb2QgaGFzaCBmb3IgdjYgb3Igbm90LiAtRGF2ZU0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGluZXQ2X2VoYXNoZm4oY29uc3Qgc3RydWN0IGluNl9hZGRyICpsYWRkciwgY29uc3QgdTE2IGxwb3J0LAotCQkJCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZmFkZHIsIGNvbnN0IHUxNiBmcG9ydCwKLQkJCQljb25zdCBpbnQgZWhhc2hfc2l6ZSkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGluZXQ2X2VoYXNoZm4oY29uc3Qgc3RydWN0IGluNl9hZGRyICpsYWRkciwgY29uc3QgdTE2IGxwb3J0LAorCQkJCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZmFkZHIsIGNvbnN0IHUxNiBmcG9ydCkKIHsKLQlpbnQgaGFzaGVudCA9IChscG9ydCBeIGZwb3J0KTsKKwl1bnNpZ25lZCBpbnQgaGFzaGVudCA9IChscG9ydCBeIGZwb3J0KTsKIAogCWhhc2hlbnQgXj0gKGxhZGRyLT5zNl9hZGRyMzJbM10gXiBmYWRkci0+czZfYWRkcjMyWzNdKTsKIAloYXNoZW50IF49IGhhc2hlbnQgPj4gMTY7CiAJaGFzaGVudCBePSBoYXNoZW50ID4+IDg7Ci0JcmV0dXJuIChoYXNoZW50ICYgKGVoYXNoX3NpemUgLSAxKSk7CisJcmV0dXJuIGhhc2hlbnQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGluZXQ2X3NrX2VoYXNoZm4oY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBpbnQgZWhhc2hfc2l6ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGluZXQ2X3NrX2VoYXNoZm4oY29uc3Qgc3RydWN0IHNvY2sgKnNrKQogewogCWNvbnN0IHN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAljb25zdCBzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CkBAIC00Niw3ICs0NSw3IEBACiAJY29uc3Qgc3RydWN0IGluNl9hZGRyICpmYWRkciA9ICZucC0+ZGFkZHI7CiAJY29uc3QgX191MTYgbHBvcnQgPSBpbmV0LT5udW07CiAJY29uc3QgX191MTYgZnBvcnQgPSBpbmV0LT5kcG9ydDsKLQlyZXR1cm4gaW5ldDZfZWhhc2hmbihsYWRkciwgbHBvcnQsIGZhZGRyLCBmcG9ydCwgZWhhc2hfc2l6ZSk7CisJcmV0dXJuIGluZXQ2X2VoYXNoZm4obGFkZHIsIGxwb3J0LCBmYWRkciwgZnBvcnQpOwogfQogCiAvKgpAQCAtNjksMTQgKzY4LDE0IEBACiAJLyogT3B0aW1pemUgaGVyZSBmb3IgZGlyZWN0IGhpdCwgb25seSBsaXN0ZW5pbmcgY29ubmVjdGlvbnMgY2FuCiAJICogaGF2ZSB3aWxkY2FyZHMgYW55d2F5cy4KIAkgKi8KLQljb25zdCBpbnQgaGFzaCA9IGluZXQ2X2VoYXNoZm4oZGFkZHIsIGhudW0sIHNhZGRyLCBzcG9ydCwKLQkJCQkgICAgICAgaGFzaGluZm8tPmVoYXNoX3NpemUpOwotCXN0cnVjdCBpbmV0X2VoYXNoX2J1Y2tldCAqaGVhZCA9ICZoYXNoaW5mby0+ZWhhc2hbaGFzaF07CisJdW5zaWduZWQgaW50IGhhc2ggPSBpbmV0Nl9laGFzaGZuKGRhZGRyLCBobnVtLCBzYWRkciwgc3BvcnQpOworCXN0cnVjdCBpbmV0X2VoYXNoX2J1Y2tldCAqaGVhZCA9IGluZXRfZWhhc2hfYnVja2V0KGhhc2hpbmZvLCBoYXNoKTsKIAorCXByZWZldGNoKGhlYWQtPmNoYWluLmZpcnN0KTsKIAlyZWFkX2xvY2soJmhlYWQtPmxvY2spOwogCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmaGVhZC0+Y2hhaW4pIHsKIAkJLyogRm9yIElQVjYgZG8gdGhlIGNoZWFwZXIgcG9ydCBhbmQgZmFtaWx5IHRlc3RzIGZpcnN0LiAqLwotCQlpZiAoSU5FVDZfTUFUQ0goc2ssIHNhZGRyLCBkYWRkciwgcG9ydHMsIGRpZikpCisJCWlmIChJTkVUNl9NQVRDSChzaywgaGFzaCwgc2FkZHIsIGRhZGRyLCBwb3J0cywgZGlmKSkKIAkJCWdvdG8gaGl0OyAvKiBZb3Ugc3VuayBteSBiYXR0bGVzaGlwISAqLwogCX0KIAkvKiBNdXN0IGNoZWNrIGZvciBhIFRJTUVfV0FJVCdlciBiZWZvcmUgZ29pbmcgdG8gbGlzdGVuZXIgaGFzaC4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmggYi9pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oCmluZGV4IDY1MWY4MjQuLmIwYzk5MDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaApAQCAtOTQsNyArOTQsNyBAQAogCiBleHRlcm4gc3RydWN0IHNvY2sgKmluZXRfY3NrX2Nsb25lKHN0cnVjdCBzb2NrICpzaywKIAkJCQkgICBjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCi0JCQkJICAgY29uc3QgdW5zaWduZWQgaW50IF9fbm9jYXN0IHByaW9yaXR5KTsKKwkJCQkgICBjb25zdCBnZnBfdCBwcmlvcml0eSk7CiAKIGVudW0gaW5ldF9jc2tfYWNrX3N0YXRlX3QgewogCUlDU0tfQUNLX1NDSEVECT0gMSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfaGFzaHRhYmxlcy5oIGIvaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmgKaW5kZXggNjQ2YjZlYS4uZjUwZjk1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmgKQEAgLTQwLDcgKzQwLDcgQEAKIHN0cnVjdCBpbmV0X2VoYXNoX2J1Y2tldCB7CiAJcndsb2NrX3QJICBsb2NrOwogCXN0cnVjdCBobGlzdF9oZWFkIGNoYWluOwotfSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg4KSkpOworfTsKIAogLyogVGhlcmUgYXJlIGEgZmV3IHNpbXBsZSBydWxlcywgd2hpY2ggYWxsb3cgZm9yIGxvY2FsIHBvcnQgcmV1c2UgYnkKICAqIGFuIGFwcGxpY2F0aW9uLiAgSW4gZXNzZW5jZToKQEAgLTEwOCw3ICsxMDgsNyBAQAogCXN0cnVjdCBpbmV0X2JpbmRfaGFzaGJ1Y2tldAkqYmhhc2g7CiAKIAlpbnQJCQkJYmhhc2hfc2l6ZTsKLQlpbnQJCQkJZWhhc2hfc2l6ZTsKKwl1bnNpZ25lZCBpbnQJCQllaGFzaF9zaXplOwogCiAJLyogQWxsIHNvY2tldHMgaW4gVENQX0xJU1RFTiBzdGF0ZSB3aWxsIGJlIGluIGhlcmUuICBUaGlzIGlzIHRoZSBvbmx5CiAJICogdGFibGUgd2hlcmUgd2lsZGNhcmQnZCBUQ1Agc29ja2V0cyBjYW4gZXhpc3QuICBIYXNoIGZ1bmN0aW9uIGhlcmUKQEAgLTEzMCwxNyArMTMwLDE2IEBACiAJaW50CQkJCXBvcnRfcm92ZXI7CiB9OwogCi1zdGF0aWMgaW5saW5lIGludCBpbmV0X2VoYXNoZm4oY29uc3QgX191MzIgbGFkZHIsIGNvbnN0IF9fdTE2IGxwb3J0LAotCQkJICAgICAgIGNvbnN0IF9fdTMyIGZhZGRyLCBjb25zdCBfX3UxNiBmcG9ydCwKLQkJCSAgICAgICBjb25zdCBpbnQgZWhhc2hfc2l6ZSkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGluZXRfZWhhc2hmbihjb25zdCBfX3UzMiBsYWRkciwgY29uc3QgX191MTYgbHBvcnQsCisJCQkgICAgICAgY29uc3QgX191MzIgZmFkZHIsIGNvbnN0IF9fdTE2IGZwb3J0KQogewotCWludCBoID0gKGxhZGRyIF4gbHBvcnQpIF4gKGZhZGRyIF4gZnBvcnQpOworCXVuc2lnbmVkIGludCBoID0gKGxhZGRyIF4gbHBvcnQpIF4gKGZhZGRyIF4gZnBvcnQpOwogCWggXj0gaCA+PiAxNjsKIAloIF49IGggPj4gODsKLQlyZXR1cm4gaCAmIChlaGFzaF9zaXplIC0gMSk7CisJcmV0dXJuIGg7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGluZXRfc2tfZWhhc2hmbihjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGludCBlaGFzaF9zaXplKQorc3RhdGljIGlubGluZSBpbnQgaW5ldF9za19laGFzaGZuKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKIHsKIAljb25zdCBzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJY29uc3QgX191MzIgbGFkZHIgPSBpbmV0LT5yY3Zfc2FkZHI7CkBAIC0xNDgsNyArMTQ3LDE0IEBACiAJY29uc3QgX191MzIgZmFkZHIgPSBpbmV0LT5kYWRkcjsKIAljb25zdCBfX3UxNiBmcG9ydCA9IGluZXQtPmRwb3J0OwogCi0JcmV0dXJuIGluZXRfZWhhc2hmbihsYWRkciwgbHBvcnQsIGZhZGRyLCBmcG9ydCwgZWhhc2hfc2l6ZSk7CisJcmV0dXJuIGluZXRfZWhhc2hmbihsYWRkciwgbHBvcnQsIGZhZGRyLCBmcG9ydCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfZWhhc2hfYnVja2V0ICppbmV0X2VoYXNoX2J1Y2tldCgKKwlzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGFzaGluZm8sCisJdW5zaWduZWQgaW50IGhhc2gpCit7CisJcmV0dXJuICZoYXNoaW5mby0+ZWhhc2hbaGFzaCAmIChoYXNoaW5mby0+ZWhhc2hfc2l6ZSAtIDEpXTsKIH0KIAogZXh0ZXJuIHN0cnVjdCBpbmV0X2JpbmRfYnVja2V0ICoKQEAgLTIzNSw5ICsyNDEsMTEgQEAKIAkJbG9jayA9ICZoYXNoaW5mby0+bGhhc2hfbG9jazsKIAkJaW5ldF9saXN0ZW5fd2xvY2soaGFzaGluZm8pOwogCX0gZWxzZSB7Ci0JCXNrLT5za19oYXNoZW50ID0gaW5ldF9za19laGFzaGZuKHNrLCBoYXNoaW5mby0+ZWhhc2hfc2l6ZSk7Ci0JCWxpc3QgPSAmaGFzaGluZm8tPmVoYXNoW3NrLT5za19oYXNoZW50XS5jaGFpbjsKLQkJbG9jayA9ICZoYXNoaW5mby0+ZWhhc2hbc2stPnNrX2hhc2hlbnRdLmxvY2s7CisJCXN0cnVjdCBpbmV0X2VoYXNoX2J1Y2tldCAqaGVhZDsKKwkJc2stPnNrX2hhc2ggPSBpbmV0X3NrX2VoYXNoZm4oc2spOworCQloZWFkID0gaW5ldF9laGFzaF9idWNrZXQoaGFzaGluZm8sIHNrLT5za19oYXNoKTsKKwkJbGlzdCA9ICZoZWFkLT5jaGFpbjsKKwkJbG9jayA9ICZoZWFkLT5sb2NrOwogCQl3cml0ZV9sb2NrKGxvY2spOwogCX0KIAlfX3NrX2FkZF9ub2RlKHNrLCBsaXN0KTsKQEAgLTI2OCw5ICsyNzYsOCBAQAogCQlpbmV0X2xpc3Rlbl93bG9jayhoYXNoaW5mbyk7CiAJCWxvY2sgPSAmaGFzaGluZm8tPmxoYXNoX2xvY2s7CiAJfSBlbHNlIHsKLQkJc3RydWN0IGluZXRfZWhhc2hfYnVja2V0ICpoZWFkID0gJmhhc2hpbmZvLT5laGFzaFtzay0+c2tfaGFzaGVudF07Ci0JCWxvY2sgPSAmaGVhZC0+bG9jazsKLQkJd3JpdGVfbG9ja19iaCgmaGVhZC0+bG9jayk7CisJCWxvY2sgPSAmaW5ldF9laGFzaF9idWNrZXQoaGFzaGluZm8sIHNrLT5za19oYXNoKS0+bG9jazsKKwkJd3JpdGVfbG9ja19iaChsb2NrKTsKIAl9CiAKIAlpZiAoX19za19kZWxfbm9kZV9pbml0KHNrKSkKQEAgLTMzNywyMyArMzQ0LDI3IEBACiAjZGVmaW5lIElORVRfQUREUl9DT09LSUUoX19uYW1lLCBfX3NhZGRyLCBfX2RhZGRyKSBcCiAJY29uc3QgX191NjQgX19uYW1lID0gKCgoX191NjQpKF9fZGFkZHIpKSA8PCAzMikgfCAoKF9fdTY0KShfX3NhZGRyKSk7CiAjZW5kaWYgLyogX19CSUdfRU5ESUFOICovCi0jZGVmaW5lIElORVRfTUFUQ0goX19zaywgX19jb29raWUsIF9fc2FkZHIsIF9fZGFkZHIsIF9fcG9ydHMsIF9fZGlmKVwKLQkoKCgqKChfX3U2NCAqKSYoaW5ldF9zayhfX3NrKS0+ZGFkZHIpKSkgPT0gKF9fY29va2llKSkJJiYJXAorI2RlZmluZSBJTkVUX01BVENIKF9fc2ssIF9faGFzaCwgX19jb29raWUsIF9fc2FkZHIsIF9fZGFkZHIsIF9fcG9ydHMsIF9fZGlmKVwKKwkoKChfX3NrKS0+c2tfaGFzaCA9PSAoX19oYXNoKSkJCQkJJiYJXAorCSAoKCooKF9fdTY0ICopJihpbmV0X3NrKF9fc2spLT5kYWRkcikpKSA9PSAoX19jb29raWUpKQkmJglcCiAJICgoKigoX191MzIgKikmKGluZXRfc2soX19zayktPmRwb3J0KSkpID09IChfX3BvcnRzKSkJJiYJXAogCSAoISgoX19zayktPnNrX2JvdW5kX2Rldl9pZikgfHwgKChfX3NrKS0+c2tfYm91bmRfZGV2X2lmID09IChfX2RpZikpKSkKLSNkZWZpbmUgSU5FVF9UV19NQVRDSChfX3NrLCBfX2Nvb2tpZSwgX19zYWRkciwgX19kYWRkciwgX19wb3J0cywgX19kaWYpXAotCSgoKCooKF9fdTY0ICopJihpbmV0X3R3c2soX19zayktPnR3X2RhZGRyKSkpID09IChfX2Nvb2tpZSkpICYmCVwKKyNkZWZpbmUgSU5FVF9UV19NQVRDSChfX3NrLCBfX2hhc2gsIF9fY29va2llLCBfX3NhZGRyLCBfX2RhZGRyLCBfX3BvcnRzLCBfX2RpZilcCisJKCgoX19zayktPnNrX2hhc2ggPT0gKF9faGFzaCkpCQkJCSYmCVwKKwkgKCgqKChfX3U2NCAqKSYoaW5ldF90d3NrKF9fc2spLT50d19kYWRkcikpKSA9PSAoX19jb29raWUpKSAmJglcCiAJICgoKigoX191MzIgKikmKGluZXRfdHdzayhfX3NrKS0+dHdfZHBvcnQpKSkgPT0gKF9fcG9ydHMpKSAmJglcCiAJICghKChfX3NrKS0+c2tfYm91bmRfZGV2X2lmKSB8fCAoKF9fc2spLT5za19ib3VuZF9kZXZfaWYgPT0gKF9fZGlmKSkpKQogI2Vsc2UgLyogMzItYml0IGFyY2ggKi8KICNkZWZpbmUgSU5FVF9BRERSX0NPT0tJRShfX25hbWUsIF9fc2FkZHIsIF9fZGFkZHIpCi0jZGVmaW5lIElORVRfTUFUQ0goX19zaywgX19jb29raWUsIF9fc2FkZHIsIF9fZGFkZHIsIF9fcG9ydHMsIF9fZGlmKQlcCi0JKChpbmV0X3NrKF9fc2spLT5kYWRkcgkJPT0gKF9fc2FkZHIpKQkJJiYJXAorI2RlZmluZSBJTkVUX01BVENIKF9fc2ssIF9faGFzaCwgX19jb29raWUsIF9fc2FkZHIsIF9fZGFkZHIsIF9fcG9ydHMsIF9fZGlmKQlcCisJKCgoX19zayktPnNrX2hhc2ggPT0gKF9faGFzaCkpCQkJCSYmCVwKKwkgKGluZXRfc2soX19zayktPmRhZGRyCQk9PSAoX19zYWRkcikpCQkmJglcCiAJIChpbmV0X3NrKF9fc2spLT5yY3Zfc2FkZHIJPT0gKF9fZGFkZHIpKQkJJiYJXAogCSAoKCooKF9fdTMyICopJihpbmV0X3NrKF9fc2spLT5kcG9ydCkpKSA9PSAoX19wb3J0cykpCSYmCVwKIAkgKCEoKF9fc2spLT5za19ib3VuZF9kZXZfaWYpIHx8ICgoX19zayktPnNrX2JvdW5kX2Rldl9pZiA9PSAoX19kaWYpKSkpCi0jZGVmaW5lIElORVRfVFdfTUFUQ0goX19zaywgX19jb29raWUsIF9fc2FkZHIsIF9fZGFkZHIsIF9fcG9ydHMsIF9fZGlmKQlcCi0JKChpbmV0X3R3c2soX19zayktPnR3X2RhZGRyCT09IChfX3NhZGRyKSkJCSYmCVwKKyNkZWZpbmUgSU5FVF9UV19NQVRDSChfX3NrLCBfX2hhc2gsX19jb29raWUsIF9fc2FkZHIsIF9fZGFkZHIsIF9fcG9ydHMsIF9fZGlmKQlcCisJKCgoX19zayktPnNrX2hhc2ggPT0gKF9faGFzaCkpCQkJCSYmCVwKKwkgKGluZXRfdHdzayhfX3NrKS0+dHdfZGFkZHIJPT0gKF9fc2FkZHIpKQkJJiYJXAogCSAoaW5ldF90d3NrKF9fc2spLT50d19yY3Zfc2FkZHIJPT0gKF9fZGFkZHIpKQkJJiYJXAogCSAoKCooKF9fdTMyICopJihpbmV0X3R3c2soX19zayktPnR3X2Rwb3J0KSkpID09IChfX3BvcnRzKSkgJiYJXAogCSAoISgoX19zayktPnNrX2JvdW5kX2Rldl9pZikgfHwgKChfX3NrKS0+c2tfYm91bmRfZGV2X2lmID09IChfX2RpZikpKSkKQEAgLTM3OCwxOCArMzg5LDE5IEBACiAJLyogT3B0aW1pemUgaGVyZSBmb3IgZGlyZWN0IGhpdCwgb25seSBsaXN0ZW5pbmcgY29ubmVjdGlvbnMgY2FuCiAJICogaGF2ZSB3aWxkY2FyZHMgYW55d2F5cy4KIAkgKi8KLQljb25zdCBpbnQgaGFzaCA9IGluZXRfZWhhc2hmbihkYWRkciwgaG51bSwgc2FkZHIsIHNwb3J0LCBoYXNoaW5mby0+ZWhhc2hfc2l6ZSk7Ci0Jc3RydWN0IGluZXRfZWhhc2hfYnVja2V0ICpoZWFkID0gJmhhc2hpbmZvLT5laGFzaFtoYXNoXTsKKwl1bnNpZ25lZCBpbnQgaGFzaCA9IGluZXRfZWhhc2hmbihkYWRkciwgaG51bSwgc2FkZHIsIHNwb3J0KTsKKwlzdHJ1Y3QgaW5ldF9laGFzaF9idWNrZXQgKmhlYWQgPSBpbmV0X2VoYXNoX2J1Y2tldChoYXNoaW5mbywgaGFzaCk7CiAKKwlwcmVmZXRjaChoZWFkLT5jaGFpbi5maXJzdCk7CiAJcmVhZF9sb2NrKCZoZWFkLT5sb2NrKTsKIAlza19mb3JfZWFjaChzaywgbm9kZSwgJmhlYWQtPmNoYWluKSB7Ci0JCWlmIChJTkVUX01BVENIKHNrLCBhY29va2llLCBzYWRkciwgZGFkZHIsIHBvcnRzLCBkaWYpKQorCQlpZiAoSU5FVF9NQVRDSChzaywgaGFzaCwgYWNvb2tpZSwgc2FkZHIsIGRhZGRyLCBwb3J0cywgZGlmKSkKIAkJCWdvdG8gaGl0OyAvKiBZb3Ugc3VuayBteSBiYXR0bGVzaGlwISAqLwogCX0KIAogCS8qIE11c3QgY2hlY2sgZm9yIGEgVElNRV9XQUlUJ2VyIGJlZm9yZSBnb2luZyB0byBsaXN0ZW5lciBoYXNoLiAqLwogCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmKGhlYWQgKyBoYXNoaW5mby0+ZWhhc2hfc2l6ZSktPmNoYWluKSB7Ci0JCWlmIChJTkVUX1RXX01BVENIKHNrLCBhY29va2llLCBzYWRkciwgZGFkZHIsIHBvcnRzLCBkaWYpKQorCQlpZiAoSU5FVF9UV19NQVRDSChzaywgaGFzaCwgYWNvb2tpZSwgc2FkZHIsIGRhZGRyLCBwb3J0cywgZGlmKSkKIAkJCWdvdG8gaGl0OwogCX0KIAlzayA9IE5VTEw7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaCBiL2luY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oCmluZGV4IDNiMDcwMzUuLjI4ZjdiMjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oCkBAIC0xOSw2ICsxOSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CkBAIC0xMTIsNiArMTEzLDcgQEAKICNkZWZpbmUgdHdfbm9kZQkJCV9fdHdfY29tbW9uLnNrY19ub2RlCiAjZGVmaW5lIHR3X2JpbmRfbm9kZQkJX190d19jb21tb24uc2tjX2JpbmRfbm9kZQogI2RlZmluZSB0d19yZWZjbnQJCV9fdHdfY29tbW9uLnNrY19yZWZjbnQKKyNkZWZpbmUgdHdfaGFzaAkJCV9fdHdfY29tbW9uLnNrY19oYXNoCiAjZGVmaW5lIHR3X3Byb3QJCQlfX3R3X2NvbW1vbi5za2NfcHJvdAogCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIJdHdfc3Vic3RhdGU7CiAJLyogMyBiaXRzIGhvbGUsIHRyeSB0byBwYWNrICovCkBAIC0xMjYsNyArMTI4LDYgQEAKIAkvKiBBbmQgdGhlc2UgYXJlIG91cnMuICovCiAJX191OAkJCXR3X2lwdjZvbmx5OjE7CiAJLyogMzEgYml0cyBob2xlLCB0cnkgdG8gcGFjayAqLwotCWludAkJCXR3X2hhc2hlbnQ7CiAJaW50CQkJdHdfdGltZW91dDsKIAl1bnNpZ25lZCBsb25nCQl0d190dGQ7CiAJc3RydWN0IGluZXRfYmluZF9idWNrZXQJKnR3X3RiOwpAQCAtMTkzLDExICsxOTQsMTMgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbmV0X3R3c2tfcHV0KHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3KQogewogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZ0dy0+dHdfcmVmY250KSkgeworCQlzdHJ1Y3QgbW9kdWxlICpvd25lciA9IHR3LT50d19wcm90LT5vd25lcjsKICNpZmRlZiBTT0NLX1JFRkNOVF9ERUJVRwogCQlwcmludGsoS0VSTl9ERUJVRyAiJXMgdGltZXdhaXRfc29jayAlcCByZWxlYXNlZFxuIiwKIAkJICAgICAgIHR3LT50d19wcm90LT5uYW1lLCB0dyk7CiAjZW5kaWYKIAkJa21lbV9jYWNoZV9mcmVlKHR3LT50d19wcm90LT50d3NrX3NsYWIsIHR3KTsKKwkJbW9kdWxlX3B1dChvd25lcik7CiAJfQogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaAppbmRleCBlNDI2NjQxLi4zYjU1NTlhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oCisrKyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKQEAgLTg0LDYgKzg0LDcgQEAKICNkZWZpbmUgSVBfVlNfQ09OTl9GX0lOX1NFUQkweDA0MDAJCS8qIG11c3QgZG8gaW5wdXQgc2VxIGFkanVzdCAqLwogI2RlZmluZSBJUF9WU19DT05OX0ZfU0VRX01BU0sJMHgwNjAwCQkvKiBpbi9vdXQgc2VxdWVuY2UgbWFzayAqLwogI2RlZmluZSBJUF9WU19DT05OX0ZfTk9fQ1BPUlQJMHgwODAwCQkvKiBubyBjbGllbnQgcG9ydCBzZXQgeWV0ICovCisjZGVmaW5lIElQX1ZTX0NPTk5fRl9URU1QTEFURQkweDEwMDAJCS8qIHRlbXBsYXRlLCBub3QgY29ubmVjdGlvbiAqLwogCiAvKiBNb3ZlIGl0IHRvIGJldHRlciBwbGFjZSBvbmUgZGF5LCBmb3Igbm93IGtlZXAgaXQgdW5pcXVlICovCiAjZGVmaW5lIE5GQ19JUFZTX1BST1BFUlRZCTB4MTAwMDAKQEAgLTczOSw2ICs3NDAsOCBAQAogCiBleHRlcm4gc3RydWN0IGlwX3ZzX2Nvbm4gKmlwX3ZzX2Nvbm5faW5fZ2V0CiAoaW50IHByb3RvY29sLCBfX3UzMiBzX2FkZHIsIF9fdTE2IHNfcG9ydCwgX191MzIgZF9hZGRyLCBfX3UxNiBkX3BvcnQpOworZXh0ZXJuIHN0cnVjdCBpcF92c19jb25uICppcF92c19jdF9pbl9nZXQKKyhpbnQgcHJvdG9jb2wsIF9fdTMyIHNfYWRkciwgX191MTYgc19wb3J0LCBfX3UzMiBkX2FkZHIsIF9fdTE2IGRfcG9ydCk7CiBleHRlcm4gc3RydWN0IGlwX3ZzX2Nvbm4gKmlwX3ZzX2Nvbm5fb3V0X2dldAogKGludCBwcm90b2NvbCwgX191MzIgc19hZGRyLCBfX3UxNiBzX3BvcnQsIF9fdTMyIGRfYWRkciwgX191MTYgZF9wb3J0KTsKIApAQCAtODI5LDcgKzgzMiw3IEBACiAKIGV4dGVybiBpbnQgaXBfdnNfYXBwX3BrdF9vdXQoc3RydWN0IGlwX3ZzX2Nvbm4gKiwgc3RydWN0IHNrX2J1ZmYgKipwc2tiKTsKIGV4dGVybiBpbnQgaXBfdnNfYXBwX3BrdF9pbihzdHJ1Y3QgaXBfdnNfY29ubiAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpOwotZXh0ZXJuIGludCBpcF92c19za2JfcmVwbGFjZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJpLAorZXh0ZXJuIGludCBpcF92c19za2JfcmVwbGFjZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBwcmksCiAJCQkgICAgIGNoYXIgKm9fYnVmLCBpbnQgb19sZW4sIGNoYXIgKm5fYnVmLCBpbnQgbl9sZW4pOwogZXh0ZXJuIGludCBpcF92c19hcHBfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGlwX3ZzX2FwcF9jbGVhbnVwKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbGxjLmggYi9pbmNsdWRlL25ldC9sbGMuaAppbmRleCA3MTc2OWE1Li4xYWRiMmVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9sbGMuaAorKysgYi9pbmNsdWRlL25ldC9sbGMuaApAQCAtMTcsNiArMTcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCiBzdHJ1Y3QgbmV0X2RldmljZTsKIHN0cnVjdCBwYWNrZXRfdHlwZTsKIHN0cnVjdCBza19idWZmOwpAQCAtNDQsNiArNDYsNyBAQAogCXVuc2lnbmVkIGNoYXIJIHN0YXRlOwogCXVuc2lnbmVkIGNoYXIJIHBfYml0OwogCXVuc2lnbmVkIGNoYXIJIGZfYml0OworCWF0b21pY190ICAgICAgICAgcmVmY250OwogCWludAkJICgqcmN2X2Z1bmMpKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwKQEAgLTgxLDEzICs4NCwyNyBAQAogCQkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJICAgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsCiAJCQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBsbGNfc2FwX2hvbGQoc3RydWN0IGxsY19zYXAgKnNhcCkKK3sKKwlhdG9taWNfaW5jKCZzYXAtPnJlZmNudCk7Cit9CisKIGV4dGVybiB2b2lkIGxsY19zYXBfY2xvc2Uoc3RydWN0IGxsY19zYXAgKnNhcCk7CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBsbGNfc2FwX3B1dChzdHJ1Y3QgbGxjX3NhcCAqc2FwKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzYXAtPnJlZmNudCkpCisJCWxsY19zYXBfY2xvc2Uoc2FwKTsKK30KKwogZXh0ZXJuIHN0cnVjdCBsbGNfc2FwICpsbGNfc2FwX2ZpbmQodW5zaWduZWQgY2hhciBzYXBfdmFsdWUpOwogCiBleHRlcm4gaW50IGxsY19idWlsZF9hbmRfc2VuZF91aV9wa3Qoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgIHVuc2lnbmVkIGNoYXIgKmRtYWMsIHVuc2lnbmVkIGNoYXIgZHNhcCk7CiAKK2V4dGVybiB2b2lkIGxsY19zYXBfaGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKIGV4dGVybiBpbnQgbGxjX3N0YXRpb25faW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGxsY19zdGF0aW9uX2V4aXQodm9pZCk7CiAKQEAgLTk4LDQgKzExNSwxNyBAQAogI2RlZmluZSBsbGNfcHJvY19pbml0KCkJKDApCiAjZGVmaW5lIGxsY19wcm9jX2V4aXQoKQlkbyB7IH0gd2hpbGUoMCkKICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLworI2lmZGVmIENPTkZJR19TWVNDVEwKK2V4dGVybiBpbnQgbGxjX3N5c2N0bF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgbGxjX3N5c2N0bF9leGl0KHZvaWQpOworCitleHRlcm4gaW50IHN5c2N0bF9sbGMyX2Fja190aW1lb3V0OworZXh0ZXJuIGludCBzeXNjdGxfbGxjMl9idXN5X3RpbWVvdXQ7CitleHRlcm4gaW50IHN5c2N0bF9sbGMyX3BfdGltZW91dDsKK2V4dGVybiBpbnQgc3lzY3RsX2xsYzJfcmVqX3RpbWVvdXQ7CitleHRlcm4gaW50IHN5c2N0bF9sbGNfc3RhdGlvbl9hY2tfdGltZW91dDsKKyNlbHNlCisjZGVmaW5lIGxsY19zeXNjdGxfaW5pdCgpICgwKQorI2RlZmluZSBsbGNfc3lzY3RsX2V4aXQoKSBkbyB7IH0gd2hpbGUoMCkKKyNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovCiAjZW5kaWYgLyogTExDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xsY19jb25uLmggYi9pbmNsdWRlL25ldC9sbGNfY29ubi5oCmluZGV4IDhhZDNiYzIuLjAwNzMwZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2xsY19jb25uLmgKKysrIGIvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaApAQCAtMTksMTQgKzE5LDE0IEBACiAjZGVmaW5lIExMQ19FVkVOVCAgICAgICAgICAgICAgICAxCiAjZGVmaW5lIExMQ19QQUNLRVQgICAgICAgICAgICAgICAyCiAKLSNkZWZpbmUgTExDX1BfVElNRSAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgTExDX0FDS19USU1FICAgICAgICAgICAgIDEKLSNkZWZpbmUgTExDX1JFSl9USU1FICAgICAgICAgICAgIDMKLSNkZWZpbmUgTExDX0JVU1lfVElNRSAgICAgICAgICAgIDMKKyNkZWZpbmUgTExDMl9QX1RJTUUgICAgICAgICAgICAgICAyCisjZGVmaW5lIExMQzJfQUNLX1RJTUUgICAgICAgICAgICAgMQorI2RlZmluZSBMTEMyX1JFSl9USU1FICAgICAgICAgICAgIDMKKyNkZWZpbmUgTExDMl9CVVNZX1RJTUUgICAgICAgICAgICAzCiAKIHN0cnVjdCBsbGNfdGltZXIgewogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwotCXUxNgkJICBleHBpcmU7CS8qIHRpbWVyIGV4cGlyZSB0aW1lICovCisJdW5zaWduZWQgbG9uZwkgIGV4cGlyZTsJLyogdGltZXIgZXhwaXJlIHRpbWUgKi8KIH07CiAKIHN0cnVjdCBsbGNfc29jayB7CkBAIC0zOCw2ICszOCw3IEBACiAJc3RydWN0IGxsY19hZGRyCSAgICBsYWRkcjsJCS8qIGxzYXAvbWFjIHBhaXIgKi8KIAlzdHJ1Y3QgbGxjX2FkZHIJICAgIGRhZGRyOwkJLyogZHNhcC9tYWMgcGFpciAqLwogCXN0cnVjdCBuZXRfZGV2aWNlICAgKmRldjsJCS8qIGRldmljZSB0byBzZW5kIHRvIHJlbW90ZSAqLworCXUzMgkJICAgIGNvcGllZF9zZXE7CQkvKiBoZWFkIG9mIHlldCB1bnJlYWQgZGF0YSAqLwogCXU4CQkgICAgcmV0cnlfY291bnQ7CS8qIG51bWJlciBvZiByZXRyaWVzICovCiAJdTgJCSAgICBhY2tfbXVzdF9iZV9zZW5kOwogCXU4CQkgICAgZmlyc3RfcGR1X05zOwpAQCAtOTIsNyArOTMsOCBAQAogCXJldHVybiBza2ItPmNiW3NpemVvZihza2ItPmNiKSAtIDFdOwogfQogCi1leHRlcm4gc3RydWN0IHNvY2sgKmxsY19za19hbGxvYyhpbnQgZmFtaWx5LCBpbnQgcHJpb3JpdHksIHN0cnVjdCBwcm90byAqcHJvdCk7CitleHRlcm4gc3RydWN0IHNvY2sgKmxsY19za19hbGxvYyhpbnQgZmFtaWx5LCBnZnBfdCBwcmlvcml0eSwKKwkJCQkgc3RydWN0IHByb3RvICpwcm90KTsKIGV4dGVybiB2b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzayk7CiAKIGV4dGVybiB2b2lkIGxsY19za19yZXNldChzdHJ1Y3Qgc29jayAqc2spOwpAQCAtMTE1LDUgKzExNyw0IEBACiAKIGV4dGVybiB1OCBsbGNfZGF0YV9hY2NlcHRfc3RhdGUodTggc3RhdGUpOwogZXh0ZXJuIHZvaWQgbGxjX2J1aWxkX29mZnNldF90YWJsZSh2b2lkKTsKLWV4dGVybiBpbnQgbGxjX3JlbGVhc2Vfc29ja2V0cyhzdHJ1Y3QgbGxjX3NhcCAqc2FwKTsKICNlbmRpZiAvKiBMTENfQ09OTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9sbGNfcGR1LmggYi9pbmNsdWRlL25ldC9sbGNfcGR1LmgKaW5kZXggZjQ1YzM3ZC4uYzdhOTU5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbGxjX3BkdS5oCisrKyBiL2luY2x1ZGUvbmV0L2xsY19wZHUuaApAQCAtMjU0LDggKzI1NCwxMCBAQAogewogCWlmIChza2ItPnByb3RvY29sID09IG50b2hzKEVUSF9QXzgwMl8yKSkKIAkJbWVtY3B5KHNhLCBldGhfaGRyKHNrYiktPmhfc291cmNlLCBFVEhfQUxFTik7Ci0JZWxzZSBpZiAoc2tiLT5wcm90b2NvbCA9PSBudG9ocyhFVEhfUF9UUl84MDJfMikpCisJZWxzZSBpZiAoc2tiLT5wcm90b2NvbCA9PSBudG9ocyhFVEhfUF9UUl84MDJfMikpIHsKIAkJbWVtY3B5KHNhLCB0cl9oZHIoc2tiKS0+c2FkZHIsIEVUSF9BTEVOKTsKKwkJKnNhICY9IDB4N0Y7CisJfQogfQogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xsY19zYXAuaCBiL2luY2x1ZGUvbmV0L2xsY19zYXAuaAppbmRleCAzNTNiYWFhLi4yYzU2ZGJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9sbGNfc2FwLmgKKysrIGIvaW5jbHVkZS9uZXQvbGxjX3NhcC5oCkBAIC0xMiwxMSArMTIsMTUgQEAKICAqIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqLwogc3RydWN0IGxsY19zYXA7CitzdHJ1Y3QgbmV0X2RldmljZTsKIHN0cnVjdCBza19idWZmOworc3RydWN0IHNvY2s7CiAKIGV4dGVybiB2b2lkIGxsY19zYXBfcnRuX3BkdShzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWV4dGVybiB2b2lkIGxsY19zYXZlX3ByaW1pdGl2ZShzdHJ1Y3Qgc2tfYnVmZiogc2tiLCB1bnNpZ25lZCBjaGFyIHByaW0pOwotZXh0ZXJuIHN0cnVjdCBza19idWZmICpsbGNfYWxsb2NfZnJhbWUodm9pZCk7CitleHRlcm4gdm9pZCBsbGNfc2F2ZV9wcmltaXRpdmUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiogc2tiLAorCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgcHJpbSk7CitleHRlcm4gc3RydWN0IHNrX2J1ZmYgKmxsY19hbGxvY19mcmFtZShzdHJ1Y3Qgc29jayAqc2ssCisJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBleHRlcm4gdm9pZCBsbGNfYnVpbGRfYW5kX3NlbmRfdGVzdF9wa3Qoc3RydWN0IGxsY19zYXAgKnNhcCwKIAkJCQkgICAgICAgIHN0cnVjdCBza19idWZmICpza2IsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCmluZGV4IGUxZDVlYzEuLjhmMjQxMjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCkBAIC0xMjUsNyArMTI1LDcgQEAKICAqLwogZXh0ZXJuIHN0cnVjdCBzb2NrICpzY3RwX2dldF9jdGxfc29jayh2b2lkKTsKIGV4dGVybiBpbnQgc2N0cF9jb3B5X2xvY2FsX2FkZHJfbGlzdChzdHJ1Y3Qgc2N0cF9iaW5kX2FkZHIgKiwKLQkJCQkgICAgIHNjdHBfc2NvcGVfdCwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCwKKwkJCQkgICAgIHNjdHBfc2NvcGVfdCwgZ2ZwX3QgZ2ZwLAogCQkJCSAgICAgaW50IGZsYWdzKTsKIGV4dGVybiBzdHJ1Y3Qgc2N0cF9wZiAqc2N0cF9nZXRfcGZfc3BlY2lmaWMoc2FfZmFtaWx5X3QgZmFtaWx5KTsKIGV4dGVybiBpbnQgc2N0cF9yZWdpc3Rlcl9wZihzdHJ1Y3Qgc2N0cF9wZiAqLCBzYV9mYW1pbHlfdCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3NtLmggYi9pbmNsdWRlL25ldC9zY3RwL3NtLmgKaW5kZXggNTg0NjIxNjQuLjFlYWMzZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc20uaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3NtLmgKQEAgLTE4MSwxNyArMTgxLDE3IEBACiBpbnQgc2N0cF9jaHVua19paWYoY29uc3Qgc3RydWN0IHNjdHBfY2h1bmsgKik7CiBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqc2N0cF9tYWtlX3RlbXBfYXNvYyhjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqLAogCQkJCQkgICAgIHN0cnVjdCBzY3RwX2NodW5rICosCi0JCQkJCSAgICAgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCk7CisJCQkJCSAgICAgZ2ZwX3QgZ2ZwKTsKIF9fdTMyIHNjdHBfZ2VuZXJhdGVfdmVyaWZpY2F0aW9uX3RhZyh2b2lkKTsKIHZvaWQgc2N0cF9wb3B1bGF0ZV90aWVfdGFncyhfX3U4ICpjb29raWUsIF9fdTMyIGN1clRhZywgX191MzIgaGlzVGFnKTsKIAogLyogUHJvdG90eXBlcyBmb3IgY2h1bmstYnVpbGRpbmcgZnVuY3Rpb25zLiAgKi8KIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX21ha2VfaW5pdChjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqLAogCQkJICAgICBjb25zdCBzdHJ1Y3Qgc2N0cF9iaW5kX2FkZHIgKiwKLQkJCSAgICAgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCwgaW50IHZwYXJhbV9sZW4pOworCQkJICAgICBnZnBfdCBnZnAsIGludCB2cGFyYW1fbGVuKTsKIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX21ha2VfaW5pdF9hY2soY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwKIAkJCQkgY29uc3Qgc3RydWN0IHNjdHBfY2h1bmsgKiwKLQkJCQkgY29uc3QgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCwKKwkJCQkgY29uc3QgZ2ZwX3QgZ2ZwLAogCQkJCSBjb25zdCBpbnQgdW5rcGFyYW1fbGVuKTsKIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX21ha2VfY29va2llX2VjaG8oY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwKIAkJCQkgICAgY29uc3Qgc3RydWN0IHNjdHBfY2h1bmsgKik7CkBAIC0yNjUsNyArMjY1LDcgQEAKICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX2VuZHBvaW50ICosCiAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKICAgICAgICAgICAgICAgIHZvaWQgKmV2ZW50X2FyZywKLQkgICAgICAgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCk7CisJICAgICAgIGdmcF90IGdmcCk7CiAKIC8qIDJuZCBsZXZlbCBwcm90b3R5cGVzICovCiB2b2lkIHNjdHBfZ2VuZXJhdGVfdDNfcnR4X2V2ZW50KHVuc2lnbmVkIGxvbmcgcGVlcik7CkBAIC0yNzYsNyArMjc2LDcgQEAKIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICpzY3RwX3VucGFja19jb29raWUoY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKiwKIAkJCQkgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwKIAkJCQkgICAgICAgc3RydWN0IHNjdHBfY2h1bmsgKiwKLQkJCQkgICAgICAgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCwgaW50ICplcnIsCisJCQkJICAgICAgIGdmcF90IGdmcCwgaW50ICplcnIsCiAJCQkJICAgICAgIHN0cnVjdCBzY3RwX2NodW5rICoqZXJyX2Noa19wKTsKIGludCBzY3RwX2FkZGlwX2FkZHJfY29uZmlnKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosIHNjdHBfcGFyYW1fdCwKIAkJCSAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKiwgaW50KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oIGIvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgKaW5kZXggOTk0MDA5Yi4uOWMzODViNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgKQEAgLTQ0Niw3ICs0NDYsNyBAQAogfTsKIAogc3RydWN0IHNjdHBfc3NubWFwICpzY3RwX3Nzbm1hcF9uZXcoX191MTYgaW4sIF9fdTE2IG91dCwKLQkJCQkgICAgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCk7CisJCQkJICAgIGdmcF90IGdmcCk7CiB2b2lkIHNjdHBfc3NubWFwX2ZyZWUoc3RydWN0IHNjdHBfc3NubWFwICptYXApOwogdm9pZCBzY3RwX3Nzbm1hcF9jbGVhcihzdHJ1Y3Qgc2N0cF9zc25tYXAgKm1hcCk7CiAKQEAgLTk0Nyw3ICs5NDcsNyBAQAogfTsKIAogc3RydWN0IHNjdHBfdHJhbnNwb3J0ICpzY3RwX3RyYW5zcG9ydF9uZXcoY29uc3QgdW5pb24gc2N0cF9hZGRyICosCi0JCQkJCSAgdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKKwkJCQkJICBnZnBfdCk7CiB2b2lkIHNjdHBfdHJhbnNwb3J0X3NldF9vd25lcihzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKiwKIAkJCSAgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICopOwogdm9pZCBzY3RwX3RyYW5zcG9ydF9yb3V0ZShzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKiwgdW5pb24gc2N0cF9hZGRyICosCkBAIC0xMDk1LDEwICsxMDk1LDEwIEBACiB2b2lkIHNjdHBfYmluZF9hZGRyX2ZyZWUoc3RydWN0IHNjdHBfYmluZF9hZGRyICopOwogaW50IHNjdHBfYmluZF9hZGRyX2NvcHkoc3RydWN0IHNjdHBfYmluZF9hZGRyICpkZXN0LAogCQkJY29uc3Qgc3RydWN0IHNjdHBfYmluZF9hZGRyICpzcmMsCi0JCQlzY3RwX3Njb3BlX3Qgc2NvcGUsIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnAsCisJCQlzY3RwX3Njb3BlX3Qgc2NvcGUsIGdmcF90IGdmcCwKIAkJCWludCBmbGFncyk7CiBpbnQgc2N0cF9hZGRfYmluZF9hZGRyKHN0cnVjdCBzY3RwX2JpbmRfYWRkciAqLCB1bmlvbiBzY3RwX2FkZHIgKiwKLQkJICAgICAgIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnApOworCQkgICAgICAgZ2ZwX3QgZ2ZwKTsKIGludCBzY3RwX2RlbF9iaW5kX2FkZHIoc3RydWN0IHNjdHBfYmluZF9hZGRyICosIHVuaW9uIHNjdHBfYWRkciAqKTsKIGludCBzY3RwX2JpbmRfYWRkcl9tYXRjaChzdHJ1Y3Qgc2N0cF9iaW5kX2FkZHIgKiwgY29uc3QgdW5pb24gc2N0cF9hZGRyICosCiAJCQkgc3RydWN0IHNjdHBfc29jayAqKTsKQEAgLTExMDgsOSArMTEwOCw5IEBACiAJCQkJCXN0cnVjdCBzY3RwX3NvY2sJKm9wdCk7CiB1bmlvbiBzY3RwX3BhcmFtcyBzY3RwX2JpbmRfYWRkcnNfdG9fcmF3KGNvbnN0IHN0cnVjdCBzY3RwX2JpbmRfYWRkciAqYnAsCiAJCQkJCSBpbnQgKmFkZHJzX2xlbiwKLQkJCQkJIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnApOworCQkJCQkgZ2ZwX3QgZ2ZwKTsKIGludCBzY3RwX3Jhd190b19iaW5kX2FkZHJzKHN0cnVjdCBzY3RwX2JpbmRfYWRkciAqYnAsIF9fdTggKnJhdywgaW50IGxlbiwKLQkJCSAgIF9fdTE2IHBvcnQsIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnApOworCQkJICAgX191MTYgcG9ydCwgZ2ZwX3QgZ2ZwKTsKIAogc2N0cF9zY29wZV90IHNjdHBfc2NvcGUoY29uc3QgdW5pb24gc2N0cF9hZGRyICopOwogaW50IHNjdHBfaW5fc2NvcGUoY29uc3QgdW5pb24gc2N0cF9hZGRyICphZGRyLCBjb25zdCBzY3RwX3Njb3BlX3Qgc2NvcGUpOwpAQCAtMTIzOSw3ICsxMjM5LDcgQEAKIH0KIAogLyogVGhlc2UgYXJlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgZm9yIG1hbmlwdWxhdGluZyBlbmRwb2ludHMuICAqLwotc3RydWN0IHNjdHBfZW5kcG9pbnQgKnNjdHBfZW5kcG9pbnRfbmV3KHN0cnVjdCBzb2NrICosIHVuc2lnbmVkIGludCBfX25vY2FzdCk7CitzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqc2N0cF9lbmRwb2ludF9uZXcoc3RydWN0IHNvY2sgKiwgZ2ZwX3QpOwogdm9pZCBzY3RwX2VuZHBvaW50X2ZyZWUoc3RydWN0IHNjdHBfZW5kcG9pbnQgKik7CiB2b2lkIHNjdHBfZW5kcG9pbnRfcHV0KHN0cnVjdCBzY3RwX2VuZHBvaW50ICopOwogdm9pZCBzY3RwX2VuZHBvaW50X2hvbGQoc3RydWN0IHNjdHBfZW5kcG9pbnQgKik7CkBAIC0xMjYwLDcgKzEyNjAsNyBAQAogCQkgICAgIHN0cnVjdCBzY3RwX2NodW5rICoqZXJyX2NodW5rKTsKIGludCBzY3RwX3Byb2Nlc3NfaW5pdChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqLCBzY3RwX2NpZF90IGNpZCwKIAkJICAgICAgY29uc3QgdW5pb24gc2N0cF9hZGRyICpwZWVyLAotCQkgICAgICBzY3RwX2luaXRfY2h1bmtfdCAqaW5pdCwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCk7CisJCSAgICAgIHNjdHBfaW5pdF9jaHVua190ICppbml0LCBnZnBfdCBnZnApOwogX191MzIgc2N0cF9nZW5lcmF0ZV90YWcoY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKik7CiBfX3UzMiBzY3RwX2dlbmVyYXRlX3Rzbihjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqKTsKIApAQCAtMTcyMyw3ICsxNzIzLDcgQEAKIAogc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKgogc2N0cF9hc3NvY2lhdGlvbl9uZXcoY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKiwgY29uc3Qgc3RydWN0IHNvY2sgKiwKLQkJICAgICBzY3RwX3Njb3BlX3Qgc2NvcGUsIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnApOworCQkgICAgIHNjdHBfc2NvcGVfdCBzY29wZSwgZ2ZwX3QgZ2ZwKTsKIHZvaWQgc2N0cF9hc3NvY2lhdGlvbl9mcmVlKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICopOwogdm9pZCBzY3RwX2Fzc29jaWF0aW9uX3B1dChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKTsKIHZvaWQgc2N0cF9hc3NvY2lhdGlvbl9ob2xkKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICopOwpAQCAtMTczOSw3ICsxNzM5LDcgQEAKIAkJCSAgICBjb25zdCB1bmlvbiBzY3RwX2FkZHIgKmxhZGRyKTsKIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqc2N0cF9hc3NvY19hZGRfcGVlcihzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqLAogCQkJCSAgICAgY29uc3QgdW5pb24gc2N0cF9hZGRyICphZGRyZXNzLAotCQkJCSAgICAgY29uc3QgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCwKKwkJCQkgICAgIGNvbnN0IGdmcF90IGdmcCwKIAkJCQkgICAgIGNvbnN0IGludCBwZWVyX3N0YXRlKTsKIHZvaWQgc2N0cF9hc3NvY19kZWxfcGVlcihzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAkJCSBjb25zdCB1bmlvbiBzY3RwX2FkZHIgKmFkZHIpOwpAQCAtMTc2NCwxMCArMTc2NCwxMCBAQAogdm9pZCBzY3RwX2Fzc29jX3NldF9wcmltYXJ5KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosCiAJCQkgICAgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICopOwogaW50IHNjdHBfYXNzb2Nfc2V0X2JpbmRfYWRkcl9mcm9tX2VwKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgX19ub2Nhc3QpOworCQkJCSAgICAgZ2ZwX3QpOwogaW50IHNjdHBfYXNzb2Nfc2V0X2JpbmRfYWRkcl9mcm9tX2Nvb2tpZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqLAogCQkJCQkgc3RydWN0IHNjdHBfY29va2llKiwKLQkJCQkJIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnApOworCQkJCQkgZ2ZwX3QgZ2ZwKTsKIAogaW50IHNjdHBfY21wX2FkZHJfZXhhY3QoY29uc3QgdW5pb24gc2N0cF9hZGRyICpzczEsCiAJCQljb25zdCB1bmlvbiBzY3RwX2FkZHIgKnNzMik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3VscGV2ZW50LmggYi9pbmNsdWRlL25ldC9zY3RwL3VscGV2ZW50LmgKaW5kZXggOTBmZTRiZi4uNmM0MGNmYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC91bHBldmVudC5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvdWxwZXZlbnQuaApAQCAtODgsNyArODgsNyBAQAogCV9fdTE2IGVycm9yLAogCV9fdTE2IG91dGJvdW5kLAogCV9fdTE2IGluYm91bmQsCi0JdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCk7CisJZ2ZwX3QgZ2ZwKTsKIAogc3RydWN0IHNjdHBfdWxwZXZlbnQgKnNjdHBfdWxwZXZlbnRfbWFrZV9wZWVyX2FkZHJfY2hhbmdlKAogCWNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLApAQCAtOTYsMzUgKzk2LDM1IEBACiAJaW50IGZsYWdzLAogCWludCBzdGF0ZSwKIAlpbnQgZXJyb3IsCi0JdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCk7CisJZ2ZwX3QgZ2ZwKTsKIAogc3RydWN0IHNjdHBfdWxwZXZlbnQgKnNjdHBfdWxwZXZlbnRfbWFrZV9yZW1vdGVfZXJyb3IoCiAJY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiAJc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLAogCV9fdTE2IGZsYWdzLAotCXVuc2lnbmVkIGludCBfX25vY2FzdCBnZnApOworCWdmcF90IGdmcCk7CiBzdHJ1Y3Qgc2N0cF91bHBldmVudCAqc2N0cF91bHBldmVudF9tYWtlX3NlbmRfZmFpbGVkKAogCWNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuaywKIAlfX3UxNiBmbGFncywKIAlfX3UzMiBlcnJvciwKLQl1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwKTsKKwlnZnBfdCBnZnApOwogCiBzdHJ1Y3Qgc2N0cF91bHBldmVudCAqc2N0cF91bHBldmVudF9tYWtlX3NodXRkb3duX2V2ZW50KAogCWNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCV9fdTE2IGZsYWdzLAotCXVuc2lnbmVkIGludCBfX25vY2FzdCBnZnApOworCWdmcF90IGdmcCk7CiAKIHN0cnVjdCBzY3RwX3VscGV2ZW50ICpzY3RwX3VscGV2ZW50X21ha2VfcGRhcGkoCiAJY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JX191MzIgaW5kaWNhdGlvbiwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCk7CisJX191MzIgaW5kaWNhdGlvbiwgZ2ZwX3QgZ2ZwKTsKIAogc3RydWN0IHNjdHBfdWxwZXZlbnQgKnNjdHBfdWxwZXZlbnRfbWFrZV9hZGFwdGlvbl9pbmRpY2F0aW9uKAotCWNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwKTsKKwljb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgZ2ZwX3QgZ2ZwKTsKIAogc3RydWN0IHNjdHBfdWxwZXZlbnQgKnNjdHBfdWxwZXZlbnRfbWFrZV9yY3Ztc2coc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiAJc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLAotCXVuc2lnbmVkIGludCBfX25vY2FzdCBnZnApOworCWdmcF90IGdmcCk7CiAKIHZvaWQgc2N0cF91bHBldmVudF9yZWFkX3NuZHJjdmluZm8oY29uc3Qgc3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2ZW50LAogCXN0cnVjdCBtc2doZHIgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3VscHF1ZXVlLmggYi9pbmNsdWRlL25ldC9zY3RwL3VscHF1ZXVlLmgKaW5kZXggMWE2MGM2ZC4uYTQzYzg3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC91bHBxdWV1ZS5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvdWxwcXVldWUuaApAQCAtNjIsMjIgKzYyLDE5IEBACiB2b2lkIHNjdHBfdWxwcV9mcmVlKHN0cnVjdCBzY3RwX3VscHEgKik7CiAKIC8qIEFkZCBhIG5ldyBEQVRBIGNodW5rIGZvciBwcm9jZXNzaW5nLiAqLwotaW50IHNjdHBfdWxwcV90YWlsX2RhdGEoc3RydWN0IHNjdHBfdWxwcSAqLCBzdHJ1Y3Qgc2N0cF9jaHVuayAqLAotCQkJdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKK2ludCBzY3RwX3VscHFfdGFpbF9kYXRhKHN0cnVjdCBzY3RwX3VscHEgKiwgc3RydWN0IHNjdHBfY2h1bmsgKiwgZ2ZwX3QpOwogCiAvKiBBZGQgYSBuZXcgZXZlbnQgZm9yIHByb3BhZ2F0aW9uIHRvIHRoZSBVTFAuICovCiBpbnQgc2N0cF91bHBxX3RhaWxfZXZlbnQoc3RydWN0IHNjdHBfdWxwcSAqLCBzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXYpOwogCiAvKiBSZW5lZ2UgcHJldmlvdXNseSByZWNlaXZlZCBjaHVua3MuICAqLwotdm9pZCBzY3RwX3VscHFfcmVuZWdlKHN0cnVjdCBzY3RwX3VscHEgKiwgc3RydWN0IHNjdHBfY2h1bmsgKiwKLQkJICAgICAgdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKK3ZvaWQgc2N0cF91bHBxX3JlbmVnZShzdHJ1Y3Qgc2N0cF91bHBxICosIHN0cnVjdCBzY3RwX2NodW5rICosIGdmcF90KTsKIAogLyogUGVyZm9ybSBwYXJ0aWFsIGRlbGl2ZXJ5LiAqLwotdm9pZCBzY3RwX3VscHFfcGFydGlhbF9kZWxpdmVyeShzdHJ1Y3Qgc2N0cF91bHBxICosIHN0cnVjdCBzY3RwX2NodW5rICosCi0JCQkJdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKK3ZvaWQgc2N0cF91bHBxX3BhcnRpYWxfZGVsaXZlcnkoc3RydWN0IHNjdHBfdWxwcSAqLCBzdHJ1Y3Qgc2N0cF9jaHVuayAqLCBnZnBfdCk7CiAKIC8qIEFib3J0IHRoZSBwYXJ0aWFsIGRlbGl2ZXJ5LiAqLwotdm9pZCBzY3RwX3VscHFfYWJvcnRfcGQoc3RydWN0IHNjdHBfdWxwcSAqLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QpOwordm9pZCBzY3RwX3VscHFfYWJvcnRfcGQoc3RydWN0IHNjdHBfdWxwcSAqLCBnZnBfdCk7CiAKIC8qIENsZWFyIHRoZSBwYXJ0aWFsIGRhdGEgZGVsaXZlcnkgY29uZGl0aW9uIG9uIHRoaXMgc29ja2V0LiAqLwogaW50IHNjdHBfY2xlYXJfcGQoc3RydWN0IHNvY2sgKnNrKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvdXNlci5oIGIvaW5jbHVkZS9uZXQvc2N0cC91c2VyLmgKaW5kZXggZjYzMjhhZS4uMWM1ZjE5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC91c2VyLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC91c2VyLmgKQEAgLTEwMywxNiArMTAzLDIwIEBACiAjZGVmaW5lIFNDVFBfU09DS09QVF9CSU5EWF9SRU0JU0NUUF9TT0NLT1BUX0JJTkRYX1JFTQogCVNDVFBfU09DS09QVF9QRUVMT0ZGLCAJLyogcGVlbCBvZmYgYXNzb2NpYXRpb24uICovCiAjZGVmaW5lIFNDVFBfU09DS09QVF9QRUVMT0ZGCVNDVFBfU09DS09QVF9QRUVMT0ZGCi0JU0NUUF9HRVRfUEVFUl9BRERSU19OVU0sIAkvKiBHZXQgbnVtYmVyIG9mIHBlZXIgYWRkcmVzc3MuICovCi0jZGVmaW5lIFNDVFBfR0VUX1BFRVJfQUREUlNfTlVNCVNDVFBfR0VUX1BFRVJfQUREUlNfTlVNCi0JU0NUUF9HRVRfUEVFUl9BRERSUywgCS8qIEdldCBhbGwgcGVlciBhZGRyZXNzcy4gKi8KLSNkZWZpbmUgU0NUUF9HRVRfUEVFUl9BRERSUwlTQ1RQX0dFVF9QRUVSX0FERFJTCi0JU0NUUF9HRVRfTE9DQUxfQUREUlNfTlVNLCAJLyogR2V0IG51bWJlciBvZiBsb2NhbCBhZGRyZXNzcy4gKi8KLSNkZWZpbmUgU0NUUF9HRVRfTE9DQUxfQUREUlNfTlVNCVNDVFBfR0VUX0xPQ0FMX0FERFJTX05VTQotCVNDVFBfR0VUX0xPQ0FMX0FERFJTLCAJLyogR2V0IGFsbCBsb2NhbCBhZGRyZXNzcy4gKi8KLSNkZWZpbmUgU0NUUF9HRVRfTE9DQUxfQUREUlMJU0NUUF9HRVRfTE9DQUxfQUREUlMKKwlTQ1RQX0dFVF9QRUVSX0FERFJTX05VTV9PTEQsIAkvKiBHZXQgbnVtYmVyIG9mIHBlZXIgYWRkcmVzc3MuICovCisjZGVmaW5lIFNDVFBfR0VUX1BFRVJfQUREUlNfTlVNX09MRAlTQ1RQX0dFVF9QRUVSX0FERFJTX05VTV9PTEQKKwlTQ1RQX0dFVF9QRUVSX0FERFJTX09MRCwgCS8qIEdldCBhbGwgcGVlciBhZGRyZXNzcy4gKi8KKyNkZWZpbmUgU0NUUF9HRVRfUEVFUl9BRERSU19PTEQJU0NUUF9HRVRfUEVFUl9BRERSU19PTEQKKwlTQ1RQX0dFVF9MT0NBTF9BRERSU19OVU1fT0xELCAJLyogR2V0IG51bWJlciBvZiBsb2NhbCBhZGRyZXNzcy4gKi8KKyNkZWZpbmUgU0NUUF9HRVRfTE9DQUxfQUREUlNfTlVNX09MRAlTQ1RQX0dFVF9MT0NBTF9BRERSU19OVU1fT0xECisJU0NUUF9HRVRfTE9DQUxfQUREUlNfT0xELCAJLyogR2V0IGFsbCBsb2NhbCBhZGRyZXNzcy4gKi8KKyNkZWZpbmUgU0NUUF9HRVRfTE9DQUxfQUREUlNfT0xECVNDVFBfR0VUX0xPQ0FMX0FERFJTX09MRAogCVNDVFBfU09DS09QVF9DT05ORUNUWCwgLyogQ09OTkVDVFggcmVxdWVzdHMuICovCiAjZGVmaW5lIFNDVFBfU09DS09QVF9DT05ORUNUWAlTQ1RQX1NPQ0tPUFRfQ09OTkVDVFgKKwlTQ1RQX0dFVF9QRUVSX0FERFJTLCAJLyogR2V0IGFsbCBwZWVyIGFkZHJlc3NzLiAqLworI2RlZmluZSBTQ1RQX0dFVF9QRUVSX0FERFJTCVNDVFBfR0VUX1BFRVJfQUREUlMKKwlTQ1RQX0dFVF9MT0NBTF9BRERSUywgCS8qIEdldCBhbGwgbG9jYWwgYWRkcmVzc3MuICovCisjZGVmaW5lIFNDVFBfR0VUX0xPQ0FMX0FERFJTCVNDVFBfR0VUX0xPQ0FMX0FERFJTCiB9OwogCiAvKgpAQCAtMjM5LDcgKzI0Myw3IEBACiAJaW50IHNwY19zdGF0ZTsKIAlpbnQgc3BjX2Vycm9yOwogCXNjdHBfYXNzb2NfdCBzcGNfYXNzb2NfaWQ7Ci19OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQoNCkpKTsKIAogLyoKICAqICAgIHNwY19zdGF0ZTogIDMyIGJpdHMgKHNpZ25lZCBpbnRlZ2VyKQpAQCAtNDY0LDcgKzQ2OCw3IEBACiBzdHJ1Y3Qgc2N0cF9zZXRwZWVycHJpbSB7CiAJc2N0cF9hc3NvY190ICAgICAgICAgICAgc3NwcF9hc3NvY19pZDsKIAlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzc3BwX2FkZHI7Ci19OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQoNCkpKTsKIAogLyoKICAqIDcuMS4xMCBTZXQgUHJpbWFyeSBBZGRyZXNzIChTQ1RQX1BSSU1BUllfQUREUikKQEAgLTQ3Nyw3ICs0ODEsNyBAQAogc3RydWN0IHNjdHBfcHJpbSB7CiAJc2N0cF9hc3NvY190ICAgICAgICAgICAgc3NwX2Fzc29jX2lkOwogCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzcF9hZGRyOwotfTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkKDQpKSk7CiAKIC8qCiAgKiA3LjEuMTEgU2V0IEFkYXB0aW9uIExheWVyIEluZGljYXRvciAoU0NUUF9BREFQVElPTl9MQVlFUikKQEAgLTUwNCw3ICs1MDgsNyBAQAogCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlCXNwcF9hZGRyZXNzOwogCV9fdTMyCQkJc3BwX2hiaW50ZXJ2YWw7CiAJX191MTYJCQlzcHBfcGF0aG1heHJ4dDsKLX07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCwgYWxpZ25lZCg0KSkpOwogCiAvKgogICogNy4yLjIgUGVlciBBZGRyZXNzIEluZm9ybWF0aW9uCkBAIC01MjMsNyArNTI3LDcgQEAKIAlfX3UzMgkJCXNwaW5mb19zcnR0OwogCV9fdTMyCQkJc3BpbmZvX3J0bzsKIAlfX3UzMgkJCXNwaW5mb19tdHU7Ci19OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQoNCkpKTsKIAogLyogUGVlciBhZGRyZXNzZXMncyBzdGF0ZS4gKi8KIGVudW0gc2N0cF9zcGluZm9fc3RhdGUgewpAQCAtNTU5LDExICs1NjMsMTYgQEAKICAqIFNDVFBfR0VUX0xPQ0FMX0FERFJTIHNvY2tldCBvcHRpb25zIHVzZWQgaW50ZXJuYWxseSB0byBpbXBsZW1lbnQKICAqIHNjdHBfZ2V0cGFkZHJzKCkgYW5kIHNjdHBfZ2V0bGFkZHJzKCkgQVBJLiAKICAqLwotc3RydWN0IHNjdHBfZ2V0YWRkcnMgeworc3RydWN0IHNjdHBfZ2V0YWRkcnNfb2xkIHsKIAlzY3RwX2Fzc29jX3QgICAgICAgICAgICBhc3NvY19pZDsKIAlpbnQJCQlhZGRyX251bTsKIAlzdHJ1Y3Qgc29ja2FkZHIJCV9fdXNlciAqYWRkcnM7CiB9Oworc3RydWN0IHNjdHBfZ2V0YWRkcnMgeworCXNjdHBfYXNzb2NfdAkJYXNzb2NfaWQ7IC8qaW5wdXQqLworCV9fdTMyCQkJYWRkcl9udW07IC8qb3V0cHV0Ki8KKwlfX3U4CQkJYWRkcnNbMF07IC8qb3V0cHV0LCB2YXJpYWJsZSBzaXplKi8KK307CiAKIC8qIFRoZXNlIGFyZSBiaXQgZmllbGRzIGZvciBtc2doZHItPm1zZ19mbGFncy4gIFNlZSBzZWN0aW9uIDUuMS4gICovCiAvKiBPbiB1c2VyIHNwYWNlIExpbnV4LCB0aGVzZSBsaXZlIGluIDxiaXRzL3NvY2tldC5oPiBhcyBhbiBlbnVtLiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NvY2suaCBiL2luY2x1ZGUvbmV0L3NvY2suaAppbmRleCA4YzQ4ZmJlLi5lY2I3NTUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvc29jay5oCkBAIC05OSw2ICs5OSw3IEBACiAgKglAc2tjX25vZGU6IG1haW4gaGFzaCBsaW5rYWdlIGZvciB2YXJpb3VzIHByb3RvY29sIGxvb2t1cCB0YWJsZXMKICAqCUBza2NfYmluZF9ub2RlOiBiaW5kIGhhc2ggbGlua2FnZSBmb3IgdmFyaW91cyBwcm90b2NvbCBsb29rdXAgdGFibGVzCiAgKglAc2tjX3JlZmNudDogcmVmZXJlbmNlIGNvdW50CisgKglAc2tjX2hhc2g6IGhhc2ggdmFsdWUgdXNlZCB3aXRoIHZhcmlvdXMgcHJvdG9jb2wgbG9va3VwIHRhYmxlcwogICoJQHNrY19wcm90OiBwcm90b2NvbCBoYW5kbGVycyBpbnNpZGUgYSBuZXR3b3JrIGZhbWlseQogICoKICAqCVRoaXMgaXMgdGhlIG1pbmltYWwgbmV0d29yayBsYXllciByZXByZXNlbnRhdGlvbiBvZiBzb2NrZXRzLCB0aGUgaGVhZGVyCkBAIC0xMTIsNiArMTEzLDcgQEAKIAlzdHJ1Y3QgaGxpc3Rfbm9kZQlza2Nfbm9kZTsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZQlza2NfYmluZF9ub2RlOwogCWF0b21pY190CQlza2NfcmVmY250OworCXVuc2lnbmVkIGludAkJc2tjX2hhc2g7CiAJc3RydWN0IHByb3RvCQkqc2tjX3Byb3Q7CiB9OwogCkBAIC0xMzksNyArMTQxLDYgQEAKICAgKglAc2tfbm9fY2hlY2s6ICVTT19OT19DSEVDSyBzZXR0aW5nLCB3ZXRoZXIgb3Igbm90IGNoZWNrdXAgcGFja2V0cwogICAqCUBza19yb3V0ZV9jYXBzOiByb3V0ZSBjYXBhYmlsaXRpZXMgKGUuZy4gJU5FVElGX0ZfVFNPKQogICAqCUBza19saW5nZXJ0aW1lOiAlU09fTElOR0VSIGxfbGluZ2VyIHNldHRpbmcKLSAgKglAc2tfaGFzaGVudDogaGFzaCBlbnRyeSBpbiBzZXZlcmFsIHRhYmxlcyAoZS5nLiBpbmV0X2hhc2hpbmZvLmVoYXNoKQogICAqCUBza19iYWNrbG9nOiBhbHdheXMgdXNlZCB3aXRoIHRoZSBwZXItc29ja2V0IHNwaW5sb2NrIGhlbGQKICAgKglAc2tfY2FsbGJhY2tfbG9jazogdXNlZCB3aXRoIHRoZSBjYWxsYmFja3MgaW4gdGhlIGVuZCBvZiB0aGlzIHN0cnVjdAogICAqCUBza19lcnJvcl9xdWV1ZTogcmFyZWx5IHVzZWQKQEAgLTE4Niw2ICsxODcsNyBAQAogI2RlZmluZSBza19ub2RlCQkJX19za19jb21tb24uc2tjX25vZGUKICNkZWZpbmUgc2tfYmluZF9ub2RlCQlfX3NrX2NvbW1vbi5za2NfYmluZF9ub2RlCiAjZGVmaW5lIHNrX3JlZmNudAkJX19za19jb21tb24uc2tjX3JlZmNudAorI2RlZmluZSBza19oYXNoCQkJX19za19jb21tb24uc2tjX2hhc2gKICNkZWZpbmUgc2tfcHJvdAkJCV9fc2tfY29tbW9uLnNrY19wcm90CiAJdW5zaWduZWQgY2hhcgkJc2tfc2h1dGRvd24gOiAyLAogCQkJCXNrX25vX2NoZWNrIDogMiwKQEAgLTIwOCw3ICsyMTAsNiBAQAogCXVuc2lnbmVkIGludAkJc2tfYWxsb2NhdGlvbjsKIAlpbnQJCQlza19zbmRidWY7CiAJaW50CQkJc2tfcm91dGVfY2FwczsKLQlpbnQJCQlza19oYXNoZW50OwogCXVuc2lnbmVkIGxvbmcgCQlza19mbGFnczsKIAl1bnNpZ25lZCBsb25nCSAgICAgICAgc2tfbGluZ2VydGltZTsKIAkvKgpAQCAtNzM4LDE4ICs3MzksMTggQEAKICNkZWZpbmUgYmhfdW5sb2NrX3NvY2soX19zaykJc3Bpbl91bmxvY2soJigoX19zayktPnNrX2xvY2suc2xvY2spKQogCiBleHRlcm4gc3RydWN0IHNvY2sJCSpza19hbGxvYyhpbnQgZmFtaWx5LAotCQkJCQkgIHVuc2lnbmVkIGludCBfX25vY2FzdCBwcmlvcml0eSwKKwkJCQkJICBnZnBfdCBwcmlvcml0eSwKIAkJCQkJICBzdHJ1Y3QgcHJvdG8gKnByb3QsIGludCB6ZXJvX2l0KTsKIGV4dGVybiB2b2lkCQkJc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spOwogZXh0ZXJuIHN0cnVjdCBzb2NrCQkqc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLAotCQkJCQkgIGNvbnN0IHVuc2lnbmVkIGludCBfX25vY2FzdCBwcmlvcml0eSk7CisJCQkJCSAgY29uc3QgZ2ZwX3QgcHJpb3JpdHkpOwogCiBleHRlcm4gc3RydWN0IHNrX2J1ZmYJCSpzb2NrX3dtYWxsb2Moc3RydWN0IHNvY2sgKnNrLAogCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIGludCBmb3JjZSwKLQkJCQkJICAgICAgdW5zaWduZWQgaW50IF9fbm9jYXN0IHByaW9yaXR5KTsKKwkJCQkJICAgICAgZ2ZwX3QgcHJpb3JpdHkpOwogZXh0ZXJuIHN0cnVjdCBza19idWZmCQkqc29ja19ybWFsbG9jKHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgZm9yY2UsCi0JCQkJCSAgICAgIHVuc2lnbmVkIGludCBfX25vY2FzdCBwcmlvcml0eSk7CisJCQkJCSAgICAgIGdmcF90IHByaW9yaXR5KTsKIGV4dGVybiB2b2lkCQkJc29ja193ZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiB2b2lkCQkJc29ja19yZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIApAQCAtNzY1LDcgKzc2Niw3IEBACiAJCQkJCQkgICAgIGludCBub2Jsb2NrLAogCQkJCQkJICAgICBpbnQgKmVycmNvZGUpOwogZXh0ZXJuIHZvaWQgKnNvY2tfa21hbGxvYyhzdHJ1Y3Qgc29jayAqc2ssIGludCBzaXplLAotCQkJICB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgcHJpb3JpdHkpOworCQkJICBnZnBfdCBwcmlvcml0eSk7CiBleHRlcm4gdm9pZCBzb2NrX2tmcmVlX3Moc3RydWN0IHNvY2sgKnNrLCB2b2lkICptZW0sIGludCBzaXplKTsKIGV4dGVybiB2b2lkIHNrX3NlbmRfc2lndXJnKHN0cnVjdCBzb2NrICpzayk7CiAKQEAgLTEyMDAsNyArMTIwMSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnNrX3N0cmVhbV9hbGxvY19wc2tiKHN0cnVjdCBzb2NrICpzaywKIAkJCQkJCSAgIGludCBzaXplLCBpbnQgbWVtLAotCQkJCQkJICAgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCkKKwkJCQkJCSAgIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBoZHJfbGVuOwpAQCAtMTIyMyw3ICsxMjI0LDcgQEAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqc2tfc3RyZWFtX2FsbG9jX3NrYihzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCQkgIGludCBzaXplLAotCQkJCQkJICB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwKQorCQkJCQkJICBnZnBfdCBnZnApCiB7CiAJcmV0dXJuIHNrX3N0cmVhbV9hbGxvY19wc2tiKHNrLCBzaXplLCAwLCBnZnApOwogfQpAQCAtMTI1NCw3ICsxMjU1LDcgQEAKIAlyZXR1cm4gYXRvbWljX3JlYWQoJnNrLT5za193bWVtX2FsbG9jKSA8IChzay0+c2tfc25kYnVmIC8gMik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9hbnkodm9pZCkKK3N0YXRpYyBpbmxpbmUgZ2ZwX3QgZ2ZwX2FueSh2b2lkKQogewogCXJldHVybiBpbl9zb2Z0aXJxKCkgPyBHRlBfQVRPTUlDIDogR0ZQX0tFUk5FTDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmgKaW5kZXggOTdhZjc3Yy4uYzI0MzM5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdGNwLmgKKysrIGIvaW5jbHVkZS9uZXQvdGNwLmgKQEAgLTQ2MCw4ICs0NjAsNyBAQAogZXh0ZXJuIHZvaWQgdGNwX3NlbmRfcGFydGlhbChzdHJ1Y3Qgc29jayAqKTsKIGV4dGVybiBpbnQgIHRjcF93cml0ZV93YWtldXAoc3RydWN0IHNvY2sgKik7CiBleHRlcm4gdm9pZCB0Y3Bfc2VuZF9maW4oc3RydWN0IHNvY2sgKnNrKTsKLWV4dGVybiB2b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbm9jYXN0IHByaW9yaXR5KTsKK2V4dGVybiB2b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIGdmcF90IHByaW9yaXR5KTsKIGV4dGVybiBpbnQgIHRjcF9zZW5kX3N5bmFjayhzdHJ1Y3Qgc29jayAqKTsKIGV4dGVybiB2b2lkIHRjcF9wdXNoX29uZShzdHJ1Y3Qgc29jayAqLCB1bnNpZ25lZCBpbnQgbXNzX25vdyk7CiBleHRlcm4gdm9pZCB0Y3Bfc2VuZF9hY2soc3RydWN0IHNvY2sgKnNrKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hmcm0uaCBiL2luY2x1ZGUvbmV0L3hmcm0uaAppbmRleCBhOWQwZDhjLi41YmVhZTFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC94ZnJtLmgKKysrIGIvaW5jbHVkZS9uZXQveGZybS5oCkBAIC04NzUsNyArODc1LDcgQEAKIH0gCiAjZW5kaWYKIAotc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX3BvbGljeV9hbGxvYyhpbnQgZ2ZwKTsKK3N0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfYWxsb2MoZ2ZwX3QgZ2ZwKTsKIGV4dGVybiBpbnQgeGZybV9wb2xpY3lfd2FsayhpbnQgKCpmdW5jKShzdHJ1Y3QgeGZybV9wb2xpY3kgKiwgaW50LCBpbnQsIHZvaWQqKSwgdm9pZCAqKTsKIGludCB4ZnJtX3BvbGljeV9pbnNlcnQoaW50IGRpciwgc3RydWN0IHhmcm1fcG9saWN5ICpwb2xpY3ksIGludCBleGNsKTsKIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfYnlzZWwoaW50IGRpciwgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwKQEAgLTkzMSw0ICs5MzEsOSBAQAogCX0KIH0KIAorc3RhdGljIGlubGluZSBpbnQgeGZybV9wb2xpY3lfaWQyZGlyKHUzMiBpbmRleCkKK3sKKwlyZXR1cm4gaW5kZXggJiA3OworfQorCiAjZW5kaWYJLyogX05FVF9YRlJNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGNtY2lhL3NzLmggYi9pbmNsdWRlL3BjbWNpYS9zcy5oCmluZGV4IDBmN2FhY2MuLmM4NTkyYzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGNtY2lhL3NzLmgKKysrIGIvaW5jbHVkZS9wY21jaWEvc3MuaApAQCAtMjEsNiArMjEsOSBAQAogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9idWxrbWVtLmg+CisjaWZkZWYgQ09ORklHX0NBUkRCVVMKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNlbmRpZgogCiAvKiBEZWZpbml0aW9ucyBmb3IgY2FyZCBzdGF0dXMgZmxhZ3MgZm9yIEdldFN0YXR1cyAqLwogI2RlZmluZSBTU19XUlBST1QJMHgwMDAxCkBAIC0yMzMsNyArMjM2LDExIEBACiAKIAkvKiBzbyBpcyBwb3dlciBob29rICovCiAJaW50ICgqcG93ZXJfaG9vaykoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2ssIGludCBvcGVyYXRpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjaWZkZWYgQ09ORklHX0NBUkRCVVMKKwkvKiBhbGxvd3MgdHVuaW5nIHRoZSBDQiBicmlkZ2UgYmVmb3JlIGxvYWRpbmcgZHJpdmVyIGZvciB0aGUgQ0IgY2FyZCAqLworCXZvaWQgKCp0dW5lX2JyaWRnZSkoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2ssIHN0cnVjdCBwY2lfYnVzICpidXMpOworI2VuZGlmCisKIAkvKiBzdGF0ZSB0aHJlYWQgKi8KIAlzdHJ1Y3Qgc2VtYXBob3JlCQlza3Rfc2VtOwkvKiBwcm90ZWN0cyBzb2NrZXQgaC93IHN0YXRlICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl9tYWQuaCBiL2luY2x1ZGUvcmRtYS9pYl9tYWQuaAppbmRleCA1MzE4NGEzLi40MTcyZTY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfbWFkLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX21hZC5oCkBAIC0xMDgsNiArMTA4LDEzIEBACiAjZGVmaW5lIElCX1FQMV9RS0VZCTB4ODAwMTAwMDAKICNkZWZpbmUgSUJfUVBfU0VUX1FLRVkJMHg4MDAwMDAwMAogCitlbnVtIHsKKwlJQl9NR01UX01BRF9EQVRBID0gMjMyLAorCUlCX01HTVRfUk1QUF9EQVRBID0gMjIwLAorCUlCX01HTVRfVkVORE9SX0RBVEEgPSAyMTYsCisJSUJfTUdNVF9TQV9EQVRBID0gMjAwCit9OworCiBzdHJ1Y3QgaWJfbWFkX2hkciB7CiAJdTgJYmFzZV92ZXJzaW9uOwogCXU4CW1nbXRfY2xhc3M7CkBAIC0xNDksMjAgKzE1NiwyMCBAQAogCiBzdHJ1Y3QgaWJfbWFkIHsKIAlzdHJ1Y3QgaWJfbWFkX2hkcgltYWRfaGRyOwotCXU4CQkJZGF0YVsyMzJdOworCXU4CQkJZGF0YVtJQl9NR01UX01BRF9EQVRBXTsKIH07CiAKIHN0cnVjdCBpYl9ybXBwX21hZCB7CiAJc3RydWN0IGliX21hZF9oZHIJbWFkX2hkcjsKIAlzdHJ1Y3QgaWJfcm1wcF9oZHIJcm1wcF9oZHI7Ci0JdTgJCQlkYXRhWzIyMF07CisJdTgJCQlkYXRhW0lCX01HTVRfUk1QUF9EQVRBXTsKIH07CiAKIHN0cnVjdCBpYl9zYV9tYWQgewogCXN0cnVjdCBpYl9tYWRfaGRyCW1hZF9oZHI7CiAJc3RydWN0IGliX3JtcHBfaGRyCXJtcHBfaGRyOwogCXN0cnVjdCBpYl9zYV9oZHIJc2FfaGRyOwotCXU4CQkJZGF0YVsyMDBdOworCXU4CQkJZGF0YVtJQl9NR01UX1NBX0RBVEFdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBpYl92ZW5kb3JfbWFkIHsKQEAgLTE3MCw3ICsxNzcsNyBAQAogCXN0cnVjdCBpYl9ybXBwX2hkcglybXBwX2hkcjsKIAl1OAkJCXJlc2VydmVkOwogCXU4CQkJb3VpWzNdOwotCXU4CQkJZGF0YVsyMTZdOworCXU4CQkJZGF0YVtJQl9NR01UX1ZFTkRPUl9EQVRBXTsKIH07CiAKIHN0cnVjdCBpYl9jbGFzc19wb3J0X2luZm8KQEAgLTU4OSw3ICs1OTYsNyBAQAogCQkJCQkgICAgdTMyIHJlbW90ZV9xcG4sIHUxNiBwa2V5X2luZGV4LAogCQkJCQkgICAgc3RydWN0IGliX2FoICphaCwgaW50IHJtcHBfYWN0aXZlLAogCQkJCQkgICAgaW50IGhkcl9sZW4sIGludCBkYXRhX2xlbiwKLQkJCQkJICAgIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzayk7CisJCQkJCSAgICBnZnBfdCBnZnBfbWFzayk7CiAKIC8qKgogICogaWJfZnJlZV9zZW5kX21hZCAtIFJldHVybnMgZGF0YSBidWZmZXJzIHVzZWQgdG8gc2VuZCBhIE1BRC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl9zYS5oIGIvaW5jbHVkZS9yZG1hL2liX3NhLmgKaW5kZXggYTc1NTVjOC4uZjQwNGZlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX3NhLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX3NhLmgKQEAgLTI4NSw3ICsyODUsNyBAQAogaW50IGliX3NhX3BhdGhfcmVjX2dldChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHU4IHBvcnRfbnVtLAogCQkgICAgICAgc3RydWN0IGliX3NhX3BhdGhfcmVjICpyZWMsCiAJCSAgICAgICBpYl9zYV9jb21wX21hc2sgY29tcF9tYXNrLAotCQkgICAgICAgaW50IHRpbWVvdXRfbXMsIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaywKKwkJICAgICAgIGludCB0aW1lb3V0X21zLCBnZnBfdCBnZnBfbWFzaywKIAkJICAgICAgIHZvaWQgKCpjYWxsYmFjaykoaW50IHN0YXR1cywKIAkJCQkJc3RydWN0IGliX3NhX3BhdGhfcmVjICpyZXNwLAogCQkJCQl2b2lkICpjb250ZXh0KSwKQEAgLTI5Niw3ICsyOTYsNyBAQAogCQkJICAgICB1OCBtZXRob2QsCiAJCQkgICAgIHN0cnVjdCBpYl9zYV9tY21lbWJlcl9yZWMgKnJlYywKIAkJCSAgICAgaWJfc2FfY29tcF9tYXNrIGNvbXBfbWFzaywKLQkJCSAgICAgaW50IHRpbWVvdXRfbXMsIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaywKKwkJCSAgICAgaW50IHRpbWVvdXRfbXMsIGdmcF90IGdmcF9tYXNrLAogCQkJICAgICB2b2lkICgqY2FsbGJhY2spKGludCBzdGF0dXMsCiAJCQkJCSAgICAgIHN0cnVjdCBpYl9zYV9tY21lbWJlcl9yZWMgKnJlc3AsCiAJCQkJCSAgICAgIHZvaWQgKmNvbnRleHQpLApAQCAtMzA3LDcgKzMwNyw3IEBACiAJCQkgdTggbWV0aG9kLAogCQkJIHN0cnVjdCBpYl9zYV9zZXJ2aWNlX3JlYyAqcmVjLAogCQkJIGliX3NhX2NvbXBfbWFzayBjb21wX21hc2ssCi0JCQkgaW50IHRpbWVvdXRfbXMsIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaywKKwkJCSBpbnQgdGltZW91dF9tcywgZ2ZwX3QgZ2ZwX21hc2ssCiAJCQkgdm9pZCAoKmNhbGxiYWNrKShpbnQgc3RhdHVzLAogCQkJCQkgIHN0cnVjdCBpYl9zYV9zZXJ2aWNlX3JlYyAqcmVzcCwKIAkJCQkJICB2b2lkICpjb250ZXh0KSwKQEAgLTM0Miw3ICszNDIsNyBAQAogaWJfc2FfbWNtZW1iZXJfcmVjX3NldChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHU4IHBvcnRfbnVtLAogCQkgICAgICAgc3RydWN0IGliX3NhX21jbWVtYmVyX3JlYyAqcmVjLAogCQkgICAgICAgaWJfc2FfY29tcF9tYXNrIGNvbXBfbWFzaywKLQkJICAgICAgIGludCB0aW1lb3V0X21zLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX21hc2ssCisJCSAgICAgICBpbnQgdGltZW91dF9tcywgZ2ZwX3QgZ2ZwX21hc2ssCiAJCSAgICAgICB2b2lkICgqY2FsbGJhY2spKGludCBzdGF0dXMsCiAJCQkJCXN0cnVjdCBpYl9zYV9tY21lbWJlcl9yZWMgKnJlc3AsCiAJCQkJCXZvaWQgKmNvbnRleHQpLApAQCAtMzg0LDcgKzM4NCw3IEBACiBpYl9zYV9tY21lbWJlcl9yZWNfZGVsZXRlKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgdTggcG9ydF9udW0sCiAJCQkgIHN0cnVjdCBpYl9zYV9tY21lbWJlcl9yZWMgKnJlYywKIAkJCSAgaWJfc2FfY29tcF9tYXNrIGNvbXBfbWFzaywKLQkJCSAgaW50IHRpbWVvdXRfbXMsIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaywKKwkJCSAgaW50IHRpbWVvdXRfbXMsIGdmcF90IGdmcF9tYXNrLAogCQkJICB2b2lkICgqY2FsbGJhY2spKGludCBzdGF0dXMsCiAJCQkJCSAgIHN0cnVjdCBpYl9zYV9tY21lbWJlcl9yZWMgKnJlc3AsCiAJCQkJCSAgIHZvaWQgKmNvbnRleHQpLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmggYi9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaAppbmRleCBlMTZjZjk0Li5lNmY0YzllIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaApAQCAtNjY1LDcgKzY2NSw2IEBACiAJc3RydWN0IGxpc3RfaGVhZAlxcF9saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQJc3JxX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZAlhaF9saXN0OwotCXNwaW5sb2NrX3QgICAgICAgICAgICAgIGxvY2s7CiB9OwogCiBzdHJ1Y3QgaWJfdW9iamVjdCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3J4cnBjL2NhbGwuaCBiL2luY2x1ZGUvcnhycGMvY2FsbC5oCmluZGV4IGY0OGYyN2UuLmI4NmY4MzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcnhycGMvY2FsbC5oCisrKyBiL2luY2x1ZGUvcnhycGMvY2FsbC5oCkBAIC0yMDMsNyArMjAzLDcgQEAKIAkJCQkgc2l6ZV90IHNpb2MsCiAJCQkJIHN0cnVjdCBrdmVjICpzaW92LAogCQkJCSB1aW50OF90IHJ4aGRyX2ZsYWdzLAotCQkJCSBpbnQgYWxsb2NfZmxhZ3MsCisJCQkJIGdmcF90IGFsbG9jX2ZsYWdzLAogCQkJCSBpbnQgZHVwX2RhdGEsCiAJCQkJIHNpemVfdCAqc2l6ZV9zZW50KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yeHJwYy9tZXNzYWdlLmggYi9pbmNsdWRlL3J4cnBjL21lc3NhZ2UuaAppbmRleCAzYTU5ZGY2Li5iMzE4ZjI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3J4cnBjL21lc3NhZ2UuaAorKysgYi9pbmNsdWRlL3J4cnBjL21lc3NhZ2UuaApAQCAtNjMsNyArNjMsNyBAQAogCQkJICAgICB1aW50OF90IHR5cGUsCiAJCQkgICAgIGludCBjb3VudCwKIAkJCSAgICAgc3RydWN0IGt2ZWMgKmRpb3YsCi0JCQkgICAgIGludCBhbGxvY19mbGFncywKKwkJCSAgICAgZ2ZwX3QgYWxsb2NfZmxhZ3MsCiAJCQkgICAgIHN0cnVjdCByeHJwY19tZXNzYWdlICoqX21zZyk7CiAKIGV4dGVybiBpbnQgcnhycGNfY29ubl9zZW5kbXNnKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcnhycGNfbWVzc2FnZSAqbXNnKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKaW5kZXggYzBlNGM2Ny4uN2VjZTA1NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKQEAgLTE2Myw2ICsxNjMsNyBAQAogCXVuc2lnbmVkIGludAkJaWQ7IC8qIHRhcmdldCBpZCAuLi4gcmVwbGFjZQogCQkJCSAgICAgKiBzY3NpX2RldmljZS5pZCBldmVudHVhbGx5ICovCiAJdW5zaWduZWQgbG9uZwkJY3JlYXRlOjE7IC8qIHNpZ25hbCB0aGF0IGl0IG5lZWRzIHRvIGJlIGFkZGVkICovCisJY2hhcgkJCXNjc2lfbGV2ZWw7CiAJdm9pZCAJCQkqaG9zdGRhdGE7IC8qIGF2YWlsYWJsZSB0byBsb3ctbGV2ZWwgZHJpdmVyICovCiAJdW5zaWduZWQgbG9uZwkJc3RhcmdldF9kYXRhWzBdOyAvKiBmb3IgdGhlIHRyYW5zcG9ydCAqLwogCS8qIHN0YXJnZXRfZGF0YSBtdXN0IGJlIHRoZSBsYXN0IGVsZW1lbnQhISEhICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmggYi9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmgKaW5kZXggOTE2MTQ0Yi4uNjkzMTNiYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaApAQCAtNDM5LDYgKzQzOSw4IEBACiAJU0hPU1RfQ0FOQ0VMLAogCVNIT1NUX0RFTCwKIAlTSE9TVF9SRUNPVkVSWSwKKwlTSE9TVF9DQU5DRUxfUkVDT1ZFUlksCisJU0hPU1RfREVMX1JFQ09WRVJZLAogfTsKIAogc3RydWN0IFNjc2lfSG9zdCB7CkBAIC00NjUsOCArNDY3LDYgQEAKIAogCXN0cnVjdCBsaXN0X2hlYWQJZWhfY21kX3E7CiAJc3RydWN0IHRhc2tfc3RydWN0ICAgICogZWhhbmRsZXI7ICAvKiBFcnJvciByZWNvdmVyeSB0aHJlYWQuICovCi0Jc3RydWN0IHNlbWFwaG9yZSAgICAgICogZWhfd2FpdDsgICAvKiBUaGUgZXJyb3IgcmVjb3ZlcnkgdGhyZWFkIHdhaXRzCi0JCQkJCSAgICAgIG9uIHRoaXMuICovCiAJc3RydWN0IHNlbWFwaG9yZSAgICAgICogZWhfYWN0aW9uOyAvKiBXYWl0IGZvciBzcGVjaWZpYyBhY3Rpb25zIG9uIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdC4gKi8KIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICBlaF9hY3RpdmU6MTsgLyogSW5kaWNhdGVzIHRoZSBlaCB0aHJlYWQgaXMgYXdha2UgYW5kIGFjdGl2ZSBpZgpAQCAtNjIxLDYgKzYyMSwxMyBAQAogCXJldHVybiBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgU2NzaV9Ib3N0LCBzaG9zdF9nZW5kZXYpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBzY3NpX2hvc3RfaW5fcmVjb3Zlcnkoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7CisJcmV0dXJuIHNob3N0LT5zaG9zdF9zdGF0ZSA9PSBTSE9TVF9SRUNPVkVSWSB8fAorCQlzaG9zdC0+c2hvc3Rfc3RhdGUgPT0gU0hPU1RfQ0FOQ0VMX1JFQ09WRVJZIHx8CisJCXNob3N0LT5zaG9zdF9zdGF0ZSA9PSBTSE9TVF9ERUxfUkVDT1ZFUlk7Cit9CisKIGV4dGVybiBpbnQgc2NzaV9xdWV1ZV93b3JrKHN0cnVjdCBTY3NpX0hvc3QgKiwgc3RydWN0IHdvcmtfc3RydWN0ICopOwogZXh0ZXJuIHZvaWQgc2NzaV9mbHVzaF93b3JrKHN0cnVjdCBTY3NpX0hvc3QgKik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmgKaW5kZXggMTE1ZGIwNS4uYjBkNDQ1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmgKQEAgLTEwMyw4ICsxMDMsOCBAQAogCQkJCQkgICAgIGluY2FwYWJsZSBvZiByZXBvcnRpbmcgKi8KICNkZWZpbmUgRkNfUE9SVFNQRUVEXzFHQklUCQkxCiAjZGVmaW5lIEZDX1BPUlRTUEVFRF8yR0JJVAkJMgotI2RlZmluZSBGQ19QT1JUU1BFRURfMTBHQklUCQk0Ci0jZGVmaW5lIEZDX1BPUlRTUEVFRF80R0JJVAkJOAorI2RlZmluZSBGQ19QT1JUU1BFRURfNEdCSVQJCTQKKyNkZWZpbmUgRkNfUE9SVFNQRUVEXzEwR0JJVAkJOAogI2RlZmluZSBGQ19QT1JUU1BFRURfTk9UX05FR09USUFURUQJKDEgPDwgMTUpIC8qIFNwZWVkIG5vdCBlc3RhYmxpc2hlZCAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9hYzk3X2NvZGVjLmggYi9pbmNsdWRlL3NvdW5kL2FjOTdfY29kZWMuaAppbmRleCAyODU3Y2YwLi5kMTFmMzQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2FjOTdfY29kZWMuaAorKysgYi9pbmNsdWRlL3NvdW5kL2FjOTdfY29kZWMuaApAQCAtNTI3LDYgKzUyNyw4IEBACiAJc3RydWN0IGRldmljZSBkZXY7CiB9OwogCisjZGVmaW5lIHRvX2FjOTdfdChkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IF9zbmRfYWM5NywgZGV2KQorCiAvKiBjb25kaXRpb25zICovCiBzdGF0aWMgaW5saW5lIGludCBhYzk3X2lzX2F1ZGlvKGFjOTdfdCAqIGFjOTcpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2NvcmUuaCBiL2luY2x1ZGUvc291bmQvY29yZS5oCmluZGV4IDI2MTYwYWQuLjZkOTcxYTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvY29yZS5oCisrKyBiL2luY2x1ZGUvc291bmQvY29yZS5oCkBAIC0yOTAsMTMgKzI5MCwxMyBAQAogdm9pZCBzbmRfbWVtb3J5X2RvbmUodm9pZCk7CiBpbnQgc25kX21lbW9yeV9pbmZvX2luaXQodm9pZCk7CiBpbnQgc25kX21lbW9yeV9pbmZvX2RvbmUodm9pZCk7Ci12b2lkICpzbmRfaGlkZGVuX2ttYWxsb2Moc2l6ZV90IHNpemUsIHVuc2lnbmVkIGludCBfX25vY2FzdCBmbGFncyk7Ci12b2lkICpzbmRfaGlkZGVuX2t6YWxsb2Moc2l6ZV90IHNpemUsIHVuc2lnbmVkIGludCBfX25vY2FzdCBmbGFncyk7Ci12b2lkICpzbmRfaGlkZGVuX2tjYWxsb2Moc2l6ZV90IG4sIHNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZ3MpOwordm9pZCAqc25kX2hpZGRlbl9rbWFsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncyk7Cit2b2lkICpzbmRfaGlkZGVuX2t6YWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKTsKK3ZvaWQgKnNuZF9oaWRkZW5fa2NhbGxvYyhzaXplX3Qgbiwgc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKTsKIHZvaWQgc25kX2hpZGRlbl9rZnJlZShjb25zdCB2b2lkICpvYmopOwogdm9pZCAqc25kX2hpZGRlbl92bWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiB2b2lkIHNuZF9oaWRkZW5fdmZyZWUodm9pZCAqb2JqKTsKLWNoYXIgKnNuZF9oaWRkZW5fa3N0cmR1cChjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZ3MpOworY2hhciAqc25kX2hpZGRlbl9rc3RyZHVwKGNvbnN0IGNoYXIgKnMsIGdmcF90IGZsYWdzKTsKICNkZWZpbmUga21hbGxvYyhzaXplLCBmbGFncykgc25kX2hpZGRlbl9rbWFsbG9jKHNpemUsIGZsYWdzKQogI2RlZmluZSBremFsbG9jKHNpemUsIGZsYWdzKSBzbmRfaGlkZGVuX2t6YWxsb2Moc2l6ZSwgZmxhZ3MpCiAjZGVmaW5lIGtjYWxsb2Mobiwgc2l6ZSwgZmxhZ3MpIHNuZF9oaWRkZW5fa2NhbGxvYyhuLCBzaXplLCBmbGFncykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvZHJpdmVyLmggYi9pbmNsdWRlL3NvdW5kL2RyaXZlci5oCmluZGV4IDBkMTI0NTYuLjFlYzJmYWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9kcml2ZXIuaApAQCAtNTEsNyArNTEsNyBAQAogI2lmZGVmIENPTkZJR19TTkRfREVCVUdfTUVNT1JZCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLXZvaWQgKnNuZF93cmFwcGVyX2ttYWxsb2Moc2l6ZV90LCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QpOwordm9pZCAqc25kX3dyYXBwZXJfa21hbGxvYyhzaXplX3QsIGdmcF90KTsKICN1bmRlZiBrbWFsbG9jCiB2b2lkIHNuZF93cmFwcGVyX2tmcmVlKGNvbnN0IHZvaWQgKik7CiAjdW5kZWYga2ZyZWUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvZW11MTBrMS5oIGIvaW5jbHVkZS9zb3VuZC9lbXUxMGsxLmgKaW5kZXggNjdiZjNmMS4uMTRjYjI3MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9lbXUxMGsxLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9lbXUxMGsxLmgKQEAgLTEwNTksNyArMTA1OSw3IEBACiAJdW5zaWduZWQgY2hhciBzcGs3MTsgICAgICAgIC8qIEhhcyA3LjEgc3BlYWtlcnMgKi8KIAl1bnNpZ25lZCBjaGFyIHNibGl2ZTUxOwkgICAgLyogU0JMaXZlISA1LjEgLSBleHRvdXQgMHgxMSAtPiBjZW50ZXIsIDB4MTIgLT4gbGZlICovCiAJdW5zaWduZWQgY2hhciBzcGRpZl9idWc7ICAgIC8qIEhhcyBTcGRpZiBwaGFzaW5nIGJ1ZyAqLwotCXVuc2lnbmVkIGNoYXIgYWM5N19jaGlwOyAgICAvKiBIYXMgYW4gQUM5NyBjaGlwICovCisJdW5zaWduZWQgY2hhciBhYzk3X2NoaXA7ICAgIC8qIEhhcyBhbiBBQzk3IGNoaXA6IDEgPSBtYW5kYXRvcnksIDIgPSBvcHRpb25hbCAqLwogCXVuc2lnbmVkIGNoYXIgZWNhcmQ7ICAgICAgICAvKiBBUFMgRUVQUk9NICovCiAJY29uc3QgY2hhciAqZHJpdmVyOwogCWNvbnN0IGNoYXIgKm5hbWU7CmRpZmYgLS1naXQgYS9pcGMvbXF1ZXVlLmMgYi9pcGMvbXF1ZXVlLmMKaW5kZXggM2E5MjYwMS4uYTBmMThjOSAxMDA2NDQKLS0tIGEvaXBjL21xdWV1ZS5jCisrKyBiL2lwYy9tcXVldWUuYwpAQCAtNjExLDYgKzYxMSw3IEBACiAJCWRlbnRyeS0+ZF9mc2RhdGEgPSAmYXR0cjsKIAl9CiAKKwltb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CiAJcmV0ID0gdmZzX2NyZWF0ZShkaXItPmRfaW5vZGUsIGRlbnRyeSwgbW9kZSwgTlVMTCk7CiAJZGVudHJ5LT5kX2ZzZGF0YSA9IE5VTEw7CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdC5jIGIva2VybmVsL2F1ZGl0LmMKaW5kZXggODMwOTZiNi4uYWVmYTczYSAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0LmMKKysrIGIva2VybmVsL2F1ZGl0LmMKQEAgLTU2MCw3ICs1NjAsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGF1ZGl0X2J1ZmZlciAqIGF1ZGl0X2J1ZmZlcl9hbGxvYyhzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY3R4LAotCQkJCQkJdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrLCBpbnQgdHlwZSkKKwkJCQkJCWdmcF90IGdmcF9tYXNrLCBpbnQgdHlwZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBhdWRpdF9idWZmZXIgKmFiID0gTlVMTDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9jcHVzZXQuYyBiL2tlcm5lbC9jcHVzZXQuYwppbmRleCA3OTg2NmJjLi4yODE3NmQwIDEwMDY0NAotLS0gYS9rZXJuZWwvY3B1c2V0LmMKKysrIGIva2VybmVsL2NwdXNldC5jCkBAIC05NjgsOCArOTY4LDYgQEAKIAljaGFyICpwYWdlOwogCXNzaXplX3QgcmV0dmFsID0gMDsKIAljaGFyICpzOwotCWNoYXIgKnN0YXJ0OwotCXNpemVfdCBuOwogCiAJaWYgKCEocGFnZSA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpKSkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC05OTksMTQgKzk5Nyw3IEBACiAJKnMrKyA9ICdcbic7CiAJKnMgPSAnXDAnOwogCi0JLyogRG8gbm90aGluZyBpZiAqcHBvcyBpcyBhdCB0aGUgZW9mIG9yIGJleW9uZCB0aGUgZW9mLiAqLwotCWlmIChzIC0gcGFnZSA8PSAqcHBvcykKLQkJcmV0dXJuIDA7Ci0KLQlzdGFydCA9IHBhZ2UgKyAqcHBvczsKLQluID0gcyAtIHN0YXJ0OwotCXJldHZhbCA9IG4gLSBjb3B5X3RvX3VzZXIoYnVmLCBzdGFydCwgbWluKG4sIG5ieXRlcykpOwotCSpwcG9zICs9IHJldHZhbDsKKwlyZXR2YWwgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIG5ieXRlcywgcHBvcywgcGFnZSwgcyAtIHBhZ2UpOwogb3V0OgogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwYWdlKTsKIAlyZXR1cm4gcmV0dmFsOwpAQCAtMTY3OSw3ICsxNjcwLDcgQEAKICAqCUdGUF9VU0VSICAgICAtIG9ubHkgbm9kZXMgaW4gY3VycmVudCB0YXNrcyBtZW1zIGFsbG93ZWQgb2suCiAgKiovCiAKLWludCBjcHVzZXRfem9uZV9hbGxvd2VkKHN0cnVjdCB6b25lICp6LCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX21hc2spCitpbnQgY3B1c2V0X3pvbmVfYWxsb3dlZChzdHJ1Y3Qgem9uZSAqeiwgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJaW50IG5vZGU7CQkJLyogbm9kZSB0aGF0IHpvbmUgeiBpcyBvbiAqLwogCWNvbnN0IHN0cnVjdCBjcHVzZXQgKmNzOwkvKiBjdXJyZW50IGNwdXNldCBhbmNlc3RvcnMgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IDZkMjA4OWEuLjNiMjViMTggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKKysrIGIva2VybmVsL2V4aXQuYwpAQCAtMzcxLDYgKzM3MSwxMiBAQAogCXN0cnVjdCBmZHRhYmxlICpmZHQ7CiAKIAlqID0gMDsKKworCS8qCisJICogSXQgaXMgc2FmZSB0byBkZXJlZmVyZW5jZSB0aGUgZmQgdGFibGUgd2l0aG91dCBSQ1Ugb3IKKwkgKiAtPmZpbGVfbG9jayBiZWNhdXNlIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZQorCSAqIGZpbGVzIHN0cnVjdHVyZS4KKwkgKi8KIAlmZHQgPSBmaWxlc19mZHRhYmxlKGZpbGVzKTsKIAlmb3IgKDs7KSB7CiAJCXVuc2lnbmVkIGxvbmcgc2V0OwpAQCAtODM3LDYgKzg0Myw3IEBACiAJZ3JvdXBfZGVhZCA9IGF0b21pY19kZWNfYW5kX3Rlc3QoJnRzay0+c2lnbmFsLT5saXZlKTsKIAlpZiAoZ3JvdXBfZGVhZCkgewogIAkJZGVsX3RpbWVyX3N5bmMoJnRzay0+c2lnbmFsLT5yZWFsX3RpbWVyKTsKKwkJZXhpdF9pdGltZXJzKHRzay0+c2lnbmFsKTsKIAkJYWNjdF9wcm9jZXNzKGNvZGUpOwogCX0KIAlleGl0X21tKHRzayk7CkBAIC0xMTk3LDcgKzEyMDQsNyBAQAogCiAJCWV4aXRfY29kZSA9IHAtPmV4aXRfY29kZTsKIAkJaWYgKHVubGlrZWx5KCFleGl0X2NvZGUpIHx8Ci0JCSAgICB1bmxpa2VseShwLT5zdGF0ZSA+IFRBU0tfU1RPUFBFRCkpCisJCSAgICB1bmxpa2VseShwLT5zdGF0ZSAmIFRBU0tfVFJBQ0VEKSkKIAkJCWdvdG8gYmFpbF9yZWY7CiAJCXJldHVybiB3YWl0X25vcmVhcF9jb3B5b3V0KHAsIHBpZCwgdWlkLAogCQkJCQkgICB3aHksIChleGl0X2NvZGUgPDwgOCkgfCAweDdmLApkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggODE0OWYzNi4uMjgwYmQ0NCAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYworKysgYi9rZXJuZWwvZm9yay5jCkBAIC04NDgsNyArODQ4LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIG5ld19mbGFncyA9IHAtPmZsYWdzOwogCi0JbmV3X2ZsYWdzICY9IH5QRl9TVVBFUlBSSVY7CisJbmV3X2ZsYWdzICY9IH4oUEZfU1VQRVJQUklWIHwgUEZfTk9GUkVFWkUpOwogCW5ld19mbGFncyB8PSBQRl9GT1JLTk9FWEVDOwogCWlmICghKGNsb25lX2ZsYWdzICYgQ0xPTkVfUFRSQUNFKSkKIAkJcC0+cHRyYWNlID0gMDsKQEAgLTEwNjIsNyArMTA2Miw4IEBACiAJICogcGFyZW50J3MgQ1BVKS4gVGhpcyBhdm9pZHMgYWxvdCBvZiBuYXN0eSByYWNlcy4KIAkgKi8KIAlwLT5jcHVzX2FsbG93ZWQgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7Ci0JaWYgKHVubGlrZWx5KCFjcHVfaXNzZXQodGFza19jcHUocCksIHAtPmNwdXNfYWxsb3dlZCkpKQorCWlmICh1bmxpa2VseSghY3B1X2lzc2V0KHRhc2tfY3B1KHApLCBwLT5jcHVzX2FsbG93ZWQpIHx8CisJCQkhY3B1X29ubGluZSh0YXNrX2NwdShwKSkpKQogCQlzZXRfdGFza19jcHUocCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAogCS8qCmRpZmYgLS1naXQgYS9rZXJuZWwva2ZpZm8uYyBiL2tlcm5lbC9rZmlmby5jCmluZGV4IDE3OWJhYWYuLjY0YWIwNDUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rZmlmby5jCisrKyBiL2tlcm5lbC9rZmlmby5jCkBAIC0zNiw3ICszNiw3IEBACiAgKiBzdHJ1Y3Qga2ZpZm8gd2l0aCBrZnJlZSgpLgogICovCiBzdHJ1Y3Qga2ZpZm8gKmtmaWZvX2luaXQodW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgc2l6ZSwKLQkJCSB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX21hc2ssIHNwaW5sb2NrX3QgKmxvY2spCisJCQkgZ2ZwX3QgZ2ZwX21hc2ssIHNwaW5sb2NrX3QgKmxvY2spCiB7CiAJc3RydWN0IGtmaWZvICpmaWZvOwogCkBAIC02NCw3ICs2NCw3IEBACiAgKgogICogVGhlIHNpemUgd2lsbCBiZSByb3VuZGVkLXVwIHRvIGEgcG93ZXIgb2YgMi4KICAqLwotc3RydWN0IGtmaWZvICprZmlmb19hbGxvYyh1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrLCBzcGlubG9ja190ICpsb2NrKQorc3RydWN0IGtmaWZvICprZmlmb19hbGxvYyh1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssIHNwaW5sb2NrX3QgKmxvY2spCiB7CiAJdW5zaWduZWQgY2hhciAqYnVmZmVyOwogCXN0cnVjdCBrZmlmbyAqcmV0OwpkaWZmIC0tZ2l0IGEva2VybmVsL3BhcmFtcy5jIGIva2VybmVsL3BhcmFtcy5jCmluZGV4IGZiZjE3MzIuLjFhODYxNGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYXJhbXMuYworKysgYi9rZXJuZWwvcGFyYW1zLmMKQEAgLTgwLDggKzgwLDYgQEAKIAlpbnQgaW5fcXVvdGUgPSAwLCBxdW90ZWQgPSAwOwogCWNoYXIgKm5leHQ7CiAKLQkvKiBDaGV3IGFueSBleHRyYSBzcGFjZXMgKi8KLQl3aGlsZSAoKmFyZ3MgPT0gJyAnKSBhcmdzKys7CiAJaWYgKCphcmdzID09ICciJykgewogCQlhcmdzKys7CiAJCWluX3F1b3RlID0gMTsKQEAgLTEyMSw2ICsxMTksMTAgQEAKIAkJbmV4dCA9IGFyZ3MgKyBpICsgMTsKIAl9IGVsc2UKIAkJbmV4dCA9IGFyZ3MgKyBpOworCisJLyogQ2hldyB1cCB0cmFpbGluZyBzcGFjZXMuICovCisJd2hpbGUgKCpuZXh0ID09ICcgJykKKwkJbmV4dCsrOwogCXJldHVybiBuZXh0OwogfQogCkBAIC0xMzUsNiArMTM3LDEwIEBACiAKIAlERUJVR1AoIlBhcnNpbmcgQVJHUzogJXNcbiIsIGFyZ3MpOwogCisJLyogQ2hldyBsZWFkaW5nIHNwYWNlcyAqLworCXdoaWxlICgqYXJncyA9PSAnICcpCisJCWFyZ3MrKzsKKwogCXdoaWxlICgqYXJncykgewogCQlpbnQgcmV0OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jIGIva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYwppbmRleCBhZDg1ZDNmLi5iZjM3NGZjIDEwMDY0NAotLS0gYS9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCisrKyBiL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKQEAgLTkxLDcgKzkxLDcgQEAKICAqIFVwZGF0ZSBleHBpcnkgdGltZSBmcm9tIGluY3JlbWVudCwgYW5kIGluY3JlYXNlIG92ZXJydW4gY291bnQsCiAgKiBnaXZlbiB0aGUgY3VycmVudCBjbG9jayBzYW1wbGUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBidW1wX2NwdV90aW1lcihzdHJ1Y3Qga19pdGltZXIgKnRpbWVyLAorc3RhdGljIHZvaWQgYnVtcF9jcHVfdGltZXIoc3RydWN0IGtfaXRpbWVyICp0aW1lciwKIAkJCQkgIHVuaW9uIGNwdV90aW1lX2NvdW50IG5vdykKIHsKIAlpbnQgaTsKQEAgLTExMCw3ICsxMTAsNyBAQAogCQlmb3IgKGkgPSAwOyBpbmNyIDwgZGVsdGEgLSBpbmNyOyBpKyspCiAJCQlpbmNyID0gaW5jciA8PCAxOwogCQlmb3IgKDsgaSA+PSAwOyBpbmNyID4+PSAxLCBpLS0pIHsKLQkJCWlmIChkZWx0YSA8PSBpbmNyKQorCQkJaWYgKGRlbHRhIDwgaW5jcikKIAkJCQljb250aW51ZTsKIAkJCXRpbWVyLT5pdC5jcHUuZXhwaXJlcy5zY2hlZCArPSBpbmNyOwogCQkJdGltZXItPml0X292ZXJydW4gKz0gMSA8PCBpOwpAQCAtMTI4LDcgKzEyOCw3IEBACiAJCWZvciAoaSA9IDA7IGNwdXRpbWVfbHQoaW5jciwgY3B1dGltZV9zdWIoZGVsdGEsIGluY3IpKTsgaSsrKQogCQkJICAgICBpbmNyID0gY3B1dGltZV9hZGQoaW5jciwgaW5jcik7CiAJCWZvciAoOyBpID49IDA7IGluY3IgPSBjcHV0aW1lX2hhbHZlKGluY3IpLCBpLS0pIHsKLQkJCWlmIChjcHV0aW1lX2xlKGRlbHRhLCBpbmNyKSkKKwkJCWlmIChjcHV0aW1lX2x0KGRlbHRhLCBpbmNyKSkKIAkJCQljb250aW51ZTsKIAkJCXRpbWVyLT5pdC5jcHUuZXhwaXJlcy5jcHUgPQogCQkJCWNwdXRpbWVfYWRkKHRpbWVyLT5pdC5jcHUuZXhwaXJlcy5jcHUsIGluY3IpOwpAQCAtMzgwLDE0ICszODAsOSBAQAogaW50IHBvc2l4X2NwdV90aW1lcl9kZWwoc3RydWN0IGtfaXRpbWVyICp0aW1lcikKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSB0aW1lci0+aXQuY3B1LnRhc2s7CisJaW50IHJldCA9IDA7CiAKLQlpZiAodGltZXItPml0LmNwdS5maXJpbmcpCi0JCXJldHVybiBUSU1FUl9SRVRSWTsKLQotCWlmICh1bmxpa2VseShwID09IE5VTEwpKQotCQlyZXR1cm4gMDsKLQotCWlmICghbGlzdF9lbXB0eSgmdGltZXItPml0LmNwdS5lbnRyeSkpIHsKKwlpZiAobGlrZWx5KHAgIT0gTlVMTCkpIHsKIAkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAkJaWYgKHVubGlrZWx5KHAtPnNpZ25hbCA9PSBOVUxMKSkgewogCQkJLyoKQEAgLTM5NiwxOCArMzkxLDIwIEBACiAJCQkgKi8KIAkJCUJVR19PTighbGlzdF9lbXB0eSgmdGltZXItPml0LmNwdS5lbnRyeSkpOwogCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIFRha2UgdXMgb2ZmIHRoZSB0YXNrJ3MgdGltZXIgbGlzdC4KLQkJCSAqLwogCQkJc3Bpbl9sb2NrKCZwLT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkJCWxpc3RfZGVsKCZ0aW1lci0+aXQuY3B1LmVudHJ5KTsKKwkJCWlmICh0aW1lci0+aXQuY3B1LmZpcmluZykKKwkJCQlyZXQgPSBUSU1FUl9SRVRSWTsKKwkJCWVsc2UKKwkJCQlsaXN0X2RlbCgmdGltZXItPml0LmNwdS5lbnRyeSk7CiAJCQlzcGluX3VubG9jaygmcC0+c2lnaGFuZC0+c2lnbG9jayk7CiAJCX0KIAkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwotCX0KLQlwdXRfdGFza19zdHJ1Y3QocCk7CiAKLQlyZXR1cm4gMDsKKwkJaWYgKCFyZXQpCisJCQlwdXRfdGFza19zdHJ1Y3QocCk7CisJfQorCisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTQyNCw3ICs0MjEsNiBAQAogCWNwdXRpbWVfdCBwdGltZSA9IGNwdXRpbWVfYWRkKHV0aW1lLCBzdGltZSk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGltZXIsIG5leHQsIGhlYWQsIGVudHJ5KSB7Ci0JCXRpbWVyLT50YXNrID0gTlVMTDsKIAkJbGlzdF9kZWxfaW5pdCgmdGltZXItPmVudHJ5KTsKIAkJaWYgKGNwdXRpbWVfbHQodGltZXItPmV4cGlyZXMuY3B1LCBwdGltZSkpIHsKIAkJCXRpbWVyLT5leHBpcmVzLmNwdSA9IGNwdXRpbWVfemVybzsKQEAgLTQzNiw3ICs0MzIsNiBAQAogCiAJKytoZWFkOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0aW1lciwgbmV4dCwgaGVhZCwgZW50cnkpIHsKLQkJdGltZXItPnRhc2sgPSBOVUxMOwogCQlsaXN0X2RlbF9pbml0KCZ0aW1lci0+ZW50cnkpOwogCQlpZiAoY3B1dGltZV9sdCh0aW1lci0+ZXhwaXJlcy5jcHUsIHV0aW1lKSkgewogCQkJdGltZXItPmV4cGlyZXMuY3B1ID0gY3B1dGltZV96ZXJvOwpAQCAtNDQ4LDcgKzQ0Myw2IEBACiAKIAkrK2hlYWQ7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRpbWVyLCBuZXh0LCBoZWFkLCBlbnRyeSkgewotCQl0aW1lci0+dGFzayA9IE5VTEw7CiAJCWxpc3RfZGVsX2luaXQoJnRpbWVyLT5lbnRyeSk7CiAJCWlmICh0aW1lci0+ZXhwaXJlcy5zY2hlZCA8IHNjaGVkX3RpbWUpIHsKIAkJCXRpbWVyLT5leHBpcmVzLnNjaGVkID0gMDsKQEAgLTQ5Miw2ICs0ODYsOSBAQAogIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSBwOwogCXVuc2lnbmVkIGludCBudGhyZWFkcyA9IGF0b21pY19yZWFkKCZwLT5zaWduYWwtPmxpdmUpOwogCisJaWYgKCFudGhyZWFkcykKKwkJcmV0dXJuOworCiAJc3dpdGNoIChjbG9ja19pZHgpIHsKIAlkZWZhdWx0OgogCQlCVUcoKTsKQEAgLTUwMCw3ICs0OTcsNyBAQAogCQlsZWZ0ID0gY3B1dGltZV9kaXYoY3B1dGltZV9zdWIoZXhwaXJlcy5jcHUsIHZhbC5jcHUpLAogCQkJCSAgIG50aHJlYWRzKTsKIAkJZG8gewotCQkJaWYgKCF1bmxpa2VseSh0LT5leGl0X3N0YXRlKSkgeworCQkJaWYgKCF1bmxpa2VseSh0LT5mbGFncyAmIFBGX0VYSVRJTkcpKSB7CiAJCQkJdGlja3MgPSBjcHV0aW1lX2FkZChwcm9mX3RpY2tzKHQpLCBsZWZ0KTsKIAkJCQlpZiAoY3B1dGltZV9lcSh0LT5pdF9wcm9mX2V4cGlyZXMsCiAJCQkJCSAgICAgICBjcHV0aW1lX3plcm8pIHx8CkBAIC01MTUsNyArNTEyLDcgQEAKIAkJbGVmdCA9IGNwdXRpbWVfZGl2KGNwdXRpbWVfc3ViKGV4cGlyZXMuY3B1LCB2YWwuY3B1KSwKIAkJCQkgICBudGhyZWFkcyk7CiAJCWRvIHsKLQkJCWlmICghdW5saWtlbHkodC0+ZXhpdF9zdGF0ZSkpIHsKKwkJCWlmICghdW5saWtlbHkodC0+ZmxhZ3MgJiBQRl9FWElUSU5HKSkgewogCQkJCXRpY2tzID0gY3B1dGltZV9hZGQodmlydF90aWNrcyh0KSwgbGVmdCk7CiAJCQkJaWYgKGNwdXRpbWVfZXEodC0+aXRfdmlydF9leHBpcmVzLAogCQkJCQkgICAgICAgY3B1dGltZV96ZXJvKSB8fApAQCAtNTMwLDcgKzUyNyw3IEBACiAJCW5zbGVmdCA9IGV4cGlyZXMuc2NoZWQgLSB2YWwuc2NoZWQ7CiAJCWRvX2Rpdihuc2xlZnQsIG50aHJlYWRzKTsKIAkJZG8gewotCQkJaWYgKCF1bmxpa2VseSh0LT5leGl0X3N0YXRlKSkgeworCQkJaWYgKCF1bmxpa2VseSh0LT5mbGFncyAmIFBGX0VYSVRJTkcpKSB7CiAJCQkJbnMgPSB0LT5zY2hlZF90aW1lICsgbnNsZWZ0OwogCQkJCWlmICh0LT5pdF9zY2hlZF9leHBpcmVzID09IDAgfHwKIAkJCQkgICAgdC0+aXRfc2NoZWRfZXhwaXJlcyA+IG5zKSB7CkBAIC01NjksNiArNTY2LDkgQEAKIAlzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QgKm5leHQ7CiAJdW5zaWduZWQgbG9uZyBpOwogCisJaWYgKENQVUNMT0NLX1BFUlRIUkVBRCh0aW1lci0+aXRfY2xvY2spCSYmIChwLT5mbGFncyAmIFBGX0VYSVRJTkcpKQorCQlyZXR1cm47CisKIAloZWFkID0gKENQVUNMT0NLX1BFUlRIUkVBRCh0aW1lci0+aXRfY2xvY2spID8KIAkJcC0+Y3B1X3RpbWVycyA6IHAtPnNpZ25hbC0+Y3B1X3RpbWVycyk7CiAJaGVhZCArPSBDUFVDTE9DS19XSElDSCh0aW1lci0+aXRfY2xvY2spOwpAQCAtNTc5LDE3ICs1NzksMTUgQEAKIAlsaXN0cG9zID0gaGVhZDsKIAlpZiAoQ1BVQ0xPQ0tfV0hJQ0godGltZXItPml0X2Nsb2NrKSA9PSBDUFVDTE9DS19TQ0hFRCkgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5leHQsIGhlYWQsIGVudHJ5KSB7Ci0JCQlpZiAobmV4dC0+ZXhwaXJlcy5zY2hlZCA+IG50LT5leHBpcmVzLnNjaGVkKSB7Ci0JCQkJbGlzdHBvcyA9ICZuZXh0LT5lbnRyeTsKKwkJCWlmIChuZXh0LT5leHBpcmVzLnNjaGVkID4gbnQtPmV4cGlyZXMuc2NoZWQpCiAJCQkJYnJlYWs7Ci0JCQl9CisJCQlsaXN0cG9zID0gJm5leHQtPmVudHJ5OwogCQl9CiAJfSBlbHNlIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShuZXh0LCBoZWFkLCBlbnRyeSkgewotCQkJaWYgKGNwdXRpbWVfZ3QobmV4dC0+ZXhwaXJlcy5jcHUsIG50LT5leHBpcmVzLmNwdSkpIHsKLQkJCQlsaXN0cG9zID0gJm5leHQtPmVudHJ5OworCQkJaWYgKGNwdXRpbWVfZ3QobmV4dC0+ZXhwaXJlcy5jcHUsIG50LT5leHBpcmVzLmNwdSkpCiAJCQkJYnJlYWs7Ci0JCQl9CisJCQlsaXN0cG9zID0gJm5leHQtPmVudHJ5OwogCQl9CiAJfQogCWxpc3RfYWRkKCZudC0+ZW50cnksIGxpc3Rwb3MpOwpAQCAtNzMzLDkgKzczMSwxNSBAQAogCSAqIERpc2FybSBhbnkgb2xkIHRpbWVyIGFmdGVyIGV4dHJhY3RpbmcgaXRzIGV4cGlyeSB0aW1lLgogCSAqLwogCUJVR19PTighaXJxc19kaXNhYmxlZCgpKTsKKworCXJldCA9IDA7CiAJc3Bpbl9sb2NrKCZwLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAlvbGRfZXhwaXJlcyA9IHRpbWVyLT5pdC5jcHUuZXhwaXJlczsKLQlsaXN0X2RlbF9pbml0KCZ0aW1lci0+aXQuY3B1LmVudHJ5KTsKKwlpZiAodW5saWtlbHkodGltZXItPml0LmNwdS5maXJpbmcpKSB7CisJCXRpbWVyLT5pdC5jcHUuZmlyaW5nID0gLTE7CisJCXJldCA9IFRJTUVSX1JFVFJZOworCX0gZWxzZQorCQlsaXN0X2RlbF9pbml0KCZ0aW1lci0+aXQuY3B1LmVudHJ5KTsKIAlzcGluX3VubG9jaygmcC0+c2lnaGFuZC0+c2lnbG9jayk7CiAKIAkvKgpAQCAtNzgzLDcgKzc4Nyw3IEBACiAJCX0KIAl9CiAKLQlpZiAodW5saWtlbHkodGltZXItPml0LmNwdS5maXJpbmcpKSB7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKIAkJLyoKIAkJICogV2UgYXJlIGNvbGxpZGluZyB3aXRoIHRoZSB0aW1lciBhY3R1YWxseSBmaXJpbmcuCiAJCSAqIFB1bnQgYWZ0ZXIgZmlsbGluZyBpbiB0aGUgdGltZXIncyBvbGQgdmFsdWUsIGFuZApAQCAtNzkxLDggKzc5NSw2IEBACiAJCSAqIGl0IGFzIGFuIG92ZXJydW4gKHRoYW5rcyB0byBidW1wX2NwdV90aW1lciBhYm92ZSkuCiAJCSAqLwogCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0JCXRpbWVyLT5pdC5jcHUuZmlyaW5nID0gLTE7Ci0JCXJldCA9IFRJTUVSX1JFVFJZOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTk1OCwxNCArOTYwLDE2IEBACiBzdGF0aWMgdm9pZCBjaGVja190aHJlYWRfdGltZXJzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAogCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmZpcmluZykKIHsKKwlpbnQgbWF4ZmlyZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICp0aW1lcnMgPSB0c2stPmNwdV90aW1lcnM7CiAKKwltYXhmaXJlID0gMjA7CiAJdHNrLT5pdF9wcm9mX2V4cGlyZXMgPSBjcHV0aW1lX3plcm87CiAJd2hpbGUgKCFsaXN0X2VtcHR5KHRpbWVycykpIHsKIAkJc3RydWN0IGNwdV90aW1lcl9saXN0ICp0ID0gbGlzdF9lbnRyeSh0aW1lcnMtPm5leHQsCiAJCQkJCQkgICAgICBzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QsCiAJCQkJCQkgICAgICBlbnRyeSk7Ci0JCWlmIChjcHV0aW1lX2x0KHByb2ZfdGlja3ModHNrKSwgdC0+ZXhwaXJlcy5jcHUpKSB7CisJCWlmICghLS1tYXhmaXJlIHx8IGNwdXRpbWVfbHQocHJvZl90aWNrcyh0c2spLCB0LT5leHBpcmVzLmNwdSkpIHsKIAkJCXRzay0+aXRfcHJvZl9leHBpcmVzID0gdC0+ZXhwaXJlcy5jcHU7CiAJCQlicmVhazsKIAkJfQpAQCAtOTc0LDEyICs5NzgsMTMgQEAKIAl9CiAKIAkrK3RpbWVyczsKKwltYXhmaXJlID0gMjA7CiAJdHNrLT5pdF92aXJ0X2V4cGlyZXMgPSBjcHV0aW1lX3plcm87CiAJd2hpbGUgKCFsaXN0X2VtcHR5KHRpbWVycykpIHsKIAkJc3RydWN0IGNwdV90aW1lcl9saXN0ICp0ID0gbGlzdF9lbnRyeSh0aW1lcnMtPm5leHQsCiAJCQkJCQkgICAgICBzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QsCiAJCQkJCQkgICAgICBlbnRyeSk7Ci0JCWlmIChjcHV0aW1lX2x0KHZpcnRfdGlja3ModHNrKSwgdC0+ZXhwaXJlcy5jcHUpKSB7CisJCWlmICghLS1tYXhmaXJlIHx8IGNwdXRpbWVfbHQodmlydF90aWNrcyh0c2spLCB0LT5leHBpcmVzLmNwdSkpIHsKIAkJCXRzay0+aXRfdmlydF9leHBpcmVzID0gdC0+ZXhwaXJlcy5jcHU7CiAJCQlicmVhazsKIAkJfQpAQCAtOTg4LDEyICs5OTMsMTMgQEAKIAl9CiAKIAkrK3RpbWVyczsKKwltYXhmaXJlID0gMjA7CiAJdHNrLT5pdF9zY2hlZF9leHBpcmVzID0gMDsKIAl3aGlsZSAoIWxpc3RfZW1wdHkodGltZXJzKSkgewogCQlzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QgKnQgPSBsaXN0X2VudHJ5KHRpbWVycy0+bmV4dCwKIAkJCQkJCSAgICAgIHN0cnVjdCBjcHVfdGltZXJfbGlzdCwKIAkJCQkJCSAgICAgIGVudHJ5KTsKLQkJaWYgKHRzay0+c2NoZWRfdGltZSA8IHQtPmV4cGlyZXMuc2NoZWQpIHsKKwkJaWYgKCEtLW1heGZpcmUgfHwgdHNrLT5zY2hlZF90aW1lIDwgdC0+ZXhwaXJlcy5zY2hlZCkgewogCQkJdHNrLT5pdF9zY2hlZF9leHBpcmVzID0gdC0+ZXhwaXJlcy5zY2hlZDsKIAkJCWJyZWFrOwogCQl9CkBAIC0xMDEwLDYgKzEwMTYsNyBAQAogc3RhdGljIHZvaWQgY2hlY2tfcHJvY2Vzc190aW1lcnMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCiAJCQkJIHN0cnVjdCBsaXN0X2hlYWQgKmZpcmluZykKIHsKKwlpbnQgbWF4ZmlyZTsKIAlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqY29uc3Qgc2lnID0gdHNrLT5zaWduYWw7CiAJY3B1dGltZV90IHV0aW1lLCBzdGltZSwgcHRpbWUsIHZpcnRfZXhwaXJlcywgcHJvZl9leHBpcmVzOwogCXVuc2lnbmVkIGxvbmcgbG9uZyBzY2hlZF90aW1lLCBzY2hlZF9leHBpcmVzOwpAQCAtMTA0MiwxMiArMTA0OSwxMyBAQAogCX0gd2hpbGUgKHQgIT0gdHNrKTsKIAlwdGltZSA9IGNwdXRpbWVfYWRkKHV0aW1lLCBzdGltZSk7CiAKKwltYXhmaXJlID0gMjA7CiAJcHJvZl9leHBpcmVzID0gY3B1dGltZV96ZXJvOwogCXdoaWxlICghbGlzdF9lbXB0eSh0aW1lcnMpKSB7CiAJCXN0cnVjdCBjcHVfdGltZXJfbGlzdCAqdCA9IGxpc3RfZW50cnkodGltZXJzLT5uZXh0LAogCQkJCQkJICAgICAgc3RydWN0IGNwdV90aW1lcl9saXN0LAogCQkJCQkJICAgICAgZW50cnkpOwotCQlpZiAoY3B1dGltZV9sdChwdGltZSwgdC0+ZXhwaXJlcy5jcHUpKSB7CisJCWlmICghLS1tYXhmaXJlIHx8IGNwdXRpbWVfbHQocHRpbWUsIHQtPmV4cGlyZXMuY3B1KSkgewogCQkJcHJvZl9leHBpcmVzID0gdC0+ZXhwaXJlcy5jcHU7CiAJCQlicmVhazsKIAkJfQpAQCAtMTA1NiwxMiArMTA2NCwxMyBAQAogCX0KIAogCSsrdGltZXJzOworCW1heGZpcmUgPSAyMDsKIAl2aXJ0X2V4cGlyZXMgPSBjcHV0aW1lX3plcm87CiAJd2hpbGUgKCFsaXN0X2VtcHR5KHRpbWVycykpIHsKIAkJc3RydWN0IGNwdV90aW1lcl9saXN0ICp0ID0gbGlzdF9lbnRyeSh0aW1lcnMtPm5leHQsCiAJCQkJCQkgICAgICBzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QsCiAJCQkJCQkgICAgICBlbnRyeSk7Ci0JCWlmIChjcHV0aW1lX2x0KHV0aW1lLCB0LT5leHBpcmVzLmNwdSkpIHsKKwkJaWYgKCEtLW1heGZpcmUgfHwgY3B1dGltZV9sdCh1dGltZSwgdC0+ZXhwaXJlcy5jcHUpKSB7CiAJCQl2aXJ0X2V4cGlyZXMgPSB0LT5leHBpcmVzLmNwdTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xMDcwLDEyICsxMDc5LDEzIEBACiAJfQogCiAJKyt0aW1lcnM7CisJbWF4ZmlyZSA9IDIwOwogCXNjaGVkX2V4cGlyZXMgPSAwOwogCXdoaWxlICghbGlzdF9lbXB0eSh0aW1lcnMpKSB7CiAJCXN0cnVjdCBjcHVfdGltZXJfbGlzdCAqdCA9IGxpc3RfZW50cnkodGltZXJzLT5uZXh0LAogCQkJCQkJICAgICAgc3RydWN0IGNwdV90aW1lcl9saXN0LAogCQkJCQkJICAgICAgZW50cnkpOwotCQlpZiAoc2NoZWRfdGltZSA8IHQtPmV4cGlyZXMuc2NoZWQpIHsKKwkJaWYgKCEtLW1heGZpcmUgfHwgc2NoZWRfdGltZSA8IHQtPmV4cGlyZXMuc2NoZWQpIHsKIAkJCXNjaGVkX2V4cGlyZXMgPSB0LT5leHBpcmVzLnNjaGVkOwogCQkJYnJlYWs7CiAJCX0KQEAgLTExNTgsNiArMTE2OCw5IEBACiAJCXVuc2lnbmVkIGxvbmcgbG9uZyBzY2hlZF9sZWZ0LCBzY2hlZDsKIAkJY29uc3QgdW5zaWduZWQgaW50IG50aHJlYWRzID0gYXRvbWljX3JlYWQoJnNpZy0+bGl2ZSk7CiAKKwkJaWYgKCFudGhyZWFkcykKKwkJCXJldHVybjsKKwogCQlwcm9mX2xlZnQgPSBjcHV0aW1lX3N1Yihwcm9mX2V4cGlyZXMsIHV0aW1lKTsKIAkJcHJvZl9sZWZ0ID0gY3B1dGltZV9zdWIocHJvZl9sZWZ0LCBzdGltZSk7CiAJCXByb2ZfbGVmdCA9IGNwdXRpbWVfZGl2KHByb2ZfbGVmdCwgbnRocmVhZHMpOwpAQCAtMTE5NCw3ICsxMjA3LDcgQEAKIAogCQkJZG8gewogCQkJCXQgPSBuZXh0X3RocmVhZCh0KTsKLQkJCX0gd2hpbGUgKHVubGlrZWx5KHQtPmV4aXRfc3RhdGUpKTsKKwkJCX0gd2hpbGUgKHVubGlrZWx5KHQtPmZsYWdzICYgUEZfRVhJVElORykpOwogCQl9IHdoaWxlICh0ICE9IHRzayk7CiAJfQogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvc2l4LXRpbWVycy5jIGIva2VybmVsL3Bvc2l4LXRpbWVycy5jCmluZGV4IGI3YjUzMmEuLmRkYTNjZGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3NpeC10aW1lcnMuYworKysgYi9rZXJuZWwvcG9zaXgtdGltZXJzLmMKQEAgLTExNTcsNyArMTE1Nyw3IEBACiB9CiAKIC8qCi0gKiBUaGlzIGlzIGNhbGxlZCBieSBfX2V4aXRfc2lnbmFsLCBvbmx5IHdoZW4gdGhlcmUgYXJlIG5vIG1vcmUKKyAqIFRoaXMgaXMgY2FsbGVkIGJ5IGRvX2V4aXQgb3IgZGVfdGhyZWFkLCBvbmx5IHdoZW4gdGhlcmUgYXJlIG5vIG1vcmUKICAqIHJlZmVyZW5jZXMgdG8gdGhlIHNoYXJlZCBzaWduYWxfc3RydWN0LgogICovCiB2b2lkIGV4aXRfaXRpbWVycyhzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnKQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL0tjb25maWcgYi9rZXJuZWwvcG93ZXIvS2NvbmZpZwppbmRleCAzOTZjNzg3Li40NmE1ZTVhIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvS2NvbmZpZworKysgYi9rZXJuZWwvcG93ZXIvS2NvbmZpZwpAQCAtMjksNyArMjksNyBAQAogCiBjb25maWcgU09GVFdBUkVfU1VTUEVORAogCWJvb2wgIlNvZnR3YXJlIFN1c3BlbmQiCi0JZGVwZW5kcyBvbiBQTSAmJiBTV0FQICYmIChYODYgfHwgKChGVlIgfHwgUFBDMzIpICYmICFTTVApKQorCWRlcGVuZHMgb24gUE0gJiYgU1dBUCAmJiAoWDg2ICYmICghU01QIHx8IFNVU1BFTkRfU01QKSkgfHwgKChGVlIgfHwgUFBDMzIpICYmICFTTVApCiAJLS0taGVscC0tLQogCSAgRW5hYmxlIHRoZSBwb3NzaWJpbGl0eSBvZiBzdXNwZW5kaW5nIHRoZSBtYWNoaW5lLgogCSAgSXQgZG9lc24ndCBuZWVkIEFQTS4KZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9kaXNrLmMgYi9rZXJuZWwvcG93ZXIvZGlzay5jCmluZGV4IDJkOGJmMDUuLjc2MTk1NmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9kaXNrLmMKKysrIGIva2VybmVsL3Bvd2VyL2Rpc2suYwpAQCAtMTcsMTIgKzE3LDEyIEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KIAogI2luY2x1ZGUgInBvd2VyLmgiCiAKIAogZXh0ZXJuIHN1c3BlbmRfZGlza19tZXRob2RfdCBwbV9kaXNrX21vZGU7Ci1leHRlcm4gc3RydWN0IHBtX29wcyAqIHBtX29wczsKIAogZXh0ZXJuIGludCBzd3N1c3Bfc3VzcGVuZCh2b2lkKTsKIGV4dGVybiBpbnQgc3dzdXNwX3dyaXRlKHZvaWQpOwpAQCAtNDksMTMgKzQ5LDExIEBACiAKIHN0YXRpYyB2b2lkIHBvd2VyX2Rvd24oc3VzcGVuZF9kaXNrX21ldGhvZF90IG1vZGUpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyb3IgPSAwOwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCXN3aXRjaChtb2RlKSB7CiAJY2FzZSBQTV9ESVNLX1BMQVRGT1JNOgotIAkJZGV2aWNlX3NodXRkb3duKCk7CisJCWtlcm5lbF9wb3dlcl9vZmZfcHJlcGFyZSgpOwogCQllcnJvciA9IHBtX29wcy0+ZW50ZXIoUE1fU1VTUEVORF9ESVNLKTsKIAkJYnJlYWs7CiAJY2FzZSBQTV9ESVNLX1NIVVRET1dOOgpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3Bvd2VyLmggYi9rZXJuZWwvcG93ZXIvcG93ZXIuaAppbmRleCBjZDZhMzQ5Li42NzQ4ZGUyIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvcG93ZXIuaAorKysgYi9rZXJuZWwvcG93ZXIvcG93ZXIuaApAQCAtMSw3ICsxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgogCi0vKiBXaXRoIFNVU1BFTkRfQ09OU09MRSBkZWZpbmVkLCBpdCBzdXNwZW5kIGxvb2tzICpyZWFsbHkqIGNvb2wsIGJ1dAorLyogV2l0aCBTVVNQRU5EX0NPTlNPTEUgZGVmaW5lZCBzdXNwZW5kIGxvb2tzICpyZWFsbHkqIGNvb2wsIGJ1dAogICAgd2UgcHJvYmFibHkgZG8gbm90IHRha2UgZW5vdWdoIGxvY2tzIGZvciBzd2l0Y2hpbmcgY29uc29sZXMsIGV0YywKICAgIHNvIGJhZCB0aGluZ3MgbWlnaHQgaGFwcGVuLgogKi8KQEAgLTksNiArOSw5IEBACiAjZGVmaW5lIFNVU1BFTkRfQ09OU09MRQkoTUFYX05SX0NPTlNPTEVTLTEpCiAjZW5kaWYKIAorI2RlZmluZSBNQVhfUEJFUwkoKFBBR0VfU0laRSAtIHNpemVvZihzdHJ1Y3QgbmV3X3V0c25hbWUpIFwKKwkJCS0gNCAtIDMqc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gc2l6ZW9mKGludCkgXAorCQkJLSBzaXplb2Yodm9pZCAqKSkgLyBzaXplb2Yoc3dwX2VudHJ5X3QpKQogCiBzdHJ1Y3Qgc3dzdXNwX2luZm8gewogCXN0cnVjdCBuZXdfdXRzbmFtZQl1dHM7CkBAIC0xOCw3ICsyMSw3IEBACiAJdW5zaWduZWQgbG9uZwkJaW1hZ2VfcGFnZXM7CiAJdW5zaWduZWQgbG9uZwkJcGFnZWRpcl9wYWdlczsKIAlzdXNwZW5kX3BhZ2VkaXJfdAkqIHN1c3BlbmRfcGFnZWRpcjsKLQlzd3BfZW50cnlfdAkJcGFnZWRpcls3NjhdOworCXN3cF9lbnRyeV90CQlwYWdlZGlyW01BWF9QQkVTXTsKIH0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChQQUdFX1NJWkUpKSk7CiAKIApkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3N3c3VzcC5jIGIva2VybmVsL3Bvd2VyL3N3c3VzcC5jCmluZGV4IGQ5NjdlODcuLjJkNWM0NTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9zd3N1c3AuYworKysgYi9rZXJuZWwvcG93ZXIvc3dzdXNwLmMKQEAgLTM2Myw3ICszNjMsNyBAQAogfQogCiAvKioKLSAqCXdyaXRlX3N3YXBfcGFnZSAtIFdyaXRlIG9uZSBwYWdlIHRvIGEgZnJlc2ggc3dhcCBsb2NhdGlvbi4KKyAqCXdyaXRlX3BhZ2UgLSBXcml0ZSBvbmUgcGFnZSB0byBhIGZyZXNoIHN3YXAgbG9jYXRpb24uCiAgKglAYWRkcjoJQWRkcmVzcyB3ZSdyZSB3cml0aW5nLgogICoJQGxvYzoJUGxhY2UgdG8gc3RvcmUgdGhlIGVudHJ5IHdlIHVzZWQuCiAgKgpAQCAtNDAyLDE1ICs0MDIsMTQgQEAKIHN0YXRpYyB2b2lkIGRhdGFfZnJlZSh2b2lkKQogewogCXN3cF9lbnRyeV90IGVudHJ5OwotCWludCBpOworCXN0cnVjdCBwYmUgKiBwOwogCi0JZm9yIChpID0gMDsgaSA8IG5yX2NvcHlfcGFnZXM7IGkrKykgewotCQllbnRyeSA9IChwYWdlZGlyX25vc2F2ZSArIGkpLT5zd2FwX2FkZHJlc3M7CisJZm9yX2VhY2hfcGJlKHAsIHBhZ2VkaXJfbm9zYXZlKSB7CisJCWVudHJ5ID0gcC0+c3dhcF9hZGRyZXNzOwogCQlpZiAoZW50cnkudmFsKQogCQkJc3dhcF9mcmVlKGVudHJ5KTsKIAkJZWxzZQogCQkJYnJlYWs7Ci0JCShwYWdlZGlyX25vc2F2ZSArIGkpLT5zd2FwX2FkZHJlc3MgPSAoc3dwX2VudHJ5X3QpezB9OwogCX0KIH0KIApAQCAtODYzLDYgKzg2Miw5IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIEZyZWUgcGFnZXMgd2UgYWxsb2NhdGVkIGZvciBzdXNwZW5kLiBTdXNwZW5kIHBhZ2VzIGFyZSBhbG9jYXRlZAorICogYmVmb3JlIGF0b21pYyBjb3B5LCBzbyB3ZSBuZWVkIHRvIGZyZWUgdGhlbSBhZnRlciByZXN1bWUuCisgKi8KIHZvaWQgc3dzdXNwX2ZyZWUodm9pZCkKIHsKIAlCVUdfT04oUGFnZU5vc2F2ZSh2aXJ0X3RvX3BhZ2UocGFnZWRpcl9zYXZlKSkpOwpAQCAtOTE4LDYgKzkyMCw3IEBACiAKIAlwYWdlZGlyX25vc2F2ZSA9IE5VTEw7CiAJbnJfY29weV9wYWdlcyA9IGNhbGNfbnIobnJfY29weV9wYWdlcyk7CisJbnJfY29weV9wYWdlc19jaGVjayA9IG5yX2NvcHlfcGFnZXM7CiAKIAlwcl9kZWJ1Zygic3VzcGVuZDogKHBhZ2VzIG5lZWRlZDogJWQgKyAlZCBmcmVlOiAlZClcbiIsCiAJCSBucl9jb3B5X3BhZ2VzLCBQQUdFU19GT1JfSU8sIG5yX2ZyZWVfcGFnZXMoKSk7CkBAIC05MjgsNiArOTMxLDEwIEBACiAJaWYgKCFlbm91Z2hfc3dhcCgpKQogCQlyZXR1cm4gLUVOT1NQQzsKIAorCWlmIChNQVhfUEJFUyA8IG5yX2NvcHlfcGFnZXMgLyBQQkVTX1BFUl9QQUdFICsKKwkgICAgISEobnJfY29weV9wYWdlcyAlIFBCRVNfUEVSX1BBR0UpKQorCQlyZXR1cm4gLUVOT1NQQzsKKwogCWlmICghKHBhZ2VkaXJfc2F2ZSA9IGFsbG9jX3BhZ2VkaXIobnJfY29weV9wYWdlcykpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAic3VzcGVuZDogQWxsb2NhdGluZyBwYWdlZGlyIGZhaWxlZC5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTk0MCw3ICs5NDcsNiBAQAogCQlyZXR1cm4gZXJyb3I7CiAJfQogCi0JbnJfY29weV9wYWdlc19jaGVjayA9IG5yX2NvcHlfcGFnZXM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwODksNyArMTA5NSw3IEBACiAJKmVhdGVuX21lbW9yeSA9IGM7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF91c2FibGVfcGFnZSh1bnNpZ25lZCBnZnBfbWFzaykKK3Vuc2lnbmVkIGxvbmcgZ2V0X3VzYWJsZV9wYWdlKHVuc2lnbmVkIGdmcF9tYXNrKQogewogCXVuc2lnbmVkIGxvbmcgbTsKIApAQCAtMTEwMyw3ICsxMTA5LDcgQEAKIAlyZXR1cm4gbTsKIH0KIAotc3RhdGljIHZvaWQgZnJlZV9lYXRlbl9tZW1vcnkodm9pZCkKK3ZvaWQgZnJlZV9lYXRlbl9tZW1vcnkodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIG07CiAJdm9pZCAqKmM7CkBAIC0xMjEzLDggKzEyMTksOSBAQAogCQlmcmVlX3BhZ2VkaXIocGJsaXN0KTsKIAkJZnJlZV9lYXRlbl9tZW1vcnkoKTsKIAkJcGJsaXN0ID0gTlVMTDsKLQl9Ci0JZWxzZQorCQkvKiBJcyB0aGlzIGV2ZW4gd29ydGggaGFuZGxpbmc/IEl0IHNob3VsZCBuZXZlciBldmVyIGhhcHBlbiwgYW5kIHdlCisJCSAgIGhhdmUganVzdCBsb3N0IHVzZXIncyBzdGF0ZSwgYW55d2F5Li4uICovCisJfSBlbHNlCiAJCXByaW50aygic3dzdXNwOiBSZWxvY2F0ZWQgJWQgcGFnZXNcbiIsIHJlbCk7CiAKIAlyZXR1cm4gcGJsaXN0OwpAQCAtMTQzNCw5ICsxNDQxLDkgQEAKIAl9CiAKIAlpZiAoZXJyb3IpCi0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwYmxpc3QpOwotCi0JQlVHX09OKGkgIT0gc3dzdXNwX2luZm8ucGFnZWRpcl9wYWdlcyk7CisJCWZyZWVfcGFnZWRpcihwYmxpc3QpOworCWVsc2UKKwkJQlVHX09OKGkgIT0gc3dzdXNwX2luZm8ucGFnZWRpcl9wYWdlcyk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0xNDc0LDExICsxNDgxLDEyIEBACiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW1hZ2UgYW5kIHJlYWQgdGhlIGRhdGEgZnJvbSBzd2FwICovCiAKIAllcnJvciA9IGNoZWNrX3BhZ2VkaXIocGFnZWRpcl9ub3NhdmUpOwotCWZyZWVfZWF0ZW5fbWVtb3J5KCk7CisKIAlpZiAoIWVycm9yKQogCQllcnJvciA9IGRhdGFfcmVhZChwYWdlZGlyX25vc2F2ZSk7CiAKIAlpZiAoZXJyb3IpIHsgLyogV2UgZmFpbCBjbGVhbmx5ICovCisJCWZyZWVfZWF0ZW5fbWVtb3J5KCk7CiAJCWZvcl9lYWNoX3BiZSAocCwgcGFnZWRpcl9ub3NhdmUpCiAJCQlpZiAocC0+YWRkcmVzcykgewogCQkJCWZyZWVfcGFnZShwLT5hZGRyZXNzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wcmludGsuYyBiL2tlcm5lbC9wcmludGsuYwppbmRleCBhOTY3NjA1Li40YjhmMGY5IDEwMDY0NAotLS0gYS9rZXJuZWwvcHJpbnRrLmMKKysrIGIva2VybmVsL3ByaW50ay5jCkBAIC00ODgsNiArNDg4LDExIEBACiAKIF9fc2V0dXAoInRpbWUiLCBwcmludGtfdGltZV9zZXR1cCk7CiAKK19fYXR0cmlidXRlX18oKHdlYWspKSB1bnNpZ25lZCBsb25nIGxvbmcgcHJpbnRrX2Nsb2NrKHZvaWQpCit7CisJcmV0dXJuIHNjaGVkX2Nsb2NrKCk7Cit9CisKIC8qCiAgKiBUaGlzIGlzIHByaW50ay4gIEl0IGNhbiBiZSBjYWxsZWQgZnJvbSBhbnkgY29udGV4dC4gIFdlIHdhbnQgaXQgdG8gd29yay4KICAqIApAQCAtNTY1LDcgKzU3MCw3IEBACiAJCQkJCWxvZ2xldl9jaGFyID0gZGVmYXVsdF9tZXNzYWdlX2xvZ2xldmVsCiAJCQkJCQkrICcwJzsKIAkJCQl9Ci0JCQkJdCA9IHNjaGVkX2Nsb2NrKCk7CisJCQkJdCA9IHByaW50a19jbG9jaygpOwogCQkJCW5hbm9zZWNfcmVtID0gZG9fZGl2KHQsIDEwMDAwMDAwMDApOwogCQkJCXRsZW4gPSBzcHJpbnRmKHRidWYsCiAJCQkJCQkiPCVjPlslNWx1LiUwNmx1XSAiLApkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXBkYXRlLmMgYi9rZXJuZWwvcmN1cGRhdGUuYwppbmRleCBiZWYzYjY5Li4yNTU5ZDRiIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1cGRhdGUuYworKysgYi9rZXJuZWwvcmN1cGRhdGUuYwpAQCAtNzEsNyArNzEsNyBAQAogCiAvKiBGYWtlIGluaXRpYWxpemF0aW9uIHJlcXVpcmVkIGJ5IGNvbXBpbGVyICovCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHRhc2tsZXRfc3RydWN0LCByY3VfdGFza2xldCkgPSB7TlVMTH07Ci1zdGF0aWMgaW50IG1heGJhdGNoID0gMTA7CitzdGF0aWMgaW50IG1heGJhdGNoID0gMTAwMDA7CiAKICNpZm5kZWYgX19IQVZFX0FSQ0hfQ01QWENIRwogLyoKQEAgLTEwOSw2ICsxMDksMTAgQEAKIAlyZHAgPSAmX19nZXRfY3B1X3ZhcihyY3VfZGF0YSk7CiAJKnJkcC0+bnh0dGFpbCA9IGhlYWQ7CiAJcmRwLT5ueHR0YWlsID0gJmhlYWQtPm5leHQ7CisKKwlpZiAodW5saWtlbHkoKytyZHAtPmNvdW50ID4gMTAwMDApKQorCQlzZXRfbmVlZF9yZXNjaGVkKCk7CisKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTE0MCw2ICsxNDQsMTIgQEAKIAlyZHAgPSAmX19nZXRfY3B1X3ZhcihyY3VfYmhfZGF0YSk7CiAJKnJkcC0+bnh0dGFpbCA9IGhlYWQ7CiAJcmRwLT5ueHR0YWlsID0gJmhlYWQtPm5leHQ7CisJcmRwLT5jb3VudCsrOworLyoKKyAqICBTaG91bGQgd2UgZGlyZWN0bHkgY2FsbCByY3VfZG9fYmF0Y2goKSBoZXJlID8KKyAqICBpZiAodW5saWtlbHkocmRwLT5jb3VudCA+IDEwMDAwKSkKKyAqICAgICAgcmN1X2RvX2JhdGNoKHJkcCk7CisgKi8KIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTE1Nyw2ICsxNjcsNyBAQAogCQluZXh0ID0gcmRwLT5kb25lbGlzdCA9IGxpc3QtPm5leHQ7CiAJCWxpc3QtPmZ1bmMobGlzdCk7CiAJCWxpc3QgPSBuZXh0OworCQlyZHAtPmNvdW50LS07CiAJCWlmICgrK2NvdW50ID49IG1heGJhdGNoKQogCQkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkLmMgYi9rZXJuZWwvc2NoZWQuYwppbmRleCAxZjMxYTUyLi4xZTVjYWZkIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQuYworKysgYi9rZXJuZWwvc2NoZWQuYwpAQCAtMzg3OSw2ICszODc5LDcgQEAKIAogI2lmbmRlZiBDT05GSUdfU01QCiBjcHVtYXNrX3QgY3B1X29ubGluZV9tYXAgPSBDUFVfTUFTS19BTEw7CitFWFBPUlRfU1lNQk9MX0dQTChjcHVfb25saW5lX21hcCk7CiBjcHVtYXNrX3QgY3B1X3Bvc3NpYmxlX21hcCA9IENQVV9NQVNLX0FMTDsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9rZXJuZWwvc2lnbmFsLmMgYi9rZXJuZWwvc2lnbmFsLmMKaW5kZXggYjkyYzNjOS4uZjJiOTZiMCAxMDA2NDQKLS0tIGEva2VybmVsL3NpZ25hbC5jCisrKyBiL2tlcm5lbC9zaWduYWwuYwpAQCAtMjYyLDcgKzI2Miw3IEBACiAJcmV0dXJuIHNpZzsKIH0KIAotc3RhdGljIHN0cnVjdCBzaWdxdWV1ZSAqX19zaWdxdWV1ZV9hbGxvYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIHVuc2lnbmVkIGludCBfX25vY2FzdCBmbGFncywKK3N0YXRpYyBzdHJ1Y3Qgc2lncXVldWUgKl9fc2lncXVldWVfYWxsb2Moc3RydWN0IHRhc2tfc3RydWN0ICp0LCBnZnBfdCBmbGFncywKIAkJCQkJIGludCBvdmVycmlkZV9ybGltaXQpCiB7CiAJc3RydWN0IHNpZ3F1ZXVlICpxID0gTlVMTDsKQEAgLTM5NywyMCArMzk3LDggQEAKIAlmbHVzaF9zaWdxdWV1ZSgmdHNrLT5wZW5kaW5nKTsKIAlpZiAoc2lnKSB7CiAJCS8qCi0JCSAqIFdlIGFyZSBjbGVhbmluZyB1cCB0aGUgc2lnbmFsX3N0cnVjdCBoZXJlLiAgV2UgZGVsYXllZAotCQkgKiBjYWxsaW5nIGV4aXRfaXRpbWVycyB1bnRpbCBhZnRlciBmbHVzaF9zaWdxdWV1ZSwganVzdCBpbgotCQkgKiBjYXNlIG91ciB0aHJlYWQtbG9jYWwgcGVuZGluZyBxdWV1ZSBjb250YWluZWQgYSBxdWV1ZWQKLQkJICogdGltZXIgc2lnbmFsIHRoYXQgd291bGQgaGF2ZSBiZWVuIGNsZWFyZWQgaW4KLQkJICogZXhpdF9pdGltZXJzLiAgV2hlbiB0aGF0IGNhbGxlZCBzaWdxdWV1ZV9mcmVlLCBpdCB3b3VsZAotCQkgKiBhdHRlbXB0IHRvIHJlLXRha2UgdGhlIHRhc2tsaXN0X2xvY2sgYW5kIGRlYWRsb2NrLiAgVGhpcwotCQkgKiBjYW4gbmV2ZXIgaGFwcGVuIGlmIHdlIGVuc3VyZSB0aGF0IGFsbCBxdWV1ZXMgdGhlCi0JCSAqIHRpbWVyJ3Mgc2lnbmFsIG1pZ2h0IGJlIHF1ZXVlZCBvbiBoYXZlIGJlZW4gZmx1c2hlZAotCQkgKiBmaXJzdC4gIFRoZSBzaGFyZWRfcGVuZGluZyBxdWV1ZSwgYW5kIG91ciBvd24gcGVuZGluZwotCQkgKiBxdWV1ZSBhcmUgdGhlIG9ubHkgcXVldWVzIHRoZSB0aW1lciBjb3VsZCBiZSBvbiwgc2luY2UKLQkJICogdGhlcmUgYXJlIG5vIG90aGVyIHRocmVhZHMgbGVmdCBpbiB0aGUgZ3JvdXAgYW5kIHRpbWVyCi0JCSAqIHNpZ25hbHMgYXJlIGNvbnN0cmFpbmVkIHRvIHRocmVhZHMgaW5zaWRlIHRoZSBncm91cC4KKwkJICogV2UgYXJlIGNsZWFuaW5nIHVwIHRoZSBzaWduYWxfc3RydWN0IGhlcmUuCiAJCSAqLwotCQlleGl0X2l0aW1lcnMoc2lnKTsKIAkJZXhpdF90aHJlYWRfZ3JvdXBfa2V5cyhzaWcpOwogCQlrbWVtX2NhY2hlX2ZyZWUoc2lnbmFsX2NhY2hlcCwgc2lnKTsKIAl9CkBAIC01NzgsNyArNTY2LDggQEAKICAJCSAqIGlzIHRvIGFsZXJ0IHN0b3Atc2lnbmFsIHByb2Nlc3NpbmcgY29kZSB3aGVuIGFub3RoZXIKICAJCSAqIHByb2Nlc3NvciBoYXMgY29tZSBhbG9uZyBhbmQgY2xlYXJlZCB0aGUgZmxhZy4KICAJCSAqLwotIAkJdHNrLT5zaWduYWwtPmZsYWdzIHw9IFNJR05BTF9TVE9QX0RFUVVFVUVEOworIAkJaWYgKCEodHNrLT5zaWduYWwtPmZsYWdzICYgU0lHTkFMX0dST1VQX0VYSVQpKQorIAkJCXRzay0+c2lnbmFsLT5mbGFncyB8PSBTSUdOQUxfU1RPUF9ERVFVRVVFRDsKICAJfQogCWlmICggc2lnbnIgJiYKIAkgICAgICgoaW5mby0+c2lfY29kZSAmIF9fU0lfTUFTSykgPT0gX19TSV9USU1FUikgJiYKQEAgLTkzNiwzNCArOTI1LDMxIEBACiAgKiBhcyBzb29uIGFzIHRoZXkncmUgYXZhaWxhYmxlLCBzbyBwdXR0aW5nIHRoZSBzaWduYWwgb24gdGhlIHNoYXJlZCBxdWV1ZQogICogd2lsbCBiZSBlcXVpdmFsZW50IHRvIHNlbmRpbmcgaXQgdG8gb25lIHN1Y2ggdGhyZWFkLgogICovCi0jZGVmaW5lIHdhbnRzX3NpZ25hbChzaWcsIHAsIG1hc2spIAkJCVwKLQkoIXNpZ2lzbWVtYmVyKCYocCktPmJsb2NrZWQsIHNpZykJCVwKLQkgJiYgISgocCktPnN0YXRlICYgbWFzaykJCQlcCi0JICYmICEoKHApLT5mbGFncyAmIFBGX0VYSVRJTkcpCQkJXAotCSAmJiAodGFza19jdXJyKHApIHx8ICFzaWduYWxfcGVuZGluZyhwKSkpCi0KK3N0YXRpYyBpbmxpbmUgaW50IHdhbnRzX3NpZ25hbChpbnQgc2lnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJaWYgKHNpZ2lzbWVtYmVyKCZwLT5ibG9ja2VkLCBzaWcpKQorCQlyZXR1cm4gMDsKKwlpZiAocC0+ZmxhZ3MgJiBQRl9FWElUSU5HKQorCQlyZXR1cm4gMDsKKwlpZiAoc2lnID09IFNJR0tJTEwpCisJCXJldHVybiAxOworCWlmIChwLT5zdGF0ZSAmIChUQVNLX1NUT1BQRUQgfCBUQVNLX1RSQUNFRCkpCisJCXJldHVybiAwOworCXJldHVybiB0YXNrX2N1cnIocCkgfHwgIXNpZ25hbF9wZW5kaW5nKHApOworfQogCiBzdGF0aWMgdm9pZAogX19ncm91cF9jb21wbGV0ZV9zaWduYWwoaW50IHNpZywgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewotCXVuc2lnbmVkIGludCBtYXNrOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKIAogCS8qCi0JICogRG9uJ3QgYm90aGVyIHRyYWNlZCBhbmQgc3RvcHBlZCB0YXNrcyAoYnV0Ci0JICogU0lHS0lMTCB3aWxsIHB1bmNoIHRocm91Z2ggdGhhdCkuCi0JICovCi0JbWFzayA9IFRBU0tfU1RPUFBFRCB8IFRBU0tfVFJBQ0VEOwotCWlmIChzaWcgPT0gU0lHS0lMTCkKLQkJbWFzayA9IDA7Ci0KLQkvKgogCSAqIE5vdyBmaW5kIGEgdGhyZWFkIHdlIGNhbiB3YWtlIHVwIHRvIHRha2UgdGhlIHNpZ25hbCBvZmYgdGhlIHF1ZXVlLgogCSAqCiAJICogSWYgdGhlIG1haW4gdGhyZWFkIHdhbnRzIHRoZSBzaWduYWwsIGl0IGdldHMgZmlyc3QgY3JhY2suCiAJICogUHJvYmFibHkgdGhlIGxlYXN0IHN1cnByaXNpbmcgdG8gdGhlIGF2ZXJhZ2UgYmVhci4KIAkgKi8KLQlpZiAod2FudHNfc2lnbmFsKHNpZywgcCwgbWFzaykpCisJaWYgKHdhbnRzX3NpZ25hbChzaWcsIHApKQogCQl0ID0gcDsKIAllbHNlIGlmICh0aHJlYWRfZ3JvdXBfZW1wdHkocCkpCiAJCS8qCkBAIC05ODEsNyArOTY3LDcgQEAKIAkJCXQgPSBwLT5zaWduYWwtPmN1cnJfdGFyZ2V0ID0gcDsKIAkJQlVHX09OKHQtPnRnaWQgIT0gcC0+dGdpZCk7CiAKLQkJd2hpbGUgKCF3YW50c19zaWduYWwoc2lnLCB0LCBtYXNrKSkgeworCQl3aGlsZSAoIXdhbnRzX3NpZ25hbChzaWcsIHQpKSB7CiAJCQl0ID0gbmV4dF90aHJlYWQodCk7CiAJCQlpZiAodCA9PSBwLT5zaWduYWwtPmN1cnJfdGFyZ2V0KQogCQkJCS8qCkBAIC0xMTk1LDYgKzExODEsNDAgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKKy8qIGxpa2Uga2lsbF9wcm9jX2luZm8oKSwgYnV0IGRvZXNuJ3QgdXNlIHVpZC9ldWlkIG9mICJjdXJyZW50IiAqLworaW50IGtpbGxfcHJvY19pbmZvX2FzX3VpZChpbnQgc2lnLCBzdHJ1Y3Qgc2lnaW5mbyAqaW5mbywgcGlkX3QgcGlkLAorCQkgICAgICB1aWRfdCB1aWQsIHVpZF90IGV1aWQpCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwOworCisJaWYgKCF2YWxpZF9zaWduYWwoc2lnKSkKKwkJcmV0dXJuIHJldDsKKworCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJcCA9IGZpbmRfdGFza19ieV9waWQocGlkKTsKKwlpZiAoIXApIHsKKwkJcmV0ID0gLUVTUkNIOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCWlmICgoIWluZm8gfHwgKCh1bnNpZ25lZCBsb25nKWluZm8gIT0gMSAmJgorCQkJKHVuc2lnbmVkIGxvbmcpaW5mbyAhPSAyICYmIFNJX0ZST01VU0VSKGluZm8pKSkKKwkgICAgJiYgKGV1aWQgIT0gcC0+c3VpZCkgJiYgKGV1aWQgIT0gcC0+dWlkKQorCSAgICAmJiAodWlkICE9IHAtPnN1aWQpICYmICh1aWQgIT0gcC0+dWlkKSkgeworCQlyZXQgPSAtRVBFUk07CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisJaWYgKHNpZyAmJiBwLT5zaWdoYW5kKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CisJCXJldCA9IF9fZ3JvdXBfc2VuZF9zaWdfaW5mbyhzaWcsIGluZm8sIHApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CisJfQorb3V0X3VubG9jazoKKwlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGtpbGxfcHJvY19pbmZvX2FzX3VpZCk7CiAKIC8qCiAgKiBraWxsX3NvbWV0aGluZ19pbmZvKCkgaW50ZXJwcmV0cyBwaWQgaW4gaW50ZXJlc3Rpbmcgd2F5cyBqdXN0IGxpa2Uga2lsbCgyKS4KQEAgLTE3NjYsNyArMTc4Niw4IEBACiAJCQkJICogc3RvcCBpcyBhbHdheXMgZG9uZSB3aXRoIHRoZSBzaWdsb2NrIGhlbGQsCiAJCQkJICogc28gdGhpcyBjaGVjayBoYXMgbm8gcmFjZXMuCiAJCQkJICovCi0JCQkJaWYgKHQtPnN0YXRlIDwgVEFTS19TVE9QUEVEKSB7CisJCQkJaWYgKCF0LT5leGl0X3N0YXRlICYmCisJCQkJICAgICEodC0+c3RhdGUgJiAoVEFTS19TVE9QUEVEfFRBU0tfVFJBQ0VEKSkpIHsKIAkJCQkJc3RvcF9jb3VudCsrOwogCQkJCQlzaWduYWxfd2FrZV91cCh0LCAwKTsKIAkJCQl9CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lzLmMKaW5kZXggYzgwNDEyYi4uMmZhMWVkMSAxMDA2NDQKLS0tIGEva2VybmVsL3N5cy5jCisrKyBiL2tlcm5lbC9zeXMuYwpAQCAtMzYxLDE3ICszNjEsMzUgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCisvKioKKyAqCWVtZXJnZW5jeV9yZXN0YXJ0IC0gcmVib290IHRoZSBzeXN0ZW0KKyAqCisgKglXaXRob3V0IHNodXR0aW5nIGRvd24gYW55IGhhcmR3YXJlIG9yIHRha2luZyBhbnkgbG9ja3MKKyAqCXJlYm9vdCB0aGUgc3lzdGVtLiAgVGhpcyBpcyBjYWxsZWQgd2hlbiB3ZSBrbm93IHdlIGFyZSBpbgorICoJdHJvdWJsZSBzbyB0aGlzIGlzIG91ciBiZXN0IGVmZm9ydCB0byByZWJvb3QuICBUaGlzIGlzCisgKglzYWZlIHRvIGNhbGwgaW4gaW50ZXJydXB0IGNvbnRleHQuCisgKi8KIHZvaWQgZW1lcmdlbmN5X3Jlc3RhcnQodm9pZCkKIHsKIAltYWNoaW5lX2VtZXJnZW5jeV9yZXN0YXJ0KCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChlbWVyZ2VuY3lfcmVzdGFydCk7CiAKLXZvaWQga2VybmVsX3Jlc3RhcnQoY2hhciAqY21kKQorLyoqCisgKglrZXJuZWxfcmVzdGFydCAtIHJlYm9vdCB0aGUgc3lzdGVtCisgKgorICoJU2h1dGRvd24gZXZlcnl0aGluZyBhbmQgcGVyZm9ybSBhIGNsZWFuIHJlYm9vdC4KKyAqCVRoaXMgaXMgbm90IHNhZmUgdG8gY2FsbCBpbiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqLwordm9pZCBrZXJuZWxfcmVzdGFydF9wcmVwYXJlKGNoYXIgKmNtZCkKIHsKIAlub3RpZmllcl9jYWxsX2NoYWluKCZyZWJvb3Rfbm90aWZpZXJfbGlzdCwgU1lTX1JFU1RBUlQsIGNtZCk7CiAJc3lzdGVtX3N0YXRlID0gU1lTVEVNX1JFU1RBUlQ7CiAJZGV2aWNlX3NodXRkb3duKCk7Cit9Cit2b2lkIGtlcm5lbF9yZXN0YXJ0KGNoYXIgKmNtZCkKK3sKKwlrZXJuZWxfcmVzdGFydF9wcmVwYXJlKGNtZCk7CiAJaWYgKCFjbWQpIHsKIAkJcHJpbnRrKEtFUk5fRU1FUkcgIlJlc3RhcnRpbmcgc3lzdGVtLlxuIik7CiAJfSBlbHNlIHsKQEAgLTM4Miw2ICs0MDAsMTIgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGtlcm5lbF9yZXN0YXJ0KTsKIAorLyoqCisgKglrZXJuZWxfa2V4ZWMgLSByZWJvb3QgdGhlIHN5c3RlbQorICoKKyAqCU1vdmUgaW50byBwbGFjZSBhbmQgc3RhcnQgZXhlY3V0aW5nIGEgcHJlbG9hZGVkIHN0YW5kYWxvbmUKKyAqCWV4ZWN1dGFibGUuICBJZiBub3RoaW5nIHdhcyBwcmVsb2FkZWQgcmV0dXJuIGFuIGVycm9yLgorICovCiB2b2lkIGtlcm5lbF9rZXhlYyh2b2lkKQogewogI2lmZGVmIENPTkZJR19LRVhFQwpAQCAtMzkwLDkgKzQxNCw3IEBACiAJaWYgKCFpbWFnZSkgewogCQlyZXR1cm47CiAJfQotCW5vdGlmaWVyX2NhbGxfY2hhaW4oJnJlYm9vdF9ub3RpZmllcl9saXN0LCBTWVNfUkVTVEFSVCwgTlVMTCk7Ci0Jc3lzdGVtX3N0YXRlID0gU1lTVEVNX1JFU1RBUlQ7Ci0JZGV2aWNlX3NodXRkb3duKCk7CisJa2VybmVsX3Jlc3RhcnRfcHJlcGFyZShOVUxMKTsKIAlwcmludGsoS0VSTl9FTUVSRyAiU3RhcnRpbmcgbmV3IGtlcm5lbFxuIik7CiAJbWFjaGluZV9zaHV0ZG93bigpOwogCW1hY2hpbmVfa2V4ZWMoaW1hZ2UpOwpAQCAtNDAwLDIxICs0MjIsMzkgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGtlcm5lbF9rZXhlYyk7CiAKLXZvaWQga2VybmVsX2hhbHQodm9pZCkKKy8qKgorICoJa2VybmVsX2hhbHQgLSBoYWx0IHRoZSBzeXN0ZW0KKyAqCisgKglTaHV0ZG93biBldmVyeXRoaW5nIGFuZCBwZXJmb3JtIGEgY2xlYW4gc3lzdGVtIGhhbHQuCisgKi8KK3ZvaWQga2VybmVsX2hhbHRfcHJlcGFyZSh2b2lkKQogewogCW5vdGlmaWVyX2NhbGxfY2hhaW4oJnJlYm9vdF9ub3RpZmllcl9saXN0LCBTWVNfSEFMVCwgTlVMTCk7CiAJc3lzdGVtX3N0YXRlID0gU1lTVEVNX0hBTFQ7CiAJZGV2aWNlX3NodXRkb3duKCk7Cit9Cit2b2lkIGtlcm5lbF9oYWx0KHZvaWQpCit7CisJa2VybmVsX2hhbHRfcHJlcGFyZSgpOwogCXByaW50ayhLRVJOX0VNRVJHICJTeXN0ZW0gaGFsdGVkLlxuIik7CiAJbWFjaGluZV9oYWx0KCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrZXJuZWxfaGFsdCk7CiAKLXZvaWQga2VybmVsX3Bvd2VyX29mZih2b2lkKQorLyoqCisgKglrZXJuZWxfcG93ZXJfb2ZmIC0gcG93ZXJfb2ZmIHRoZSBzeXN0ZW0KKyAqCisgKglTaHV0ZG93biBldmVyeXRoaW5nIGFuZCBwZXJmb3JtIGEgY2xlYW4gc3lzdGVtIHBvd2VyX29mZi4KKyAqLwordm9pZCBrZXJuZWxfcG93ZXJfb2ZmX3ByZXBhcmUodm9pZCkKIHsKIAlub3RpZmllcl9jYWxsX2NoYWluKCZyZWJvb3Rfbm90aWZpZXJfbGlzdCwgU1lTX1BPV0VSX09GRiwgTlVMTCk7CiAJc3lzdGVtX3N0YXRlID0gU1lTVEVNX1BPV0VSX09GRjsKIAlkZXZpY2Vfc2h1dGRvd24oKTsKK30KK3ZvaWQga2VybmVsX3Bvd2VyX29mZih2b2lkKQoreworCWtlcm5lbF9wb3dlcl9vZmZfcHJlcGFyZSgpOwogCXByaW50ayhLRVJOX0VNRVJHICJQb3dlciBkb3duLlxuIik7CiAJbWFjaGluZV9wb3dlcl9vZmYoKTsKIH0KQEAgLTE3MjgsOCArMTc2OCw3IEBACiAJCQllcnJvciA9IHB1dF91c2VyKGN1cnJlbnQtPnBkZWF0aF9zaWduYWwsIChpbnQgX191c2VyICopYXJnMik7CiAJCQlicmVhazsKIAkJY2FzZSBQUl9HRVRfRFVNUEFCTEU6Ci0JCQlpZiAoY3VycmVudC0+bW0tPmR1bXBhYmxlKQotCQkJCWVycm9yID0gMTsKKwkJCWVycm9yID0gY3VycmVudC0+bW0tPmR1bXBhYmxlOwogCQkJYnJlYWs7CiAJCWNhc2UgUFJfU0VUX0RVTVBBQkxFOgogCQkJaWYgKGFyZzIgPCAwIHx8IGFyZzIgPiAyKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS5jIGIva2VybmVsL3RpbWUuYwppbmRleCBkZDVhZTExLi40MGMyNDEwIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS5jCisrKyBiL2tlcm5lbC90aW1lLmMKQEAgLTU3MCw2ICs1NzAsNyBAQAogCXR2LT50dl9zZWMgPSB4LnR2X3NlYzsKIAl0di0+dHZfbnNlYyA9IHgudHZfdXNlYyAqIE5TRUNfUEVSX1VTRUM7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChnZXRuc3RpbWVvZmRheSk7CiAjZW5kaWYKIAogI2lmIChCSVRTX1BFUl9MT05HIDwgNjQpCmRpZmYgLS1naXQgYS9saWIvLmdpdGlnbm9yZSBiL2xpYi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZWYxZWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDYgQEAKKyMKKyMgR2VuZXJhdGVkIGZpbGVzCisjCitnZW5fY3JjMzJ0YWJsZQorY3JjMzJ0YWJsZS5oCisKZGlmZiAtLWdpdCBhL2xpYi9kZWNfYW5kX2xvY2suYyBiL2xpYi9kZWNfYW5kX2xvY2suYwppbmRleCAyMzc3YWYwLi4zMDVhOTY2IDEwMDY0NAotLS0gYS9saWIvZGVjX2FuZF9sb2NrLmMKKysrIGIvbGliL2RlY19hbmRfbG9jay5jCkBAIC0xLDcgKzEsNDEgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKKyNpZmRlZiBfX0hBVkVfQVJDSF9DTVBYQ0hHCisvKgorICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbm90aW9uIG9mICJkZWNyZW1lbnQgYQorICogcmVmZXJlbmNlIGNvdW50LCBhbmQgcmV0dXJuIGxvY2tlZCBpZiBpdCBkZWNyZW1lbnRlZCB0byB6ZXJvIi4KKyAqCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIGNhbiBiZSB1c2VkIG9uIGFueSBhcmNoaXRlY3R1cmUgdGhhdAorICogaGFzIGEgY21weGNoZywgYW5kIHdoZXJlIGF0b21pYy0+dmFsdWUgaXMgYW4gaW50IGhvbGRpbmcKKyAqIHRoZSB2YWx1ZSBvZiB0aGUgYXRvbWljIChpLmUuIHRoZSBoaWdoIGJpdHMgYXJlbid0IHVzZWQKKyAqIGZvciBhIGxvY2sgb3IgYW55dGhpbmcgbGlrZSB0aGF0KS4KKyAqLworaW50IF9hdG9taWNfZGVjX2FuZF9sb2NrKGF0b21pY190ICphdG9taWMsIHNwaW5sb2NrX3QgKmxvY2spCit7CisJaW50IGNvdW50ZXI7CisJaW50IG5ld2NvdW50OworCisJZm9yICg7OykgeworCQljb3VudGVyID0gYXRvbWljX3JlYWQoYXRvbWljKTsKKwkJbmV3Y291bnQgPSBjb3VudGVyIC0gMTsKKwkJaWYgKCFuZXdjb3VudCkKKwkJCWJyZWFrOwkJLyogZG8gaXQgdGhlIHNsb3cgd2F5ICovCisKKwkJbmV3Y291bnQgPSBjbXB4Y2hnKCZhdG9taWMtPmNvdW50ZXIsIGNvdW50ZXIsIG5ld2NvdW50KTsKKwkJaWYgKG5ld2NvdW50ID09IGNvdW50ZXIpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlzcGluX2xvY2sobG9jayk7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoYXRvbWljKSkKKwkJcmV0dXJuIDE7CisJc3Bpbl91bmxvY2sobG9jayk7CisJcmV0dXJuIDA7Cit9CisjZWxzZQogLyoKICAqIFRoaXMgaXMgYW4gYXJjaGl0ZWN0dXJlLW5ldXRyYWwsIGJ1dCBzbG93LAogICogaW1wbGVtZW50YXRpb24gb2YgdGhlIG5vdGlvbiBvZiAiZGVjcmVtZW50CkBAIC0zMyw1ICs2Nyw2IEBACiAJc3Bpbl91bmxvY2sobG9jayk7CiAJcmV0dXJuIDA7CiB9CisjZW5kaWYKIAogRVhQT1JUX1NZTUJPTChfYXRvbWljX2RlY19hbmRfbG9jayk7CmRpZmYgLS1naXQgYS9saWIvaWRyLmMgYi9saWIvaWRyLmMKaW5kZXggNjQxNWQwNS4uZDRkZjIxZCAxMDA2NDQKLS0tIGEvbGliL2lkci5jCisrKyBiL2xpYi9pZHIuYwpAQCAtMzQ2LDYgKzM0NiwxOSBAQAogRVhQT1JUX1NZTUJPTChpZHJfcmVtb3ZlKTsKIAogLyoqCisgKiBpZHJfZGVzdHJveSAtIHJlbGVhc2UgYWxsIGNhY2hlZCBsYXllcnMgd2l0aGluIGFuIGlkciB0cmVlCisgKiBpZHA6IGlkciBoYW5kbGUKKyAqLwordm9pZCBpZHJfZGVzdHJveShzdHJ1Y3QgaWRyICppZHApCit7CisJd2hpbGUgKGlkcC0+aWRfZnJlZV9jbnQpIHsKKwkJc3RydWN0IGlkcl9sYXllciAqcCA9IGFsbG9jX2xheWVyKGlkcCk7CisJCWttZW1fY2FjaGVfZnJlZShpZHJfbGF5ZXJfY2FjaGUsIHApOworCX0KK30KK0VYUE9SVF9TWU1CT0woaWRyX2Rlc3Ryb3kpOworCisvKioKICAqIGlkcl9maW5kIC0gcmV0dXJuIHBvaW50ZXIgZm9yIGdpdmVuIGlkCiAgKiBAaWRwOiBpZHIgaGFuZGxlCiAgKiBAaWQ6IGxvb2t1cCBrZXkKZGlmZiAtLWdpdCBhL2xpYi9yYWRpeC10cmVlLmMgYi9saWIvcmFkaXgtdHJlZS5jCmluZGV4IDZhOGJjNmUuLmQxYzA1N2U3IDEwMDY0NAotLS0gYS9saWIvcmFkaXgtdHJlZS5jCisrKyBiL2xpYi9yYWRpeC10cmVlLmMKQEAgLTExMCw3ICsxMTAsNyBAQAogICogc3VjY2VzcywgcmV0dXJuIHplcm8sIHdpdGggcHJlZW1wdGlvbiBkaXNhYmxlZC4gIE9uIGVycm9yLCByZXR1cm4gLUVOT01FTQogICogd2l0aCBwcmVlbXB0aW9uIG5vdCBkaXNhYmxlZC4KICAqLwotaW50IHJhZGl4X3RyZWVfcHJlbG9hZCh1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX21hc2spCitpbnQgcmFkaXhfdHJlZV9wcmVsb2FkKGdmcF90IGdmcF9tYXNrKQogewogCXN0cnVjdCByYWRpeF90cmVlX3ByZWxvYWQgKnJ0cDsKIAlzdHJ1Y3QgcmFkaXhfdHJlZV9ub2RlICpub2RlOwpkaWZmIC0tZ2l0IGEvbGliL3RzX2JtLmMgYi9saWIvdHNfYm0uYwppbmRleCAyY2M3OTExMi4uOGE4YjNhMSAxMDA2NDQKLS0tIGEvbGliL3RzX2JtLmMKKysrIGIvbGliL3RzX2JtLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHRzX2NvbmZpZyAqYm1faW5pdChjb25zdCB2b2lkICpwYXR0ZXJuLCB1bnNpZ25lZCBpbnQgbGVuLAotCQkJCSBpbnQgZ2ZwX21hc2spCisJCQkJIGdmcF90IGdmcF9tYXNrKQogewogCXN0cnVjdCB0c19jb25maWcgKmNvbmY7CiAJc3RydWN0IHRzX2JtICpibTsKZGlmZiAtLWdpdCBhL2xpYi90c19mc20uYyBiL2xpYi90c19mc20uYwppbmRleCBkMjdjMGEwLi5jYTMyMTEyIDEwMDY0NAotLS0gYS9saWIvdHNfZnNtLmMKKysrIGIvbGliL3RzX2ZzbS5jCkBAIC0yNTgsNyArMjU4LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB0c19jb25maWcgKmZzbV9pbml0KGNvbnN0IHZvaWQgKnBhdHRlcm4sIHVuc2lnbmVkIGludCBsZW4sCi0JCQkJICAgICBpbnQgZ2ZwX21hc2spCisJCQkJICAgICBnZnBfdCBnZnBfbWFzaykKIHsKIAlpbnQgaSwgZXJyID0gLUVJTlZBTDsKIAlzdHJ1Y3QgdHNfY29uZmlnICpjb25mOwpkaWZmIC0tZ2l0IGEvbGliL3RzX2ttcC5jIGIvbGliL3RzX2ttcC5jCmluZGV4IDczMjY2YjkuLjdmZDQ1NDUgMTAwNjQ0Ci0tLSBhL2xpYi90c19rbXAuYworKysgYi9saWIvdHNfa21wLmMKQEAgLTg3LDcgKzg3LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB0c19jb25maWcgKmttcF9pbml0KGNvbnN0IHZvaWQgKnBhdHRlcm4sIHVuc2lnbmVkIGludCBsZW4sCi0JCQkJICBpbnQgZ2ZwX21hc2spCisJCQkJICBnZnBfdCBnZnBfbWFzaykKIHsKIAlzdHJ1Y3QgdHNfY29uZmlnICpjb25mOwogCXN0cnVjdCB0c19rbXAgKmttcDsKZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnCmluZGV4IDRlOTkzN2EuLjM5MWZmYzUgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKKysrIGIvbW0vS2NvbmZpZwpAQCAtMjksNyArMjksNyBAQAogCSAgSWYgdW5zdXJlLCBjaG9vc2UgdGhpcyBvcHRpb24gKEZsYXQgTWVtb3J5KSBvdmVyIGFueSBvdGhlci4KIAogY29uZmlnIERJU0NPTlRJR01FTV9NQU5VQUwKLQlib29sICJEaXNjb250aWdpb3VzIE1lbW9yeSIKKwlib29sICJEaXNjb250aWd1b3VzIE1lbW9yeSIKIAlkZXBlbmRzIG9uIEFSQ0hfRElTQ09OVElHTUVNX0VOQUJMRQogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIHByb3ZpZGVzIGVuaGFuY2VkIHN1cHBvcnQgZm9yIGRpc2NvbnRpZ3VvdXMKQEAgLTUyLDcgKzUyLDcgQEAKIAkgIG1lbW9yeSBob3RwbHVnIHN5c3RlbXMuICBUaGlzIGlzIG5vcm1hbC4KIAogCSAgRm9yIG1hbnkgb3RoZXIgc3lzdGVtcywgdGhpcyB3aWxsIGJlIGFuIGFsdGVybmF0aXZlIHRvCi0JICAiRGlzY29udGlnaW91cyBNZW1vcnkiLiAgVGhpcyBvcHRpb24gcHJvdmlkZXMgc29tZSBwb3RlbnRpYWwKKwkgICJEaXNjb250aWd1b3VzIE1lbW9yeSIuICBUaGlzIG9wdGlvbiBwcm92aWRlcyBzb21lIHBvdGVudGlhbAogCSAgcGVyZm9ybWFuY2UgYmVuZWZpdHMsIGFsb25nIHdpdGggZGVjcmVhc2VkIGNvZGUgY29tcGxleGl0eSwKIAkgIGJ1dCBpdCBpcyBuZXdlciwgYW5kIG1vcmUgZXhwZXJpbWVudGFsLgogCmRpZmYgLS1naXQgYS9tbS9ib290bWVtLmMgYi9tbS9ib290bWVtLmMKaW5kZXggOGVjNGU0Yy4uYTU4Njk5YiAxMDA2NDQKLS0tIGEvbW0vYm9vdG1lbS5jCisrKyBiL21tL2Jvb3RtZW0uYwpAQCAtNjEsMTcgKzYxLDkgQEAKIHsKIAlib290bWVtX2RhdGFfdCAqYmRhdGEgPSBwZ2RhdC0+YmRhdGE7CiAJdW5zaWduZWQgbG9uZyBtYXBzaXplID0gKChlbmQgLSBzdGFydCkrNykvODsKLQlzdGF0aWMgc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdF9sYXN0OwogCi0JcGdkYXQtPnBnZGF0X25leHQgPSBOVUxMOwotCS8qIEFkZCBuZXcgbm9kZXMgbGFzdCBzbyB0aGF0IGJvb3RtZW0gYWx3YXlzIHN0YXJ0cwotCSAgIHNlYXJjaGluZyBpbiB0aGUgZmlyc3Qgbm9kZXMsIG5vdCB0aGUgbGFzdCBvbmVzICovCi0JaWYgKHBnZGF0X2xhc3QpCi0JCXBnZGF0X2xhc3QtPnBnZGF0X25leHQgPSBwZ2RhdDsKLQllbHNlIHsKLQkJcGdkYXRfbGlzdCA9IHBnZGF0OyAJCi0JCXBnZGF0X2xhc3QgPSBwZ2RhdDsKLQl9CisJcGdkYXQtPnBnZGF0X25leHQgPSBwZ2RhdF9saXN0OworCXBnZGF0X2xpc3QgPSBwZ2RhdDsKIAogCW1hcHNpemUgPSBBTElHTihtYXBzaXplLCBzaXplb2YobG9uZykpOwogCWJkYXRhLT5ub2RlX2Jvb3RtZW1fbWFwID0gcGh5c190b192aXJ0KG1hcHN0YXJ0IDw8IFBBR0VfU0hJRlQpOwpAQCAtMTYyLDEwICsxNTQsMTAgQEAKICAqLwogc3RhdGljIHZvaWQgKiBfX2luaXQKIF9fYWxsb2NfYm9vdG1lbV9jb3JlKHN0cnVjdCBib290bWVtX2RhdGEgKmJkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCXVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZ29hbCkKKwkgICAgICB1bnNpZ25lZCBsb25nIGFsaWduLCB1bnNpZ25lZCBsb25nIGdvYWwsIHVuc2lnbmVkIGxvbmcgbGltaXQpCiB7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHJlbWFpbmluZ19zaXplLCBhcmVhc2l6ZSwgcHJlZmVycmVkOwotCXVuc2lnbmVkIGxvbmcgaSwgc3RhcnQgPSAwLCBpbmNyLCBlaWR4OworCXVuc2lnbmVkIGxvbmcgaSwgc3RhcnQgPSAwLCBpbmNyLCBlaWR4LCBlbmRfcGZuID0gYmRhdGEtPm5vZGVfbG93X3BmbjsKIAl2b2lkICpyZXQ7CiAKIAlpZighc2l6ZSkgewpAQCAtMTc0LDcgKzE2NiwxNCBAQAogCX0KIAlCVUdfT04oYWxpZ24gJiAoYWxpZ24tMSkpOwogCi0JZWlkeCA9IGJkYXRhLT5ub2RlX2xvd19wZm4gLSAoYmRhdGEtPm5vZGVfYm9vdF9zdGFydCA+PiBQQUdFX1NISUZUKTsKKwlpZiAobGltaXQgJiYgYmRhdGEtPm5vZGVfYm9vdF9zdGFydCA+PSBsaW1pdCkKKwkJcmV0dXJuIE5VTEw7CisKKyAgICAgICAgbGltaXQgPj49UEFHRV9TSElGVDsKKwlpZiAobGltaXQgJiYgZW5kX3BmbiA+IGxpbWl0KQorCQllbmRfcGZuID0gbGltaXQ7CisKKwllaWR4ID0gZW5kX3BmbiAtIChiZGF0YS0+bm9kZV9ib290X3N0YXJ0ID4+IFBBR0VfU0hJRlQpOwogCW9mZnNldCA9IDA7CiAJaWYgKGFsaWduICYmCiAJICAgIChiZGF0YS0+bm9kZV9ib290X3N0YXJ0ICYgKGFsaWduIC0gMVVMKSkgIT0gMCkKQEAgLTE4NiwxMSArMTg1LDEyIEBACiAJICogZmlyc3QsIHRoZW4gd2UgdHJ5IHRvIGFsbG9jYXRlIGxvd2VyIHBhZ2VzLgogCSAqLwogCWlmIChnb2FsICYmIChnb2FsID49IGJkYXRhLT5ub2RlX2Jvb3Rfc3RhcnQpICYmIAotCSAgICAoKGdvYWwgPj4gUEFHRV9TSElGVCkgPCBiZGF0YS0+bm9kZV9sb3dfcGZuKSkgeworCSAgICAoKGdvYWwgPj4gUEFHRV9TSElGVCkgPCBlbmRfcGZuKSkgewogCQlwcmVmZXJyZWQgPSBnb2FsIC0gYmRhdGEtPm5vZGVfYm9vdF9zdGFydDsKIAogCQlpZiAoYmRhdGEtPmxhc3Rfc3VjY2VzcyA+PSBwcmVmZXJyZWQpCi0JCQlwcmVmZXJyZWQgPSBiZGF0YS0+bGFzdF9zdWNjZXNzOworCQkJaWYgKCFsaW1pdCB8fCAobGltaXQgJiYgbGltaXQgPiBiZGF0YS0+bGFzdF9zdWNjZXNzKSkKKwkJCQlwcmVmZXJyZWQgPSBiZGF0YS0+bGFzdF9zdWNjZXNzOwogCX0gZWxzZQogCQlwcmVmZXJyZWQgPSAwOwogCkBAIC0zOTAsMTQgKzM5MCwxNSBAQAogCXJldHVybihmcmVlX2FsbF9ib290bWVtX2NvcmUoTk9ERV9EQVRBKDApKSk7CiB9CiAKLXZvaWQgKiBfX2luaXQgX19hbGxvY19ib290bWVtICh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZ29hbCkKK3ZvaWQgKiBfX2luaXQgX19hbGxvY19ib290bWVtX2xpbWl0ICh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZ29hbCwKKwkJCQl1bnNpZ25lZCBsb25nIGxpbWl0KQogewogCXBnX2RhdGFfdCAqcGdkYXQgPSBwZ2RhdF9saXN0OwogCXZvaWQgKnB0cjsKIAogCWZvcl9lYWNoX3BnZGF0KHBnZGF0KQogCQlpZiAoKHB0ciA9IF9fYWxsb2NfYm9vdG1lbV9jb3JlKHBnZGF0LT5iZGF0YSwgc2l6ZSwKLQkJCQkJCWFsaWduLCBnb2FsKSkpCisJCQkJCQkgYWxpZ24sIGdvYWwsIGxpbWl0KSkpCiAJCQlyZXR1cm4ocHRyKTsKIAogCS8qCkBAIC00MDgsMTQgKzQwOSwxNiBAQAogCXJldHVybiBOVUxMOwogfQogCi12b2lkICogX19pbml0IF9fYWxsb2NfYm9vdG1lbV9ub2RlIChwZ19kYXRhX3QgKnBnZGF0LCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZ29hbCkKKwordm9pZCAqIF9faW5pdCBfX2FsbG9jX2Jvb3RtZW1fbm9kZV9saW1pdCAocGdfZGF0YV90ICpwZ2RhdCwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBnb2FsLCB1bnNpZ25lZCBsb25nIGxpbWl0KQogewogCXZvaWQgKnB0cjsKIAotCXB0ciA9IF9fYWxsb2NfYm9vdG1lbV9jb3JlKHBnZGF0LT5iZGF0YSwgc2l6ZSwgYWxpZ24sIGdvYWwpOworCXB0ciA9IF9fYWxsb2NfYm9vdG1lbV9jb3JlKHBnZGF0LT5iZGF0YSwgc2l6ZSwgYWxpZ24sIGdvYWwsIGxpbWl0KTsKIAlpZiAocHRyKQogCQlyZXR1cm4gKHB0cik7CiAKLQlyZXR1cm4gX19hbGxvY19ib290bWVtKHNpemUsIGFsaWduLCBnb2FsKTsKKwlyZXR1cm4gX19hbGxvY19ib290bWVtX2xpbWl0KHNpemUsIGFsaWduLCBnb2FsLCBsaW1pdCk7CiB9CiAKZGlmZiAtLWdpdCBhL21tL2ZyZW1hcC5jIGIvbW0vZnJlbWFwLmMKaW5kZXggMzIzNWZiNy4uYWIyM2EwNiAxMDA2NDQKLS0tIGEvbW0vZnJlbWFwLmMKKysrIGIvbW0vZnJlbWFwLmMKQEAgLTg5LDYgKzg5LDkgQEAKIAlzaXplID0gKGlfc2l6ZV9yZWFkKGlub2RlKSArIFBBR0VfQ0FDSEVfU0laRSAtIDEpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJaWYgKCFwYWdlLT5tYXBwaW5nIHx8IHBhZ2UtPmluZGV4ID49IHNpemUpCiAJCWdvdG8gZXJyX3VubG9jazsKKwllcnIgPSAtRU5PTUVNOworCWlmIChwYWdlX21hcGNvdW50KHBhZ2UpID4gSU5UX01BWC8yKQorCQlnb3RvIGVycl91bmxvY2s7CiAKIAl6YXBfcHRlKG1tLCB2bWEsIGFkZHIsIHB0ZSk7CiAKZGlmZiAtLWdpdCBhL21tL2hpZ2htZW0uYyBiL21tL2hpZ2htZW0uYwppbmRleCA0MDA5MTE1Li45MGUxODYxZSAxMDA2NDQKLS0tIGEvbW0vaGlnaG1lbS5jCisrKyBiL21tL2hpZ2htZW0uYwpAQCAtMzAsNyArMzAsNyBAQAogCiBzdGF0aWMgbWVtcG9vbF90ICpwYWdlX3Bvb2wsICppc2FfcGFnZV9wb29sOwogCi1zdGF0aWMgdm9pZCAqcGFnZV9wb29sX2FsbG9jKHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaywgdm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkICpwYWdlX3Bvb2xfYWxsb2MoZ2ZwX3QgZ2ZwX21hc2ssIHZvaWQgKmRhdGEpCiB7CiAJdW5zaWduZWQgaW50IGdmcCA9IGdmcF9tYXNrIHwgKHVuc2lnbmVkIGludCkgKGxvbmcpIGRhdGE7CiAKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA5MDFhYzUyLi42MWQzODA2IDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKKysrIGIvbW0vaHVnZXRsYi5jCkBAIC0yNzQsMjEgKzI3NCwyMiBAQAogewogCXB0ZV90ICpzcmNfcHRlLCAqZHN0X3B0ZSwgZW50cnk7CiAJc3RydWN0IHBhZ2UgKnB0ZXBhZ2U7Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gdm1hLT52bV9zdGFydDsKLQl1bnNpZ25lZCBsb25nIGVuZCA9IHZtYS0+dm1fZW5kOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAotCXdoaWxlIChhZGRyIDwgZW5kKSB7CisJZm9yIChhZGRyID0gdm1hLT52bV9zdGFydDsgYWRkciA8IHZtYS0+dm1fZW5kOyBhZGRyICs9IEhQQUdFX1NJWkUpIHsKIAkJZHN0X3B0ZSA9IGh1Z2VfcHRlX2FsbG9jKGRzdCwgYWRkcik7CiAJCWlmICghZHN0X3B0ZSkKIAkJCWdvdG8gbm9tZW07CisJCXNwaW5fbG9jaygmc3JjLT5wYWdlX3RhYmxlX2xvY2spOwogCQlzcmNfcHRlID0gaHVnZV9wdGVfb2Zmc2V0KHNyYywgYWRkcik7Ci0JCUJVR19PTighc3JjX3B0ZSB8fCBwdGVfbm9uZSgqc3JjX3B0ZSkpOyAvKiBwcmVmYXVsdGVkICovCi0JCWVudHJ5ID0gKnNyY19wdGU7Ci0JCXB0ZXBhZ2UgPSBwdGVfcGFnZShlbnRyeSk7Ci0JCWdldF9wYWdlKHB0ZXBhZ2UpOwotCQlhZGRfbW1fY291bnRlcihkc3QsIHJzcywgSFBBR0VfU0laRSAvIFBBR0VfU0laRSk7Ci0JCXNldF9odWdlX3B0ZV9hdChkc3QsIGFkZHIsIGRzdF9wdGUsIGVudHJ5KTsKLQkJYWRkciArPSBIUEFHRV9TSVpFOworCQlpZiAoc3JjX3B0ZSAmJiAhcHRlX25vbmUoKnNyY19wdGUpKSB7CisJCQllbnRyeSA9ICpzcmNfcHRlOworCQkJcHRlcGFnZSA9IHB0ZV9wYWdlKGVudHJ5KTsKKwkJCWdldF9wYWdlKHB0ZXBhZ2UpOworCQkJYWRkX21tX2NvdW50ZXIoZHN0LCByc3MsIEhQQUdFX1NJWkUgLyBQQUdFX1NJWkUpOworCQkJc2V0X2h1Z2VfcHRlX2F0KGRzdCwgYWRkciwgZHN0X3B0ZSwgZW50cnkpOworCQl9CisJCXNwaW5fdW5sb2NrKCZzcmMtPnBhZ2VfdGFibGVfbG9jayk7CiAJfQogCXJldHVybiAwOwogCkBAIC0zMjMsOCArMzI0LDggQEAKIAogCQlwYWdlID0gcHRlX3BhZ2UocHRlKTsKIAkJcHV0X3BhZ2UocGFnZSk7CisJCWFkZF9tbV9jb3VudGVyKG1tLCByc3MsICAtIChIUEFHRV9TSVpFIC8gUEFHRV9TSVpFKSk7CiAJfQotCWFkZF9tbV9jb3VudGVyKG1tLCByc3MsICAtKChlbmQgLSBzdGFydCkgPj4gUEFHRV9TSElGVCkpOwogCWZsdXNoX3RsYl9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpOwogfQogCkBAIC0zOTMsNiArMzk0LDI4IEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoKKyAqIE9uIGlhNjQgYXQgbGVhc3QsIGl0IGlzIHBvc3NpYmxlIHRvIHJlY2VpdmUgYSBodWdldGxiIGZhdWx0IGZyb20gYQorICogc3RhbGUgemVybyBlbnRyeSBsZWZ0IGluIHRoZSBUTEIgZnJvbSBlYXJsaWVyIGhhcmR3YXJlIHByZWZldGNoaW5nLgorICogTG93LWxldmVsIGFyY2ggY29kZSBzaG91bGQgYWxyZWFkeSBoYXZlIGZsdXNoZWQgdGhlIHN0YWxlIGVudHJ5IGFzCisgKiBwYXJ0IG9mIGl0cyBmYXVsdCBoYW5kbGluZywgYnV0IHdlIGRvIG5lZWQgdG8gYWNjZXB0IHRoaXMgbWlub3IgZmF1bHQKKyAqIGFuZCByZXR1cm4gc3VjY2Vzc2Z1bGx5LiAgV2hlcmVhcyB0aGUgIm5vcm1hbCIgY2FzZSBpcyB0aGF0IHRoaXMgaXMKKyAqIGFuIGFjY2VzcyB0byBhIGh1Z2V0bGIgcGFnZSB3aGljaCBoYXMgYmVlbiB0cnVuY2F0ZWQgb2ZmIHNpbmNlIG1tYXAuCisgKi8KK2ludCBodWdldGxiX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IHdyaXRlX2FjY2VzcykKK3sKKwlpbnQgcmV0ID0gVk1fRkFVTFRfU0lHQlVTOworCXB0ZV90ICpwdGU7CisKKwlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOworCXB0ZSA9IGh1Z2VfcHRlX29mZnNldChtbSwgYWRkcmVzcyk7CisJaWYgKHB0ZSAmJiAhcHRlX25vbmUoKnB0ZSkpCisJCXJldCA9IFZNX0ZBVUxUX01JTk9SOworCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCiBpbnQgZm9sbG93X2h1Z2V0bGJfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFzLAogCQkJdW5zaWduZWQgbG9uZyAqcG9zaXRpb24sIGludCAqbGVuZ3RoLCBpbnQgaSkKQEAgLTQwMyw2ICs0MjYsNyBAQAogCUJVR19PTighaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpOwogCiAJdnBmbiA9IHZhZGRyL1BBR0VfU0laRTsKKwlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogCXdoaWxlICh2YWRkciA8IHZtYS0+dm1fZW5kICYmIHJlbWFpbmRlcikgewogCiAJCWlmIChwYWdlcykgewpAQCAtNDE1LDggKzQzOSwxMyBAQAogCQkJICogaW5kZXhpbmcgYmVsb3cgdG8gd29yay4gKi8KIAkJCXB0ZSA9IGh1Z2VfcHRlX29mZnNldChtbSwgdmFkZHIgJiBIUEFHRV9NQVNLKTsKIAotCQkJLyogaHVnZXRsYiBzaG91bGQgYmUgbG9ja2VkLCBhbmQgaGVuY2UsIHByZWZhdWx0ZWQgKi8KLQkJCVdBUk5fT04oIXB0ZSB8fCBwdGVfbm9uZSgqcHRlKSk7CisJCQkvKiB0aGUgaHVnZXRsYiBmaWxlIG1pZ2h0IGhhdmUgYmVlbiB0cnVuY2F0ZWQgKi8KKwkJCWlmICghcHRlIHx8IHB0ZV9ub25lKCpwdGUpKSB7CisJCQkJcmVtYWluZGVyID0gMDsKKwkJCQlpZiAoIWkpCisJCQkJCWkgPSAtRUZBVUxUOworCQkJCWJyZWFrOworCQkJfQogCiAJCQlwYWdlID0gJnB0ZV9wYWdlKCpwdGUpW3ZwZm4gJSAoSFBBR0VfU0laRS9QQUdFX1NJWkUpXTsKIApAQCAtNDM0LDcgKzQ2Myw3IEBACiAJCS0tcmVtYWluZGVyOwogCQkrK2k7CiAJfQotCisJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogCSpsZW5ndGggPSByZW1haW5kZXI7CiAJKnBvc2l0aW9uID0gdmFkZHI7CiAKZGlmZiAtLWdpdCBhL21tL21hZHZpc2UuYyBiL21tL21hZHZpc2UuYwppbmRleCA0NDU0OTM2Li4yMGUwNzVkIDEwMDY0NAotLS0gYS9tbS9tYWR2aXNlLmMKKysrIGIvbW0vbWFkdmlzZS5jCkBAIC04Myw2ICs4Myw5IEBACiB7CiAJc3RydWN0IGZpbGUgKmZpbGUgPSB2bWEtPnZtX2ZpbGU7CiAKKwlpZiAoIWZpbGUpCisJCXJldHVybiAtRUJBREY7CisKIAlpZiAoZmlsZS0+Zl9tYXBwaW5nLT5hX29wcy0+Z2V0X3hpcF9wYWdlKSB7CiAJCS8qIG5vIGJhZCByZXR1cm4gdmFsdWUsIGJ1dCBpZ25vcmUgYWR2aWNlICovCiAJCXJldHVybiAwOwpAQCAtMTQxLDExICsxNDQsNyBAQAogbWFkdmlzZV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnByZXYsCiAJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgYmVoYXZpb3IpCiB7Ci0Jc3RydWN0IGZpbGUgKmZpbHAgPSB2bWEtPnZtX2ZpbGU7Ci0JbG9uZyBlcnJvciA9IC1FQkFERjsKLQotCWlmICghZmlscCkKLQkJZ290byAgb3V0OworCWxvbmcgZXJyb3I7CiAKIAlzd2l0Y2ggKGJlaGF2aW9yKSB7CiAJY2FzZSBNQURWX05PUk1BTDoKQEAgLTE2Niw4ICsxNjUsNiBAQAogCQllcnJvciA9IC1FSU5WQUw7CiAJCWJyZWFrOwogCX0KLQkJCi1vdXQ6CiAJcmV0dXJuIGVycm9yOwogfQogCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IGFlODE2MWYuLjFkYjQwZTkgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCisrKyBiL21tL21lbW9yeS5jCkBAIC0yMDQ1LDggKzIwNDUsOCBAQAogCiAJaW5jX3BhZ2Vfc3RhdGUocGdmYXVsdCk7CiAKLQlpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpCi0JCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CS8qIG1hcHBpbmcgdHJ1bmNhdGlvbiBkb2VzIHRoaXMuICovCisJaWYgKHVubGlrZWx5KGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKSkKKwkJcmV0dXJuIGh1Z2V0bGJfZmF1bHQobW0sIHZtYSwgYWRkcmVzcywgd3JpdGVfYWNjZXNzKTsKIAogCS8qCiAJICogV2UgbmVlZCB0aGUgcGFnZSB0YWJsZSBsb2NrIHRvIHN5bmNocm9uaXplIHdpdGgga3N3YXBkCmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IDkwMzNmMDguLjM3YWY0NDMgMTAwNjQ0Ci0tLSBhL21tL21lbXBvbGljeS5jCisrKyBiL21tL21lbXBvbGljeS5jCkBAIC02ODcsNyArNjg3LDcgQEAKIH0KIAogLyogUmV0dXJuIGEgem9uZWxpc3QgcmVwcmVzZW50aW5nIGEgbWVtcG9saWN5ICovCi1zdGF0aWMgc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdF9wb2xpY3kodW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCwgc3RydWN0IG1lbXBvbGljeSAqcG9saWN5KQorc3RhdGljIHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3RfcG9saWN5KGdmcF90IGdmcCwgc3RydWN0IG1lbXBvbGljeSAqcG9saWN5KQogewogCWludCBuZDsKIApAQCAtNzUxLDcgKzc1MSw3IEBACiAKIC8qIEFsbG9jYXRlIGEgcGFnZSBpbiBpbnRlcmxlYXZlZCBwb2xpY3kuCiAgICBPd24gcGF0aCBiZWNhdXNlIGl0IG5lZWRzIHRvIGRvIHNwZWNpYWwgYWNjb3VudGluZy4gKi8KLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZV9pbnRlcmxlYXZlKHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnAsIHVuc2lnbmVkIG9yZGVyLCB1bnNpZ25lZCBuaWQpCitzdGF0aWMgc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VfaW50ZXJsZWF2ZShnZnBfdCBnZnAsIHVuc2lnbmVkIG9yZGVyLCB1bnNpZ25lZCBuaWQpCiB7CiAJc3RydWN0IHpvbmVsaXN0ICp6bDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKQEAgLTc4OSw3ICs3ODksNyBAQAogICoJU2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBtbV9zZW0gb2YgdGhlIHZtYSBob2xkLgogICovCiBzdHJ1Y3QgcGFnZSAqCi1hbGxvY19wYWdlX3ZtYSh1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQorYWxsb2NfcGFnZV92bWEoZ2ZwX3QgZ2ZwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXN0cnVjdCBtZW1wb2xpY3kgKnBvbCA9IGdldF92bWFfcG9saWN5KGN1cnJlbnQsIHZtYSwgYWRkcik7CiAKQEAgLTgzMiw3ICs4MzIsNyBAQAogICoJMSkgaXQncyBvayB0byB0YWtlIGNwdXNldF9zZW0gKGNhbiBXQUlUKSwgYW5kCiAgKgkyKSBhbGxvY2F0aW5nIGZvciBjdXJyZW50IHRhc2sgKG5vdCBpbnRlcnJ1cHQpLgogICovCi1zdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfY3VycmVudCh1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwLCB1bnNpZ25lZCBvcmRlcikKK3N0cnVjdCBwYWdlICphbGxvY19wYWdlc19jdXJyZW50KGdmcF90IGdmcCwgdW5zaWduZWQgb3JkZXIpCiB7CiAJc3RydWN0IG1lbXBvbGljeSAqcG9sID0gY3VycmVudC0+bWVtcG9saWN5OwogCmRpZmYgLS1naXQgYS9tbS9tZW1wb29sLmMgYi9tbS9tZW1wb29sLmMKaW5kZXggNjVmMjk1Ny4uOWUzNzdlYSAxMDA2NDQKLS0tIGEvbW0vbWVtcG9vbC5jCisrKyBiL21tL21lbXBvb2wuYwpAQCAtMTEyLDcgKzExMiw3IEBACiAgKiB3aGlsZSB0aGlzIGZ1bmN0aW9uIGlzIHJ1bm5pbmcuIG1lbXBvb2xfYWxsb2MoKSAmIG1lbXBvb2xfZnJlZSgpCiAgKiBtaWdodCBiZSBjYWxsZWQgKGVnLiBmcm9tIElSUSBjb250ZXh0cykgd2hpbGUgdGhpcyBmdW5jdGlvbiBleGVjdXRlcy4KICAqLwotaW50IG1lbXBvb2xfcmVzaXplKG1lbXBvb2xfdCAqcG9vbCwgaW50IG5ld19taW5fbnIsIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaykKK2ludCBtZW1wb29sX3Jlc2l6ZShtZW1wb29sX3QgKnBvb2wsIGludCBuZXdfbWluX25yLCBnZnBfdCBnZnBfbWFzaykKIHsKIAl2b2lkICplbGVtZW50OwogCXZvaWQgKipuZXdfZWxlbWVudHM7CkBAIC0yMDAsNyArMjAwLDcgQEAKICAqICpuZXZlciogZmFpbHMgd2hlbiBjYWxsZWQgZnJvbSBwcm9jZXNzIGNvbnRleHRzLiAoaXQgbWlnaHQKICAqIGZhaWwgaWYgY2FsbGVkIGZyb20gYW4gSVJRIGNvbnRleHQuKQogICovCi12b2lkICogbWVtcG9vbF9hbGxvYyhtZW1wb29sX3QgKnBvb2wsIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaykKK3ZvaWQgKiBtZW1wb29sX2FsbG9jKG1lbXBvb2xfdCAqcG9vbCwgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJdm9pZCAqZWxlbWVudDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjc2LDcgKzI3Niw3IEBACiAvKgogICogQSBjb21tb25seSB1c2VkIGFsbG9jIGFuZCBmcmVlIGZuLgogICovCi12b2lkICptZW1wb29sX2FsbG9jX3NsYWIodW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrLCB2b2lkICpwb29sX2RhdGEpCit2b2lkICptZW1wb29sX2FsbG9jX3NsYWIoZ2ZwX3QgZ2ZwX21hc2ssIHZvaWQgKnBvb2xfZGF0YSkKIHsKIAlrbWVtX2NhY2hlX3QgKm1lbSA9IChrbWVtX2NhY2hlX3QgKikgcG9vbF9kYXRhOwogCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKG1lbSwgZ2ZwX21hc2spOwpkaWZmIC0tZ2l0IGEvbW0vbW1hcC5jIGIvbW0vbW1hcC5jCmluZGV4IDhiOGUwNWYuLmZhMTFkOTEgMTAwNjQ0Ci0tLSBhL21tL21tYXAuYworKysgYi9tbS9tbWFwLmMKQEAgLTE2NDAsNyArMTY0MCw3IEBACiAvKgogICogR2V0IHJpZCBvZiBwYWdlIHRhYmxlIGluZm9ybWF0aW9uIGluIHRoZSBpbmRpY2F0ZWQgcmVnaW9uLgogICoKLSAqIENhbGxlZCB3aXRoIHRoZSBwYWdlIHRhYmxlIGxvY2sgaGVsZC4KKyAqIENhbGxlZCB3aXRoIHRoZSBtbSBzZW1hcGhvcmUgaGVsZC4KICAqLwogc3RhdGljIHZvaWQgdW5tYXBfcmVnaW9uKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2LApkaWZmIC0tZ2l0IGEvbW0vbXByb3RlY3QuYyBiL21tL21wcm90ZWN0LmMKaW5kZXggZTlmYmQwMS4uNTc1NzdmNiAxMDA2NDQKLS0tIGEvbW0vbXByb3RlY3QuYworKysgYi9tbS9tcHJvdGVjdC5jCkBAIC0yNDgsNyArMjQ4LDggQEAKIAogCQluZXdmbGFncyA9IHZtX2ZsYWdzIHwgKHZtYS0+dm1fZmxhZ3MgJiB+KFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMpKTsKIAotCQlpZiAoKG5ld2ZsYWdzICYgfihuZXdmbGFncyA+PiA0KSkgJiAweGYpIHsKKwkJLyogbmV3ZmxhZ3MgPj4gNCBzaGlmdCBWTV9NQVklIGluIHBsYWNlIG9mIFZNXyUgKi8KKwkJaWYgKChuZXdmbGFncyAmIH4obmV3ZmxhZ3MgPj4gNCkpICYgKFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMpKSB7CiAJCQllcnJvciA9IC1FQUNDRVM7CiAJCQlnb3RvIG91dDsKIAkJfQpkaWZmIC0tZ2l0IGEvbW0vbXJlbWFwLmMgYi9tbS9tcmVtYXAuYwppbmRleCBhMzJmZWQ0Li5mMzQzZmM3IDEwMDY0NAotLS0gYS9tbS9tcmVtYXAuYworKysgYi9tbS9tcmVtYXAuYwpAQCAtMTQxLDEwICsxNDEsMTAgQEAKIAkJCWlmIChkc3QpIHsKIAkJCQlwdGVfdCBwdGU7CiAJCQkJcHRlID0gcHRlcF9jbGVhcl9mbHVzaCh2bWEsIG9sZF9hZGRyLCBzcmMpOworCiAJCQkJLyogWkVST19QQUdFIGNhbiBiZSBkZXBlbmRhbnQgb24gdmlydHVhbCBhZGRyICovCi0JCQkJaWYgKHBmbl92YWxpZChwdGVfcGZuKHB0ZSkpICYmCi0JCQkJCXB0ZV9wYWdlKHB0ZSkgPT0gWkVST19QQUdFKG9sZF9hZGRyKSkKLQkJCQkJcHRlID0gcHRlX3dycHJvdGVjdChta19wdGUoWkVST19QQUdFKG5ld19hZGRyKSwgbmV3X3ZtYS0+dm1fcGFnZV9wcm90KSk7CisJCQkJcHRlID0gbW92ZV9wdGUocHRlLCBuZXdfdm1hLT52bV9wYWdlX3Byb3QsCisJCQkJCQkJb2xkX2FkZHIsIG5ld19hZGRyKTsKIAkJCQlzZXRfcHRlX2F0KG1tLCBuZXdfYWRkciwgZHN0LCBwdGUpOwogCQkJfSBlbHNlCiAJCQkJZXJyb3IgPSAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvbW0vbm9tbXUuYyBiL21tL25vbW11LmMKaW5kZXggMDY0ZDcwNC4uMGVmMjQxYSAxMDA2NDQKLS0tIGEvbW0vbm9tbXUuYworKysgYi9tbS9ub21tdS5jCkBAIC0xNTcsOCArMTU3LDcgQEAKIAlrZnJlZShhZGRyKTsKIH0KIAotdm9pZCAqX192bWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrLAotCQkJcGdwcm90X3QgcHJvdCkKK3ZvaWQgKl9fdm1hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUsIGdmcF90IGdmcF9tYXNrLCBwZ3Byb3RfdCBwcm90KQogewogCS8qCiAJICoga21hbGxvYyBkb2Vzbid0IGxpa2UgX19HRlBfSElHSE1FTSBmb3Igc29tZSByZWFzb24KZGlmZiAtLWdpdCBhL21tL29vbV9raWxsLmMgYi9tbS9vb21fa2lsbC5jCmluZGV4IGFjM2JmMzMuLmQzNDhiOTAgMTAwNjQ0Ci0tLSBhL21tL29vbV9raWxsLmMKKysrIGIvbW0vb29tX2tpbGwuYwpAQCAtMjYzLDcgKzI2Myw3IEBACiAgKiBPUiB0cnkgdG8gYmUgc21hcnQgYWJvdXQgd2hpY2ggcHJvY2VzcyB0byBraWxsLiBOb3RlIHRoYXQgd2UKICAqIGRvbid0IGhhdmUgdG8gYmUgcGVyZmVjdCBoZXJlLCB3ZSBqdXN0IGhhdmUgdG8gYmUgZ29vZC4KICAqLwotdm9pZCBvdXRfb2ZfbWVtb3J5KHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaywgaW50IG9yZGVyKQordm9pZCBvdXRfb2ZfbWVtb3J5KGdmcF90IGdmcF9tYXNrLCBpbnQgb3JkZXIpCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBOVUxMOwogCXRhc2tfdCAqIHA7CmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggYWUyOTAzMy4uZTFkM2Q3NyAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtNjcxLDcgKzY3MSw3IEBACiAJZnJlZV9ob3RfY29sZF9wYWdlKHBhZ2UsIDEpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcHJlcF96ZXJvX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlciwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9mbGFncykKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVwX3plcm9fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyLCBnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJaW50IGk7CiAKQEAgLTY4Niw3ICs2ODYsNyBAQAogICogb3IgdHdvLgogICovCiBzdGF0aWMgc3RydWN0IHBhZ2UgKgotYnVmZmVyZWRfcm1xdWV1ZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX2ZsYWdzKQorYnVmZmVyZWRfcm1xdWV1ZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLCBnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CkBAIC03NjEsNyArNzYxLDcgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQKLXNob3VsZF9yZWNsYWltX3pvbmUoc3RydWN0IHpvbmUgKnosIHVuc2lnbmVkIGludCBnZnBfbWFzaykKK3Nob3VsZF9yZWNsYWltX3pvbmUoc3RydWN0IHpvbmUgKnosIGdmcF90IGdmcF9tYXNrKQogewogCWlmICghei0+cmVjbGFpbV9wYWdlcykKIAkJcmV0dXJuIDA7CkBAIC03NzQsNyArNzc0LDcgQEAKICAqIFRoaXMgaXMgdGhlICdoZWFydCcgb2YgdGhlIHpvbmVkIGJ1ZGR5IGFsbG9jYXRvci4KICAqLwogc3RydWN0IHBhZ2UgKiBmYXN0Y2FsbAotX19hbGxvY19wYWdlcyh1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwKK19fYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwKIAkJc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCkKIHsKIAljb25zdCBpbnQgd2FpdCA9IGdmcF9tYXNrICYgX19HRlBfV0FJVDsKQEAgLTk3Nyw3ICs5NzcsNyBAQAogLyoKICAqIENvbW1vbiBoZWxwZXIgZnVuY3Rpb25zLgogICovCi1mYXN0Y2FsbCB1bnNpZ25lZCBsb25nIF9fZ2V0X2ZyZWVfcGFnZXModW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpCitmYXN0Y2FsbCB1bnNpZ25lZCBsb25nIF9fZ2V0X2ZyZWVfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcikKIHsKIAlzdHJ1Y3QgcGFnZSAqIHBhZ2U7CiAJcGFnZSA9IGFsbG9jX3BhZ2VzKGdmcF9tYXNrLCBvcmRlcik7CkBAIC05ODgsNyArOTg4LDcgQEAKIAogRVhQT1JUX1NZTUJPTChfX2dldF9mcmVlX3BhZ2VzKTsKIAotZmFzdGNhbGwgdW5zaWduZWQgbG9uZyBnZXRfemVyb2VkX3BhZ2UodW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrKQorZmFzdGNhbGwgdW5zaWduZWQgbG9uZyBnZXRfemVyb2VkX3BhZ2UoZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJc3RydWN0IHBhZ2UgKiBwYWdlOwogCkBAIC0xNzUwLDYgKzE3NTAsOCBAQAogewogCXN0cnVjdCBwZXJfY3B1X3BhZ2VzICpwY3A7CiAKKwltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7CisKIAlwY3AgPSAmcC0+cGNwWzBdOwkJLyogaG90ICovCiAJcGNwLT5jb3VudCA9IDA7CiAJcGNwLT5sb3cgPSAyICogYmF0Y2g7CmRpZmYgLS1naXQgYS9tbS9wYWdlX2lvLmMgYi9tbS9wYWdlX2lvLmMKaW5kZXggMmU2MDVhMS4uMzMwZTAwZCAxMDA2NDQKLS0tIGEvbW0vcGFnZV9pby5jCisrKyBiL21tL3BhZ2VfaW8uYwpAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgYmlvICpnZXRfc3dhcF9iaW8odW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9mbGFncywgcGdvZmZfdCBpbmRleCwKK3N0YXRpYyBzdHJ1Y3QgYmlvICpnZXRfc3dhcF9iaW8oZ2ZwX3QgZ2ZwX2ZsYWdzLCBwZ29mZl90IGluZGV4LAogCQkJCXN0cnVjdCBwYWdlICpwYWdlLCBiaW9fZW5kX2lvX3QgZW5kX2lvKQogewogCXN0cnVjdCBiaW8gKmJpbzsKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IDFmN2FlYjIuLmVhMDY0ZDggMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKKysrIGIvbW0vc2htZW0uYwpAQCAtOTIxLDggKzkyMSw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKgotc2htZW1fYWxsb2NfcGFnZSh1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwLHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvLAotCQkJCSB1bnNpZ25lZCBsb25nIGlkeCkKK3NobWVtX2FsbG9jX3BhZ2UoZ2ZwX3QgZ2ZwLHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvLCB1bnNpZ25lZCBsb25nIGlkeCkKIHsKIAlyZXR1cm4gYWxsb2NfcGFnZShnZnAgfCBfX0dGUF9aRVJPKTsKIH0KZGlmZiAtLWdpdCBhL21tL3NsYWIuYyBiL21tL3NsYWIuYwppbmRleCA0MzdkMzM4Li5kMDVjNjc4IDEwMDY0NAotLS0gYS9tbS9zbGFiLmMKKysrIGIvbW0vc2xhYi5jCkBAIC0zMDgsMTIgKzMwOCwxMiBAQAogI2RlZmluZQlTSVpFX0wzICgxICsgTUFYX05VTU5PREVTKQogCiAvKgotICogVGhpcyBmdW5jdGlvbiBtYXkgYmUgY29tcGxldGVseSBvcHRpbWl6ZWQgYXdheSBpZgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNvbXBsZXRlbHkgb3B0aW1pemVkIGF3YXkgaWYKICAqIGEgY29uc3RhbnQgaXMgcGFzc2VkIHRvIGl0LiBNb3N0bHkgdGhlIHNhbWUgYXMKICAqIHdoYXQgaXMgaW4gbGludXgvc2xhYi5oIGV4Y2VwdCBpdCByZXR1cm5zIGFuCiAgKiBpbmRleC4KICAqLwotc3RhdGljIGlubGluZSBpbnQgaW5kZXhfb2YoY29uc3Qgc2l6ZV90IHNpemUpCitzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBpbmRleF9vZihjb25zdCBzaXplX3Qgc2l6ZSkKIHsKIAlpZiAoX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZSkpIHsKIAkJaW50IGkgPSAwOwpAQCAtMzI5LDcgKzMyOSw4IEBACiAJCQlleHRlcm4gdm9pZCBfX2JhZF9zaXplKHZvaWQpOwogCQkJX19iYWRfc2l6ZSgpOwogCQl9Ci0JfQorCX0gZWxzZQorCQlCVUcoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjM5LDcgKzY0MCw3IEBACiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgd29ya19zdHJ1Y3QsIHJlYXBfd29yayk7CiAKLXN0YXRpYyB2b2lkIGZyZWVfYmxvY2soa21lbV9jYWNoZV90KiBjYWNoZXAsIHZvaWQqKiBvYmpwcCwgaW50IGxlbik7CitzdGF0aWMgdm9pZCBmcmVlX2Jsb2NrKGttZW1fY2FjaGVfdCogY2FjaGVwLCB2b2lkKiogb2JqcHAsIGludCBsZW4sIGludCBub2RlKTsKIHN0YXRpYyB2b2lkIGVuYWJsZV9jcHVjYWNoZSAoa21lbV9jYWNoZV90ICpjYWNoZXApOwogc3RhdGljIHZvaWQgY2FjaGVfcmVhcCAodm9pZCAqdW51c2VkKTsKIHN0YXRpYyBpbnQgX19ub2RlX3NocmluayhrbWVtX2NhY2hlX3QgKmNhY2hlcCwgaW50IG5vZGUpOwpAQCAtNjQ5LDggKzY1MCw3IEBACiAJcmV0dXJuIGNhY2hlcC0+YXJyYXlbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKIH0KIAotc3RhdGljIGlubGluZSBrbWVtX2NhY2hlX3QgKl9fZmluZF9nZW5lcmFsX2NhY2hlcChzaXplX3Qgc2l6ZSwKLQkJCQkJCXVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBmbGFncykKK3N0YXRpYyBpbmxpbmUga21lbV9jYWNoZV90ICpfX2ZpbmRfZ2VuZXJhbF9jYWNoZXAoc2l6ZV90IHNpemUsIGdmcF90IGdmcGZsYWdzKQogewogCXN0cnVjdCBjYWNoZV9zaXplcyAqY3NpemVwID0gbWFsbG9jX3NpemVzOwogCkBAIC02NzQsOCArNjc0LDcgQEAKIAlyZXR1cm4gY3NpemVwLT5jc19jYWNoZXA7CiB9CiAKLWttZW1fY2FjaGVfdCAqa21lbV9maW5kX2dlbmVyYWxfY2FjaGVwKHNpemVfdCBzaXplLAotCQl1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwZmxhZ3MpCitrbWVtX2NhY2hlX3QgKmttZW1fZmluZF9nZW5lcmFsX2NhY2hlcChzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwZmxhZ3MpCiB7CiAJcmV0dXJuIF9fZmluZF9nZW5lcmFsX2NhY2hlcChzaXplLCBnZnBmbGFncyk7CiB9CkBAIC04MDQsNyArODAzLDcgQEAKIAogCWlmIChhYy0+YXZhaWwpIHsKIAkJc3Bpbl9sb2NrKCZybDMtPmxpc3RfbG9jayk7Ci0JCWZyZWVfYmxvY2soY2FjaGVwLCBhYy0+ZW50cnksIGFjLT5hdmFpbCk7CisJCWZyZWVfYmxvY2soY2FjaGVwLCBhYy0+ZW50cnksIGFjLT5hdmFpbCwgbm9kZSk7CiAJCWFjLT5hdmFpbCA9IDA7CiAJCXNwaW5fdW5sb2NrKCZybDMtPmxpc3RfbG9jayk7CiAJfQpAQCAtOTI1LDcgKzkyNCw3IEBACiAJCQkvKiBGcmVlIGxpbWl0IGZvciB0aGlzIGttZW1fbGlzdDMgKi8KIAkJCWwzLT5mcmVlX2xpbWl0IC09IGNhY2hlcC0+YmF0Y2hjb3VudDsKIAkJCWlmIChuYykKLQkJCQlmcmVlX2Jsb2NrKGNhY2hlcCwgbmMtPmVudHJ5LCBuYy0+YXZhaWwpOworCQkJCWZyZWVfYmxvY2soY2FjaGVwLCBuYy0+ZW50cnksIG5jLT5hdmFpbCwgbm9kZSk7CiAKIAkJCWlmICghY3B1c19lbXB0eShtYXNrKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGluX3VubG9jaygmbDMtPmxpc3RfbG9jayk7CkBAIC05MzQsNyArOTMzLDcgQEAKIAogCQkJaWYgKGwzLT5zaGFyZWQpIHsKIAkJCQlmcmVlX2Jsb2NrKGNhY2hlcCwgbDMtPnNoYXJlZC0+ZW50cnksCi0JCQkJCQlsMy0+c2hhcmVkLT5hdmFpbCk7CisJCQkJCQlsMy0+c2hhcmVkLT5hdmFpbCwgbm9kZSk7CiAJCQkJa2ZyZWUobDMtPnNoYXJlZCk7CiAJCQkJbDMtPnNoYXJlZCA9IE5VTEw7CiAJCQl9CkBAIC0xMTg0LDcgKzExODMsNyBAQAogICogZGlkIG5vdCByZXF1ZXN0IGRtYWFibGUgbWVtb3J5LCB3ZSBtaWdodCBnZXQgaXQsIGJ1dCB0aGF0CiAgKiB3b3VsZCBiZSByZWxhdGl2ZWx5IHJhcmUgYW5kIGlnbm9yYWJsZS4KICAqLwotc3RhdGljIHZvaWQgKmttZW1fZ2V0cGFnZXMoa21lbV9jYWNoZV90ICpjYWNoZXAsIHVuc2lnbmVkIGludCBfX25vY2FzdCBmbGFncywgaW50IG5vZGVpZCkKK3N0YXRpYyB2b2lkICprbWVtX2dldHBhZ2VzKGttZW1fY2FjaGVfdCAqY2FjaGVwLCBnZnBfdCBmbGFncywgaW50IG5vZGVpZCkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAl2b2lkICphZGRyOwpAQCAtMTg4MiwxMiArMTg4MSwxMyBAQAogewogCWttZW1fY2FjaGVfdCAqY2FjaGVwID0gKGttZW1fY2FjaGVfdCopYXJnOwogCXN0cnVjdCBhcnJheV9jYWNoZSAqYWM7CisJaW50IG5vZGUgPSBudW1hX25vZGVfaWQoKTsKIAogCWNoZWNrX2lycV9vZmYoKTsKIAlhYyA9IGFjX2RhdGEoY2FjaGVwKTsKLQlzcGluX2xvY2soJmNhY2hlcC0+bm9kZWxpc3RzW251bWFfbm9kZV9pZCgpXS0+bGlzdF9sb2NrKTsKLQlmcmVlX2Jsb2NrKGNhY2hlcCwgYWMtPmVudHJ5LCBhYy0+YXZhaWwpOwotCXNwaW5fdW5sb2NrKCZjYWNoZXAtPm5vZGVsaXN0c1tudW1hX25vZGVfaWQoKV0tPmxpc3RfbG9jayk7CisJc3Bpbl9sb2NrKCZjYWNoZXAtPm5vZGVsaXN0c1tub2RlXS0+bGlzdF9sb2NrKTsKKwlmcmVlX2Jsb2NrKGNhY2hlcCwgYWMtPmVudHJ5LCBhYy0+YXZhaWwsIG5vZGUpOworCXNwaW5fdW5sb2NrKCZjYWNoZXAtPm5vZGVsaXN0c1tub2RlXS0+bGlzdF9sb2NrKTsKIAlhYy0+YXZhaWwgPSAwOwogfQogCkBAIC0yMDQ2LDcgKzIwNDYsNyBAQAogCiAvKiBHZXQgdGhlIG1lbW9yeSBmb3IgYSBzbGFiIG1hbmFnZW1lbnQgb2JqLiAqLwogc3RhdGljIHN0cnVjdCBzbGFiKiBhbGxvY19zbGFibWdtdChrbWVtX2NhY2hlX3QgKmNhY2hlcCwgdm9pZCAqb2JqcCwKLQkJCWludCBjb2xvdXJfb2ZmLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgbG9jYWxfZmxhZ3MpCisJCQlpbnQgY29sb3VyX29mZiwgZ2ZwX3QgbG9jYWxfZmxhZ3MpCiB7CiAJc3RydWN0IHNsYWIgKnNsYWJwOwogCQpAQCAtMjE0Nyw3ICsyMTQ3LDcgQEAKICAqIEdyb3cgKGJ5IDEpIHRoZSBudW1iZXIgb2Ygc2xhYnMgd2l0aGluIGEgY2FjaGUuICBUaGlzIGlzIGNhbGxlZCBieQogICoga21lbV9jYWNoZV9hbGxvYygpIHdoZW4gdGhlcmUgYXJlIG5vIGFjdGl2ZSBvYmpzIGxlZnQgaW4gYSBjYWNoZS4KICAqLwotc3RhdGljIGludCBjYWNoZV9ncm93KGttZW1fY2FjaGVfdCAqY2FjaGVwLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZ3MsIGludCBub2RlaWQpCitzdGF0aWMgaW50IGNhY2hlX2dyb3coa21lbV9jYWNoZV90ICpjYWNoZXAsIGdmcF90IGZsYWdzLCBpbnQgbm9kZWlkKQogewogCXN0cnVjdCBzbGFiCSpzbGFicDsKIAl2b2lkCQkqb2JqcDsKQEAgLTIzNTQsNyArMjM1NCw3IEBACiAjZGVmaW5lIGNoZWNrX3NsYWJwKHgseSkgZG8geyB9IHdoaWxlKDApCiAjZW5kaWYKIAotc3RhdGljIHZvaWQgKmNhY2hlX2FsbG9jX3JlZmlsbChrbWVtX2NhY2hlX3QgKmNhY2hlcCwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGZsYWdzKQorc3RhdGljIHZvaWQgKmNhY2hlX2FsbG9jX3JlZmlsbChrbWVtX2NhY2hlX3QgKmNhY2hlcCwgZ2ZwX3QgZmxhZ3MpCiB7CiAJaW50IGJhdGNoY291bnQ7CiAJc3RydWN0IGttZW1fbGlzdDMgKmwzOwpAQCAtMjQ1NCw3ICsyNDU0LDcgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1jYWNoZV9hbGxvY19kZWJ1Z2NoZWNrX2JlZm9yZShrbWVtX2NhY2hlX3QgKmNhY2hlcCwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGZsYWdzKQorY2FjaGVfYWxsb2NfZGVidWdjaGVja19iZWZvcmUoa21lbV9jYWNoZV90ICpjYWNoZXAsIGdmcF90IGZsYWdzKQogewogCW1pZ2h0X3NsZWVwX2lmKGZsYWdzICYgX19HRlBfV0FJVCk7CiAjaWYgREVCVUcKQEAgLTI0NjUsNyArMjQ2NSw3IEBACiAjaWYgREVCVUcKIHN0YXRpYyB2b2lkICoKIGNhY2hlX2FsbG9jX2RlYnVnY2hlY2tfYWZ0ZXIoa21lbV9jYWNoZV90ICpjYWNoZXAsCi0JCQl1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZ3MsIHZvaWQgKm9ianAsIHZvaWQgKmNhbGxlcikKKwkJCWdmcF90IGZsYWdzLCB2b2lkICpvYmpwLCB2b2lkICpjYWxsZXIpCiB7CiAJaWYgKCFvYmpwKQkKIAkJcmV0dXJuIG9ianA7CkBAIC0yNTA4LDE2ICsyNTA4LDEyIEBACiAjZGVmaW5lIGNhY2hlX2FsbG9jX2RlYnVnY2hlY2tfYWZ0ZXIoYSxiLG9ianAsZCkgKG9ianApCiAjZW5kaWYKIAotCi1zdGF0aWMgaW5saW5lIHZvaWQgKl9fY2FjaGVfYWxsb2Moa21lbV9jYWNoZV90ICpjYWNoZXAsIHVuc2lnbmVkIGludCBfX25vY2FzdCBmbGFncykKK3N0YXRpYyBpbmxpbmUgdm9pZCAqX19fX2NhY2hlX2FsbG9jKGttZW1fY2FjaGVfdCAqY2FjaGVwLCBnZnBfdCBmbGFncykKIHsKLQl1bnNpZ25lZCBsb25nIHNhdmVfZmxhZ3M7CiAJdm9pZCogb2JqcDsKIAlzdHJ1Y3QgYXJyYXlfY2FjaGUgKmFjOwogCi0JY2FjaGVfYWxsb2NfZGVidWdjaGVja19iZWZvcmUoY2FjaGVwLCBmbGFncyk7Ci0KLQlsb2NhbF9pcnFfc2F2ZShzYXZlX2ZsYWdzKTsKKwljaGVja19pcnFfb2ZmKCk7CiAJYWMgPSBhY19kYXRhKGNhY2hlcCk7CiAJaWYgKGxpa2VseShhYy0+YXZhaWwpKSB7CiAJCVNUQVRTX0lOQ19BTExPQ0hJVChjYWNoZXApOwpAQCAtMjUyNyw2ICsyNTIzLDE4IEBACiAJCVNUQVRTX0lOQ19BTExPQ01JU1MoY2FjaGVwKTsKIAkJb2JqcCA9IGNhY2hlX2FsbG9jX3JlZmlsbChjYWNoZXAsIGZsYWdzKTsKIAl9CisJcmV0dXJuIG9ianA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqX19jYWNoZV9hbGxvYyhrbWVtX2NhY2hlX3QgKmNhY2hlcCwgZ2ZwX3QgZmxhZ3MpCit7CisJdW5zaWduZWQgbG9uZyBzYXZlX2ZsYWdzOworCXZvaWQqIG9ianA7CisKKwljYWNoZV9hbGxvY19kZWJ1Z2NoZWNrX2JlZm9yZShjYWNoZXAsIGZsYWdzKTsKKworCWxvY2FsX2lycV9zYXZlKHNhdmVfZmxhZ3MpOworCW9ianAgPSBfX19fY2FjaGVfYWxsb2MoY2FjaGVwLCBmbGFncyk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoc2F2ZV9mbGFncyk7CiAJb2JqcCA9IGNhY2hlX2FsbG9jX2RlYnVnY2hlY2tfYWZ0ZXIoY2FjaGVwLCBmbGFncywgb2JqcCwKIAkJCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKQEAgLTI2MDgsNyArMjYxNiw3IEBACiAvKgogICogQ2FsbGVyIG5lZWRzIHRvIGFjcXVpcmUgY29ycmVjdCBrbWVtX2xpc3QncyBsaXN0X2xvY2sKICAqLwotc3RhdGljIHZvaWQgZnJlZV9ibG9jayhrbWVtX2NhY2hlX3QgKmNhY2hlcCwgdm9pZCAqKm9ianBwLCBpbnQgbnJfb2JqZWN0cykKK3N0YXRpYyB2b2lkIGZyZWVfYmxvY2soa21lbV9jYWNoZV90ICpjYWNoZXAsIHZvaWQgKipvYmpwcCwgaW50IG5yX29iamVjdHMsIGludCBub2RlKQogewogCWludCBpOwogCXN0cnVjdCBrbWVtX2xpc3QzICpsMzsKQEAgLTI2MTcsMTQgKzI2MjUsMTIgQEAKIAkJdm9pZCAqb2JqcCA9IG9ianBwW2ldOwogCQlzdHJ1Y3Qgc2xhYiAqc2xhYnA7CiAJCXVuc2lnbmVkIGludCBvYmpucjsKLQkJaW50IG5vZGVpZCA9IDA7CiAKIAkJc2xhYnAgPSBHRVRfUEFHRV9TTEFCKHZpcnRfdG9fcGFnZShvYmpwKSk7Ci0JCW5vZGVpZCA9IHNsYWJwLT5ub2RlaWQ7Ci0JCWwzID0gY2FjaGVwLT5ub2RlbGlzdHNbbm9kZWlkXTsKKwkJbDMgPSBjYWNoZXAtPm5vZGVsaXN0c1tub2RlXTsKIAkJbGlzdF9kZWwoJnNsYWJwLT5saXN0KTsKIAkJb2JqbnIgPSAob2JqcCAtIHNsYWJwLT5zX21lbSkgLyBjYWNoZXAtPm9ianNpemU7Ci0JCWNoZWNrX3NwaW5sb2NrX2FjcXVpcmVkX25vZGUoY2FjaGVwLCBub2RlaWQpOworCQljaGVja19zcGlubG9ja19hY3F1aXJlZF9ub2RlKGNhY2hlcCwgbm9kZSk7CiAJCWNoZWNrX3NsYWJwKGNhY2hlcCwgc2xhYnApOwogCiAKQEAgLTI2NjQsMTMgKzI2NzAsMTQgQEAKIHsKIAlpbnQgYmF0Y2hjb3VudDsKIAlzdHJ1Y3Qga21lbV9saXN0MyAqbDM7CisJaW50IG5vZGUgPSBudW1hX25vZGVfaWQoKTsKIAogCWJhdGNoY291bnQgPSBhYy0+YmF0Y2hjb3VudDsKICNpZiBERUJVRwogCUJVR19PTighYmF0Y2hjb3VudCB8fCBiYXRjaGNvdW50ID4gYWMtPmF2YWlsKTsKICNlbmRpZgogCWNoZWNrX2lycV9vZmYoKTsKLQlsMyA9IGNhY2hlcC0+bm9kZWxpc3RzW251bWFfbm9kZV9pZCgpXTsKKwlsMyA9IGNhY2hlcC0+bm9kZWxpc3RzW25vZGVdOwogCXNwaW5fbG9jaygmbDMtPmxpc3RfbG9jayk7CiAJaWYgKGwzLT5zaGFyZWQpIHsKIAkJc3RydWN0IGFycmF5X2NhY2hlICpzaGFyZWRfYXJyYXkgPSBsMy0+c2hhcmVkOwpAQCAtMjY4Niw3ICsyNjkzLDcgQEAKIAkJfQogCX0KIAotCWZyZWVfYmxvY2soY2FjaGVwLCBhYy0+ZW50cnksIGJhdGNoY291bnQpOworCWZyZWVfYmxvY2soY2FjaGVwLCBhYy0+ZW50cnksIGJhdGNoY291bnQsIG5vZGUpOwogZnJlZV9kb25lOgogI2lmIFNUQVRTCiAJewpAQCAtMjc1MSw3ICsyNzU4LDcgQEAKIAkJCX0gZWxzZSB7CiAJCQkJc3Bpbl9sb2NrKCYoY2FjaGVwLT5ub2RlbGlzdHNbbm9kZWlkXSktPgogCQkJCQkJbGlzdF9sb2NrKTsKLQkJCQlmcmVlX2Jsb2NrKGNhY2hlcCwgJm9ianAsIDEpOworCQkJCWZyZWVfYmxvY2soY2FjaGVwLCAmb2JqcCwgMSwgbm9kZWlkKTsKIAkJCQlzcGluX3VubG9jaygmKGNhY2hlcC0+bm9kZWxpc3RzW25vZGVpZF0pLT4KIAkJCQkJCWxpc3RfbG9jayk7CiAJCQl9CkBAIC0yNzc4LDcgKzI3ODUsNyBAQAogICogQWxsb2NhdGUgYW4gb2JqZWN0IGZyb20gdGhpcyBjYWNoZS4gIFRoZSBmbGFncyBhcmUgb25seSByZWxldmFudAogICogaWYgdGhlIGNhY2hlIGhhcyBubyBhdmFpbGFibGUgb2JqZWN0cy4KICAqLwotdm9pZCAqa21lbV9jYWNoZV9hbGxvYyhrbWVtX2NhY2hlX3QgKmNhY2hlcCwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGZsYWdzKQordm9pZCAqa21lbV9jYWNoZV9hbGxvYyhrbWVtX2NhY2hlX3QgKmNhY2hlcCwgZ2ZwX3QgZmxhZ3MpCiB7CiAJcmV0dXJuIF9fY2FjaGVfYWxsb2MoY2FjaGVwLCBmbGFncyk7CiB9CkBAIC0yODM5LDEyICsyODQ2LDEyIEBACiAgKiBOZXcgYW5kIGltcHJvdmVkOiBpdCB3aWxsIG5vdyBtYWtlIHN1cmUgdGhhdCB0aGUgb2JqZWN0IGdldHMKICAqIHB1dCBvbiB0aGUgY29ycmVjdCBub2RlIGxpc3Qgc28gdGhhdCB0aGVyZSBpcyBubyBmYWxzZSBzaGFyaW5nLgogICovCi12b2lkICprbWVtX2NhY2hlX2FsbG9jX25vZGUoa21lbV9jYWNoZV90ICpjYWNoZXAsIHVuc2lnbmVkIGludCBfX25vY2FzdCBmbGFncywgaW50IG5vZGVpZCkKK3ZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm9kZShrbWVtX2NhY2hlX3QgKmNhY2hlcCwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBzYXZlX2ZsYWdzOwogCXZvaWQgKnB0cjsKIAotCWlmIChub2RlaWQgPT0gbnVtYV9ub2RlX2lkKCkgfHwgbm9kZWlkID09IC0xKQorCWlmIChub2RlaWQgPT0gLTEpCiAJCXJldHVybiBfX2NhY2hlX2FsbG9jKGNhY2hlcCwgZmxhZ3MpOwogCiAJaWYgKHVubGlrZWx5KCFjYWNoZXAtPm5vZGVsaXN0c1tub2RlaWRdKSkgewpAQCAtMjg1NSw3ICsyODYyLDEwIEBACiAKIAljYWNoZV9hbGxvY19kZWJ1Z2NoZWNrX2JlZm9yZShjYWNoZXAsIGZsYWdzKTsKIAlsb2NhbF9pcnFfc2F2ZShzYXZlX2ZsYWdzKTsKLQlwdHIgPSBfX2NhY2hlX2FsbG9jX25vZGUoY2FjaGVwLCBmbGFncywgbm9kZWlkKTsKKwlpZiAobm9kZWlkID09IG51bWFfbm9kZV9pZCgpKQorCQlwdHIgPSBfX19fY2FjaGVfYWxsb2MoY2FjaGVwLCBmbGFncyk7CisJZWxzZQorCQlwdHIgPSBfX2NhY2hlX2FsbG9jX25vZGUoY2FjaGVwLCBmbGFncywgbm9kZWlkKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShzYXZlX2ZsYWdzKTsKIAlwdHIgPSBjYWNoZV9hbGxvY19kZWJ1Z2NoZWNrX2FmdGVyKGNhY2hlcCwgZmxhZ3MsIHB0ciwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIApAQCAtMjg2Myw3ICsyODczLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvY19ub2RlKTsKIAotdm9pZCAqa21hbGxvY19ub2RlKHNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZ3MsIGludCBub2RlKQordm9pZCAqa21hbGxvY19ub2RlKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpCiB7CiAJa21lbV9jYWNoZV90ICpjYWNoZXA7CiAKQEAgLTI4OTYsNyArMjkwNiw3IEBACiAgKiBwbGF0Zm9ybXMuICBGb3IgZXhhbXBsZSwgb24gaTM4NiwgaXQgbWVhbnMgdGhhdCB0aGUgbWVtb3J5IG11c3QgY29tZQogICogZnJvbSB0aGUgZmlyc3QgMTZNQi4KICAqLwotdm9pZCAqX19rbWFsbG9jKHNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZ3MpCit2b2lkICpfX2ttYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKQogewogCWttZW1fY2FjaGVfdCAqY2FjaGVwOwogCkBAIC0yOTg1LDcgKzI5OTUsNyBAQAogICogQHNpemU6IGhvdyBtYW55IGJ5dGVzIG9mIG1lbW9yeSBhcmUgcmVxdWlyZWQuCiAgKiBAZmxhZ3M6IHRoZSB0eXBlIG9mIG1lbW9yeSB0byBhbGxvY2F0ZS4KICAqLwotdm9pZCAqa3phbGxvYyhzaXplX3Qgc2l6ZSwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGZsYWdzKQordm9pZCAqa3phbGxvYyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpCiB7CiAJdm9pZCAqcmV0ID0ga21hbGxvYyhzaXplLCBmbGFncyk7CiAJaWYgKHJldCkKQEAgLTMwNzksNyArMzA4OSw3IEBACiAKIAkJCWlmICgobmMgPSBjYWNoZXAtPm5vZGVsaXN0c1tub2RlXS0+c2hhcmVkKSkKIAkJCQlmcmVlX2Jsb2NrKGNhY2hlcCwgbmMtPmVudHJ5LAotCQkJCQkJCW5jLT5hdmFpbCk7CisJCQkJCQkJbmMtPmF2YWlsLCBub2RlKTsKIAogCQkJbDMtPnNoYXJlZCA9IG5ldzsKIAkJCWlmICghY2FjaGVwLT5ub2RlbGlzdHNbbm9kZV0tPmFsaWVuKSB7CkBAIC0zMTYwLDcgKzMxNzAsNyBAQAogCQlpZiAoIWNjb2xkKQogCQkJY29udGludWU7CiAJCXNwaW5fbG9ja19pcnEoJmNhY2hlcC0+bm9kZWxpc3RzW2NwdV90b19ub2RlKGkpXS0+bGlzdF9sb2NrKTsKLQkJZnJlZV9ibG9jayhjYWNoZXAsIGNjb2xkLT5lbnRyeSwgY2NvbGQtPmF2YWlsKTsKKwkJZnJlZV9ibG9jayhjYWNoZXAsIGNjb2xkLT5lbnRyeSwgY2NvbGQtPmF2YWlsLCBjcHVfdG9fbm9kZShpKSk7CiAJCXNwaW5fdW5sb2NrX2lycSgmY2FjaGVwLT5ub2RlbGlzdHNbY3B1X3RvX25vZGUoaSldLT5saXN0X2xvY2spOwogCQlrZnJlZShjY29sZCk7CiAJfQpAQCAtMzI0MCw3ICszMjUwLDcgQEAKIAkJaWYgKHRvZnJlZSA+IGFjLT5hdmFpbCkgewogCQkJdG9mcmVlID0gKGFjLT5hdmFpbCsxKS8yOwogCQl9Ci0JCWZyZWVfYmxvY2soY2FjaGVwLCBhYy0+ZW50cnksIHRvZnJlZSk7CisJCWZyZWVfYmxvY2soY2FjaGVwLCBhYy0+ZW50cnksIHRvZnJlZSwgbm9kZSk7CiAJCWFjLT5hdmFpbCAtPSB0b2ZyZWU7CiAJCW1lbW1vdmUoYWMtPmVudHJ5LCAmKGFjLT5lbnRyeVt0b2ZyZWVdKSwKIAkJCQkJc2l6ZW9mKHZvaWQqKSphYy0+YXZhaWwpOwpAQCAtMzU5MSw3ICszNjAxLDcgQEAKICAqIEBzOiB0aGUgc3RyaW5nIHRvIGR1cGxpY2F0ZQogICogQGdmcDogdGhlIEdGUCBtYXNrIHVzZWQgaW4gdGhlIGttYWxsb2MoKSBjYWxsIHdoZW4gYWxsb2NhdGluZyBtZW1vcnkKICAqLwotY2hhciAqa3N0cmR1cChjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwKQorY2hhciAqa3N0cmR1cChjb25zdCBjaGFyICpzLCBnZnBfdCBnZnApCiB7CiAJc2l6ZV90IGxlbjsKIAljaGFyICpidWY7CmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmMKaW5kZXggYWRiYzJiNC4uMTMyMTY0ZiAxMDA2NDQKLS0tIGEvbW0vc3dhcF9zdGF0ZS5jCisrKyBiL21tL3N3YXBfc3RhdGUuYwpAQCAtNjgsNyArNjgsNyBAQAogICogYnV0IHNldHMgU3dhcENhY2hlIGZsYWcgYW5kIHByaXZhdGUgaW5zdGVhZCBvZiBtYXBwaW5nIGFuZCBpbmRleC4KICAqLwogc3RhdGljIGludCBfX2FkZF90b19zd2FwX2NhY2hlKHN0cnVjdCBwYWdlICpwYWdlLCBzd3BfZW50cnlfdCBlbnRyeSwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX21hc2spCisJCQkgICAgICAgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJaW50IGVycm9yOwogCmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCAwMTg0ZjUxLi4xZGNhZWRhIDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCisrKyBiL21tL3N3YXBmaWxlLmMKQEAgLTEzODEsNiArMTM4MSw3IEBACiAJCWVycm9yID0gYmRfY2xhaW0oYmRldiwgc3lzX3N3YXBvbik7CiAJCWlmIChlcnJvciA8IDApIHsKIAkJCWJkZXYgPSBOVUxMOworCQkJZXJyb3IgPSAtRUlOVkFMOwogCQkJZ290byBiYWRfc3dhcDsKIAkJfQogCQlwLT5vbGRfYmxvY2tfc2l6ZSA9IGJsb2NrX3NpemUoYmRldik7CmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmMKaW5kZXggMTNjM2Q4Mi4uMTE1MDIyOSAxMDA2NDQKLS0tIGEvbW0vdm1hbGxvYy5jCisrKyBiL21tL3ZtYWxsb2MuYwpAQCAtMzk1LDcgKzM5NSw3IEBACiAKIEVYUE9SVF9TWU1CT0wodm1hcCk7CiAKLXZvaWQgKl9fdm1hbGxvY19hcmVhKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaywgcGdwcm90X3QgcHJvdCkKK3ZvaWQgKl9fdm1hbGxvY19hcmVhKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsIGdmcF90IGdmcF9tYXNrLCBwZ3Byb3RfdCBwcm90KQogewogCXN0cnVjdCBwYWdlICoqcGFnZXM7CiAJdW5zaWduZWQgaW50IG5yX3BhZ2VzLCBhcnJheV9zaXplLCBpOwpAQCAtNDQ2LDcgKzQ0Niw3IEBACiAgKglhbGxvY2F0b3Igd2l0aCBAZ2ZwX21hc2sgZmxhZ3MuICBNYXAgdGhlbSBpbnRvIGNvbnRpZ3VvdXMKICAqCWtlcm5lbCB2aXJ0dWFsIHNwYWNlLCB1c2luZyBhIHBhZ2V0YWJsZSBwcm90ZWN0aW9uIG9mIEBwcm90LgogICovCi12b2lkICpfX3ZtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX21hc2ssIHBncHJvdF90IHByb3QpCit2b2lkICpfX3ZtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplLCBnZnBfdCBnZnBfbWFzaywgcGdwcm90X3QgcHJvdCkKIHsKIAlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOwogCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDBlYTcxZTguLjY0Zjk1NzAgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC01MTEsMTAgKzUxMSwxMSBAQAogCQkgKiBQYWdlRGlydHkgX2FmdGVyXyBtYWtpbmcgc3VyZSB0aGF0IHRoZSBwYWdlIGlzIGZyZWVhYmxlIGFuZAogCQkgKiBub3QgaW4gdXNlIGJ5IGFueWJvZHkuIAkocGFnZWNhY2hlICsgdXMgPT0gMikKIAkJICovCi0JCWlmIChwYWdlX2NvdW50KHBhZ2UpICE9IDIgfHwgUGFnZURpcnR5KHBhZ2UpKSB7Ci0JCQl3cml0ZV91bmxvY2tfaXJxKCZtYXBwaW5nLT50cmVlX2xvY2spOwotCQkJZ290byBrZWVwX2xvY2tlZDsKLQkJfQorCQlpZiAodW5saWtlbHkocGFnZV9jb3VudChwYWdlKSAhPSAyKSkKKwkJCWdvdG8gY2Fubm90X2ZyZWU7CisJCXNtcF9ybWIoKTsKKwkJaWYgKHVubGlrZWx5KFBhZ2VEaXJ0eShwYWdlKSkpCisJCQlnb3RvIGNhbm5vdF9mcmVlOwogCiAjaWZkZWYgQ09ORklHX1NXQVAKIAkJaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkpIHsKQEAgLTUzOCw2ICs1MzksMTAgQEAKIAkJCV9fcGFnZXZlY19yZWxlYXNlX25vbmxydSgmZnJlZWRfcHZlYyk7CiAJCWNvbnRpbnVlOwogCitjYW5ub3RfZnJlZToKKwkJd3JpdGVfdW5sb2NrX2lycSgmbWFwcGluZy0+dHJlZV9sb2NrKTsKKwkJZ290byBrZWVwX2xvY2tlZDsKKwogYWN0aXZhdGVfbG9ja2VkOgogCQlTZXRQYWdlQWN0aXZlKHBhZ2UpOwogCQlwZ2FjdGl2YXRlKys7CmRpZmYgLS1naXQgYS9uZXQvODAyL3A4MDIyLmMgYi9uZXQvODAyL3A4MDIyLmMKaW5kZXggYjI0ODE3Yy4uMjUzMGYzNSAxMDA2NDQKLS0tIGEvbmV0LzgwMi9wODAyMi5jCisrKyBiL25ldC84MDIvcDgwMjIuYwpAQCAtNTYsNyArNTYsNyBAQAogCiB2b2lkIHVucmVnaXN0ZXJfODAyMl9jbGllbnQoc3RydWN0IGRhdGFsaW5rX3Byb3RvICpwcm90bykKIHsKLQlsbGNfc2FwX2Nsb3NlKHByb3RvLT5zYXApOworCWxsY19zYXBfcHV0KHByb3RvLT5zYXApOwogCWtmcmVlKHByb3RvKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0LzgwMi9wc25hcC5jIGIvbmV0LzgwMi9wc25hcC5jCmluZGV4IGFiODBiMWYuLjRkNjM4OTQgMTAwNjQ0Ci0tLSBhL25ldC84MDIvcHNuYXAuYworKysgYi9uZXQvODAyL3BzbmFwLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc25hcF9leGl0KHZvaWQpCiB7Ci0JbGxjX3NhcF9jbG9zZShzbmFwX3NhcCk7CisJbGxjX3NhcF9wdXQoc25hcF9zYXApOwogfQogCiBtb2R1bGVfZXhpdChzbmFwX2V4aXQpOwpkaWZmIC0tZ2l0IGEvbmV0LzgwMi90ci5jIGIvbmV0LzgwMi90ci5jCmluZGV4IDFiYjdkYzEuLmFmZDgzODUgMTAwNjQ0Ci0tLSBhL25ldC84MDIvdHIuYworKysgYi9uZXQvODAyL3RyLmMKQEAgLTIzOCw3ICsyMzgsNyBAQAogCQlyZXR1cm4gdHJsbGMtPmV0aGVydHlwZTsKIAl9CiAKLQlyZXR1cm4gbnRvaHMoRVRIX1BfODAyXzIpOworCXJldHVybiBudG9ocyhFVEhfUF9UUl84MDJfMik7CiB9CiAKIC8qCkBAIC0zNDAsOSArMzQwLDEwIEBACiAJdW5zaWduZWQgaW50IGhhc2gsIHJpaV9wID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCByaWZfY2FjaGUgKmVudHJ5OwotCisJdW5zaWduZWQgY2hhciBzYWRkcjA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcmlmX2xvY2ssIGZsYWdzKTsKKwlzYWRkcjAgPSB0cmgtPnNhZGRyWzBdOwogCQogCS8qCiAJICoJRmlyc3RseSBzZWUgaWYgdGhlIGVudHJ5IGV4aXN0cwpAQCAtMzk1LDcgKzM5Niw2IEBACiAJCQllbnRyeS0+cmNmID0gdHJoLT5yY2YgJiBodG9ucygodW5zaWduZWQgc2hvcnQpflRSX1JDRl9CUk9BRENBU1RfTUFTSyk7CiAJCQltZW1jcHkoJihlbnRyeS0+cnNlZ1swXSksJih0cmgtPnJzZWdbMF0pLDgqc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSk7CiAJCQllbnRyeS0+bG9jYWxfcmluZyA9IDA7Ci0JCQl0cmgtPnNhZGRyWzBdfD1UUl9SSUk7IC8qIHB1dCB0aGUgcm91dGluZyBpbmRpY2F0b3IgYmFjayBmb3IgdGNwZHVtcCAqLwogCQl9CiAJCWVsc2UKIAkJewpAQCAtNDIyLDYgKzQyMiw3IEBACiAJCSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgCWVudHJ5LT5sYXN0X3VzZWQ9amlmZmllczsgICAgICAgICAgICAgICAKIAl9CisJdHJoLT5zYWRkclswXT1zYWRkcjA7IC8qIHB1dCB0aGUgcm91dGluZyBpbmRpY2F0b3IgYmFjayBmb3IgdGNwZHVtcCAqLwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJpZl9sb2NrLCBmbGFncyk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuX2Rldi5jIGIvbmV0LzgwMjFxL3ZsYW5fZGV2LmMKaW5kZXggMTQ1ZjVjZC4uYjc0ODY0OCAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW5fZGV2LmMKKysrIGIvbmV0LzgwMjFxL3ZsYW5fZGV2LmMKQEAgLTEyMCw3ICsxMjAsNyBAQAogCXVuc2lnbmVkIHNob3J0IHZpZDsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHM7CiAJdW5zaWduZWQgc2hvcnQgdmxhbl9UQ0k7Ci0JdW5zaWduZWQgc2hvcnQgcHJvdG87CisJX19iZTE2IHByb3RvOwogCiAJLyogdmxhbl9UQ0kgPSBudG9ocyhnZXRfdW5hbGlnbmVkKCZ2aGRyLT5oX3ZsYW5fVENJKSk7ICovCiAJdmxhbl9UQ0kgPSBudG9ocyh2aGRyLT5oX3ZsYW5fVENJKTsKZGlmZiAtLWdpdCBhL25ldC9LY29uZmlnIGIvbmV0L0tjb25maWcKaW5kZXggMmJkZDU2Mi4uNjBmNmYzMiAxMDA2NDQKLS0tIGEvbmV0L0tjb25maWcKKysrIGIvbmV0L0tjb25maWcKQEAgLTE0MCw2ICsxNDAsNyBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitzb3VyY2UgIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZyIKIHNvdXJjZSAibmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWciCiBzb3VyY2UgIm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnIgogc291cmNlICJuZXQvZGVjbmV0L25ldGZpbHRlci9LY29uZmlnIgpAQCAtMjA2LDggKzIwNyw2IEBACiAJICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcGt0Z2VuLgogCi1zb3VyY2UgIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZyIKLQogZW5kbWVudQogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9uZXQvYXBwbGV0YWxrL2RkcC5jIGIvbmV0L2FwcGxldGFsay9kZHAuYwppbmRleCAxZDMxYjNhLi43OTgyNjU2IDEwMDY0NAotLS0gYS9uZXQvYXBwbGV0YWxrL2RkcC5jCisrKyBiL25ldC9hcHBsZXRhbGsvZGRwLmMKQEAgLTEwMCw4ICsxMDAsNyBAQAogCQkJY29udGludWU7CiAKIAkgICAgCWlmICh0by0+c2F0X2FkZHIuc19uZXQgPT0gQVRBRERSX0FOWU5FVCAmJgotCQkgICAgdG8tPnNhdF9hZGRyLnNfbm9kZSA9PSBBVEFERFJfQkNBU1QgJiYKLQkJICAgIGF0LT5zcmNfbmV0ID09IGF0aWYtPmFkZHJlc3Muc19uZXQpCisJCSAgICB0by0+c2F0X2FkZHIuc19ub2RlID09IEFUQUREUl9CQ0FTVCkKIAkJCWdvdG8gZm91bmQ7CiAKIAkgICAgCWlmICh0by0+c2F0X2FkZHIuc19uZXQgPT0gYXQtPnNyY19uZXQgJiYKQEAgLTE0NDMsOCArMTQ0MiwxMCBAQAogCWVsc2UKIAkJYXRpZiA9IGF0YWxrX2ZpbmRfaW50ZXJmYWNlKGRkcC0+ZGVoX2RuZXQsIGRkcC0+ZGVoX2Rub2RlKTsKIAotCS8qIE5vdCBvdXJzLCBzbyB3ZSByb3V0ZSB0aGUgcGFja2V0IHZpYSB0aGUgY29ycmVjdCBBcHBsZVRhbGsgaWZhY2UgKi8KIAlpZiAoIWF0aWYpIHsKKwkJLyogTm90IG91cnMsIHNvIHdlIHJvdXRlIHRoZSBwYWNrZXQgdmlhIHRoZSBjb3JyZWN0CisJCSAqIEFwcGxlVGFsayBpZmFjZQorCQkgKi8KIAkJYXRhbGtfcm91dGVfcGFja2V0KHNrYiwgZGV2LCBkZHAsICZkZHBodiwgb3JpZ2xlbik7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTE1OTIsOSArMTU5Myw2IEBACiAKIAlpZiAodXNhdC0+c2F0X2FkZHIuc19uZXQgfHwgdXNhdC0+c2F0X2FkZHIuc19ub2RlID09IEFUQUREUl9BTllOT0RFKSB7CiAJCXJ0ID0gYXRydHJfZmluZCgmdXNhdC0+c2F0X2FkZHIpOwotCQlpZiAoIXJ0KQotCQkJcmV0dXJuIC1FTkVUVU5SRUFDSDsKLQogCQlkZXYgPSBydC0+ZGV2OwogCX0gZWxzZSB7CiAJCXN0cnVjdCBhdGFsa19hZGRyIGF0X2hpbnQ7CkBAIC0xNjAzLDExICsxNjAxLDEyIEBACiAJCWF0X2hpbnQuc19uZXQgID0gYXQtPnNyY19uZXQ7CiAKIAkJcnQgPSBhdHJ0cl9maW5kKCZhdF9oaW50KTsKLQkJaWYgKCFydCkKLQkJCXJldHVybiAtRU5FVFVOUkVBQ0g7Ci0KIAkJZGV2ID0gcnQtPmRldjsKIAl9CisJaWYgKCFydCkKKwkJcmV0dXJuIC1FTkVUVU5SRUFDSDsKKworCWRldiA9IHJ0LT5kZXY7CiAKIAlTT0NLX0RFQlVHKHNrLCAiU0sgJXA6IFNpemUgbmVlZGVkICVkLCBkZXZpY2UgJXNcbiIsCiAJCQlzaywgc2l6ZSwgZGV2LT5uYW1lKTsKQEAgLTE2NzcsNiArMTY3NiwyMCBAQAogCQlTT0NLX0RFQlVHKHNrLCAiU0sgJXA6IExvb3AgYmFjay5cbiIsIHNrKTsKIAkJLyogbG9vcCBiYWNrICovCiAJCXNrYl9vcnBoYW4oc2tiKTsKKwkJaWYgKGRkcC0+ZGVoX2Rub2RlID09IEFUQUREUl9CQ0FTVCkgeworCQkJc3RydWN0IGF0YWxrX2FkZHIgYXRfbG87CisKKwkJCWF0X2xvLnNfbm9kZSA9IDA7CisJCQlhdF9sby5zX25ldCAgPSAwOworCisJCQlydCA9IGF0cnRyX2ZpbmQoJmF0X2xvKTsKKwkJCWlmICghcnQpIHsKKwkJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCQlyZXR1cm4gLUVORVRVTlJFQUNIOworCQkJfQorCQkJZGV2ID0gcnQtPmRldjsKKwkJCXNrYi0+ZGV2ID0gZGV2OworCQl9CiAJCWRkcF9kbC0+cmVxdWVzdChkZHBfZGwsIHNrYiwgZGV2LT5kZXZfYWRkcik7CiAJfSBlbHNlIHsKIAkJU09DS19ERUJVRyhzaywgIlNLICVwOiBzZW5kIG91dC5cbiIsIHNrKTsKZGlmZiAtLWdpdCBhL25ldC9hdG0vYWRkci5jIGIvbmV0L2F0bS9hZGRyLmMKaW5kZXggMWM4ODY3Zi4uMzA2MGZkMCAxMDA2NDQKLS0tIGEvbmV0L2F0bS9hZGRyLmMKKysrIGIvbmV0L2F0bS9hZGRyLmMKQEAgLTQ0LDI5ICs0NCw0MyBAQAogCXNpZ2RfZW5xKE5VTEwsIGFzX2l0Zl9ub3RpZnksIE5VTEwsICZwdmMsIE5VTEwpOwogfQogCi12b2lkIGF0bV9yZXNldF9hZGRyKHN0cnVjdCBhdG1fZGV2ICpkZXYpCit2b2lkIGF0bV9yZXNldF9hZGRyKHN0cnVjdCBhdG1fZGV2ICpkZXYsIGVudW0gYXRtX2FkZHJfdHlwZV90IGF0eXBlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGF0bV9kZXZfYWRkciAqdGhpcywgKnA7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGhpcywgcCwgJmRldi0+bG9jYWwsIGVudHJ5KQotCSAgICBrZnJlZSh0aGlzKTsKKwlpZiAoYXR5cGUgPT0gQVRNX0FERFJfTEVDUykKKwkJaGVhZCA9ICZkZXYtPmxlY3M7CisJZWxzZQorCQloZWFkID0gJmRldi0+bG9jYWw7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRoaXMsIHAsIGhlYWQsIGVudHJ5KSB7CisJCWxpc3RfZGVsKCZ0aGlzLT5lbnRyeSk7CisJCWtmcmVlKHRoaXMpOworCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKLQlub3RpZnlfc2lnZChkZXYpOworCWlmIChoZWFkID09ICZkZXYtPmxvY2FsKQorCQlub3RpZnlfc2lnZChkZXYpOwogfQogCi1pbnQgYXRtX2FkZF9hZGRyKHN0cnVjdCBhdG1fZGV2ICpkZXYsIHN0cnVjdCBzb2NrYWRkcl9hdG1zdmMgKmFkZHIpCitpbnQgYXRtX2FkZF9hZGRyKHN0cnVjdCBhdG1fZGV2ICpkZXYsIHN0cnVjdCBzb2NrYWRkcl9hdG1zdmMgKmFkZHIsCisJCSBlbnVtIGF0bV9hZGRyX3R5cGVfdCBhdHlwZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBhdG1fZGV2X2FkZHIgKnRoaXM7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKIAlpbnQgZXJyb3I7CiAKIAllcnJvciA9IGNoZWNrX2FkZHIoYWRkcik7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkodGhpcywgJmRldi0+bG9jYWwsIGVudHJ5KSB7CisJaWYgKGF0eXBlID09IEFUTV9BRERSX0xFQ1MpCisJCWhlYWQgPSAmZGV2LT5sZWNzOworCWVsc2UKKwkJaGVhZCA9ICZkZXYtPmxvY2FsOworCWxpc3RfZm9yX2VhY2hfZW50cnkodGhpcywgaGVhZCwgZW50cnkpIHsKIAkJaWYgKGlkZW50aWNhbCgmdGhpcy0+YWRkciwgYWRkcikpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuIC1FRVhJU1Q7CkBAIC03OCwyOCArOTIsMzYgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXRoaXMtPmFkZHIgPSAqYWRkcjsKLQlsaXN0X2FkZCgmdGhpcy0+ZW50cnksICZkZXYtPmxvY2FsKTsKKwlsaXN0X2FkZCgmdGhpcy0+ZW50cnksIGhlYWQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOwotCW5vdGlmeV9zaWdkKGRldik7CisJaWYgKGhlYWQgPT0gJmRldi0+bG9jYWwpCisJCW5vdGlmeV9zaWdkKGRldik7CiAJcmV0dXJuIDA7CiB9CiAKLWludCBhdG1fZGVsX2FkZHIoc3RydWN0IGF0bV9kZXYgKmRldiwgc3RydWN0IHNvY2thZGRyX2F0bXN2YyAqYWRkcikKK2ludCBhdG1fZGVsX2FkZHIoc3RydWN0IGF0bV9kZXYgKmRldiwgc3RydWN0IHNvY2thZGRyX2F0bXN2YyAqYWRkciwKKwkJIGVudW0gYXRtX2FkZHJfdHlwZV90IGF0eXBlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGF0bV9kZXZfYWRkciAqdGhpczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOwogCWludCBlcnJvcjsKIAogCWVycm9yID0gY2hlY2tfYWRkcihhZGRyKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0aGlzLCAmZGV2LT5sb2NhbCwgZW50cnkpIHsKKwlpZiAoYXR5cGUgPT0gQVRNX0FERFJfTEVDUykKKwkJaGVhZCA9ICZkZXYtPmxlY3M7CisJZWxzZQorCQloZWFkID0gJmRldi0+bG9jYWw7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0aGlzLCBoZWFkLCBlbnRyeSkgewogCQlpZiAoaWRlbnRpY2FsKCZ0aGlzLT5hZGRyLCBhZGRyKSkgewogCQkJbGlzdF9kZWwoJnRoaXMtPmVudHJ5KTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOwogCQkJa2ZyZWUodGhpcyk7Ci0JCQlub3RpZnlfc2lnZChkZXYpOworCQkJaWYgKGhlYWQgPT0gJmRldi0+bG9jYWwpCisJCQkJbm90aWZ5X3NpZ2QoZGV2KTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtMTA4LDIyICsxMzAsMjcgQEAKIH0KIAogaW50IGF0bV9nZXRfYWRkcihzdHJ1Y3QgYXRtX2RldiAqZGV2LCBzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjIF9fdXNlciAqIGJ1ZiwKLQkJIHNpemVfdCBzaXplKQorCQkgc2l6ZV90IHNpemUsIGVudW0gYXRtX2FkZHJfdHlwZV90IGF0eXBlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGF0bV9kZXZfYWRkciAqdGhpczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOwogCWludCB0b3RhbCA9IDAsIGVycm9yOwogCXN0cnVjdCBzb2NrYWRkcl9hdG1zdmMgKnRtcF9idWYsICp0bXBfYnVmcDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRoaXMsICZkZXYtPmxvY2FsLCBlbnRyeSkKKwlpZiAoYXR5cGUgPT0gQVRNX0FERFJfTEVDUykKKwkJaGVhZCA9ICZkZXYtPmxlY3M7CisJZWxzZQorCQloZWFkID0gJmRldi0+bG9jYWw7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0aGlzLCBoZWFkLCBlbnRyeSkKIAkgICAgdG90YWwgKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1zdmMpOwogCXRtcF9idWYgPSB0bXBfYnVmcCA9IGttYWxsb2ModG90YWwsIEdGUF9BVE9NSUMpOwogCWlmICghdG1wX2J1ZikgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWxpc3RfZm9yX2VhY2hfZW50cnkodGhpcywgJmRldi0+bG9jYWwsIGVudHJ5KQorCWxpc3RfZm9yX2VhY2hfZW50cnkodGhpcywgaGVhZCwgZW50cnkpCiAJICAgIG1lbWNweSh0bXBfYnVmcCsrLCAmdGhpcy0+YWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1zdmMpKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKIAllcnJvciA9IHRvdGFsID4gc2l6ZSA/IC1FMkJJRyA6IHRvdGFsOwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9hZGRyLmggYi9uZXQvYXRtL2FkZHIuaAppbmRleCAzMDk5ZDIxLi5mMzk0MzNhIDEwMDY0NAotLS0gYS9uZXQvYXRtL2FkZHIuaAorKysgYi9uZXQvYXRtL2FkZHIuaApAQCAtOSwxMCArOSwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2F0bS5oPgogI2luY2x1ZGUgPGxpbnV4L2F0bWRldi5oPgogCi0KLXZvaWQgYXRtX3Jlc2V0X2FkZHIoc3RydWN0IGF0bV9kZXYgKmRldik7Ci1pbnQgYXRtX2FkZF9hZGRyKHN0cnVjdCBhdG1fZGV2ICpkZXYsc3RydWN0IHNvY2thZGRyX2F0bXN2YyAqYWRkcik7Ci1pbnQgYXRtX2RlbF9hZGRyKHN0cnVjdCBhdG1fZGV2ICpkZXYsc3RydWN0IHNvY2thZGRyX2F0bXN2YyAqYWRkcik7Ci1pbnQgYXRtX2dldF9hZGRyKHN0cnVjdCBhdG1fZGV2ICpkZXYsc3RydWN0IHNvY2thZGRyX2F0bXN2YyBfX3VzZXIgKmJ1ZixzaXplX3Qgc2l6ZSk7Cit2b2lkIGF0bV9yZXNldF9hZGRyKHN0cnVjdCBhdG1fZGV2ICpkZXYsIGVudW0gYXRtX2FkZHJfdHlwZV90IHR5cGUpOworaW50IGF0bV9hZGRfYWRkcihzdHJ1Y3QgYXRtX2RldiAqZGV2LCBzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjICphZGRyLAorCQkgZW51bSBhdG1fYWRkcl90eXBlX3QgdHlwZSk7CitpbnQgYXRtX2RlbF9hZGRyKHN0cnVjdCBhdG1fZGV2ICpkZXYsIHN0cnVjdCBzb2NrYWRkcl9hdG1zdmMgKmFkZHIsCisJCSBlbnVtIGF0bV9hZGRyX3R5cGVfdCB0eXBlKTsKK2ludCBhdG1fZ2V0X2FkZHIoc3RydWN0IGF0bV9kZXYgKmRldiwgc3RydWN0IHNvY2thZGRyX2F0bXN2YyBfX3VzZXIgKmJ1ZiwKKwkJIHNpemVfdCBzaXplLCBlbnVtIGF0bV9hZGRyX3R5cGVfdCB0eXBlKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvYXRtL2F0bV9taXNjLmMgYi9uZXQvYXRtL2F0bV9taXNjLmMKaW5kZXggYjIxMTNjMy4uMjIzYzdhZCAxMDA2NDQKLS0tIGEvbmV0L2F0bS9hdG1fbWlzYy5jCisrKyBiL25ldC9hdG0vYXRtX21pc2MuYwpAQCAtMjUsNyArMjUsNyBAQAogCiAKIHN0cnVjdCBza19idWZmICphdG1fYWxsb2NfY2hhcmdlKHN0cnVjdCBhdG1fdmNjICp2Y2MsaW50IHBkdV9zaXplLAotICAgIGludCBnZnBfZmxhZ3MpCisgICAgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNrX2F0bSh2Y2MpOwogCWludCBndWVzcyA9IGF0bV9ndWVzc19wZHUydHJ1ZXNpemUocGR1X3NpemUpOwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9icjI2ODQuYyBiL25ldC9hdG0vYnIyNjg0LmMKaW5kZXggMjg5OTU2Yy4uNzJmM2Y3YiAxMDA2NDQKLS0tIGEvbmV0L2F0bS9icjI2ODQuYworKysgYi9uZXQvYXRtL2JyMjY4NC5jCkBAIC0yMjAsNyArMjIwLDcgQEAKIAkJLyogbmV0aWZfc3RvcF9xdWV1ZShkZXYpOyAqLwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXJlYWRfdW5sb2NrKCZkZXZzX2xvY2spOwotCQlyZXR1cm4gLUVVTkFUQ0g7CisJCXJldHVybiAwOwogCX0KIAlpZiAoIWJyMjY4NF94bWl0X3ZjYyhza2IsIGJyZGV2LCBicnZjYykpIHsKIAkJLyoKZGlmZiAtLWdpdCBhL25ldC9hdG0vY2xpcC5jIGIvbmV0L2F0bS9jbGlwLmMKaW5kZXggMjhkYWI1NS4uNGY1NGM5YSAxMDA2NDQKLS0tIGEvbmV0L2F0bS9jbGlwLmMKKysrIGIvbmV0L2F0bS9jbGlwLmMKQEAgLTMxMCw3ICszMTAsNyBAQAogCWlmIChuZWlnaC0+dHlwZSAhPSBSVE5fVU5JQ0FTVCkgcmV0dXJuIC1FSU5WQUw7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JaW5fZGV2ID0gcmN1X2RlcmVmZXJlbmNlKF9faW5fZGV2X2dldChkZXYpKTsKKwlpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7CiAJaWYgKCFpbl9kZXYpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9jb21tb24uYyBiL25ldC9hdG0vY29tbW9uLmMKaW5kZXggZTkzZTgzOC4uNjNmZWVhNCAxMDA2NDQKLS0tIGEvbmV0L2F0bS9jb21tb24uYworKysgYi9uZXQvYXRtL2NvbW1vbi5jCkBAIC00Niw3ICs0Niw3IEBACiAJc3RydWN0IGF0bV92Y2MgKnZjYyA9IGF0bV9zayhzayk7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSAmdmNjX2hhc2hbdmNjLT52Y2kgJgogCQkJCQkoVkNDX0hUQUJMRV9TSVpFIC0gMSldOwotCXNrLT5za19oYXNoZW50ID0gdmNjLT52Y2kgJiAoVkNDX0hUQUJMRV9TSVpFIC0gMSk7CisJc2stPnNrX2hhc2ggPSB2Y2MtPnZjaSAmIChWQ0NfSFRBQkxFX1NJWkUgLSAxKTsKIAlza19hZGRfbm9kZShzaywgaGVhZCk7CiB9CiAKQEAgLTE3OCw4ICsxNzgsNiBAQAogCQlpZiAodmNjLT5wdXNoKQogCQkJdmNjLT5wdXNoKHZjYywgTlVMTCk7IC8qIGF0bWFycGQgaGFzIG5vIHB1c2ggKi8KIAotCQl2Y2NfcmVtb3ZlX3NvY2tldChzayk7CS8qIG5vIG1vcmUgcmVjZWl2ZSAqLwotCiAJCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJnNrLT5za19yZWNlaXZlX3F1ZXVlKSkgIT0gTlVMTCkgewogCQkJYXRtX3JldHVybih2Y2Msc2tiLT50cnVlc2l6ZSk7CiAJCQlrZnJlZV9za2Ioc2tiKTsKQEAgLTE4OCw2ICsxODYsOCBAQAogCQltb2R1bGVfcHV0KHZjYy0+ZGV2LT5vcHMtPm93bmVyKTsKIAkJYXRtX2Rldl9wdXQodmNjLT5kZXYpOwogCX0KKworCXZjY19yZW1vdmVfc29ja2V0KHNrKTsKIH0KIAogCmRpZmYgLS1naXQgYS9uZXQvYXRtL2lvY3RsLmMgYi9uZXQvYXRtL2lvY3RsLmMKaW5kZXggZDg5MDU2ZS4uYTE1MDE5OCAxMDA2NDQKLS0tIGEvbmV0L2F0bS9pb2N0bC5jCisrKyBiL25ldC9hdG0vaW9jdGwuYwpAQCAtMTA1LDE3ICsxMDUsMzUgQEAKIAkJCWlmICghZXJyb3IpCiAJCQkJc29jay0+c3RhdGUgPSBTU19DT05ORUNURUQ7CiAJCQlnb3RvIGRvbmU7Ci0JCWRlZmF1bHQ6CisJCWNhc2UgQVRNX1NFVEJBQ0tFTkQ6CisJCWNhc2UgQVRNX05FV0JBQ0tFTkRJRjoKKwkJCXsKKwkJCQlhdG1fYmFja2VuZF90IGJhY2tlbmQ7CisJCQkJZXJyb3IgPSBnZXRfdXNlcihiYWNrZW5kLCAoYXRtX2JhY2tlbmRfdCBfX3VzZXIgKikgYXJncCk7CisJCQkJaWYgKGVycm9yKQorCQkJCQlnb3RvIGRvbmU7CisJCQkJc3dpdGNoIChiYWNrZW5kKSB7CisJCQkJCWNhc2UgQVRNX0JBQ0tFTkRfUFBQOgorCQkJCQkJcmVxdWVzdF9tb2R1bGUoInBwcG9hdG0iKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIEFUTV9CQUNLRU5EX0JSMjY4NDoKKwkJCQkJCXJlcXVlc3RfbW9kdWxlKCJicjI2ODQiKTsKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEFUTU1QQ19DVFJMOgorCQljYXNlIEFUTU1QQ19EQVRBOgorCQkJcmVxdWVzdF9tb2R1bGUoIm1wb2EiKTsKKwkJCWJyZWFrOworCQljYXNlIEFUTUFSUERfQ1RSTDoKKwkJCXJlcXVlc3RfbW9kdWxlKCJjbGlwIik7CisJCQlicmVhazsKKwkJY2FzZSBBVE1MRUNfQ1RSTDoKKwkJCXJlcXVlc3RfbW9kdWxlKCJsZWMiKTsKIAkJCWJyZWFrOwogCX0KIAotCWlmIChjbWQgPT0gQVRNTVBDX0NUUkwgfHwgY21kID09IEFUTU1QQ19EQVRBKQotCQlyZXF1ZXN0X21vZHVsZSgibXBvYSIpOwotCWlmIChjbWQgPT0gQVRNQVJQRF9DVFJMKQotCQlyZXF1ZXN0X21vZHVsZSgiY2xpcCIpOwotCWlmIChjbWQgPT0gQVRNTEVDX0NUUkwpCi0JCXJlcXVlc3RfbW9kdWxlKCJsZWMiKTsKLQogCWVycm9yID0gLUVOT0lPQ1RMQ01EOwogCiAJZG93bigmaW9jdGxfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9sZWMuYyBiL25ldC9hdG0vbGVjLmMKaW5kZXggYTA3NTI0OC4uYWQ4NDBiOSAxMDA2NDQKLS0tIGEvbmV0L2F0bS9sZWMuYworKysgYi9uZXQvYXRtL2xlYy5jCkBAIC02ODYsOSArNjg2LDE5IEBACiAgICAgICAgIDB4MDEsCiAgICAgICAgIDB4MDEgfTsKIAorI2RlZmluZSBMRUNfREFUQV9ESVJFQ1RfODAyMyAgMgorI2RlZmluZSBMRUNfREFUQV9ESVJFQ1RfODAyNSAgMworCitzdGF0aWMgaW50IGxlY19pc19kYXRhX2RpcmVjdChzdHJ1Y3QgYXRtX3ZjYyAqdmNjKQoreyAKKwlyZXR1cm4gKCh2Y2MtPnNhcC5ibGxpWzBdLmwzLnRyOTU3Ny5zbmFwWzRdID09IExFQ19EQVRBX0RJUkVDVF84MDIzKSB8fAorCQkodmNjLT5zYXAuYmxsaVswXS5sMy50cjk1Nzcuc25hcFs0XSA9PSBMRUNfREFUQV9ESVJFQ1RfODAyNSkpOworfSAKKwogc3RhdGljIHZvaWQgCiBsZWNfcHVzaChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKil2Y2MtPnByb3RvX2RhdGE7CiAgICAgICAgIHN0cnVjdCBsZWNfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgbGVjX3ByaXYgKilkZXYtPnByaXY7IAogCkBAIC03MjgsNyArNzM4LDggQEAKICAgICAgICAgICAgICAgICBza2JfcXVldWVfdGFpbCgmc2stPnNrX3JlY2VpdmVfcXVldWUsIHNrYik7CiAgICAgICAgICAgICAgICAgc2stPnNrX2RhdGFfcmVhZHkoc2ssIHNrYi0+bGVuKTsKICAgICAgICAgfSBlbHNlIHsgLyogRGF0YSBmcmFtZSwgcXVldWUgdG8gcHJvdG9jb2wgaGFuZGxlcnMgKi8KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkc3Q7CisJCXN0cnVjdCBsZWNfYXJwX3RhYmxlICplbnRyeTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzcmMsICpkc3Q7CiAKICAgICAgICAgICAgICAgICBhdG1fcmV0dXJuKHZjYyxza2ItPnRydWVzaXplKTsKICAgICAgICAgICAgICAgICBpZiAoKih1aW50MTZfdCAqKXNrYi0+ZGF0YSA9PSBodG9ucyhwcml2LT5sZWNpZCkgfHwKQEAgLTc0MSwxMCArNzUyLDMwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogI2lmZGVmIENPTkZJR19UUgotICAgICAgICAgICAgICAgIGlmIChwcml2LT5pc190cmRldikgZHN0ID0gKChzdHJ1Y3QgbGVjZGF0YWhkcl84MDI1ICopc2tiLT5kYXRhKS0+aF9kZXN0OworICAgICAgICAgICAgICAgIGlmIChwcml2LT5pc190cmRldikKKwkJCWRzdCA9ICgoc3RydWN0IGxlY2RhdGFoZHJfODAyNSAqKSBza2ItPmRhdGEpLT5oX2Rlc3Q7CiAgICAgICAgICAgICAgICAgZWxzZQogI2VuZGlmCi0gICAgICAgICAgICAgICAgZHN0ID0gKChzdHJ1Y3QgbGVjZGF0YWhkcl84MDIzICopc2tiLT5kYXRhKS0+aF9kZXN0OworCQlkc3QgPSAoKHN0cnVjdCBsZWNkYXRhaGRyXzgwMjMgKikgc2tiLT5kYXRhKS0+aF9kZXN0OworCisJCS8qIElmIHRoaXMgaXMgYSBEYXRhIERpcmVjdCBWQ0MsIGFuZCB0aGUgVkNDIGRvZXMgbm90IG1hdGNoCisJCSAqIHRoZSBMRV9BUlAgY2FjaGUgZW50cnksIGRlbGV0ZSB0aGUgTEVfQVJQIGNhY2hlIGVudHJ5LgorCQkgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxlY19hcnBfbG9jaywgZmxhZ3MpOworCQlpZiAobGVjX2lzX2RhdGFfZGlyZWN0KHZjYykpIHsKKyNpZmRlZiBDT05GSUdfVFIKKwkJCWlmIChwcml2LT5pc190cmRldikKKwkJCQlzcmMgPSAoKHN0cnVjdCBsZWNkYXRhaGRyXzgwMjUgKikgc2tiLT5kYXRhKS0+aF9zb3VyY2U7CisJCQllbHNlCisjZW5kaWYKKwkJCXNyYyA9ICgoc3RydWN0IGxlY2RhdGFoZHJfODAyMyAqKSBza2ItPmRhdGEpLT5oX3NvdXJjZTsKKwkJCWVudHJ5ID0gbGVjX2FycF9maW5kKHByaXYsIHNyYyk7CisJCQlpZiAoZW50cnkgJiYgZW50cnktPnZjYyAhPSB2Y2MpIHsKKwkJCQlsZWNfYXJwX3JlbW92ZShwcml2LCBlbnRyeSk7CisJCQkJa2ZyZWUoZW50cnkpOworCQkJfQorCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxlY19hcnBfbG9jaywgZmxhZ3MpOwogCiAgICAgICAgICAgICAgICAgaWYgKCEoZHN0WzBdJjB4MDEpICYmICAgLyogTmV2ZXIgZmlsdGVyIE11bHRpL0Jyb2FkY2FzdCAqLwogICAgICAgICAgICAgICAgICAgICAhcHJpdi0+aXNfcHJveHkgJiYgIC8qIFByb3h5IHdhbnRzIGFsbCB0aGUgcGFja2V0cyAqLwpAQCAtMTk5MCw2ICsyMDIxLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IGVudHJ5LT52Y2M7CiAJCQlnb3RvIG91dDsKICAgICAgICAgICAgICAgICB9CisJCS8qIElmIHRoZSBMRV9BUlAgY2FjaGUgZW50cnkgaXMgc3RpbGwgcGVuZGluZywgcmVzZXQgY291bnQgdG8gMAorCQkgKiBzbyBhbm90aGVyIExFX0FSUCByZXF1ZXN0IGNhbiBiZSBtYWRlIGZvciB0aGlzIGZyYW1lLgorCQkgKi8KKwkJaWYgKGVudHJ5LT5zdGF0dXMgPT0gRVNJX0FSUF9QRU5ESU5HKSB7CisJCQllbnRyeS0+bm9fdHJpZXMgPSAwOworCQl9CiAgICAgICAgICAgICAgICAgLyogRGF0YSBkaXJlY3QgVkMgbm90IHlldCBzZXQgdXAsIGNoZWNrIHRvIHNlZSBpZiB0aGUgdW5rbm93bgogICAgICAgICAgICAgICAgICAgIGZyYW1lIGNvdW50IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGltaXQuIElmIHRoZSBsaW1pdCBoYXMKICAgICAgICAgICAgICAgICAgICBub3QgYmVlbiByZWFjaGVkLCBhbGxvdyB0aGUgY2FsbGVyIHRvIHNlbmQgcGFja2V0IHRvCmRpZmYgLS1naXQgYS9uZXQvYXRtL3Jlc291cmNlcy5jIGIvbmV0L2F0bS9yZXNvdXJjZXMuYwppbmRleCBhNTdhOTI2Li40MTVkMjYxIDEwMDY0NAotLS0gYS9uZXQvYXRtL3Jlc291cmNlcy5jCisrKyBiL25ldC9hdG0vcmVzb3VyY2VzLmMKQEAgLTQwLDYgKzQwLDcgQEAKIAlkZXYtPmxpbmtfcmF0ZSA9IEFUTV9PQzNfUENSOwogCXNwaW5fbG9ja19pbml0KCZkZXYtPmxvY2spOwogCUlOSVRfTElTVF9IRUFEKCZkZXYtPmxvY2FsKTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5sZWNzKTsKIAogCXJldHVybiBkZXY7CiB9CkBAIC0zMjAsMTAgKzMyMSwxMiBAQAogCQkJCWVycm9yID0gLUVQRVJNOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KLQkJCWF0bV9yZXNldF9hZGRyKGRldik7CisJCQlhdG1fcmVzZXRfYWRkcihkZXYsIEFUTV9BRERSX0xPQ0FMKTsKIAkJCWJyZWFrOwogCQljYXNlIEFUTV9BRERBRERSOgogCQljYXNlIEFUTV9ERUxBRERSOgorCQljYXNlIEFUTV9BRERMRUNTQUREUjoKKwkJY2FzZSBBVE1fREVMTEVDU0FERFI6CiAJCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpIHsKIAkJCQllcnJvciA9IC1FUEVSTTsKIAkJCQlnb3RvIGRvbmU7CkBAIC0zMzUsMTQgKzMzOCwyMSBAQAogCQkJCQllcnJvciA9IC1FRkFVTFQ7CiAJCQkJCWdvdG8gZG9uZTsKIAkJCQl9Ci0JCQkJaWYgKGNtZCA9PSBBVE1fQUREQUREUikKLQkJCQkJZXJyb3IgPSBhdG1fYWRkX2FkZHIoZGV2LCAmYWRkcik7CisJCQkJaWYgKGNtZCA9PSBBVE1fQUREQUREUiB8fCBjbWQgPT0gQVRNX0FERExFQ1NBRERSKQorCQkJCQllcnJvciA9IGF0bV9hZGRfYWRkcihkZXYsICZhZGRyLAorCQkJCQkJCSAgICAgKGNtZCA9PSBBVE1fQUREQUREUiA/CisJCQkJCQkJICAgICAgQVRNX0FERFJfTE9DQUwgOiBBVE1fQUREUl9MRUNTKSk7CiAJCQkJZWxzZQotCQkJCQllcnJvciA9IGF0bV9kZWxfYWRkcihkZXYsICZhZGRyKTsKKwkJCQkJZXJyb3IgPSBhdG1fZGVsX2FkZHIoZGV2LCAmYWRkciwKKwkJCQkJCQkgICAgIChjbWQgPT0gQVRNX0RFTEFERFIgPworCQkJCQkJCSAgICAgIEFUTV9BRERSX0xPQ0FMIDogQVRNX0FERFJfTEVDUykpOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KIAkJY2FzZSBBVE1fR0VUQUREUjoKLQkJCWVycm9yID0gYXRtX2dldF9hZGRyKGRldiwgYnVmLCBsZW4pOworCQljYXNlIEFUTV9HRVRMRUNTQUREUjoKKwkJCWVycm9yID0gYXRtX2dldF9hZGRyKGRldiwgYnVmLCBsZW4sCisJCQkJCSAgICAgKGNtZCA9PSBBVE1fR0VUQUREUiA/CisJCQkJCSAgICAgIEFUTV9BRERSX0xPQ0FMIDogQVRNX0FERFJfTEVDUykpOwogCQkJaWYgKGVycm9yIDwgMCkKIAkJCQlnb3RvIGRvbmU7CiAJCQlzaXplID0gZXJyb3I7CmRpZmYgLS1naXQgYS9uZXQvYXRtL3NpZ25hbGluZy5jIGIvbmV0L2F0bS9zaWduYWxpbmcuYwppbmRleCBmN2M0NDlhLi5lNzIxMWE3IDEwMDY0NAotLS0gYS9uZXQvYXRtL3NpZ25hbGluZy5jCisrKyBiL25ldC9hdG0vc2lnbmFsaW5nLmMKQEAgLTIxNyw4ICsyMTcsOSBAQAogc3RhdGljIHZvaWQgcHVyZ2VfdmNjKHN0cnVjdCBhdG1fdmNjICp2Y2MpCiB7CiAJaWYgKHNrX2F0bSh2Y2MpLT5za19mYW1pbHkgPT0gUEZfQVRNU1ZDICYmCi0JICAgICF0ZXN0X2JpdChBVE1fVkZfTUVUQSwmdmNjLT5mbGFncykpIHsKLQkJc2V0X2JpdChBVE1fVkZfUkVMRUFTRUQsJnZjYy0+ZmxhZ3MpOworCSAgICAhdGVzdF9iaXQoQVRNX1ZGX01FVEEsICZ2Y2MtPmZsYWdzKSkgeworCQlzZXRfYml0KEFUTV9WRl9SRUxFQVNFRCwgJnZjYy0+ZmxhZ3MpOworCQljbGVhcl9iaXQoQVRNX1ZGX1JFR0lTLCAmdmNjLT5mbGFncyk7CiAJCXZjY19yZWxlYXNlX2FzeW5jKHZjYywgLUVVTkFUQ0gpOwogCX0KIH0KQEAgLTI0Myw4ICsyNDQsNyBAQAogCQlza19mb3JfZWFjaChzLCBub2RlLCBoZWFkKSB7CiAJCQlzdHJ1Y3QgYXRtX3ZjYyAqdmNjID0gYXRtX3NrKHMpOwogCi0JCQlpZiAodmNjLT5kZXYpCi0JCQkJcHVyZ2VfdmNjKHZjYyk7CisJCQlwdXJnZV92Y2ModmNjKTsKIAkJfQogCX0KIAlyZWFkX3VubG9jaygmdmNjX3NrbGlzdF9sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9hdG0vc3ZjLmMgYi9uZXQvYXRtL3N2Yy5jCmluZGV4IDA4ZTQ2MDUuLmQ3YjI2NjEgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vc3ZjLmMKKysrIGIvbmV0L2F0bS9zdmMuYwpAQCAtMzAyLDYgKzMwMiw3IEBACiAJCWVycm9yID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQorCXZjY19pbnNlcnRfc29ja2V0KHNrKTsKIAlzZXRfYml0KEFUTV9WRl9XQUlUSU5HLCAmdmNjLT5mbGFncyk7CiAJcHJlcGFyZV90b193YWl0KHNrLT5za19zbGVlcCwgJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAlzaWdkX2VucSh2Y2MsYXNfbGlzdGVuLE5VTEwsTlVMTCwmdmNjLT5sb2NhbCk7CmRpZmYgLS1naXQgYS9uZXQvYXgyNS9heDI1X2luLmMgYi9uZXQvYXgyNS9heDI1X2luLmMKaW5kZXggODEwYzljNy4uNzNjZmMzNCAxMDA2NDQKLS0tIGEvbmV0L2F4MjUvYXgyNV9pbi5jCisrKyBiL25ldC9heDI1L2F4MjVfaW4uYwpAQCAtMTIzLDcgKzEyMyw3IEBACiAJCX0KIAogCQlza2JfcHVsbChza2IsIDEpOwkvKiBSZW1vdmUgUElEICovCi0JCXNrYi0+aC5yYXcgICAgPSBza2ItPmRhdGE7CisJCXNrYi0+bWFjLnJhdyAgPSBza2ItPm5oLnJhdzsKIAkJc2tiLT5uaC5yYXcgICA9IHNrYi0+ZGF0YTsKIAkJc2tiLT5kZXYgICAgICA9IGF4MjUtPmF4MjVfZGV2LT5kZXY7CiAJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvbDJjYXAuYyBiL25ldC9ibHVldG9vdGgvbDJjYXAuYwppbmRleCBkM2Q2YmM1Li41OWIyZGQzIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKKysrIGIvbmV0L2JsdWV0b290aC9sMmNhcC5jCkBAIC0zNzIsNyArMzcyLDcgQEAKIAkub2JqX3NpemUJPSBzaXplb2Yoc3RydWN0IGwyY2FwX3BpbmZvKQogfTsKIAotc3RhdGljIHN0cnVjdCBzb2NrICpsMmNhcF9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgdW5zaWduZWQgaW50IF9fbm9jYXN0IHByaW8pCitzdGF0aWMgc3RydWN0IHNvY2sgKmwyY2FwX3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvLCBnZnBfdCBwcmlvKQogewogCXN0cnVjdCBzb2NrICpzazsKIApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCmluZGV4IDE3M2Y0NmUuLjM1YWRjZTYgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKQEAgLTIyOSw3ICsyMjksNyBAQAogCWQtPnJ4X2NyZWRpdHMgPSBSRkNPTU1fREVGQVVMVF9DUkVESVRTOwogfQogCi1zdHJ1Y3QgcmZjb21tX2RsYyAqcmZjb21tX2RsY19hbGxvYyh1bnNpZ25lZCBpbnQgX19ub2Nhc3QgcHJpbykKK3N0cnVjdCByZmNvbW1fZGxjICpyZmNvbW1fZGxjX2FsbG9jKGdmcF90IHByaW8pCiB7CiAJc3RydWN0IHJmY29tbV9kbGMgKmQgPSBrbWFsbG9jKHNpemVvZigqZCksIHByaW8pOwogCWlmICghZCkKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYwppbmRleCBmNDllN2U5Li5hMmIzMGYwIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMKKysrIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jCkBAIC0yODQsNyArMjg0LDcgQEAKIAkub2JqX3NpemUJPSBzaXplb2Yoc3RydWN0IHJmY29tbV9waW5mbykKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc29jayAqcmZjb21tX3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgcHJpbykKK3N0YXRpYyBzdHJ1Y3Qgc29jayAqcmZjb21tX3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvLCBnZnBfdCBwcmlvKQogewogCXN0cnVjdCByZmNvbW1fZGxjICpkOwogCXN0cnVjdCBzb2NrICpzazsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vdHR5LmMKaW5kZXggMWJjYTg2MC4uMTU4YTljNCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9yZmNvbW0vdHR5LmMKKysrIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vdHR5LmMKQEAgLTI4Niw3ICsyODYsNyBAQAogCXNrYi0+ZGVzdHJ1Y3RvciA9IHJmY29tbV93ZnJlZTsKIH0KIAotc3RhdGljIHN0cnVjdCBza19idWZmICpyZmNvbW1fd21hbGxvYyhzdHJ1Y3QgcmZjb21tX2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGludCBfX25vY2FzdCBwcmlvcml0eSkKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcmZjb21tX3dtYWxsb2Moc3RydWN0IHJmY29tbV9kZXYgKmRldiwgdW5zaWduZWQgbG9uZyBzaXplLCBnZnBfdCBwcmlvcml0eSkKIHsKIAlpZiAoYXRvbWljX3JlYWQoJmRldi0+d21lbV9hbGxvYykgPCByZmNvbW1fcm9vbShkZXYtPmRsYykpIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGFsbG9jX3NrYihzaXplLCBwcmlvcml0eSk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3Njby5jIGIvbmV0L2JsdWV0b290aC9zY28uYwppbmRleCBjZTdhYjdkLi45OTdlNDJkIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL3Njby5jCisrKyBiL25ldC9ibHVldG9vdGgvc2NvLmMKQEAgLTQxOCw3ICs0MTgsNyBAQAogCS5vYmpfc2l6ZQk9IHNpemVvZihzdHJ1Y3Qgc2NvX3BpbmZvKQogfTsKIAotc3RhdGljIHN0cnVjdCBzb2NrICpzY29fc29ja19hbGxvYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG8sIHVuc2lnbmVkIGludCBfX25vY2FzdCBwcmlvKQorc3RhdGljIHN0cnVjdCBzb2NrICpzY29fc29ja19hbGxvYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG8sIGdmcF90IHByaW8pCiB7CiAJc3RydWN0IHNvY2sgKnNrOwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYyBiL25ldC9icmlkZ2UvYnJfZm9yd2FyZC5jCmluZGV4IDA2OTI1M2YuLjJkMjRmYjQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfZm9yd2FyZC5jCisrKyBiL25ldC9icmlkZ2UvYnJfZm9yd2FyZC5jCkBAIC0zMSw3ICszMSw4IEBACiAKIGludCBicl9kZXZfcXVldWVfcHVzaF94bWl0KHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaWYgKHNrYi0+bGVuID4gc2tiLT5kZXYtPm10dSkgCisJLyogZHJvcCBtdHUgb3ZlcnNpemVkIHBhY2tldHMgZXhjZXB0IHRzbyAqLworCWlmIChza2ItPmxlbiA+IHNrYi0+ZGV2LT5tdHUgJiYgIXNrYl9zaGluZm8oc2tiKS0+dHNvX3NpemUpCiAJCWtmcmVlX3NrYihza2IpOwogCWVsc2UgewogI2lmZGVmIENPTkZJR19CUklER0VfTkVURklMVEVSCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lmLmMgYi9uZXQvYnJpZGdlL2JyX2lmLmMKaW5kZXggOTFiYjg5NS4uZGVmY2Y2YSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pZi5jCisrKyBiL25ldC9icmlkZ2UvYnJfaWYuYwpAQCAtNzksNyArNzksNiBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwLT5kZXY7CiAKLQlkZXYtPmJyX3BvcnQgPSBOVUxMOwogCXAtPmJyID0gTlVMTDsKIAlwLT5kZXYgPSBOVUxMOwogCWRldl9wdXQoZGV2KTsKQEAgLTEwMCw2ICs5OSw3IEBACiAJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gcC0+YnI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHAtPmRldjsKIAorCWRldi0+YnJfcG9ydCA9IE5VTEw7CiAJZGV2X3NldF9wcm9taXNjdWl0eShkZXYsIC0xKTsKIAogCXNwaW5fbG9ja19iaCgmYnItPmxvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKaW5kZXggMmQ1MmZlZS4uZDhlMzZiNyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYworKysgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCkBAIC0yMTQsOSArMjE0LDExIEBACiAJCQkJICAgICAudG9zID0gUlRfVE9TKGlwaC0+dG9zKX0gfSwgLnByb3RvID0gMH07CiAKIAkJCWlmICghaXBfcm91dGVfb3V0cHV0X2tleSgmcnQsICZmbCkpIHsKLQkJCQkvKiBCcmlkZ2VkLWFuZC1ETkFUJ2VkIHRyYWZmaWMgZG9lc24ndAotCQkJCSAqIHJlcXVpcmUgaXBfZm9yd2FyZGluZy4gKi8KLQkJCQlpZiAoKChzdHJ1Y3QgZHN0X2VudHJ5ICopcnQpLT5kZXYgPT0gZGV2KSB7CisJCQkJLyogLSBCcmlkZ2VkLWFuZC1ETkFUJ2VkIHRyYWZmaWMgZG9lc24ndAorCQkJCSAqICAgcmVxdWlyZSBpcF9mb3J3YXJkaW5nLgorCQkJCSAqIC0gRGVhbCB3aXRoIHJlZGlyZWN0ZWQgdHJhZmZpYy4gKi8KKwkJCQlpZiAoKChzdHJ1Y3QgZHN0X2VudHJ5ICopcnQpLT5kZXYgPT0gZGV2IHx8CisJCQkJICAgIHJ0LT5ydF90eXBlID09IFJUTl9MT0NBTCkgewogCQkJCQlza2ItPmRzdCA9IChzdHJ1Y3QgZHN0X2VudHJ5ICopcnQ7CiAJCQkJCWdvdG8gYnJpZGdlZF9kbmF0OwogCQkJCX0KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCmluZGV4IGM0NTQwMTQuLmY4ZmZiZjYgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIC8qIG5lZWRlZCBmb3IgbG9naWNhbCBbaW4sb3V0XS1kZXYgZmlsdGVyaW5nICovCiAjaW5jbHVkZSAiLi4vYnJfcHJpdmF0ZS5oIgpAQCAtODIzLDEwICs4MjQsMTEgQEAKIAkJLyogdGhpcyB3aWxsIGdldCBmcmVlJ2QgaW4gZG9fcmVwbGFjZSgpL2VidF9yZWdpc3Rlcl90YWJsZSgpCiAJCSAgIGlmIGFuIGVycm9yIG9jY3VycyAqLwogCQluZXdpbmZvLT5jaGFpbnN0YWNrID0gKHN0cnVjdCBlYnRfY2hhaW5zdGFjayAqKikKLQkJICAgdm1hbGxvYyhudW1fcG9zc2libGVfY3B1cygpICogc2l6ZW9mKHN0cnVjdCBlYnRfY2hhaW5zdGFjaykpOworCQkgICB2bWFsbG9jKChoaWdoZXN0X3Bvc3NpYmxlX3Byb2Nlc3Nvcl9pZCgpKzEpIAorCQkJCSAgIAkJKiBzaXplb2Yoc3RydWN0IGVidF9jaGFpbnN0YWNrKSk7CiAJCWlmICghbmV3aW5mby0+Y2hhaW5zdGFjaykKIAkJCXJldHVybiAtRU5PTUVNOwotCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3Bvc3NpYmxlX2NwdXMoKTsgaSsrKSB7CisJCWZvcl9lYWNoX2NwdShpKSB7CiAJCQluZXdpbmZvLT5jaGFpbnN0YWNrW2ldID0KIAkJCSAgIHZtYWxsb2ModWRjX2NudCAqIHNpemVvZihzdHJ1Y3QgZWJ0X2NoYWluc3RhY2spKTsKIAkJCWlmICghbmV3aW5mby0+Y2hhaW5zdGFja1tpXSkgewpAQCAtODk1LDkgKzg5NywxMiBAQAogCiAJLyogY291bnRlcnMgb2YgY3B1IDAgKi8KIAltZW1jcHkoY291bnRlcnMsIG9sZGNvdW50ZXJzLAotCSAgIHNpemVvZihzdHJ1Y3QgZWJ0X2NvdW50ZXIpICogbmVudHJpZXMpOworCSAgICAgICBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSAqIG5lbnRyaWVzKTsKKwogCS8qIGFkZCBvdGhlciBjb3VudGVycyB0byB0aG9zZSBvZiBjcHUgMCAqLwotCWZvciAoY3B1ID0gMTsgY3B1IDwgbnVtX3Bvc3NpYmxlX2NwdXMoKTsgY3B1KyspIHsKKwlmb3JfZWFjaF9jcHUoY3B1KSB7CisJCWlmIChjcHUgPT0gMCkKKwkJCWNvbnRpbnVlOwogCQljb3VudGVyX2Jhc2UgPSBDT1VOVEVSX0JBU0Uob2xkY291bnRlcnMsIG5lbnRyaWVzLCBjcHUpOwogCQlmb3IgKGkgPSAwOyBpIDwgbmVudHJpZXM7IGkrKykgewogCQkJY291bnRlcnNbaV0ucGNudCArPSBjb3VudGVyX2Jhc2VbaV0ucGNudDsKQEAgLTkyOSw3ICs5MzQsOCBAQAogCQlCVUdQUklOVCgiRW50cmllc19zaXplIG5ldmVyIHplcm9cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JY291bnRlcnNpemUgPSBDT1VOVEVSX09GRlNFVCh0bXAubmVudHJpZXMpICogbnVtX3Bvc3NpYmxlX2NwdXMoKTsKKwljb3VudGVyc2l6ZSA9IENPVU5URVJfT0ZGU0VUKHRtcC5uZW50cmllcykgKiAKKwkJCQkJKGhpZ2hlc3RfcG9zc2libGVfcHJvY2Vzc29yX2lkKCkrMSk7CiAJbmV3aW5mbyA9IChzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8gKikKIAkgICB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8pICsgY291bnRlcnNpemUpOwogCWlmICghbmV3aW5mbykKQEAgLTEwMjIsNyArMTAyOCw3IEBACiAKIAl2ZnJlZSh0YWJsZS0+ZW50cmllcyk7CiAJaWYgKHRhYmxlLT5jaGFpbnN0YWNrKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBudW1fcG9zc2libGVfY3B1cygpOyBpKyspCisJCWZvcl9lYWNoX2NwdShpKQogCQkJdmZyZWUodGFibGUtPmNoYWluc3RhY2tbaV0pOwogCQl2ZnJlZSh0YWJsZS0+Y2hhaW5zdGFjayk7CiAJfQpAQCAtMTA0MCw3ICsxMDQ2LDcgQEAKIAl2ZnJlZShjb3VudGVyc3RtcCk7CiAJLyogY2FuIGJlIGluaXRpYWxpemVkIGluIHRyYW5zbGF0ZV90YWJsZSgpICovCiAJaWYgKG5ld2luZm8tPmNoYWluc3RhY2spIHsKLQkJZm9yIChpID0gMDsgaSA8IG51bV9wb3NzaWJsZV9jcHVzKCk7IGkrKykKKwkJZm9yX2VhY2hfY3B1KGkpCiAJCQl2ZnJlZShuZXdpbmZvLT5jaGFpbnN0YWNrW2ldKTsKIAkJdmZyZWUobmV3aW5mby0+Y2hhaW5zdGFjayk7CiAJfQpAQCAtMTEzMiw3ICsxMTM4LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JY291bnRlcnNpemUgPSBDT1VOVEVSX09GRlNFVCh0YWJsZS0+dGFibGUtPm5lbnRyaWVzKSAqIG51bV9wb3NzaWJsZV9jcHVzKCk7CisJY291bnRlcnNpemUgPSBDT1VOVEVSX09GRlNFVCh0YWJsZS0+dGFibGUtPm5lbnRyaWVzKSAqCisJCQkJCShoaWdoZXN0X3Bvc3NpYmxlX3Byb2Nlc3Nvcl9pZCgpKzEpOwogCW5ld2luZm8gPSAoc3RydWN0IGVidF90YWJsZV9pbmZvICopCiAJICAgdm1hbGxvYyhzaXplb2Yoc3RydWN0IGVidF90YWJsZV9pbmZvKSArIGNvdW50ZXJzaXplKTsKIAlyZXQgPSAtRU5PTUVNOwpAQCAtMTE4Niw3ICsxMTkzLDcgQEAKIAl1cCgmZWJ0X211dGV4KTsKIGZyZWVfY2hhaW5zdGFjazoKIAlpZiAobmV3aW5mby0+Y2hhaW5zdGFjaykgewotCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3Bvc3NpYmxlX2NwdXMoKTsgaSsrKQorCQlmb3JfZWFjaF9jcHUoaSkKIAkJCXZmcmVlKG5ld2luZm8tPmNoYWluc3RhY2tbaV0pOwogCQl2ZnJlZShuZXdpbmZvLT5jaGFpbnN0YWNrKTsKIAl9CkBAIC0xMjA5LDcgKzEyMTYsNyBAQAogCXVwKCZlYnRfbXV0ZXgpOwogCXZmcmVlKHRhYmxlLT5wcml2YXRlLT5lbnRyaWVzKTsKIAlpZiAodGFibGUtPnByaXZhdGUtPmNoYWluc3RhY2spIHsKLQkJZm9yIChpID0gMDsgaSA8IG51bV9wb3NzaWJsZV9jcHVzKCk7IGkrKykKKwkJZm9yX2VhY2hfY3B1KGkpCiAJCQl2ZnJlZSh0YWJsZS0+cHJpdmF0ZS0+Y2hhaW5zdGFja1tpXSk7CiAJCXZmcmVlKHRhYmxlLT5wcml2YXRlLT5jaGFpbnN0YWNrKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kYXRhZ3JhbS5jIGIvbmV0L2NvcmUvZGF0YWdyYW0uYwppbmRleCBkYTliZjcxLi44MTk4N2RmIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kYXRhZ3JhbS5jCisrKyBiL25ldC9jb3JlL2RhdGFncmFtLmMKQEAgLTIxMSw3NCArMjExLDQ1IEBACiBpbnQgc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCwKIAkJCSAgICBzdHJ1Y3QgaW92ZWMgKnRvLCBpbnQgbGVuKQogewotCWludCBzdGFydCA9IHNrYl9oZWFkbGVuKHNrYik7Ci0JaW50IGksIGNvcHkgPSBzdGFydCAtIG9mZnNldDsKKwlpbnQgaSwgZXJyLCBmcmFnbGVuLCBlbmQgPSAwOworCXN0cnVjdCBza19idWZmICpuZXh0ID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3Q7CituZXh0X3NrYjoKKwlmcmFnbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKKwlpID0gLTE7CiAKLQkvKiBDb3B5IGhlYWRlci4gKi8KLQlpZiAoY29weSA+IDApIHsKLQkJaWYgKGNvcHkgPiBsZW4pCi0JCQljb3B5ID0gbGVuOwotCQlpZiAobWVtY3B5X3RvaW92ZWModG8sIHNrYi0+ZGF0YSArIG9mZnNldCwgY29weSkpCi0JCQlnb3RvIGZhdWx0OwotCQlpZiAoKGxlbiAtPSBjb3B5KSA9PSAwKQotCQkJcmV0dXJuIDA7Ci0JCW9mZnNldCArPSBjb3B5OwotCX0KKwl3aGlsZSAoMSkgeworCQlpbnQgc3RhcnQgPSBlbmQ7CiAKLQkvKiBDb3B5IHBhZ2VkIGFwcGVuZGl4LiBIbW0uLi4gd2h5IGRvZXMgdGhpcyBsb29rIHNvIGNvbXBsaWNhdGVkPyAqLwotCWZvciAoaSA9IDA7IGkgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBpKyspIHsKLQkJaW50IGVuZDsKLQotCQlCVUdfVFJBUChzdGFydCA8PSBvZmZzZXQgKyBsZW4pOwotCi0JCWVuZCA9IHN0YXJ0ICsgc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5zaXplOwotCQlpZiAoKGNvcHkgPSBlbmQgLSBvZmZzZXQpID4gMCkgewotCQkJaW50IGVycjsKLQkJCXU4ICAqdmFkZHI7Ci0JCQlza2JfZnJhZ190ICpmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV07Ci0JCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZyYWctPnBhZ2U7CisJCWlmICgoZW5kICs9IGZyYWdsZW4pID4gb2Zmc2V0KSB7CisJCQlpbnQgY29weSA9IGVuZCAtIG9mZnNldCwgbyA9IG9mZnNldCAtIHN0YXJ0OwogCiAJCQlpZiAoY29weSA+IGxlbikKIAkJCQljb3B5ID0gbGVuOwotCQkJdmFkZHIgPSBrbWFwKHBhZ2UpOwotCQkJZXJyID0gbWVtY3B5X3RvaW92ZWModG8sIHZhZGRyICsgZnJhZy0+cGFnZV9vZmZzZXQgKwotCQkJCQkgICAgIG9mZnNldCAtIHN0YXJ0LCBjb3B5KTsKLQkJCWt1bm1hcChwYWdlKTsKKwkJCWlmIChpID09IC0xKQorCQkJCWVyciA9IG1lbWNweV90b2lvdmVjKHRvLCBza2ItPmRhdGEgKyBvLCBjb3B5KTsKKwkJCWVsc2UgeworCQkJCXNrYl9mcmFnX3QgKmZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKKwkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZyYWctPnBhZ2U7CisJCQkJdm9pZCAqcCA9IGttYXAocGFnZSkgKyBmcmFnLT5wYWdlX29mZnNldCArIG87CisJCQkJZXJyID0gbWVtY3B5X3RvaW92ZWModG8sIHAsIGNvcHkpOworCQkJCWt1bm1hcChwYWdlKTsKKwkJCX0KIAkJCWlmIChlcnIpCiAJCQkJZ290byBmYXVsdDsKIAkJCWlmICghKGxlbiAtPSBjb3B5KSkKIAkJCQlyZXR1cm4gMDsKIAkJCW9mZnNldCArPSBjb3B5OwogCQl9Ci0JCXN0YXJ0ID0gZW5kOworCQlpZiAoKytpID49IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MpCisJCQlicmVhazsKKwkJZnJhZ2xlbiA9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZTsKIAl9Ci0KLQlpZiAoc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3QpIHsKLQkJc3RydWN0IHNrX2J1ZmYgKmxpc3QgPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdfbGlzdDsKLQotCQlmb3IgKDsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpIHsKLQkJCWludCBlbmQ7Ci0KLQkJCUJVR19UUkFQKHN0YXJ0IDw9IG9mZnNldCArIGxlbik7Ci0KLQkJCWVuZCA9IHN0YXJ0ICsgbGlzdC0+bGVuOwotCQkJaWYgKChjb3B5ID0gZW5kIC0gb2Zmc2V0KSA+IDApIHsKLQkJCQlpZiAoY29weSA+IGxlbikKLQkJCQkJY29weSA9IGxlbjsKLQkJCQlpZiAoc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMobGlzdCwKLQkJCQkJCQkgICAgb2Zmc2V0IC0gc3RhcnQsCi0JCQkJCQkJICAgIHRvLCBjb3B5KSkKLQkJCQkJZ290byBmYXVsdDsKLQkJCQlpZiAoKGxlbiAtPSBjb3B5KSA9PSAwKQotCQkJCQlyZXR1cm4gMDsKLQkJCQlvZmZzZXQgKz0gY29weTsKLQkJCX0KLQkJCXN0YXJ0ID0gZW5kOwotCQl9CisJaWYgKG5leHQpIHsKKwkJc2tiID0gbmV4dDsKKwkJQlVHX09OKHNrYl9zaGluZm8oc2tiKS0+ZnJhZ19saXN0KTsKKwkJbmV4dCA9IHNrYi0+bmV4dDsKKwkJZ290byBuZXh0X3NrYjsKIAl9Ci0JaWYgKCFsZW4pCi0JCXJldHVybiAwOwotCiBmYXVsdDoKIAlyZXR1cm4gLUVGQVVMVDsKIH0KZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggYzAxNTExZS4uYTQ0ZWVlZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTU3NCw2ICs1NzQsOCBAQAogCXJldHVybiBkZXY7CiB9CiAKK0VYUE9SVF9TWU1CT0woZGV2X2dldGJ5aHdhZGRyKTsKKwogc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRmaXJzdGJ5aHd0eXBlKHVuc2lnbmVkIHNob3J0IHR5cGUpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTExMzAsNyArMTEzMiw3IEBACiAjZW5kaWYKIAogLyogS2VlcCBoZWFkIHRoZSBzYW1lOiByZXBsYWNlIGRhdGEgKi8KLWludCBfX3NrYl9saW5lYXJpemUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrKQoraW50IF9fc2tiX2xpbmVhcml6ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaykKIHsKIAl1bnNpZ25lZCBpbnQgc2l6ZTsKIAl1OCAqZGF0YTsKQEAgLTEyNTcsNiArMTI1OSw4IEBACiAJICAgICAgCWlmIChza2JfY2hlY2tzdW1faGVscChza2IsIDApKQogCSAgICAgIAkJZ290byBvdXRfa2ZyZWVfc2tiOwogCisJc3Bpbl9sb2NrX3ByZWZldGNoKCZkZXYtPnF1ZXVlX2xvY2spOworCiAJLyogRGlzYWJsZSBzb2Z0IGlycXMgZm9yIHZhcmlvdXMgbG9ja3MgYmVsb3cuIEFsc28gCiAJICogc3RvcHMgcHJlZW1wdGlvbiBmb3IgUkNVLiAKIAkgKi8KZGlmZiAtLWdpdCBhL25ldC9jb3JlL25laWdoYm91ci5jIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKaW5kZXggMzlmYzU1ZS4uMWRjZjdmYSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMKKysrIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKQEAgLTYxLDcgKzYxLDkgQEAKIHZvaWQgbmVpZ2hfY2hhbmdlYWRkcihzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIHN0YXRpYyBzdHJ1Y3QgbmVpZ2hfdGFibGUgKm5laWdoX3RhYmxlczsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUwogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmVpZ2hfc3RhdF9zZXFfZm9wczsKKyNlbmRpZgogCiAvKgogICAgTmVpZ2hib3VyIGhhc2ggdGFibGUgYnVja2V0cyBhcmUgcHJvdGVjdGVkIHdpdGggcndsb2NrIHRibC0+bG9jay4KQEAgLTE3MywzOSArMTc1LDEwIEBACiAJfQogfQogCi12b2lkIG5laWdoX2NoYW5nZWFkZHIoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBuZWlnaF9mbHVzaF9kZXYoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IGk7CiAKLQl3cml0ZV9sb2NrX2JoKCZ0YmwtPmxvY2spOwotCi0JZm9yIChpPTA7IGkgPD0gdGJsLT5oYXNoX21hc2s7IGkrKykgewotCQlzdHJ1Y3QgbmVpZ2hib3VyICpuLCAqKm5wOwotCi0JCW5wID0gJnRibC0+aGFzaF9idWNrZXRzW2ldOwotCQl3aGlsZSAoKG4gPSAqbnApICE9IE5VTEwpIHsKLQkJCWlmIChkZXYgJiYgbi0+ZGV2ICE9IGRldikgewotCQkJCW5wID0gJm4tPm5leHQ7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQkqbnAgPSBuLT5uZXh0OwotCQkJd3JpdGVfbG9ja19iaCgmbi0+bG9jayk7Ci0JCQluLT5kZWFkID0gMTsKLQkJCW5laWdoX2RlbF90aW1lcihuKTsKLQkJCXdyaXRlX3VubG9ja19iaCgmbi0+bG9jayk7Ci0JCQluZWlnaF9yZWxlYXNlKG4pOwotCQl9Ci0JfQotCi0gICAgICAgIHdyaXRlX3VubG9ja19iaCgmdGJsLT5sb2NrKTsKLX0KLQotaW50IG5laWdoX2lmZG93bihzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlpbnQgaTsKLQotCXdyaXRlX2xvY2tfYmgoJnRibC0+bG9jayk7Ci0KIAlmb3IgKGkgPSAwOyBpIDw9IHRibC0+aGFzaF9tYXNrOyBpKyspIHsKIAkJc3RydWN0IG5laWdoYm91ciAqbiwgKipucCA9ICZ0YmwtPmhhc2hfYnVja2V0c1tpXTsKIApAQCAtMjQxLDcgKzIxNCwxOSBAQAogCQkJbmVpZ2hfcmVsZWFzZShuKTsKIAkJfQogCX0KK30KIAordm9pZCBuZWlnaF9jaGFuZ2VhZGRyKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXdyaXRlX2xvY2tfYmgoJnRibC0+bG9jayk7CisJbmVpZ2hfZmx1c2hfZGV2KHRibCwgZGV2KTsKKwl3cml0ZV91bmxvY2tfYmgoJnRibC0+bG9jayk7Cit9CisKK2ludCBuZWlnaF9pZmRvd24oc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJd3JpdGVfbG9ja19iaCgmdGJsLT5sb2NrKTsKKwluZWlnaF9mbHVzaF9kZXYodGJsLCBkZXYpOwogCXBuZWlnaF9pZmRvd24odGJsLCBkZXYpOwogCXdyaXRlX3VubG9ja19iaCgmdGJsLT5sb2NrKTsKIApAQCAtNzI1LDYgKzcxMCwxNCBAQAogCQlwLT51Y2FzdF9wcm9iZXMgKyBwLT5hcHBfcHJvYmVzICsgcC0+bWNhc3RfcHJvYmVzKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIG5laWdoX2FkZF90aW1lcihzdHJ1Y3QgbmVpZ2hib3VyICpuLCB1bnNpZ25lZCBsb25nIHdoZW4pCit7CisJaWYgKHVubGlrZWx5KG1vZF90aW1lcigmbi0+dGltZXIsIHdoZW4pKSkgeworCQlwcmludGsoIk5FSUdIOiBCVUcsIGRvdWJsZSB0aW1lciBhZGQsIHN0YXRlIGlzICV4XG4iLAorCQkgICAgICAgbi0+bnVkX3N0YXRlKTsKKwkJZHVtcF9zdGFjaygpOworCX0KK30KIAogLyogQ2FsbGVkIHdoZW4gYSB0aW1lciBleHBpcmVzIGZvciBhIG5laWdoYm91ciBlbnRyeS4gKi8KIApAQCAtODA2LDExICs3OTksMTAgQEAKIAl9CiAKIAlpZiAobmVpZ2gtPm51ZF9zdGF0ZSAmIE5VRF9JTl9USU1FUikgewotCQluZWlnaF9ob2xkKG5laWdoKTsKIAkJaWYgKHRpbWVfYmVmb3JlKG5leHQsIGppZmZpZXMgKyBIWi8yKSkKIAkJCW5leHQgPSBqaWZmaWVzICsgSFovMjsKLQkJbmVpZ2gtPnRpbWVyLmV4cGlyZXMgPSBuZXh0OwotCQlhZGRfdGltZXIoJm5laWdoLT50aW1lcik7CisJCWlmICghbW9kX3RpbWVyKCZuZWlnaC0+dGltZXIsIG5leHQpKQorCQkJbmVpZ2hfaG9sZChuZWlnaCk7CiAJfQogCWlmIChuZWlnaC0+bnVkX3N0YXRlICYgKE5VRF9JTkNPTVBMRVRFIHwgTlVEX1BST0JFKSkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX3BlZWsoJm5laWdoLT5hcnBfcXVldWUpOwpAQCAtODUyLDggKzg0NCw3IEBACiAJCQlhdG9taWNfc2V0KCZuZWlnaC0+cHJvYmVzLCBuZWlnaC0+cGFybXMtPnVjYXN0X3Byb2Jlcyk7CiAJCQluZWlnaC0+bnVkX3N0YXRlICAgICA9IE5VRF9JTkNPTVBMRVRFOwogCQkJbmVpZ2hfaG9sZChuZWlnaCk7Ci0JCQluZWlnaC0+dGltZXIuZXhwaXJlcyA9IG5vdyArIDE7Ci0JCQlhZGRfdGltZXIoJm5laWdoLT50aW1lcik7CisJCQluZWlnaF9hZGRfdGltZXIobmVpZ2gsIG5vdyArIDEpOwogCQl9IGVsc2UgewogCQkJbmVpZ2gtPm51ZF9zdGF0ZSA9IE5VRF9GQUlMRUQ7CiAJCQl3cml0ZV91bmxvY2tfYmgoJm5laWdoLT5sb2NrKTsKQEAgLTg2Niw4ICs4NTcsOCBAQAogCQlORUlHSF9QUklOVEsyKCJuZWlnaCAlcCBpcyBkZWxheWVkLlxuIiwgbmVpZ2gpOwogCQluZWlnaF9ob2xkKG5laWdoKTsKIAkJbmVpZ2gtPm51ZF9zdGF0ZSA9IE5VRF9ERUxBWTsKLQkJbmVpZ2gtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbmVpZ2gtPnBhcm1zLT5kZWxheV9wcm9iZV90aW1lOwotCQlhZGRfdGltZXIoJm5laWdoLT50aW1lcik7CisJCW5laWdoX2FkZF90aW1lcihuZWlnaCwKKwkJCQlqaWZmaWVzICsgbmVpZ2gtPnBhcm1zLT5kZWxheV9wcm9iZV90aW1lKTsKIAl9CiAKIAlpZiAobmVpZ2gtPm51ZF9zdGF0ZSA9PSBOVURfSU5DT01QTEVURSkgewpAQCAtMTAxMywxMCArMTAwNCwxMCBAQAogCQluZWlnaF9kZWxfdGltZXIobmVpZ2gpOwogCQlpZiAobmV3ICYgTlVEX0lOX1RJTUVSKSB7CiAJCQluZWlnaF9ob2xkKG5laWdoKTsKLQkJCW5laWdoLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIAorCQkJbmVpZ2hfYWRkX3RpbWVyKG5laWdoLCAoamlmZmllcyArIAogCQkJCQkJKChuZXcgJiBOVURfUkVBQ0hBQkxFKSA/IAotCQkJCQkJIG5laWdoLT5wYXJtcy0+cmVhY2hhYmxlX3RpbWUgOiAwKTsKLQkJCWFkZF90aW1lcigmbmVpZ2gtPnRpbWVyKTsKKwkJCQkJCSBuZWlnaC0+cGFybXMtPnJlYWNoYWJsZV90aW1lIDoKKwkJCQkJCSAwKSkpOwogCQl9CiAJCW5laWdoLT5udWRfc3RhdGUgPSBuZXc7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0cG9sbC5jIGIvbmV0L2NvcmUvbmV0cG9sbC5jCmluZGV4IDUyNjVkZmQuLjgwMmZlMTEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldHBvbGwuYworKysgYi9uZXQvY29yZS9uZXRwb2xsLmMKQEAgLTcwMyw3ICs3MDMsNyBAQAogCiAJaWYgKCFucC0+bG9jYWxfaXApIHsKIAkJcmN1X3JlYWRfbG9jaygpOwotCQlpbl9kZXYgPSBfX2luX2Rldl9nZXQobmRldik7CisJCWluX2RldiA9IF9faW5fZGV2X2dldF9yY3UobmRldik7CiAKIAkJaWYgKCFpbl9kZXYgfHwgIWluX2Rldi0+aWZhX2xpc3QpIHsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uYwppbmRleCBlZjQzMGIxZS4uNWYwNDNkMyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmMKKysrIGIvbmV0L2NvcmUvcGt0Z2VuLmMKQEAgLTE4Niw3ICsxODYsNyBAQAogCiAvKiBVc2VkIHRvIGhlbHAgd2l0aCBkZXRlcm1pbmluZyB0aGUgcGt0cyBvbiByZWNlaXZlICovCiAjZGVmaW5lIFBLVEdFTl9NQUdJQyAweGJlOWJlOTU1Ci0jZGVmaW5lIFBHX1BST0NfRElSICJwa3RnZW4iCisjZGVmaW5lIFBHX1BST0NfRElSICJuZXQvcGt0Z2VuIgogCiAjZGVmaW5lIE1BWF9DRkxPV1MgIDY1NTM2CiAKQEAgLTE0NzYsMTggKzE0NzYsNyBAQAogCiBzdGF0aWMgaW50IGNyZWF0ZV9wcm9jX2Rpcih2b2lkKQogewotICAgICAgICBpbnQgICAgIGxlbjsKLSAgICAgICAgLyogIGRvZXMgcHJvY19kaXIgYWxyZWFkeSBleGlzdHMgKi8KLSAgICAgICAgbGVuID0gc3RybGVuKFBHX1BST0NfRElSKTsKLQotICAgICAgICBmb3IgKHBnX3Byb2NfZGlyID0gcHJvY19uZXQtPnN1YmRpcjsgcGdfcHJvY19kaXI7IHBnX3Byb2NfZGlyPXBnX3Byb2NfZGlyLT5uZXh0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKChwZ19wcm9jX2Rpci0+bmFtZWxlbiA9PSBsZW4pICYmCi0JCSAgICAoISBtZW1jbXAocGdfcHJvY19kaXItPm5hbWUsIFBHX1BST0NfRElSLCBsZW4pKSkgCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCFwZ19wcm9jX2RpcikgCi0gICAgICAgICAgICAgICAgcGdfcHJvY19kaXIgPSBjcmVhdGVfcHJvY19lbnRyeShQR19QUk9DX0RJUiwgU19JRkRJUiwgcHJvY19uZXQpOworCXBnX3Byb2NfZGlyID0gcHJvY19ta2RpcihQR19QUk9DX0RJUiwgTlVMTCk7CiAgICAgICAgIAogICAgICAgICBpZiAoIXBnX3Byb2NfZGlyKSAKICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKQEAgLTE0OTcsNyArMTQ4Niw3IEBACiAKIHN0YXRpYyBpbnQgcmVtb3ZlX3Byb2NfZGlyKHZvaWQpCiB7Ci0gICAgICAgIHJlbW92ZV9wcm9jX2VudHJ5KFBHX1BST0NfRElSLCBwcm9jX25ldCk7CisgICAgICAgIHJlbW92ZV9wcm9jX2VudHJ5KFBHX1BST0NfRElSLCBOVUxMKTsKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTE2NzgsMTMgKzE2NjcsMTIgQEAKIAkJCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsgCiAKIAkJCXJjdV9yZWFkX2xvY2soKTsKLQkJCWluX2RldiA9IF9faW5fZGV2X2dldChwa3RfZGV2LT5vZGV2KTsKKwkJCWluX2RldiA9IF9faW5fZGV2X2dldF9yY3UocGt0X2Rldi0+b2Rldik7CiAJCQlpZiAoaW5fZGV2KSB7CiAJCQkJaWYgKGluX2Rldi0+aWZhX2xpc3QpIHsKIAkJCQkJcGt0X2Rldi0+c2FkZHJfbWluID0gaW5fZGV2LT5pZmFfbGlzdC0+aWZhX2FkZHJlc3M7CiAJCQkJCXBrdF9kZXYtPnNhZGRyX21heCA9IHBrdF9kZXYtPnNhZGRyX21pbjsKIAkJCQl9Ci0JCQkJX19pbl9kZXZfcHV0KGluX2Rldik7CQogCQkJfQogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCX0KQEAgLTI5MDgsNyArMjg5Niw3IEBACiAgICAgICAgICAgICAgICAgcGt0X2Rldi0+dWRwX2RzdF9tYXggPSA5OwogCiAgICAgICAgICAgICAgICAgc3RybmNweShwa3RfZGV2LT5pZm5hbWUsIGlmbmFtZSwgMzEpOwotICAgICAgICAgICAgICAgIHNwcmludGYocGt0X2Rldi0+Zm5hbWUsICJuZXQvJXMvJXMiLCBQR19QUk9DX0RJUiwgaWZuYW1lKTsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKHBrdF9kZXYtPmZuYW1lLCAiJXMvJXMiLCBQR19QUk9DX0RJUiwgaWZuYW1lKTsKIAogICAgICAgICAgICAgICAgIGlmICghIHBrdGdlbl9zZXR1cF9kZXYocGt0X2RldikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygicGt0Z2VuOiBFUlJPUjogcGt0Z2VuX3NldHVwX2RldiBmYWlsZWQuXG4iKTsKQEAgLTI5ODEsNyArMjk2OSw3IEBACiAgICAgICAgIHNwaW5fbG9ja19pbml0KCZ0LT5pZl9sb2NrKTsKIAl0LT5jcHUgPSBjcHU7CiAgICAgICAgIAotICAgICAgICBzcHJpbnRmKHQtPmZuYW1lLCAibmV0LyVzLyVzIiwgUEdfUFJPQ19ESVIsIHQtPm5hbWUpOworICAgICAgICBzcHJpbnRmKHQtPmZuYW1lLCAiJXMvJXMiLCBQR19QUk9DX0RJUiwgdC0+bmFtZSk7CiAgICAgICAgIHQtPnByb2NfZW50ID0gY3JlYXRlX3Byb2NfZW50cnkodC0+Zm5hbWUsIDA2MDAsIE5VTEwpOwogICAgICAgICBpZiAoIXQtPnByb2NfZW50KSB7CiAgICAgICAgICAgICAgICAgcHJpbnRrKCJwa3RnZW46IGNhbm5vdCBjcmVhdGUgJXMgcHJvY2ZzIGVudHJ5LlxuIiwgdC0+Zm5hbWUpOwpAQCAtMzA2NCw3ICszMDUyLDcgQEAKIAogCWNyZWF0ZV9wcm9jX2RpcigpOwogCi0gICAgICAgIHNwcmludGYobW9kdWxlX2ZuYW1lLCAibmV0LyVzL3BnY3RybCIsIFBHX1BST0NfRElSKTsKKyAgICAgICAgc3ByaW50Zihtb2R1bGVfZm5hbWUsICIlcy9wZ2N0cmwiLCBQR19QUk9DX0RJUik7CiAgICAgICAgIG1vZHVsZV9wcm9jX2VudCA9IGNyZWF0ZV9wcm9jX2VudHJ5KG1vZHVsZV9mbmFtZSwgMDYwMCwgTlVMTCk7CiAgICAgICAgIGlmICghbW9kdWxlX3Byb2NfZW50KSB7CiAgICAgICAgICAgICAgICAgcHJpbnRrKCJwa3RnZW46IEVSUk9SOiBjYW5ub3QgY3JlYXRlICVzIHByb2NmcyBlbnRyeS5cbiIsIG1vZHVsZV9mbmFtZSk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IGY4MGEyODcuLjAyY2Q0Y2QgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCisrKyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC03MSw4ICs3MSw2IEBACiBzdGF0aWMga21lbV9jYWNoZV90ICpza2J1ZmZfaGVhZF9jYWNoZSBfX3JlYWRfbW9zdGx5Owogc3RhdGljIGttZW1fY2FjaGVfdCAqc2tidWZmX2ZjbG9uZV9jYWNoZSBfX3JlYWRfbW9zdGx5OwogCi1zdHJ1Y3QgdGltZXZhbCBfX3JlYWRfbW9zdGx5IHNrYl90dl9iYXNlOwotCiAvKgogICoJS2VlcCBvdXQtb2YtbGluZSB0byBwcmV2ZW50IGtlcm5lbCBibG9hdC4KICAqCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcyBpcyBub3QgdXNlZCBiZWNhdXNlIGl0IGlzIG5vdCBhbHdheXMKQEAgLTEzMiw3ICsxMzAsNyBAQAogICoJQnVmZmVycyBtYXkgb25seSBiZSBhbGxvY2F0ZWQgZnJvbSBpbnRlcnJ1cHRzIHVzaW5nIGEgQGdmcF9tYXNrIG9mCiAgKgklR0ZQX0FUT01JQy4KICAqLwotc3RydWN0IHNrX2J1ZmYgKl9fYWxsb2Nfc2tiKHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX21hc2ssCitzdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9tYXNrLAogCQkJICAgIGludCBmY2xvbmUpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTIwMCw3ICsxOTgsNyBAQAogICovCiBzdHJ1Y3Qgc2tfYnVmZiAqYWxsb2Nfc2tiX2Zyb21fY2FjaGUoa21lbV9jYWNoZV90ICpjcCwKIAkJCQkgICAgIHVuc2lnbmVkIGludCBzaXplLAotCQkJCSAgICAgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcF9tYXNrKQorCQkJCSAgICAgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1OCAqZGF0YTsKQEAgLTM2Myw3ICszNjEsNyBAQAogICoJJUdGUF9BVE9NSUMuCiAgKi8KIAotc3RydWN0IHNrX2J1ZmYgKnNrYl9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX21hc2spCitzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2Nsb25lKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKQogewogCXN0cnVjdCBza19idWZmICpuOwogCkBAIC00MTIsNiArNDEwLDkgQEAKIAlDKG5mY3QpOwogCW5mX2Nvbm50cmFja19nZXQoc2tiLT5uZmN0KTsKIAlDKG5mY3RpbmZvKTsKKyNpZiBkZWZpbmVkKENPTkZJR19JUF9WUykgfHwgZGVmaW5lZChDT05GSUdfSVBfVlNfTU9EVUxFKQorCUMoaXB2c19wcm9wZXJ0eSk7CisjZW5kaWYKICNpZmRlZiBDT05GSUdfQlJJREdFX05FVEZJTFRFUgogCUMobmZfYnJpZGdlKTsKIAluZl9icmlkZ2VfZ2V0KHNrYi0+bmZfYnJpZGdlKTsKQEAgLTQ2OSw2ICs0NzAsOSBAQAogCW5ldy0+bmZjdAk9IG9sZC0+bmZjdDsKIAluZl9jb25udHJhY2tfZ2V0KG9sZC0+bmZjdCk7CiAJbmV3LT5uZmN0aW5mbwk9IG9sZC0+bmZjdGluZm87CisjaWYgZGVmaW5lZChDT05GSUdfSVBfVlMpIHx8IGRlZmluZWQoQ09ORklHX0lQX1ZTX01PRFVMRSkKKwluZXctPmlwdnNfcHJvcGVydHkgPSBvbGQtPmlwdnNfcHJvcGVydHk7CisjZW5kaWYKICNpZmRlZiBDT05GSUdfQlJJREdFX05FVEZJTFRFUgogCW5ldy0+bmZfYnJpZGdlCT0gb2xkLT5uZl9icmlkZ2U7CiAJbmZfYnJpZGdlX2dldChvbGQtPm5mX2JyaWRnZSk7CkBAIC01MDIsNyArNTA2LDcgQEAKICAqCWhlYWRlciBpcyBnb2luZyB0byBiZSBtb2RpZmllZC4gVXNlIHBza2JfY29weSgpIGluc3RlYWQuCiAgKi8KIAotc3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaykKK3N0cnVjdCBza19idWZmICpza2JfY29weShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaykKIHsKIAlpbnQgaGVhZGVybGVuID0gc2tiLT5kYXRhIC0gc2tiLT5oZWFkOwogCS8qCkBAIC01NDEsNyArNTQ1LDcgQEAKICAqCVRoZSByZXR1cm5lZCBidWZmZXIgaGFzIGEgcmVmZXJlbmNlIGNvdW50IG9mIDEuCiAgKi8KIAotc3RydWN0IHNrX2J1ZmYgKnBza2JfY29weShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX21hc2spCitzdHJ1Y3Qgc2tfYnVmZiAqcHNrYl9jb3B5KHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKQogewogCS8qCiAJICoJQWxsb2NhdGUgdGhlIGNvcHkgYnVmZmVyCkBAIC02MDAsNyArNjA0LDcgQEAKICAqLwogCiBpbnQgcHNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhlYWQsIGludCBudGFpbCwKLQkJICAgICB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX21hc2spCisJCSAgICAgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJaW50IGk7CiAJdTggKmRhdGE7CkBAIC02OTEsNyArNjk1LDcgQEAKICAqLwogc3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5X2V4cGFuZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCWludCBuZXdoZWFkcm9vbSwgaW50IG5ld3RhaWxyb29tLAotCQkJCXVuc2lnbmVkIGludCBfX25vY2FzdCBnZnBfbWFzaykKKwkJCQlnZnBfdCBnZnBfbWFzaykKIHsKIAkvKgogCSAqCUFsbG9jYXRlIHRoZSBjb3B5IGJ1ZmZlcgpAQCAtMTcwOCw4ICsxNzEyLDYgQEAKIAkJCQkJCU5VTEwsIE5VTEwpOwogCWlmICghc2tidWZmX2ZjbG9uZV9jYWNoZSkKIAkJcGFuaWMoImNhbm5vdCBjcmVhdGUgc2tidWZmIGNhY2hlIik7Ci0KLQlkb19nZXR0aW1lb2ZkYXkoJnNrYl90dl9iYXNlKTsKIH0KIAogRVhQT1JUX1NZTUJPTChfX19wc2tiX3RyaW0pOwpAQCAtMTc0Myw0ICsxNzQ1LDMgQEAKIEVYUE9SVF9TWU1CT0woc2tiX3NlcV9yZWFkKTsKIEVYUE9SVF9TWU1CT0woc2tiX2Fib3J0X3NlcV9yZWFkKTsKIEVYUE9SVF9TWU1CT0woc2tiX2ZpbmRfdGV4dCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl90dl9iYXNlKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suYwppbmRleCBhYzYzYjU2Li4xYzUyZmU4IDEwMDY0NAotLS0gYS9uZXQvY29yZS9zb2NrLmMKKysrIGIvbmV0L2NvcmUvc29jay5jCkBAIC02MzcsNyArNjM3LDcgQEAKICAqCUBwcm90OiBzdHJ1Y3QgcHJvdG8gYXNzb2NpYXRlZCB3aXRoIHRoaXMgbmV3IHNvY2sgaW5zdGFuY2UKICAqCUB6ZXJvX2l0OiBpZiB3ZSBzaG91bGQgemVybyB0aGUgbmV3bHkgYWxsb2NhdGVkIHNvY2sKICAqLwotc3RydWN0IHNvY2sgKnNrX2FsbG9jKGludCBmYW1pbHksIHVuc2lnbmVkIGludCBfX25vY2FzdCBwcmlvcml0eSwKK3N0cnVjdCBzb2NrICpza19hbGxvYyhpbnQgZmFtaWx5LCBnZnBfdCBwcmlvcml0eSwKIAkJICAgICAgc3RydWN0IHByb3RvICpwcm90LCBpbnQgemVyb19pdCkKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBOVUxMOwpAQCAtNjYwLDE2ICs2NjAsMjAgQEAKIAkJCXNvY2tfbG9ja19pbml0KHNrKTsKIAkJfQogCQkKLQkJaWYgKHNlY3VyaXR5X3NrX2FsbG9jKHNrLCBmYW1pbHksIHByaW9yaXR5KSkgewotCQkJaWYgKHNsYWIgIT0gTlVMTCkKLQkJCQlrbWVtX2NhY2hlX2ZyZWUoc2xhYiwgc2spOwotCQkJZWxzZQotCQkJCWtmcmVlKHNrKTsKLQkJCXNrID0gTlVMTDsKLQkJfSBlbHNlCi0JCQlfX21vZHVsZV9nZXQocHJvdC0+b3duZXIpOworCQlpZiAoc2VjdXJpdHlfc2tfYWxsb2Moc2ssIGZhbWlseSwgcHJpb3JpdHkpKQorCQkJZ290byBvdXRfZnJlZTsKKworCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHByb3QtPm93bmVyKSkKKwkJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCXJldHVybiBzazsKKworb3V0X2ZyZWU6CisJaWYgKHNsYWIgIT0gTlVMTCkKKwkJa21lbV9jYWNoZV9mcmVlKHNsYWIsIHNrKTsKKwllbHNlCisJCWtmcmVlKHNrKTsKKwlyZXR1cm4gTlVMTDsKIH0KIAogdm9pZCBza19mcmVlKHN0cnVjdCBzb2NrICpzaykKQEAgLTcwMCw3ICs3MDQsNyBAQAogCW1vZHVsZV9wdXQob3duZXIpOwogfQogCi1zdHJ1Y3Qgc29jayAqc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgcHJpb3JpdHkpCitzdHJ1Y3Qgc29jayAqc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBnZnBfdCBwcmlvcml0eSkKIHsKIAlzdHJ1Y3Qgc29jayAqbmV3c2sgPSBza19hbGxvYyhzay0+c2tfZmFtaWx5LCBwcmlvcml0eSwgc2stPnNrX3Byb3QsIDApOwogCkBAIC04NDEsNyArODQ1LDcgQEAKICAqIEFsbG9jYXRlIGEgc2tiIGZyb20gdGhlIHNvY2tldCdzIHNlbmQgYnVmZmVyLgogICovCiBzdHJ1Y3Qgc2tfYnVmZiAqc29ja193bWFsbG9jKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgZm9yY2UsCi0JCQkgICAgIHVuc2lnbmVkIGludCBfX25vY2FzdCBwcmlvcml0eSkKKwkJCSAgICAgZ2ZwX3QgcHJpb3JpdHkpCiB7CiAJaWYgKGZvcmNlIHx8IGF0b21pY19yZWFkKCZzay0+c2tfd21lbV9hbGxvYykgPCBzay0+c2tfc25kYnVmKSB7CiAJCXN0cnVjdCBza19idWZmICogc2tiID0gYWxsb2Nfc2tiKHNpemUsIHByaW9yaXR5KTsKQEAgLTg1Nyw3ICs4NjEsNyBAQAogICogQWxsb2NhdGUgYSBza2IgZnJvbSB0aGUgc29ja2V0J3MgcmVjZWl2ZSBidWZmZXIuCiAgKi8gCiBzdHJ1Y3Qgc2tfYnVmZiAqc29ja19ybWFsbG9jKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgZm9yY2UsCi0JCQkgICAgIHVuc2lnbmVkIGludCBfX25vY2FzdCBwcmlvcml0eSkKKwkJCSAgICAgZ2ZwX3QgcHJpb3JpdHkpCiB7CiAJaWYgKGZvcmNlIHx8IGF0b21pY19yZWFkKCZzay0+c2tfcm1lbV9hbGxvYykgPCBzay0+c2tfcmN2YnVmKSB7CiAJCXN0cnVjdCBza19idWZmICpza2IgPSBhbGxvY19za2Ioc2l6ZSwgcHJpb3JpdHkpOwpAQCAtODcyLDcgKzg3Niw3IEBACiAvKiAKICAqIEFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrIGZyb20gdGhlIHNvY2tldCdzIG9wdGlvbiBtZW1vcnkgYnVmZmVyLgogICovIAotdm9pZCAqc29ja19rbWFsbG9jKHN0cnVjdCBzb2NrICpzaywgaW50IHNpemUsIHVuc2lnbmVkIGludCBfX25vY2FzdCBwcmlvcml0eSkKK3ZvaWQgKnNvY2tfa21hbGxvYyhzdHJ1Y3Qgc29jayAqc2ssIGludCBzaXplLCBnZnBfdCBwcmlvcml0eSkKIHsKIAlpZiAoKHVuc2lnbmVkKXNpemUgPD0gc3lzY3RsX29wdG1lbV9tYXggJiYKIAkgICAgYXRvbWljX3JlYWQoJnNrLT5za19vbWVtX2FsbG9jKSArIHNpemUgPCBzeXNjdGxfb3B0bWVtX21heCkgewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvd2lyZWxlc3MuYyBiL25ldC9jb3JlL3dpcmVsZXNzLmMKaW5kZXggZDE3ZjE1OC4uMjcxZGRiMyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvd2lyZWxlc3MuYworKysgYi9uZXQvY29yZS93aXJlbGVzcy5jCkBAIC00NTUsMTAgKzQ1NSwxNSBAQAogCiAJLyogT2xkIGxvY2F0aW9uLCBmaWVsZCB0byBiZSByZW1vdmVkIGluIG5leHQgV0UgKi8KIAlpZihkZXYtPmdldF93aXJlbGVzc19zdGF0cykgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXMgKFdFKSA6IERyaXZlciB1c2luZyBvbGQgL3Byb2MvbmV0L3dpcmVsZXNzIHN1cHBvcnQsIHBsZWFzZSBmaXggZHJpdmVyICFcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOworCQlzdGF0aWMgaW50IHByaW50ZWRfbWVzc2FnZTsKKworCQlpZiAoIXByaW50ZWRfbWVzc2FnZSsrKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzIChXRSkgOiBEcml2ZXIgdXNpbmcgb2xkIC9wcm9jL25ldC93aXJlbGVzcyBzdXBwb3J0LCBwbGVhc2UgZml4IGRyaXZlciAhXG4iLAorCQkJCWRldi0+bmFtZSk7CisKIAkJcmV0dXJuIGRldi0+Z2V0X3dpcmVsZXNzX3N0YXRzKGRldik7CiAJfQorCiAJLyogTm90IGZvdW5kICovCiAJcmV0dXJuIChzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqKSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvTWFrZWZpbGUgYi9uZXQvZGNjcC9NYWtlZmlsZQppbmRleCBmYjk3YmIwLi4zNDRhOGRhIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9NYWtlZmlsZQorKysgYi9uZXQvZGNjcC9NYWtlZmlsZQpAQCAtMyw2ICszLDggQEAKIGRjY3AteSA6PSBjY2lkLm8gaW5wdXQubyBpcHY0Lm8gbWluaXNvY2tzLm8gb3B0aW9ucy5vIG91dHB1dC5vIHByb3RvLm8gXAogCSAgdGltZXIubwogCitkY2NwLSQoQ09ORklHX0lQX0RDQ1BfQUNLVkVDKSArPSBhY2t2ZWMubworCiBvYmotJChDT05GSUdfSU5FVF9EQ0NQX0RJQUcpICs9IGRjY3BfZGlhZy5vCiAKIGRjY3BfZGlhZy15IDo9IGRpYWcubwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvYWNrdmVjLmMgYi9uZXQvZGNjcC9hY2t2ZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWE2MmNjCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2RjY3AvYWNrdmVjLmMKQEAgLTAsMCArMSw0MTkgQEAKKy8qCisgKiAgbmV0L2RjY3AvYWNrdmVjLmMKKyAqCisgKiAgQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIERDQ1AgcHJvdG9jb2wKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGdob3N0cHJvdG9jb2xzLm5ldD4KKyAqCisgKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogICAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZTsKKyAqLworCisjaW5jbHVkZSAiYWNrdmVjLmgiCisjaW5jbHVkZSAiZGNjcC5oIgorCisjaW5jbHVkZSA8bGludXgvZGNjcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorCisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKworaW50IGRjY3BfaW5zZXJ0X29wdGlvbl9hY2t2ZWMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CisJc3RydWN0IGRjY3BfYWNrdmVjICphdiA9IGRwLT5kY2Nwc19oY19yeF9hY2t2ZWM7CisJaW50IGxlbiA9IGF2LT5kY2NwYXZfdmVjX2xlbiArIDI7CisJc3RydWN0IHRpbWV2YWwgbm93OworCXUzMiBlbGFwc2VkX3RpbWU7CisJdW5zaWduZWQgY2hhciAqdG8sICpmcm9tOworCisJZGNjcF90aW1lc3RhbXAoc2ssICZub3cpOworCWVsYXBzZWRfdGltZSA9IHRpbWV2YWxfZGVsdGEoJm5vdywgJmF2LT5kY2NwYXZfdGltZSkgLyAxMDsKKworCWlmIChlbGFwc2VkX3RpbWUgIT0gMCkKKwkJZGNjcF9pbnNlcnRfb3B0aW9uX2VsYXBzZWRfdGltZShzaywgc2tiLCBlbGFwc2VkX3RpbWUpOworCisJaWYgKERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX29wdF9sZW4gKyBsZW4gPiBEQ0NQX01BWF9PUFRfTEVOKQorCQlyZXR1cm4gLTE7CisKKwkvKgorCSAqIFhYWDogbm93IHdlIGhhdmUganVzdCBvbmUgYWNrIHZlY3RvciBzZW50IHJlY29yZCwgc28KKwkgKiB3ZSBoYXZlIHRvIHdhaXQgZm9yIGl0IHRvIGJlIGNsZWFyZWQuCisJICoKKwkgKiBPZiBjb3Vyc2UgdGhpcyBpcyBub3QgYWNjZXB0YWJsZSwgYnV0IHRoaXMgaXMganVzdCBmb3IKKwkgKiBiYXNpYyB0ZXN0aW5nIG5vdy4KKwkgKi8KKwlpZiAoYXYtPmRjY3Bhdl9hY2tfc2Vxbm8gIT0gRENDUF9NQVhfU0VRTk8gKyAxKQorCQlyZXR1cm4gLTE7CisKKwlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9vcHRfbGVuICs9IGxlbjsKKworCXRvICAgID0gc2tiX3B1c2goc2tiLCBsZW4pOworCSp0bysrID0gRENDUE9fQUNLX1ZFQ1RPUl8wOworCSp0bysrID0gbGVuOworCisJbGVuICA9IGF2LT5kY2NwYXZfdmVjX2xlbjsKKwlmcm9tID0gYXYtPmRjY3Bhdl9idWYgKyBhdi0+ZGNjcGF2X2J1Zl9oZWFkOworCisJLyogQ2hlY2sgaWYgYnVmX2hlYWQgd3JhcHMgKi8KKwlpZiAoYXYtPmRjY3Bhdl9idWZfaGVhZCArIGxlbiA+IGF2LT5kY2NwYXZfdmVjX2xlbikgeworCQljb25zdCB1MzIgdGFpbHNpemUgPSAoYXYtPmRjY3Bhdl92ZWNfbGVuIC0gYXYtPmRjY3Bhdl9idWZfaGVhZCk7CisKKwkJbWVtY3B5KHRvLCBmcm9tLCB0YWlsc2l6ZSk7CisJCXRvICAgKz0gdGFpbHNpemU7CisJCWxlbiAgLT0gdGFpbHNpemU7CisJCWZyb20gPSBhdi0+ZGNjcGF2X2J1ZjsKKwl9CisKKwltZW1jcHkodG8sIGZyb20sIGxlbik7CisJLyoKKwkgKglGcm9tIGRyYWZ0LWlldGYtZGNjcC1zcGVjLTExLnR4dDoKKwkgKgorCSAqCUZvciBlYWNoIGFja25vd2xlZGdlbWVudCBpdCBzZW5kcywgdGhlIEhDLVJlY2VpdmVyIHdpbGwgYWRkIGFuCisJICoJYWNrbm93bGVkZ2VtZW50IHJlY29yZC4gIGFja19zZXFubyB3aWxsIGVxdWFsIHRoZSBIQy1SZWNlaXZlcgorCSAqCXNlcXVlbmNlIG51bWJlciBpdCB1c2VkIGZvciB0aGUgYWNrIHBhY2tldDsgYWNrX3B0ciB3aWxsIGVxdWFsCisJICoJYnVmX2hlYWQ7IGFja19hY2tubyB3aWxsIGVxdWFsIGJ1Zl9hY2tubzsgYW5kIGFja19ub25jZSB3aWxsCisJICoJZXF1YWwgYnVmX25vbmNlLgorCSAqCisJICogVGhpcyBpbXBsZW1lbnRpb24gdXNlcyBqdXN0IG9uZSBhY2sgcmVjb3JkIGZvciBub3cuCisJICovCisJYXYtPmRjY3Bhdl9hY2tfc2Vxbm8gPSBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9zZXE7CisJYXYtPmRjY3Bhdl9hY2tfcHRyICAgPSBhdi0+ZGNjcGF2X2J1Zl9oZWFkOworCWF2LT5kY2NwYXZfYWNrX2Fja25vID0gYXYtPmRjY3Bhdl9idWZfYWNrbm87CisJYXYtPmRjY3Bhdl9hY2tfbm9uY2UgPSBhdi0+ZGNjcGF2X2J1Zl9ub25jZTsKKwlhdi0+ZGNjcGF2X3NlbnRfbGVuICA9IGF2LT5kY2NwYXZfdmVjX2xlbjsKKworCWRjY3BfcHJfZGVidWcoIiVzQUNLIFZlY3RvciAwLCBsZW49JWQsIGFja19zZXFubz0lbGx1LCAiCisJCSAgICAgICJhY2tfYWNrbm89JWxsdVxuIiwKKwkJICAgICAgZGVidWdfcHJlZml4LCBhdi0+ZGNjcGF2X3NlbnRfbGVuLAorCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWF2LT5kY2NwYXZfYWNrX3NlcW5vLAorCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWF2LT5kY2NwYXZfYWNrX2Fja25vKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0cnVjdCBkY2NwX2Fja3ZlYyAqZGNjcF9hY2t2ZWNfYWxsb2MoY29uc3QgdW5zaWduZWQgaW50IGxlbiwKKwkJCQkgICAgICBjb25zdCBnZnBfdCBwcmlvcml0eSkKK3sKKwlzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2ID0ga21hbGxvYyhzaXplb2YoKmF2KSArIGxlbiwgcHJpb3JpdHkpOworCisJaWYgKGF2ICE9IE5VTEwpIHsKKwkJYXYtPmRjY3Bhdl9idWZfbGVuCT0gbGVuOworCQlhdi0+ZGNjcGF2X2J1Zl9oZWFkCT0KKwkJCWF2LT5kY2NwYXZfYnVmX3RhaWwgPSBhdi0+ZGNjcGF2X2J1Zl9sZW4gLSAxOworCQlhdi0+ZGNjcGF2X2J1Zl9hY2tubwk9CisJCQlhdi0+ZGNjcGF2X2Fja19hY2tubyA9IGF2LT5kY2NwYXZfYWNrX3NlcW5vID0gfjBMTFU7CisJCWF2LT5kY2NwYXZfYnVmX25vbmNlID0gYXYtPmRjY3Bhdl9idWZfbm9uY2UgPSAwOworCQlhdi0+ZGNjcGF2X2Fja19wdHIJPSAwOworCQlhdi0+ZGNjcGF2X3RpbWUudHZfc2VjCT0gMDsKKwkJYXYtPmRjY3Bhdl90aW1lLnR2X3VzZWMJPSAwOworCQlhdi0+ZGNjcGF2X3NlbnRfbGVuCT0gYXYtPmRjY3Bhdl92ZWNfbGVuID0gMDsKKwl9CisKKwlyZXR1cm4gYXY7Cit9CisKK3ZvaWQgZGNjcF9hY2t2ZWNfZnJlZShzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2KQoreworCWtmcmVlKGF2KTsKK30KKworc3RhdGljIGlubGluZSB1OCBkY2NwX2Fja3ZlY19zdGF0ZShjb25zdCBzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2LAorCQkJCSAgIGNvbnN0IHVuc2lnbmVkIGludCBpbmRleCkKK3sKKwlyZXR1cm4gYXYtPmRjY3Bhdl9idWZbaW5kZXhdICYgRENDUF9BQ0tWRUNfU1RBVEVfTUFTSzsKK30KKworc3RhdGljIGlubGluZSB1OCBkY2NwX2Fja3ZlY19sZW4oY29uc3Qgc3RydWN0IGRjY3BfYWNrdmVjICphdiwKKwkJCQkgY29uc3QgdW5zaWduZWQgaW50IGluZGV4KQoreworCXJldHVybiBhdi0+ZGNjcGF2X2J1ZltpbmRleF0gJiBEQ0NQX0FDS1ZFQ19MRU5fTUFTSzsKK30KKworLyoKKyAqIElmIHNldmVyYWwgcGFja2V0cyBhcmUgbWlzc2luZywgdGhlIEhDLVJlY2VpdmVyIG1heSBwcmVmZXIgdG8gZW50ZXIgbXVsdGlwbGUKKyAqIGJ5dGVzIHdpdGggcnVuIGxlbmd0aCAwLCByYXRoZXIgdGhhbiBhIHNpbmdsZSBieXRlIHdpdGggYSBsYXJnZXIgcnVuIGxlbmd0aDsKKyAqIHRoaXMgc2ltcGxpZmllcyB0YWJsZSB1cGRhdGVzIGlmIG9uZSBvZiB0aGUgbWlzc2luZyBwYWNrZXRzIGFycml2ZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRjY3BfYWNrdmVjX3NldF9idWZfaGVhZF9zdGF0ZShzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2LAorCQkJCQkJIGNvbnN0IHVuc2lnbmVkIGludCBwYWNrZXRzLAorCQkJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyIHN0YXRlKQoreworCXVuc2lnbmVkIGludCBnYXA7CisJc2lnbmVkIGxvbmcgbmV3X2hlYWQ7CisKKwlpZiAoYXYtPmRjY3Bhdl92ZWNfbGVuICsgcGFja2V0cyA+IGF2LT5kY2NwYXZfYnVmX2xlbikKKwkJcmV0dXJuIC1FTk9CVUZTOworCisJZ2FwCSA9IHBhY2tldHMgLSAxOworCW5ld19oZWFkID0gYXYtPmRjY3Bhdl9idWZfaGVhZCAtIHBhY2tldHM7CisKKwlpZiAobmV3X2hlYWQgPCAwKSB7CisJCWlmIChnYXAgPiAwKSB7CisJCQltZW1zZXQoYXYtPmRjY3Bhdl9idWYsIERDQ1BfQUNLVkVDX1NUQVRFX05PVF9SRUNFSVZFRCwKKwkJCSAgICAgICBnYXAgKyBuZXdfaGVhZCArIDEpOworCQkJZ2FwID0gLW5ld19oZWFkOworCQl9CisJCW5ld19oZWFkICs9IGF2LT5kY2NwYXZfYnVmX2xlbjsKKwl9IAorCisJYXYtPmRjY3Bhdl9idWZfaGVhZCA9IG5ld19oZWFkOworCisJaWYgKGdhcCA+IDApCisJCW1lbXNldChhdi0+ZGNjcGF2X2J1ZiArIGF2LT5kY2NwYXZfYnVmX2hlYWQgKyAxLAorCQkgICAgICAgRENDUF9BQ0tWRUNfU1RBVEVfTk9UX1JFQ0VJVkVELCBnYXApOworCisJYXYtPmRjY3Bhdl9idWZbYXYtPmRjY3Bhdl9idWZfaGVhZF0gPSBzdGF0ZTsKKwlhdi0+ZGNjcGF2X3ZlY19sZW4gKz0gcGFja2V0czsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEltcGxlbWVudHMgdGhlIGRyYWZ0LWlldGYtZGNjcC1zcGVjLTExLnR4dCBBcHBlbmRpeCBBCisgKi8KK2ludCBkY2NwX2Fja3ZlY19hZGQoc3RydWN0IGRjY3BfYWNrdmVjICphdiwgY29uc3Qgc3RydWN0IHNvY2sgKnNrLAorCQkgICAgY29uc3QgdTY0IGFja25vLCBjb25zdCB1OCBzdGF0ZSkKK3sKKwkvKgorCSAqIENoZWNrIGF0IHRoZSByaWdodCBwbGFjZXMgaWYgdGhlIGJ1ZmZlciBpcyBmdWxsLCBpZiBpdCBpcywgdGVsbCB0aGUKKwkgKiBjYWxsZXIgdG8gc3RhcnQgZHJvcHBpbmcgcGFja2V0cyB0aWxsIHRoZSBIQy1TZW5kZXIgYWNrcyBvdXIgQUNLCisJICogdmVjdG9ycywgd2hlbiB3ZSB3aWxsIGZyZWUgdXAgc3BhY2UgaW4gZGNjcGF2X2J1Zi4KKwkgKgorCSAqIFdlIG1heSB3ZWxsIGRlY2lkZSB0byBkbyBidWZmZXIgY29tcHJlc3Npb24sIGV0YywgYnV0IGZvciBub3cgbGV0cworCSAqIGp1c3QgZHJvcC4KKwkgKgorCSAqIEZyb20gQXBwZW5kaXggQToKKwkgKgorCSAqCU9mIGNvdXJzZSwgdGhlIGNpcmN1bGFyIGJ1ZmZlciBtYXkgb3ZlcmZsb3csIGVpdGhlciB3aGVuIHRoZQorCSAqCUhDLVNlbmRlciBpcyBzZW5kaW5nIGRhdGEgYXQgYSB2ZXJ5IGhpZ2ggcmF0ZSwgd2hlbiB0aGUKKwkgKglIQy1SZWNlaXZlcidzIGFja25vd2xlZGdlbWVudHMgYXJlIG5vdCByZWFjaGluZyB0aGUgSEMtU2VuZGVyLAorCSAqCW9yIHdoZW4gdGhlIEhDLVNlbmRlciBpcyBmb3JnZXR0aW5nIHRvIGFja25vd2xlZGdlIHRob3NlIGFja3MKKwkgKgkoc28gdGhlIEhDLVJlY2VpdmVyIGlzIHVuYWJsZSB0byBjbGVhbiB1cCBvbGQgc3RhdGUpLiBJbiB0aGlzCisJICoJY2FzZSwgdGhlIEhDLVJlY2VpdmVyIHNob3VsZCBlaXRoZXIgY29tcHJlc3MgdGhlIGJ1ZmZlciAoYnkKKwkgKglpbmNyZWFzaW5nIHJ1biBsZW5ndGhzIHdoZW4gcG9zc2libGUpLCB0cmFuc2ZlciBpdHMgc3RhdGUgdG8KKwkgKglhIGxhcmdlciBidWZmZXIsIG9yLCBhcyBhIGxhc3QgcmVzb3J0LCBkcm9wIGFsbCByZWNlaXZlZAorCSAqCXBhY2tldHMsIHdpdGhvdXQgcHJvY2Vzc2luZyB0aGVtIHdoYXRzb2V2ZXIsIHVudGlsIGl0cyBidWZmZXIKKwkgKglzaHJpbmtzIGFnYWluLgorCSAqLworCisJLyogU2VlIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGFja25vIGJlaW5nIGluc2VydGVkICovCisJaWYgKGF2LT5kY2NwYXZfdmVjX2xlbiA9PSAwKSB7CisJCWF2LT5kY2NwYXZfYnVmW2F2LT5kY2NwYXZfYnVmX2hlYWRdID0gc3RhdGU7CisJCWF2LT5kY2NwYXZfdmVjX2xlbiA9IDE7CisJfSBlbHNlIGlmIChhZnRlcjQ4KGFja25vLCBhdi0+ZGNjcGF2X2J1Zl9hY2tubykpIHsKKwkJY29uc3QgdTY0IGRlbHRhID0gZGNjcF9kZWx0YV9zZXFubyhhdi0+ZGNjcGF2X2J1Zl9hY2tubywKKwkJCQkJCSAgIGFja25vKTsKKworCQkvKgorCQkgKiBMb29rIGlmIHRoZSBzdGF0ZSBvZiB0aGlzIHBhY2tldCBpcyB0aGUgc2FtZSBhcyB0aGUKKwkJICogcHJldmlvdXMgYWNrbm8gYW5kIGlmIHNvIGlmIHdlIGNhbiBidW1wIHRoZSBoZWFkIGxlbi4KKwkJICovCisJCWlmIChkZWx0YSA9PSAxICYmCisJCSAgICBkY2NwX2Fja3ZlY19zdGF0ZShhdiwgYXYtPmRjY3Bhdl9idWZfaGVhZCkgPT0gc3RhdGUgJiYKKwkJICAgIChkY2NwX2Fja3ZlY19sZW4oYXYsIGF2LT5kY2NwYXZfYnVmX2hlYWQpIDwKKwkJICAgICBEQ0NQX0FDS1ZFQ19MRU5fTUFTSykpCisJCQlhdi0+ZGNjcGF2X2J1Zlthdi0+ZGNjcGF2X2J1Zl9oZWFkXSsrOworCQllbHNlIGlmIChkY2NwX2Fja3ZlY19zZXRfYnVmX2hlYWRfc3RhdGUoYXYsIGRlbHRhLCBzdGF0ZSkpCisJCQlyZXR1cm4gLUVOT0JVRlM7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogQS4xLjIuICBPbGQgUGFja2V0cworCQkgKgorCQkgKglXaGVuIGEgcGFja2V0IHdpdGggU2VxdWVuY2UgTnVtYmVyIFMgYXJyaXZlcywgYW5kCisJCSAqCVMgPD0gYnVmX2Fja25vLCB0aGUgSEMtUmVjZWl2ZXIgd2lsbCBzY2FuIHRoZSB0YWJsZQorCQkgKglmb3IgdGhlIGJ5dGUgY29ycmVzcG9uZGluZyB0byBTLiAoSW5kZXhpbmcgc3RydWN0dXJlcworCQkgKgljb3VsZCByZWR1Y2UgdGhlIGNvbXBsZXhpdHkgb2YgdGhpcyBzY2FuLikKKwkJICovCisJCXU2NCBkZWx0YSA9IGRjY3BfZGVsdGFfc2Vxbm8oYWNrbm8sIGF2LT5kY2NwYXZfYnVmX2Fja25vKTsKKwkJdW5zaWduZWQgaW50IGluZGV4ID0gYXYtPmRjY3Bhdl9idWZfaGVhZDsKKworCQl3aGlsZSAoMSkgeworCQkJY29uc3QgdTggbGVuID0gZGNjcF9hY2t2ZWNfbGVuKGF2LCBpbmRleCk7CisJCQljb25zdCB1OCBzdGF0ZSA9IGRjY3BfYWNrdmVjX3N0YXRlKGF2LCBpbmRleCk7CisJCQkvKgorCQkJICogdmFsaWQgcGFja2V0cyBub3QgeWV0IGluIGRjY3Bhdl9idWYgaGF2ZSBhIHJlc2VydmVkCisJCQkgKiBlbnRyeSwgd2l0aCBhIGxlbiBlcXVhbCB0byAwLgorCQkJICovCisJCQlpZiAoc3RhdGUgPT0gRENDUF9BQ0tWRUNfU1RBVEVfTk9UX1JFQ0VJVkVEICYmCisJCQkgICAgbGVuID09IDAgJiYgZGVsdGEgPT0gMCkgeyAvKiBGb3VuZCBvdXIKKwkJCQkJCQkgcmVzZXJ2ZWQgc2VhdCEgKi8KKwkJCQlkY2NwX3ByX2RlYnVnKCJGb3VuZCAlbGx1IHJlc2VydmVkIHNlYXQhXG4iLAorCQkJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWFja25vKTsKKwkJCQlhdi0+ZGNjcGF2X2J1ZltpbmRleF0gPSBzdGF0ZTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCS8qIGxlbiA9PSAwIG1lYW5zIG9uZSBwYWNrZXQgKi8KKwkJCWlmIChkZWx0YSA8IGxlbiArIDEpCisJCQkJZ290byBvdXRfZHVwbGljYXRlOworCisJCQlkZWx0YSAtPSBsZW4gKyAxOworCQkJaWYgKCsraW5kZXggPT0gYXYtPmRjY3Bhdl9idWZfbGVuKQorCQkJCWluZGV4ID0gMDsKKwkJfQorCX0KKworCWF2LT5kY2NwYXZfYnVmX2Fja25vID0gYWNrbm87CisJZGNjcF90aW1lc3RhbXAoc2ssICZhdi0+ZGNjcGF2X3RpbWUpOworb3V0OgorCWRjY3BfcHJfZGVidWcoIiIpOworCXJldHVybiAwOworCitvdXRfZHVwbGljYXRlOgorCS8qIER1cGxpY2F0ZSBwYWNrZXQgKi8KKwlkY2NwX3ByX2RlYnVnKCJSZWNlaXZlZCBhIGR1cCBvciBhbHJlYWR5IGNvbnNpZGVyZWQgbG9zdCAiCisJCSAgICAgICJwYWNrZXQ6ICVsbHVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpYWNrbm8pOworCXJldHVybiAtRUlMU0VROworfQorCisjaWZkZWYgQ09ORklHX0lQX0RDQ1BfREVCVUcKK3ZvaWQgZGNjcF9hY2t2ZWN0b3JfcHJpbnQoY29uc3QgdTY0IGFja25vLCBjb25zdCB1bnNpZ25lZCBjaGFyICp2ZWN0b3IsIGludCBsZW4pCit7CisJaWYgKCFkY2NwX2RlYnVnKQorCQlyZXR1cm47CisKKwlwcmludGsoIkFDSyB2ZWN0b3IgbGVuPSVkLCBhY2tubz0lbGx1IHwiLCBsZW4sCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYWNrbm8pOworCisJd2hpbGUgKGxlbi0tKSB7CisJCWNvbnN0IHU4IHN0YXRlID0gKCp2ZWN0b3IgJiBEQ0NQX0FDS1ZFQ19TVEFURV9NQVNLKSA+PiA2OworCQljb25zdCB1OCBybCA9ICp2ZWN0b3IgJiBEQ0NQX0FDS1ZFQ19MRU5fTUFTSzsKKworCQlwcmludGsoIiVkLCVkfCIsIHN0YXRlLCBybCk7CisJCSsrdmVjdG9yOworCX0KKworCXByaW50aygiXG4iKTsKK30KKwordm9pZCBkY2NwX2Fja3ZlY19wcmludChjb25zdCBzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2KQoreworCWRjY3BfYWNrdmVjdG9yX3ByaW50KGF2LT5kY2NwYXZfYnVmX2Fja25vLAorCQkJICAgICBhdi0+ZGNjcGF2X2J1ZiArIGF2LT5kY2NwYXZfYnVmX2hlYWQsCisJCQkgICAgIGF2LT5kY2NwYXZfdmVjX2xlbik7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgZGNjcF9hY2t2ZWNfdHJvd19hd2F5X2Fja19yZWNvcmQoc3RydWN0IGRjY3BfYWNrdmVjICphdikKK3sKKwkvKgorCSAqIEFzIHdlJ3JlIGtlZXBpbmcgdHJhY2sgb2YgdGhlIGFjayB2ZWN0b3Igc2l6ZSAoZGNjcGF2X3ZlY19sZW4pIGFuZAorCSAqIHRoZSBzZW50IGFjayB2ZWN0b3Igc2l6ZSAoZGNjcGF2X3NlbnRfbGVuKSB3ZSBkb24ndCBuZWVkCisJICogZGNjcGF2X2J1Zl90YWlsIGF0IGFsbCwgYnV0IGtlZXAgdGhpcyBjb2RlIGhlcmUgYXMgaW4gdGhlIGZ1dHVyZQorCSAqIHdlJ2xsIGltcGxlbWVudCBhIHZlY3RvciBvZiBhY2sgcmVjb3JkcywgYXMgc3VnZ2VzdGVkIGluCisJICogZHJhZnQtaWV0Zi1kY2NwLXNwZWMtMTEudHh0IEFwcGVuZGl4IEEuIC1hY21lCisJICovCisjaWYgMAorCWF2LT5kY2NwYXZfYnVmX3RhaWwgPSBhdi0+ZGNjcGF2X2Fja19wdHIgKyAxOworCWlmIChhdi0+ZGNjcGF2X2J1Zl90YWlsID49IGF2LT5kY2NwYXZfdmVjX2xlbikKKwkJYXYtPmRjY3Bhdl9idWZfdGFpbCAtPSBhdi0+ZGNjcGF2X3ZlY19sZW47CisjZW5kaWYKKwlhdi0+ZGNjcGF2X3ZlY19sZW4gLT0gYXYtPmRjY3Bhdl9zZW50X2xlbjsKK30KKwordm9pZCBkY2NwX2Fja3ZlY19jaGVja19yY3ZfYWNrbm8oc3RydWN0IGRjY3BfYWNrdmVjICphdiwgc3RydWN0IHNvY2sgKnNrLAorCQkJCSBjb25zdCB1NjQgYWNrbm8pCit7CisJLyogQ2hlY2sgaWYgd2UgYWN0dWFsbHkgc2VudCBhbiBBQ0sgdmVjdG9yICovCisJaWYgKGF2LT5kY2NwYXZfYWNrX3NlcW5vID09IERDQ1BfTUFYX1NFUU5PICsgMSkKKwkJcmV0dXJuOworCisJaWYgKGFja25vID09IGF2LT5kY2NwYXZfYWNrX3NlcW5vKSB7CisjaWZkZWYgQ09ORklHX0lQX0RDQ1BfREVCVUcKKwkJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKKwkJY29uc3QgY2hhciAqZGVidWdfcHJlZml4ID0gZHAtPmRjY3BzX3JvbGUgPT0gRENDUF9ST0xFX0NMSUVOVCA/CisJCQkJCSJDTElFTlQgcnggYWNrOiAiIDogInNlcnZlciByeCBhY2s6ICI7CisjZW5kaWYKKwkJZGNjcF9wcl9kZWJ1ZygiJXNBQ0sgcGFja2V0IDAsIGxlbj0lZCwgYWNrX3NlcW5vPSVsbHUsICIKKwkJCSAgICAgICJhY2tfYWNrbm89JWxsdSwgQUNLRUQhXG4iLAorCQkJICAgICAgZGVidWdfcHJlZml4LCAxLAorCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhdi0+ZGNjcGF2X2Fja19zZXFubywKKwkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYXYtPmRjY3Bhdl9hY2tfYWNrbm8pOworCQlkY2NwX2Fja3ZlY190cm93X2F3YXlfYWNrX3JlY29yZChhdik7CisJCWF2LT5kY2NwYXZfYWNrX3NlcW5vID0gRENDUF9NQVhfU0VRTk8gKyAxOworCX0KK30KKworc3RhdGljIHZvaWQgZGNjcF9hY2t2ZWNfY2hlY2tfcmN2X2Fja3ZlY3RvcihzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2LAorCQkJCQkgICAgc3RydWN0IHNvY2sgKnNrLCB1NjQgYWNrbm8sCisJCQkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGxlbiwKKwkJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZlY3RvcikKK3sKKwl1bnNpZ25lZCBjaGFyIGk7CisKKwkvKiBDaGVjayBpZiB3ZSBhY3R1YWxseSBzZW50IGFuIEFDSyB2ZWN0b3IgKi8KKwlpZiAoYXYtPmRjY3Bhdl9hY2tfc2Vxbm8gPT0gRENDUF9NQVhfU0VRTk8gKyAxKQorCQlyZXR1cm47CisJLyoKKwkgKiBXZSdyZSBpbiB0aGUgcmVjZWl2ZXIgaGFsZiBjb25uZWN0aW9uLCBzbyBpZiB0aGUgcmVjZWl2ZWQgYW4gQUNLCisJICogdmVjdG9yIGFja25vIChlLmcuIDUwKSBiZWZvcmUgZGNjcGF2X2Fja19zZXFubyAoZS5nLiA1MiksIHdlJ3JlCisJICogbm90IGludGVyZXN0ZWQuCisJICoKKwkgKiBFeHRyYSBleHBsYW5hdGlvbiB3aXRoIGV4YW1wbGU6CisJICogCisJICogaWYgd2UgcmVjZWl2ZWQgYW4gQUNLIHZlY3RvciB3aXRoIGFja25vIDUwLCBpdCBjYW4gb25seSBiZSBhY2tpbmcKKwkgKiA1MCwgNDksIDQ4LCBldGMsIG5vdCA1MiAodGhlIHNlcW5vIGZvciB0aGUgQUNLIHZlY3RvciB3ZSBzZW50KS4KKwkgKi8KKwkvKiBkY2NwX3ByX2RlYnVnKCJpcyAlbGx1IDwgJWxsdT8gIiwgYWNrbm8sIGF2LT5kY2NwYXZfYWNrX3NlcW5vKTsgKi8KKwlpZiAoYmVmb3JlNDgoYWNrbm8sIGF2LT5kY2NwYXZfYWNrX3NlcW5vKSkgeworCQkvKiBkY2NwX3ByX2RlYnVnX2NhdCgieWVzXG4iKTsgKi8KKwkJcmV0dXJuOworCX0KKwkvKiBkY2NwX3ByX2RlYnVnX2NhdCgibm9cbiIpOyAqLworCisJaSA9IGxlbjsKKwl3aGlsZSAoaS0tKSB7CisJCWNvbnN0IHU4IHJsID0gKnZlY3RvciAmIERDQ1BfQUNLVkVDX0xFTl9NQVNLOworCQl1NjQgYWNrbm9fZW5kX3JsOworCisJCWRjY3Bfc2V0X3NlcW5vKCZhY2tub19lbmRfcmwsIGFja25vIC0gcmwpOworCisJCS8qCisJCSAqIGRjY3BfcHJfZGVidWcoImlzICVsbHUgPD0gJWxsdSA8PSAlbGx1PyAiLCBhY2tub19lbmRfcmwsCisJCSAqIGF2LT5kY2NwYXZfYWNrX3NlcW5vLCBhY2tubyk7CisJCSAqLworCQlpZiAoYmV0d2VlbjQ4KGF2LT5kY2NwYXZfYWNrX3NlcW5vLCBhY2tub19lbmRfcmwsIGFja25vKSkgeworCQkJY29uc3QgdTggc3RhdGUgPSAoKnZlY3RvciAmCisJCQkJCSAgRENDUF9BQ0tWRUNfU1RBVEVfTUFTSykgPj4gNjsKKwkJCS8qIGRjY3BfcHJfZGVidWdfY2F0KCJ5ZXNcbiIpOyAqLworCisJCQlpZiAoc3RhdGUgIT0gRENDUF9BQ0tWRUNfU1RBVEVfTk9UX1JFQ0VJVkVEKSB7CisjaWZkZWYgQ09ORklHX0lQX0RDQ1BfREVCVUcKKwkJCQlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOworCQkJCWNvbnN0IGNoYXIgKmRlYnVnX3ByZWZpeCA9CisJCQkJCWRwLT5kY2Nwc19yb2xlID09IERDQ1BfUk9MRV9DTElFTlQgPworCQkJCQkiQ0xJRU5UIHJ4IGFjazogIiA6ICJzZXJ2ZXIgcnggYWNrOiAiOworI2VuZGlmCisJCQkJZGNjcF9wcl9kZWJ1ZygiJXNBQ0sgdmVjdG9yIDAsIGxlbj0lZCwgIgorCQkJCQkgICAgICAiYWNrX3NlcW5vPSVsbHUsIGFja19hY2tubz0lbGx1LCAiCisJCQkJCSAgICAgICJBQ0tFRCFcbiIsCisJCQkJCSAgICAgIGRlYnVnX3ByZWZpeCwgbGVuLAorCQkJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJCQkgICAgICBhdi0+ZGNjcGF2X2Fja19zZXFubywKKwkJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCQkJICAgICAgYXYtPmRjY3Bhdl9hY2tfYWNrbm8pOworCQkJCWRjY3BfYWNrdmVjX3Ryb3dfYXdheV9hY2tfcmVjb3JkKGF2KTsKKwkJCX0KKwkJCS8qCisJCQkgKiBJZiBkY2NwYXZfYWNrX3NlcW5vIHdhcyBub3QgcmVjZWl2ZWQsIG5vIHByb2JsZW0KKwkJCSAqIHdlJ2xsIHNlbmQgYW5vdGhlciBBQ0sgdmVjdG9yLgorCQkJICovCisJCQlhdi0+ZGNjcGF2X2Fja19zZXFubyA9IERDQ1BfTUFYX1NFUU5PICsgMTsKKwkJCWJyZWFrOworCQl9CisJCS8qIGRjY3BfcHJfZGVidWdfY2F0KCJub1xuIik7ICovCisKKwkJZGNjcF9zZXRfc2Vxbm8oJmFja25vLCBhY2tub19lbmRfcmwgLSAxKTsKKwkJKyt2ZWN0b3I7CisJfQorfQorCitpbnQgZGNjcF9hY2t2ZWNfcGFyc2Uoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgICBjb25zdCB1OCBvcHQsIGNvbnN0IHU4ICp2YWx1ZSwgY29uc3QgdTggbGVuKQoreworCWlmIChsZW4gPiBEQ0NQX01BWF9BQ0tWRUNfTEVOKQorCQlyZXR1cm4gLTE7CisKKwkvKiBkY2NwX2Fja3ZlY3Rvcl9wcmludChEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9hY2tfc2VxLCB2YWx1ZSwgbGVuKTsgKi8KKwlkY2NwX2Fja3ZlY19jaGVja19yY3ZfYWNrdmVjdG9yKGRjY3Bfc2soc2spLT5kY2Nwc19oY19yeF9hY2t2ZWMsIHNrLAorCQkJCQlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9hY2tfc2VxLAorCQkJCSAgICAgICAgbGVuLCB2YWx1ZSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9hY2t2ZWMuaCBiL25ldC9kY2NwL2Fja3ZlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZmQ2YzYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvZGNjcC9hY2t2ZWMuaApAQCAtMCwwICsxLDEzMyBAQAorI2lmbmRlZiBfQUNLVkVDX0gKKyNkZWZpbmUgX0FDS1ZFQ19ICisvKgorICogIG5ldC9kY2NwL2Fja3ZlYy5oCisgKgorICogIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBEQ0NQIHByb3RvY29sCisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyA8YWNtZUBtYW5kcml2YS5jb20+CisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqCXVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogUmVhZCBhYm91dCB0aGUgRUNOIG5vbmNlIHRvIHNlZSB3aHkgaXQgaXMgMjUzICovCisjZGVmaW5lIERDQ1BfTUFYX0FDS1ZFQ19MRU4gMjUzCisKKyNkZWZpbmUgRENDUF9BQ0tWRUNfU1RBVEVfUkVDRUlWRUQJMAorI2RlZmluZSBEQ0NQX0FDS1ZFQ19TVEFURV9FQ05fTUFSS0VECSgxIDw8IDYpCisjZGVmaW5lIERDQ1BfQUNLVkVDX1NUQVRFX05PVF9SRUNFSVZFRAkoMyA8PCA2KQorCisjZGVmaW5lIERDQ1BfQUNLVkVDX1NUQVRFX01BU0sJCTB4QzAgLyogMTEwMDAwMDAgKi8KKyNkZWZpbmUgRENDUF9BQ0tWRUNfTEVOX01BU0sJCTB4M0YgLyogMDAxMTExMTEgKi8KKworLyoqIHN0cnVjdCBkY2NwX2Fja3ZlYyAtIGFjayB2ZWN0b3IKKyAqCisgKiBUaGlzIGRhdGEgc3RydWN0dXJlIGlzIHRoZSBvbmUgZGVmaW5lZCBpbiB0aGUgRENDUCBkcmFmdAorICogQXBwZW5kaXggQS4KKyAqCisgKiBAZGNjcGF2X2J1Zl9oZWFkIC0gY2lyY3VsYXIgYnVmZmVyIGhlYWQKKyAqIEBkY2NwYXZfYnVmX3RhaWwgLSBjaXJjdWxhciBidWZmZXIgdGFpbAorICogQGRjY3Bhdl9idWZfYWNrbm8gLSBhY2sgIyBvZiB0aGUgbW9zdCByZWNlbnQgcGFja2V0IGFja25vd2xlZGdlYWJsZSBpbiB0aGUKKyAqIAkJICAgICAgIGJ1ZmZlciAoaS5lLiAlZGNjcGF2X2J1Zl9oZWFkKQorICogQGRjY3Bhdl9idWZfbm9uY2UgLSB0aGUgb25lLWJpdCBzdW0gb2YgdGhlIEVDTiBOb25jZXMgb24gYWxsIHBhY2tldHMgYWNrZWQKKyAqIAkJICAgICAgIGJ5IHRoZSBidWZmZXIgd2l0aCBTdGF0ZSAwCisgKgorICogQWRkaXRpb25hbGx5LCB0aGUgSEMtUmVjZWl2ZXIgbXVzdCBrZWVwIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgKiBBY2sgVmVjdG9ycyBpdCBoYXMgcmVjZW50bHkgc2VudC4gRm9yIGVhY2ggcGFja2V0IHNlbnQgY2FycnlpbmcgYW4KKyAqIEFjayBWZWN0b3IsIGl0IHJlbWVtYmVycyBmb3VyIHZhcmlhYmxlczoKKyAqCisgKiBAZGNjcGF2X2Fja19zZXFubyAtIHRoZSBTZXF1ZW5jZSBOdW1iZXIgdXNlZCBmb3IgdGhlIHBhY2tldAorICogCQkgICAgICAgKEhDLVJlY2VpdmVyIHNlcW5vKQorICogQGRjY3Bhdl9hY2tfcHRyIC0gdGhlIHZhbHVlIG9mIGJ1Zl9oZWFkIGF0IHRoZSB0aW1lIG9mIGFja25vd2xlZGdlbWVudC4KKyAqIEBkY2NwYXZfYWNrX2Fja25vIC0gdGhlIEFja25vd2xlZGdlbWVudCBOdW1iZXIgdXNlZCBmb3IgdGhlIHBhY2tldAorICogCQkgICAgICAgKEhDLVNlbmRlciBzZXFubykKKyAqIEBkY2NwYXZfYWNrX25vbmNlIC0gdGhlIG9uZS1iaXQgc3VtIG9mIHRoZSBFQ04gTm9uY2VzIGZvciBhbGwgU3RhdGUgMC4KKyAqCisgKiBAZGNjcGF2X2J1Zl9sZW4JLSBjaXJjdWxhciBidWZmZXIgbGVuZ3RoCisgKiBAZGNjcGF2X3RpbWUJCS0gdGhlIHRpbWUgaW4gdXNlY3MKKyAqIEBkY2NwYXZfYnVmIC0gY2lyY3VsYXIgYnVmZmVyIG9mIGFja25vd2xlZGdlYWJsZSBwYWNrZXRzCisgKi8KK3N0cnVjdCBkY2NwX2Fja3ZlYyB7CisJdW5zaWduZWQgaW50CWRjY3Bhdl9idWZfaGVhZDsKKwl1bnNpZ25lZCBpbnQJZGNjcGF2X2J1Zl90YWlsOworCXU2NAkJZGNjcGF2X2J1Zl9hY2tubzsKKwl1NjQJCWRjY3Bhdl9hY2tfc2Vxbm87CisJdTY0CQlkY2NwYXZfYWNrX2Fja25vOworCXVuc2lnbmVkIGludAlkY2NwYXZfYWNrX3B0cjsKKwl1bnNpZ25lZCBpbnQJZGNjcGF2X3NlbnRfbGVuOworCXVuc2lnbmVkIGludAlkY2NwYXZfdmVjX2xlbjsKKwl1bnNpZ25lZCBpbnQJZGNjcGF2X2J1Zl9sZW47CisJc3RydWN0IHRpbWV2YWwJZGNjcGF2X3RpbWU7CisJdTgJCWRjY3Bhdl9idWZfbm9uY2U7CisJdTgJCWRjY3Bhdl9hY2tfbm9uY2U7CisJdTgJCWRjY3Bhdl9idWZbMF07Cit9OworCitzdHJ1Y3Qgc29jazsKK3N0cnVjdCBza19idWZmOworCisjaWZkZWYgQ09ORklHX0lQX0RDQ1BfQUNLVkVDCitleHRlcm4gc3RydWN0IGRjY3BfYWNrdmVjICpkY2NwX2Fja3ZlY19hbGxvYyh1bnNpZ25lZCBpbnQgbGVuLAorCQkJCQkgIGNvbnN0IGdmcF90IHByaW9yaXR5KTsKK2V4dGVybiB2b2lkIGRjY3BfYWNrdmVjX2ZyZWUoc3RydWN0IGRjY3BfYWNrdmVjICphdik7CisKK2V4dGVybiBpbnQgZGNjcF9hY2t2ZWNfYWRkKHN0cnVjdCBkY2NwX2Fja3ZlYyAqYXYsIGNvbnN0IHN0cnVjdCBzb2NrICpzaywKKwkJCSAgIGNvbnN0IHU2NCBhY2tubywgY29uc3QgdTggc3RhdGUpOworCitleHRlcm4gdm9pZCBkY2NwX2Fja3ZlY19jaGVja19yY3ZfYWNrbm8oc3RydWN0IGRjY3BfYWNrdmVjICphdiwKKwkJCQkJc3RydWN0IHNvY2sgKnNrLCBjb25zdCB1NjQgYWNrbm8pOworZXh0ZXJuIGludCBkY2NwX2Fja3ZlY19wYXJzZShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgIGNvbnN0IHU4IG9wdCwgY29uc3QgdTggKnZhbHVlLCBjb25zdCB1OCBsZW4pOworCitleHRlcm4gaW50IGRjY3BfaW5zZXJ0X29wdGlvbl9hY2t2ZWMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworc3RhdGljIGlubGluZSBpbnQgZGNjcF9hY2t2ZWNfcGVuZGluZyhjb25zdCBzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2KQoreworCXJldHVybiBhdi0+ZGNjcGF2X3NlbnRfbGVuICE9IGF2LT5kY2NwYXZfdmVjX2xlbjsKK30KKyNlbHNlIC8qIENPTkZJR19JUF9EQ0NQX0FDS1ZFQyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmRjY3BfYWNrdmVjX2FsbG9jKHVuc2lnbmVkIGludCBsZW4sCisJCQkJCSAgIGNvbnN0IGdmcF90IHByaW9yaXR5KQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGNjcF9hY2t2ZWNfZnJlZShzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2KQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBkY2NwX2Fja3ZlY19hZGQoc3RydWN0IGRjY3BfYWNrdmVjICphdiwgY29uc3Qgc3RydWN0IHNvY2sgKnNrLAorCQkJCSAgY29uc3QgdTY0IGFja25vLCBjb25zdCB1OCBzdGF0ZSkKK3sKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkY2NwX2Fja3ZlY19jaGVja19yY3ZfYWNrbm8oc3RydWN0IGRjY3BfYWNrdmVjICphdiwKKwkJCQkJICAgICAgIHN0cnVjdCBzb2NrICpzaywgY29uc3QgdTY0IGFja25vKQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBkY2NwX2Fja3ZlY19wYXJzZShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgIGNvbnN0IHU4IG9wdCwgY29uc3QgdTggKnZhbHVlLCBjb25zdCB1OCBsZW4pCit7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIGludCBkY2NwX2luc2VydF9vcHRpb25fYWNrdmVjKGNvbnN0IHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIGludCBkY2NwX2Fja3ZlY19wZW5kaW5nKGNvbnN0IHN0cnVjdCBkY2NwX2Fja3ZlYyAqYXYpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX0lQX0RDQ1BfQUNLVkVDICovCisjZW5kaWYgLyogX0FDS1ZFQ19IICovCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkLmggYi9uZXQvZGNjcC9jY2lkLmgKaW5kZXggOTYyZjFlOS4uYzM3ZWVlYSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZC5oCisrKyBiL25ldC9kY2NwL2NjaWQuaApAQCAtMTQsNiArMTQsNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvZGNjcC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTU0LDYgKzU1LDE0IEBACiAJCQkJCSAgICAgICBzdHJ1Y3QgdGNwX2luZm8gKmluZm8pOwogCXZvaWQJCSgqY2NpZF9oY190eF9nZXRfaW5mbykoc3RydWN0IHNvY2sgKnNrLAogCQkJCQkgICAgICAgc3RydWN0IHRjcF9pbmZvICppbmZvKTsKKwlpbnQJCSgqY2NpZF9oY19yeF9nZXRzb2Nrb3B0KShzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQkgY29uc3QgaW50IG9wdG5hbWUsIGludCBsZW4sCisJCQkJCQkgdTMyIF9fdXNlciAqb3B0dmFsLAorCQkJCQkJIGludCBfX3VzZXIgKm9wdGxlbik7CisJaW50CQkoKmNjaWRfaGNfdHhfZ2V0c29ja29wdCkoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJIGNvbnN0IGludCBvcHRuYW1lLCBpbnQgbGVuLAorCQkJCQkJIHUzMiBfX3VzZXIgKm9wdHZhbCwKKwkJCQkJCSBpbnQgX191c2VyICpvcHRsZW4pOwogfTsKIAogZXh0ZXJuIGludAkgICBjY2lkX3JlZ2lzdGVyKHN0cnVjdCBjY2lkICpjY2lkKTsKQEAgLTEwMSwxNCArMTEwLDE0IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjY2lkX2hjX3J4X2V4aXQoc3RydWN0IGNjaWQgKmNjaWQsIHN0cnVjdCBzb2NrICpzaykKIHsKLQlpZiAoY2NpZC0+Y2NpZF9oY19yeF9leGl0ICE9IE5VTEwgJiYKKwlpZiAoY2NpZCAhPSBOVUxMICYmIGNjaWQtPmNjaWRfaGNfcnhfZXhpdCAhPSBOVUxMICYmCiAJICAgIGRjY3Bfc2soc2spLT5kY2Nwc19oY19yeF9jY2lkX3ByaXZhdGUgIT0gTlVMTCkKIAkJY2NpZC0+Y2NpZF9oY19yeF9leGl0KHNrKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNjaWRfaGNfdHhfZXhpdChzdHJ1Y3QgY2NpZCAqY2NpZCwgc3RydWN0IHNvY2sgKnNrKQogewotCWlmIChjY2lkLT5jY2lkX2hjX3R4X2V4aXQgIT0gTlVMTCAmJgorCWlmIChjY2lkICE9IE5VTEwgJiYgY2NpZC0+Y2NpZF9oY190eF9leGl0ICE9IE5VTEwgJiYKIAkgICAgZGNjcF9zayhzayktPmRjY3BzX2hjX3R4X2NjaWRfcHJpdmF0ZSAhPSBOVUxMKQogCQljY2lkLT5jY2lkX2hjX3R4X2V4aXQoc2spOwogfQpAQCAtMTc3LDQgKzE4NiwyNiBAQAogCWlmIChjY2lkLT5jY2lkX2hjX3R4X2dldF9pbmZvICE9IE5VTEwpCiAJCWNjaWQtPmNjaWRfaGNfdHhfZ2V0X2luZm8oc2ssIGluZm8pOwogfQorCitzdGF0aWMgaW5saW5lIGludCBjY2lkX2hjX3J4X2dldHNvY2tvcHQoc3RydWN0IGNjaWQgKmNjaWQsIHN0cnVjdCBzb2NrICpzaywKKwkJCQkJY29uc3QgaW50IG9wdG5hbWUsIGludCBsZW4sCisJCQkJCXUzMiBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQoreworCWludCByYyA9IC1FTk9QUk9UT09QVDsKKwlpZiAoY2NpZC0+Y2NpZF9oY19yeF9nZXRzb2Nrb3B0ICE9IE5VTEwpCisJCXJjID0gY2NpZC0+Y2NpZF9oY19yeF9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBsZW4sCisJCQkJCQkgb3B0dmFsLCBvcHRsZW4pOworCXJldHVybiByYzsKK30KKworc3RhdGljIGlubGluZSBpbnQgY2NpZF9oY190eF9nZXRzb2Nrb3B0KHN0cnVjdCBjY2lkICpjY2lkLCBzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCWNvbnN0IGludCBvcHRuYW1lLCBpbnQgbGVuLAorCQkJCQl1MzIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlpbnQgcmMgPSAtRU5PUFJPVE9PUFQ7CisJaWYgKGNjaWQtPmNjaWRfaGNfdHhfZ2V0c29ja29wdCAhPSBOVUxMKQorCQlyYyA9IGNjaWQtPmNjaWRfaGNfdHhfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgbGVuLAorCQkJCQkJIG9wdHZhbCwgb3B0bGVuKTsKKwlyZXR1cm4gcmM7Cit9CiAjZW5kaWYgLyogX0NDSURfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvY2NpZHMvY2NpZDMuYyBiL25ldC9kY2NwL2NjaWRzL2NjaWQzLmMKaW5kZXggMzhhYTg0OS4uYWE2OGUwYSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZHMvY2NpZDMuYworKysgYi9uZXQvZGNjcC9jY2lkcy9jY2lkMy5jCkBAIC0xMTIwLDYgKzExMjAsNjAgQEAKIAlpbmZvLT50Y3BpX3J0dCA9IGhjdHgtPmNjaWQzaGN0eF9ydHQ7CiB9CiAKK3N0YXRpYyBpbnQgY2NpZDNfaGNfcnhfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGludCBvcHRuYW1lLCBpbnQgbGVuLAorCQkJCSAgdTMyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCit7CisJY29uc3Qgc3RydWN0IGNjaWQzX2hjX3J4X3NvY2sgKmhjcnggPSBjY2lkM19oY19yeF9zayhzayk7CisJY29uc3Qgdm9pZCAqdmFsOworCQorCS8qIExpc3RlbiBzb2NrcyBkb2Vzbid0IGhhdmUgYSBwcml2YXRlIENDSUQgYmxvY2sgKi8KKwlpZiAoc2stPnNrX3N0YXRlID09IERDQ1BfTElTVEVOKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAob3B0bmFtZSkgeworCWNhc2UgRENDUF9TT0NLT1BUX0NDSURfUlhfSU5GTzoKKwkJaWYgKGxlbiA8IHNpemVvZihoY3J4LT5jY2lkM2hjcnhfdGZyYykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbGVuID0gc2l6ZW9mKGhjcngtPmNjaWQzaGNyeF90ZnJjKTsKKwkJdmFsID0gJmhjcngtPmNjaWQzaGNyeF90ZnJjOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT1BST1RPT1BUOworCX0KKworCWlmIChwdXRfdXNlcihsZW4sIG9wdGxlbikgfHwgY29weV90b191c2VyKG9wdHZhbCwgdmFsLCBsZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNjaWQzX2hjX3R4X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBpbnQgb3B0bmFtZSwgaW50IGxlbiwKKwkJCQkgIHUzMiBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQoreworCWNvbnN0IHN0cnVjdCBjY2lkM19oY190eF9zb2NrICpoY3R4ID0gY2NpZDNfaGNfdHhfc2soc2spOworCWNvbnN0IHZvaWQgKnZhbDsKKwkKKwkvKiBMaXN0ZW4gc29ja3MgZG9lc24ndCBoYXZlIGEgcHJpdmF0ZSBDQ0lEIGJsb2NrICovCisJaWYgKHNrLT5za19zdGF0ZSA9PSBEQ0NQX0xJU1RFTikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKG9wdG5hbWUpIHsKKwljYXNlIERDQ1BfU09DS09QVF9DQ0lEX1RYX0lORk86CisJCWlmIChsZW4gPCBzaXplb2YoaGN0eC0+Y2NpZDNoY3R4X3RmcmMpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWxlbiA9IHNpemVvZihoY3R4LT5jY2lkM2hjdHhfdGZyYyk7CisJCXZhbCA9ICZoY3R4LT5jY2lkM2hjdHhfdGZyYzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9QUk9UT09QVDsKKwl9CisKKwlpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pIHx8IGNvcHlfdG9fdXNlcihvcHR2YWwsIHZhbCwgbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBjY2lkIGNjaWQzID0gewogCS5jY2lkX2lkCQkgICA9IDMsCiAJLmNjaWRfbmFtZQkJICAgPSAiY2NpZDMiLApAQCAtMTEzOSw2ICsxMTkzLDggQEAKIAkuY2NpZF9oY19yeF9wYWNrZXRfcmVjdgkgICA9IGNjaWQzX2hjX3J4X3BhY2tldF9yZWN2LAogCS5jY2lkX2hjX3J4X2dldF9pbmZvCSAgID0gY2NpZDNfaGNfcnhfZ2V0X2luZm8sCiAJLmNjaWRfaGNfdHhfZ2V0X2luZm8JICAgPSBjY2lkM19oY190eF9nZXRfaW5mbywKKwkuY2NpZF9oY19yeF9nZXRzb2Nrb3B0CSAgID0gY2NpZDNfaGNfcnhfZ2V0c29ja29wdCwKKwkuY2NpZF9oY190eF9nZXRzb2Nrb3B0CSAgID0gY2NpZDNfaGNfdHhfZ2V0c29ja29wdCwKIH07CiAgCiBtb2R1bGVfcGFyYW0oY2NpZDNfZGVidWcsIGludCwgMDQ0NCk7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkcy9jY2lkMy5oIGIvbmV0L2RjY3AvY2NpZHMvY2NpZDMuaAppbmRleCBlYjI0ODc3Li4wYmRlNDU4IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9jY2lkcy9jY2lkMy5oCisrKyBiL25ldC9kY2NwL2NjaWRzL2NjaWQzLmgKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdGZyYy5oPgogCiAjZGVmaW5lIFRGUkNfTUlOX1BBQ0tFVF9TSVpFCSAgIDE2CiAjZGVmaW5lIFRGUkNfU1REX1BBQ0tFVF9TSVpFCSAgMjU2CkBAIC05MywxMiArOTQsMTUgQEAKICAgKiBAY2NpZDNoY3R4X2hpc3QgLSBQYWNrZXQgaGlzdG9yeQogICAqLwogc3RydWN0IGNjaWQzX2hjX3R4X3NvY2sgewotCXUzMgkJCQljY2lkM2hjdHhfeDsKLQl1MzIJCQkJY2NpZDNoY3R4X3hfcmVjdjsKLQl1MzIJCQkJY2NpZDNoY3R4X3hfY2FsYzsKKwlzdHJ1Y3QgdGZyY190eF9pbmZvCQljY2lkM2hjdHhfdGZyYzsKKyNkZWZpbmUgY2NpZDNoY3R4X3gJCQljY2lkM2hjdHhfdGZyYy50ZnJjdHhfeAorI2RlZmluZSBjY2lkM2hjdHhfeF9yZWN2CQljY2lkM2hjdHhfdGZyYy50ZnJjdHhfeF9yZWN2CisjZGVmaW5lIGNjaWQzaGN0eF94X2NhbGMJCWNjaWQzaGN0eF90ZnJjLnRmcmN0eF94X2NhbGMKKyNkZWZpbmUgY2NpZDNoY3R4X3J0dAkJCWNjaWQzaGN0eF90ZnJjLnRmcmN0eF9ydHQKKyNkZWZpbmUgY2NpZDNoY3R4X3AJCQljY2lkM2hjdHhfdGZyYy50ZnJjdHhfcAorI2RlZmluZSBjY2lkM2hjdHhfdF9ydG8JCQljY2lkM2hjdHhfdGZyYy50ZnJjdHhfcnRvCisjZGVmaW5lIGNjaWQzaGN0eF90X2lwaQkJCWNjaWQzaGN0eF90ZnJjLnRmcmN0eF9pcGkKIAl1MTYJCQkJY2NpZDNoY3R4X3M7Ci0JdTMyCQkJCWNjaWQzaGN0eF9ydHQ7Ci0JdTMyCQkJCWNjaWQzaGN0eF9wOwogICAJdTgJCQkJY2NpZDNoY3R4X3N0YXRlOwogCXU4CQkJCWNjaWQzaGN0eF9sYXN0X3dpbl9jb3VudDsKIAl1OAkJCQljY2lkM2hjdHhfaWRsZTsKQEAgLTEwNiwxOSArMTEwLDE5IEBACiAJc3RydWN0IHRpbWVyX2xpc3QJCWNjaWQzaGN0eF9ub19mZWVkYmFja190aW1lcjsKIAlzdHJ1Y3QgdGltZXZhbAkJCWNjaWQzaGN0eF90X2xkOwogCXN0cnVjdCB0aW1ldmFsCQkJY2NpZDNoY3R4X3Rfbm9tOwotCXUzMgkJCQljY2lkM2hjdHhfdF9ydG87Ci0JdTMyCQkJCWNjaWQzaGN0eF90X2lwaTsKIAl1MzIJCQkJY2NpZDNoY3R4X2RlbHRhOwogCXN0cnVjdCBsaXN0X2hlYWQJCWNjaWQzaGN0eF9oaXN0OwogCXN0cnVjdCBjY2lkM19vcHRpb25zX3JlY2VpdmVkCWNjaWQzaGN0eF9vcHRpb25zX3JlY2VpdmVkOwogfTsKIAogc3RydWN0IGNjaWQzX2hjX3J4X3NvY2sgeworCXN0cnVjdCB0ZnJjX3J4X2luZm8JY2NpZDNoY3J4X3RmcmM7CisjZGVmaW5lIGNjaWQzaGNyeF94X3JlY3YJY2NpZDNoY3J4X3RmcmMudGZyY3J4X3hfcmVjdgorI2RlZmluZSBjY2lkM2hjcnhfcnR0CQljY2lkM2hjcnhfdGZyYy50ZnJjcnhfcnR0CisjZGVmaW5lIGNjaWQzaGNyeF9wCQljY2lkM2hjcnhfdGZyYy50ZnJjcnhfcAogICAJdTY0CQkJY2NpZDNoY3J4X3NlcW5vX2xhc3RfY291bnRlcjo0OCwKIAkJCQljY2lkM2hjcnhfc3RhdGU6OCwKIAkJCQljY2lkM2hjcnhfbGFzdF9jb3VudGVyOjQ7Ci0JdTMyCQkJY2NpZDNoY3J4X3J0dDsKLSAgCXUzMgkJCWNjaWQzaGNyeF9wOwogICAJdTMyCQkJY2NpZDNoY3J4X2J5dGVzX3JlY3Y7CiAgIAlzdHJ1Y3QgdGltZXZhbAkJY2NpZDNoY3J4X3RzdGFtcF9sYXN0X2ZlZWRiYWNrOwogICAJc3RydWN0IHRpbWV2YWwJCWNjaWQzaGNyeF90c3RhbXBfbGFzdF9hY2s7CkBAIC0xMjcsNyArMTMxLDYgQEAKICAgCXUxNgkJCWNjaWQzaGNyeF9zOwogICAJdTMyCQkJY2NpZDNoY3J4X3BpbnY7CiAgIAl1MzIJCQljY2lkM2hjcnhfZWxhcHNlZF90aW1lOwotICAJdTMyCQkJY2NpZDNoY3J4X3hfcmVjdjsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNjaWQzX2hjX3R4X3NvY2sgKmNjaWQzX2hjX3R4X3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2NjaWRzL2xpYi9sb3NzX2ludGVydmFsLmggYi9uZXQvZGNjcC9jY2lkcy9saWIvbG9zc19pbnRlcnZhbC5oCmluZGV4IDEzYWQ0N2IuLjQxN2Q5ZDggMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2NjaWRzL2xpYi9sb3NzX2ludGVydmFsLmgKKysrIGIvbmV0L2RjY3AvY2NpZHMvbGliL2xvc3NfaW50ZXJ2YWwuaApAQCAtMzYsNyArMzYsNyBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkY2NwX2xpX2hpc3RfZW50cnkgKgogCQlkY2NwX2xpX2hpc3RfZW50cnlfbmV3KHN0cnVjdCBkY2NwX2xpX2hpc3QgKmhpc3QsCi0JCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBfX25vY2FzdCBwcmlvKQorCQkJCSAgICAgICBjb25zdCBnZnBfdCBwcmlvKQogewogCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKGhpc3QtPmRjY3BsaWhfc2xhYiwgcHJpbyk7CiB9CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkcy9saWIvcGFja2V0X2hpc3RvcnkuaCBiL25ldC9kY2NwL2NjaWRzL2xpYi9wYWNrZXRfaGlzdG9yeS5oCmluZGV4IGIzNzVlYmQuLjEyMmU5NjcgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2NjaWRzL2xpYi9wYWNrZXRfaGlzdG9yeS5oCisrKyBiL25ldC9kY2NwL2NjaWRzL2xpYi9wYWNrZXRfaGlzdG9yeS5oCkBAIC04Niw3ICs4Niw3IEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRjY3BfdHhfaGlzdF9lbnRyeSAqCiAJCWRjY3BfdHhfaGlzdF9lbnRyeV9uZXcoc3RydWN0IGRjY3BfdHhfaGlzdCAqaGlzdCwKLQkJCQkgICAgICAgY29uc3QgdW5zaWduZWQgaW50IF9fbm9jYXN0IHByaW8pCisJCQkJICAgICAgIGNvbnN0IGdmcF90IHByaW8pCiB7CiAJc3RydWN0IGRjY3BfdHhfaGlzdF9lbnRyeSAqZW50cnkgPSBrbWVtX2NhY2hlX2FsbG9jKGhpc3QtPmRjY3B0eGhfc2xhYiwKIAkJCQkJCQkgICAgcHJpbyk7CkBAIC0xMzcsNyArMTM3LDcgQEAKIAkJCQkgICAgIAkgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrLCAKIAkJCQkgICAgIAkgICAgY29uc3QgdTMyIG5kcCwgCiAJCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQkgICAgY29uc3QgdW5zaWduZWQgaW50IF9fbm9jYXN0IHByaW8pCisJCQkJCSAgICBjb25zdCBnZnBfdCBwcmlvKQogewogCXN0cnVjdCBkY2NwX3J4X2hpc3RfZW50cnkgKmVudHJ5ID0ga21lbV9jYWNoZV9hbGxvYyhoaXN0LT5kY2NwcnhoX3NsYWIsCiAJCQkJCQkJICAgIHByaW8pOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvZGNjcC5oIGIvbmV0L2RjY3AvZGNjcC5oCmluZGV4IDk1YzQ2MzBiLi41ODcxYzAyIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9kY2NwLmgKKysrIGIvbmV0L2RjY3AvZGNjcC5oCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bmV0L3NubXAuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPG5ldC90Y3AuaD4KKyNpbmNsdWRlICJhY2t2ZWMuaCIKIAogI2lmZGVmIENPTkZJR19JUF9EQ0NQX0RFQlVHCiBleHRlcm4gaW50IGRjY3BfZGVidWc7CkBAIC0yNTgsMTMgKzI1OSwxMiBAQAogZXh0ZXJuIHZvaWQJICAgZGNjcF9zZW5kX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgY29uc3QgaW50IGFjdGl2ZSk7CiAKIHN0cnVjdCBkY2NwX3NrYl9jYiB7Ci0JX191OCBkY2NwZF90eXBlOwotCV9fdTggZGNjcGRfcmVzZXRfY29kZTsKLQlfX3U4IGRjY3BkX3NlcnZpY2U7Ci0JX191OCBkY2NwZF9jY3ZhbDsKKwlfX3U4ICBkY2NwZF90eXBlOjQ7CisJX191OCAgZGNjcGRfY2N2YWw6NDsKKwlfX3U4ICBkY2NwZF9yZXNldF9jb2RlOworCV9fdTE2IGRjY3BkX29wdF9sZW47CiAJX191NjQgZGNjcGRfc2VxOwogCV9fdTY0IGRjY3BkX2Fja19zZXE7Ci0JaW50ICBkY2NwZF9vcHRfbGVuOwogfTsKIAogI2RlZmluZSBEQ0NQX1NLQl9DQihfX3NrYikgKChzdHJ1Y3QgZGNjcF9za2JfY2IgKikmKChfX3NrYiktPmNiWzBdKSkKQEAgLTM1OSw2ICszNTksMTcgQEAKIAkJICAgICAgIChkcC0+ZGNjcHNfZ3NzIC0KIAkJCWRwLT5kY2Nwc19vcHRpb25zLmRjY3BvX3NlcXVlbmNlX3dpbmRvdyArIDEpKTsKIH0KKwkJCQkKK3N0YXRpYyBpbmxpbmUgaW50IGRjY3BfYWNrX3BlbmRpbmcoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQoreworCWNvbnN0IHN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CisJcmV0dXJuIGRwLT5kY2Nwc190aW1lc3RhbXBfZWNobyAhPSAwIHx8CisjaWZkZWYgQ09ORklHX0lQX0RDQ1BfQUNLVkVDCisJICAgICAgIChkcC0+ZGNjcHNfb3B0aW9ucy5kY2Nwb19zZW5kX2Fja192ZWN0b3IgJiYKKwkJZGNjcF9hY2t2ZWNfcGVuZGluZyhkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjKSkgfHwKKyNlbmRpZgorCSAgICAgICBpbmV0X2Nza19hY2tfc2NoZWR1bGVkKHNrKTsKK30KIAogZXh0ZXJuIHZvaWQgZGNjcF9pbnNlcnRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIHZvaWQgZGNjcF9pbnNlcnRfb3B0aW9uX2VsYXBzZWRfdGltZShzdHJ1Y3Qgc29jayAqc2ssCkBAIC0zNzIsNjUgKzM4Myw2IEBACiAKIGV4dGVybiBzdHJ1Y3Qgc29ja2V0ICpkY2NwX2N0bF9zb2NrZXQ7CiAKLSNkZWZpbmUgRENDUF9BQ0tQS1RTX1NUQVRFX1JFQ0VJVkVECTAKLSNkZWZpbmUgRENDUF9BQ0tQS1RTX1NUQVRFX0VDTl9NQVJLRUQJKDEgPDwgNikKLSNkZWZpbmUgRENDUF9BQ0tQS1RTX1NUQVRFX05PVF9SRUNFSVZFRAkoMyA8PCA2KQotCi0jZGVmaW5lIERDQ1BfQUNLUEtUU19TVEFURV9NQVNLCQkweEMwIC8qIDExMDAwMDAwICovCi0jZGVmaW5lIERDQ1BfQUNLUEtUU19MRU5fTUFTSwkJMHgzRiAvKiAwMDExMTExMSAqLwotCi0vKiogc3RydWN0IGRjY3BfYWNrcGt0cyAtIGFja25vd2xlZGdlYWJsZSBwYWNrZXRzCi0gKgotICogVGhpcyBkYXRhIHN0cnVjdHVyZSBpcyB0aGUgb25lIGRlZmluZWQgaW4gdGhlIERDQ1AgZHJhZnQKLSAqIEFwcGVuZGl4IEEuCi0gKgotICogQGRjY3BhcF9idWZfaGVhZCAtIGNpcmN1bGFyIGJ1ZmZlciBoZWFkCi0gKiBAZGNjcGFwX2J1Zl90YWlsIC0gY2lyY3VsYXIgYnVmZmVyIHRhaWwKLSAqIEBkY2NwYXBfYnVmX2Fja25vIC0gYWNrICMgb2YgdGhlIG1vc3QgcmVjZW50IHBhY2tldCBhY2tub3dsZWRnZWFibGUgaW4gdGhlCi0gKiAJCSAgICAgICBidWZmZXIgKGkuZS4gJWRjY3BhcF9idWZfaGVhZCkKLSAqIEBkY2NwYXBfYnVmX25vbmNlIC0gdGhlIG9uZS1iaXQgc3VtIG9mIHRoZSBFQ04gTm9uY2VzIG9uIGFsbCBwYWNrZXRzIGFja2VkCi0gKiAJCSAgICAgICBieSB0aGUgYnVmZmVyIHdpdGggU3RhdGUgMAotICoKLSAqIEFkZGl0aW9uYWxseSwgdGhlIEhDLVJlY2VpdmVyIG11c3Qga2VlcCBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZQotICogQWNrIFZlY3RvcnMgaXQgaGFzIHJlY2VudGx5IHNlbnQuIEZvciBlYWNoIHBhY2tldCBzZW50IGNhcnJ5aW5nIGFuCi0gKiBBY2sgVmVjdG9yLCBpdCByZW1lbWJlcnMgZm91ciB2YXJpYWJsZXM6Ci0gKgotICogQGRjY3BhcF9hY2tfc2Vxbm8gLSB0aGUgU2VxdWVuY2UgTnVtYmVyIHVzZWQgZm9yIHRoZSBwYWNrZXQKLSAqIAkJICAgICAgIChIQy1SZWNlaXZlciBzZXFubykKLSAqIEBkY2NwYXBfYWNrX3B0ciAtIHRoZSB2YWx1ZSBvZiBidWZfaGVhZCBhdCB0aGUgdGltZSBvZiBhY2tub3dsZWRnZW1lbnQuCi0gKiBAZGNjcGFwX2Fja19hY2tubyAtIHRoZSBBY2tub3dsZWRnZW1lbnQgTnVtYmVyIHVzZWQgZm9yIHRoZSBwYWNrZXQKLSAqIAkJICAgICAgIChIQy1TZW5kZXIgc2Vxbm8pCi0gKiBAZGNjcGFwX2Fja19ub25jZSAtIHRoZSBvbmUtYml0IHN1bSBvZiB0aGUgRUNOIE5vbmNlcyBmb3IgYWxsIFN0YXRlIDAuCi0gKgotICogQGRjY3BhcF9idWZfbGVuIC0gY2lyY3VsYXIgYnVmZmVyIGxlbmd0aAotICogQGRjY3BhcF90aW1lCQktIHRoZSB0aW1lIGluIHVzZWNzCi0gKiBAZGNjcGFwX2J1ZiAtIGNpcmN1bGFyIGJ1ZmZlciBvZiBhY2tub3dsZWRnZWFibGUgcGFja2V0cwotICovCi1zdHJ1Y3QgZGNjcF9hY2twa3RzIHsKLQl1bnNpZ25lZCBpbnQJCWRjY3BhcF9idWZfaGVhZDsKLQl1bnNpZ25lZCBpbnQJCWRjY3BhcF9idWZfdGFpbDsKLQl1NjQJCQlkY2NwYXBfYnVmX2Fja25vOwotCXU2NAkJCWRjY3BhcF9hY2tfc2Vxbm87Ci0JdTY0CQkJZGNjcGFwX2Fja19hY2tubzsKLQl1bnNpZ25lZCBpbnQJCWRjY3BhcF9hY2tfcHRyOwotCXVuc2lnbmVkIGludAkJZGNjcGFwX2J1Zl92ZWN0b3JfbGVuOwotCXVuc2lnbmVkIGludAkJZGNjcGFwX2Fja192ZWN0b3JfbGVuOwotCXVuc2lnbmVkIGludAkJZGNjcGFwX2J1Zl9sZW47Ci0Jc3RydWN0IHRpbWV2YWwJCWRjY3BhcF90aW1lOwotCXU4CQkJZGNjcGFwX2J1Zl9ub25jZTsKLQl1OAkJCWRjY3BhcF9hY2tfbm9uY2U7Ci0JdTgJCQlkY2NwYXBfYnVmWzBdOwotfTsKLQotZXh0ZXJuIHN0cnVjdCBkY2NwX2Fja3BrdHMgKgotCQlkY2NwX2Fja3BrdHNfYWxsb2ModW5zaWduZWQgaW50IGxlbiwKLQkJCQkgIGNvbnN0IHVuc2lnbmVkIGludCBfX25vY2FzdCBwcmlvcml0eSk7Ci1leHRlcm4gdm9pZCBkY2NwX2Fja3BrdHNfZnJlZShzdHJ1Y3QgZGNjcF9hY2twa3RzICphcCk7Ci1leHRlcm4gaW50IGRjY3BfYWNrcGt0c19hZGQoc3RydWN0IGRjY3BfYWNrcGt0cyAqYXAsIGNvbnN0IHN0cnVjdCBzb2NrICpzaywKLQkJCSAgICB1NjQgYWNrbm8sIHU4IHN0YXRlKTsKLWV4dGVybiB2b2lkIGRjY3BfYWNrcGt0c19jaGVja19yY3ZfYWNrbm8oc3RydWN0IGRjY3BfYWNrcGt0cyAqYXAsCi0JCQkJCSBzdHJ1Y3Qgc29jayAqc2ssIHU2NCBhY2tubyk7Ci0KIGV4dGVybiB2b2lkIGRjY3BfdGltZXN0YW1wKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRpbWV2YWwgKnR2KTsKIAogc3RhdGljIGlubGluZSBzdXNlY29uZHNfdCB0aW1ldmFsX3VzZWNzKGNvbnN0IHN0cnVjdCB0aW1ldmFsICp0dikKQEAgLTQ3MSwxNSArNDIzLDQgQEAKIAl9CiB9CiAKLSNpZmRlZiBDT05GSUdfSVBfRENDUF9ERUJVRwotZXh0ZXJuIHZvaWQgZGNjcF9hY2t2ZWN0b3JfcHJpbnQoY29uc3QgdTY0IGFja25vLAotCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICp2ZWN0b3IsIGludCBsZW4pOwotZXh0ZXJuIHZvaWQgZGNjcF9hY2twa3RzX3ByaW50KGNvbnN0IHN0cnVjdCBkY2NwX2Fja3BrdHMgKmFwKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgZGNjcF9hY2t2ZWN0b3JfcHJpbnQoY29uc3QgdTY0IGFja25vLAotCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICp2ZWN0b3IsCi0JCQkJCWludCBsZW4pIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGRjY3BfYWNrcGt0c19wcmludChjb25zdCBzdHJ1Y3QgZGNjcF9hY2twa3RzICphcCkgeyB9Ci0jZW5kaWYKLQogI2VuZGlmIC8qIF9EQ0NQX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lucHV0LmMgYi9uZXQvZGNjcC9pbnB1dC5jCmluZGV4IGM3NDAzNGMuLjM0NTRkNTkgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2lucHV0LmMKKysrIGIvbmV0L2RjY3AvaW5wdXQuYwpAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIAorI2luY2x1ZGUgImFja3ZlYy5oIgogI2luY2x1ZGUgImNjaWQuaCIKICNpbmNsdWRlICJkY2NwLmgiCiAKQEAgLTYwLDggKzYxLDggQEAKIAlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwogCiAJaWYgKGRwLT5kY2Nwc19vcHRpb25zLmRjY3BvX3NlbmRfYWNrX3ZlY3RvcikKLQkJZGNjcF9hY2twa3RzX2NoZWNrX3Jjdl9hY2tubyhkcC0+ZGNjcHNfaGNfcnhfYWNrcGt0cywgc2ssCi0JCQkJCSAgICAgRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfYWNrX3NlcSk7CisJCWRjY3BfYWNrdmVjX2NoZWNrX3Jjdl9hY2tubyhkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjLCBzaywKKwkJCQkJICAgIERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX2Fja19zZXEpOwogfQogCiBzdGF0aWMgaW50IGRjY3BfY2hlY2tfc2Vxbm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMTY0LDM3ICsxNjUsMTEgQEAKIAlpZiAoRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfYWNrX3NlcSAhPSBEQ0NQX1BLVF9XSVRIT1VUX0FDS19TRVEpCiAJCWRjY3BfZXZlbnRfYWNrX3JlY3Yoc2ssIHNrYik7CiAKLQkvKgotCSAqIEZJWE1FOiBjaGVjayBFQ04gdG8gc2VlIGlmIHdlIHNob3VsZCB1c2UKLQkgKiBEQ0NQX0FDS1BLVFNfU1RBVEVfRUNOX01BUktFRAotCSAqLwotCWlmIChkcC0+ZGNjcHNfb3B0aW9ucy5kY2Nwb19zZW5kX2Fja192ZWN0b3IpIHsKLQkJc3RydWN0IGRjY3BfYWNrcGt0cyAqYXAgPSBkcC0+ZGNjcHNfaGNfcnhfYWNrcGt0czsKLQotCQlpZiAoZGNjcF9hY2twa3RzX2FkZChkcC0+ZGNjcHNfaGNfcnhfYWNrcGt0cywgc2ssCi0JCQkJICAgICBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9zZXEsCi0JCQkJICAgICBEQ0NQX0FDS1BLVFNfU1RBVEVfUkVDRUlWRUQpKSB7Ci0JCQlMSU1JVF9ORVRERUJVRyhLRVJOX1dBUk5JTkcgIkRDQ1A6IGFja25vd2xlZGdlYWJsZSAiCi0JCQkJCQkgICAgInBhY2tldHMgYnVmZmVyIGZ1bGwhXG4iKTsKLQkJCWFwLT5kY2NwYXBfYWNrX3NlcW5vID0gRENDUF9NQVhfU0VRTk8gKyAxOwotCQkJaW5ldF9jc2tfc2NoZWR1bGVfYWNrKHNrKTsKLQkJCWluZXRfY3NrX3Jlc2V0X3htaXRfdGltZXIoc2ssIElDU0tfVElNRV9EQUNLLAotCQkJCQkJICBUQ1BfREVMQUNLX01JTiwKLQkJCQkJCSAgRENDUF9SVE9fTUFYKTsKLQkJCWdvdG8gZGlzY2FyZDsKLQkJfQotCi0JCS8qCi0JCSAqIEZJWE1FOiB0aGlzIGFjdGl2YXRpb24gaXMgcHJvYmFibHkgd3JvbmcsIGhhdmUgdG8gc3R1ZHkgbW9yZQotCQkgKiBUQ1AgZGVsYWNrIG1hY2hpbmVyeSBhbmQgaG93IGl0IGZpdHMgaW50byBEQ0NQIGRyYWZ0LCBidXQKLQkJICogZm9yIG5vdyBpdCBraW5kYSAid29ya3MiIDgpCi0JCSAqLwotCQlpZiAoIWluZXRfY3NrX2Fja19zY2hlZHVsZWQoc2spKSB7Ci0JCQlpbmV0X2Nza19zY2hlZHVsZV9hY2soc2spOwotCQkJaW5ldF9jc2tfcmVzZXRfeG1pdF90aW1lcihzaywgSUNTS19USU1FX0RBQ0ssIDUgKiBIWiwKLQkJCQkJCSAgRENDUF9SVE9fTUFYKTsKLQkJfQotCX0KKwlpZiAoZHAtPmRjY3BzX29wdGlvbnMuZGNjcG9fc2VuZF9hY2tfdmVjdG9yICYmCisJICAgIGRjY3BfYWNrdmVjX2FkZChkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjLCBzaywKKwkJCSAgICBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9zZXEsCisJCQkgICAgRENDUF9BQ0tWRUNfU1RBVEVfUkVDRUlWRUQpKQorCQlnb3RvIGRpc2NhcmQ7CiAKIAljY2lkX2hjX3J4X3BhY2tldF9yZWN2KGRwLT5kY2Nwc19oY19yeF9jY2lkLCBzaywgc2tiKTsKIAljY2lkX2hjX3R4X3BhY2tldF9yZWN2KGRwLT5kY2Nwc19oY190eF9jY2lkLCBzaywgc2tiKTsKQEAgLTM4NCw5ICszNTksOSBAQAogCX0KIAogb3V0X2ludmFsaWRfcGFja2V0OgotCXJldHVybiAxOyAvKiBkY2NwX3Y0X2RvX3JjdiB3aWxsIHNlbmQgYSByZXNldCwgYnV0Li4uCi0JCSAgICAgRklYTUU6IHRoZSByZXNldCBjb2RlIHNob3VsZCBiZQotCQkJICAgIERDQ1BfUkVTRVRfQ09ERV9QQUNLRVRfRVJST1IgKi8KKwkvKiBkY2NwX3Y0X2RvX3JjdiB3aWxsIHNlbmQgYSByZXNldCAqLworCURDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3Jlc2V0X2NvZGUgPSBEQ0NQX1JFU0VUX0NPREVfUEFDS0VUX0VSUk9SOworCXJldHVybiAxOyAKIH0KIAogc3RhdGljIGludCBkY2NwX3Jjdl9yZXNwb25kX3BhcnRvcGVuX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLApAQCAtNDAwLDYgKzM3NSw5IEBACiAJY2FzZSBEQ0NQX1BLVF9SRVNFVDoKIAkJaW5ldF9jc2tfY2xlYXJfeG1pdF90aW1lcihzaywgSUNTS19USU1FX0RBQ0spOwogCQlicmVhazsKKwljYXNlIERDQ1BfUEtUX0RBVEE6CisJCWlmIChzay0+c2tfc3RhdGUgPT0gRENDUF9SRVNQT05EKQorCQkJYnJlYWs7CiAJY2FzZSBEQ0NQX1BLVF9EQVRBQUNLOgogCWNhc2UgRENDUF9QS1RfQUNLOgogCQkvKgpAQCAtNDE4LDcgKzM5Niw4IEBACiAJCWRjY3Bfc2soc2spLT5kY2Nwc19vc3IgPSBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9zZXE7CiAJCWRjY3Bfc2V0X3N0YXRlKHNrLCBEQ0NQX09QRU4pOwogCi0JCWlmIChkaC0+ZGNjcGhfdHlwZSA9PSBEQ0NQX1BLVF9EQVRBQUNLKSB7CisJCWlmIChkaC0+ZGNjcGhfdHlwZSA9PSBEQ0NQX1BLVF9EQVRBQUNLIHx8CisJCSAgICBkaC0+ZGNjcGhfdHlwZSA9PSBEQ0NQX1BLVF9EQVRBKSB7CiAJCQlkY2NwX3Jjdl9lc3RhYmxpc2hlZChzaywgc2tiLCBkaCwgbGVuKTsKIAkJCXF1ZXVlZCA9IDE7IC8qIHBhY2tldCB3YXMgcXVldWVkCiAJCQkJICAgICAgIChieSBkY2NwX3Jjdl9lc3RhYmxpc2hlZCkgKi8KQEAgLTQzMyw2ICs0MTIsNyBAQAogCQkJICAgc3RydWN0IGRjY3BfaGRyICpkaCwgdW5zaWduZWQgbGVuKQogewogCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CisJc3RydWN0IGRjY3Bfc2tiX2NiICpkY2IgPSBEQ0NQX1NLQl9DQihza2IpOwogCWNvbnN0IGludCBvbGRfc3RhdGUgPSBzay0+c2tfc3RhdGU7CiAJaW50IHF1ZXVlZCA9IDA7CiAKQEAgLTQ3Myw3ICs0NTMsOCBAQAogCQlpZiAoZGgtPmRjY3BoX3R5cGUgPT0gRENDUF9QS1RfUkVTRVQpCiAJCQlnb3RvIGRpc2NhcmQ7CiAKLQkJLyogQ2FsbGVyIChkY2NwX3Y0X2RvX3Jjdikgd2lsbCBzZW5kIFJlc2V0KE5vIENvbm5lY3Rpb24pKi8KKwkJLyogQ2FsbGVyIChkY2NwX3Y0X2RvX3Jjdikgd2lsbCBzZW5kIFJlc2V0ICovCisJCWRjYi0+ZGNjcGRfcmVzZXRfY29kZSA9IERDQ1BfUkVTRVRfQ09ERV9OT19DT05ORUNUSU9OOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTQ4NywzNiArNDY4LDE3IEBACiAJCWlmIChkY2NwX3BhcnNlX29wdGlvbnMoc2ssIHNrYikpCiAJCQlnb3RvIGRpc2NhcmQ7CiAKLQkJaWYgKERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX2Fja19zZXEgIT0KLQkJICAgIERDQ1BfUEtUX1dJVEhPVVRfQUNLX1NFUSkKKwkJaWYgKGRjYi0+ZGNjcGRfYWNrX3NlcSAhPSBEQ0NQX1BLVF9XSVRIT1VUX0FDS19TRVEpCiAJCQlkY2NwX2V2ZW50X2Fja19yZWN2KHNrLCBza2IpOwogCiAJCWNjaWRfaGNfcnhfcGFja2V0X3JlY3YoZHAtPmRjY3BzX2hjX3J4X2NjaWQsIHNrLCBza2IpOwogCQljY2lkX2hjX3R4X3BhY2tldF9yZWN2KGRwLT5kY2Nwc19oY190eF9jY2lkLCBzaywgc2tiKTsKIAotCQkvKgotCQkgKiBGSVhNRTogY2hlY2sgRUNOIHRvIHNlZSBpZiB3ZSBzaG91bGQgdXNlCi0JCSAqIERDQ1BfQUNLUEtUU19TVEFURV9FQ05fTUFSS0VECi0JCSAqLwotCQlpZiAoZHAtPmRjY3BzX29wdGlvbnMuZGNjcG9fc2VuZF9hY2tfdmVjdG9yKSB7Ci0JCQlpZiAoZGNjcF9hY2twa3RzX2FkZChkcC0+ZGNjcHNfaGNfcnhfYWNrcGt0cywgc2ssCi0JCQkJCSAgICAgRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfc2VxLAotCQkJCQkgICAgIERDQ1BfQUNLUEtUU19TVEFURV9SRUNFSVZFRCkpCi0JCQkJZ290byBkaXNjYXJkOwotCQkJLyoKLQkJCSAqIEZJWE1FOiB0aGlzIGFjdGl2YXRpb24gaXMgcHJvYmFibHkgd3JvbmcsIGhhdmUgdG8KLQkJCSAqIHN0dWR5IG1vcmUgVENQIGRlbGFjayBtYWNoaW5lcnkgYW5kIGhvdyBpdCBmaXRzIGludG8KLQkJCSAqIERDQ1AgZHJhZnQsIGJ1dCBmb3Igbm93IGl0IGtpbmRhICJ3b3JrcyIgOCkKLQkJCSAqLwotCQkJaWYgKChkcC0+ZGNjcHNfaGNfcnhfYWNrcGt0cy0+ZGNjcGFwX2Fja19zZXFubyA9PQotCQkJICAgICBEQ0NQX01BWF9TRVFOTyArIDEpICYmCi0JCQkgICAgIWluZXRfY3NrX2Fja19zY2hlZHVsZWQoc2spKSB7Ci0JCQkJaW5ldF9jc2tfc2NoZWR1bGVfYWNrKHNrKTsKLQkJCQlpbmV0X2Nza19yZXNldF94bWl0X3RpbWVyKHNrLCBJQ1NLX1RJTUVfREFDSywKLQkJCQkJCQkgIFRDUF9ERUxBQ0tfTUlOLAotCQkJCQkJCSAgRENDUF9SVE9fTUFYKTsKLQkJCX0KLQkJfQorIAkJaWYgKGRwLT5kY2Nwc19vcHRpb25zLmRjY3BvX3NlbmRfYWNrX3ZlY3RvciAmJgorCQkgICAgZGNjcF9hY2t2ZWNfYWRkKGRwLT5kY2Nwc19oY19yeF9hY2t2ZWMsIHNrLAorIAkJCQkgICAgRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfc2VxLAorIAkJCQkgICAgRENDUF9BQ0tWRUNfU1RBVEVfUkVDRUlWRUQpKQorIAkJCWdvdG8gZGlzY2FyZDsKIAl9CiAKIAkvKgpAQCAtNTUxLDggKzUxMyw3IEBACiAJCSAgICAgZGgtPmRjY3BoX3R5cGUgPT0gRENDUF9QS1RfUkVRVUVTVCkgfHwKIAkJICAgIChzay0+c2tfc3RhdGUgPT0gRENDUF9SRVNQT05EICYmCiAJCSAgICAgZGgtPmRjY3BoX3R5cGUgPT0gRENDUF9QS1RfREFUQSkpIHsKLQkJZGNjcF9zZW5kX3N5bmMoc2ssIERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3NlcSwKLQkJCSAgICAgICBEQ0NQX1BLVF9TWU5DKTsKKwkJZGNjcF9zZW5kX3N5bmMoc2ssIGRjYi0+ZGNjcGRfc2VxLCBEQ0NQX1BLVF9TWU5DKTsKIAkJZ290byBkaXNjYXJkOwogCX0gZWxzZSBpZiAoZGgtPmRjY3BoX3R5cGUgPT0gRENDUF9QS1RfQ0xPU0VSRVEpIHsKIAkJZGNjcF9yY3ZfY2xvc2VyZXEoc2ssIHNrYik7CkBAIC01NjMsMTMgKzUyNCwxMyBAQAogCX0KIAogCWlmICh1bmxpa2VseShkaC0+ZGNjcGhfdHlwZSA9PSBEQ0NQX1BLVF9TWU5DKSkgewotCQlkY2NwX3NlbmRfc3luYyhzaywgRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfc2VxLAotCQkJICAgICAgIERDQ1BfUEtUX1NZTkNBQ0spOworCQlkY2NwX3NlbmRfc3luYyhzaywgZGNiLT5kY2NwZF9zZXEsIERDQ1BfUEtUX1NZTkNBQ0spOwogCQlnb3RvIGRpc2NhcmQ7CiAJfQogCiAJc3dpdGNoIChzay0+c2tfc3RhdGUpIHsKIAljYXNlIERDQ1BfQ0xPU0VEOgorCQlkY2ItPmRjY3BkX3Jlc2V0X2NvZGUgPSBEQ0NQX1JFU0VUX0NPREVfTk9fQ09OTkVDVElPTjsKIAkJcmV0dXJuIDE7CiAKIAljYXNlIERDQ1BfUkVRVUVTVElORzoKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lwdjQuYyBiL25ldC9kY2NwL2lwdjQuYwppbmRleCAyYWZhYTQ2Li42Mjk4Y2Y1IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pcHY0LmMKKysrIGIvbmV0L2RjY3AvaXB2NC5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bmV0L3RjcF9zdGF0ZXMuaD4KICNpbmNsdWRlIDxuZXQveGZybS5oPgogCisjaW5jbHVkZSAiYWNrdmVjLmgiCiAjaW5jbHVkZSAiY2NpZC5oIgogI2luY2x1ZGUgImRjY3AuaCIKIApAQCAtNjEsMjcgKzYyLDI3IEBACiAJY29uc3QgaW50IGRpZiA9IHNrLT5za19ib3VuZF9kZXZfaWY7CiAJSU5FVF9BRERSX0NPT0tJRShhY29va2llLCBzYWRkciwgZGFkZHIpCiAJY29uc3QgX191MzIgcG9ydHMgPSBJTkVUX0NPTUJJTkVEX1BPUlRTKGluZXQtPmRwb3J0LCBscG9ydCk7Ci0JY29uc3QgaW50IGhhc2ggPSBpbmV0X2VoYXNoZm4oZGFkZHIsIGxwb3J0LCBzYWRkciwgaW5ldC0+ZHBvcnQsCi0JCQkJICAgICAgZGNjcF9oYXNoaW5mby5laGFzaF9zaXplKTsKLQlzdHJ1Y3QgaW5ldF9laGFzaF9idWNrZXQgKmhlYWQgPSAmZGNjcF9oYXNoaW5mby5laGFzaFtoYXNoXTsKKwl1bnNpZ25lZCBpbnQgaGFzaCA9IGluZXRfZWhhc2hmbihkYWRkciwgbHBvcnQsIHNhZGRyLCBpbmV0LT5kcG9ydCk7CisJc3RydWN0IGluZXRfZWhhc2hfYnVja2V0ICpoZWFkID0gaW5ldF9laGFzaF9idWNrZXQoJmRjY3BfaGFzaGluZm8sIGhhc2gpOwogCWNvbnN0IHN0cnVjdCBzb2NrICpzazI7CiAJY29uc3Qgc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAJc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHc7CiAKKwlwcmVmZXRjaChoZWFkLT5jaGFpbi5maXJzdCk7CiAJd3JpdGVfbG9jaygmaGVhZC0+bG9jayk7CiAKIAkvKiBDaGVjayBUSU1FLVdBSVQgc29ja2V0cyBmaXJzdC4gKi8KIAlza19mb3JfZWFjaChzazIsIG5vZGUsICYoaGVhZCArIGRjY3BfaGFzaGluZm8uZWhhc2hfc2l6ZSktPmNoYWluKSB7CiAJCXR3ID0gaW5ldF90d3NrKHNrMik7CiAKLQkJaWYgKElORVRfVFdfTUFUQ0goc2syLCBhY29va2llLCBzYWRkciwgZGFkZHIsIHBvcnRzLCBkaWYpKQorCQlpZiAoSU5FVF9UV19NQVRDSChzazIsIGhhc2gsIGFjb29raWUsIHNhZGRyLCBkYWRkciwgcG9ydHMsIGRpZikpCiAJCQlnb3RvIG5vdF91bmlxdWU7CiAJfQogCXR3ID0gTlVMTDsKIAogCS8qIEFuZCBlc3RhYmxpc2hlZCBwYXJ0Li4uICovCiAJc2tfZm9yX2VhY2goc2syLCBub2RlLCAmaGVhZC0+Y2hhaW4pIHsKLQkJaWYgKElORVRfTUFUQ0goc2syLCBhY29va2llLCBzYWRkciwgZGFkZHIsIHBvcnRzLCBkaWYpKQorCQlpZiAoSU5FVF9NQVRDSChzazIsIGhhc2gsIGFjb29raWUsIHNhZGRyLCBkYWRkciwgcG9ydHMsIGRpZikpCiAJCQlnb3RvIG5vdF91bmlxdWU7CiAJfQogCkBAIC04OSw3ICs5MCw3IEBACiAJICogaW4gaGFzaCB0YWJsZSBzb2NrZXQgd2l0aCBhIGZ1bm55IGlkZW50aXR5LiAqLwogCWluZXQtPm51bSA9IGxwb3J0OwogCWluZXQtPnNwb3J0ID0gaHRvbnMobHBvcnQpOwotCXNrLT5za19oYXNoZW50ID0gaGFzaDsKKwlzay0+c2tfaGFzaCA9IGhhc2g7CiAJQlVHX1RSQVAoc2tfdW5oYXNoZWQoc2spKTsKIAlfX3NrX2FkZF9ub2RlKHNrLCAmaGVhZC0+Y2hhaW4pOwogCXNvY2tfcHJvdF9pbmNfdXNlKHNrLT5za19wcm90KTsKQEAgLTI0Niw2ICsyNDcsOSBAQAogCiAJZHAtPmRjY3BzX3JvbGUgPSBEQ0NQX1JPTEVfQ0xJRU5UOwogCisJaWYgKGRjY3Bfc2VydmljZV9ub3RfaW5pdGlhbGl6ZWQoc2spKQorCQlyZXR1cm4gLUVQUk9UTzsKKwogCWlmIChhZGRyX2xlbiA8IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNDU5LDYgKzQ2Myw3IEBACiAJaWYgKHNrYiAhPSBOVUxMKSB7CiAJCWNvbnN0IHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcSA9IGluZXRfcnNrKHJlcSk7CiAKKwkJbWVtc2V0KCYoSVBDQihza2IpLT5vcHQpLCAwLCBzaXplb2YoSVBDQihza2IpLT5vcHQpKTsKIAkJZXJyID0gaXBfYnVpbGRfYW5kX3NlbmRfcGt0KHNrYiwgc2ssIGlyZXEtPmxvY19hZGRyLAogCQkJCQkgICAgaXJlcS0+cm10X2FkZHIsCiAJCQkJCSAgICBpcmVxLT5vcHQpOwpAQCAtNjQzLDYgKzY0OCw3IEBACiAJaWYgKHNrYiAhPSBOVUxMKSB7CiAJCWNvbnN0IHN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAorCQltZW1zZXQoJihJUENCKHNrYiktPm9wdCksIDAsIHNpemVvZihJUENCKHNrYiktPm9wdCkpOwogCQllcnIgPSBpcF9idWlsZF9hbmRfc2VuZF9wa3Qoc2tiLCBzaywKIAkJCQkJICAgIGluZXQtPnNhZGRyLCBpbmV0LT5kYWRkciwgTlVMTCk7CiAJCWlmIChlcnIgPT0gTkVUX1hNSVRfQ04pCkBAIC02NjEsNiArNjY3LDE2IEBACiAJCQkJCSAgIGRjY3BfaGRyKHNrYiktPmRjY3BoX3Nwb3J0KTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgZGNjcF9iYWRfc2VydmljZV9jb2RlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywKKwkJCQkJY29uc3QgX191MzIgc2VydmljZSkKK3sKKwljb25zdCBzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOworCisJaWYgKGRwLT5kY2Nwc19zZXJ2aWNlID09IHNlcnZpY2UpCisJCXJldHVybiAwOworCXJldHVybiAhZGNjcF9saXN0X2hhc19zZXJ2aWNlKGRwLT5kY2Nwc19zZXJ2aWNlX2xpc3QsIHNlcnZpY2UpOworfQorCiBpbnQgZGNjcF92NF9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcTsKQEAgLTY2OSwxMyArNjg1LDIyIEBACiAJc3RydWN0IGRjY3BfcmVxdWVzdF9zb2NrICpkcmVxOwogCWNvbnN0IF9fdTMyIHNhZGRyID0gc2tiLT5uaC5pcGgtPnNhZGRyOwogCWNvbnN0IF9fdTMyIGRhZGRyID0gc2tiLT5uaC5pcGgtPmRhZGRyOworIAljb25zdCBfX3UzMiBzZXJ2aWNlID0gZGNjcF9oZHJfcmVxdWVzdChza2IpLT5kY2NwaF9yZXFfc2VydmljZTsKKwlzdHJ1Y3QgZGNjcF9za2JfY2IgKmRjYiA9IERDQ1BfU0tCX0NCKHNrYik7CisJX191OCByZXNldF9jb2RlID0gRENDUF9SRVNFVF9DT0RFX1RPT19CVVNZOwogCXN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IE5VTEw7CiAKIAkvKiBOZXZlciBhbnN3ZXIgdG8gRENDUF9QS1RfUkVRVUVTVHMgc2VuZCB0byBicm9hZGNhc3Qgb3IgbXVsdGljYXN0ICovCiAJaWYgKCgoc3RydWN0IHJ0YWJsZSAqKXNrYi0+ZHN0KS0+cnRfZmxhZ3MgJgotCSAgICAoUlRDRl9CUk9BRENBU1QgfCBSVENGX01VTFRJQ0FTVCkpCisJICAgIChSVENGX0JST0FEQ0FTVCB8IFJUQ0ZfTVVMVElDQVNUKSkgeworCQlyZXNldF9jb2RlID0gRENDUF9SRVNFVF9DT0RFX05PX0NPTk5FQ1RJT047CiAJCWdvdG8gZHJvcDsKKwl9CiAKKwlpZiAoZGNjcF9iYWRfc2VydmljZV9jb2RlKHNrLCBzZXJ2aWNlKSkgeworCQlyZXNldF9jb2RlID0gRENDUF9SRVNFVF9DT0RFX0JBRF9TRVJWSUNFX0NPREU7CisJCWdvdG8gZHJvcDsKKyAJfQogCS8qCiAJICogVFcgYnVja2V0cyBhcmUgY29udmVydGVkIHRvIG9wZW4gcmVxdWVzdHMgd2l0aG91dAogCSAqIGxpbWl0YXRpb25zLCB0aGV5IGNvbnNlcnZlIHJlc291cmNlcyBhbmQgcGVlciBpcwpAQCAtNzE4LDkgKzc0Myw5IEBACiAJICogZGNjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZC4KIAkgKi8KIAlkcmVxID0gZGNjcF9yc2socmVxKTsKLQlkcmVxLT5kcmVxX2lzciA9IERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3NlcTsKLQlkcmVxLT5kcmVxX2lzcyA9IGRjY3BfdjRfaW5pdF9zZXF1ZW5jZShzaywgc2tiKTsKLQlkcmVxLT5kcmVxX3NlcnZpY2UgPSBkY2NwX2hkcl9yZXF1ZXN0KHNrYiktPmRjY3BoX3JlcV9zZXJ2aWNlOworCWRyZXEtPmRyZXFfaXNyCSAgID0gZGNiLT5kY2NwZF9zZXE7CisJZHJlcS0+ZHJlcV9pc3MJICAgPSBkY2NwX3Y0X2luaXRfc2VxdWVuY2Uoc2ssIHNrYik7CisJZHJlcS0+ZHJlcV9zZXJ2aWNlID0gc2VydmljZTsKIAogCWlmIChkY2NwX3Y0X3NlbmRfcmVzcG9uc2Uoc2ssIHJlcSwgZHN0KSkKIAkJZ290byBkcm9wX2FuZF9mcmVlOwpAQCAtNzM1LDYgKzc2MCw3IEBACiAJX19yZXFza19mcmVlKHJlcSk7CiBkcm9wOgogCURDQ1BfSU5DX1NUQVRTX0JIKERDQ1BfTUlCX0FUVEVNUFRGQUlMUyk7CisJZGNiLT5kY2NwZF9yZXNldF9jb2RlID0gcmVzZXRfY29kZTsKIAlyZXR1cm4gLTE7CiB9CiAKQEAgLTEwMDUsNyArMTAzMSw2IEBACiAJcmV0dXJuIDA7CiAKIHJlc2V0OgotCURDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3Jlc2V0X2NvZGUgPSBEQ0NQX1JFU0VUX0NPREVfTk9fQ09OTkVDVElPTjsKIAlkY2NwX3Y0X2N0bF9zZW5kX3Jlc2V0KHNrYik7CiBkaXNjYXJkOgogCWtmcmVlX3NrYihza2IpOwpAQCAtMTA5MCw0NSArMTExNSw3IEBACiAJCWdvdG8gZGlzY2FyZF9pdDsKIAogCWRoID0gZGNjcF9oZHIoc2tiKTsKLSNpZiAwCi0JLyoKLQkgKiBVc2Ugc29tZXRoaW5nIGxpa2UgdGhpcyB0byBzaW11bGF0ZSBzb21lIERBVEEvREFUQUFDSyBsb3NzIHRvIHRlc3QKLQkgKiBkY2NwX2Fja3BrdHNfYWRkLCB5b3UnbGwgZ2V0IHNvbWV0aGluZyBsaWtlIHRoaXMgb24gYSBzZXNzaW9uIHRoYXQKLQkgKiBzZW5kcyAxMCBEQVRBL0RBVEFBQ0sgcGFja2V0czoKLQkgKgotCSAqIGFja3BrdHNfcHJpbnQ6IDI4MTQ3MzU5NjQ2NzQyMiB8MCwwfDMsMHwwLDB8MywwfDAsMHwzLDB8MCwwfDMsMHwwLDF8Ci0JICoKLQkgKiAwLCAwIG1lYW5zOiBEQ0NQX0FDS1BLVFNfU1RBVEVfUkVDRUlWRUQsIFJMRSA9PSBqdXN0IHRoaXMgcGFja2V0Ci0JICogMCwgMSBtZWFuczogRENDUF9BQ0tQS1RTX1NUQVRFX1JFQ0VJVkVELCBSTEUgPT0gdHdvIGFkamFjZW50IHBhY2tldHMKLQkgKiAJCQkJCQkgICB3aXRoIHRoZSBzYW1lIHN0YXRlCi0JICogMywgMCBtZWFuczogRENDUF9BQ0tQS1RTX1NUQVRFX05PVF9SRUNFSVZFRCwgUkxFID09IGp1c3QgdGhpcyBwYWNrZXQKLQkgKgotCSAqIFNvLi4uCi0JICoKLQkgKiAyODE0NzM1OTY0Njc0MjIgd2FzIHJlY2VpdmVkCi0JICogMjgxNDczNTk2NDY3NDIxIHdhcyBub3QgcmVjZWl2ZWQKLQkgKiAyODE0NzM1OTY0Njc0MjAgd2FzIHJlY2VpdmVkCi0JICogMjgxNDczNTk2NDY3NDE5IHdhcyBub3QgcmVjZWl2ZWQKLQkgKiAyODE0NzM1OTY0Njc0MTggd2FzIHJlY2VpdmVkCi0JICogMjgxNDczNTk2NDY3NDE3IHdhcyBub3QgcmVjZWl2ZWQKLQkgKiAyODE0NzM1OTY0Njc0MTYgd2FzIHJlY2VpdmVkCi0JICogMjgxNDczNTk2NDY3NDE1IHdhcyBub3QgcmVjZWl2ZWQKLQkgKiAyODE0NzM1OTY0Njc0MTQgd2FzIHJlY2VpdmVkCi0JICogMjgxNDczNTk2NDY3NDEzIHdhcyByZWNlaXZlZCAodGhpcyBvbmUgd2FzIHRoZSAzd2F5IGhhbmRzaGFrZQotCSAqIAkJCQkgUkVTUE9OU0UpCi0JICoKLQkgKi8KLQlpZiAoZGgtPmRjY3BoX3R5cGUgPT0gRENDUF9QS1RfREFUQSB8fAotCSAgICBkaC0+ZGNjcGhfdHlwZSA9PSBEQ0NQX1BLVF9EQVRBQUNLKSB7Ci0JCXN0YXRpYyBpbnQgZGlzY2FyZCA9IDA7CiAKLQkJaWYgKGRpc2NhcmQpIHsKLQkJCWRpc2NhcmQgPSAwOwotCQkJZ290byBkaXNjYXJkX2l0OwotCQl9Ci0JCWRpc2NhcmQgPSAxOwotCX0KLSNlbmRpZgogCURDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3NlcSAgPSBkY2NwX2hkcl9zZXEoc2tiKTsKIAlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF90eXBlID0gZGgtPmRjY3BoX3R5cGU7CiAKQEAgLTEyNDIsMTEgKzEyMjksOSBAQAogCWRvX2dldHRpbWVvZmRheSgmZHAtPmRjY3BzX2Vwb2NoKTsKIAogCWlmIChkcC0+ZGNjcHNfb3B0aW9ucy5kY2Nwb19zZW5kX2Fja192ZWN0b3IpIHsKLQkJZHAtPmRjY3BzX2hjX3J4X2Fja3BrdHMgPQotCQkJZGNjcF9hY2twa3RzX2FsbG9jKERDQ1BfTUFYX0FDS19WRUNUT1JfTEVOLAotCQkJCQkgICBHRlBfS0VSTkVMKTsKLQotCQlpZiAoZHAtPmRjY3BzX2hjX3J4X2Fja3BrdHMgPT0gTlVMTCkKKwkJZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyA9IGRjY3BfYWNrdmVjX2FsbG9jKERDQ1BfTUFYX0FDS1ZFQ19MRU4sCisJCQkJCQkJICAgR0ZQX0tFUk5FTCk7CisJCWlmIChkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjID09IE5VTEwpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTEyNTgsMTYgKzEyNDMsMTggQEAKIAkgKiBzZXRzb2Nrb3B0KENDSURzLUktd2FudC9hY2NlcHQpLiAtYWNtZQogCSAqLwogCWlmIChsaWtlbHkoIWRjY3BfY3RsX3NvY2tldF9pbml0KSkgewotCQlkcC0+ZGNjcHNfaGNfcnhfY2NpZCA9IGNjaWRfaW5pdChkcC0+ZGNjcHNfb3B0aW9ucy5kY2Nwb19jY2lkLAorCQlkcC0+ZGNjcHNfaGNfcnhfY2NpZCA9IGNjaWRfaW5pdChkcC0+ZGNjcHNfb3B0aW9ucy5kY2Nwb19yeF9jY2lkLAogCQkJCQkJIHNrKTsKLQkJZHAtPmRjY3BzX2hjX3R4X2NjaWQgPSBjY2lkX2luaXQoZHAtPmRjY3BzX29wdGlvbnMuZGNjcG9fY2NpZCwKKwkJZHAtPmRjY3BzX2hjX3R4X2NjaWQgPSBjY2lkX2luaXQoZHAtPmRjY3BzX29wdGlvbnMuZGNjcG9fdHhfY2NpZCwKIAkJCQkJCSBzayk7CiAJICAgIAlpZiAoZHAtPmRjY3BzX2hjX3J4X2NjaWQgPT0gTlVMTCB8fAogCQkgICAgZHAtPmRjY3BzX2hjX3R4X2NjaWQgPT0gTlVMTCkgewogCQkJY2NpZF9leGl0KGRwLT5kY2Nwc19oY19yeF9jY2lkLCBzayk7CiAJCQljY2lkX2V4aXQoZHAtPmRjY3BzX2hjX3R4X2NjaWQsIHNrKTsKLQkJCWRjY3BfYWNrcGt0c19mcmVlKGRwLT5kY2Nwc19oY19yeF9hY2twa3RzKTsKLQkJCWRwLT5kY2Nwc19oY19yeF9hY2twa3RzID0gTlVMTDsKKwkJCWlmIChkcC0+ZGNjcHNfb3B0aW9ucy5kY2Nwb19zZW5kX2Fja192ZWN0b3IpIHsKKwkJCQlkY2NwX2Fja3ZlY19mcmVlKGRwLT5kY2Nwc19oY19yeF9hY2t2ZWMpOworCQkJCWRwLT5kY2Nwc19oY19yeF9hY2t2ZWMgPSBOVUxMOworCQkJfQogCQkJZHAtPmRjY3BzX2hjX3J4X2NjaWQgPSBkcC0+ZGNjcHNfaGNfdHhfY2NpZCA9IE5VTEw7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQpAQCAtMTI4MCw2ICsxMjY3LDcgQEAKIAlzay0+c2tfd3JpdGVfc3BhY2UgPSBkY2NwX3dyaXRlX3NwYWNlOwogCWRwLT5kY2Nwc19tc3NfY2FjaGUgPSA1MzY7CiAJZHAtPmRjY3BzX3JvbGUgPSBEQ0NQX1JPTEVfVU5ERUZJTkVEOworCWRwLT5kY2Nwc19zZXJ2aWNlID0gRENDUF9TRVJWSUNFX0lOVkFMSURfVkFMVUU7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzMDEsMTAgKzEyODksMTcgQEAKIAlpZiAoaW5ldF9jc2soc2spLT5pY3NrX2JpbmRfaGFzaCAhPSBOVUxMKQogCQlpbmV0X3B1dF9wb3J0KCZkY2NwX2hhc2hpbmZvLCBzayk7CiAKKwlpZiAoZHAtPmRjY3BzX3NlcnZpY2VfbGlzdCAhPSBOVUxMKSB7CisJCWtmcmVlKGRwLT5kY2Nwc19zZXJ2aWNlX2xpc3QpOworCQlkcC0+ZGNjcHNfc2VydmljZV9saXN0ID0gTlVMTDsKKwl9CisKIAljY2lkX2hjX3J4X2V4aXQoZHAtPmRjY3BzX2hjX3J4X2NjaWQsIHNrKTsKIAljY2lkX2hjX3R4X2V4aXQoZHAtPmRjY3BzX2hjX3R4X2NjaWQsIHNrKTsKLQlkY2NwX2Fja3BrdHNfZnJlZShkcC0+ZGNjcHNfaGNfcnhfYWNrcGt0cyk7Ci0JZHAtPmRjY3BzX2hjX3J4X2Fja3BrdHMgPSBOVUxMOworCWlmIChkcC0+ZGNjcHNfb3B0aW9ucy5kY2Nwb19zZW5kX2Fja192ZWN0b3IpIHsKKwkJZGNjcF9hY2t2ZWNfZnJlZShkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjKTsKKwkJZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyA9IE5VTEw7CisJfQogCWNjaWRfZXhpdChkcC0+ZGNjcHNfaGNfcnhfY2NpZCwgc2spOwogCWNjaWRfZXhpdChkcC0+ZGNjcHNfaGNfdHhfY2NpZCwgc2spOwogCWRwLT5kY2Nwc19oY19yeF9jY2lkID0gZHAtPmRjY3BzX2hjX3R4X2NjaWQgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvbWluaXNvY2tzLmMgYi9uZXQvZGNjcC9taW5pc29ja3MuYwppbmRleCAxODQ2MWJjLi4xMzkzNDYxIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9taW5pc29ja3MuYworKysgYi9uZXQvZGNjcC9taW5pc29ja3MuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CiAjaW5jbHVkZSA8bmV0L2luZXRfdGltZXdhaXRfc29jay5oPgogCisjaW5jbHVkZSAiYWNrdmVjLmgiCiAjaW5jbHVkZSAiY2NpZC5oIgogI2luY2x1ZGUgImRjY3AuaCIKIApAQCAtOTMsMjIgKzk0LDI0IEBACiAJCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqbmV3aWNzayA9IGluZXRfY3NrKHNrKTsKIAkJc3RydWN0IGRjY3Bfc29jayAqbmV3ZHAgPSBkY2NwX3NrKG5ld3NrKTsKIAotCQluZXdkcC0+ZGNjcHNfaGNfcnhfYWNrcGt0cyA9IE5VTEw7Ci0JCW5ld2RwLT5kY2Nwc19yb2xlID0gRENDUF9ST0xFX1NFUlZFUjsKLQkJbmV3aWNzay0+aWNza19ydG8gPSBEQ0NQX1RJTUVPVVRfSU5JVDsKKwkJbmV3ZHAtPmRjY3BzX3JvbGUJICAgPSBEQ0NQX1JPTEVfU0VSVkVSOworCQluZXdkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjICA9IE5VTEw7CisJCW5ld2RwLT5kY2Nwc19zZXJ2aWNlX2xpc3QgID0gTlVMTDsKKwkJbmV3ZHAtPmRjY3BzX3NlcnZpY2UJICAgPSBkcmVxLT5kcmVxX3NlcnZpY2U7CisJCW5ld2ljc2stPmljc2tfcnRvCSAgID0gRENDUF9USU1FT1VUX0lOSVQ7CiAJCWRvX2dldHRpbWVvZmRheSgmbmV3ZHAtPmRjY3BzX2Vwb2NoKTsKIAogCQlpZiAobmV3ZHAtPmRjY3BzX29wdGlvbnMuZGNjcG9fc2VuZF9hY2tfdmVjdG9yKSB7Ci0JCQluZXdkcC0+ZGNjcHNfaGNfcnhfYWNrcGt0cyA9Ci0JCQkJZGNjcF9hY2twa3RzX2FsbG9jKERDQ1BfTUFYX0FDS19WRUNUT1JfTEVOLAotCQkJCQkJICAgR0ZQX0FUT01JQyk7CisJCQluZXdkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjID0KKwkJCQlkY2NwX2Fja3ZlY19hbGxvYyhEQ0NQX01BWF9BQ0tWRUNfTEVOLAorCQkJCQkJICBHRlBfQVRPTUlDKTsKIAkJCS8qCiAJCQkgKiBYWFg6IFdlJ3JlIHVzaW5nIHRoZSBzYW1lIENDSURzIHNldCBvbiB0aGUgcGFyZW50LAogCQkJICogaS5lLiBza19jbG9uZSBjb3BpZWQgdGhlIG1hc3RlciBzb2NrIGFuZCBsZWZ0IHRoZQogCQkJICogQ0NJRCBwb2ludGVycyBmb3IgdGhpcyBjaGlsZCwgdGhhdCBpcyB3aHkgd2UgZG8gdGhlCiAJCQkgKiBfX2NjaWRfZ2V0IGNhbGxzLgogCQkJICovCi0JCQlpZiAodW5saWtlbHkobmV3ZHAtPmRjY3BzX2hjX3J4X2Fja3BrdHMgPT0gTlVMTCkpCisJCQlpZiAodW5saWtlbHkobmV3ZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyA9PSBOVUxMKSkKIAkJCQlnb3RvIG91dF9mcmVlOwogCQl9CiAKQEAgLTExNiw3ICsxMTksNyBAQAogCQkJCQkgICAgIG5ld3NrKSAhPSAwIHx8CiAJCQkgICAgIGNjaWRfaGNfdHhfaW5pdChuZXdkcC0+ZGNjcHNfaGNfdHhfY2NpZCwKIAkJCQkgICAgIAkgICAgIG5ld3NrKSAhPSAwKSkgewotCQkJZGNjcF9hY2twa3RzX2ZyZWUobmV3ZHAtPmRjY3BzX2hjX3J4X2Fja3BrdHMpOworCQkJZGNjcF9hY2t2ZWNfZnJlZShuZXdkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjKTsKIAkJCWNjaWRfaGNfcnhfZXhpdChuZXdkcC0+ZGNjcHNfaGNfcnhfY2NpZCwgbmV3c2spOwogCQkJY2NpZF9oY190eF9leGl0KG5ld2RwLT5kY2Nwc19oY190eF9jY2lkLCBuZXdzayk7CiBvdXRfZnJlZToKZGlmZiAtLWdpdCBhL25ldC9kY2NwL29wdGlvbnMuYyBiL25ldC9kY2NwL29wdGlvbnMuYwppbmRleCBkNGM0MjQyLi4wYTc2NDI2IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9vcHRpb25zLmMKKysrIGIvbmV0L2RjY3Avb3B0aW9ucy5jCkBAIC0xOCwxOSArMTgsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KIAorI2luY2x1ZGUgImFja3ZlYy5oIgogI2luY2x1ZGUgImNjaWQuaCIKICNpbmNsdWRlICJkY2NwLmgiCiAKLXN0YXRpYyB2b2lkIGRjY3BfYWNrcGt0c19jaGVja19yY3ZfYWNrdmVjdG9yKHN0cnVjdCBkY2NwX2Fja3BrdHMgKmFwLAotCQkJCQkgICAgIHN0cnVjdCBzb2NrICpzaywKLQkJCQkJICAgICBjb25zdCB1NjQgYWNrbm8sCi0JCQkJCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciBsZW4sCi0JCQkJCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdmVjdG9yKTsKLQogLyogc3RvcmVzIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgbmV3IGNvbm5lY3Rpb24uIG1heSBiZSBjaGFuZ2VkIHdpdGggc3lzY3RsICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRjY3Bfb3B0aW9ucyBkY2Nwb19kZWZhdWx0X3ZhbHVlcyA9IHsKIAkuZGNjcG9fc2VxdWVuY2Vfd2luZG93CSAgPSBEQ0NQRl9JTklUSUFMX1NFUVVFTkNFX1dJTkRPVywKLQkuZGNjcG9fY2NpZAkJICA9IERDQ1BGX0lOSVRJQUxfQ0NJRCwKKwkuZGNjcG9fcnhfY2NpZAkJICA9IERDQ1BGX0lOSVRJQUxfQ0NJRCwKKwkuZGNjcG9fdHhfY2NpZAkJICA9IERDQ1BGX0lOSVRJQUxfQ0NJRCwKIAkuZGNjcG9fc2VuZF9hY2tfdmVjdG9yCSAgPSBEQ0NQRl9JTklUSUFMX1NFTkRfQUNLX1ZFQ1RPUiwKIAkuZGNjcG9fc2VuZF9uZHBfY291bnQJICA9IERDQ1BGX0lOSVRJQUxfU0VORF9ORFBfQ09VTlQsCiB9OwpAQCAtMTEzLDI1ICsxMDksMTMgQEAKIAkJCQkgICAgICBvcHRfcmVjdi0+ZGNjcG9yX25kcCk7CiAJCQlicmVhazsKIAkJY2FzZSBEQ0NQT19BQ0tfVkVDVE9SXzA6Ci0JCQlpZiAobGVuID4gRENDUF9NQVhfQUNLX1ZFQ1RPUl9MRU4pCi0JCQkJZ290byBvdXRfaW52YWxpZF9vcHRpb247Ci0KKwkJY2FzZSBEQ0NQT19BQ0tfVkVDVE9SXzE6CiAJCQlpZiAocGt0X3R5cGUgPT0gRENDUF9QS1RfREFUQSkKIAkJCQljb250aW51ZTsKIAotCQkJb3B0X3JlY3YtPmRjY3Bvcl9hY2tfdmVjdG9yX2xlbiA9IGxlbjsKLQkJCW9wdF9yZWN2LT5kY2Nwb3JfYWNrX3ZlY3Rvcl9pZHggPSB2YWx1ZSAtIG9wdGlvbnM7Ci0KLQkJCWRjY3BfcHJfZGVidWcoIiVzQUNLIHZlY3RvciAwLCBsZW49JWQsIGFja19hY2tubz0lbGx1XG4iLAotCQkJCSAgICAgIGRlYnVnX3ByZWZpeCwgbGVuLAotCQkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpCi0JCQkJICAgICAgRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfYWNrX3NlcSk7Ci0JCQlkY2NwX2Fja3ZlY3Rvcl9wcmludChEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9hY2tfc2VxLAotCQkJCQkgICAgIHZhbHVlLCBsZW4pOwotCQkJZGNjcF9hY2twa3RzX2NoZWNrX3Jjdl9hY2t2ZWN0b3IoZHAtPmRjY3BzX2hjX3J4X2Fja3BrdHMsCi0JCQkJCQkJIHNrLAotCQkJCQkJIERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX2Fja19zZXEsCi0JCQkJCQkJIGxlbiwgdmFsdWUpOworCQkJaWYgKGRwLT5kY2Nwc19vcHRpb25zLmRjY3BvX3NlbmRfYWNrX3ZlY3RvciAmJgorCQkJICAgIGRjY3BfYWNrdmVjX3BhcnNlKHNrLCBza2IsIG9wdCwgdmFsdWUsIGxlbikpCisJCQkJZ290byBvdXRfaW52YWxpZF9vcHRpb247CiAJCQlicmVhazsKIAkJY2FzZSBEQ0NQT19USU1FU1RBTVA6CiAJCQlpZiAobGVuICE9IDQpCkBAIC0zNTIsODYgKzMzNiw2IEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKGRjY3BfaW5zZXJ0X29wdGlvbl9lbGFwc2VkX3RpbWUpOwogCi1zdGF0aWMgdm9pZCBkY2NwX2luc2VydF9vcHRpb25fYWNrX3ZlY3RvcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKLSNpZmRlZiBDT05GSUdfSVBfRENDUF9ERUJVRwotCWNvbnN0IGNoYXIgKmRlYnVnX3ByZWZpeCA9IGRwLT5kY2Nwc19yb2xlID09IERDQ1BfUk9MRV9DTElFTlQgPwotCQkJCQkiQ0xJRU5UIFRYIG9wdDogIiA6ICJzZXJ2ZXIgVFggb3B0OiAiOwotI2VuZGlmCi0Jc3RydWN0IGRjY3BfYWNrcGt0cyAqYXAgPSBkcC0+ZGNjcHNfaGNfcnhfYWNrcGt0czsKLQlpbnQgbGVuID0gYXAtPmRjY3BhcF9idWZfdmVjdG9yX2xlbiArIDI7Ci0Jc3RydWN0IHRpbWV2YWwgbm93OwotCXUzMiBlbGFwc2VkX3RpbWU7Ci0JdW5zaWduZWQgY2hhciAqdG8sICpmcm9tOwotCi0JZGNjcF90aW1lc3RhbXAoc2ssICZub3cpOwotCWVsYXBzZWRfdGltZSA9IHRpbWV2YWxfZGVsdGEoJm5vdywgJmFwLT5kY2NwYXBfdGltZSkgLyAxMDsKLQotCWlmIChlbGFwc2VkX3RpbWUgIT0gMCkKLQkJZGNjcF9pbnNlcnRfb3B0aW9uX2VsYXBzZWRfdGltZShzaywgc2tiLCBlbGFwc2VkX3RpbWUpOwotCi0JaWYgKERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX29wdF9sZW4gKyBsZW4gPiBEQ0NQX01BWF9PUFRfTEVOKSB7Ci0JCUxJTUlUX05FVERFQlVHKEtFUk5fSU5GTyAiRENDUDogcGFja2V0IHRvbyBzbWFsbCB0byAiCi0JCQkJCSAiaW5zZXJ0IEFDSyBWZWN0b3IhXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogWFhYOiBub3cgd2UgaGF2ZSBqdXN0IG9uZSBhY2sgdmVjdG9yIHNlbnQgcmVjb3JkLCBzbwotCSAqIHdlIGhhdmUgdG8gd2FpdCBmb3IgaXQgdG8gYmUgY2xlYXJlZC4KLQkgKgotCSAqIE9mIGNvdXJzZSB0aGlzIGlzIG5vdCBhY2NlcHRhYmxlLCBidXQgdGhpcyBpcyBqdXN0IGZvcgotCSAqIGJhc2ljIHRlc3Rpbmcgbm93LgotCSAqLwotCWlmIChhcC0+ZGNjcGFwX2Fja19zZXFubyAhPSBEQ0NQX01BWF9TRVFOTyArIDEpCi0JCXJldHVybjsKLQotCURDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX29wdF9sZW4gKz0gbGVuOwotCi0JdG8gICAgPSBza2JfcHVzaChza2IsIGxlbik7Ci0JKnRvKysgPSBEQ0NQT19BQ0tfVkVDVE9SXzA7Ci0JKnRvKysgPSBsZW47Ci0KLQlsZW4gID0gYXAtPmRjY3BhcF9idWZfdmVjdG9yX2xlbjsKLQlmcm9tID0gYXAtPmRjY3BhcF9idWYgKyBhcC0+ZGNjcGFwX2J1Zl9oZWFkOwotCi0JLyogQ2hlY2sgaWYgYnVmX2hlYWQgd3JhcHMgKi8KLQlpZiAoYXAtPmRjY3BhcF9idWZfaGVhZCArIGxlbiA+IGFwLT5kY2NwYXBfYnVmX2xlbikgewotCQljb25zdCB1bnNpZ25lZCBpbnQgdGFpbHNpemUgPSAoYXAtPmRjY3BhcF9idWZfbGVuIC0KLQkJCQkJICAgICAgIGFwLT5kY2NwYXBfYnVmX2hlYWQpOwotCi0JCW1lbWNweSh0bywgZnJvbSwgdGFpbHNpemUpOwotCQl0byAgICs9IHRhaWxzaXplOwotCQlsZW4gIC09IHRhaWxzaXplOwotCQlmcm9tID0gYXAtPmRjY3BhcF9idWY7Ci0JfQotCi0JbWVtY3B5KHRvLCBmcm9tLCBsZW4pOwotCS8qCi0JICoJRnJvbSBkcmFmdC1pZXRmLWRjY3Atc3BlYy0xMS50eHQ6Ci0JICoKLQkgKglGb3IgZWFjaCBhY2tub3dsZWRnZW1lbnQgaXQgc2VuZHMsIHRoZSBIQy1SZWNlaXZlciB3aWxsIGFkZCBhbgotCSAqCWFja25vd2xlZGdlbWVudCByZWNvcmQuICBhY2tfc2Vxbm8gd2lsbCBlcXVhbCB0aGUgSEMtUmVjZWl2ZXIKLQkgKglzZXF1ZW5jZSBudW1iZXIgaXQgdXNlZCBmb3IgdGhlIGFjayBwYWNrZXQ7IGFja19wdHIgd2lsbCBlcXVhbAotCSAqCWJ1Zl9oZWFkOyBhY2tfYWNrbm8gd2lsbCBlcXVhbCBidWZfYWNrbm87IGFuZCBhY2tfbm9uY2Ugd2lsbAotCSAqCWVxdWFsIGJ1Zl9ub25jZS4KLQkgKgotCSAqIFRoaXMgaW1wbGVtZW50aW9uIHVzZXMganVzdCBvbmUgYWNrIHJlY29yZCBmb3Igbm93LgotCSAqLwotCWFwLT5kY2NwYXBfYWNrX3NlcW5vCSAgPSBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9zZXE7Ci0JYXAtPmRjY3BhcF9hY2tfcHRyCSAgPSBhcC0+ZGNjcGFwX2J1Zl9oZWFkOwotCWFwLT5kY2NwYXBfYWNrX2Fja25vCSAgPSBhcC0+ZGNjcGFwX2J1Zl9hY2tubzsKLQlhcC0+ZGNjcGFwX2Fja19ub25jZQkgID0gYXAtPmRjY3BhcF9idWZfbm9uY2U7Ci0JYXAtPmRjY3BhcF9hY2tfdmVjdG9yX2xlbiA9IGFwLT5kY2NwYXBfYnVmX3ZlY3Rvcl9sZW47Ci0KLQlkY2NwX3ByX2RlYnVnKCIlc0FDSyBWZWN0b3IgMCwgbGVuPSVkLCBhY2tfc2Vxbm89JWxsdSwgIgotCQkgICAgICAiYWNrX2Fja25vPSVsbHVcbiIsCi0JCSAgICAgIGRlYnVnX3ByZWZpeCwgYXAtPmRjY3BhcF9hY2tfdmVjdG9yX2xlbiwKLQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgYXAtPmRjY3BhcF9hY2tfc2Vxbm8sCi0JCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGFwLT5kY2NwYXBfYWNrX2Fja25vKTsKLX0KLQogdm9pZCBkY2NwX3RpbWVzdGFtcChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0aW1ldmFsICp0dikKIHsKIAljb25zdCBzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwpAQCAtNTI4LDkgKzQzMiw4IEBACiAKIAlpZiAoIWRjY3BfcGFja2V0X3dpdGhvdXRfYWNrKHNrYikpIHsKIAkJaWYgKGRwLT5kY2Nwc19vcHRpb25zLmRjY3BvX3NlbmRfYWNrX3ZlY3RvciAmJgotCQkgICAgKGRwLT5kY2Nwc19oY19yeF9hY2twa3RzLT5kY2NwYXBfYnVmX2Fja25vICE9Ci0JCSAgICAgRENDUF9NQVhfU0VRTk8gKyAxKSkKLQkJCWRjY3BfaW5zZXJ0X29wdGlvbl9hY2tfdmVjdG9yKHNrLCBza2IpOworCQkgICAgZGNjcF9hY2t2ZWNfcGVuZGluZyhkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjKSkKKwkJCWRjY3BfaW5zZXJ0X29wdGlvbl9hY2t2ZWMoc2ssIHNrYik7CiAJCWlmIChkcC0+ZGNjcHNfdGltZXN0YW1wX2VjaG8gIT0gMCkKIAkJCWRjY3BfaW5zZXJ0X29wdGlvbl90aW1lc3RhbXBfZWNobyhzaywgc2tiKTsKIAl9CkBAIC01NTcsMzMxICs0NjAsMyBAQAogCQl9CiAJfQogfQotCi1zdHJ1Y3QgZGNjcF9hY2twa3RzICpkY2NwX2Fja3BrdHNfYWxsb2MoY29uc3QgdW5zaWduZWQgaW50IGxlbiwKLQkJCQkgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBfX25vY2FzdCBwcmlvcml0eSkKLXsKLQlzdHJ1Y3QgZGNjcF9hY2twa3RzICphcCA9IGttYWxsb2Moc2l6ZW9mKCphcCkgKyBsZW4sIHByaW9yaXR5KTsKLQotCWlmIChhcCAhPSBOVUxMKSB7Ci0jaWZkZWYgQ09ORklHX0lQX0RDQ1BfREVCVUcKLQkJbWVtc2V0KGFwLT5kY2NwYXBfYnVmLCAweEZGLCBsZW4pOwotI2VuZGlmCi0JCWFwLT5kY2NwYXBfYnVmX2xlbiAgID0gbGVuOwotCQlhcC0+ZGNjcGFwX2J1Zl9oZWFkICA9Ci0JCQlhcC0+ZGNjcGFwX2J1Zl90YWlsID0KLQkJCQlhcC0+ZGNjcGFwX2J1Zl9sZW4gLSAxOwotCQlhcC0+ZGNjcGFwX2J1Zl9hY2tubyA9Ci0JCQlhcC0+ZGNjcGFwX2Fja19hY2tubyA9Ci0JCQkJYXAtPmRjY3BhcF9hY2tfc2Vxbm8gPSBEQ0NQX01BWF9TRVFOTyArIDE7Ci0JCWFwLT5kY2NwYXBfYnVmX25vbmNlID0gYXAtPmRjY3BhcF9idWZfbm9uY2UgPSAwOwotCQlhcC0+ZGNjcGFwX2Fja19wdHIgICA9IDA7Ci0JCWFwLT5kY2NwYXBfdGltZS50dl9zZWMgPSAwOwotCQlhcC0+ZGNjcGFwX3RpbWUudHZfdXNlYyA9IDA7Ci0JCWFwLT5kY2NwYXBfYnVmX3ZlY3Rvcl9sZW4gPSBhcC0+ZGNjcGFwX2Fja192ZWN0b3JfbGVuID0gMDsKLQl9Ci0KLQlyZXR1cm4gYXA7Ci19Ci0KLXZvaWQgZGNjcF9hY2twa3RzX2ZyZWUoc3RydWN0IGRjY3BfYWNrcGt0cyAqYXApCi17Ci0JaWYgKGFwICE9IE5VTEwpIHsKLSNpZmRlZiBDT05GSUdfSVBfRENDUF9ERUJVRwotCQltZW1zZXQoYXAsIDB4RkYsIHNpemVvZigqYXApICsgYXAtPmRjY3BhcF9idWZfbGVuKTsKLSNlbmRpZgotCQlrZnJlZShhcCk7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHU4IGRjY3BfYWNrcGt0c19zdGF0ZShjb25zdCBzdHJ1Y3QgZGNjcF9hY2twa3RzICphcCwKLQkJCQkgICAgY29uc3QgdW5zaWduZWQgaW50IGluZGV4KQotewotCXJldHVybiBhcC0+ZGNjcGFwX2J1ZltpbmRleF0gJiBEQ0NQX0FDS1BLVFNfU1RBVEVfTUFTSzsKLX0KLQotc3RhdGljIGlubGluZSB1OCBkY2NwX2Fja3BrdHNfbGVuKGNvbnN0IHN0cnVjdCBkY2NwX2Fja3BrdHMgKmFwLAotCQkJCSAgY29uc3QgdW5zaWduZWQgaW50IGluZGV4KQotewotCXJldHVybiBhcC0+ZGNjcGFwX2J1ZltpbmRleF0gJiBEQ0NQX0FDS1BLVFNfTEVOX01BU0s7Ci19Ci0KLS8qCi0gKiBJZiBzZXZlcmFsIHBhY2tldHMgYXJlIG1pc3NpbmcsIHRoZSBIQy1SZWNlaXZlciBtYXkgcHJlZmVyIHRvIGVudGVyIG11bHRpcGxlCi0gKiBieXRlcyB3aXRoIHJ1biBsZW5ndGggMCwgcmF0aGVyIHRoYW4gYSBzaW5nbGUgYnl0ZSB3aXRoIGEgbGFyZ2VyIHJ1biBsZW5ndGg7Ci0gKiB0aGlzIHNpbXBsaWZpZXMgdGFibGUgdXBkYXRlcyBpZiBvbmUgb2YgdGhlIG1pc3NpbmcgcGFja2V0cyBhcnJpdmVzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBkY2NwX2Fja3BrdHNfc2V0X2J1Zl9oZWFkX3N0YXRlKHN0cnVjdCBkY2NwX2Fja3BrdHMgKmFwLAotCQkJCQkJICBjb25zdCB1bnNpZ25lZCBpbnQgcGFja2V0cywKLQkJCQkJCSAgY29uc3QgdW5zaWduZWQgY2hhciBzdGF0ZSkKLXsKLQl1bnNpZ25lZCBpbnQgZ2FwOwotCXNpZ25lZCBsb25nIG5ld19oZWFkOwotCi0JaWYgKGFwLT5kY2NwYXBfYnVmX3ZlY3Rvcl9sZW4gKyBwYWNrZXRzID4gYXAtPmRjY3BhcF9idWZfbGVuKQotCQlyZXR1cm4gLUVOT0JVRlM7Ci0KLQlnYXAJID0gcGFja2V0cyAtIDE7Ci0JbmV3X2hlYWQgPSBhcC0+ZGNjcGFwX2J1Zl9oZWFkIC0gcGFja2V0czsKLQotCWlmIChuZXdfaGVhZCA8IDApIHsKLQkJaWYgKGdhcCA+IDApIHsKLQkJCW1lbXNldChhcC0+ZGNjcGFwX2J1ZiwgRENDUF9BQ0tQS1RTX1NUQVRFX05PVF9SRUNFSVZFRCwKLQkJCSAgICAgICBnYXAgKyBuZXdfaGVhZCArIDEpOwotCQkJZ2FwID0gLW5ld19oZWFkOwotCQl9Ci0JCW5ld19oZWFkICs9IGFwLT5kY2NwYXBfYnVmX2xlbjsKLQl9IAotCi0JYXAtPmRjY3BhcF9idWZfaGVhZCA9IG5ld19oZWFkOwotCi0JaWYgKGdhcCA+IDApCi0JCW1lbXNldChhcC0+ZGNjcGFwX2J1ZiArIGFwLT5kY2NwYXBfYnVmX2hlYWQgKyAxLAotCQkgICAgICAgRENDUF9BQ0tQS1RTX1NUQVRFX05PVF9SRUNFSVZFRCwgZ2FwKTsKLQotCWFwLT5kY2NwYXBfYnVmW2FwLT5kY2NwYXBfYnVmX2hlYWRdID0gc3RhdGU7Ci0JYXAtPmRjY3BhcF9idWZfdmVjdG9yX2xlbiArPSBwYWNrZXRzOwotCXJldHVybiAwOwotfQotCi0vKgotICogSW1wbGVtZW50cyB0aGUgZHJhZnQtaWV0Zi1kY2NwLXNwZWMtMTEudHh0IEFwcGVuZGl4IEEKLSAqLwotaW50IGRjY3BfYWNrcGt0c19hZGQoc3RydWN0IGRjY3BfYWNrcGt0cyAqYXAsIGNvbnN0IHN0cnVjdCBzb2NrICpzaywKLQkJICAgICB1NjQgYWNrbm8sIHU4IHN0YXRlKQotewotCS8qCi0JICogQ2hlY2sgYXQgdGhlIHJpZ2h0IHBsYWNlcyBpZiB0aGUgYnVmZmVyIGlzIGZ1bGwsIGlmIGl0IGlzLCB0ZWxsIHRoZQotCSAqIGNhbGxlciB0byBzdGFydCBkcm9wcGluZyBwYWNrZXRzIHRpbGwgdGhlIEhDLVNlbmRlciBhY2tzIG91ciBBQ0sKLQkgKiB2ZWN0b3JzLCB3aGVuIHdlIHdpbGwgZnJlZSB1cCBzcGFjZSBpbiBkY2NwYXBfYnVmLgotCSAqCi0JICogV2UgbWF5IHdlbGwgZGVjaWRlIHRvIGRvIGJ1ZmZlciBjb21wcmVzc2lvbiwgZXRjLCBidXQgZm9yIG5vdyBsZXRzCi0JICoganVzdCBkcm9wLgotCSAqCi0JICogRnJvbSBBcHBlbmRpeCBBOgotCSAqCi0JICoJT2YgY291cnNlLCB0aGUgY2lyY3VsYXIgYnVmZmVyIG1heSBvdmVyZmxvdywgZWl0aGVyIHdoZW4gdGhlCi0JICoJSEMtU2VuZGVyIGlzIHNlbmRpbmcgZGF0YSBhdCBhIHZlcnkgaGlnaCByYXRlLCB3aGVuIHRoZQotCSAqCUhDLVJlY2VpdmVyJ3MgYWNrbm93bGVkZ2VtZW50cyBhcmUgbm90IHJlYWNoaW5nIHRoZSBIQy1TZW5kZXIsCi0JICoJb3Igd2hlbiB0aGUgSEMtU2VuZGVyIGlzIGZvcmdldHRpbmcgdG8gYWNrbm93bGVkZ2UgdGhvc2UgYWNrcwotCSAqCShzbyB0aGUgSEMtUmVjZWl2ZXIgaXMgdW5hYmxlIHRvIGNsZWFuIHVwIG9sZCBzdGF0ZSkuIEluIHRoaXMKLQkgKgljYXNlLCB0aGUgSEMtUmVjZWl2ZXIgc2hvdWxkIGVpdGhlciBjb21wcmVzcyB0aGUgYnVmZmVyIChieQotCSAqCWluY3JlYXNpbmcgcnVuIGxlbmd0aHMgd2hlbiBwb3NzaWJsZSksIHRyYW5zZmVyIGl0cyBzdGF0ZSB0bwotCSAqCWEgbGFyZ2VyIGJ1ZmZlciwgb3IsIGFzIGEgbGFzdCByZXNvcnQsIGRyb3AgYWxsIHJlY2VpdmVkCi0JICoJcGFja2V0cywgd2l0aG91dCBwcm9jZXNzaW5nIHRoZW0gd2hhdHNvZXZlciwgdW50aWwgaXRzIGJ1ZmZlcgotCSAqCXNocmlua3MgYWdhaW4uCi0JICovCi0KLQkvKiBTZWUgaWYgdGhpcyBpcyB0aGUgZmlyc3QgYWNrbm8gYmVpbmcgaW5zZXJ0ZWQgKi8KLQlpZiAoYXAtPmRjY3BhcF9idWZfdmVjdG9yX2xlbiA9PSAwKSB7Ci0JCWFwLT5kY2NwYXBfYnVmW2FwLT5kY2NwYXBfYnVmX2hlYWRdID0gc3RhdGU7Ci0JCWFwLT5kY2NwYXBfYnVmX3ZlY3Rvcl9sZW4gPSAxOwotCX0gZWxzZSBpZiAoYWZ0ZXI0OChhY2tubywgYXAtPmRjY3BhcF9idWZfYWNrbm8pKSB7Ci0JCWNvbnN0IHU2NCBkZWx0YSA9IGRjY3BfZGVsdGFfc2Vxbm8oYXAtPmRjY3BhcF9idWZfYWNrbm8sCi0JCQkJCQkgICBhY2tubyk7Ci0KLQkJLyoKLQkJICogTG9vayBpZiB0aGUgc3RhdGUgb2YgdGhpcyBwYWNrZXQgaXMgdGhlIHNhbWUgYXMgdGhlCi0JCSAqIHByZXZpb3VzIGFja25vIGFuZCBpZiBzbyBpZiB3ZSBjYW4gYnVtcCB0aGUgaGVhZCBsZW4uCi0JCSAqLwotCQlpZiAoZGVsdGEgPT0gMSAmJgotCQkgICAgZGNjcF9hY2twa3RzX3N0YXRlKGFwLCBhcC0+ZGNjcGFwX2J1Zl9oZWFkKSA9PSBzdGF0ZSAmJgotCQkgICAgKGRjY3BfYWNrcGt0c19sZW4oYXAsIGFwLT5kY2NwYXBfYnVmX2hlYWQpIDwKLQkJICAgICBEQ0NQX0FDS1BLVFNfTEVOX01BU0spKQotCQkJYXAtPmRjY3BhcF9idWZbYXAtPmRjY3BhcF9idWZfaGVhZF0rKzsKLQkJZWxzZSBpZiAoZGNjcF9hY2twa3RzX3NldF9idWZfaGVhZF9zdGF0ZShhcCwgZGVsdGEsIHN0YXRlKSkKLQkJCXJldHVybiAtRU5PQlVGUzsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBBLjEuMi4gIE9sZCBQYWNrZXRzCi0JCSAqCi0JCSAqCVdoZW4gYSBwYWNrZXQgd2l0aCBTZXF1ZW5jZSBOdW1iZXIgUyBhcnJpdmVzLCBhbmQKLQkJICoJUyA8PSBidWZfYWNrbm8sIHRoZSBIQy1SZWNlaXZlciB3aWxsIHNjYW4gdGhlIHRhYmxlCi0JCSAqCWZvciB0aGUgYnl0ZSBjb3JyZXNwb25kaW5nIHRvIFMuIChJbmRleGluZyBzdHJ1Y3R1cmVzCi0JCSAqCWNvdWxkIHJlZHVjZSB0aGUgY29tcGxleGl0eSBvZiB0aGlzIHNjYW4uKQotCQkgKi8KLQkJdTY0IGRlbHRhID0gZGNjcF9kZWx0YV9zZXFubyhhY2tubywgYXAtPmRjY3BhcF9idWZfYWNrbm8pOwotCQl1bnNpZ25lZCBpbnQgaW5kZXggPSBhcC0+ZGNjcGFwX2J1Zl9oZWFkOwotCi0JCXdoaWxlICgxKSB7Ci0JCQljb25zdCB1OCBsZW4gPSBkY2NwX2Fja3BrdHNfbGVuKGFwLCBpbmRleCk7Ci0JCQljb25zdCB1OCBzdGF0ZSA9IGRjY3BfYWNrcGt0c19zdGF0ZShhcCwgaW5kZXgpOwotCQkJLyoKLQkJCSAqIHZhbGlkIHBhY2tldHMgbm90IHlldCBpbiBkY2NwYXBfYnVmIGhhdmUgYSByZXNlcnZlZAotCQkJICogZW50cnksIHdpdGggYSBsZW4gZXF1YWwgdG8gMC4KLQkJCSAqLwotCQkJaWYgKHN0YXRlID09IERDQ1BfQUNLUEtUU19TVEFURV9OT1RfUkVDRUlWRUQgJiYKLQkJCSAgICBsZW4gPT0gMCAmJiBkZWx0YSA9PSAwKSB7IC8qIEZvdW5kIG91cgotCQkJCQkJCSByZXNlcnZlZCBzZWF0ISAqLwotCQkJCWRjY3BfcHJfZGVidWcoIkZvdW5kICVsbHUgcmVzZXJ2ZWQgc2VhdCFcbiIsCi0JCQkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGFja25vKTsKLQkJCQlhcC0+ZGNjcGFwX2J1ZltpbmRleF0gPSBzdGF0ZTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCS8qIGxlbiA9PSAwIG1lYW5zIG9uZSBwYWNrZXQgKi8KLQkJCWlmIChkZWx0YSA8IGxlbiArIDEpCi0JCQkJZ290byBvdXRfZHVwbGljYXRlOwotCi0JCQlkZWx0YSAtPSBsZW4gKyAxOwotCQkJaWYgKCsraW5kZXggPT0gYXAtPmRjY3BhcF9idWZfbGVuKQotCQkJCWluZGV4ID0gMDsKLQkJfQotCX0KLQotCWFwLT5kY2NwYXBfYnVmX2Fja25vID0gYWNrbm87Ci0JZGNjcF90aW1lc3RhbXAoc2ssICZhcC0+ZGNjcGFwX3RpbWUpOwotb3V0OgotCWRjY3BfcHJfZGVidWcoIiIpOwotCWRjY3BfYWNrcGt0c19wcmludChhcCk7Ci0JcmV0dXJuIDA7Ci0KLW91dF9kdXBsaWNhdGU6Ci0JLyogRHVwbGljYXRlIHBhY2tldCAqLwotCWRjY3BfcHJfZGVidWcoIlJlY2VpdmVkIGEgZHVwIG9yIGFscmVhZHkgY29uc2lkZXJlZCBsb3N0ICIKLQkJICAgICAgInBhY2tldDogJWxsdVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgYWNrbm8pOwotCXJldHVybiAtRUlMU0VROwotfQotCi0jaWZkZWYgQ09ORklHX0lQX0RDQ1BfREVCVUcKLXZvaWQgZGNjcF9hY2t2ZWN0b3JfcHJpbnQoY29uc3QgdTY0IGFja25vLCBjb25zdCB1bnNpZ25lZCBjaGFyICp2ZWN0b3IsCi0JCQkgIGludCBsZW4pCi17Ci0JaWYgKCFkY2NwX2RlYnVnKQotCQlyZXR1cm47Ci0KLQlwcmludGsoIkFDSyB2ZWN0b3IgbGVuPSVkLCBhY2tubz0lbGx1IHwiLCBsZW4sCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGFja25vKTsKLQotCXdoaWxlIChsZW4tLSkgewotCQljb25zdCB1OCBzdGF0ZSA9ICgqdmVjdG9yICYgRENDUF9BQ0tQS1RTX1NUQVRFX01BU0spID4+IDY7Ci0JCWNvbnN0IHU4IHJsID0gKCp2ZWN0b3IgJiBEQ0NQX0FDS1BLVFNfTEVOX01BU0spOwotCi0JCXByaW50aygiJWQsJWR8Iiwgc3RhdGUsIHJsKTsKLQkJKyt2ZWN0b3I7Ci0JfQotCi0JcHJpbnRrKCJcbiIpOwotfQotCi12b2lkIGRjY3BfYWNrcGt0c19wcmludChjb25zdCBzdHJ1Y3QgZGNjcF9hY2twa3RzICphcCkKLXsKLQlkY2NwX2Fja3ZlY3Rvcl9wcmludChhcC0+ZGNjcGFwX2J1Zl9hY2tubywKLQkJCSAgICAgYXAtPmRjY3BhcF9idWYgKyBhcC0+ZGNjcGFwX2J1Zl9oZWFkLAotCQkJICAgICBhcC0+ZGNjcGFwX2J1Zl92ZWN0b3JfbGVuKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBkY2NwX2Fja3BrdHNfdHJvd19hd2F5X2Fja19yZWNvcmQoc3RydWN0IGRjY3BfYWNrcGt0cyAqYXApCi17Ci0JLyoKLQkgKiBBcyB3ZSdyZSBrZWVwaW5nIHRyYWNrIG9mIHRoZSBhY2sgdmVjdG9yIHNpemUKLQkgKiAoZGNjcGFwX2J1Zl92ZWN0b3JfbGVuKSBhbmQgdGhlIHNlbnQgYWNrIHZlY3RvciBzaXplCi0JICogKGRjY3BhcF9hY2tfdmVjdG9yX2xlbikgd2UgZG9uJ3QgbmVlZCBkY2NwYXBfYnVmX3RhaWwgYXQgYWxsLCBidXQKLQkgKiBrZWVwIHRoaXMgY29kZSBoZXJlIGFzIGluIHRoZSBmdXR1cmUgd2UnbGwgaW1wbGVtZW50IGEgdmVjdG9yIG9mCi0JICogYWNrIHJlY29yZHMsIGFzIHN1Z2dlc3RlZCBpbiBkcmFmdC1pZXRmLWRjY3Atc3BlYy0xMS50eHQKLQkgKiBBcHBlbmRpeCBBLiAtYWNtZQotCSAqLwotI2lmIDAKLQlhcC0+ZGNjcGFwX2J1Zl90YWlsID0gYXAtPmRjY3BhcF9hY2tfcHRyICsgMTsKLQlpZiAoYXAtPmRjY3BhcF9idWZfdGFpbCA+PSBhcC0+ZGNjcGFwX2J1Zl9sZW4pCi0JCWFwLT5kY2NwYXBfYnVmX3RhaWwgLT0gYXAtPmRjY3BhcF9idWZfbGVuOwotI2VuZGlmCi0JYXAtPmRjY3BhcF9idWZfdmVjdG9yX2xlbiAtPSBhcC0+ZGNjcGFwX2Fja192ZWN0b3JfbGVuOwotfQotCi12b2lkIGRjY3BfYWNrcGt0c19jaGVja19yY3ZfYWNrbm8oc3RydWN0IGRjY3BfYWNrcGt0cyAqYXAsIHN0cnVjdCBzb2NrICpzaywKLQkJCQkgdTY0IGFja25vKQotewotCS8qIENoZWNrIGlmIHdlIGFjdHVhbGx5IHNlbnQgYW4gQUNLIHZlY3RvciAqLwotCWlmIChhcC0+ZGNjcGFwX2Fja19zZXFubyA9PSBEQ0NQX01BWF9TRVFOTyArIDEpCi0JCXJldHVybjsKLQotCWlmIChhY2tubyA9PSBhcC0+ZGNjcGFwX2Fja19zZXFubykgewotI2lmZGVmIENPTkZJR19JUF9EQ0NQX0RFQlVHCi0JCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7Ci0JCWNvbnN0IGNoYXIgKmRlYnVnX3ByZWZpeCA9IGRwLT5kY2Nwc19yb2xlID09IERDQ1BfUk9MRV9DTElFTlQgPwotCQkJCQkiQ0xJRU5UIHJ4IGFjazogIiA6ICJzZXJ2ZXIgcnggYWNrOiAiOwotI2VuZGlmCi0JCWRjY3BfcHJfZGVidWcoIiVzQUNLIHBhY2tldCAwLCBsZW49JWQsIGFja19zZXFubz0lbGx1LCAiCi0JCQkgICAgICAiYWNrX2Fja25vPSVsbHUsIEFDS0VEIVxuIiwKLQkJCSAgICAgIGRlYnVnX3ByZWZpeCwgMSwKLQkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGFwLT5kY2NwYXBfYWNrX3NlcW5vLAotCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgYXAtPmRjY3BhcF9hY2tfYWNrbm8pOwotCQlkY2NwX2Fja3BrdHNfdHJvd19hd2F5X2Fja19yZWNvcmQoYXApOwotCQlhcC0+ZGNjcGFwX2Fja19zZXFubyA9IERDQ1BfTUFYX1NFUU5PICsgMTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGRjY3BfYWNrcGt0c19jaGVja19yY3ZfYWNrdmVjdG9yKHN0cnVjdCBkY2NwX2Fja3BrdHMgKmFwLAotCQkJCQkgICAgIHN0cnVjdCBzb2NrICpzaywgdTY0IGFja25vLAotCQkJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgbGVuLAotCQkJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZlY3RvcikKLXsKLQl1bnNpZ25lZCBjaGFyIGk7Ci0KLQkvKiBDaGVjayBpZiB3ZSBhY3R1YWxseSBzZW50IGFuIEFDSyB2ZWN0b3IgKi8KLQlpZiAoYXAtPmRjY3BhcF9hY2tfc2Vxbm8gPT0gRENDUF9NQVhfU0VRTk8gKyAxKQotCQlyZXR1cm47Ci0JLyoKLQkgKiBXZSdyZSBpbiB0aGUgcmVjZWl2ZXIgaGFsZiBjb25uZWN0aW9uLCBzbyBpZiB0aGUgcmVjZWl2ZWQgYW4gQUNLCi0JICogdmVjdG9yIGFja25vIChlLmcuIDUwKSBiZWZvcmUgZGNjcGFwX2Fja19zZXFubyAoZS5nLiA1MiksIHdlJ3JlCi0JICogbm90IGludGVyZXN0ZWQuCi0JICoKLQkgKiBFeHRyYSBleHBsYW5hdGlvbiB3aXRoIGV4YW1wbGU6Ci0JICogCi0JICogaWYgd2UgcmVjZWl2ZWQgYW4gQUNLIHZlY3RvciB3aXRoIGFja25vIDUwLCBpdCBjYW4gb25seSBiZSBhY2tpbmcKLQkgKiA1MCwgNDksIDQ4LCBldGMsIG5vdCA1MiAodGhlIHNlcW5vIGZvciB0aGUgQUNLIHZlY3RvciB3ZSBzZW50KS4KLQkgKi8KLQkvKiBkY2NwX3ByX2RlYnVnKCJpcyAlbGx1IDwgJWxsdT8gIiwgYWNrbm8sIGFwLT5kY2NwYXBfYWNrX3NlcW5vKTsgKi8KLQlpZiAoYmVmb3JlNDgoYWNrbm8sIGFwLT5kY2NwYXBfYWNrX3NlcW5vKSkgewotCQkvKiBkY2NwX3ByX2RlYnVnX2NhdCgieWVzXG4iKTsgKi8KLQkJcmV0dXJuOwotCX0KLQkvKiBkY2NwX3ByX2RlYnVnX2NhdCgibm9cbiIpOyAqLwotCi0JaSA9IGxlbjsKLQl3aGlsZSAoaS0tKSB7Ci0JCWNvbnN0IHU4IHJsID0gKCp2ZWN0b3IgJiBEQ0NQX0FDS1BLVFNfTEVOX01BU0spOwotCQl1NjQgYWNrbm9fZW5kX3JsOwotCi0JCWRjY3Bfc2V0X3NlcW5vKCZhY2tub19lbmRfcmwsIGFja25vIC0gcmwpOwotCi0JCS8qCi0JCSAqIGRjY3BfcHJfZGVidWcoImlzICVsbHUgPD0gJWxsdSA8PSAlbGx1PyAiLCBhY2tub19lbmRfcmwsCi0JCSAqIGFwLT5kY2NwYXBfYWNrX3NlcW5vLCBhY2tubyk7Ci0JCSAqLwotCQlpZiAoYmV0d2VlbjQ4KGFwLT5kY2NwYXBfYWNrX3NlcW5vLCBhY2tub19lbmRfcmwsIGFja25vKSkgewotCQkJY29uc3QgdTggc3RhdGUgPSAoKnZlY3RvciAmCi0JCQkJCSAgRENDUF9BQ0tQS1RTX1NUQVRFX01BU0spID4+IDY7Ci0JCQkvKiBkY2NwX3ByX2RlYnVnX2NhdCgieWVzXG4iKTsgKi8KLQotCQkJaWYgKHN0YXRlICE9IERDQ1BfQUNLUEtUU19TVEFURV9OT1RfUkVDRUlWRUQpIHsKLSNpZmRlZiBDT05GSUdfSVBfRENDUF9ERUJVRwotCQkJCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7Ci0JCQkJY29uc3QgY2hhciAqZGVidWdfcHJlZml4ID0KLQkJCQkJZHAtPmRjY3BzX3JvbGUgPT0gRENDUF9ST0xFX0NMSUVOVCA/Ci0JCQkJCSJDTElFTlQgcnggYWNrOiAiIDogInNlcnZlciByeCBhY2s6ICI7Ci0jZW5kaWYKLQkJCQlkY2NwX3ByX2RlYnVnKCIlc0FDSyB2ZWN0b3IgMCwgbGVuPSVkLCAiCi0JCQkJCSAgICAgICJhY2tfc2Vxbm89JWxsdSwgYWNrX2Fja25vPSVsbHUsICIKLQkJCQkJICAgICAgIkFDS0VEIVxuIiwKLQkJCQkJICAgICAgZGVidWdfcHJlZml4LCBsZW4sCi0JCQkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpCi0JCQkJCSAgICAgIGFwLT5kY2NwYXBfYWNrX3NlcW5vLAotCQkJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKQotCQkJCQkgICAgICBhcC0+ZGNjcGFwX2Fja19hY2tubyk7Ci0JCQkJZGNjcF9hY2twa3RzX3Ryb3dfYXdheV9hY2tfcmVjb3JkKGFwKTsKLQkJCX0KLQkJCS8qCi0JCQkgKiBJZiBkY2NwYXBfYWNrX3NlcW5vIHdhcyBub3QgcmVjZWl2ZWQsIG5vIHByb2JsZW0KLQkJCSAqIHdlJ2xsIHNlbmQgYW5vdGhlciBBQ0sgdmVjdG9yLgotCQkJICovCi0JCQlhcC0+ZGNjcGFwX2Fja19zZXFubyA9IERDQ1BfTUFYX1NFUU5PICsgMTsKLQkJCWJyZWFrOwotCQl9Ci0JCS8qIGRjY3BfcHJfZGVidWdfY2F0KCJub1xuIik7ICovCi0KLQkJZGNjcF9zZXRfc2Vxbm8oJmFja25vLCBhY2tub19lbmRfcmwgLSAxKTsKLQkJKyt2ZWN0b3I7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvbmV0L2RjY3Avb3V0cHV0LmMgYi9uZXQvZGNjcC9vdXRwdXQuYwppbmRleCBlYTZkMGU5Li4yOTI1MDc0IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9vdXRwdXQuYworKysgYi9uZXQvZGNjcC9vdXRwdXQuYwpAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIAorI2luY2x1ZGUgImFja3ZlYy5oIgogI2luY2x1ZGUgImNjaWQuaCIKICNpbmNsdWRlICJkY2NwLmgiCiAKQEAgLTYxLDEwICs2Miw4IEBACiAJCQogCQlza2ItPmgucmF3ID0gc2tiX3B1c2goc2tiLCBkY2NwX2hlYWRlcl9zaXplKTsKIAkJZGggPSBkY2NwX2hkcihza2IpOwotCQkvKgotCQkgKiBEYXRhIHBhY2tldHMgYXJlIG5vdCBjbG9uZWQgYXMgdGhleSBhcmUgbmV2ZXIgcmV0cmFuc21pdHRlZAotCQkgKi8KLQkJaWYgKHNrYl9jbG9uZWQoc2tiKSkKKworCQlpZiAoIXNrYi0+c2spCiAJCQlza2Jfc2V0X293bmVyX3coc2tiLCBzayk7CiAKIAkJLyogQnVpbGQgRENDUCBoZWFkZXIgYW5kIGNoZWNrc3VtIGl0LiAqLwpAQCAtODUsNyArODQsNyBAQAogCQlzd2l0Y2ggKGRjYi0+ZGNjcGRfdHlwZSkgewogCQljYXNlIERDQ1BfUEtUX1JFUVVFU1Q6CiAJCQlkY2NwX2hkcl9yZXF1ZXN0KHNrYiktPmRjY3BoX3JlcV9zZXJ2aWNlID0KLQkJCQkJCQlkY2ItPmRjY3BkX3NlcnZpY2U7CisJCQkJCQkJZHAtPmRjY3BzX3NlcnZpY2U7CiAJCQlicmVhazsKIAkJY2FzZSBEQ0NQX1BLVF9SRVNFVDoKIAkJCWRjY3BfaGRyX3Jlc2V0KHNrYiktPmRjY3BoX3Jlc2V0X2NvZGUgPQpAQCAtMTAxLDYgKzEwMCw3IEBACiAKIAkJRENDUF9JTkNfU1RBVFMoRENDUF9NSUJfT1VUU0VHUyk7CiAKKwkJbWVtc2V0KCYoSVBDQihza2IpLT5vcHQpLCAwLCBzaXplb2YoSVBDQihza2IpLT5vcHQpKTsKIAkJZXJyID0gaXBfcXVldWVfeG1pdChza2IsIDApOwogCQlpZiAoZXJyIDw9IDApCiAJCQlyZXR1cm4gZXJyOwpAQCAtMjI1LDcgKzIyNSw2IEBACiAJCWVyciA9IGRjY3Bfd2FpdF9mb3JfY2NpZChzaywgc2tiLCB0aW1lbyk7CiAKIAlpZiAoZXJyID09IDApIHsKLQkJY29uc3Qgc3RydWN0IGRjY3BfYWNrcGt0cyAqYXAgPSBkcC0+ZGNjcHNfaGNfcnhfYWNrcGt0czsKIAkJc3RydWN0IGRjY3Bfc2tiX2NiICpkY2IgPSBEQ0NQX1NLQl9DQihza2IpOwogCQljb25zdCBpbnQgbGVuID0gc2tiLT5sZW47CiAKQEAgLTIzNiwyMiArMjM1LDE1IEBACiAJCQkJCQkgIGluZXRfY3NrKHNrKS0+aWNza19ydG8sCiAJCQkJCQkgIERDQ1BfUlRPX01BWCk7CiAJCQlkY2ItPmRjY3BkX3R5cGUgPSBEQ0NQX1BLVF9EQVRBQUNLOwotCQkJLyoKLQkJCSAqIEZJWE1FOiB3ZSByZWFsbHkgc2hvdWxkIGhhdmUgYQotCQkJICogZGNjcHNfYWNrX3BlbmRpbmcgb3IgdXNlIGljc2suCi0JCQkgKi8KLQkJfSBlbHNlIGlmIChpbmV0X2Nza19hY2tfc2NoZWR1bGVkKHNrKSB8fAotCQkJICAgZHAtPmRjY3BzX3RpbWVzdGFtcF9lY2hvICE9IDAgfHwKLQkJCSAgIChkcC0+ZGNjcHNfb3B0aW9ucy5kY2Nwb19zZW5kX2Fja192ZWN0b3IgJiYKLQkJCSAgICBhcC0+ZGNjcGFwX2J1Zl9hY2tubyAhPSBEQ0NQX01BWF9TRVFOTyArIDEgJiYKLQkJCSAgICBhcC0+ZGNjcGFwX2Fja19zZXFubyA9PSBEQ0NQX01BWF9TRVFOTyArIDEpKQorCQl9IGVsc2UgaWYgKGRjY3BfYWNrX3BlbmRpbmcoc2spKQogCQkJZGNiLT5kY2NwZF90eXBlID0gRENDUF9QS1RfREFUQUFDSzsKIAkJZWxzZQogCQkJZGNiLT5kY2NwZF90eXBlID0gRENDUF9QS1RfREFUQTsKIAogCQllcnIgPSBkY2NwX3RyYW5zbWl0X3NrYihzaywgc2tiKTsKIAkJY2NpZF9oY190eF9wYWNrZXRfc2VudChkcC0+ZGNjcHNfaGNfdHhfY2NpZCwgc2ssIDAsIGxlbik7Ci0JfQorCX0gZWxzZQorCQlrZnJlZV9za2Ioc2tiKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0yNzAsNiArMjYyLDcgQEAKIAkJCQkgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiB7CiAJc3RydWN0IGRjY3BfaGRyICpkaDsKKwlzdHJ1Y3QgZGNjcF9yZXF1ZXN0X3NvY2sgKmRyZXE7CiAJY29uc3QgaW50IGRjY3BfaGVhZGVyX3NpemUgPSBzaXplb2Yoc3RydWN0IGRjY3BfaGRyKSArCiAJCQkJICAgICBzaXplb2Yoc3RydWN0IGRjY3BfaGRyX2V4dCkgKwogCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBkY2NwX2hkcl9yZXNwb25zZSk7CkBAIC0yODUsOCArMjc4LDkgQEAKIAlza2ItPmRzdCA9IGRzdF9jbG9uZShkc3QpOwogCXNrYi0+Y3N1bSA9IDA7CiAKKwlkcmVxID0gZGNjcF9yc2socmVxKTsKIAlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF90eXBlID0gRENDUF9QS1RfUkVTUE9OU0U7Ci0JRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfc2VxICA9IGRjY3BfcnNrKHJlcSktPmRyZXFfaXNzOworCURDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3NlcSAgPSBkcmVxLT5kcmVxX2lzczsKIAlkY2NwX2luc2VydF9vcHRpb25zKHNrLCBza2IpOwogCiAJc2tiLT5oLnJhdyA9IHNrYl9wdXNoKHNrYiwgZGNjcF9oZWFkZXJfc2l6ZSk7CkBAIC0zMDAsOCArMjk0LDkgQEAKIAkJCSAgIERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX29wdF9sZW4pIC8gNDsKIAlkaC0+ZGNjcGhfdHlwZQk9IERDQ1BfUEtUX1JFU1BPTlNFOwogCWRoLT5kY2NwaF94CT0gMTsKLQlkY2NwX2hkcl9zZXRfc2VxKGRoLCBkY2NwX3JzayhyZXEpLT5kcmVxX2lzcyk7Ci0JZGNjcF9oZHJfc2V0X2FjayhkY2NwX2hkcl9hY2tfYml0cyhza2IpLCBkY2NwX3JzayhyZXEpLT5kcmVxX2lzcik7CisJZGNjcF9oZHJfc2V0X3NlcShkaCwgZHJlcS0+ZHJlcV9pc3MpOworCWRjY3BfaGRyX3NldF9hY2soZGNjcF9oZHJfYWNrX2JpdHMoc2tiKSwgZHJlcS0+ZHJlcV9pc3IpOworCWRjY3BfaGRyX3Jlc3BvbnNlKHNrYiktPmRjY3BoX3Jlc3Bfc2VydmljZSA9IGRyZXEtPmRyZXFfc2VydmljZTsKIAogCWRoLT5kY2NwaF9jaGVja3N1bSA9IGRjY3BfdjRfY2hlY2tzdW0oc2tiLCBpbmV0X3JzayhyZXEpLT5sb2NfYWRkciwKIAkJCQkJICAgICAgaW5ldF9yc2socmVxKS0+cm10X2FkZHIpOwpAQCAtMzk3LDkgKzM5Miw2IEBACiAJc2tiX3Jlc2VydmUoc2tiLCBNQVhfRENDUF9IRUFERVIpOwogCiAJRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfdHlwZSA9IERDQ1BfUEtUX1JFUVVFU1Q7Ci0JLyogRklYTUU6IHNldCBzZXJ2aWNlIHRvIHNvbWV0aGluZyBtZWFuaW5nZnVsLCBjb21pbmcKLQkgKiBmcm9tIHVzZXJzcGFjZSovCi0JRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfc2VydmljZSA9IDA7CiAJc2tiLT5jc3VtID0gMDsKIAlza2Jfc2V0X293bmVyX3coc2tiLCBzayk7CiAKZGlmZiAtLWdpdCBhL25ldC9kY2NwL3Byb3RvLmMgYi9uZXQvZGNjcC9wcm90by5jCmluZGV4IDE4YTBlNjkuLmEwMjFjMzQgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL3Byb3RvLmMKKysrIGIvbmV0L2RjY3AvcHJvdG8uYwpAQCAtOTQsNyArOTQsMTUgQEAKIAogc3RhdGljIGlubGluZSBpbnQgZGNjcF9saXN0ZW5fc3RhcnQoc3RydWN0IHNvY2sgKnNrKQogewotCWRjY3Bfc2soc2spLT5kY2Nwc19yb2xlID0gRENDUF9ST0xFX0xJU1RFTjsKKwlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOworCisJZHAtPmRjY3BzX3JvbGUgPSBEQ0NQX1JPTEVfTElTVEVOOworCS8qCisJICogQXBwcyBuZWVkIHRvIHVzZSBzZXRzb2Nrb3B0KERDQ1BfU09DS09QVF9TRVJWSUNFKQorCSAqIGJlZm9yZSBjYWxsaW5nIGxpc3RlbigpCisJICovCisJaWYgKGRjY3Bfc2VydmljZV9ub3RfaW5pdGlhbGl6ZWQoc2spKQorCQlyZXR1cm4gLUVQUk9UTzsKIAlyZXR1cm4gaW5ldF9jc2tfbGlzdGVuX3N0YXJ0KHNrLCBUQ1BfU1lOUV9IU0laRSk7CiB9CiAKQEAgLTIwMiw2ICsyMTAsNDIgQEAKIAlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogfQogCitzdGF0aWMgaW50IGRjY3Bfc2V0c29ja29wdF9zZXJ2aWNlKHN0cnVjdCBzb2NrICpzaywgY29uc3QgdTMyIHNlcnZpY2UsCisJCQkJICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKK3sKKwlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOworCXN0cnVjdCBkY2NwX3NlcnZpY2VfbGlzdCAqc2wgPSBOVUxMOworCisJaWYgKHNlcnZpY2UgPT0gRENDUF9TRVJWSUNFX0lOVkFMSURfVkFMVUUgfHwgCisJICAgIG9wdGxlbiA+IERDQ1BfU0VSVklDRV9MSVNUX01BWF9MRU4gKiBzaXplb2YodTMyKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAob3B0bGVuID4gc2l6ZW9mKHNlcnZpY2UpKSB7CisJCXNsID0ga21hbGxvYyhvcHRsZW4sIEdGUF9LRVJORUwpOworCQlpZiAoc2wgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXNsLT5kY2Nwc2xfbnIgPSBvcHRsZW4gLyBzaXplb2YodTMyKSAtIDE7CisJCWlmIChjb3B5X2Zyb21fdXNlcihzbC0+ZGNjcHNsX2xpc3QsCisJCQkJICAgb3B0dmFsICsgc2l6ZW9mKHNlcnZpY2UpLAorCQkJCSAgIG9wdGxlbiAtIHNpemVvZihzZXJ2aWNlKSkgfHwKKwkJICAgIGRjY3BfbGlzdF9oYXNfc2VydmljZShzbCwgRENDUF9TRVJWSUNFX0lOVkFMSURfVkFMVUUpKSB7CisJCQlrZnJlZShzbCk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCX0KKworCWxvY2tfc29jayhzayk7CisJZHAtPmRjY3BzX3NlcnZpY2UgPSBzZXJ2aWNlOworCisJaWYgKGRwLT5kY2Nwc19zZXJ2aWNlX2xpc3QgIT0gTlVMTCkKKwkJa2ZyZWUoZHAtPmRjY3BzX3NlcnZpY2VfbGlzdCk7CisKKwlkcC0+ZGNjcHNfc2VydmljZV9saXN0ID0gc2w7CisJcmVsZWFzZV9zb2NrKHNrKTsKKwlyZXR1cm4gMDsKK30KKwogaW50IGRjY3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCSAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQogewpAQCAtMjE4LDggKzI2MiwxMCBAQAogCWlmIChnZXRfdXNlcih2YWwsIChpbnQgX191c2VyICopb3B0dmFsKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlsb2NrX3NvY2soc2spOworCWlmIChvcHRuYW1lID09IERDQ1BfU09DS09QVF9TRVJWSUNFKQorCQlyZXR1cm4gZGNjcF9zZXRzb2Nrb3B0X3NlcnZpY2Uoc2ssIHZhbCwgb3B0dmFsLCBvcHRsZW4pOwogCisJbG9ja19zb2NrKHNrKTsKIAlkcCA9IGRjY3Bfc2soc2spOwogCWVyciA9IDA7CiAKQEAgLTIzNiw2ICsyODIsMzcgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IGRjY3BfZ2V0c29ja29wdF9zZXJ2aWNlKHN0cnVjdCBzb2NrICpzaywgaW50IGxlbiwKKwkJCQkgICB1MzIgX191c2VyICpvcHR2YWwsCisJCQkJICAgaW50IF9fdXNlciAqb3B0bGVuKQoreworCWNvbnN0IHN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CisJY29uc3Qgc3RydWN0IGRjY3Bfc2VydmljZV9saXN0ICpzbDsKKwlpbnQgZXJyID0gLUVOT0VOVCwgc2xlbiA9IDAsIHRvdGFsX2xlbiA9IHNpemVvZih1MzIpOworCisJbG9ja19zb2NrKHNrKTsKKwlpZiAoZGNjcF9zZXJ2aWNlX25vdF9pbml0aWFsaXplZChzaykpCisJCWdvdG8gb3V0OworCisJaWYgKChzbCA9IGRwLT5kY2Nwc19zZXJ2aWNlX2xpc3QpICE9IE5VTEwpIHsKKwkJc2xlbiA9IHNsLT5kY2Nwc2xfbnIgKiBzaXplb2YodTMyKTsKKwkJdG90YWxfbGVuICs9IHNsZW47CisJfQorCisJZXJyID0gLUVJTlZBTDsKKwlpZiAodG90YWxfbGVuID4gbGVuKQorCQlnb3RvIG91dDsKKworCWVyciA9IDA7CisJaWYgKHB1dF91c2VyKHRvdGFsX2xlbiwgb3B0bGVuKSB8fAorCSAgICBwdXRfdXNlcihkcC0+ZGNjcHNfc2VydmljZSwgb3B0dmFsKSB8fAorCSAgICAoc2wgIT0gTlVMTCAmJiBjb3B5X3RvX3VzZXIob3B0dmFsICsgMSwgc2wtPmRjY3BzbF9saXN0LCBzbGVuKSkpCisJCWVyciA9IC1FRkFVTFQ7CitvdXQ6CisJcmVsZWFzZV9zb2NrKHNrKTsKKwlyZXR1cm4gZXJyOworfQorCiBpbnQgZGNjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKIHsKQEAgLTI0OCw4ICszMjUsNyBAQAogCWlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHNpemVvZihpbnQpKTsKLQlpZiAobGVuIDwgMCkKKwlpZiAobGVuIDwgc2l6ZW9mKGludCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZHAgPSBkY2NwX3NrKHNrKTsKQEAgLTI1Nyw3ICszMzMsMTcgQEAKIAlzd2l0Y2ggKG9wdG5hbWUpIHsKIAljYXNlIERDQ1BfU09DS09QVF9QQUNLRVRfU0laRToKIAkJdmFsID0gZHAtPmRjY3BzX3BhY2tldF9zaXplOworCQlsZW4gPSBzaXplb2YoZHAtPmRjY3BzX3BhY2tldF9zaXplKTsKIAkJYnJlYWs7CisJY2FzZSBEQ0NQX1NPQ0tPUFRfU0VSVklDRToKKwkJcmV0dXJuIGRjY3BfZ2V0c29ja29wdF9zZXJ2aWNlKHNrLCBsZW4sCisJCQkJCSAgICAgICAodTMyIF9fdXNlciAqKW9wdHZhbCwgb3B0bGVuKTsKKwljYXNlIDEyOCAuLi4gMTkxOgorCQlyZXR1cm4gY2NpZF9oY19yeF9nZXRzb2Nrb3B0KGRwLT5kY2Nwc19oY19yeF9jY2lkLCBzaywgb3B0bmFtZSwKKwkJCQkJICAgICBsZW4sICh1MzIgX191c2VyICopb3B0dmFsLCBvcHRsZW4pOworCWNhc2UgMTkyIC4uLiAyNTU6CisJCXJldHVybiBjY2lkX2hjX3R4X2dldHNvY2tvcHQoZHAtPmRjY3BzX2hjX3R4X2NjaWQsIHNrLCBvcHRuYW1lLAorCQkJCQkgICAgIGxlbiwgKHUzMiBfX3VzZXIgKilvcHR2YWwsIG9wdGxlbik7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9QUk9UT09QVDsKIAl9CkBAIC0zMTYsOCArNDAyLDYgQEAKIAkgKiAgICAgVGhpcyBidWcgd2FzIF9xdWlja2x5XyBmb3VuZCAmIGZpeGVkIGJ5IGp1c3QgbG9va2luZyBhdCBhbiBPU1RSQQogCSAqICAgICBnZW5lcmF0ZWQgY2FsbGdyYXBoIDgpIC1hY21lCiAJICovCi0JaWYgKHJjICE9IDApCi0JCWdvdG8gb3V0X2Rpc2NhcmQ7CiBvdXRfcmVsZWFzZToKIAlyZWxlYXNlX3NvY2soc2spOwogCXJldHVybiByYyA/IDogbGVuOwpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9hZl9kZWNuZXQuYyBiL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMKaW5kZXggMzQ4ZjM2Yi4uMTE4NmRjNCAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9hZl9kZWNuZXQuYworKysgYi9uZXQvZGVjbmV0L2FmX2RlY25ldC5jCkBAIC00NTIsNyArNDUyLDcgQEAKIAkub2JqX3NpemUgPSBzaXplb2Yoc3RydWN0IGRuX3NvY2spLAogfTsKIAotc3RhdGljIHN0cnVjdCBzb2NrICpkbl9hbGxvY19zb2NrKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBnZnApCitzdGF0aWMgc3RydWN0IHNvY2sgKmRuX2FsbG9jX3NvY2soc3RydWN0IHNvY2tldCAqc29jaywgZ2ZwX3QgZ2ZwKQogewogCXN0cnVjdCBkbl9zY3AgKnNjcDsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBza19hbGxvYyhQRl9ERUNuZXQsIGdmcCwgJmRuX3Byb3RvLCAxKTsKQEAgLTgwNCw3ICs4MDQsNyBAQAogCXJldHVybiBydjsKIH0KIAotc3RhdGljIGludCBkbl9jb25maXJtX2FjY2VwdChzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgKnRpbWVvLCBpbnQgYWxsb2NhdGlvbikKK3N0YXRpYyBpbnQgZG5fY29uZmlybV9hY2NlcHQoc3RydWN0IHNvY2sgKnNrLCBsb25nICp0aW1lbywgZ2ZwX3QgYWxsb2NhdGlvbikKIHsKIAlzdHJ1Y3QgZG5fc2NwICpzY3AgPSBETl9TSyhzayk7CiAJREVGSU5FX1dBSVQod2FpdCk7CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX25zcF9vdXQuYyBiL25ldC9kZWNuZXQvZG5fbnNwX291dC5jCmluZGV4IDUzNjMzZDMuLmM5NmM3NjcgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fbnNwX291dC5jCisrKyBiL25ldC9kZWNuZXQvZG5fbnNwX291dC5jCkBAIC0xMTcsNyArMTE3LDcgQEAKICAqIFRoZSBldmVudHVhbCBhaW0gaXMgZm9yIGVhY2ggc29ja2V0IHRvIGhhdmUgYSBjYWNoZWQgaGVhZGVyIHNpemUKICAqIGZvciBpdHMgb3V0Z29pbmcgcGFja2V0cywgYW5kIHRvIHNldCBoZHIgZnJvbSB0aGlzIHdoZW4gc2sgIT0gTlVMTC4KICAqLwotc3RydWN0IHNrX2J1ZmYgKmRuX2FsbG9jX3NrYihzdHJ1Y3Qgc29jayAqc2ssIGludCBzaXplLCBpbnQgcHJpKQorc3RydWN0IHNrX2J1ZmYgKmRuX2FsbG9jX3NrYihzdHJ1Y3Qgc29jayAqc2ssIGludCBzaXplLCBnZnBfdCBwcmkpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgaGRyID0gNjQ7CkBAIC0yMTAsNyArMjEwLDggQEAKICAqCiAgKiBSZXR1cm5zOiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBwYWNrZXQgaGFzIGJlZW4gc2VudCBwcmV2aW91c2x5CiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZG5fbnNwX2Nsb25lX2FuZF9zZW5kKHN0cnVjdCBza19idWZmICpza2IsIGludCBnZnApCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRuX25zcF9jbG9uZV9hbmRfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3QgZG5fc2tiX2NiICpjYiA9IEROX1NLQl9DQihza2IpOwogCXN0cnVjdCBza19idWZmICpza2IyOwpAQCAtMzUwLDcgKzM1MSw4IEBACiAJcmV0dXJuIHB0cjsKIH0KIAotdm9pZCBkbl9uc3BfcXVldWVfeG1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGludCBnZnAsIGludCBvdGgpCit2b2lkIGRuX25zcF9xdWV1ZV94bWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCWdmcF90IGdmcCwgaW50IG90aCkKIHsKIAlzdHJ1Y3QgZG5fc2NwICpzY3AgPSBETl9TSyhzayk7CiAJc3RydWN0IGRuX3NrYl9jYiAqY2IgPSBETl9TS0JfQ0Ioc2tiKTsKQEAgLTUxNyw3ICs1MTksNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGRuX3NlbmRfY29ubl9jb25mKHN0cnVjdCBzb2NrICpzaywgaW50IGdmcCkKK3ZvaWQgZG5fc2VuZF9jb25uX2NvbmYoc3RydWN0IHNvY2sgKnNrLCBnZnBfdCBnZnApCiB7CiAJc3RydWN0IGRuX3NjcCAqc2NwID0gRE5fU0soc2spOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwpAQCAtNTQ5LDcgKzU1MSw4IEBACiAKIAogc3RhdGljIF9faW5saW5lX18gdm9pZCBkbl9uc3BfZG9fZGlzYyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGNoYXIgbXNnZmxnLCAKLQkJCXVuc2lnbmVkIHNob3J0IHJlYXNvbiwgaW50IGdmcCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAorCQkJdW5zaWduZWQgc2hvcnQgcmVhc29uLCBnZnBfdCBnZnAsCisJCQlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCiAJCQlpbnQgZGRsLCB1bnNpZ25lZCBjaGFyICpkZCwgX191MTYgcmVtLCBfX3UxNiBsb2MpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CkBAIC01OTEsNyArNTk0LDcgQEAKIAogCiB2b2lkIGRuX25zcF9zZW5kX2Rpc2Moc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBjaGFyIG1zZ2ZsZywgCi0JCQl1bnNpZ25lZCBzaG9ydCByZWFzb24sIGludCBnZnApCisJCQl1bnNpZ25lZCBzaG9ydCByZWFzb24sIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3QgZG5fc2NwICpzY3AgPSBETl9TSyhzayk7CiAJaW50IGRkbCA9IDA7CkBAIC02MTIsNyArNjE1LDcgQEAKIHsKIAlzdHJ1Y3QgZG5fc2tiX2NiICpjYiA9IEROX1NLQl9DQihza2IpOwogCWludCBkZGwgPSAwOwotCWludCBnZnAgPSBHRlBfQVRPTUlDOworCWdmcF90IGdmcCA9IEdGUF9BVE9NSUM7CiAKIAlkbl9uc3BfZG9fZGlzYyhOVUxMLCBtc2dmbGcsIHJlYXNvbiwgZ2ZwLCBza2ItPmRzdCwgZGRsLCAKIAkJCU5VTEwsIGNiLT5zcmNfcG9ydCwgY2ItPmRzdF9wb3J0KTsKQEAgLTYyNCw3ICs2MjcsNyBAQAogCXN0cnVjdCBkbl9zY3AgKnNjcCA9IEROX1NLKHNrKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXVuc2lnbmVkIGNoYXIgKnB0cjsKLQlpbnQgZ2ZwID0gR0ZQX0FUT01JQzsKKwlnZnBfdCBnZnAgPSBHRlBfQVRPTUlDOwogCiAJaWYgKChza2IgPSBkbl9hbGxvY19za2Ioc2ssIEROX01BWF9OU1BfREFUQV9IRUFERVIgKyAyLCBnZnApKSA9PSBOVUxMKQogCQlyZXR1cm47CkBAIC02NTksNyArNjYyLDcgQEAKIAl1bnNpZ25lZCBjaGFyIG1lbnV2ZXI7CiAJc3RydWN0IGRuX3NrYl9jYiAqY2I7CiAJdW5zaWduZWQgY2hhciB0eXBlID0gMTsKLQlpbnQgYWxsb2NhdGlvbiA9IChtc2dmbGcgPT0gTlNQX0NJKSA/IHNrLT5za19hbGxvY2F0aW9uIDogR0ZQX0FUT01JQzsKKwlnZnBfdCBhbGxvY2F0aW9uID0gKG1zZ2ZsZyA9PSBOU1BfQ0kpID8gc2stPnNrX2FsbG9jYXRpb24gOiBHRlBfQVRPTUlDOwogCXN0cnVjdCBza19idWZmICpza2IgPSBkbl9hbGxvY19za2Ioc2ssIDIwMCwgYWxsb2NhdGlvbik7CiAKIAlpZiAoIXNrYikKZGlmZiAtLWdpdCBhL25ldC9lY29uZXQvYWZfZWNvbmV0LmMgYi9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jCmluZGV4IDRhNjIwOTMuLjM0ZmRhYzUgMTAwNjQ0Ci0tLSBhL25ldC9lY29uZXQvYWZfZWNvbmV0LmMKKysrIGIvbmV0L2Vjb25ldC9hZl9lY29uZXQuYwpAQCAtNDA2LDcgKzQwNiw3IEBACiAJCXVuc2lnbmVkIGxvbmcgbmV0d29yayA9IDA7CiAKIAkJcmN1X3JlYWRfbG9jaygpOwotCQlpZGV2ID0gX19pbl9kZXZfZ2V0KGRldik7CisJCWlkZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7CiAJCWlmIChpZGV2KSB7CiAJCQlpZiAoaWRldi0+aWZhX2xpc3QpCiAJCQkJbmV0d29yayA9IG50b2hsKGlkZXYtPmlmYV9saXN0LT5pZmFfYWRkcmVzcykgJiAKZGlmZiAtLWdpdCBhL25ldC9ldGhlcm5ldC9ldGguYyBiL25ldC9ldGhlcm5ldC9ldGguYwppbmRleCA4N2EwNTJhLi42OGE1Y2E4IDEwMDY0NAotLS0gYS9uZXQvZXRoZXJuZXQvZXRoLmMKKysrIGIvbmV0L2V0aGVybmV0L2V0aC5jCkBAIC0xNDYsNiArMTQ2LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNvbXBhcmVfZXRoX2FkZHIoY29uc3QgdW5zaWduZWQgY2hhciAqX19hLCBjb25zdCB1bnNpZ25lZCBjaGFyICpfX2IpCit7CisJY29uc3QgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSAodW5zaWduZWQgc2hvcnQgKikgX19hOworCWNvbnN0IHVuc2lnbmVkIHNob3J0ICpkZXZhZGRyID0gKHVuc2lnbmVkIHNob3J0ICopIF9fYjsKKwl1bnNpZ25lZCBpbnQgcmVzOworCisJQlVJTERfQlVHX09OKEVUSF9BTEVOICE9IDYpOworCXJlcyA9ICgoZGVzdFswXSBeIGRldmFkZHJbMF0pIHwKKwkgICAgICAgKGRlc3RbMV0gXiBkZXZhZGRyWzFdKSB8CisJICAgICAgIChkZXN0WzJdIF4gZGV2YWRkclsyXSkpICE9IDA7CisKKwlyZXR1cm4gcmVzOworfQogCiAvKgogICoJRGV0ZXJtaW5lIHRoZSBwYWNrZXQncyBwcm90b2NvbCBJRC4gVGhlIHJ1bGUgaGVyZSBpcyB0aGF0IHdlIApAQCAtMTU4LDE2ICsxNzEsMTUgQEAKIAlzdHJ1Y3QgZXRoaGRyICpldGg7CiAJdW5zaWduZWQgY2hhciAqcmF3cDsKIAkKLQlza2ItPm1hYy5yYXc9c2tiLT5kYXRhOworCXNrYi0+bWFjLnJhdyA9IHNrYi0+ZGF0YTsKIAlza2JfcHVsbChza2IsRVRIX0hMRU4pOwogCWV0aCA9IGV0aF9oZHIoc2tiKTsKIAkKLQlpZigqZXRoLT5oX2Rlc3QmMSkKLQl7Ci0JCWlmKG1lbWNtcChldGgtPmhfZGVzdCxkZXYtPmJyb2FkY2FzdCwgRVRIX0FMRU4pPT0wKQotCQkJc2tiLT5wa3RfdHlwZT1QQUNLRVRfQlJPQURDQVNUOworCWlmICgqZXRoLT5oX2Rlc3QmMSkgeworCQlpZiAoIWNvbXBhcmVfZXRoX2FkZHIoZXRoLT5oX2Rlc3QsIGRldi0+YnJvYWRjYXN0KSkKKwkJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfQlJPQURDQVNUOwogCQllbHNlCi0JCQlza2ItPnBrdF90eXBlPVBBQ0tFVF9NVUxUSUNBU1Q7CisJCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX01VTFRJQ0FTVDsKIAl9CiAJCiAJLyoKQEAgLTE3OCwxMCArMTkwLDkgQEAKIAkgKglzZWVtcyB0byBzZXQgSUZGX1BST01JU0MuCiAJICovCiAJIAotCWVsc2UgaWYoMSAvKmRldi0+ZmxhZ3MmSUZGX1BST01JU0MqLykKLQl7Ci0JCWlmKG1lbWNtcChldGgtPmhfZGVzdCxkZXYtPmRldl9hZGRyLCBFVEhfQUxFTikpCi0JCQlza2ItPnBrdF90eXBlPVBBQ0tFVF9PVEhFUkhPU1Q7CisJZWxzZSBpZigxIC8qZGV2LT5mbGFncyZJRkZfUFJPTUlTQyovKSB7CisJCWlmICh1bmxpa2VseShjb21wYXJlX2V0aF9hZGRyKGV0aC0+aF9kZXN0LCBkZXYtPmRldl9hZGRyKSkpCisJCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKIAl9CiAJCiAJaWYgKG50b2hzKGV0aC0+aF9wcm90bykgPj0gMTUzNikKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKaW5kZXggMDNhNDczNC4uNjA1OWU5ZSAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKKysrIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKQEAgLTIzMCw3ICsyMzAsNyBAQAogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZTsKIAogCWllZWU4MDIxMV9kZWJ1Z19sZXZlbCA9IGRlYnVnOwotCWllZWU4MDIxMV9wcm9jID0gY3JlYXRlX3Byb2NfZW50cnkoRFJWX05BTUUsIFNfSUZESVIsIHByb2NfbmV0KTsKKwlpZWVlODAyMTFfcHJvYyA9IHByb2NfbWtkaXIoRFJWX05BTUUsIHByb2NfbmV0KTsKIAlpZiAoaWVlZTgwMjExX3Byb2MgPT0gTlVMTCkgewogCQlJRUVFODAyMTFfRVJST1IoIlVuYWJsZSB0byBjcmVhdGUgIiBEUlZfTkFNRQogCQkJCSIgcHJvYyBkaXJlY3RvcnlcbiIpOwpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfdHguYyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKaW5kZXggYzlhYWZmMy4uZWVkMDdiYiAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfdHguYworKysgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jCkBAIC0yMDcsNyArMjA3LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfdHhiICppZWVlODAyMTFfYWxsb2NfdHhiKGludCBucl9mcmFncywgaW50IHR4Yl9zaXplLAotCQkJCQkJIGludCBnZnBfbWFzaykKKwkJCQkJCSBnZnBfdCBnZnBfbWFzaykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqdHhiOwogCWludCBpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYXJwLmMgYi9uZXQvaXB2NC9hcnAuYwppbmRleCA4YmYzMTJiLi5iNDI1NzQ4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hcnAuYworKysgYi9uZXQvaXB2NC9hcnAuYwpAQCAtMjQxLDcgKzI0MSw3IEBACiAJbmVpZ2gtPnR5cGUgPSBpbmV0X2FkZHJfdHlwZShhZGRyKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlpbl9kZXYgPSByY3VfZGVyZWZlcmVuY2UoX19pbl9kZXZfZ2V0KGRldikpOworCWluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTsKIAlpZiAoaW5fZGV2ID09IE5VTEwpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNjk3LDEyICs2OTcsNiBAQAogCWFycF94bWl0KHNrYik7CiB9CiAKLXN0YXRpYyB2b2lkIHBhcnBfcmVkbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCW5mX3Jlc2V0KHNrYik7Ci0JYXJwX3Jjdihza2IsIHNrYi0+ZGV2LCBOVUxMLCBza2ItPmRldik7Ci19Ci0KIC8qCiAgKglQcm9jZXNzIGFuIGFycCByZXF1ZXN0LgogICovCkBAIC05MjIsNiArOTE2LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHBhcnBfcmVkbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWFycF9wcm9jZXNzKHNrYik7Cit9CisKIAogLyoKICAqCVJlY2VpdmUgYW4gYXJwIHJlcXVlc3QgZnJvbSB0aGUgZGV2aWNlIGxheWVyLgpAQCAtOTkwLDggKzk4OSw4IEBACiAJCQlpcHY0X2RldmNvbmYucHJveHlfYXJwID0gMTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCWlmIChfX2luX2Rldl9nZXQoZGV2KSkgewotCQkJX19pbl9kZXZfZ2V0KGRldiktPmNuZi5wcm94eV9hcnAgPSAxOworCQlpZiAoX19pbl9kZXZfZ2V0X3J0bmwoZGV2KSkgeworCQkJX19pbl9kZXZfZ2V0X3J0bmwoZGV2KS0+Y25mLnByb3h5X2FycCA9IDE7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlyZXR1cm4gLUVOWElPOwpAQCAtMTA5Niw4ICsxMDk1LDggQEAKIAkJCQlpcHY0X2RldmNvbmYucHJveHlfYXJwID0gMDsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KLQkJCWlmIChfX2luX2Rldl9nZXQoZGV2KSkgewotCQkJCV9faW5fZGV2X2dldChkZXYpLT5jbmYucHJveHlfYXJwID0gMDsKKwkJCWlmIChfX2luX2Rldl9nZXRfcnRubChkZXYpKSB7CisJCQkJX19pbl9kZXZfZ2V0X3J0bmwoZGV2KS0+Y25mLnByb3h5X2FycCA9IDA7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCQlyZXR1cm4gLUVOWElPOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZGV2aW5ldC5jIGIvbmV0L2lwdjQvZGV2aW5ldC5jCmluZGV4IGJhMjg5NWEuLjc0ZjIyMDcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2RldmluZXQuYworKysgYi9uZXQvaXB2NC9kZXZpbmV0LmMKQEAgLTM1MSw3ICszNTEsNyBAQAogCiBzdGF0aWMgaW50IGluZXRfc2V0X2lmYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaW5faWZhZGRyICppZmEpCiB7Ci0Jc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gX19pbl9kZXZfZ2V0KGRldik7CisJc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3J0bmwoZGV2KTsKIAogCUFTU0VSVF9SVE5MKCk7CiAKQEAgLTQ0OSw3ICs0NDksNyBAQAogCQlnb3RvIG91dDsKIAogCXJjID0gLUVOT0JVRlM7Ci0JaWYgKChpbl9kZXYgPSBfX2luX2Rldl9nZXQoZGV2KSkgPT0gTlVMTCkgeworCWlmICgoaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3J0bmwoZGV2KSkgPT0gTlVMTCkgewogCQlpbl9kZXYgPSBpbmV0ZGV2X2luaXQoZGV2KTsKIAkJaWYgKCFpbl9kZXYpCiAJCQlnb3RvIG91dDsKQEAgLTU4NCw3ICs1ODQsNyBAQAogCWlmIChjb2xvbikKIAkJKmNvbG9uID0gJzonOwogCi0JaWYgKChpbl9kZXYgPSBfX2luX2Rldl9nZXQoZGV2KSkgIT0gTlVMTCkgeworCWlmICgoaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3J0bmwoZGV2KSkgIT0gTlVMTCkgewogCQlpZiAodHJ5YWRkcm1hdGNoKSB7CiAJCQkvKiBNYXR0aGlhcyBBbmRyZWUgKi8KIAkJCS8qIGNvbXBhcmUgbGFiZWwgYW5kIGFkZHJlc3MgKDQuNEJTRCBzdHlsZSkgKi8KQEAgLTc0OCw3ICs3NDgsNyBAQAogCiBzdGF0aWMgaW50IGluZXRfZ2lmY29uZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyIF9fdXNlciAqYnVmLCBpbnQgbGVuKQogewotCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IF9faW5fZGV2X2dldChkZXYpOworCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IF9faW5fZGV2X2dldF9ydG5sKGRldik7CiAJc3RydWN0IGluX2lmYWRkciAqaWZhOwogCXN0cnVjdCBpZnJlcSBpZnI7CiAJaW50IGRvbmUgPSAwOwpAQCAtNzkxLDcgKzc5MSw3IEBACiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCiAJcmN1X3JlYWRfbG9jaygpOwotCWluX2RldiA9IF9faW5fZGV2X2dldChkZXYpOworCWluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTsKIAlpZiAoIWluX2RldikKIAkJZ290byBub19pbl9kZXY7CiAKQEAgLTgxOCw3ICs4MTgsNyBAQAogCXJlYWRfbG9jaygmZGV2X2Jhc2VfbG9jayk7CiAJcmN1X3JlYWRfbG9jaygpOwogCWZvciAoZGV2ID0gZGV2X2Jhc2U7IGRldjsgZGV2ID0gZGV2LT5uZXh0KSB7Ci0JCWlmICgoaW5fZGV2ID0gX19pbl9kZXZfZ2V0KGRldikpID09IE5VTEwpCisJCWlmICgoaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpKSA9PSBOVUxMKQogCQkJY29udGludWU7CiAKIAkJZm9yX3ByaW1hcnlfaWZhKGluX2RldikgewpAQCAtODg3LDcgKzg4Nyw3IEBACiAKIAlpZiAoZGV2KSB7CiAJCXJjdV9yZWFkX2xvY2soKTsKLQkJaWYgKChpbl9kZXYgPSBfX2luX2Rldl9nZXQoZGV2KSkpCisJCWlmICgoaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpKSkKIAkJCWFkZHIgPSBjb25maXJtX2FkZHJfaW5kZXYoaW5fZGV2LCBkc3QsIGxvY2FsLCBzY29wZSk7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCkBAIC04OTcsNyArODk3LDcgQEAKIAlyZWFkX2xvY2soJmRldl9iYXNlX2xvY2spOwogCXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKGRldiA9IGRldl9iYXNlOyBkZXY7IGRldiA9IGRldi0+bmV4dCkgewotCQlpZiAoKGluX2RldiA9IF9faW5fZGV2X2dldChkZXYpKSkgeworCQlpZiAoKGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KSkpIHsKIAkJCWFkZHIgPSBjb25maXJtX2FkZHJfaW5kZXYoaW5fZGV2LCBkc3QsIGxvY2FsLCBzY29wZSk7CiAJCQlpZiAoYWRkcikKIAkJCQlicmVhazsKQEAgLTk1Nyw3ICs5NTcsNyBAQAogCQkJIHZvaWQgKnB0cikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHRyOwotCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IF9faW5fZGV2X2dldChkZXYpOworCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IF9faW5fZGV2X2dldF9ydG5sKGRldik7CiAKIAlBU1NFUlRfUlROTCgpOwogCkBAIC0xMDc4LDcgKzEwNzgsNyBAQAogCQlpZiAoaWR4ID4gc19pZHgpCiAJCQlzX2lwX2lkeCA9IDA7CiAJCXJjdV9yZWFkX2xvY2soKTsKLQkJaWYgKChpbl9kZXYgPSBfX2luX2Rldl9nZXQoZGV2KSkgPT0gTlVMTCkgeworCQlpZiAoKGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KSkgPT0gTlVMTCkgewogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMTE0OSw3ICsxMTQ5LDcgQEAKIAlmb3IgKGRldiA9IGRldl9iYXNlOyBkZXY7IGRldiA9IGRldi0+bmV4dCkgewogCQlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CiAJCXJjdV9yZWFkX2xvY2soKTsKLQkJaW5fZGV2ID0gX19pbl9kZXZfZ2V0KGRldik7CisJCWluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTsKIAkJaWYgKGluX2RldikKIAkJCWluX2Rldi0+Y25mLmZvcndhcmRpbmcgPSBvbjsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9lc3A0LmMgYi9uZXQvaXB2NC9lc3A0LmMKaW5kZXggMWI1YTA5ZC4uMWIxOGNlNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZXNwNC5jCisrKyBiL25ldC9pcHY0L2VzcDQuYwpAQCAtNSw2ICs1LDcgQEAKICNpbmNsdWRlIDxuZXQvZXNwLmg+CiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGZrZXl2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPG5ldC9pY21wLmg+CkBAIC00MiwxMCArNDMsMTAgQEAKIAllc3AgPSB4LT5kYXRhOwogCWFsZW4gPSBlc3AtPmF1dGguaWN2X3RydW5jX2xlbjsKIAl0Zm0gPSBlc3AtPmNvbmYudGZtOwotCWJsa3NpemUgPSAoY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKHRmbSkgKyAzKSAmIH4zOwotCWNsZW4gPSAoY2xlbiArIDIgKyBibGtzaXplLTEpJn4oYmxrc2l6ZS0xKTsKKwlibGtzaXplID0gQUxJR04oY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKHRmbSksIDQpOworCWNsZW4gPSBBTElHTihjbGVuICsgMiwgYmxrc2l6ZSk7CiAJaWYgKGVzcC0+Y29uZi5wYWRsZW4pCi0JCWNsZW4gPSAoY2xlbiArIGVzcC0+Y29uZi5wYWRsZW4tMSkmfihlc3AtPmNvbmYucGFkbGVuLTEpOworCQljbGVuID0gQUxJR04oY2xlbiwgZXNwLT5jb25mLnBhZGxlbik7CiAKIAlpZiAoKG5mcmFncyA9IHNrYl9jb3dfZGF0YShza2IsIGNsZW4tc2tiLT5sZW4rYWxlbiwgJnRyYWlsZXIpKSA8IDApCiAJCWdvdG8gZXJyb3I7CkBAIC0xNDMsNyArMTQ0LDcgQEAKIAlzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwaDsKIAlzdHJ1Y3QgZXNwX2RhdGEgKmVzcCA9IHgtPmRhdGE7CiAJc3RydWN0IHNrX2J1ZmYgKnRyYWlsZXI7Ci0JaW50IGJsa3NpemUgPSBjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUoZXNwLT5jb25mLnRmbSk7CisJaW50IGJsa3NpemUgPSBBTElHTihjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUoZXNwLT5jb25mLnRmbSksIDQpOwogCWludCBhbGVuID0gZXNwLT5hdXRoLmljdl90cnVuY19sZW47CiAJaW50IGVsZW4gPSBza2ItPmxlbiAtIHNpemVvZihzdHJ1Y3QgaXBfZXNwX2hkcikgLSBlc3AtPmNvbmYuaXZsZW4gLSBhbGVuOwogCWludCBuZnJhZ3M7CkBAIC0zMDQsMTYgKzMwNSwxNiBAQAogc3RhdGljIHUzMiBlc3A0X2dldF9tYXhfc2l6ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IG10dSkKIHsKIAlzdHJ1Y3QgZXNwX2RhdGEgKmVzcCA9IHgtPmRhdGE7Ci0JdTMyIGJsa3NpemUgPSBjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUoZXNwLT5jb25mLnRmbSk7CisJdTMyIGJsa3NpemUgPSBBTElHTihjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUoZXNwLT5jb25mLnRmbSksIDQpOwogCiAJaWYgKHgtPnByb3BzLm1vZGUpIHsKLQkJbXR1ID0gKG10dSArIDIgKyBibGtzaXplLTEpJn4oYmxrc2l6ZS0xKTsKKwkJbXR1ID0gQUxJR04obXR1ICsgMiwgYmxrc2l6ZSk7CiAJfSBlbHNlIHsKIAkJLyogVGhlIHdvcnN0IGNhc2UuICovCi0JCW10dSArPSAyICsgYmxrc2l6ZTsKKwkJbXR1ID0gQUxJR04obXR1ICsgMiwgNCkgKyBibGtzaXplIC0gNDsKIAl9CiAJaWYgKGVzcC0+Y29uZi5wYWRsZW4pCi0JCW10dSA9IChtdHUgKyBlc3AtPmNvbmYucGFkbGVuLTEpJn4oZXNwLT5jb25mLnBhZGxlbi0xKTsKKwkJbXR1ID0gQUxJR04obXR1LCBlc3AtPmNvbmYucGFkbGVuKTsKIAogCXJldHVybiBtdHUgKyB4LT5wcm9wcy5oZWFkZXJfbGVuICsgZXNwLT5hdXRoLmljdl90cnVuY19sZW47CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYyBiL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCmluZGV4IDRlMTM3OWYuLmU2MWJjNzEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCisrKyBiL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCkBAIC0xNzMsNyArMTczLDcgQEAKIAogCW5vX2FkZHIgPSBycGYgPSAwOwogCXJjdV9yZWFkX2xvY2soKTsKLQlpbl9kZXYgPSBfX2luX2Rldl9nZXQoZGV2KTsKKwlpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7CiAJaWYgKGluX2RldikgewogCQlub19hZGRyID0gaW5fZGV2LT5pZmFfbGlzdCA9PSBOVUxMOwogCQlycGYgPSBJTl9ERVZfUlBGSUxURVIoaW5fZGV2KTsKQEAgLTYwNyw3ICs2MDcsNyBAQAogc3RhdGljIGludCBmaWJfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwdHI7Ci0Jc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gX19pbl9kZXZfZ2V0KGRldik7CisJc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3J0bmwoZGV2KTsKIAogCWlmIChldmVudCA9PSBORVRERVZfVU5SRUdJU1RFUikgewogCQlmaWJfZGlzYWJsZV9pcChkZXYsIDIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCmluZGV4IGQ0MTIxOWUuLjE4NmYyMGMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYworKysgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKQEAgLTEwODcsNyArMTA4Nyw3IEBACiAJCXJ0YS0+cnRhX29pZiA9ICZkZXYtPmlmaW5kZXg7CiAJCWlmIChjb2xvbikgewogCQkJc3RydWN0IGluX2lmYWRkciAqaWZhOwotCQkJc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gX19pbl9kZXZfZ2V0KGRldik7CisJCQlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcnRubChkZXYpOwogCQkJaWYgKCFpbl9kZXYpCiAJCQkJcmV0dXJuIC1FTk9ERVY7CiAJCQkqY29sb24gPSAnOic7CkBAIC0xMjY4LDcgKzEyNjgsNyBAQAogCQkJfQogCQkJaWYgKG5oLT5uaF9kZXYgPT0gTlVMTCB8fCAhKG5oLT5uaF9kZXYtPmZsYWdzJklGRl9VUCkpCiAJCQkJY29udGludWU7Ci0JCQlpZiAobmgtPm5oX2RldiAhPSBkZXYgfHwgX19pbl9kZXZfZ2V0KGRldikgPT0gTlVMTCkKKwkJCWlmIChuaC0+bmhfZGV2ICE9IGRldiB8fCAhX19pbl9kZXZfZ2V0X3J0bmwoZGV2KSkKIAkJCQljb250aW51ZTsKIAkJCWFsaXZlKys7CiAJCQlzcGluX2xvY2tfYmgoJmZpYl9tdWx0aXBhdGhfbG9jayk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfdHJpZS5jIGIvbmV0L2lwdjQvZmliX3RyaWUuYwppbmRleCAxYjYzYjQ4Li4wMDkzZWEwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfdHJpZS5jCisrKyBiL25ldC9pcHY0L2ZpYl90cmllLmMKQEAgLTQzLDcgKzQzLDcgQEAKICAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNkZWZpbmUgVkVSU0lPTiAiMC40MDMiCisjZGVmaW5lIFZFUlNJT04gIjAuNDA0IgogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTIyNCw3ICsyMjQsNyBAQAogICBDb25zaWRlciBhIG5vZGUgJ24nIGFuZCBpdHMgcGFyZW50ICd0cCcuCiAKICAgSWYgbiBpcyBhIGxlYWYsIGV2ZXJ5IGJpdCBpbiBpdHMga2V5IGlzIHNpZ25pZmljYW50LiBJdHMgcHJlc2VuY2UgaXMgCi0gIG5lY2Vzc2l0YWRlZCBieSBwYXRoIGNvbXByZXNzaW9uLCBzaW5jZSBkdXJpbmcgYSB0cmVlIHRyYXZlcnNhbCAod2hlbiAKKyAgbmVjZXNzaXRhdGVkIGJ5IHBhdGggY29tcHJlc3Npb24sIHNpbmNlIGR1cmluZyBhIHRyZWUgdHJhdmVyc2FsICh3aGVuIAogICBzZWFyY2hpbmcgZm9yIGEgbGVhZiAtIHVubGVzcyB3ZSBhcmUgZG9pbmcgYW4gaW5zZXJ0aW9uKSB3ZSB3aWxsIGNvbXBsZXRlbHkgCiAgIGlnbm9yZSBhbGwgc2tpcHBlZCBiaXRzIHdlIGVuY291bnRlci4gVGh1cyB3ZSBuZWVkIHRvIHZlcmlmeSwgYXQgdGhlIGVuZCBvZiAKICAgYSBwb3RlbnRpYWxseSBzdWNjZXNzZnVsIHNlYXJjaCwgdGhhdCB3ZSBoYXZlIGluZGVlZCBiZWVuIHdhbGtpbmcgdGhlIApAQCAtMjg2LDYgKzI4Niw4IEBACiAKIHN0YXRpYyBpbnQgaGFsdmVfdGhyZXNob2xkID0gMjU7CiBzdGF0aWMgaW50IGluZmxhdGVfdGhyZXNob2xkID0gNTA7CitzdGF0aWMgaW50IGhhbHZlX3RocmVzaG9sZF9yb290ID0gMTU7CitzdGF0aWMgaW50IGluZmxhdGVfdGhyZXNob2xkX3Jvb3QgPSAyNTsgCiAKIAogc3RhdGljIHZvaWQgX19hbGlhc19mcmVlX21lbShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCkBAIC00NDksNiArNDUxLDggQEAKIAlpbnQgaTsKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgdG5vZGUgKm9sZF90bjsKKwlpbnQgaW5mbGF0ZV90aHJlc2hvbGRfdXNlOworCWludCBoYWx2ZV90aHJlc2hvbGRfdXNlOwogCiAgCWlmICghdG4pCiAJCXJldHVybiBOVUxMOwpAQCAtNTQxLDEwICs1NDUsMTcgQEAKIAogCWNoZWNrX3Rub2RlKHRuKTsKIAorCS8qIEtlZXAgcm9vdCBub2RlIGxhcmdlciAgKi8KKworCWlmKCF0bi0+cGFyZW50KQorCQlpbmZsYXRlX3RocmVzaG9sZF91c2UgPSBpbmZsYXRlX3RocmVzaG9sZF9yb290OworCWVsc2UgCisJCWluZmxhdGVfdGhyZXNob2xkX3VzZSA9IGluZmxhdGVfdGhyZXNob2xkOworCiAJZXJyID0gMDsKIAl3aGlsZSAoKHRuLT5mdWxsX2NoaWxkcmVuID4gMCAmJgogCSAgICAgICA1MCAqICh0bi0+ZnVsbF9jaGlsZHJlbiArIHRub2RlX2NoaWxkX2xlbmd0aCh0bikgLSB0bi0+ZW1wdHlfY2hpbGRyZW4pID49Ci0JCQkJaW5mbGF0ZV90aHJlc2hvbGQgKiB0bm9kZV9jaGlsZF9sZW5ndGgodG4pKSkgeworCQkJCWluZmxhdGVfdGhyZXNob2xkX3VzZSAqIHRub2RlX2NoaWxkX2xlbmd0aCh0bikpKSB7CiAKIAkJb2xkX3RuID0gdG47CiAJCXRuID0gaW5mbGF0ZSh0LCB0bik7CkBAIC01NjQsMTAgKzU3NSwxOCBAQAogCSAqIG5vZGUgaXMgYWJvdmUgdGhyZXNob2xkLgogCSAqLwogCisKKwkvKiBLZWVwIHJvb3Qgbm9kZSBsYXJnZXIgICovCisKKwlpZighdG4tPnBhcmVudCkKKwkJaGFsdmVfdGhyZXNob2xkX3VzZSA9IGhhbHZlX3RocmVzaG9sZF9yb290OworCWVsc2UgCisJCWhhbHZlX3RocmVzaG9sZF91c2UgPSBoYWx2ZV90aHJlc2hvbGQ7CisKIAllcnIgPSAwOwogCXdoaWxlICh0bi0+Yml0cyA+IDEgJiYKIAkgICAgICAgMTAwICogKHRub2RlX2NoaWxkX2xlbmd0aCh0bikgLSB0bi0+ZW1wdHlfY2hpbGRyZW4pIDwKLQkgICAgICAgaGFsdmVfdGhyZXNob2xkICogdG5vZGVfY2hpbGRfbGVuZ3RoKHRuKSkgeworCSAgICAgICBoYWx2ZV90aHJlc2hvbGRfdXNlICogdG5vZGVfY2hpbGRfbGVuZ3RoKHRuKSkgewogCiAJCW9sZF90biA9IHRuOwogCQl0biA9IGhhbHZlKHQsIHRuKTsKQEAgLTgzNiwxMSArODU1LDEyIEBACiAjZW5kaWYKIH0KIAotLyogcmVhZHNpZGUgbW9zdCB1c2UgcmN1X3JlYWRfbG9jayBjdXJyZW50bHkgZHVtcCByb3V0aW5lcworLyogcmVhZHNpZGUgbXVzdCB1c2UgcmN1X3JlYWRfbG9jayBjdXJyZW50bHkgZHVtcCByb3V0aW5lcwogIHZpYSBnZXRfZmFfaGVhZCBhbmQgZHVtcCAqLwogCi1zdGF0aWMgc3RydWN0IGxlYWZfaW5mbyAqZmluZF9sZWFmX2luZm8oc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsIGludCBwbGVuKQorc3RhdGljIHN0cnVjdCBsZWFmX2luZm8gKmZpbmRfbGVhZl9pbmZvKHN0cnVjdCBsZWFmICpsLCBpbnQgcGxlbikKIHsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9ICZsLT5saXN0OwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCXN0cnVjdCBsZWFmX2luZm8gKmxpOwogCkBAIC04NTMsNyArODczLDcgQEAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9oZWFkICogZ2V0X2ZhX2hlYWQoc3RydWN0IGxlYWYgKmwsIGludCBwbGVuKQogewotCXN0cnVjdCBsZWFmX2luZm8gKmxpID0gZmluZF9sZWFmX2luZm8oJmwtPmxpc3QsIHBsZW4pOworCXN0cnVjdCBsZWFmX2luZm8gKmxpID0gZmluZF9sZWFmX2luZm8obCwgcGxlbik7CiAKIAlpZiAoIWxpKQogCQlyZXR1cm4gTlVMTDsKQEAgLTEwODUsNyArMTEwNSw3IEBACiAJfQogCiAJaWYgKHRwICYmIHRwLT5wb3MgKyB0cC0+Yml0cyA+IDMyKQotCQlwcmludGsoIkVSUk9SIHRwPSVwIHBvcz0lZCwgYml0cz0lZCwga2V5PSUweCBwbGVuPSVkXG4iLAorCQlwcmludGsoS0VSTl9XQVJOSU5HICJmaWJfdHJpZSB0cD0lcCBwb3M9JWQsIGJpdHM9JWQsIGtleT0lMHggcGxlbj0lZFxuIiwKIAkJICAgICAgIHRwLCB0cC0+cG9zLCB0cC0+Yml0cywga2V5LCBwbGVuKTsKIAogCS8qIFJlYmFsYW5jZSB0aGUgdHJpZSAqLwpAQCAtMTI0OCw3ICsxMjY4LDcgQEAKIH0KIAogCi0vKiBzaG91bGQgYmUgY2xhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgKi8KKy8qIHNob3VsZCBiZSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrICovCiBzdGF0aWMgaW5saW5lIGludCBjaGVja19sZWFmKHN0cnVjdCB0cmllICp0LCBzdHJ1Y3QgbGVhZiAqbCwKIAkJCSAgICAgdF9rZXkga2V5LCBpbnQgKnBsZW4sIGNvbnN0IHN0cnVjdCBmbG93aSAqZmxwLAogCQkJICAgICBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzKQpAQCAtMTU5MCw3ICsxNjEwLDcgQEAKIAlydG1zZ19maWIoUlRNX0RFTFJPVVRFLCBodG9ubChrZXkpLCBmYSwgcGxlbiwgdGItPnRiX2lkLCBubGhkciwgcmVxKTsKIAogCWwgPSBmaWJfZmluZF9ub2RlKHQsIGtleSk7Ci0JbGkgPSBmaW5kX2xlYWZfaW5mbygmbC0+bGlzdCwgcGxlbik7CisJbGkgPSBmaW5kX2xlYWZfaW5mbyhsLCBwbGVuKTsKIAogCWxpc3RfZGVsX3JjdSgmZmEtPmZhX2xpc3QpOwogCkBAIC0xNzE0LDcgKzE3MzQsNiBAQAogCiAJdC0+cmV2aXNpb24rKzsKIAotCXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKGggPSAwOyAobCA9IG5leHRsZWFmKHQsIGwpKSAhPSBOVUxMOyBoKyspIHsKIAkJZm91bmQgKz0gdHJpZV9mbHVzaF9sZWFmKHQsIGwpOwogCkBAIC0xNzIyLDcgKzE3NDEsNiBAQAogCQkJdHJpZV9sZWFmX3JlbW92ZSh0LCBsbC0+a2V5KTsKIAkJbGwgPSBsOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsgIAogCiAJaWYgKGxsICYmIGhsaXN0X2VtcHR5KCZsbC0+bGlzdCkpCiAJCXRyaWVfbGVhZl9yZW1vdmUodCwgbGwtPmtleSk7CkBAIC0xODMzLDE2ICsxODUxLDcgQEAKIAkJCWkrKzsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWlmIChmYS0+ZmFfaW5mby0+ZmliX25oID09IE5VTEwpIHsKLQkJCXByaW50aygiVHJpZSBlcnJvciBfZmliX25oPU5VTEwgaW4gZmFbJWRdIGs9JTA4eCBwbGVuPSVkXG4iLCBpLCBrZXksIHBsZW4pOwotCQkJaSsrOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGZhLT5mYV9pbmZvID09IE5VTEwpIHsKLQkJCXByaW50aygiVHJpZSBlcnJvciBmYV9pbmZvPU5VTEwgaW4gZmFbJWRdIGs9JTA4eCBwbGVuPSVkXG4iLCBpLCBrZXksIHBsZW4pOwotCQkJaSsrOwotCQkJY29udGludWU7Ci0JCX0KKwkJQlVHX09OKCFmYS0+ZmFfaW5mbyk7CiAKIAkJaWYgKGZpYl9kdW1wX2luZm8oc2tiLCBORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKIAkJCQkgIGNiLT5ubGgtPm5sbXNnX3NlcSwKQEAgLTE5NjUsNyArMTk3NCw3IEBACiAJCXRyaWVfbWFpbiA9IHQ7CiAKIAlpZiAoaWQgPT0gUlRfVEFCTEVfTE9DQUwpCi0JCXByaW50aygiSVB2NCBGSUI6IFVzaW5nIExDLXRyaWUgdmVyc2lvbiAlc1xuIiwgVkVSU0lPTik7CisJCXByaW50ayhLRVJOX0lORk8gIklQdjQgRklCOiBVc2luZyBMQy10cmllIHZlcnNpb24gJXNcbiIsIFZFUlNJT04pOwogCiAJcmV0dXJuIHRiOwogfQpAQCAtMjAyOSw3ICsyMDM4LDcgQEAKIAkJaXRlci0+dG5vZGUgPSAoc3RydWN0IHRub2RlICopIG47CiAJCWl0ZXItPnRyaWUgPSB0OwogCQlpdGVyLT5pbmRleCA9IDA7Ci0JCWl0ZXItPmRlcHRoID0gMDsKKwkJaXRlci0+ZGVwdGggPSAxOwogCQlyZXR1cm4gbjsKIAl9CiAJcmV0dXJuIE5VTEw7CkBAIC0yMjc0LDExICsyMjgzLDEyIEBACiAJCQkJc2VxX3B1dHMoc2VxLCAiPGxvY2FsPjpcbiIpOwogCQkJZWxzZQogCQkJCXNlcV9wdXRzKHNlcSwgIjxtYWluPjpcbiIpOwotCQl9IGVsc2UgewotCQkJc2VxX2luZGVudChzZXEsIGl0ZXItPmRlcHRoLTEpOwotCQkJc2VxX3ByaW50ZihzZXEsICIgICstLSAlZC4lZC4lZC4lZC8lZFxuIiwKLQkJCQkgICBOSVBRVUFEKHByZiksIHRuLT5wb3MpOwotCQl9CisJCX0gCisJCXNlcV9pbmRlbnQoc2VxLCBpdGVyLT5kZXB0aC0xKTsKKwkJc2VxX3ByaW50ZihzZXEsICIgICstLSAlZC4lZC4lZC4lZC8lZCAlZCAlZCAlZFxuIiwKKwkJCSAgIE5JUFFVQUQocHJmKSwgdG4tPnBvcywgdG4tPmJpdHMsIHRuLT5mdWxsX2NoaWxkcmVuLCAKKwkJCSAgIHRuLT5lbXB0eV9jaGlsZHJlbik7CisJCQogCX0gZWxzZSB7CiAJCXN0cnVjdCBsZWFmICpsID0gKHN0cnVjdCBsZWFmICopIG47CiAJCWludCBpOwpAQCAtMjI4Nyw3ICsyMjk3LDcgQEAKIAkJc2VxX2luZGVudChzZXEsIGl0ZXItPmRlcHRoKTsKIAkJc2VxX3ByaW50ZihzZXEsICIgIHwtLSAlZC4lZC4lZC4lZFxuIiwgTklQUVVBRCh2YWwpKTsKIAkJZm9yIChpID0gMzI7IGkgPj0gMDsgaS0tKSB7Ci0JCQlzdHJ1Y3QgbGVhZl9pbmZvICpsaSA9IGZpbmRfbGVhZl9pbmZvKCZsLT5saXN0LCBpKTsKKwkJCXN0cnVjdCBsZWFmX2luZm8gKmxpID0gZmluZF9sZWFmX2luZm8obCwgaSk7CiAJCQlpZiAobGkpIHsKIAkJCQlzdHJ1Y3QgZmliX2FsaWFzICpmYTsKIAkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShmYSwgJmxpLT5mYWxoLCBmYV9saXN0KSB7CkBAIC0yMzgzLDcgKzIzOTMsNyBAQAogCQlyZXR1cm4gMDsKIAogCWZvciAoaT0zMjsgaT49MDsgaS0tKSB7Ci0JCXN0cnVjdCBsZWFmX2luZm8gKmxpID0gZmluZF9sZWFmX2luZm8oJmwtPmxpc3QsIGkpOworCQlzdHJ1Y3QgbGVhZl9pbmZvICpsaSA9IGZpbmRfbGVhZl9pbmZvKGwsIGkpOwogCQlzdHJ1Y3QgZmliX2FsaWFzICpmYTsKIAkJdTMyIG1hc2ssIHByZWZpeDsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWNtcC5jIGIvbmV0L2lwdjQvaWNtcC5jCmluZGV4IDI0ZWI1NmEuLjkwZGNhNzEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ljbXAuYworKysgYi9uZXQvaXB2NC9pY21wLmMKQEAgLTE4OCw3ICsxODgsNyBAQAogCiAvKiBDb250cm9sIHBhcmFtZXRlcnMgZm9yIEVDSE8gcmVwbGllcy4gKi8KIGludCBzeXNjdGxfaWNtcF9lY2hvX2lnbm9yZV9hbGw7Ci1pbnQgc3lzY3RsX2ljbXBfZWNob19pZ25vcmVfYnJvYWRjYXN0czsKK2ludCBzeXNjdGxfaWNtcF9lY2hvX2lnbm9yZV9icm9hZGNhc3RzID0gMTsKIAogLyogQ29udHJvbCBwYXJhbWV0ZXIgLSBpZ25vcmUgYm9ndXMgYnJvYWRjYXN0IHJlc3BvbnNlcz8gKi8KIGludCBzeXNjdGxfaWNtcF9pZ25vcmVfYm9ndXNfZXJyb3JfcmVzcG9uc2VzOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWdtcC5jIGIvbmV0L2lwdjQvaWdtcC5jCmluZGV4IDQ0NjA3ZjQuLjhiNmQzOTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lnbXAuYworKysgYi9uZXQvaXB2NC9pZ21wLmMKQEAgLTEzMjMsNyArMTMyMyw3IEBACiAJfQogCWlmIChkZXYpIHsKIAkJaW1yLT5pbXJfaWZpbmRleCA9IGRldi0+aWZpbmRleDsKLQkJaWRldiA9IF9faW5fZGV2X2dldChkZXYpOworCQlpZGV2ID0gX19pbl9kZXZfZ2V0X3J0bmwoZGV2KTsKIAl9CiAJcmV0dXJuIGlkZXY7CiB9CkBAIC0xNjAzLDcgKzE2MDMsNyBAQAogCX0KIAlwbWMtPnNvdXJjZXMgPSBOVUxMOwogCXBtYy0+c2Ztb2RlID0gTUNBU1RfRVhDTFVERTsKLQlwbWMtPnNmY291bnRbTUNBU1RfRVhDTFVERV0gPSAwOworCXBtYy0+c2Zjb3VudFtNQ0FTVF9JTkNMVURFXSA9IDA7CiAJcG1jLT5zZmNvdW50W01DQVNUX0VYQ0xVREVdID0gMTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKaW5kZXggZmUzYzZkMy4uOTQ0NjhhNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYworKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCkBAIC00OTQsNyArNDk0LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGluZXRfY3NrX3JlcXNrX3F1ZXVlX3BydW5lKTsKIAogc3RydWN0IHNvY2sgKmluZXRfY3NrX2Nsb25lKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAotCQkJICAgIGNvbnN0IHVuc2lnbmVkIGludCBfX25vY2FzdCBwcmlvcml0eSkKKwkJCSAgICBjb25zdCBnZnBfdCBwcmlvcml0eSkKIHsKIAlzdHJ1Y3Qgc29jayAqbmV3c2sgPSBza19jbG9uZShzaywgcHJpb3JpdHkpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYyBiL25ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jCmluZGV4IDRkMTUwMmEuLmEwMTBlOWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jCisrKyBiL25ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jCkBAIC0yMCw3ICsyMCw3IEBACiAJc3RydWN0IGluZXRfYmluZF9oYXNoYnVja2V0ICpiaGVhZDsKIAlzdHJ1Y3QgaW5ldF9iaW5kX2J1Y2tldCAqdGI7CiAJLyogVW5saW5rIGZyb20gZXN0YWJsaXNoZWQgaGFzaGVzLiAqLwotCXN0cnVjdCBpbmV0X2VoYXNoX2J1Y2tldCAqZWhlYWQgPSAmaGFzaGluZm8tPmVoYXNoW3R3LT50d19oYXNoZW50XTsKKwlzdHJ1Y3QgaW5ldF9laGFzaF9idWNrZXQgKmVoZWFkID0gaW5ldF9laGFzaF9idWNrZXQoaGFzaGluZm8sIHR3LT50d19oYXNoKTsKIAogCXdyaXRlX2xvY2soJmVoZWFkLT5sb2NrKTsKIAlpZiAoaGxpc3RfdW5oYXNoZWQoJnR3LT50d19ub2RlKSkgewpAQCAtNjAsNyArNjAsNyBAQAogewogCWNvbnN0IHN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAljb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7Ci0Jc3RydWN0IGluZXRfZWhhc2hfYnVja2V0ICplaGVhZCA9ICZoYXNoaW5mby0+ZWhhc2hbc2stPnNrX2hhc2hlbnRdOworCXN0cnVjdCBpbmV0X2VoYXNoX2J1Y2tldCAqZWhlYWQgPSBpbmV0X2VoYXNoX2J1Y2tldChoYXNoaW5mbywgc2stPnNrX2hhc2gpOwogCXN0cnVjdCBpbmV0X2JpbmRfaGFzaGJ1Y2tldCAqYmhlYWQ7CiAJLyogU3RlcCAxOiBQdXQgVFcgaW50byBiaW5kIGhhc2guIE9yaWdpbmFsIHNvY2tldCBzdGF5cyB0aGVyZSB0b28uCiAJICAgTm90ZSwgdGhhdCBhbnkgc29ja2V0IHdpdGggaW5ldC0+bnVtICE9IDAgTVVTVCBiZSBib3VuZCBpbgpAQCAtMTA2LDExICsxMDYsMTIgQEAKIAkJdHctPnR3X2Rwb3J0CSAgICA9IGluZXQtPmRwb3J0OwogCQl0dy0+dHdfZmFtaWx5CSAgICA9IHNrLT5za19mYW1pbHk7CiAJCXR3LT50d19yZXVzZQkgICAgPSBzay0+c2tfcmV1c2U7Ci0JCXR3LT50d19oYXNoZW50CSAgICA9IHNrLT5za19oYXNoZW50OworCQl0dy0+dHdfaGFzaAkgICAgPSBzay0+c2tfaGFzaDsKIAkJdHctPnR3X2lwdjZvbmx5CSAgICA9IDA7CiAJCXR3LT50d19wcm90CSAgICA9IHNrLT5za19wcm90X2NyZWF0b3I7CiAJCWF0b21pY19zZXQoJnR3LT50d19yZWZjbnQsIDEpOwogCQlpbmV0X3R3c2tfZGVhZF9ub2RlX2luaXQodHcpOworCQlfX21vZHVsZV9nZXQodHctPnR3X3Byb3QtPm93bmVyKTsKIAl9CiAKIAlyZXR1cm4gdHc7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9ncmUuYyBiL25ldC9pcHY0L2lwX2dyZS5jCmluZGV4IGYwZDU3NDAuLjg5NmNlM2YgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2dyZS5jCisrKyBiL25ldC9pcHY0L2lwX2dyZS5jCkBAIC0xMTA0LDEwICsxMTA0LDEwIEBACiAJCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiAJCWRldiA9IHJ0LT51LmRzdC5kZXY7CiAJCWlwX3J0X3B1dChydCk7Ci0JCWlmIChfX2luX2Rldl9nZXQoZGV2KSA9PSBOVUxMKQorCQlpZiAoX19pbl9kZXZfZ2V0X3J0bmwoZGV2KSA9PSBOVUxMKQogCQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCQl0LT5tbGluayA9IGRldi0+aWZpbmRleDsKLQkJaXBfbWNfaW5jX2dyb3VwKF9faW5fZGV2X2dldChkZXYpLCB0LT5wYXJtcy5pcGguZGFkZHIpOworCQlpcF9tY19pbmNfZ3JvdXAoX19pbl9kZXZfZ2V0X3J0bmwoZGV2KSwgdC0+cGFybXMuaXBoLmRhZGRyKTsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vdXRwdXQuYyBiL25ldC9pcHY0L2lwX291dHB1dC5jCmluZGV4IDNmMWEyNjMuLjFhZDUyMDIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L2lwX291dHB1dC5jCkBAIC0zOTEsNiArMzkxLDkgQEAKIAl0by0+bmZjdCA9IGZyb20tPm5mY3Q7CiAJbmZfY29ubnRyYWNrX2dldCh0by0+bmZjdCk7CiAJdG8tPm5mY3RpbmZvID0gZnJvbS0+bmZjdGluZm87CisjaWYgZGVmaW5lZChDT05GSUdfSVBfVlMpIHx8IGRlZmluZWQoQ09ORklHX0lQX1ZTX01PRFVMRSkKKwl0by0+aXB2c19wcm9wZXJ0eSA9IGZyb20tPmlwdnNfcHJvcGVydHk7CisjZW5kaWYKICNpZmRlZiBDT05GSUdfQlJJREdFX05FVEZJTFRFUgogCW5mX2JyaWRnZV9wdXQodG8tPm5mX2JyaWRnZSk7CiAJdG8tPm5mX2JyaWRnZSA9IGZyb20tPm5mX2JyaWRnZTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuYwppbmRleCA5ZGJmNTkwLi4zMDJiN2ViIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcG1yLmMKKysrIGIvbmV0L2lwdjQvaXBtci5jCkBAIC0xNDksNyArMTQ5LDcgQEAKIAkJaWYgKGVyciA9PSAwICYmIChkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShwLm5hbWUpKSAhPSBOVUxMKSB7CiAJCQlkZXYtPmZsYWdzIHw9IElGRl9NVUxUSUNBU1Q7CiAKLQkJCWluX2RldiA9IF9faW5fZGV2X2dldChkZXYpOworCQkJaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3J0bmwoZGV2KTsKIAkJCWlmIChpbl9kZXYgPT0gTlVMTCAmJiAoaW5fZGV2ID0gaW5ldGRldl9pbml0KGRldikpID09IE5VTEwpCiAJCQkJZ290byBmYWlsdXJlOwogCQkJaW5fZGV2LT5jbmYucnBfZmlsdGVyID0gMDsKQEAgLTI3OCw3ICsyNzgsNyBAQAogCiAJZGV2X3NldF9hbGxtdWx0aShkZXYsIC0xKTsKIAotCWlmICgoaW5fZGV2ID0gX19pbl9kZXZfZ2V0KGRldikpICE9IE5VTEwpIHsKKwlpZiAoKGluX2RldiA9IF9faW5fZGV2X2dldF9ydG5sKGRldikpICE9IE5VTEwpIHsKIAkJaW5fZGV2LT5jbmYubWNfZm9yd2FyZGluZy0tOwogCQlpcF9ydF9tdWx0aWNhc3RfZXZlbnQoaW5fZGV2KTsKIAl9CkBAIC00MjEsNyArNDIxLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKChpbl9kZXYgPSBfX2luX2Rldl9nZXQoZGV2KSkgPT0gTlVMTCkKKwlpZiAoKGluX2RldiA9IF9faW5fZGV2X2dldF9ydG5sKGRldikpID09IE5VTEwpCiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAlpbl9kZXYtPmNuZi5tY19mb3J3YXJkaW5nKys7CiAJZGV2X3NldF9hbGxtdWx0aShkZXYsICsxKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwdnMvaXBfdnNfYXBwLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2FwcC5jCmluZGV4IDZlMDkyZGEuLmZjNmY5NWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfYXBwLmMKKysrIGIvbmV0L2lwdjQvaXB2cy9pcF92c19hcHAuYwpAQCAtNjA0LDcgKzYwNCw3IEBACiAvKgogICoJUmVwbGFjZSBhIHNlZ21lbnQgb2YgZGF0YSB3aXRoIGEgbmV3IHNlZ21lbnQKICAqLwotaW50IGlwX3ZzX3NrYl9yZXBsYWNlKHN0cnVjdCBza19idWZmICpza2IsIGludCBwcmksCitpbnQgaXBfdnNfc2tiX3JlcGxhY2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgcHJpLAogCQkgICAgICBjaGFyICpvX2J1ZiwgaW50IG9fbGVuLCBjaGFyICpuX2J1ZiwgaW50IG5fbGVuKQogewogCXN0cnVjdCBpcGhkciAqaXBoOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19jb25uLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2Nvbm4uYwppbmRleCBlMTE5NTJlLi5mODI4ZmEyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2Nvbm4uYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2Nvbm4uYwpAQCAtMTk2LDYgKzE5Niw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjcCwgJmlwX3ZzX2Nvbm5fdGFiW2hhc2hdLCBjX2xpc3QpIHsKIAkJaWYgKHNfYWRkcj09Y3AtPmNhZGRyICYmIHNfcG9ydD09Y3AtPmNwb3J0ICYmCiAJCSAgICBkX3BvcnQ9PWNwLT52cG9ydCAmJiBkX2FkZHI9PWNwLT52YWRkciAmJgorCQkgICAgKCghc19wb3J0KSBeICghKGNwLT5mbGFncyAmIElQX1ZTX0NPTk5fRl9OT19DUE9SVCkpKSAmJgogCQkgICAgcHJvdG9jb2w9PWNwLT5wcm90b2NvbCkgewogCQkJLyogSElUICovCiAJCQlhdG9taWNfaW5jKCZjcC0+cmVmY250KTsKQEAgLTIyNyw2ICsyMjgsNDAgQEAKIAlyZXR1cm4gY3A7CiB9CiAKKy8qIEdldCByZWZlcmVuY2UgdG8gY29ubmVjdGlvbiB0ZW1wbGF0ZSAqLworc3RydWN0IGlwX3ZzX2Nvbm4gKmlwX3ZzX2N0X2luX2dldAorKGludCBwcm90b2NvbCwgX191MzIgc19hZGRyLCBfX3UxNiBzX3BvcnQsIF9fdTMyIGRfYWRkciwgX191MTYgZF9wb3J0KQoreworCXVuc2lnbmVkIGhhc2g7CisJc3RydWN0IGlwX3ZzX2Nvbm4gKmNwOworCisJaGFzaCA9IGlwX3ZzX2Nvbm5faGFzaGtleShwcm90b2NvbCwgc19hZGRyLCBzX3BvcnQpOworCisJY3RfcmVhZF9sb2NrKGhhc2gpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjcCwgJmlwX3ZzX2Nvbm5fdGFiW2hhc2hdLCBjX2xpc3QpIHsKKwkJaWYgKHNfYWRkcj09Y3AtPmNhZGRyICYmIHNfcG9ydD09Y3AtPmNwb3J0ICYmCisJCSAgICBkX3BvcnQ9PWNwLT52cG9ydCAmJiBkX2FkZHI9PWNwLT52YWRkciAmJgorCQkgICAgY3AtPmZsYWdzICYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFICYmCisJCSAgICBwcm90b2NvbD09Y3AtPnByb3RvY29sKSB7CisJCQkvKiBISVQgKi8KKwkJCWF0b21pY19pbmMoJmNwLT5yZWZjbnQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisJY3AgPSBOVUxMOworCisgIG91dDoKKwljdF9yZWFkX3VubG9jayhoYXNoKTsKKworCUlQX1ZTX0RCRyg3LCAidGVtcGxhdGUgbG9va3VwL2luICVzICV1LiV1LiV1LiV1OiVkLT4ldS4ldS4ldS4ldTolZCAlc1xuIiwKKwkJICBpcF92c19wcm90b19uYW1lKHByb3RvY29sKSwKKwkJICBOSVBRVUFEKHNfYWRkciksIG50b2hzKHNfcG9ydCksCisJCSAgTklQUVVBRChkX2FkZHIpLCBudG9ocyhkX3BvcnQpLAorCQkgIGNwPyJoaXQiOiJub3QgaGl0Iik7CisKKwlyZXR1cm4gY3A7Cit9CiAKIC8qCiAgKiAgR2V0cyBpcF92c19jb25uIGFzc29jaWF0ZWQgd2l0aCBzdXBwbGllZCBwYXJhbWV0ZXJzIGluIHRoZSBpcF92c19jb25uX3RhYi4KQEAgLTM2Nyw3ICs0MDIsNyBAQAogCQkgIGF0b21pY19yZWFkKCZkZXN0LT5yZWZjbnQpKTsKIAogCS8qIFVwZGF0ZSB0aGUgY29ubmVjdGlvbiBjb3VudGVycyAqLwotCWlmIChjcC0+Y3BvcnQgfHwgKGNwLT5mbGFncyAmIElQX1ZTX0NPTk5fRl9OT19DUE9SVCkpIHsKKwlpZiAoIShjcC0+ZmxhZ3MgJiBJUF9WU19DT05OX0ZfVEVNUExBVEUpKSB7CiAJCS8qIEl0IGlzIGEgbm9ybWFsIGNvbm5lY3Rpb24sIHNvIGluY3JlYXNlIHRoZSBpbmFjdGl2ZQogCQkgICBjb25uZWN0aW9uIGNvdW50ZXIgYmVjYXVzZSBpdCBpcyBpbiBUQ1AgU1lOUkVDVgogCQkgICBzdGF0ZSAoaW5hY3RpdmUpIG9yIG90aGVyIHByb3RvY29sIGluYWNpdmUgc3RhdGUgKi8KQEAgLTQwNiw3ICs0NDEsNyBAQAogCQkgIGF0b21pY19yZWFkKCZkZXN0LT5yZWZjbnQpKTsKIAogCS8qIFVwZGF0ZSB0aGUgY29ubmVjdGlvbiBjb3VudGVycyAqLwotCWlmIChjcC0+Y3BvcnQgfHwgKGNwLT5mbGFncyAmIElQX1ZTX0NPTk5fRl9OT19DUE9SVCkpIHsKKwlpZiAoIShjcC0+ZmxhZ3MgJiBJUF9WU19DT05OX0ZfVEVNUExBVEUpKSB7CiAJCS8qIEl0IGlzIGEgbm9ybWFsIGNvbm5lY3Rpb24sIHNvIGRlY3JlYXNlIHRoZSBpbmFjdGNvbm5zCiAJCSAgIG9yIGFjdGl2ZWNvbm5zIGNvdW50ZXIgKi8KIAkJaWYgKGNwLT5mbGFncyAmIElQX1ZTX0NPTk5fRl9JTkFDVElWRSkgewpAQCAtNDY3LDcgKzUwMiw3IEBACiAJCS8qCiAJCSAqIEludmFsaWRhdGUgdGhlIGNvbm5lY3Rpb24gdGVtcGxhdGUKIAkJICovCi0JCWlmIChjdC0+Y3BvcnQpIHsKKwkJaWYgKGN0LT52cG9ydCAhPSA2NTUzNSkgewogCQkJaWYgKGlwX3ZzX2Nvbm5fdW5oYXNoKGN0KSkgewogCQkJCWN0LT5kcG9ydCA9IDY1NTM1OwogCQkJCWN0LT52cG9ydCA9IDY1NTM1OwpAQCAtNzc2LDcgKzgxMSw3IEBACiAJCWN0X3dyaXRlX2xvY2tfYmgoaGFzaCk7CiAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShjcCwgJmlwX3ZzX2Nvbm5fdGFiW2hhc2hdLCBjX2xpc3QpIHsKLQkJCWlmICghY3AtPmNwb3J0ICYmICEoY3AtPmZsYWdzICYgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSkKKwkJCWlmIChjcC0+ZmxhZ3MgJiBJUF9WU19DT05OX0ZfVEVNUExBVEUpCiAJCQkJLyogY29ubmVjdGlvbiB0ZW1wbGF0ZSAqLwogCQkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2NvcmUuYyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfY29yZS5jCmluZGV4IDNhYzdlZWMuLjk4MWNjMzIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfY29yZS5jCisrKyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfY29yZS5jCkBAIC0yNDMsMTAgKzI0MywxMCBAQAogCWlmIChwb3J0c1sxXSA9PSBzdmMtPnBvcnQpIHsKIAkJLyogQ2hlY2sgaWYgYSB0ZW1wbGF0ZSBhbHJlYWR5IGV4aXN0cyAqLwogCQlpZiAoc3ZjLT5wb3J0ICE9IEZUUFBPUlQpCi0JCQljdCA9IGlwX3ZzX2Nvbm5faW5fZ2V0KGlwaC0+cHJvdG9jb2wsIHNuZXQsIDAsCisJCQljdCA9IGlwX3ZzX2N0X2luX2dldChpcGgtPnByb3RvY29sLCBzbmV0LCAwLAogCQkJCQkgICAgICAgaXBoLT5kYWRkciwgcG9ydHNbMV0pOwogCQllbHNlCi0JCQljdCA9IGlwX3ZzX2Nvbm5faW5fZ2V0KGlwaC0+cHJvdG9jb2wsIHNuZXQsIDAsCisJCQljdCA9IGlwX3ZzX2N0X2luX2dldChpcGgtPnByb3RvY29sLCBzbmV0LCAwLAogCQkJCQkgICAgICAgaXBoLT5kYWRkciwgMCk7CiAKIAkJaWYgKCFjdCB8fCAhaXBfdnNfY2hlY2tfdGVtcGxhdGUoY3QpKSB7CkBAIC0yNzIsMTQgKzI3MiwxNCBAQAogCQkJCQkJICAgIGlwaC0+ZGFkZHIsCiAJCQkJCQkgICAgcG9ydHNbMV0sCiAJCQkJCQkgICAgZGVzdC0+YWRkciwgZGVzdC0+cG9ydCwKLQkJCQkJCSAgICAwLAorCQkJCQkJICAgIElQX1ZTX0NPTk5fRl9URU1QTEFURSwKIAkJCQkJCSAgICBkZXN0KTsKIAkJCWVsc2UKIAkJCQljdCA9IGlwX3ZzX2Nvbm5fbmV3KGlwaC0+cHJvdG9jb2wsCiAJCQkJCQkgICAgc25ldCwgMCwKIAkJCQkJCSAgICBpcGgtPmRhZGRyLCAwLAogCQkJCQkJICAgIGRlc3QtPmFkZHIsIDAsCi0JCQkJCQkgICAgMCwKKwkJCQkJCSAgICBJUF9WU19DT05OX0ZfVEVNUExBVEUsCiAJCQkJCQkgICAgZGVzdCk7CiAJCQlpZiAoY3QgPT0gTlVMTCkKIAkJCQlyZXR1cm4gTlVMTDsKQEAgLTI5OCwxMCArMjk4LDEwIEBACiAJCSAqIHBvcnQgemVybyB0ZW1wbGF0ZTogPHByb3RvY29sLGNhZGRyLDAsdmFkZHIsMCxkYWRkciwwPgogCQkgKi8KIAkJaWYgKHN2Yy0+ZndtYXJrKQotCQkJY3QgPSBpcF92c19jb25uX2luX2dldChJUFBST1RPX0lQLCBzbmV0LCAwLAorCQkJY3QgPSBpcF92c19jdF9pbl9nZXQoSVBQUk9UT19JUCwgc25ldCwgMCwKIAkJCQkJICAgICAgIGh0b25sKHN2Yy0+ZndtYXJrKSwgMCk7CiAJCWVsc2UKLQkJCWN0ID0gaXBfdnNfY29ubl9pbl9nZXQoaXBoLT5wcm90b2NvbCwgc25ldCwgMCwKKwkJCWN0ID0gaXBfdnNfY3RfaW5fZ2V0KGlwaC0+cHJvdG9jb2wsIHNuZXQsIDAsCiAJCQkJCSAgICAgICBpcGgtPmRhZGRyLCAwKTsKIAogCQlpZiAoIWN0IHx8ICFpcF92c19jaGVja190ZW1wbGF0ZShjdCkpIHsKQEAgLTMyNiwxNCArMzI2LDE0IEBACiAJCQkJCQkgICAgc25ldCwgMCwKIAkJCQkJCSAgICBodG9ubChzdmMtPmZ3bWFyayksIDAsCiAJCQkJCQkgICAgZGVzdC0+YWRkciwgMCwKLQkJCQkJCSAgICAwLAorCQkJCQkJICAgIElQX1ZTX0NPTk5fRl9URU1QTEFURSwKIAkJCQkJCSAgICBkZXN0KTsKIAkJCWVsc2UKIAkJCQljdCA9IGlwX3ZzX2Nvbm5fbmV3KGlwaC0+cHJvdG9jb2wsCiAJCQkJCQkgICAgc25ldCwgMCwKIAkJCQkJCSAgICBpcGgtPmRhZGRyLCAwLAogCQkJCQkJICAgIGRlc3QtPmFkZHIsIDAsCi0JCQkJCQkgICAgMCwKKwkJCQkJCSAgICBJUF9WU19DT05OX0ZfVEVNUExBVEUsCiAJCQkJCQkgICAgZGVzdCk7CiAJCQlpZiAoY3QgPT0gTlVMTCkKIAkJCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwdnMvaXBfdnNfc3luYy5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19zeW5jLmMKaW5kZXggNTc0ZDFmNS4uMmU1Y2VkMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19zeW5jLmMKKysrIGIvbmV0L2lwdjQvaXB2cy9pcF92c19zeW5jLmMKQEAgLTI5NywxNiArMjk3LDI0IEBACiAKIAlwID0gKGNoYXIgKilidWZmZXIgKyBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZyk7CiAJZm9yIChpPTA7IGk8bS0+bnJfY29ubnM7IGkrKykgeworCQl1bnNpZ25lZCBmbGFnczsKKwogCQlzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm4gKilwOwotCQljcCA9IGlwX3ZzX2Nvbm5faW5fZ2V0KHMtPnByb3RvY29sLAotCQkJCSAgICAgICBzLT5jYWRkciwgcy0+Y3BvcnQsCi0JCQkJICAgICAgIHMtPnZhZGRyLCBzLT52cG9ydCk7CisJCWZsYWdzID0gbnRvaHMocy0+ZmxhZ3MpOworCQlpZiAoIShmbGFncyAmIElQX1ZTX0NPTk5fRl9URU1QTEFURSkpCisJCQljcCA9IGlwX3ZzX2Nvbm5faW5fZ2V0KHMtPnByb3RvY29sLAorCQkJCQkgICAgICAgcy0+Y2FkZHIsIHMtPmNwb3J0LAorCQkJCQkgICAgICAgcy0+dmFkZHIsIHMtPnZwb3J0KTsKKwkJZWxzZQorCQkJY3AgPSBpcF92c19jdF9pbl9nZXQocy0+cHJvdG9jb2wsCisJCQkJCSAgICAgICBzLT5jYWRkciwgcy0+Y3BvcnQsCisJCQkJCSAgICAgICBzLT52YWRkciwgcy0+dnBvcnQpOwogCQlpZiAoIWNwKSB7CiAJCQljcCA9IGlwX3ZzX2Nvbm5fbmV3KHMtPnByb3RvY29sLAogCQkJCQkgICAgcy0+Y2FkZHIsIHMtPmNwb3J0LAogCQkJCQkgICAgcy0+dmFkZHIsIHMtPnZwb3J0LAogCQkJCQkgICAgcy0+ZGFkZHIsIHMtPmRwb3J0LAotCQkJCQkgICAgbnRvaHMocy0+ZmxhZ3MpLCBOVUxMKTsKKwkJCQkJICAgIGZsYWdzLCBOVUxMKTsKIAkJCWlmICghY3ApIHsKIAkJCQlJUF9WU19FUlIoImlwX3ZzX2Nvbm5fbmV3IGZhaWxlZFxuIik7CiAJCQkJcmV0dXJuOwpAQCAtMzE1LDExICszMjMsMTEgQEAKIAkJfSBlbHNlIGlmICghY3AtPmRlc3QpIHsKIAkJCS8qIGl0IGlzIGFuIGVudHJ5IGNyZWF0ZWQgYnkgdGhlIHN5bmNocm9uaXphdGlvbiAqLwogCQkJY3AtPnN0YXRlID0gbnRvaHMocy0+c3RhdGUpOwotCQkJY3AtPmZsYWdzID0gbnRvaHMocy0+ZmxhZ3MpIHwgSVBfVlNfQ09OTl9GX0hBU0hFRDsKKwkJCWNwLT5mbGFncyA9IGZsYWdzIHwgSVBfVlNfQ09OTl9GX0hBU0hFRDsKIAkJfQkvKiBOb3RlIHRoYXQgd2UgZG9uJ3QgdG91Y2ggaXRzIHN0YXRlIGFuZCBmbGFncwogCQkJICAgaWYgaXQgaXMgYSBub3JtYWwgZW50cnkuICovCiAKLQkJaWYgKG50b2hzKHMtPmZsYWdzKSAmIElQX1ZTX0NPTk5fRl9TRVFfTUFTSykgeworCQlpZiAoZmxhZ3MgJiBJUF9WU19DT05OX0ZfU0VRX01BU0spIHsKIAkJCW9wdCA9IChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKikmc1sxXTsKIAkJCW1lbWNweSgmY3AtPmluX3NlcSwgb3B0LCBzaXplb2YoKm9wdCkpOwogCQkJcCArPSBGVUxMX0NPTk5fU0laRTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKaW5kZXggMzBhYThlMi4uN2Q5MTdlNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTUxLDYgKzUxLDE0IEBACiAJICAKIAkgIElGIHVuc3VyZSwgc2F5IGBOJy4KIAorY29uZmlnIElQX05GX0NPTk5UUkFDS19ORVRMSU5LCisJdHJpc3RhdGUgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBpbnRlcmZhY2UnCisJZGVwZW5kcyBvbiBJUF9ORl9DT05OVFJBQ0sgJiYgTkVURklMVEVSX05FVExJTksKKwlkZXBlbmRzIG9uIElQX05GX0NPTk5UUkFDSyE9eSB8fCBORVRGSUxURVJfTkVUTElOSyE9bQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgYSBuZXRsaW5rLWJhc2VkIHVzZXJzcGFjZSBpbnRlcmZhY2UKKworCiBjb25maWcgSVBfTkZfQ1RfUFJPVE9fU0NUUAogCXRyaXN0YXRlICAnU0NUUCBwcm90b2NvbCBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCknCiAJZGVwZW5kcyBvbiBJUF9ORl9DT05OVFJBQ0sgJiYgRVhQRVJJTUVOVEFMCkBAIC0xMjksNiArMTM3LDIzIEBACiAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBZLgogCitjb25maWcgSVBfTkZfUFBUUAorCXRyaXN0YXRlICAnUFBUUCBwcm90b2NvbCBzdXBwb3J0JworCWRlcGVuZHMgb24gSVBfTkZfQ09OTlRSQUNLCisJaGVscAorCSAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciBQUFRQIChQb2ludCB0byBQb2ludCBUdW5uZWxsaW5nCisJICBQcm90b2NvbCwgUkZDMjYzNykgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgTkFULiAKKwkKKwkgIElmIHlvdSBhcmUgcnVubmluZyBQUFRQIHNlc3Npb25zIG92ZXIgYSBzdGF0ZWZ1bCBmaXJld2FsbCBvciBOQVQKKwkgIGJveCwgeW91IG1heSB3YW50IHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUuICAKKwkKKwkgIFBsZWFzZSBub3RlIHRoYXQgbm90IGFsbCBQUFRQIG1vZGVzIG9mIG9wZXJhdGlvbiBhcmUgc3VwcG9ydGVkIHlldC4KKwkgIEZvciBtb3JlIGluZm8sIHJlYWQgdG9wIG9mIHRoZSBmaWxlCisJICBuZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3BwdHAuYworCQorCSAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZSBhbmQgcmVhZAorCSAgRG9jdW1lbnRhdGlvbi9tb2R1bGVzLnR4dC4gIElmIHVuc3VyZSwgc2F5IGBOJy4KKwogY29uZmlnIElQX05GX1FVRVVFCiAJdHJpc3RhdGUgIklQIFVzZXJzcGFjZSBxdWV1ZWluZyB2aWEgTkVUTElOSyAoT0JTT0xFVEUpIgogCWhlbHAKQEAgLTQ3NCw5ICs0OTksMTQgQEAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgSVBfTkZfVEFSR0VUX1VMT0cKLQl0cmlzdGF0ZSAiVUxPRyB0YXJnZXQgc3VwcG9ydCIKKwl0cmlzdGF0ZSAiVUxPRyB0YXJnZXQgc3VwcG9ydCAoT0JTT0xFVEUpIgogCWRlcGVuZHMgb24gSVBfTkZfSVBUQUJMRVMKIAktLS1oZWxwLS0tCisKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG9sZCBJUHY0LW9ubHkgImlwdF9VTE9HIiBpbXBsZW1lbnRhdGlvbgorCSAgd2hpY2ggaGFzIGJlZW4gb2Jzb2xldGVkIGJ5IHRoZSBuZXcgIm5mbmV0bGlua19sb2ciIGNvZGUgKHNlZQorCSAgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRykuCisKIAkgIFRoaXMgb3B0aW9uIGFkZHMgYSBgVUxPRycgdGFyZ2V0LCB3aGljaCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBydWxlcyBpbgogCSAgYW55IGlwdGFibGVzIHRhYmxlLiBUaGUgcGFja2V0IGlzIHBhc3NlZCB0byBhIHVzZXJzcGFjZSBsb2dnaW5nCiAJICBkYWVtb24gdXNpbmcgbmV0bGluayBtdWx0aWNhc3Qgc29ja2V0czsgdW5saWtlIHRoZSBMT0cgdGFyZ2V0CkBAIC01MTMsNiArNTQzLDE3IEBACiAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgSVBfTkZfVEFSR0VUX05GUVVFVUUKKwl0cmlzdGF0ZSAiTkZRVUVVRSBUYXJnZXQgU3VwcG9ydCIKKwlkZXBlbmRzIG9uIElQX05GX0lQVEFCTEVTCisJaGVscAorCSAgVGhpcyBUYXJnZXQgcmVwbGFjZWQgdGhlIG9sZCBvYnNvbGV0ZSBRVUVVRSB0YXJnZXQuCisKKwkgIEFzIG9wcG9zZWQgdG8gUVVFVUUsIGl0IHN1cHBvcnRzIDY1NTM1IGRpZmZlcmVudCBxdWV1ZXMsCisJICBub3QganVzdCBvbmUuCisKKwkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgorCiAjIE5BVCArIHNwZWNpZmljIHRhcmdldHMKIGNvbmZpZyBJUF9ORl9OQVQKIAl0cmlzdGF0ZSAiRnVsbCBOQVQiCkBAIC02MTMsNiArNjU0LDEyIEBACiAJZGVmYXVsdCBJUF9ORl9OQVQgaWYgSVBfTkZfQU1BTkRBPXkKIAlkZWZhdWx0IG0gaWYgSVBfTkZfQU1BTkRBPW0KIAorY29uZmlnIElQX05GX05BVF9QUFRQCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIElQX05GX05BVCE9biAmJiBJUF9ORl9QUFRQIT1uCisJZGVmYXVsdCBJUF9ORl9OQVQgaWYgSVBfTkZfUFBUUD15CisJZGVmYXVsdCBtIGlmIElQX05GX1BQVFA9bQorCiAjIG1hbmdsZSArIHNwZWNpZmljIHRhcmdldHMKIGNvbmZpZyBJUF9ORl9NQU5HTEUKIAl0cmlzdGF0ZSAiUGFja2V0IG1hbmdsaW5nIgpAQCAtNzc0LDExICs4MjEsNSBAQAogCSAgQWxsb3dzIGFsdGVyaW5nIHRoZSBBUlAgcGFja2V0IHBheWxvYWQ6IHNvdXJjZSBhbmQgZGVzdGluYXRpb24KIAkgIGhhcmR3YXJlIGFuZCBuZXR3b3JrIGFkZHJlc3Nlcy4KIAotY29uZmlnIElQX05GX0NPTk5UUkFDS19ORVRMSU5LCi0gICAgICAgIHRyaXN0YXRlICdDb25uZWN0aW9uIHRyYWNraW5nIG5ldGxpbmsgaW50ZXJmYWNlJwotICAgICAgICBkZXBlbmRzIG9uIElQX05GX0NPTk5UUkFDSyAmJiBORVRGSUxURVJfTkVUTElOSwotICAgICAgICBoZWxwCi0gICAgICAgICAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBhIG5ldGxpbmstYmFzZWQgdXNlcnNwYWNlIGludGVyZmFjZQotCiBlbmRtZW51CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZSBiL25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZQppbmRleCAxYmEwZGI3Li5kYWI0YjU4ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZQpAQCAtNCw3ICs0LDExIEBACiAKICMgb2JqZWN0cyBmb3IgdGhlIHN0YW5kYWxvbmUgLSBjb25uZWN0aW9uIHRyYWNraW5nIC8gTkFUCiBpcF9jb25udHJhY2stb2Jqcwk6PSBpcF9jb25udHJhY2tfc3RhbmRhbG9uZS5vIGlwX2Nvbm50cmFja19jb3JlLm8gaXBfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMubyBpcF9jb25udHJhY2tfcHJvdG9fdGNwLm8gaXBfY29ubnRyYWNrX3Byb3RvX3VkcC5vIGlwX2Nvbm50cmFja19wcm90b19pY21wLm8KLWlwdGFibGVfbmF0LW9ianMJOj0gaXBfbmF0X3N0YW5kYWxvbmUubyBpcF9uYXRfcnVsZS5vIGlwX25hdF9jb3JlLm8gaXBfbmF0X2hlbHBlci5vIGlwX25hdF9wcm90b191bmtub3duLm8gaXBfbmF0X3Byb3RvX3RjcC5vIGlwX25hdF9wcm90b191ZHAubyBpcF9uYXRfcHJvdG9faWNtcC5vCitpcF9uYXQtb2Jqcwk6PSBpcF9uYXRfY29yZS5vIGlwX25hdF9oZWxwZXIubyBpcF9uYXRfcHJvdG9fdW5rbm93bi5vIGlwX25hdF9wcm90b190Y3AubyBpcF9uYXRfcHJvdG9fdWRwLm8gaXBfbmF0X3Byb3RvX2ljbXAubworaXB0YWJsZV9uYXQtb2Jqcwk6PSBpcF9uYXRfcnVsZS5vIGlwX25hdF9zdGFuZGFsb25lLm8KKworaXBfY29ubnRyYWNrX3BwdHAtb2Jqcwk6PSBpcF9jb25udHJhY2tfaGVscGVyX3BwdHAubyBpcF9jb25udHJhY2tfcHJvdG9fZ3JlLm8KK2lwX25hdF9wcHRwLW9ianMJOj0gaXBfbmF0X2hlbHBlcl9wcHRwLm8gaXBfbmF0X3Byb3RvX2dyZS5vCiAKICMgY29ubmVjdGlvbiB0cmFja2luZwogb2JqLSQoQ09ORklHX0lQX05GX0NPTk5UUkFDSykgKz0gaXBfY29ubnRyYWNrLm8KQEAgLTE3LDYgKzIxLDcgQEAKIG9iai0kKENPTkZJR19JUF9ORl9DVF9QUk9UT19TQ1RQKSArPSBpcF9jb25udHJhY2tfcHJvdG9fc2N0cC5vCiAKICMgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzCitvYmotJChDT05GSUdfSVBfTkZfUFBUUCkgKz0gaXBfY29ubnRyYWNrX3BwdHAubwogb2JqLSQoQ09ORklHX0lQX05GX0FNQU5EQSkgKz0gaXBfY29ubnRyYWNrX2FtYW5kYS5vCiBvYmotJChDT05GSUdfSVBfTkZfVEZUUCkgKz0gaXBfY29ubnRyYWNrX3RmdHAubwogb2JqLSQoQ09ORklHX0lQX05GX0ZUUCkgKz0gaXBfY29ubnRyYWNrX2Z0cC5vCkBAIC0yNCw2ICsyOSw3IEBACiBvYmotJChDT05GSUdfSVBfTkZfTkVUQklPU19OUykgKz0gaXBfY29ubnRyYWNrX25ldGJpb3NfbnMubwogCiAjIE5BVCBoZWxwZXJzIAorb2JqLSQoQ09ORklHX0lQX05GX05BVF9QUFRQKSArPSBpcF9uYXRfcHB0cC5vCiBvYmotJChDT05GSUdfSVBfTkZfTkFUX0FNQU5EQSkgKz0gaXBfbmF0X2FtYW5kYS5vCiBvYmotJChDT05GSUdfSVBfTkZfTkFUX1RGVFApICs9IGlwX25hdF90ZnRwLm8KIG9iai0kKENPTkZJR19JUF9ORl9OQVRfRlRQKSArPSBpcF9uYXRfZnRwLm8KQEAgLTM1LDcgKzQxLDcgQEAKICMgdGhlIHRocmVlIGluc3RhbmNlcyBvZiBpcF90YWJsZXMKIG9iai0kKENPTkZJR19JUF9ORl9GSUxURVIpICs9IGlwdGFibGVfZmlsdGVyLm8KIG9iai0kKENPTkZJR19JUF9ORl9NQU5HTEUpICs9IGlwdGFibGVfbWFuZ2xlLm8KLW9iai0kKENPTkZJR19JUF9ORl9OQVQpICs9IGlwdGFibGVfbmF0Lm8KK29iai0kKENPTkZJR19JUF9ORl9OQVQpICs9IGlwdGFibGVfbmF0Lm8gaXBfbmF0Lm8KIG9iai0kKENPTkZJR19JUF9ORl9SQVcpICs9IGlwdGFibGVfcmF3Lm8KIAogIyBtYXRjaGVzCkBAIC04Nyw2ICs5Myw3IEBACiBvYmotJChDT05GSUdfSVBfTkZfVEFSR0VUX05PVFJBQ0spICs9IGlwdF9OT1RSQUNLLm8KIG9iai0kKENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQKSArPSBpcHRfQ0xVU1RFUklQLm8KIG9iai0kKENPTkZJR19JUF9ORl9UQVJHRVRfVFRMKSArPSBpcHRfVFRMLm8KK29iai0kKENPTkZJR19JUF9ORl9UQVJHRVRfTkZRVUVVRSkgKz0gaXB0X05GUVVFVUUubwogCiAjIGdlbmVyaWMgQVJQIHRhYmxlcwogb2JqLSQoQ09ORklHX0lQX05GX0FSUFRBQkxFUykgKz0gYXJwX3RhYmxlcy5vCkBAIC05Niw0ICsxMDMsMyBAQAogb2JqLSQoQ09ORklHX0lQX05GX0FSUEZJTFRFUikgKz0gYXJwdGFibGVfZmlsdGVyLm8KIAogb2JqLSQoQ09ORklHX0lQX05GX1FVRVVFKSArPSBpcF9xdWV1ZS5vCi1vYmotJChDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUUpICs9IGlwdF9ORlFVRVVFLm8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCmluZGV4IGZhMTYzNDIuLmE3OTY5MjggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwpAQCAtNzE2LDggKzcxNiwxMCBAQAogCX0KIAogCS8qIEFuZCBvbmUgY29weSBmb3IgZXZlcnkgb3RoZXIgQ1BVICovCi0JZm9yIChpID0gMTsgaSA8IG51bV9wb3NzaWJsZV9jcHVzKCk7IGkrKykgewotCQltZW1jcHkobmV3aW5mby0+ZW50cmllcyArIFNNUF9BTElHTihuZXdpbmZvLT5zaXplKSppLAorCWZvcl9lYWNoX2NwdShpKSB7CisJCWlmIChpID09IDApCisJCQljb250aW51ZTsKKwkJbWVtY3B5KG5ld2luZm8tPmVudHJpZXMgKyBTTVBfQUxJR04obmV3aW5mby0+c2l6ZSkgKiBpLAogCQkgICAgICAgbmV3aW5mby0+ZW50cmllcywKIAkJICAgICAgIFNNUF9BTElHTihuZXdpbmZvLT5zaXplKSk7CiAJfQpAQCAtNzY3LDcgKzc2OSw3IEBACiAJdW5zaWduZWQgaW50IGNwdTsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWZvciAoY3B1ID0gMDsgY3B1IDwgbnVtX3Bvc3NpYmxlX2NwdXMoKTsgY3B1KyspIHsKKwlmb3JfZWFjaF9jcHUoY3B1KSB7CiAJCWkgPSAwOwogCQlBUlBUX0VOVFJZX0lURVJBVEUodC0+ZW50cmllcyArIFRBQkxFX09GRlNFVCh0LCBjcHUpLAogCQkJCSAgIHQtPnNpemUsCkBAIC04ODUsNyArODg3LDggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAluZXdpbmZvID0gdm1hbGxvYyhzaXplb2Yoc3RydWN0IGFycHRfdGFibGVfaW5mbykKLQkJCSAgKyBTTVBfQUxJR04odG1wLnNpemUpICogbnVtX3Bvc3NpYmxlX2NwdXMoKSk7CisJCQkgICsgU01QX0FMSUdOKHRtcC5zaXplKSAqCisJCQkgIAkJKGhpZ2hlc3RfcG9zc2libGVfcHJvY2Vzc29yX2lkKCkrMSkpOwogCWlmICghbmV3aW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTExNTgsNyArMTE2MSw4IEBACiAJCT0geyAwLCAwLCAwLCB7IDAgfSwgeyAwIH0sIHsgfSB9OwogCiAJbmV3aW5mbyA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCBhcnB0X3RhYmxlX2luZm8pCi0JCQkgICsgU01QX0FMSUdOKHJlcGwtPnNpemUpICogbnVtX3Bvc3NpYmxlX2NwdXMoKSk7CisJCQkgICsgU01QX0FMSUdOKHJlcGwtPnNpemUpICoKKwkJCSAgCQkoaGlnaGVzdF9wb3NzaWJsZV9wcm9jZXNzb3JfaWQoKSsxKSk7CiAJaWYgKCFuZXdpbmZvKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2FtYW5kYS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19hbWFuZGEuYwppbmRleCBkYzIwODgxLi5mYTNmOTE0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2FtYW5kYS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfYW1hbmRhLmMKQEAgLTY1LDcgKzY1LDcgQEAKIAogCS8qIGluY3JlYXNlIHRoZSBVRFAgdGltZW91dCBvZiB0aGUgbWFzdGVyIGNvbm5lY3Rpb24gYXMgcmVwbGllcyBmcm9tCiAJICogQW1hbmRhIGNsaWVudHMgdG8gdGhlIHNlcnZlciBjYW4gYmUgcXVpdGUgZGVsYXllZCAqLwotCWlwX2N0X3JlZnJlc2hfYWNjdChjdCwgY3RpbmZvLCBOVUxMLCBtYXN0ZXJfdGltZW91dCAqIEhaKTsKKwlpcF9jdF9yZWZyZXNoKGN0LCAqcHNrYiwgbWFzdGVyX3RpbWVvdXQgKiBIWik7CiAKIAkvKiBObyBkYXRhPyAqLwogCWRhdGFvZmYgPSAoKnBza2IpLT5uaC5pcGgtPmlobCo0ICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jb3JlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2NvcmUuYwppbmRleCAxOWNiYTE2Li4wN2E4MGI1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2NvcmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2NvcmUuYwpAQCAtMjMzLDcgKzIzMyw3IEBACiAKIC8qIEp1c3QgZmluZCBhIGV4cGVjdGF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gYSB0dXBsZS4gKi8KIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICoKLWlwX2Nvbm50cmFja19leHBlY3RfZmluZF9nZXQoY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCitpcF9jb25udHJhY2tfZXhwZWN0X2ZpbmQoY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCiB7CiAJc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmk7CiAJCkBAIC0xMTEyLDQyICsxMTEyLDQ5IEBACiAJc3luY2hyb25pemVfbmV0KCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjdF9hZGRfY291bnRlcnMoc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCi0JCQkJICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCi0JCQkJICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLSNpZmRlZiBDT05GSUdfSVBfTkZfQ1RfQUNDVAotCWlmIChza2IpIHsKLQkJY3QtPmNvdW50ZXJzW0NUSU5GTzJESVIoY3RpbmZvKV0ucGFja2V0cysrOwotCQljdC0+Y291bnRlcnNbQ1RJTkZPMkRJUihjdGluZm8pXS5ieXRlcyArPSAKLQkJCQkJbnRvaHMoc2tiLT5uaC5pcGgtPnRvdF9sZW4pOwotCX0KLSNlbmRpZgotfQotCi0vKiBSZWZyZXNoIGNvbm50cmFjayBmb3IgdGhpcyBtYW55IGppZmZpZXMgYW5kIGRvIGFjY291bnRpbmcgKGlmIHNrYiAhPSBOVUxMKSAqLwotdm9pZCBpcF9jdF9yZWZyZXNoX2FjY3Qoc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsIAorLyogUmVmcmVzaCBjb25udHJhY2sgZm9yIHRoaXMgbWFueSBqaWZmaWVzIGFuZCBkbyBhY2NvdW50aW5nIGlmIGRvX2FjY3QgaXMgMSAqLwordm9pZCBfX2lwX2N0X3JlZnJlc2hfYWNjdChzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwgCiAJCSAgICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCiAJCQljb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJdW5zaWduZWQgbG9uZyBleHRyYV9qaWZmaWVzKQorCQkJdW5zaWduZWQgbG9uZyBleHRyYV9qaWZmaWVzLAorCQkJaW50IGRvX2FjY3QpCiB7CisJaW50IGV2ZW50ID0gMDsKKwogCUlQX05GX0FTU0VSVChjdC0+dGltZW91dC5kYXRhID09ICh1bnNpZ25lZCBsb25nKWN0KTsKKwlJUF9ORl9BU1NFUlQoc2tiKTsKKworCXdyaXRlX2xvY2tfYmgoJmlwX2Nvbm50cmFja19sb2NrKTsKIAogCS8qIElmIG5vdCBpbiBoYXNoIHRhYmxlLCB0aW1lciB3aWxsIG5vdCBiZSBhY3RpdmUgeWV0ICovCiAJaWYgKCFpc19jb25maXJtZWQoY3QpKSB7CiAJCWN0LT50aW1lb3V0LmV4cGlyZXMgPSBleHRyYV9qaWZmaWVzOwotCQljdF9hZGRfY291bnRlcnMoY3QsIGN0aW5mbywgc2tiKTsKKwkJZXZlbnQgPSBJUENUX1JFRlJFU0g7CiAJfSBlbHNlIHsKLQkJd3JpdGVfbG9ja19iaCgmaXBfY29ubnRyYWNrX2xvY2spOwogCQkvKiBOZWVkIGRlbF90aW1lciBmb3IgcmFjZSBhdm9pZGFuY2UgKG1heSBhbHJlYWR5IGJlIGR5aW5nKS4gKi8KIAkJaWYgKGRlbF90aW1lcigmY3QtPnRpbWVvdXQpKSB7CiAJCQljdC0+dGltZW91dC5leHBpcmVzID0gamlmZmllcyArIGV4dHJhX2ppZmZpZXM7CiAJCQlhZGRfdGltZXIoJmN0LT50aW1lb3V0KTsKLQkJCWlwX2Nvbm50cmFja19ldmVudF9jYWNoZShJUENUX1JFRlJFU0gsIHNrYik7CisJCQlldmVudCA9IElQQ1RfUkVGUkVTSDsKIAkJfQotCQljdF9hZGRfY291bnRlcnMoY3QsIGN0aW5mbywgc2tiKTsKLQkJd3JpdGVfdW5sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7CiAJfQorCisjaWZkZWYgQ09ORklHX0lQX05GX0NUX0FDQ1QKKwlpZiAoZG9fYWNjdCkgeworCQljdC0+Y291bnRlcnNbQ1RJTkZPMkRJUihjdGluZm8pXS5wYWNrZXRzKys7CisJCWN0LT5jb3VudGVyc1tDVElORk8yRElSKGN0aW5mbyldLmJ5dGVzICs9IAorCQkJCQkJbnRvaHMoc2tiLT5uaC5pcGgtPnRvdF9sZW4pOworCQlpZiAoKGN0LT5jb3VudGVyc1tDVElORk8yRElSKGN0aW5mbyldLnBhY2tldHMgJiAweDgwMDAwMDAwKQorCQkgICAgfHwgKGN0LT5jb3VudGVyc1tDVElORk8yRElSKGN0aW5mbyldLmJ5dGVzICYgMHg4MDAwMDAwMCkpCisJCQlldmVudCB8PSBJUENUX0NPVU5URVJfRklMTElORzsKKwl9CisjZW5kaWYKKworCXdyaXRlX3VubG9ja19iaCgmaXBfY29ubnRyYWNrX2xvY2spOworCisJLyogbXVzdCBiZSB1bmxvY2tlZCB3aGVuIGNhbGxpbmcgZXZlbnQgY2FjaGUgKi8KKwlpZiAoZXZlbnQpCisJCWlwX2Nvbm50cmFja19ldmVudF9jYWNoZShldmVudCwgc2tiKTsKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX0lQX05GX0NPTk5UUkFDS19ORVRMSU5LKSB8fCBcCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9wcHRwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9wcHRwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI2YTY2OAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX3BwdHAuYwpAQCAtMCwwICsxLDgwNiBAQAorLyoKKyAqIGlwX2Nvbm50cmFja19wcHRwLmMJLSBWZXJzaW9uIDMuMAorICoKKyAqIENvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydCBmb3IgUFBUUCAoUG9pbnQgdG8gUG9pbnQgVHVubmVsaW5nIFByb3RvY29sKS4KKyAqIFBQVFAgaXMgYSBhIHByb3RvY29sIGZvciBjcmVhdGluZyB2aXJ0dWFsIHByaXZhdGUgbmV0d29ya3MuCisgKiBJdCBpcyBhIHNwZWNpZmljYXRpb24gZGVmaW5lZCBieSBNaWNyb3NvZnQgYW5kIHNvbWUgdmVuZG9ycworICogd29ya2luZyB3aXRoIE1pY3Jvc29mdC4gIFBQVFAgaXMgYnVpbHQgb24gdG9wIG9mIGEgbW9kaWZpZWQKKyAqIHZlcnNpb24gb2YgdGhlIEludGVybmV0IEdlbmVyaWMgUm91dGluZyBFbmNhcHN1bGF0aW9uIFByb3RvY29sLgorICogR1JFIGlzIGRlZmluZWQgaW4gUkZDIDE3MDEgYW5kIFJGQyAxNzAyLiAgRG9jdW1lbnRhdGlvbiBvZgorICogUFBUUCBjYW4gYmUgZm91bmQgaW4gUkZDIDI2MzcKKyAqCisgKiAoQykgMjAwMC0yMDA1IGJ5IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBnbnVtb25rcy5vcmc+CisgKgorICogRGV2ZWxvcG1lbnQgb2YgdGhpcyBjb2RlIGZ1bmRlZCBieSBBc3Rhcm8gQUcgKGh0dHA6Ly93d3cuYXN0YXJvLmNvbS8pCisgKgorICogTGltaXRhdGlvbnM6CisgKiAJIC0gV2UgYmxpbmRseSBhc3N1bWUgdGhhdCBjb250cm9sIGNvbm5lY3Rpb25zIGFyZSBhbHdheXMKKyAqIAkgICBlc3RhYmxpc2hlZCBpbiBQTlMtPlBBQyBkaXJlY3Rpb24uICBUaGlzIGlzIGEgdmlvbGF0aW9uCisgKiAJICAgb2YgUkZGQzI2NzMKKyAqIAkgLSBXZSBjYW4gb25seSBzdXBwb3J0IG9uZSBzaW5nbGUgY2FsbCB3aXRoaW4gZWFjaCBzZXNzaW9uCisgKgorICogVE9ETzoKKyAqCSAtIHRlc3Rpbmcgb2YgaW5jb21pbmcgUFBUUCBjYWxscyAKKyAqCisgKiBDaGFuZ2VzOiAKKyAqIAkyMDAyLTAyLTA1IC0gVmVyc2lvbiAxLjMKKyAqIAkgIC0gQ2FsbCBpcF9jb25udHJhY2tfdW5leHBlY3RfcmVsYXRlZCgpIGZyb20gCisgKiAJICAgIHBwdHBfZGVzdHJveV9zaWJsaW5ncygpIHRvIGRlc3Ryb3kgZXhwZWN0YXRpb25zIGluIGNhc2UKKyAqIAkgICAgQ0FMTF9ESVNDT05ORUNUX05PVElGWSBvciB0Y3AgZmluIHBhY2tldCB3YXMgc2VlbgorICogCSAgICAoUGhpbGlwIENyYWlnIDxwaGlsaXBjQHNuYXBnZWFyLmNvbT4pCisgKiAJICAtIEFkZCBWZXJzaW9uIGluZm9ybWF0aW9uIGF0IG1vZHVsZSBsb2FkdGltZQorICogCTIwMDItMDItMTAgLSBWZXJzaW9uIDEuNgorICogCSAgLSBtb3ZlIHRvIEM5OSBzdHlsZSBpbml0aWFsaXplcnMKKyAqIAkgIC0gcmVtb3ZlIHNlY29uZCBleHBlY3RhdGlvbiBpZiBmaXJzdCBhcnJpdmVzCisgKiAJMjAwNC0xMC0yMiAtIFZlcnNpb24gMi4wCisgKiAJICAtIG1lcmdlIE1hbmRyYWtlJ3MgMi42LnggcG9ydCB3aXRoIHJlY2VudCAyLjYueCBBUEkgY2hhbmdlcworICogCSAgLSBmaXggbG90cyBvZiBsaW5lYXIgc2tiIGFzc3VtcHRpb25zIGZyb20gTWFuZHJha2UncyBwb3J0CisgKiAJMjAwNS0wNi0xMCAtIFZlcnNpb24gMi4xCisgKiAJICAtIHVzZSBpcF9jb25udHJhY2tfZXhwZWN0X2ZyZWUoKSBpbnN0ZWFkIG9mIGtmcmVlKCkgb24gdGhlCisgKiAJICAgIGV4cGVjdCdzICh3aGljaCBhcmUgZnJvbSB0aGUgc2xhYiBmb3IgcXVpdGUgc29tZSB0aW1lKQorICogCTIwMDUtMDYtMTAgLSBWZXJzaW9uIDMuMAorICogCSAgLSBwb3J0IGhlbHBlciB0byBwb3N0LTIuNi4xMSBBUEkgY2hhbmdlcywKKyAqIAkgICAgZnVuZGVkIGJ5IE94Y29kYSBOZXRCb3ggQmx1ZSAoaHR0cDovL3d3dy5uZXRib3hibHVlLmNvbS8pCisgKiAJMjAwNS0wNy0zMCAtIFZlcnNpb24gMy4xCisgKiAJICAtIHBvcnQgaGVscGVyIHRvIDIuNi4xMyBBUEkgY2hhbmdlcworICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KKyNpbmNsdWRlIDxuZXQvdGNwLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2suaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oZWxwZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfcHJvdG9fZ3JlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3BwdHAuaD4KKworI2RlZmluZSBJUF9DVF9QUFRQX1ZFUlNJT04gIjMuMSIKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSGFyYWxkIFdlbHRlIDxsYWZvcmdlQGdudW1vbmtzLm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIG1vZHVsZSBmb3IgUFBUUCIpOworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlwX3BwdHBfbG9jayk7CisKK2ludAorKCppcF9uYXRfcHB0cF9ob29rX291dGJvdW5kKShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkgIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkJICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgc3RydWN0IFBwdHBDb250cm9sSGVhZGVyICpjdGxoLAorCQkJICB1bmlvbiBwcHRwX2N0cmxfdW5pb24gKnBwdHBSZXEpOworCitpbnQKKygqaXBfbmF0X3BwdHBfaG9va19pbmJvdW5kKShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkgIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkJICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgc3RydWN0IFBwdHBDb250cm9sSGVhZGVyICpjdGxoLAorCQkJICB1bmlvbiBwcHRwX2N0cmxfdW5pb24gKnBwdHBSZXEpOworCitpbnQKKygqaXBfbmF0X3BwdHBfaG9va19leHBfZ3JlKShzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwZWN0X29yaWcsCisJCQkgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdF9yZXBseSk7CisKK3ZvaWQKKygqaXBfbmF0X3BwdHBfaG9va19leHBlY3Rmbikoc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCQkgICAgIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpleHApOworCisjaWYgMAorLyogUHB0cENvbnRyb2xNZXNzYWdlVHlwZSBuYW1lcyAqLworY29uc3QgY2hhciAqcHB0cF9tc2dfbmFtZVtdID0geworCSJVTktOT1dOX01FU1NBR0UiLAorCSJTVEFSVF9TRVNTSU9OX1JFUVVFU1QiLAorCSJTVEFSVF9TRVNTSU9OX1JFUExZIiwKKwkiU1RPUF9TRVNTSU9OX1JFUVVFU1QiLAorCSJTVE9QX1NFU1NJT05fUkVQTFkiLAorCSJFQ0hPX1JFUVVFU1QiLAorCSJFQ0hPX1JFUExZIiwKKwkiT1VUX0NBTExfUkVRVUVTVCIsCisJIk9VVF9DQUxMX1JFUExZIiwKKwkiSU5fQ0FMTF9SRVFVRVNUIiwKKwkiSU5fQ0FMTF9SRVBMWSIsCisJIklOX0NBTExfQ09OTkVDVCIsCisJIkNBTExfQ0xFQVJfUkVRVUVTVCIsCisJIkNBTExfRElTQ09OTkVDVF9OT1RJRlkiLAorCSJXQU5fRVJST1JfTk9USUZZIiwKKwkiU0VUX0xJTktfSU5GTyIKK307CitFWFBPUlRfU1lNQk9MKHBwdHBfbXNnX25hbWUpOworI2RlZmluZSBERUJVR1AoZm9ybWF0LCBhcmdzLi4uKQlwcmludGsoS0VSTl9ERUJVRyAiJXM6JXM6ICIgZm9ybWF0LCBfX0ZJTEVfXywgX19GVU5DVElPTl9fLCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgREVCVUdQKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCisjZGVmaW5lIFNFQ1MgKkhaCisjZGVmaW5lIE1JTlMgKiA2MCBTRUNTCisjZGVmaW5lIEhPVVJTICogNjAgTUlOUworCisjZGVmaW5lIFBQVFBfR1JFX1RJTUVPVVQgCQkoMTAgTUlOUykKKyNkZWZpbmUgUFBUUF9HUkVfU1RSRUFNX1RJTUVPVVQgCSg1IEhPVVJTKQorCitzdGF0aWMgdm9pZCBwcHRwX2V4cGVjdGZuKHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkJIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpleHApCit7CisJREVCVUdQKCJpbmNyZWFzaW5nIHRpbWVvdXRzXG4iKTsKKworCS8qIGluY3JlYXNlIHRpbWVvdXQgb2YgR1JFIGRhdGEgY2hhbm5lbCBjb25udHJhY2sgZW50cnkgKi8KKwljdC0+cHJvdG8uZ3JlLnRpbWVvdXQgPSBQUFRQX0dSRV9USU1FT1VUOworCWN0LT5wcm90by5ncmUuc3RyZWFtX3RpbWVvdXQgPSBQUFRQX0dSRV9TVFJFQU1fVElNRU9VVDsKKworCS8qIENhbiB5b3Ugc2VlIGhvdyBydXN0eSB0aGlzIGNvZGUgaXMsIGNvbXBhcmVkIHdpdGggdGhlIHByZS0yLjYuMTEKKwkgKiBvbmU/IFRoYXQncyB3aGF0IGhhcHBlbmVkIHRvIG15IHNoaW55IG5ld25hdCBvZiAyMDAyIDsoIC1IVyAqLworCisJaWYgKCFpcF9uYXRfcHB0cF9ob29rX2V4cGVjdGZuKSB7CisJCXN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgaW52X3Q7CisJCXN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpleHBfb3RoZXI7CisKKwkJLyogb2J2aW91c2x5IHRoaXMgdHVwbGUgaW52ZXJzaW9uIG9ubHkgd29ya3MgdW50aWwgeW91IGRvIE5BVCAqLworCQlpbnZlcnRfdHVwbGVwcigmaW52X3QsICZleHAtPnR1cGxlKTsKKwkJREVCVUdQKCJ0cnlpbmcgdG8gdW5leHBlY3Qgb3RoZXIgZGlyOiAiKTsKKwkJRFVNUF9UVVBMRSgmaW52X3QpOworCQorCQlleHBfb3RoZXIgPSBpcF9jb25udHJhY2tfZXhwZWN0X2ZpbmQoJmludl90KTsKKwkJaWYgKGV4cF9vdGhlcikgeworCQkJLyogZGVsZXRlIG90aGVyIGV4cGVjdGF0aW9uLiAgKi8KKwkJCURFQlVHUCgiZm91bmRcbiIpOworCQkJaXBfY29ubnRyYWNrX3VuZXhwZWN0X3JlbGF0ZWQoZXhwX290aGVyKTsKKwkJCWlwX2Nvbm50cmFja19leHBlY3RfcHV0KGV4cF9vdGhlcik7CisJCX0gZWxzZSB7CisJCQlERUJVR1AoIm5vdCBmb3VuZFxuIik7CisJCX0KKwl9IGVsc2UgeworCQkvKiB3ZSBuZWVkIG1vcmUgdGhhbiBzaW1wbGUgaW52ZXJzaW9uICovCisJCWlwX25hdF9wcHRwX2hvb2tfZXhwZWN0Zm4oY3QsIGV4cCk7CisJfQorfQorCitzdGF0aWMgaW50IGRlc3Ryb3lfc2libGluZ19vcl9leHAoY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqdCkKK3sKKwlzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmg7CisJc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cDsKKworCURFQlVHUCgidHJ5aW5nIHRvIHRpbWVvdXQgY3Qgb3IgZXhwIGZvciB0dXBsZSAiKTsKKwlEVU1QX1RVUExFKHQpOworCisJaCA9IGlwX2Nvbm50cmFja19maW5kX2dldCh0LCBOVUxMKTsKKwlpZiAoaCkgIHsKKwkJc3RydWN0IGlwX2Nvbm50cmFjayAqc2libGluZyA9IHR1cGxlaGFzaF90b19jdHJhY2soaCk7CisJCURFQlVHUCgic2V0dGluZyB0aW1lb3V0IG9mIGNvbm50cmFjayAlcCB0byAwXG4iLCBzaWJsaW5nKTsKKwkJc2libGluZy0+cHJvdG8uZ3JlLnRpbWVvdXQgPSAwOworCQlzaWJsaW5nLT5wcm90by5ncmUuc3RyZWFtX3RpbWVvdXQgPSAwOworCQlpZiAoZGVsX3RpbWVyKCZzaWJsaW5nLT50aW1lb3V0KSkKKwkJCXNpYmxpbmctPnRpbWVvdXQuZnVuY3Rpb24oKHVuc2lnbmVkIGxvbmcpc2libGluZyk7CisJCWlwX2Nvbm50cmFja19wdXQoc2libGluZyk7CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCWV4cCA9IGlwX2Nvbm50cmFja19leHBlY3RfZmluZCh0KTsKKwkJaWYgKGV4cCkgeworCQkJREVCVUdQKCJ1bmV4cGVjdF9yZWxhdGVkIG9mIGV4cGVjdCAlcFxuIiwgZXhwKTsKKwkJCWlwX2Nvbm50cmFja191bmV4cGVjdF9yZWxhdGVkKGV4cCk7CisJCQlpcF9jb25udHJhY2tfZXhwZWN0X3B1dChleHApOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworCisvKiB0aW1lb3V0IEdSRSBkYXRhIGNvbm5lY3Rpb25zICovCitzdGF0aWMgdm9pZCBwcHRwX2Rlc3Ryb3lfc2libGluZ3Moc3RydWN0IGlwX2Nvbm50cmFjayAqY3QpCit7CisJc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSB0OworCisJLyogU2luY2UgY3QtPnNpYmxpbmdfbGlzdCBoYXMgbGl0ZXJhbGx5IHJ1c3RlZCBhd2F5IGluIDIuNi4xMSwgCisJICogd2Ugbm93IG5lZWQgYW5vdGhlciB3YXkgdG8gZmluZCBvdXQgYWJvdXQgb3VyIHNpYmxpbmcKKwkgKiBjb250cmFjayBhbmQgZXhwZWN0cy4uLiAtSFcgKi8KKworCS8qIHRyeSBvcmlnaW5hbCAocG5zLT5wYWMpIHR1cGxlICovCisJbWVtY3B5KCZ0LCAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLCBzaXplb2YodCkpOworCXQuZHN0LnByb3RvbnVtID0gSVBQUk9UT19HUkU7CisJdC5zcmMudS5ncmUua2V5ID0gaHRvbnMoY3QtPmhlbHAuY3RfcHB0cF9pbmZvLnBuc19jYWxsX2lkKTsKKwl0LmRzdC51LmdyZS5rZXkgPSBodG9ucyhjdC0+aGVscC5jdF9wcHRwX2luZm8ucGFjX2NhbGxfaWQpOworCisJaWYgKCFkZXN0cm95X3NpYmxpbmdfb3JfZXhwKCZ0KSkKKwkJREVCVUdQKCJmYWlsZWQgdG8gdGltZW91dCBvcmlnaW5hbCBwbnMtPnBhYyBjdC9leHBcbiIpOworCisJLyogdHJ5IHJlcGx5IChwYWMtPnBucykgdHVwbGUgKi8KKwltZW1jcHkoJnQsICZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUsIHNpemVvZih0KSk7CisJdC5kc3QucHJvdG9udW0gPSBJUFBST1RPX0dSRTsKKwl0LnNyYy51LmdyZS5rZXkgPSBodG9ucyhjdC0+aGVscC5jdF9wcHRwX2luZm8ucGFjX2NhbGxfaWQpOworCXQuZHN0LnUuZ3JlLmtleSA9IGh0b25zKGN0LT5oZWxwLmN0X3BwdHBfaW5mby5wbnNfY2FsbF9pZCk7CisKKwlpZiAoIWRlc3Ryb3lfc2libGluZ19vcl9leHAoJnQpKQorCQlERUJVR1AoImZhaWxlZCB0byB0aW1lb3V0IHJlcGx5IHBhYy0+cG5zIGN0L2V4cFxuIik7Cit9CisKKy8qIGV4cGVjdCBHUkUgY29ubmVjdGlvbnMgKFBOUy0+UEFDIGFuZCBQQUMtPlBOUyBkaXJlY3Rpb24pICovCitzdGF0aWMgaW5saW5lIGludAorZXhwX2dyZShzdHJ1Y3QgaXBfY29ubnRyYWNrICptYXN0ZXIsCisJdV9pbnQzMl90IHNlcSwKKwlfX2JlMTYgY2FsbGlkLAorCV9fYmUxNiBwZWVyX2NhbGxpZCkKK3sKKwlzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlIGludl90dXBsZTsKKwlzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlIGV4cF90dXBsZXNbXSA9IHsKKwkJLyogdHVwbGUgaW4gb3JpZ2luYWwgZGlyZWN0aW9uLCBQTlMtPlBBQyAqLworCQl7IC5zcmMgPSB7IC5pcCA9IG1hc3Rlci0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuc3JjLmlwLAorCQkJICAgLnUgPSB7IC5ncmUgPSB7IC5rZXkgPSBwZWVyX2NhbGxpZCB9IH0KKwkJCSB9LAorCQkgIC5kc3QgPSB7IC5pcCA9IG1hc3Rlci0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuZHN0LmlwLAorCQkJICAgLnUgPSB7IC5ncmUgPSB7IC5rZXkgPSBjYWxsaWQgfSB9LAorCQkJICAgLnByb3RvbnVtID0gSVBQUk9UT19HUkUKKwkJCSB9LAorCQkgfSwKKwkJLyogdHVwbGUgaW4gcmVwbHkgZGlyZWN0aW9uLCBQQUMtPlBOUyAqLworCQl7IC5zcmMgPSB7IC5pcCA9IG1hc3Rlci0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUuc3JjLmlwLAorCQkJICAgLnUgPSB7IC5ncmUgPSB7IC5rZXkgPSBjYWxsaWQgfSB9CisJCQkgfSwKKwkJICAuZHN0ID0geyAuaXAgPSBtYXN0ZXItPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlLmRzdC5pcCwKKwkJCSAgIC51ID0geyAuZ3JlID0geyAua2V5ID0gcGVlcl9jYWxsaWQgfSB9LAorCQkJICAgLnByb3RvbnVtID0gSVBQUk9UT19HUkUKKwkJCSB9LAorCQkgfQorCX07CisJc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cF9vcmlnLCAqZXhwX3JlcGx5OworCWludCByZXQgPSAxOworCisJZXhwX29yaWcgPSBpcF9jb25udHJhY2tfZXhwZWN0X2FsbG9jKG1hc3Rlcik7CisJaWYgKGV4cF9vcmlnID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJZXhwX3JlcGx5ID0gaXBfY29ubnRyYWNrX2V4cGVjdF9hbGxvYyhtYXN0ZXIpOworCWlmIChleHBfcmVwbHkgPT0gTlVMTCkKKwkJZ290byBvdXRfcHV0X29yaWc7CisKKwltZW1jcHkoJmV4cF9vcmlnLT50dXBsZSwgJmV4cF90dXBsZXNbMF0sIHNpemVvZihleHBfb3JpZy0+dHVwbGUpKTsKKworCWV4cF9vcmlnLT5tYXNrLnNyYy5pcCA9IDB4ZmZmZmZmZmY7CisJZXhwX29yaWctPm1hc2suc3JjLnUuYWxsID0gMDsKKwlleHBfb3JpZy0+bWFzay5kc3QudS5hbGwgPSAwOworCWV4cF9vcmlnLT5tYXNrLmRzdC51LmdyZS5rZXkgPSBodG9ucygweGZmZmYpOworCWV4cF9vcmlnLT5tYXNrLmRzdC5pcCA9IDB4ZmZmZmZmZmY7CisJZXhwX29yaWctPm1hc2suZHN0LnByb3RvbnVtID0gMHhmZjsKKwkJCisJZXhwX29yaWctPm1hc3RlciA9IG1hc3RlcjsKKwlleHBfb3JpZy0+ZXhwZWN0Zm4gPSBwcHRwX2V4cGVjdGZuOworCWV4cF9vcmlnLT5mbGFncyA9IDA7CisKKwlleHBfb3JpZy0+ZGlyID0gSVBfQ1RfRElSX09SSUdJTkFMOworCisJLyogYm90aCBleHBlY3RhdGlvbnMgYXJlIGlkZW50aWNhbCBhcGFydCBmcm9tIHR1cGxlICovCisJbWVtY3B5KGV4cF9yZXBseSwgZXhwX29yaWcsIHNpemVvZigqZXhwX3JlcGx5KSk7CisJbWVtY3B5KCZleHBfcmVwbHktPnR1cGxlLCAmZXhwX3R1cGxlc1sxXSwgc2l6ZW9mKGV4cF9yZXBseS0+dHVwbGUpKTsKKworCWV4cF9yZXBseS0+ZGlyID0gIWV4cF9vcmlnLT5kaXI7CisKKwlpZiAoaXBfbmF0X3BwdHBfaG9va19leHBfZ3JlKQorCQlyZXQgPSBpcF9uYXRfcHB0cF9ob29rX2V4cF9ncmUoZXhwX29yaWcsIGV4cF9yZXBseSk7CisJZWxzZSB7CisKKwkJREVCVUdQKCJjYWxsaW5nIGV4cGVjdF9yZWxhdGVkIFBOUy0+UEFDIik7CisJCURVTVBfVFVQTEUoJmV4cF9vcmlnLT50dXBsZSk7CisKKwkJaWYgKGlwX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZChleHBfb3JpZykgIT0gMCkgeworCQkJREVCVUdQKCJjYW5ub3QgZXhwZWN0X3JlbGF0ZWQoKVxuIik7CisJCQlnb3RvIG91dF9wdXRfYm90aDsKKwkJfQorCisJCURFQlVHUCgiY2FsbGluZyBleHBlY3RfcmVsYXRlZCBQQUMtPlBOUyIpOworCQlEVU1QX1RVUExFKCZleHBfcmVwbHktPnR1cGxlKTsKKworCQlpZiAoaXBfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKGV4cF9yZXBseSkgIT0gMCkgeworCQkJREVCVUdQKCJjYW5ub3QgZXhwZWN0X3JlbGF0ZWQoKVxuIik7CisJCQlnb3RvIG91dF91bmV4cGVjdF9vcmlnOworCQl9CisKKwkJLyogQWRkIEdSRSBrZXltYXAgZW50cmllcyAqLworCQlpZiAoaXBfY3RfZ3JlX2tleW1hcF9hZGQobWFzdGVyLCAmZXhwX3JlcGx5LT50dXBsZSwgMCkgIT0gMCkgeworCQkJREVCVUdQKCJjYW5ub3Qga2V5bWFwX2FkZCgpIGV4cFxuIik7CisJCQlnb3RvIG91dF91bmV4cGVjdF9ib3RoOworCQl9CisKKwkJaW52ZXJ0X3R1cGxlcHIoJmludl90dXBsZSwgJmV4cF9yZXBseS0+dHVwbGUpOworCQlpZiAoaXBfY3RfZ3JlX2tleW1hcF9hZGQobWFzdGVyLCAmaW52X3R1cGxlLCAxKSAhPSAwKSB7CisJCQlpcF9jdF9ncmVfa2V5bWFwX2Rlc3Ryb3kobWFzdGVyKTsKKwkJCURFQlVHUCgiY2Fubm90IGtleW1hcF9hZGQoKSBleHBfaW52XG4iKTsKKwkJCWdvdG8gb3V0X3VuZXhwZWN0X2JvdGg7CisJCX0KKwkJcmV0ID0gMDsKKwl9CisKK291dF9wdXRfYm90aDoKKwlpcF9jb25udHJhY2tfZXhwZWN0X3B1dChleHBfcmVwbHkpOworb3V0X3B1dF9vcmlnOgorCWlwX2Nvbm50cmFja19leHBlY3RfcHV0KGV4cF9vcmlnKTsKK291dDoKKwlyZXR1cm4gcmV0OworCitvdXRfdW5leHBlY3RfYm90aDoKKwlpcF9jb25udHJhY2tfdW5leHBlY3RfcmVsYXRlZChleHBfcmVwbHkpOworb3V0X3VuZXhwZWN0X29yaWc6CisJaXBfY29ubnRyYWNrX3VuZXhwZWN0X3JlbGF0ZWQoZXhwX29yaWcpOworCWdvdG8gb3V0X3B1dF9ib3RoOworfQorCitzdGF0aWMgaW5saW5lIGludCAKK3BwdHBfaW5ib3VuZF9wa3Qoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkgc3RydWN0IHRjcGhkciAqdGNwaCwKKwkJIHVuc2lnbmVkIGludCBuZXh0aGRyX29mZiwKKwkJIHVuc2lnbmVkIGludCBkYXRhbGVuLAorCQkgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCSBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbykKK3sKKwlzdHJ1Y3QgUHB0cENvbnRyb2xIZWFkZXIgX2N0bGgsICpjdGxoOworCXVuc2lnbmVkIGludCByZXFsZW47CisJdW5pb24gcHB0cF9jdHJsX3VuaW9uIF9wcHRwUmVxLCAqcHB0cFJlcTsKKwlzdHJ1Y3QgaXBfY3RfcHB0cF9tYXN0ZXIgKmluZm8gPSAmY3QtPmhlbHAuY3RfcHB0cF9pbmZvOworCXVfaW50MTZfdCBtc2c7CisJX19iZTE2ICpjaWQsICpwY2lkOworCXVfaW50MzJfdCBzZXE7CQorCisJY3RsaCA9IHNrYl9oZWFkZXJfcG9pbnRlcigqcHNrYiwgbmV4dGhkcl9vZmYsIHNpemVvZihfY3RsaCksICZfY3RsaCk7CisJaWYgKCFjdGxoKSB7CisJCURFQlVHUCgiZXJyb3IgZHVyaW5nIHNrYl9oZWFkZXJfcG9pbnRlclxuIik7CisJCXJldHVybiBORl9BQ0NFUFQ7CisJfQorCW5leHRoZHJfb2ZmICs9IHNpemVvZihfY3RsaCk7CisJZGF0YWxlbiAtPSBzaXplb2YoX2N0bGgpOworCisJcmVxbGVuID0gZGF0YWxlbjsKKwlpZiAocmVxbGVuID4gc2l6ZW9mKCpwcHRwUmVxKSkKKwkJcmVxbGVuID0gc2l6ZW9mKCpwcHRwUmVxKTsKKwlwcHRwUmVxID0gc2tiX2hlYWRlcl9wb2ludGVyKCpwc2tiLCBuZXh0aGRyX29mZiwgcmVxbGVuLCAmX3BwdHBSZXEpOworCWlmICghcHB0cFJlcSkgeworCQlERUJVR1AoImVycm9yIGR1cmluZyBza2JfaGVhZGVyX3BvaW50ZXJcbiIpOworCQlyZXR1cm4gTkZfQUNDRVBUOworCX0KKworCW1zZyA9IG50b2hzKGN0bGgtPm1lc3NhZ2VUeXBlKTsKKwlERUJVR1AoImluYm91bmQgY29udHJvbCBtZXNzYWdlICVzXG4iLCBwcHRwX21zZ19uYW1lW21zZ10pOworCisJc3dpdGNoIChtc2cpIHsKKwljYXNlIFBQVFBfU1RBUlRfU0VTU0lPTl9SRVBMWToKKwkJaWYgKHJlcWxlbiA8IHNpemVvZihfcHB0cFJlcS5zcmVwKSkgeworCQkJREVCVUdQKCIlczogc2hvcnQgcGFja2V0XG4iLCBwcHRwX21zZ19uYW1lW21zZ10pOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBzZXJ2ZXIgY29uZmlybXMgbmV3IGNvbnRyb2wgc2Vzc2lvbiAqLworCQlpZiAoaW5mby0+c3N0YXRlIDwgUFBUUF9TRVNTSU9OX1JFUVVFU1RFRCkgeworCQkJREVCVUdQKCIlcyB3aXRob3V0IFNUQVJUX1NFU1NfUkVRVUVTVFxuIiwKKwkJCQlwcHRwX21zZ19uYW1lW21zZ10pOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHBwdHBSZXEtPnNyZXAucmVzdWx0Q29kZSA9PSBQUFRQX1NUQVJUX09LKQorCQkJaW5mby0+c3N0YXRlID0gUFBUUF9TRVNTSU9OX0NPTkZJUk1FRDsKKwkJZWxzZSAKKwkJCWluZm8tPnNzdGF0ZSA9IFBQVFBfU0VTU0lPTl9FUlJPUjsKKwkJYnJlYWs7CisKKwljYXNlIFBQVFBfU1RPUF9TRVNTSU9OX1JFUExZOgorCQlpZiAocmVxbGVuIDwgc2l6ZW9mKF9wcHRwUmVxLnN0cmVwKSkgeworCQkJREVCVUdQKCIlczogc2hvcnQgcGFja2V0XG4iLCBwcHRwX21zZ19uYW1lW21zZ10pOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBzZXJ2ZXIgY29uZmlybXMgZW5kIG9mIGNvbnRyb2wgc2Vzc2lvbiAqLworCQlpZiAoaW5mby0+c3N0YXRlID4gUFBUUF9TRVNTSU9OX1NUT1BSRVEpIHsKKwkJCURFQlVHUCgiJXMgd2l0aG91dCBTVE9QX1NFU1NfUkVRVUVTVFxuIiwKKwkJCQlwcHRwX21zZ19uYW1lW21zZ10pOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHBwdHBSZXEtPnN0cmVwLnJlc3VsdENvZGUgPT0gUFBUUF9TVE9QX09LKQorCQkJaW5mby0+c3N0YXRlID0gUFBUUF9TRVNTSU9OX05PTkU7CisJCWVsc2UKKwkJCWluZm8tPnNzdGF0ZSA9IFBQVFBfU0VTU0lPTl9FUlJPUjsKKwkJYnJlYWs7CisKKwljYXNlIFBQVFBfT1VUX0NBTExfUkVQTFk6CisJCWlmIChyZXFsZW4gPCBzaXplb2YoX3BwdHBSZXEub2NhY2spKSB7CisJCQlERUJVR1AoIiVzOiBzaG9ydCBwYWNrZXRcbiIsIHBwdHBfbXNnX25hbWVbbXNnXSk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIHNlcnZlciBhY2NlcHRlZCBjYWxsLCB3ZSBub3cgZXhwZWN0IEdSRSBmcmFtZXMgKi8KKwkJaWYgKGluZm8tPnNzdGF0ZSAhPSBQUFRQX1NFU1NJT05fQ09ORklSTUVEKSB7CisJCQlERUJVR1AoIiVzIGJ1dCBubyBzZXNzaW9uXG4iLCBwcHRwX21zZ19uYW1lW21zZ10pOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGluZm8tPmNzdGF0ZSAhPSBQUFRQX0NBTExfT1VUX1JFUSAmJgorCQkgICAgaW5mby0+Y3N0YXRlICE9IFBQVFBfQ0FMTF9PVVRfQ09ORikgeworCQkJREVCVUdQKCIlcyB3aXRob3V0IE9VVENBTExfUkVRXG4iLCBwcHRwX21zZ19uYW1lW21zZ10pOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHBwdHBSZXEtPm9jYWNrLnJlc3VsdENvZGUgIT0gUFBUUF9PVVRDQUxMX0NPTk5FQ1QpIHsKKwkJCWluZm8tPmNzdGF0ZSA9IFBQVFBfQ0FMTF9OT05FOworCQkJYnJlYWs7CisJCX0KKworCQljaWQgPSAmcHB0cFJlcS0+b2NhY2suY2FsbElEOworCQlwY2lkID0gJnBwdHBSZXEtPm9jYWNrLnBlZXJzQ2FsbElEOworCisJCWluZm8tPnBhY19jYWxsX2lkID0gbnRvaHMoKmNpZCk7CisJCQorCQlpZiAoaHRvbnMoaW5mby0+cG5zX2NhbGxfaWQpICE9ICpwY2lkKSB7CisJCQlERUJVR1AoIiVzIGZvciB1bmtub3duIGNhbGxpZCAldVxuIiwKKwkJCQlwcHRwX21zZ19uYW1lW21zZ10sIG50b2hzKCpwY2lkKSk7CisJCQlicmVhazsKKwkJfQorCisJCURFQlVHUCgiJXMsIENJRD0lWCwgUENJRD0lWFxuIiwgcHB0cF9tc2dfbmFtZVttc2ddLCAKKwkJCW50b2hzKCpjaWQpLCBudG9ocygqcGNpZCkpOworCQkKKwkJaW5mby0+Y3N0YXRlID0gUFBUUF9DQUxMX09VVF9DT05GOworCisJCXNlcSA9IG50b2hsKHRjcGgtPnNlcSkgKyBzaXplb2Yoc3RydWN0IHBwdHBfcGt0X2hkcikKKwkJCQkgICAgICAgKyBzaXplb2Yoc3RydWN0IFBwdHBDb250cm9sSGVhZGVyKQorCQkJCSAgICAgICArICgodm9pZCAqKXBjaWQgLSAodm9pZCAqKXBwdHBSZXEpOworCQkJCisJCWlmIChleHBfZ3JlKGN0LCBzZXEsICpjaWQsICpwY2lkKSAhPSAwKQorCQkJcHJpbnRrKCJpcF9jb25udHJhY2tfcHB0cDogZXJyb3IgZHVyaW5nIGV4cF9ncmVcbiIpOworCQlicmVhazsKKworCWNhc2UgUFBUUF9JTl9DQUxMX1JFUVVFU1Q6CisJCWlmIChyZXFsZW4gPCBzaXplb2YoX3BwdHBSZXEuaWNhY2spKSB7CisJCQlERUJVR1AoIiVzOiBzaG9ydCBwYWNrZXRcbiIsIHBwdHBfbXNnX25hbWVbbXNnXSk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIHNlcnZlciB0ZWxscyB1cyBhYm91dCBpbmNvbWluZyBjYWxsIHJlcXVlc3QgKi8KKwkJaWYgKGluZm8tPnNzdGF0ZSAhPSBQUFRQX1NFU1NJT05fQ09ORklSTUVEKSB7CisJCQlERUJVR1AoIiVzIGJ1dCBubyBzZXNzaW9uXG4iLCBwcHRwX21zZ19uYW1lW21zZ10pOworCQkJYnJlYWs7CisJCX0KKwkJcGNpZCA9ICZwcHRwUmVxLT5pY2Fjay5wZWVyc0NhbGxJRDsKKwkJREVCVUdQKCIlcywgUENJRD0lWFxuIiwgcHB0cF9tc2dfbmFtZVttc2ddLCBudG9ocygqcGNpZCkpOworCQlpbmZvLT5jc3RhdGUgPSBQUFRQX0NBTExfSU5fUkVROworCQlpbmZvLT5wYWNfY2FsbF9pZCA9IG50b2hzKCpwY2lkKTsKKwkJYnJlYWs7CisKKwljYXNlIFBQVFBfSU5fQ0FMTF9DT05ORUNUOgorCQlpZiAocmVxbGVuIDwgc2l6ZW9mKF9wcHRwUmVxLmljY29uKSkgeworCQkJREVCVUdQKCIlczogc2hvcnQgcGFja2V0XG4iLCBwcHRwX21zZ19uYW1lW21zZ10pOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBzZXJ2ZXIgdGVsbHMgdXMgYWJvdXQgaW5jb21pbmcgY2FsbCBlc3RhYmxpc2hlZCAqLworCQlpZiAoaW5mby0+c3N0YXRlICE9IFBQVFBfU0VTU0lPTl9DT05GSVJNRUQpIHsKKwkJCURFQlVHUCgiJXMgYnV0IG5vIHNlc3Npb25cbiIsIHBwdHBfbXNnX25hbWVbbXNnXSk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoaW5mby0+c3N0YXRlICE9IFBQVFBfQ0FMTF9JTl9SRVAKKwkJICAgICYmIGluZm8tPnNzdGF0ZSAhPSBQUFRQX0NBTExfSU5fQ09ORikgeworCQkJREVCVUdQKCIlcyBidXQgbmV2ZXIgc2VudCBJTl9DQUxMX1JFUExZXG4iLAorCQkJCXBwdHBfbXNnX25hbWVbbXNnXSk7CisJCQlicmVhazsKKwkJfQorCisJCXBjaWQgPSAmcHB0cFJlcS0+aWNjb24ucGVlcnNDYWxsSUQ7CisJCWNpZCA9ICZpbmZvLT5wYWNfY2FsbF9pZDsKKworCQlpZiAoaW5mby0+cG5zX2NhbGxfaWQgIT0gbnRvaHMoKnBjaWQpKSB7CisJCQlERUJVR1AoIiVzIGZvciB1bmtub3duIENhbGxJRCAldVxuIiwgCisJCQkJcHB0cF9tc2dfbmFtZVttc2ddLCBudG9ocygqcGNpZCkpOworCQkJYnJlYWs7CisJCX0KKworCQlERUJVR1AoIiVzLCBQQ0lEPSVYXG4iLCBwcHRwX21zZ19uYW1lW21zZ10sIG50b2hzKCpwY2lkKSk7CisJCWluZm8tPmNzdGF0ZSA9IFBQVFBfQ0FMTF9JTl9DT05GOworCisJCS8qIHdlIGV4cGVjdCBhIEdSRSBjb25uZWN0aW9uIGZyb20gUEFDIHRvIFBOUyAqLworCQlzZXEgPSBudG9obCh0Y3BoLT5zZXEpICsgc2l6ZW9mKHN0cnVjdCBwcHRwX3BrdF9oZHIpCisJCQkJICAgICAgICsgc2l6ZW9mKHN0cnVjdCBQcHRwQ29udHJvbEhlYWRlcikKKwkJCQkgICAgICAgKyAoKHZvaWQgKilwY2lkIC0gKHZvaWQgKilwcHRwUmVxKTsKKwkJCQorCQlpZiAoZXhwX2dyZShjdCwgc2VxLCAqY2lkLCAqcGNpZCkgIT0gMCkKKwkJCXByaW50aygiaXBfY29ubnRyYWNrX3BwdHA6IGVycm9yIGR1cmluZyBleHBfZ3JlXG4iKTsKKworCQlicmVhazsKKworCWNhc2UgUFBUUF9DQUxMX0RJU0NPTk5FQ1RfTk9USUZZOgorCQlpZiAocmVxbGVuIDwgc2l6ZW9mKF9wcHRwUmVxLmRpc2MpKSB7CisJCQlERUJVR1AoIiVzOiBzaG9ydCBwYWNrZXRcbiIsIHBwdHBfbXNnX25hbWVbbXNnXSk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIHNlcnZlciBjb25maXJtcyBkaXNjb25uZWN0ICovCisJCWNpZCA9ICZwcHRwUmVxLT5kaXNjLmNhbGxJRDsKKwkJREVCVUdQKCIlcywgQ0lEPSVYXG4iLCBwcHRwX21zZ19uYW1lW21zZ10sIG50b2hzKCpjaWQpKTsKKwkJaW5mby0+Y3N0YXRlID0gUFBUUF9DQUxMX05PTkU7CisKKwkJLyogdW50cmFjayB0aGlzIGNhbGwgaWQsIHVuZXhwZWN0IEdSRSBwYWNrZXRzICovCisJCXBwdHBfZGVzdHJveV9zaWJsaW5ncyhjdCk7CisJCWJyZWFrOworCisJY2FzZSBQUFRQX1dBTl9FUlJPUl9OT1RJRlk6CisJCWJyZWFrOworCisJY2FzZSBQUFRQX0VDSE9fUkVRVUVTVDoKKwljYXNlIFBQVFBfRUNIT19SRVBMWToKKwkJLyogSSBkb24ndCBoYXZlIHRvIGV4cGxhaW4gdGhlc2UgOykgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREVCVUdQKCJpbnZhbGlkICVzIChUWT0lZClcbiIsIChtc2cgPD0gUFBUUF9NU0dfTUFYKQorCQkJPyBwcHRwX21zZ19uYW1lW21zZ106cHB0cF9tc2dfbmFtZVswXSwgbXNnKTsKKwkJYnJlYWs7CisJfQorCisKKwlpZiAoaXBfbmF0X3BwdHBfaG9va19pbmJvdW5kKQorCQlyZXR1cm4gaXBfbmF0X3BwdHBfaG9va19pbmJvdW5kKHBza2IsIGN0LCBjdGluZm8sIGN0bGgsCisJCQkJCQlwcHRwUmVxKTsKKworCXJldHVybiBORl9BQ0NFUFQ7CisKK30KKworc3RhdGljIGlubGluZSBpbnQKK3BwdHBfb3V0Ym91bmRfcGt0KHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJICBzdHJ1Y3QgdGNwaGRyICp0Y3BoLAorCQkgIHVuc2lnbmVkIGludCBuZXh0aGRyX29mZiwKKwkJICB1bnNpZ25lZCBpbnQgZGF0YWxlbiwKKwkJICBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbykKK3sKKwlzdHJ1Y3QgUHB0cENvbnRyb2xIZWFkZXIgX2N0bGgsICpjdGxoOworCXVuc2lnbmVkIGludCByZXFsZW47CisJdW5pb24gcHB0cF9jdHJsX3VuaW9uIF9wcHRwUmVxLCAqcHB0cFJlcTsKKwlzdHJ1Y3QgaXBfY3RfcHB0cF9tYXN0ZXIgKmluZm8gPSAmY3QtPmhlbHAuY3RfcHB0cF9pbmZvOworCXVfaW50MTZfdCBtc2c7CisJX19iZTE2ICpjaWQsICpwY2lkOworCisJY3RsaCA9IHNrYl9oZWFkZXJfcG9pbnRlcigqcHNrYiwgbmV4dGhkcl9vZmYsIHNpemVvZihfY3RsaCksICZfY3RsaCk7CisJaWYgKCFjdGxoKQorCQlyZXR1cm4gTkZfQUNDRVBUOworCW5leHRoZHJfb2ZmICs9IHNpemVvZihfY3RsaCk7CisJZGF0YWxlbiAtPSBzaXplb2YoX2N0bGgpOworCQorCXJlcWxlbiA9IGRhdGFsZW47CisJaWYgKHJlcWxlbiA+IHNpemVvZigqcHB0cFJlcSkpCisJCXJlcWxlbiA9IHNpemVvZigqcHB0cFJlcSk7CisJcHB0cFJlcSA9IHNrYl9oZWFkZXJfcG9pbnRlcigqcHNrYiwgbmV4dGhkcl9vZmYsIHJlcWxlbiwgJl9wcHRwUmVxKTsKKwlpZiAoIXBwdHBSZXEpCisJCXJldHVybiBORl9BQ0NFUFQ7CisKKwltc2cgPSBudG9ocyhjdGxoLT5tZXNzYWdlVHlwZSk7CisJREVCVUdQKCJvdXRib3VuZCBjb250cm9sIG1lc3NhZ2UgJXNcbiIsIHBwdHBfbXNnX25hbWVbbXNnXSk7CisKKwlzd2l0Y2ggKG1zZykgeworCWNhc2UgUFBUUF9TVEFSVF9TRVNTSU9OX1JFUVVFU1Q6CisJCS8qIGNsaWVudCByZXF1ZXN0cyBmb3IgbmV3IGNvbnRyb2wgc2Vzc2lvbiAqLworCQlpZiAoaW5mby0+c3N0YXRlICE9IFBQVFBfU0VTU0lPTl9OT05FKSB7CisJCQlERUJVR1AoIiVzIGJ1dCB3ZSBhbHJlYWR5IGhhdmUgb25lIiwKKwkJCQlwcHRwX21zZ19uYW1lW21zZ10pOworCQl9CisJCWluZm8tPnNzdGF0ZSA9IFBQVFBfU0VTU0lPTl9SRVFVRVNURUQ7CisJCWJyZWFrOworCWNhc2UgUFBUUF9TVE9QX1NFU1NJT05fUkVRVUVTVDoKKwkJLyogY2xpZW50IHJlcXVlc3RzIGVuZCBvZiBjb250cm9sIHNlc3Npb24gKi8KKwkJaW5mby0+c3N0YXRlID0gUFBUUF9TRVNTSU9OX1NUT1BSRVE7CisJCWJyZWFrOworCisJY2FzZSBQUFRQX09VVF9DQUxMX1JFUVVFU1Q6CisJCWlmIChyZXFsZW4gPCBzaXplb2YoX3BwdHBSZXEub2NyZXEpKSB7CisJCQlERUJVR1AoIiVzOiBzaG9ydCBwYWNrZXRcbiIsIHBwdHBfbXNnX25hbWVbbXNnXSk7CisJCQkvKiBGSVhNRTogYnJlYWs7ICovCisJCX0KKworCQkvKiBjbGllbnQgaW5pdGlhdGluZyBjb25uZWN0aW9uIHRvIHNlcnZlciAqLworCQlpZiAoaW5mby0+c3N0YXRlICE9IFBQVFBfU0VTU0lPTl9DT05GSVJNRUQpIHsKKwkJCURFQlVHUCgiJXMgYnV0IG5vIHNlc3Npb25cbiIsCisJCQkJcHB0cF9tc2dfbmFtZVttc2ddKTsKKwkJCWJyZWFrOworCQl9CisJCWluZm8tPmNzdGF0ZSA9IFBQVFBfQ0FMTF9PVVRfUkVROworCQkvKiB0cmFjayBQTlMgY2FsbCBpZCAqLworCQljaWQgPSAmcHB0cFJlcS0+b2NyZXEuY2FsbElEOworCQlERUJVR1AoIiVzLCBDSUQ9JVhcbiIsIHBwdHBfbXNnX25hbWVbbXNnXSwgbnRvaHMoKmNpZCkpOworCQlpbmZvLT5wbnNfY2FsbF9pZCA9IG50b2hzKCpjaWQpOworCQlicmVhazsKKwljYXNlIFBQVFBfSU5fQ0FMTF9SRVBMWToKKwkJaWYgKHJlcWxlbiA8IHNpemVvZihfcHB0cFJlcS5pY2FjaykpIHsKKwkJCURFQlVHUCgiJXM6IHNob3J0IHBhY2tldFxuIiwgcHB0cF9tc2dfbmFtZVttc2ddKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogY2xpZW50IGFuc3dlcnMgaW5jb21pbmcgY2FsbCAqLworCQlpZiAoaW5mby0+Y3N0YXRlICE9IFBQVFBfQ0FMTF9JTl9SRVEKKwkJICAgICYmIGluZm8tPmNzdGF0ZSAhPSBQUFRQX0NBTExfSU5fUkVQKSB7CisJCQlERUJVR1AoIiVzIHdpdGhvdXQgaW5jYWxsX3JlcVxuIiwgCisJCQkJcHB0cF9tc2dfbmFtZVttc2ddKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChwcHRwUmVxLT5pY2Fjay5yZXN1bHRDb2RlICE9IFBQVFBfSU5DQUxMX0FDQ0VQVCkgeworCQkJaW5mby0+Y3N0YXRlID0gUFBUUF9DQUxMX05PTkU7CisJCQlicmVhazsKKwkJfQorCQlwY2lkID0gJnBwdHBSZXEtPmljYWNrLnBlZXJzQ2FsbElEOworCQlpZiAoaW5mby0+cGFjX2NhbGxfaWQgIT0gbnRvaHMoKnBjaWQpKSB7CisJCQlERUJVR1AoIiVzIGZvciB1bmtub3duIGNhbGwgJXVcbiIsIAorCQkJCXBwdHBfbXNnX25hbWVbbXNnXSwgbnRvaHMoKnBjaWQpKTsKKwkJCWJyZWFrOworCQl9CisJCURFQlVHUCgiJXMsIENJRD0lWFxuIiwgcHB0cF9tc2dfbmFtZVttc2ddLCBudG9ocygqcGNpZCkpOworCQkvKiBwYXJ0IHR3byBvZiB0aGUgdGhyZWUtd2F5IGhhbmRzaGFrZSAqLworCQlpbmZvLT5jc3RhdGUgPSBQUFRQX0NBTExfSU5fUkVQOworCQlpbmZvLT5wbnNfY2FsbF9pZCA9IG50b2hzKHBwdHBSZXEtPmljYWNrLmNhbGxJRCk7CisJCWJyZWFrOworCisJY2FzZSBQUFRQX0NBTExfQ0xFQVJfUkVRVUVTVDoKKwkJLyogY2xpZW50IHJlcXVlc3RzIGhhbmd1cCBvZiBjYWxsICovCisJCWlmIChpbmZvLT5zc3RhdGUgIT0gUFBUUF9TRVNTSU9OX0NPTkZJUk1FRCkgeworCQkJREVCVUdQKCJDTEVBUl9DQUxMIGJ1dCBubyBzZXNzaW9uXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCS8qIEZVVFVSRTogaXRlcmF0ZSBvdmVyIGFsbCBjYWxscyBhbmQgY2hlY2sgaWYKKwkJICogY2FsbCBJRCBpcyB2YWxpZC4gIFdlIGRvbid0IGRvIHRoaXMgd2l0aG91dCBuZXduYXQsCisJCSAqIGJlY2F1c2Ugd2Ugb25seSBrbm93IGFib3V0IGxhc3QgY2FsbCAqLworCQlpbmZvLT5jc3RhdGUgPSBQUFRQX0NBTExfQ0xFQVJfUkVROworCQlicmVhazsKKwljYXNlIFBQVFBfU0VUX0xJTktfSU5GTzoKKwkJYnJlYWs7CisJY2FzZSBQUFRQX0VDSE9fUkVRVUVTVDoKKwljYXNlIFBQVFBfRUNIT19SRVBMWToKKwkJLyogSSBkb24ndCBoYXZlIHRvIGV4cGxhaW4gdGhlc2UgOykgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREVCVUdQKCJpbnZhbGlkICVzIChUWT0lZClcbiIsIChtc2cgPD0gUFBUUF9NU0dfTUFYKT8gCisJCQlwcHRwX21zZ19uYW1lW21zZ106cHB0cF9tc2dfbmFtZVswXSwgbXNnKTsKKwkJLyogdW5rbm93bjogbm8gbmVlZCB0byBjcmVhdGUgR1JFIG1hc3EgdGFibGUgZW50cnkgKi8KKwkJYnJlYWs7CisJfQorCQorCWlmIChpcF9uYXRfcHB0cF9ob29rX291dGJvdW5kKQorCQlyZXR1cm4gaXBfbmF0X3BwdHBfaG9va19vdXRib3VuZChwc2tiLCBjdCwgY3RpbmZvLCBjdGxoLAorCQkJCQkJIHBwdHBSZXEpOworCisJcmV0dXJuIE5GX0FDQ0VQVDsKK30KKworCisvKiB0cmFjayBjYWxsZXIgaWQgaW5zaWRlIGNvbnRyb2wgY29ubmVjdGlvbiwgY2FsbCBleHBlY3RfcmVsYXRlZCAqLworc3RhdGljIGludCAKK2Nvbm50cmFja19wcHRwX2hlbHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkgICAgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKQorCit7CisJc3RydWN0IHBwdHBfcGt0X2hkciBfcHB0cGgsICpwcHRwaDsKKwlzdHJ1Y3QgdGNwaGRyIF90Y3BoLCAqdGNwaDsKKwl1X2ludDMyX3QgdGNwbGVuID0gKCpwc2tiKS0+bGVuIC0gKCpwc2tiKS0+bmguaXBoLT5paGwgKiA0OworCXVfaW50MzJfdCBkYXRhbGVuOworCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisJc3RydWN0IGlwX2N0X3BwdHBfbWFzdGVyICppbmZvID0gJmN0LT5oZWxwLmN0X3BwdHBfaW5mbzsKKwl1bnNpZ25lZCBpbnQgbmV4dGhkcl9vZmY7CisKKwlpbnQgb2xkc3N0YXRlLCBvbGRjc3RhdGU7CisJaW50IHJldDsKKworCS8qIGRvbid0IGRvIGFueSB0cmFja2luZyBiZWZvcmUgdGNwIGhhbmRzaGFrZSBjb21wbGV0ZSAqLworCWlmIChjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQgCisJICAgICYmIGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCtJUF9DVF9JU19SRVBMWSkgeworCQlERUJVR1AoImN0aW5mbyA9ICV1LCBza2lwcGluZ1xuIiwgY3RpbmZvKTsKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwl9CisJCisJbmV4dGhkcl9vZmYgPSAoKnBza2IpLT5uaC5pcGgtPmlobCo0OworCXRjcGggPSBza2JfaGVhZGVyX3BvaW50ZXIoKnBza2IsIG5leHRoZHJfb2ZmLCBzaXplb2YoX3RjcGgpLCAmX3RjcGgpOworCUJVR19PTighdGNwaCk7CisJbmV4dGhkcl9vZmYgKz0gdGNwaC0+ZG9mZiAqIDQ7CisgCWRhdGFsZW4gPSB0Y3BsZW4gLSB0Y3BoLT5kb2ZmICogNDsKKworCWlmICh0Y3BoLT5maW4gfHwgdGNwaC0+cnN0KSB7CisJCURFQlVHUCgiUlNUL0ZJTiByZWNlaXZlZCwgdGltZW91dGluZyBHUkVcbiIpOworCQkvKiBjYW4ndCBkbyB0aGlzIGFmdGVyIHJlYWwgbmV3bmF0ICovCisJCWluZm8tPmNzdGF0ZSA9IFBQVFBfQ0FMTF9OT05FOworCisJCS8qIHVudHJhY2sgdGhpcyBjYWxsIGlkLCB1bmV4cGVjdCBHUkUgcGFja2V0cyAqLworCQlwcHRwX2Rlc3Ryb3lfc2libGluZ3MoY3QpOworCX0KKworCXBwdHBoID0gc2tiX2hlYWRlcl9wb2ludGVyKCpwc2tiLCBuZXh0aGRyX29mZiwgc2l6ZW9mKF9wcHRwaCksICZfcHB0cGgpOworCWlmICghcHB0cGgpIHsKKwkJREVCVUdQKCJubyBmdWxsIFBQVFAgaGVhZGVyLCBjYW4ndCB0cmFja1xuIik7CisJCXJldHVybiBORl9BQ0NFUFQ7CisJfQorCW5leHRoZHJfb2ZmICs9IHNpemVvZihfcHB0cGgpOworCWRhdGFsZW4gLT0gc2l6ZW9mKF9wcHRwaCk7CisKKwkvKiBpZiBpdCdzIG5vdCBhIGNvbnRyb2wgbWVzc2FnZSB3ZSBjYW4ndCBkbyBhbnl0aGluZyB3aXRoIGl0ICovCisJaWYgKG50b2hzKHBwdHBoLT5wYWNrZXRUeXBlKSAhPSBQUFRQX1BBQ0tFVF9DT05UUk9MIHx8CisJICAgIG50b2hsKHBwdHBoLT5tYWdpY0Nvb2tpZSkgIT0gUFBUUF9NQUdJQ19DT09LSUUpIHsKKwkJREVCVUdQKCJub3QgYSBjb250cm9sIHBhY2tldFxuIik7CisJCXJldHVybiBORl9BQ0NFUFQ7CisJfQorCisJb2xkc3N0YXRlID0gaW5mby0+c3N0YXRlOworCW9sZGNzdGF0ZSA9IGluZm8tPmNzdGF0ZTsKKworCXNwaW5fbG9ja19iaCgmaXBfcHB0cF9sb2NrKTsKKworCS8qIEZJWE1FOiBXZSBqdXN0IGJsaW5kbHkgYXNzdW1lIHRoYXQgdGhlIGNvbnRyb2wgY29ubmVjdGlvbiBpcyBhbHdheXMKKwkgKiBlc3RhYmxpc2hlZCBmcm9tIFBOUy0+UEFDLiAgSG93ZXZlciwgUkZDIG1ha2VzIG5vIGd1YXJhbnRlZSAqLworCWlmIChkaXIgPT0gSVBfQ1RfRElSX09SSUdJTkFMKQorCQkvKiBjbGllbnQgLT4gc2VydmVyIChQTlMgLT4gUEFDKSAqLworCQlyZXQgPSBwcHRwX291dGJvdW5kX3BrdChwc2tiLCB0Y3BoLCBuZXh0aGRyX29mZiwgZGF0YWxlbiwgY3QsCisJCQkJCWN0aW5mbyk7CisJZWxzZQorCQkvKiBzZXJ2ZXIgLT4gY2xpZW50IChQQUMgLT4gUE5TKSAqLworCQlyZXQgPSBwcHRwX2luYm91bmRfcGt0KHBza2IsIHRjcGgsIG5leHRoZHJfb2ZmLCBkYXRhbGVuLCBjdCwKKwkJCQkgICAgICAgY3RpbmZvKTsKKwlERUJVR1AoInNzdGF0ZTogJWQtPiVkLCBjc3RhdGU6ICVkLT4lZFxuIiwKKwkJb2xkc3N0YXRlLCBpbmZvLT5zc3RhdGUsIG9sZGNzdGF0ZSwgaW5mby0+Y3N0YXRlKTsKKwlzcGluX3VubG9ja19iaCgmaXBfcHB0cF9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIGNvbnRyb2wgcHJvdG9jb2wgaGVscGVyICovCitzdGF0aWMgc3RydWN0IGlwX2Nvbm50cmFja19oZWxwZXIgcHB0cCA9IHsgCisJLmxpc3QgPSB7IE5VTEwsIE5VTEwgfSwKKwkubmFtZSA9ICJwcHRwIiwgCisJLm1lID0gVEhJU19NT0RVTEUsCisJLm1heF9leHBlY3RlZCA9IDIsCisJLnRpbWVvdXQgPSA1ICogNjAsCisJLnR1cGxlID0geyAuc3JjID0geyAuaXAgPSAwLCAKKwkJIAkgICAgLnUgPSB7IC50Y3AgPSB7IC5wb3J0ID0gIAorCQkJCSAgICBfX2NvbnN0YW50X2h0b25zKFBQVFBfQ09OVFJPTF9QT1JUKSB9IH0gCisJCQkgIH0sIAorCQkgICAuZHN0ID0geyAuaXAgPSAwLCAKKwkJCSAgICAudSA9IHsgLmFsbCA9IDAgfSwKKwkJCSAgICAucHJvdG9udW0gPSBJUFBST1RPX1RDUAorCQkJICB9IAorCQkgfSwKKwkubWFzayA9IHsgLnNyYyA9IHsgLmlwID0gMCwgCisJCQkgICAudSA9IHsgLnRjcCA9IHsgLnBvcnQgPSBfX2NvbnN0YW50X2h0b25zKDB4ZmZmZikgfSB9IAorCQkJIH0sIAorCQkgIC5kc3QgPSB7IC5pcCA9IDAsIAorCQkJICAgLnUgPSB7IC5hbGwgPSAwIH0sCisJCQkgICAucHJvdG9udW0gPSAweGZmIAorCQkgCSB9IAorCQl9LAorCS5oZWxwID0gY29ubnRyYWNrX3BwdHBfaGVscAorfTsKKworZXh0ZXJuIHZvaWQgX19leGl0IGlwX2N0X3Byb3RvX2dyZV9maW5pKHZvaWQpOworZXh0ZXJuIGludCBfX2luaXQgaXBfY3RfcHJvdG9fZ3JlX2luaXQodm9pZCk7CisKKy8qIGlwX2Nvbm50cmFja19wcHRwIGluaXRpYWxpemF0aW9uICovCitzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCit7CisJaW50IHJldGNvZGU7CisgCisJcmV0Y29kZSA9IGlwX2N0X3Byb3RvX2dyZV9pbml0KCk7CisJaWYgKHJldGNvZGUgPCAwKQorCQlyZXR1cm4gcmV0Y29kZTsKKworCURFQlVHUCgiIHJlZ2lzdGVyaW5nIGhlbHBlclxuIik7CisJaWYgKChyZXRjb2RlID0gaXBfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcigmcHB0cCkpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlZ2lzdGVyIGNvbm50cmFjayBhcHBsaWNhdGlvbiAiCisJCQkJImhlbHBlciBmb3IgcHB0cDogJWRcbiIsIHJldGNvZGUpOworCQlpcF9jdF9wcm90b19ncmVfZmluaSgpOworCQlyZXR1cm4gcmV0Y29kZTsKKwl9CisKKwlwcmludGsoImlwX2Nvbm50cmFja19wcHRwIHZlcnNpb24gJXMgbG9hZGVkXG4iLCBJUF9DVF9QUFRQX1ZFUlNJT04pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQoreworCWlwX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcigmcHB0cCk7CisJaXBfY3RfcHJvdG9fZ3JlX2ZpbmkoKTsKKwlwcmludGsoImlwX2Nvbm50cmFja19wcHRwIHZlcnNpb24gJXMgdW5sb2FkZWRcbiIsIElQX0NUX1BQVFBfVkVSU0lPTik7Cit9CisKK21vZHVsZV9pbml0KGluaXQpOworbW9kdWxlX2V4aXQoZmluaSk7CisKK0VYUE9SVF9TWU1CT0woaXBfbmF0X3BwdHBfaG9va19vdXRib3VuZCk7CitFWFBPUlRfU1lNQk9MKGlwX25hdF9wcHRwX2hvb2tfaW5ib3VuZCk7CitFWFBPUlRfU1lNQk9MKGlwX25hdF9wcHRwX2hvb2tfZXhwX2dyZSk7CitFWFBPUlRfU1lNQk9MKGlwX25hdF9wcHRwX2hvb2tfZXhwZWN0Zm4pOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19uZXRiaW9zX25zLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX25ldGJpb3NfbnMuYwppbmRleCA3MWVmMTlkLi4xODY2NDZlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX25ldGJpb3NfbnMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX25ldGJpb3NfbnMuYwpAQCAtNTgsNyArNTgsNyBAQAogCQlnb3RvIG91dDsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlpbl9kZXYgPSBfX2luX2Rldl9nZXQocnQtPnUuZHN0LmRldik7CisJaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShydC0+dS5kc3QuZGV2KTsKIAlpZiAoaW5fZGV2ICE9IE5VTEwpIHsKIAkJZm9yX3ByaW1hcnlfaWZhKGluX2RldikgewogCQkJaWYgKGlmYS0+aWZhX2Jyb2FkY2FzdCA9PSBpcGgtPmRhZGRyKSB7CkBAIC05MSw3ICs5MSw3IEBACiAJaXBfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKGV4cCk7CiAJaXBfY29ubnRyYWNrX2V4cGVjdF9wdXQoZXhwKTsKIAotCWlwX2N0X3JlZnJlc2hfYWNjdChjdCwgY3RpbmZvLCBOVUxMLCB0aW1lb3V0ICogSFopOworCWlwX2N0X3JlZnJlc2goY3QsICpwc2tiLCB0aW1lb3V0ICogSFopOwogb3V0OgogCXJldHVybiBORl9BQ0NFUFQ7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IDE1YWVmMzUuLjE2NmU2MDYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfbmV0bGluay5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfbmV0bGluay5jCkBAIC0xNzcsMTEgKzE3NywxMSBAQAogCXN0cnVjdCBuZmF0dHIgKm5lc3RfY291bnQgPSBORkFfTkVTVChza2IsIHR5cGUpOwogCXVfaW50NjRfdCB0bXA7CiAKLQl0bXAgPSBjcHVfdG9fYmU2NChjdC0+Y291bnRlcnNbZGlyXS5wYWNrZXRzKTsKLQlORkFfUFVUKHNrYiwgQ1RBX0NPVU5URVJTX1BBQ0tFVFMsIHNpemVvZih1X2ludDY0X3QpLCAmdG1wKTsKKwl0bXAgPSBodG9ubChjdC0+Y291bnRlcnNbZGlyXS5wYWNrZXRzKTsKKwlORkFfUFVUKHNrYiwgQ1RBX0NPVU5URVJTMzJfUEFDS0VUUywgc2l6ZW9mKHVfaW50MzJfdCksICZ0bXApOwogCi0JdG1wID0gY3B1X3RvX2JlNjQoY3QtPmNvdW50ZXJzW2Rpcl0uYnl0ZXMpOwotCU5GQV9QVVQoc2tiLCBDVEFfQ09VTlRFUlNfQllURVMsIHNpemVvZih1X2ludDY0X3QpLCAmdG1wKTsKKwl0bXAgPSBodG9ubChjdC0+Y291bnRlcnNbZGlyXS5ieXRlcyk7CisJTkZBX1BVVChza2IsIENUQV9DT1VOVEVSUzMyX0JZVEVTLCBzaXplb2YodV9pbnQzMl90KSwgJnRtcCk7CiAKIAlORkFfTkVTVF9FTkQoc2tiLCBuZXN0X2NvdW50KTsKIApAQCAtODMzLDcgKzgzMyw4IEBACiBzdGF0aWMgaW5saW5lIGludAogY3RuZXRsaW5rX2NoYW5nZV9zdGF0dXMoc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsIHN0cnVjdCBuZmF0dHIgKmNkYVtdKQogewotCXVuc2lnbmVkIGxvbmcgZCwgc3RhdHVzID0gKih1X2ludDMyX3QgKilORkFfREFUQShjZGFbQ1RBX1NUQVRVUy0xXSk7CisJdW5zaWduZWQgbG9uZyBkOworCXVuc2lnbmVkIHN0YXR1cyA9IG50b2hsKCoodV9pbnQzMl90ICopTkZBX0RBVEEoY2RhW0NUQV9TVEFUVVMtMV0pKTsKIAlkID0gY3QtPnN0YXR1cyBeIHN0YXR1czsKIAogCWlmIChkICYgKElQU19FWFBFQ1RFRHxJUFNfQ09ORklSTUVEfElQU19EWUlORykpCkBAIC05NDgsNiArOTQ5LDMxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50CitjdG5ldGxpbmtfY2hhbmdlX3Byb3RvaW5mbyhzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwgc3RydWN0IG5mYXR0ciAqY2RhW10pCit7CisJc3RydWN0IG5mYXR0ciAqdGJbQ1RBX1BST1RPSU5GT19NQVhdLCAqYXR0ciA9IGNkYVtDVEFfUFJPVE9JTkZPLTFdOworCXN0cnVjdCBpcF9jb25udHJhY2tfcHJvdG9jb2wgKnByb3RvOworCXVfaW50MTZfdCBucHQgPSBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuZHN0LnByb3RvbnVtOworCWludCBlcnIgPSAwOworCisJaWYgKG5mYXR0cl9wYXJzZV9uZXN0ZWQodGIsIENUQV9QUk9UT0lORk9fTUFYLCBhdHRyKSA8IDApCisJCWdvdG8gbmZhdHRyX2ZhaWx1cmU7CisKKwlwcm90byA9IGlwX2Nvbm50cmFja19wcm90b19maW5kX2dldChucHQpOworCWlmICghcHJvdG8pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHByb3RvLT5mcm9tX25mYXR0cikKKwkJZXJyID0gcHJvdG8tPmZyb21fbmZhdHRyKHRiLCBjdCk7CisJaXBfY29ubnRyYWNrX3Byb3RvX3B1dChwcm90byk7IAorCisJcmV0dXJuIGVycjsKKworbmZhdHRyX2ZhaWx1cmU6CisJcmV0dXJuIC1FTk9NRU07Cit9CisKIHN0YXRpYyBpbnQKIGN0bmV0bGlua19jaGFuZ2VfY29ubnRyYWNrKHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LCBzdHJ1Y3QgbmZhdHRyICpjZGFbXSkKIHsKQEAgLTk3Myw2ICs5OTksMTIgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCisJaWYgKGNkYVtDVEFfUFJPVE9JTkZPLTFdKSB7CisJCWVyciA9IGN0bmV0bGlua19jaGFuZ2VfcHJvdG9pbmZvKGN0LCBjZGEpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCiAJREVCVUdQKCJhbGwgZG9uZVxuIik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMDAyLDYgKzEwMzQsMTIgQEAKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnI7CiAKKwlpZiAoY2RhW0NUQV9QUk9UT0lORk8tMV0pIHsKKwkJZXJyID0gY3RuZXRsaW5rX2NoYW5nZV9wcm90b2luZm8oY3QsIGNkYSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKIAljdC0+aGVscGVyID0gaXBfY29ubnRyYWNrX2hlbHBlcl9maW5kX2dldChydHVwbGUpOwogCiAJYWRkX3RpbWVyKCZjdC0+dGltZW91dCk7CkBAIC0xMjcwLDcgKzEzMDgsNyBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JZXhwID0gaXBfY29ubnRyYWNrX2V4cGVjdF9maW5kX2dldCgmdHVwbGUpOworCWV4cCA9IGlwX2Nvbm50cmFja19leHBlY3RfZmluZCgmdHVwbGUpOwogCWlmICghZXhwKQogCQlyZXR1cm4gLUVOT0VOVDsKIApAQCAtMTMxOCw3ICsxMzU2LDcgQEAKIAkJCXJldHVybiBlcnI7CiAKIAkJLyogYnVtcCB1c2FnZSBjb3VudCB0byAyICovCi0JCWV4cCA9IGlwX2Nvbm50cmFja19leHBlY3RfZmluZF9nZXQoJnR1cGxlKTsKKwkJZXhwID0gaXBfY29ubnRyYWNrX2V4cGVjdF9maW5kKCZ0dXBsZSk7CiAJCWlmICghZXhwKQogCQkJcmV0dXJuIC1FTk9FTlQ7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fZ3JlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2dyZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NGFiYjkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2dyZS5jCkBAIC0wLDAgKzEsMzI4IEBACisvKgorICogaXBfY29ubnRyYWNrX3Byb3RvX2dyZS5jIC0gVmVyc2lvbiAzLjAgCisgKgorICogQ29ubmVjdGlvbiB0cmFja2luZyBwcm90b2NvbCBoZWxwZXIgbW9kdWxlIGZvciBHUkUuCisgKgorICogR1JFIGlzIGEgZ2VuZXJpYyBlbmNhcHN1bGF0aW9uIHByb3RvY29sLCB3aGljaCBpcyBnZW5lcmFsbHkgbm90IHZlcnkKKyAqIHN1aXRlZCBmb3IgTkFULCBhcyBpdCBoYXMgbm8gcHJvdG9jb2wtc3BlY2lmaWMgcGFydCBhcyBwb3J0IG51bWJlcnMuCisgKgorICogSXQgaGFzIGFuIG9wdGlvbmFsIGtleSBmaWVsZCwgd2hpY2ggbWF5IGhlbHAgdXMgZGlzdGluZ3Vpc2hpbmcgdHdvIAorICogY29ubmVjdGlvbnMgYmV0d2VlbiB0aGUgc2FtZSB0d28gaG9zdHMuCisgKgorICogR1JFIGlzIGRlZmluZWQgaW4gUkZDIDE3MDEgYW5kIFJGQyAxNzAyLCBhcyB3ZWxsIGFzIFJGQyAyNzg0IAorICoKKyAqIFBQVFAgaXMgYnVpbHQgb24gdG9wIG9mIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiBHUkUsIGFuZCBoYXMgYSBtYW5kYXRvcnkKKyAqIGZpZWxkIGNhbGxlZCAiQ2FsbElEIiwgd2hpY2ggc2VydmVzIHVzIGZvciB0aGUgc2FtZSBwdXJwb3NlIGFzIHRoZSBrZXkKKyAqIGZpZWxkIGluIHBsYWluIEdSRS4KKyAqCisgKiBEb2N1bWVudGF0aW9uIGFib3V0IFBQVFAgY2FuIGJlIGZvdW5kIGluIFJGQyAyNjM3CisgKgorICogKEMpIDIwMDAtMjAwNSBieSBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPgorICoKKyAqIERldmVsb3BtZW50IG9mIHRoaXMgY29kZSBmdW5kZWQgYnkgQXN0YXJvIEFHIChodHRwOi8vd3d3LmFzdGFyby5jb20vKQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKK3N0YXRpYyBERUZJTkVfUldMT0NLKGlwX2N0X2dyZV9sb2NrKTsKKyNkZWZpbmUgQVNTRVJUX1JFQURfTE9DSyh4KQorI2RlZmluZSBBU1NFUlRfV1JJVEVfTE9DSyh4KQorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvbGlzdGhlbHAuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfcHJvdG9jb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaGVscGVyLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2NvcmUuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19wcm90b19ncmUuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfcHB0cC5oPgorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJuZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBwcm90b2NvbCBoZWxwZXIgZm9yIEdSRSIpOworCisvKiBzaGFtZWxlc3NseSBzdG9sZW4gZnJvbSBpcF9jb25udHJhY2tfcHJvdG9fdWRwLmMgKi8KKyNkZWZpbmUgR1JFX1RJTUVPVVQJCSgzMCpIWikKKyNkZWZpbmUgR1JFX1NUUkVBTV9USU1FT1VUCSgxODAqSFopCisKKyNpZiAwCisjZGVmaW5lIERFQlVHUChmb3JtYXQsIGFyZ3MuLi4pCXByaW50ayhLRVJOX0RFQlVHICIlczolczogIiBmb3JtYXQsIF9fRklMRV9fLCBfX0ZVTkNUSU9OX18sICMjIGFyZ3MpCisjZGVmaW5lIERVTVBfVFVQTEVfR1JFKHgpIHByaW50aygiJXUuJXUuJXUuJXU6MHgleCAtPiAldS4ldS4ldS4ldToweCV4XG4iLCBcCisJCQlOSVBRVUFEKCh4KS0+c3JjLmlwKSwgbnRvaHMoKHgpLT5zcmMudS5ncmUua2V5KSwgXAorCQkJTklQUVVBRCgoeCktPmRzdC5pcCksIG50b2hzKCh4KS0+ZHN0LnUuZ3JlLmtleSkpCisjZWxzZQorI2RlZmluZSBERUJVR1AoeCwgYXJncy4uLikKKyNkZWZpbmUgRFVNUF9UVVBMRV9HUkUoeCkKKyNlbmRpZgorCQkJCQorLyogR1JFIEtFWU1BUCBIQU5ETElORyBGVU5DVElPTlMgKi8KK3N0YXRpYyBMSVNUX0hFQUQoZ3JlX2tleW1hcF9saXN0KTsKKworc3RhdGljIGlubGluZSBpbnQgZ3JlX2tleV9jbXBmbihjb25zdCBzdHJ1Y3QgaXBfY3RfZ3JlX2tleW1hcCAqa20sCisJCQkJY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqdCkKK3sKKwlyZXR1cm4gKChrbS0+dHVwbGUuc3JjLmlwID09IHQtPnNyYy5pcCkgJiYKKwkJKGttLT50dXBsZS5kc3QuaXAgPT0gdC0+ZHN0LmlwKSAmJgorCQkoa20tPnR1cGxlLmRzdC5wcm90b251bSA9PSB0LT5kc3QucHJvdG9udW0pICYmCisJCShrbS0+dHVwbGUuZHN0LnUuYWxsID09IHQtPmRzdC51LmFsbCkpOworfQorCisvKiBsb29rIHVwIHRoZSBzb3VyY2Uga2V5IGZvciBhIGdpdmVuIHR1cGxlICovCitzdGF0aWMgdV9pbnQzMl90IGdyZV9rZXltYXBfbG9va3VwKHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnQpCit7CisJc3RydWN0IGlwX2N0X2dyZV9rZXltYXAgKmttOworCXVfaW50MzJfdCBrZXkgPSAwOworCisJcmVhZF9sb2NrX2JoKCZpcF9jdF9ncmVfbG9jayk7CisJa20gPSBMSVNUX0ZJTkQoJmdyZV9rZXltYXBfbGlzdCwgZ3JlX2tleV9jbXBmbiwKKwkJCXN0cnVjdCBpcF9jdF9ncmVfa2V5bWFwICosIHQpOworCWlmIChrbSkKKwkJa2V5ID0ga20tPnR1cGxlLnNyYy51LmdyZS5rZXk7CisJcmVhZF91bmxvY2tfYmgoJmlwX2N0X2dyZV9sb2NrKTsKKwkKKwlERUJVR1AoImxvb2t1cCBzcmMga2V5IDB4JXggdXAga2V5IGZvciAiLCBrZXkpOworCURVTVBfVFVQTEVfR1JFKHQpOworCisJcmV0dXJuIGtleTsKK30KKworLyogYWRkIGEgc2luZ2xlIGtleW1hcCBlbnRyeSwgYXNzb2NpYXRlIHdpdGggc3BlY2lmaWVkIG1hc3RlciBjdCAqLworaW50CitpcF9jdF9ncmVfa2V5bWFwX2FkZChzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICp0LCBpbnQgcmVwbHkpCit7CisJc3RydWN0IGlwX2N0X2dyZV9rZXltYXAgKipleGlzdF9rbSwgKmttLCAqb2xkOworCisJaWYgKCFjdC0+aGVscGVyIHx8IHN0cmNtcChjdC0+aGVscGVyLT5uYW1lLCAicHB0cCIpKSB7CisJCURFQlVHUCgicmVmdXNpbmcgdG8gYWRkIEdSRSBrZXltYXAgdG8gbm9uLXBwdHAgc2Vzc2lvblxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoIXJlcGx5KSAKKwkJZXhpc3Rfa20gPSAmY3QtPmhlbHAuY3RfcHB0cF9pbmZvLmtleW1hcF9vcmlnOworCWVsc2UKKwkJZXhpc3Rfa20gPSAmY3QtPmhlbHAuY3RfcHB0cF9pbmZvLmtleW1hcF9yZXBseTsKKworCWlmICgqZXhpc3Rfa20pIHsKKwkJLyogY2hlY2sgd2hldGhlciBpdCdzIGEgcmV0cmFuc21pc3Npb24gKi8KKwkJb2xkID0gTElTVF9GSU5EKCZncmVfa2V5bWFwX2xpc3QsIGdyZV9rZXlfY21wZm4sCisJCQkJc3RydWN0IGlwX2N0X2dyZV9rZXltYXAgKiwgdCk7CisJCWlmIChvbGQgPT0gKmV4aXN0X2ttKSB7CisJCQlERUJVR1AoInJldHJhbnNtaXNzaW9uXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJREVCVUdQKCJ0cnlpbmcgdG8gb3ZlcnJpZGUga2V5bWFwXyVzIGZvciBjdCAlcFxuIiwgCisJCQlyZXBseT8gInJlcGx5Ijoib3JpZyIsIGN0KTsKKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQorCisJa20gPSBrbWFsbG9jKHNpemVvZigqa20pLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWttKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbWNweSgma20tPnR1cGxlLCB0LCBzaXplb2YoKnQpKTsKKwkqZXhpc3Rfa20gPSBrbTsKKworCURFQlVHUCgiYWRkaW5nIG5ldyBlbnRyeSAlcDogIiwga20pOworCURVTVBfVFVQTEVfR1JFKCZrbS0+dHVwbGUpOworCisJd3JpdGVfbG9ja19iaCgmaXBfY3RfZ3JlX2xvY2spOworCWxpc3RfYXBwZW5kKCZncmVfa2V5bWFwX2xpc3QsIGttKTsKKwl3cml0ZV91bmxvY2tfYmgoJmlwX2N0X2dyZV9sb2NrKTsKKworCXJldHVybiAwOworfQorCisvKiBkZXN0cm95IHRoZSBrZXltYXAgZW50cmllcyBhc3NvY2lhdGVkIHdpdGggc3BlY2lmaWVkIG1hc3RlciBjdCAqLwordm9pZCBpcF9jdF9ncmVfa2V5bWFwX2Rlc3Ryb3koc3RydWN0IGlwX2Nvbm50cmFjayAqY3QpCit7CisJREVCVUdQKCJlbnRlcmluZyBmb3IgY3QgJXBcbiIsIGN0KTsKKworCWlmICghY3QtPmhlbHBlciB8fCBzdHJjbXAoY3QtPmhlbHBlci0+bmFtZSwgInBwdHAiKSkgeworCQlERUJVR1AoInJlZnVzaW5nIHRvIGRlc3Ryb3kgR1JFIGtleW1hcCB0byBub24tcHB0cCBzZXNzaW9uXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXdyaXRlX2xvY2tfYmgoJmlwX2N0X2dyZV9sb2NrKTsKKwlpZiAoY3QtPmhlbHAuY3RfcHB0cF9pbmZvLmtleW1hcF9vcmlnKSB7CisJCURFQlVHUCgicmVtb3ZpbmcgJXAgZnJvbSBsaXN0XG4iLCAKKwkJCWN0LT5oZWxwLmN0X3BwdHBfaW5mby5rZXltYXBfb3JpZyk7CisJCWxpc3RfZGVsKCZjdC0+aGVscC5jdF9wcHRwX2luZm8ua2V5bWFwX29yaWctPmxpc3QpOworCQlrZnJlZShjdC0+aGVscC5jdF9wcHRwX2luZm8ua2V5bWFwX29yaWcpOworCQljdC0+aGVscC5jdF9wcHRwX2luZm8ua2V5bWFwX29yaWcgPSBOVUxMOworCX0KKwlpZiAoY3QtPmhlbHAuY3RfcHB0cF9pbmZvLmtleW1hcF9yZXBseSkgeworCQlERUJVR1AoInJlbW92aW5nICVwIGZyb20gbGlzdFxuIiwKKwkJCWN0LT5oZWxwLmN0X3BwdHBfaW5mby5rZXltYXBfcmVwbHkpOworCQlsaXN0X2RlbCgmY3QtPmhlbHAuY3RfcHB0cF9pbmZvLmtleW1hcF9yZXBseS0+bGlzdCk7CisJCWtmcmVlKGN0LT5oZWxwLmN0X3BwdHBfaW5mby5rZXltYXBfcmVwbHkpOworCQljdC0+aGVscC5jdF9wcHRwX2luZm8ua2V5bWFwX3JlcGx5ID0gTlVMTDsKKwl9CisJd3JpdGVfdW5sb2NrX2JoKCZpcF9jdF9ncmVfbG9jayk7Cit9CisKKworLyogUFVCTElDIENPTk5UUkFDSyBQUk9UTyBIRUxQRVIgRlVOQ1RJT05TICovCisKKy8qIGludmVydCBncmUgcGFydCBvZiB0dXBsZSAqLworc3RhdGljIGludCBncmVfaW52ZXJ0X3R1cGxlKHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorCQkJICAgIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKm9yaWcpCit7CisJdHVwbGUtPmRzdC51LmdyZS5rZXkgPSBvcmlnLT5zcmMudS5ncmUua2V5OworCXR1cGxlLT5zcmMudS5ncmUua2V5ID0gb3JpZy0+ZHN0LnUuZ3JlLmtleTsKKworCXJldHVybiAxOworfQorCisvKiBncmUgaGRyIGluZm8gdG8gdHVwbGUgKi8KK3N0YXRpYyBpbnQgZ3JlX3BrdF90b190dXBsZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCisJCQkgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKK3sKKwlzdHJ1Y3QgZ3JlX2hkcl9wcHRwIF9wZ3JlaGRyLCAqcGdyZWhkcjsKKwl1X2ludDMyX3Qgc3Jja2V5OworCXN0cnVjdCBncmVfaGRyIF9ncmVoZHIsICpncmVoZHI7CisKKwkvKiBmaXJzdCBvbmx5IGRlbGluZWFyaXplIG9sZCBSRkMxNzAxIEdSRSBoZWFkZXIgKi8KKwlncmVoZHIgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBkYXRhb2ZmLCBzaXplb2YoX2dyZWhkciksICZfZ3JlaGRyKTsKKwlpZiAoIWdyZWhkciB8fCBncmVoZHItPnZlcnNpb24gIT0gR1JFX1ZFUlNJT05fUFBUUCkgeworCQkvKiB0cnkgdG8gYmVoYXZlIGxpa2UgImlwX2Nvbm50cmFja19wcm90b19nZW5lcmljIiAqLworCQl0dXBsZS0+c3JjLnUuYWxsID0gMDsKKwkJdHVwbGUtPmRzdC51LmFsbCA9IDA7CisJCXJldHVybiAxOworCX0KKworCS8qIFBQVFAgaGVhZGVyIGlzIHZhcmlhYmxlIGxlbmd0aCwgb25seSBuZWVkIHVwIHRvIHRoZSBjYWxsX2lkIGZpZWxkICovCisJcGdyZWhkciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGRhdGFvZmYsIDgsICZfcGdyZWhkcik7CisJaWYgKCFwZ3JlaGRyKQorCQlyZXR1cm4gMTsKKworCWlmIChudG9ocyhncmVoZHItPnByb3RvY29sKSAhPSBHUkVfUFJPVE9DT0xfUFBUUCkgeworCQlERUJVR1AoIkdSRV9WRVJTSU9OX1BQVFAgYnV0IHVua25vd24gcHJvdG9cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwl0dXBsZS0+ZHN0LnUuZ3JlLmtleSA9IHBncmVoZHItPmNhbGxfaWQ7CisJc3Jja2V5ID0gZ3JlX2tleW1hcF9sb29rdXAodHVwbGUpOworCXR1cGxlLT5zcmMudS5ncmUua2V5ID0gc3Jja2V5OworCisJcmV0dXJuIDE7Cit9CisKKy8qIHByaW50IGdyZSBwYXJ0IG9mIHR1cGxlICovCitzdGF0aWMgaW50IGdyZV9wcmludF90dXBsZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCisJCQkgICBjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKK3sKKwlyZXR1cm4gc2VxX3ByaW50ZihzLCAic3Jja2V5PTB4JXggZHN0a2V5PTB4JXggIiwgCisJCQkgIG50b2hzKHR1cGxlLT5zcmMudS5ncmUua2V5KSwKKwkJCSAgbnRvaHModHVwbGUtPmRzdC51LmdyZS5rZXkpKTsKK30KKworLyogcHJpbnQgcHJpdmF0ZSBkYXRhIGZvciBjb25udHJhY2sgKi8KK3N0YXRpYyBpbnQgZ3JlX3ByaW50X2Nvbm50cmFjayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QpCit7CisJcmV0dXJuIHNlcV9wcmludGYocywgInRpbWVvdXQ9JXUsIHN0cmVhbV90aW1lb3V0PSV1ICIsCisJCQkgIChjdC0+cHJvdG8uZ3JlLnRpbWVvdXQgLyBIWiksCisJCQkgIChjdC0+cHJvdG8uZ3JlLnN0cmVhbV90aW1lb3V0IC8gSFopKTsKK30KKworLyogUmV0dXJucyB2ZXJkaWN0IGZvciBwYWNrZXQsIGFuZCBtYXkgbW9kaWZ5IGNvbm50cmFjayAqLworc3RhdGljIGludCBncmVfcGFja2V0KHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGNvbm50cmFja2luZm8pCit7CisJLyogSWYgd2UndmUgc2VlbiB0cmFmZmljIGJvdGggd2F5cywgdGhpcyBpcyBhIEdSRSBjb25uZWN0aW9uLgorCSAqIEV4dGVuZCB0aW1lb3V0LiAqLworCWlmIChjdC0+c3RhdHVzICYgSVBTX1NFRU5fUkVQTFkpIHsKKwkJaXBfY3RfcmVmcmVzaF9hY2N0KGN0LCBjb25udHJhY2tpbmZvLCBza2IsCisJCQkJICAgY3QtPnByb3RvLmdyZS5zdHJlYW1fdGltZW91dCk7CisJCS8qIEFsc28sIG1vcmUgbGlrZWx5IHRvIGJlIGltcG9ydGFudCwgYW5kIG5vdCBhIHByb2JlLiAqLworCQlzZXRfYml0KElQU19BU1NVUkVEX0JJVCwgJmN0LT5zdGF0dXMpOworCQlpcF9jb25udHJhY2tfZXZlbnRfY2FjaGUoSVBDVF9TVEFUVVMsIHNrYik7CisJfSBlbHNlCisJCWlwX2N0X3JlZnJlc2hfYWNjdChjdCwgY29ubnRyYWNraW5mbywgc2tiLAorCQkJCSAgIGN0LT5wcm90by5ncmUudGltZW91dCk7CisJCisJcmV0dXJuIE5GX0FDQ0VQVDsKK30KKworLyogQ2FsbGVkIHdoZW4gYSBuZXcgY29ubmVjdGlvbiBmb3IgdGhpcyBwcm90b2NvbCBmb3VuZC4gKi8KK3N0YXRpYyBpbnQgZ3JlX25ldyhzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sgCisJREVCVUdQKCI6ICIpOworCURVTVBfVFVQTEVfR1JFKCZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUpOworCisJLyogaW5pdGlhbGl6ZSB0byBzYW5lIHZhbHVlLiAgSWRlYWxseSBhIGNvbm50cmFjayBoZWxwZXIKKwkgKiAoZS5nLiBpbiBjYXNlIG9mIHBwdHApIGlzIGluY3JlYXNpbmcgdGhlbSAqLworCWN0LT5wcm90by5ncmUuc3RyZWFtX3RpbWVvdXQgPSBHUkVfU1RSRUFNX1RJTUVPVVQ7CisJY3QtPnByb3RvLmdyZS50aW1lb3V0ID0gR1JFX1RJTUVPVVQ7CisKKwlyZXR1cm4gMTsKK30KKworLyogQ2FsbGVkIHdoZW4gYSBjb25udHJhY2sgZW50cnkgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkIGZyb20gdGhlIGhhc2hlcworICogYW5kIGlzIGFib3V0IHRvIGJlIGRlbGV0ZWQgZnJvbSBtZW1vcnkgKi8KK3N0YXRpYyB2b2lkIGdyZV9kZXN0cm95KHN0cnVjdCBpcF9jb25udHJhY2sgKmN0KQoreworCXN0cnVjdCBpcF9jb25udHJhY2sgKm1hc3RlciA9IGN0LT5tYXN0ZXI7CisJREVCVUdQKCIgZW50ZXJpbmdcbiIpOworCisJaWYgKCFtYXN0ZXIpCisJCURFQlVHUCgibm8gbWFzdGVyICE/IVxuIik7CisJZWxzZQorCQlpcF9jdF9ncmVfa2V5bWFwX2Rlc3Ryb3kobWFzdGVyKTsKK30KKworLyogcHJvdG9jb2wgaGVscGVyIHN0cnVjdCAqLworc3RhdGljIHN0cnVjdCBpcF9jb25udHJhY2tfcHJvdG9jb2wgZ3JlID0geyAKKwkucHJvdG8JCSA9IElQUFJPVE9fR1JFLAorCS5uYW1lCQkgPSAiZ3JlIiwgCisJLnBrdF90b190dXBsZQkgPSBncmVfcGt0X3RvX3R1cGxlLAorCS5pbnZlcnRfdHVwbGUJID0gZ3JlX2ludmVydF90dXBsZSwKKwkucHJpbnRfdHVwbGUJID0gZ3JlX3ByaW50X3R1cGxlLAorCS5wcmludF9jb25udHJhY2sgPSBncmVfcHJpbnRfY29ubnRyYWNrLAorCS5wYWNrZXQJCSA9IGdyZV9wYWNrZXQsCisJLm5ldwkJID0gZ3JlX25ldywKKwkuZGVzdHJveQkgPSBncmVfZGVzdHJveSwKKwkubWUgCQkgPSBUSElTX01PRFVMRSwKKyNpZiBkZWZpbmVkKENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTkVUTElOSykgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0lQX05GX0NPTk5UUkFDS19ORVRMSU5LX01PRFVMRSkKKwkudHVwbGVfdG9fbmZhdHRyID0gaXBfY3RfcG9ydF90dXBsZV90b19uZmF0dHIsCisJLm5mYXR0cl90b190dXBsZSA9IGlwX2N0X3BvcnRfbmZhdHRyX3RvX3R1cGxlLAorI2VuZGlmCit9OworCisvKiBpcF9jb25udHJhY2tfcHJvdG9fZ3JlIGluaXRpYWxpemF0aW9uICovCitpbnQgX19pbml0IGlwX2N0X3Byb3RvX2dyZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGlwX2Nvbm50cmFja19wcm90b2NvbF9yZWdpc3RlcigmZ3JlKTsKK30KKwordm9pZCBfX2V4aXQgaXBfY3RfcHJvdG9fZ3JlX2Zpbmkodm9pZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICpuOworCisJLyogZGVsZXRlIGFsbCBrZXltYXAgZW50cmllcyAqLworCXdyaXRlX2xvY2tfYmgoJmlwX2N0X2dyZV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuLCAmZ3JlX2tleW1hcF9saXN0KSB7CisJCURFQlVHUCgiZGVsZXRpbmcga2V5bWFwICVwIGF0IG1vZHVsZSB1bmxvYWQgdGltZVxuIiwgcG9zKTsKKwkJbGlzdF9kZWwocG9zKTsKKwkJa2ZyZWUocG9zKTsKKwl9CisJd3JpdGVfdW5sb2NrX2JoKCZpcF9jdF9ncmVfbG9jayk7CisKKwlpcF9jb25udHJhY2tfcHJvdG9jb2xfdW5yZWdpc3RlcigmZ3JlKTsgCit9CisKK0VYUE9SVF9TWU1CT0woaXBfY3RfZ3JlX2tleW1hcF9hZGQpOworRVhQT1JUX1NZTUJPTChpcF9jdF9ncmVfa2V5bWFwX2Rlc3Ryb3kpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19pY21wLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAuYwppbmRleCA4MzhkMWQ2Li45OGYwMDE1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAuYwpAQCAtMjk2LDggKzI5Niw3IEBACiAJCQkJc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCiB7CiAJaWYgKCF0YltDVEFfUFJPVE9fSUNNUF9UWVBFLTFdCi0JICAgIHx8ICF0YltDVEFfUFJPVE9fSUNNUF9DT0RFLTFdCi0JICAgIHx8ICF0YltDVEFfUFJPVE9fSUNNUF9JRC0xXSkKKwkgICAgfHwgIXRiW0NUQV9QUk9UT19JQ01QX0NPREUtMV0pCiAJCXJldHVybiAtMTsKIAogCXR1cGxlLT5kc3QudS5pY21wLnR5cGUgPSAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fc2N0cC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19zY3RwLmMKaW5kZXggYTg3NWYzNS4uNTlhNGEwMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19zY3RwLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19zY3RwLmMKQEAgLTQxNiw2ICs0MTYsNyBAQAogCQkmJiBuZXdjb25udHJhY2sgPT0gU0NUUF9DT05OVFJBQ0tfRVNUQUJMSVNIRUQpIHsKIAkJREVCVUdQKCJTZXR0aW5nIGFzc3VyZWQgYml0XG4iKTsKIAkJc2V0X2JpdChJUFNfQVNTVVJFRF9CSVQsICZjb25udHJhY2stPnN0YXR1cyk7CisJCWlwX2Nvbm50cmFja19ldmVudF9jYWNoZShJUENUX1NUQVRVUywgc2tiKTsKIAl9CiAKIAlyZXR1cm4gTkZfQUNDRVBUOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdGNwLmMKaW5kZXggMTk4NWFiYy4uZDY3MDFjYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b190Y3AuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3RjcC5jCkBAIC0zNDEsMTcgKzM0MSw0MyBAQAogc3RhdGljIGludCB0Y3BfdG9fbmZhdHRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZmF0dHIgKm5mYSwKIAkJCSBjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCkKIHsKKwlzdHJ1Y3QgbmZhdHRyICpuZXN0X3Bhcm1zID0gTkZBX05FU1Qoc2tiLCBDVEFfUFJPVE9JTkZPX1RDUCk7CisJCiAJcmVhZF9sb2NrX2JoKCZ0Y3BfbG9jayk7CiAJTkZBX1BVVChza2IsIENUQV9QUk9UT0lORk9fVENQX1NUQVRFLCBzaXplb2YodV9pbnQ4X3QpLAogCQkmY3QtPnByb3RvLnRjcC5zdGF0ZSk7CiAJcmVhZF91bmxvY2tfYmgoJnRjcF9sb2NrKTsKIAorCU5GQV9ORVNUX0VORChza2IsIG5lc3RfcGFybXMpOworCiAJcmV0dXJuIDA7CiAKIG5mYXR0cl9mYWlsdXJlOgogCXJlYWRfdW5sb2NrX2JoKCZ0Y3BfbG9jayk7CiAJcmV0dXJuIC0xOwogfQorCitzdGF0aWMgaW50IG5mYXR0cl90b190Y3Aoc3RydWN0IG5mYXR0ciAqY2RhW10sIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0KQoreworCXN0cnVjdCBuZmF0dHIgKmF0dHIgPSBjZGFbQ1RBX1BST1RPSU5GT19UQ1AtMV07CisJc3RydWN0IG5mYXR0ciAqdGJbQ1RBX1BST1RPSU5GT19UQ1BfTUFYXTsKKworICAgICAgICBpZiAobmZhdHRyX3BhcnNlX25lc3RlZCh0YiwgQ1RBX1BST1RPSU5GT19UQ1BfTUFYLCBhdHRyKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBuZmF0dHJfZmFpbHVyZTsKKworCWlmICghdGJbQ1RBX1BST1RPSU5GT19UQ1BfU1RBVEUtMV0pCisJCXJldHVybiAtRUlOVkFMOworCisJd3JpdGVfbG9ja19iaCgmdGNwX2xvY2spOworCWN0LT5wcm90by50Y3Auc3RhdGUgPSAKKwkJKih1X2ludDhfdCAqKU5GQV9EQVRBKHRiW0NUQV9QUk9UT0lORk9fVENQX1NUQVRFLTFdKTsKKwl3cml0ZV91bmxvY2tfYmgoJnRjcF9sb2NrKTsKKworCXJldHVybiAwOworCituZmF0dHJfZmFpbHVyZToKKwlyZXR1cm4gLTE7Cit9CiAjZW5kaWYKIAogc3RhdGljIHVuc2lnbmVkIGludCBnZXRfY29ubnRyYWNrX2luZGV4KGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRjcGgpCkBAIC0xMDE0LDcgKzEwNDAsOCBAQAogCQkvKiBTZXQgQVNTVVJFRCBpZiB3ZSBzZWUgc2VlIHZhbGlkIGFjayBpbiBFU1RBQkxJU0hFRCAKIAkJICAgYWZ0ZXIgU1lOX1JFQ1Ygb3IgYSB2YWxpZCBhbnN3ZXIgZm9yIGEgcGlja2VkIHVwIAogCQkgICBjb25uZWN0aW9uLiAqLwotCQkJc2V0X2JpdChJUFNfQVNTVVJFRF9CSVQsICZjb25udHJhY2stPnN0YXR1cyk7CisJCXNldF9iaXQoSVBTX0FTU1VSRURfQklULCAmY29ubnRyYWNrLT5zdGF0dXMpOworCQlpcF9jb25udHJhY2tfZXZlbnRfY2FjaGUoSVBDVF9TVEFUVVMsIHNrYik7CiAJfQogCWlwX2N0X3JlZnJlc2hfYWNjdChjb25udHJhY2ssIGN0aW5mbywgc2tiLCB0aW1lb3V0KTsKIApAQCAtMTEyMiw2ICsxMTQ5LDcgQEAKICNpZiBkZWZpbmVkKENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTkVUTElOSykgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0lQX05GX0NPTk5UUkFDS19ORVRMSU5LX01PRFVMRSkKIAkudG9fbmZhdHRyCQk9IHRjcF90b19uZmF0dHIsCisJLmZyb21fbmZhdHRyCQk9IG5mYXR0cl90b190Y3AsCiAJLnR1cGxlX3RvX25mYXR0cgk9IGlwX2N0X3BvcnRfdHVwbGVfdG9fbmZhdHRyLAogCS5uZmF0dHJfdG9fdHVwbGUJPSBpcF9jdF9wb3J0X25mYXR0cl90b190dXBsZSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19zdGFuZGFsb25lLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwppbmRleCBhZTNlM2U2Li5kZDQ3NmIxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwpAQCAtOTg5LDE1ICs5ODksMTUgQEAKIEVYUE9SVF9TWU1CT0woaXBfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3Rlcik7CiBFWFBPUlRfU1lNQk9MKGlwX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3Rlcik7CiBFWFBPUlRfU1lNQk9MKGlwX2N0X2l0ZXJhdGVfY2xlYW51cCk7Ci1FWFBPUlRfU1lNQk9MKGlwX2N0X3JlZnJlc2hfYWNjdCk7CitFWFBPUlRfU1lNQk9MKF9faXBfY3RfcmVmcmVzaF9hY2N0KTsKIAogRVhQT1JUX1NZTUJPTChpcF9jb25udHJhY2tfZXhwZWN0X2FsbG9jKTsKIEVYUE9SVF9TWU1CT0woaXBfY29ubnRyYWNrX2V4cGVjdF9wdXQpOwotRVhQT1JUX1NZTUJPTF9HUEwoaXBfY29ubnRyYWNrX2V4cGVjdF9maW5kX2dldCk7CitFWFBPUlRfU1lNQk9MX0dQTChfX2lwX2Nvbm50cmFja19leHBlY3RfZmluZCk7CitFWFBPUlRfU1lNQk9MX0dQTChpcF9jb25udHJhY2tfZXhwZWN0X2ZpbmQpOwogRVhQT1JUX1NZTUJPTChpcF9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQpOwogRVhQT1JUX1NZTUJPTChpcF9jb25udHJhY2tfdW5leHBlY3RfcmVsYXRlZCk7CiBFWFBPUlRfU1lNQk9MX0dQTChpcF9jb25udHJhY2tfZXhwZWN0X2xpc3QpOwotRVhQT1JUX1NZTUJPTF9HUEwoX19pcF9jb25udHJhY2tfZXhwZWN0X2ZpbmQpOwogRVhQT1JUX1NZTUJPTF9HUEwoaXBfY3RfdW5saW5rX2V4cGVjdCk7CiAKIEVYUE9SVF9TWU1CT0woaXBfY29ubnRyYWNrX3R1cGxlX3Rha2VuKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfY29yZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9jb3JlLmMKaW5kZXggMWFkZWRiNy4uYzVlM2FiZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9jb3JlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9jb3JlLmMKQEAgLTc0LDEyICs3NCwxNCBAQAogCiAJcmV0dXJuIHA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChpcF9uYXRfcHJvdG9fZmluZF9nZXQpOwogCiB2b2lkCiBpcF9uYXRfcHJvdG9fcHV0KHN0cnVjdCBpcF9uYXRfcHJvdG9jb2wgKnApCiB7CiAJbW9kdWxlX3B1dChwLT5tZSk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChpcF9uYXRfcHJvdG9fcHV0KTsKIAogLyogV2Uga2VlcCBhbiBleHRyYSBoYXNoIGZvciBlYWNoIGNvbm50cmFjaywgZm9yIGZhc3Qgc2VhcmNoaW5nLiAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKQEAgLTExMSw2ICsxMTMsNyBAQAogCXJldHVybiBjc3VtX2ZvbGQoY3N1bV9wYXJ0aWFsKChjaGFyICopZGlmZnMsIHNpemVvZihkaWZmcyksCiAJCQkJICAgICAgb2xkY2hlY2teMHhGRkZGKSk7CiB9CitFWFBPUlRfU1lNQk9MKGlwX25hdF9jaGVhdF9jaGVjayk7CiAKIC8qIElzIHRoaXMgdHVwbGUgYWxyZWFkeSB0YWtlbj8gKG5vdCBieSB1cykgKi8KIGludApAQCAtMTI3LDYgKzEzMCw3IEBACiAJaW52ZXJ0X3R1cGxlcHIoJnJlcGx5LCB0dXBsZSk7CiAJcmV0dXJuIGlwX2Nvbm50cmFja190dXBsZV90YWtlbigmcmVwbHksIGlnbm9yZWRfY29ubnRyYWNrKTsKIH0KK0VYUE9SVF9TWU1CT0woaXBfbmF0X3VzZWRfdHVwbGUpOwogCiAvKiBJZiB3ZSBzb3VyY2UgbWFwIHRoaXMgdHVwbGUgc28gcmVwbHkgbG9va3MgbGlrZSByZXBseV90dXBsZSwgd2lsbAogICogdGhhdCBtZWV0IHRoZSBjb25zdHJhaW50cyBvZiByYW5nZS4gKi8KQEAgLTM0Nyw2ICszNTEsNyBAQAogCiAJcmV0dXJuIE5GX0FDQ0VQVDsKIH0KK0VYUE9SVF9TWU1CT0woaXBfbmF0X3NldHVwX2luZm8pOwogCiAvKiBSZXR1cm5zIHRydWUgaWYgc3VjY2VlZGVkLiAqLwogc3RhdGljIGludApAQCAtMzg3LDEwICszOTIsMTAgQEAKIH0KIAogLyogRG8gcGFja2V0IG1hbmlwdWxhdGlvbnMgYWNjb3JkaW5nIHRvIGlwX25hdF9zZXR1cF9pbmZvLiAqLwotdW5zaWduZWQgaW50IG5hdF9wYWNrZXQoc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCi0JCQllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKLQkJCXVuc2lnbmVkIGludCBob29rbnVtLAotCQkJc3RydWN0IHNrX2J1ZmYgKipwc2tiKQordW5zaWduZWQgaW50IGlwX25hdF9wYWNrZXQoc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCQkgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgIHVuc2lnbmVkIGludCBob29rbnVtLAorCQkJICAgc3RydWN0IHNrX2J1ZmYgKipwc2tiKQogewogCWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CiAJdW5zaWduZWQgbG9uZyBzdGF0dXNiaXQ7CkBAIC00MTcsMTIgKzQyMiwxMyBAQAogCX0KIAlyZXR1cm4gTkZfQUNDRVBUOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaXBfbmF0X3BhY2tldCk7CiAKIC8qIERpciBpcyBkaXJlY3Rpb24gSUNNUCBpcyBjb21pbmcgZnJvbSAob3Bwb3NpdGUgdG8gcGFja2V0IGl0IGNvbnRhaW5zKSAqLwotaW50IGljbXBfcmVwbHlfdHJhbnNsYXRpb24oc3RydWN0IHNrX2J1ZmYgKipwc2tiLAotCQkJICAgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCi0JCQkgICBlbnVtIGlwX25hdF9tYW5pcF90eXBlIG1hbmlwLAotCQkJICAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcikKK2ludCBpcF9uYXRfaWNtcF9yZXBseV90cmFuc2xhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkJICBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJCQkgIGVudW0gaXBfbmF0X21hbmlwX3R5cGUgbWFuaXAsCisJCQkJICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyKQogewogCXN0cnVjdCB7CiAJCXN0cnVjdCBpY21waGRyIGljbXA7CkBAIC01MDksNiArNTE1LDcgQEAKIAogCXJldHVybiAxOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaXBfbmF0X2ljbXBfcmVwbHlfdHJhbnNsYXRpb24pOwogCiAvKiBQcm90b2NvbCByZWdpc3RyYXRpb24uICovCiBpbnQgaXBfbmF0X3Byb3RvY29sX3JlZ2lzdGVyKHN0cnVjdCBpcF9uYXRfcHJvdG9jb2wgKnByb3RvKQpAQCAtNTI1LDYgKzUzMiw3IEBACiAJd3JpdGVfdW5sb2NrX2JoKCZpcF9uYXRfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0woaXBfbmF0X3Byb3RvY29sX3JlZ2lzdGVyKTsKIAogLyogTm9vbmUgc3RvcmVzIHRoZSBwcm90b2NvbCBhbnl3aGVyZTsgc2ltcGx5IGRlbGV0ZSBpdC4gKi8KIHZvaWQgaXBfbmF0X3Byb3RvY29sX3VucmVnaXN0ZXIoc3RydWN0IGlwX25hdF9wcm90b2NvbCAqcHJvdG8pCkBAIC01MzYsNiArNTQ0LDcgQEAKIAkvKiBTb21lb25lIGNvdWxkIGJlIHN0aWxsIGxvb2tpbmcgYXQgdGhlIHByb3RvIGluIGEgYmguICovCiAJc3luY2hyb25pemVfbmV0KCk7CiB9CitFWFBPUlRfU1lNQk9MKGlwX25hdF9wcm90b2NvbF91bnJlZ2lzdGVyKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0lQX05GX0NPTk5UUkFDS19ORVRMSU5LKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfSVBfTkZfQ09OTlRSQUNLX05FVExJTktfTU9EVUxFKQpAQCAtNTc4LDkgKzU4NywxMSBAQAogCiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGlwX25hdF9wb3J0X25mYXR0cl90b19yYW5nZSk7CitFWFBPUlRfU1lNQk9MX0dQTChpcF9uYXRfcG9ydF9yYW5nZV90b19uZmF0dHIpOwogI2VuZGlmCiAKLWludCBfX2luaXQgaXBfbmF0X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGlwX25hdF9pbml0KHZvaWQpCiB7CiAJc2l6ZV90IGk7CiAKQEAgLTYyMiwxMCArNjMzLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIE5vdCBfX2V4aXQ6IGNhbGxlZCBmcm9tIGlwX25hdF9zdGFuZGFsb25lLmM6aW5pdF9vcl9jbGVhbnVwKCkgLS1SUiAqLwotdm9pZCBpcF9uYXRfY2xlYW51cCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGlwX25hdF9jbGVhbnVwKHZvaWQpCiB7CiAJaXBfY3RfaXRlcmF0ZV9jbGVhbnVwKCZjbGVhbl9uYXQsIE5VTEwpOwogCWlwX2Nvbm50cmFja19kZXN0cm95ZWQgPSBOVUxMOwogCXZmcmVlKGJ5c291cmNlKTsKIH0KKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfaW5pdChpcF9uYXRfaW5pdCk7Cittb2R1bGVfZXhpdChpcF9uYXRfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9oZWxwZXIuYwppbmRleCBkMmRkNWQzLi41ZDUwNmUwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlci5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaGVscGVyLmMKQEAgLTE5OSw2ICsxOTksNyBAQAogCX0KIAlyZXR1cm4gMTsKIH0KK0VYUE9SVF9TWU1CT0woaXBfbmF0X21hbmdsZV90Y3BfcGFja2V0KTsKIAkJCQogLyogR2VuZXJpYyBmdW5jdGlvbiBmb3IgbWFuZ2xpbmcgdmFyaWFibGUtbGVuZ3RoIGFkZHJlc3MgY2hhbmdlcyBpbnNpZGUKICAqIE5BVGVkIFVEUCBjb25uZWN0aW9ucyAobGlrZSB0aGUgQ09OTkVDVCBEQVRBIFhYWFhYIE1FU0cgWFhYWFggSU5ERVggWFhYWFgKQEAgLTI1Niw2ICsyNTcsNyBAQAogCiAJcmV0dXJuIDE7CiB9CitFWFBPUlRfU1lNQk9MKGlwX25hdF9tYW5nbGVfdWRwX3BhY2tldCk7CiAKIC8qIEFkanVzdCBvbmUgZm91bmQgU0FDSyBvcHRpb24gaW5jbHVkaW5nIGNoZWNrc3VtIGNvcnJlY3Rpb24gKi8KIHN0YXRpYyB2b2lkCkBAIC0zOTksNiArNDAxLDcgQEAKIAogCXJldHVybiAxOwogfQorRVhQT1JUX1NZTUJPTChpcF9uYXRfc2VxX2FkanVzdCk7CiAKIC8qIFNldHVwIE5BVCBvbiB0aGlzIGV4cGVjdGVkIGNvbm50cmFjayBzbyBpdCBmb2xsb3dzIG1hc3Rlci4gKi8KIC8qIElmIHdlIGZhaWwgdG8gZ2V0IGEgZnJlZSBOQVQgc2xvdCwgd2UnbGwgZ2V0IGRyb3BwZWQgb24gY29uZmlybSAqLwpAQCAtNDI1LDMgKzQyOCw0IEBACiAJLyogaG9vayBkb2Vzbid0IG1hdHRlciwgYnV0IGl0IGhhcyB0byBkbyBkZXN0aW5hdGlvbiBtYW5pcCAqLwogCWlwX25hdF9zZXR1cF9pbmZvKGN0LCAmcmFuZ2UsIE5GX0lQX1BSRV9ST1VUSU5HKTsKIH0KK0VYUE9SVF9TWU1CT0woaXBfbmF0X2ZvbGxvd19tYXN0ZXIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9oZWxwZXJfcHB0cC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9oZWxwZXJfcHB0cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZGQwNjgKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlcl9wcHRwLmMKQEAgLTAsMCArMSw0MDEgQEAKKy8qCisgKiBpcF9uYXRfcHB0cC5jCS0gVmVyc2lvbiAzLjAKKyAqCisgKiBOQVQgc3VwcG9ydCBmb3IgUFBUUCAoUG9pbnQgdG8gUG9pbnQgVHVubmVsaW5nIFByb3RvY29sKS4KKyAqIFBQVFAgaXMgYSBhIHByb3RvY29sIGZvciBjcmVhdGluZyB2aXJ0dWFsIHByaXZhdGUgbmV0d29ya3MuCisgKiBJdCBpcyBhIHNwZWNpZmljYXRpb24gZGVmaW5lZCBieSBNaWNyb3NvZnQgYW5kIHNvbWUgdmVuZG9ycworICogd29ya2luZyB3aXRoIE1pY3Jvc29mdC4gIFBQVFAgaXMgYnVpbHQgb24gdG9wIG9mIGEgbW9kaWZpZWQKKyAqIHZlcnNpb24gb2YgdGhlIEludGVybmV0IEdlbmVyaWMgUm91dGluZyBFbmNhcHN1bGF0aW9uIFByb3RvY29sLgorICogR1JFIGlzIGRlZmluZWQgaW4gUkZDIDE3MDEgYW5kIFJGQyAxNzAyLiAgRG9jdW1lbnRhdGlvbiBvZgorICogUFBUUCBjYW4gYmUgZm91bmQgaW4gUkZDIDI2MzcKKyAqCisgKiAoQykgMjAwMC0yMDA1IGJ5IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBnbnVtb25rcy5vcmc+CisgKgorICogRGV2ZWxvcG1lbnQgb2YgdGhpcyBjb2RlIGZ1bmRlZCBieSBBc3Rhcm8gQUcgKGh0dHA6Ly93d3cuYXN0YXJvLmNvbS8pCisgKgorICogVE9ETzogLSBOQVQgdG8gYSB1bmlxdWUgdHVwbGUsIG5vdCB0byBUQ1Agc291cmNlIHBvcnQKKyAqIAkgICAobmVlZHMgbmV0ZmlsdGVyIHR1cGxlIHJlc2VydmF0aW9uKQorICoKKyAqIENoYW5nZXM6CisgKiAgICAgMjAwMi0wMi0xMCAtIFZlcnNpb24gMS4zCisgKiAgICAgICAtIFVzZSBpcF9uYXRfbWFuZ2xlX3RjcF9wYWNrZXQoKSBiZWNhdXNlIG9mIGNsb25lZCBza2IncworICoJICAgaW4gbG9jYWwgY29ubmVjdGlvbnMgKFBoaWxpcCBDcmFpZyA8cGhpbGlwY0BzbmFwZ2Vhci5jb20+KQorICogICAgICAgLSBhZGQgY2hlY2tzIGZvciBtYWdpY0Nvb2tpZSBhbmQgcHB0cCB2ZXJzaW9uCisgKiAgICAgICAtIG1ha2UgYXJndW1lbnQgbGlzdCBvZiBwcHRwX3tvdXQsaW59Ym91bmRfcGFja2V0KCkgc2hvcnRlcgorICogICAgICAgLSBtb3ZlIHRvIEM5OSBzdHlsZSBpbml0aWFsaXplcnMKKyAqICAgICAgIC0gcHJpbnQgdmVyc2lvbiBudW1iZXIgYXQgbW9kdWxlIGxvYWR0aW1lCisgKiAgICAgMjAwMy0wOS0yMiAtIFZlcnNpb24gMS41CisgKiAgICAgICAtIHVzZSBTTkFUZWQgdGNwIHNvdXJjZXBvcnQgYXMgY2FsbGlkLCBzaW5jZSB3ZSBnZXQgY2FsbGVkIGJlZm9yZQorICoJICAgVENQIGhlYWRlciBpcyBtYW5nbGVkIChQaGlsaXAgQ3JhaWcgPHBoaWxpcGNAc25hcGdlYXIuY29tPikKKyAqICAgICAyMDA0LTEwLTIyIC0gVmVyc2lvbiAyLjAKKyAqICAgICAgIC0ga2VybmVsIDIuNi54IHZlcnNpb24KKyAqICAgICAyMDA1LTA2LTEwIC0gVmVyc2lvbiAzLjAKKyAqICAgICAgIC0ga2VybmVsID49IDIuNi4xMSB2ZXJzaW9uLAorICoJICAgZnVuZGVkIGJ5IE94Y29kYSBOZXRCb3ggQmx1ZSAoaHR0cDovL3d3dy5uZXRib3hibHVlLmNvbS8pCisgKiAKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKyNpbmNsdWRlIDxuZXQvdGNwLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXRfcnVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdF9oZWxwZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXRfcHB0cC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlci5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19wcm90b19ncmUuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfcHB0cC5oPgorCisjZGVmaW5lIElQX05BVF9QUFRQX1ZFUlNJT04gIjMuMCIKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSGFyYWxkIFdlbHRlIDxsYWZvcmdlQGdudW1vbmtzLm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTmV0ZmlsdGVyIE5BVCBoZWxwZXIgbW9kdWxlIGZvciBQUFRQIik7CisKKworI2lmIDAKK2V4dGVybiBjb25zdCBjaGFyICpwcHRwX21zZ19uYW1lW107CisjZGVmaW5lIERFQlVHUChmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHICIlczolczogIiBmb3JtYXQsIF9fRklMRV9fLCBcCisJCQkJICAgICAgIF9fRlVOQ1RJT05fXywgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIERFQlVHUChmb3JtYXQsIGFyZ3MuLi4pCisjZW5kaWYKKworc3RhdGljIHZvaWQgcHB0cF9uYXRfZXhwZWN0ZWQoc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCQkgICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwKQoreworCXN0cnVjdCBpcF9jb25udHJhY2sgKm1hc3RlciA9IGN0LT5tYXN0ZXI7CisJc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKm90aGVyX2V4cDsKKwlzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlIHQ7CisJc3RydWN0IGlwX2N0X3BwdHBfbWFzdGVyICpjdF9wcHRwX2luZm87CisJc3RydWN0IGlwX25hdF9wcHRwICpuYXRfcHB0cF9pbmZvOworCisJY3RfcHB0cF9pbmZvID0gJm1hc3Rlci0+aGVscC5jdF9wcHRwX2luZm87CisJbmF0X3BwdHBfaW5mbyA9ICZtYXN0ZXItPm5hdC5oZWxwLm5hdF9wcHRwX2luZm87CisKKwkvKiBBbmQgaGVyZSBnb2VzIHRoZSBncmFuZCBmaW5hbGUgb2YgY29ycm9zaW9uLi4uICovCisKKwlpZiAoZXhwLT5kaXIgPT0gSVBfQ1RfRElSX09SSUdJTkFMKSB7CisJCURFQlVHUCgid2UgYXJlIFBOUy0+UEFDXG4iKTsKKwkJLyogdGhlcmVmb3JlLCBidWlsZCB0dXBsZSBmb3IgUEFDLT5QTlMgKi8KKwkJdC5zcmMuaXAgPSBtYXN0ZXItPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlLnNyYy5pcDsKKwkJdC5zcmMudS5ncmUua2V5ID0gaHRvbnMobWFzdGVyLT5oZWxwLmN0X3BwdHBfaW5mby5wYWNfY2FsbF9pZCk7CisJCXQuZHN0LmlwID0gbWFzdGVyLT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZS5kc3QuaXA7CisJCXQuZHN0LnUuZ3JlLmtleSA9IGh0b25zKG1hc3Rlci0+aGVscC5jdF9wcHRwX2luZm8ucG5zX2NhbGxfaWQpOworCQl0LmRzdC5wcm90b251bSA9IElQUFJPVE9fR1JFOworCX0gZWxzZSB7CisJCURFQlVHUCgid2UgYXJlIFBBQy0+UE5TXG4iKTsKKwkJLyogYnVpbGQgdHVwbGUgZm9yIFBOUy0+UEFDICovCisJCXQuc3JjLmlwID0gbWFzdGVyLT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5zcmMuaXA7CisJCXQuc3JjLnUuZ3JlLmtleSA9IAorCQkJaHRvbnMobWFzdGVyLT5uYXQuaGVscC5uYXRfcHB0cF9pbmZvLnBuc19jYWxsX2lkKTsKKwkJdC5kc3QuaXAgPSBtYXN0ZXItPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLmRzdC5pcDsKKwkJdC5kc3QudS5ncmUua2V5ID0gCisJCQlodG9ucyhtYXN0ZXItPm5hdC5oZWxwLm5hdF9wcHRwX2luZm8ucGFjX2NhbGxfaWQpOworCQl0LmRzdC5wcm90b251bSA9IElQUFJPVE9fR1JFOworCX0KKworCURFQlVHUCgidHJ5aW5nIHRvIHVuZXhwZWN0IG90aGVyIGRpcjogIik7CisJRFVNUF9UVVBMRSgmdCk7CisJb3RoZXJfZXhwID0gaXBfY29ubnRyYWNrX2V4cGVjdF9maW5kKCZ0KTsKKwlpZiAob3RoZXJfZXhwKSB7CisJCWlwX2Nvbm50cmFja191bmV4cGVjdF9yZWxhdGVkKG90aGVyX2V4cCk7CisJCWlwX2Nvbm50cmFja19leHBlY3RfcHV0KG90aGVyX2V4cCk7CisJCURFQlVHUCgic3VjY2Vzc1xuIik7CisJfSBlbHNlIHsKKwkJREVCVUdQKCJub3QgZm91bmQhXG4iKTsKKwl9CisKKwlpcF9uYXRfZm9sbG93X21hc3RlcihjdCwgZXhwKTsKK30KKworLyogb3V0Ym91bmQgcGFja2V0cyA9PSBmcm9tIFBOUyB0byBQQUMgKi8KK3N0YXRpYyBpbnQKK3BwdHBfb3V0Ym91bmRfcGt0KHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJICBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJICBzdHJ1Y3QgUHB0cENvbnRyb2xIZWFkZXIgKmN0bGgsCisJCSAgdW5pb24gcHB0cF9jdHJsX3VuaW9uICpwcHRwUmVxKQorCit7CisJc3RydWN0IGlwX2N0X3BwdHBfbWFzdGVyICpjdF9wcHRwX2luZm8gPSAmY3QtPmhlbHAuY3RfcHB0cF9pbmZvOworCXN0cnVjdCBpcF9uYXRfcHB0cCAqbmF0X3BwdHBfaW5mbyA9ICZjdC0+bmF0LmhlbHAubmF0X3BwdHBfaW5mbzsKKworCXVfaW50MTZfdCBtc2csICpjaWQgPSBOVUxMLCBuZXdfY2FsbGlkOworCisJbmV3X2NhbGxpZCA9IGh0b25zKGN0X3BwdHBfaW5mby0+cG5zX2NhbGxfaWQpOworCQorCXN3aXRjaCAobXNnID0gbnRvaHMoY3RsaC0+bWVzc2FnZVR5cGUpKSB7CisJCWNhc2UgUFBUUF9PVVRfQ0FMTF9SRVFVRVNUOgorCQkJY2lkID0gJnBwdHBSZXEtPm9jcmVxLmNhbGxJRDsKKwkJCS8qIEZJWE1FOiBpZGVhbGx5IHdlIHdvdWxkIHdhbnQgdG8gcmVzZXJ2ZSBhIGNhbGwgSUQKKwkJCSAqIGhlcmUuICBjdXJyZW50IG5ldGZpbHRlciBOQVQgY29yZSBpcyBub3QgYWJsZSB0byBkbworCQkJICogdGhpcyA6KCBGb3Igbm93IHdlIHVzZSBUQ1Agc291cmNlIHBvcnQuIFRoaXMgYnJlYWtzCisJCQkgKiBtdWx0aXBsZSBjYWxscyB3aXRoaW4gb25lIGNvbnRyb2wgc2Vzc2lvbiAqLworCisJCQkvKiBzYXZlIG9yaWdpbmFsIGNhbGwgSUQgaW4gbmF0X2luZm8gKi8KKwkJCW5hdF9wcHRwX2luZm8tPnBuc19jYWxsX2lkID0gY3RfcHB0cF9pbmZvLT5wbnNfY2FsbF9pZDsKKworCQkJLyogZG9uJ3QgdXNlIHRjcGgtPnNvdXJjZSBzaW5jZSB3ZSBhcmUgYXQgYSBEU1RtYW5pcAorCQkJICogaG9vayAoZS5nLiBQUkVST1VUSU5HKSBhbmQgcGt0IGlzIG5vdCBtYW5nbGVkIHlldCAqLworCQkJbmV3X2NhbGxpZCA9IGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZS5kc3QudS50Y3AucG9ydDsKKworCQkJLyogc2F2ZSBuZXcgY2FsbCBJRCBpbiBjdCBpbmZvICovCisJCQljdF9wcHRwX2luZm8tPnBuc19jYWxsX2lkID0gbnRvaHMobmV3X2NhbGxpZCk7CisJCQlicmVhazsKKwkJY2FzZSBQUFRQX0lOX0NBTExfUkVQTFk6CisJCQljaWQgPSAmcHB0cFJlcS0+aWNyZXEuY2FsbElEOworCQkJYnJlYWs7CisJCWNhc2UgUFBUUF9DQUxMX0NMRUFSX1JFUVVFU1Q6CisJCQljaWQgPSAmcHB0cFJlcS0+Y2xycmVxLmNhbGxJRDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJREVCVUdQKCJ1bmtub3duIG91dGJvdW5kIHBhY2tldCAweCUwNHg6JXNcbiIsIG1zZywKKwkJCSAgICAgIChtc2cgPD0gUFBUUF9NU0dfTUFYKT8gCisJCQkgICAgICBwcHRwX21zZ19uYW1lW21zZ106cHB0cF9tc2dfbmFtZVswXSk7CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKworCQljYXNlIFBQVFBfU0VUX0xJTktfSU5GTzoKKwkJCS8qIG9ubHkgbmVlZCB0byBOQVQgaW4gY2FzZSBQQUMgaXMgYmVoaW5kIE5BVCBib3ggKi8KKwkJY2FzZSBQUFRQX1NUQVJUX1NFU1NJT05fUkVRVUVTVDoKKwkJY2FzZSBQUFRQX1NUQVJUX1NFU1NJT05fUkVQTFk6CisJCWNhc2UgUFBUUF9TVE9QX1NFU1NJT05fUkVRVUVTVDoKKwkJY2FzZSBQUFRQX1NUT1BfU0VTU0lPTl9SRVBMWToKKwkJY2FzZSBQUFRQX0VDSE9fUkVRVUVTVDoKKwkJY2FzZSBQUFRQX0VDSE9fUkVQTFk6CisJCQkvKiBubyBuZWVkIHRvIGFsdGVyIHBhY2tldCAqLworCQkJcmV0dXJuIE5GX0FDQ0VQVDsKKwl9CisKKwkvKiBvbmx5IE9VVF9DQUxMX1JFUVVFU1QsIElOX0NBTExfUkVQTFksIENBTExfQ0xFQVJfUkVRVUVTVCBwYXNzCisJICogZG93biB0byBoZXJlICovCisKKwlJUF9ORl9BU1NFUlQoY2lkKTsKKworCURFQlVHUCgiYWx0ZXJpbmcgY2FsbCBpZCBmcm9tIDB4JTA0eCB0byAweCUwNHhcbiIsCisJCW50b2hzKCpjaWQpLCBudG9ocyhuZXdfY2FsbGlkKSk7CisKKwkvKiBtYW5nbGUgcGFja2V0ICovCisJaWYgKGlwX25hdF9tYW5nbGVfdGNwX3BhY2tldChwc2tiLCBjdCwgY3RpbmZvLAorCQkodm9pZCAqKWNpZCAtICgodm9pZCAqKWN0bGggLSBzaXplb2Yoc3RydWN0IHBwdHBfcGt0X2hkcikpLAorCQkJCSAJc2l6ZW9mKG5ld19jYWxsaWQpLCAKKwkJCQkJKGNoYXIgKikmbmV3X2NhbGxpZCwKKwkJCQkgCXNpemVvZihuZXdfY2FsbGlkKSkgPT0gMCkKKwkJcmV0dXJuIE5GX0RST1A7CisKKwlyZXR1cm4gTkZfQUNDRVBUOworfQorCitzdGF0aWMgaW50CitwcHRwX2V4cF9ncmUoc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdF9vcmlnLAorCSAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdF9yZXBseSkKK3sKKwlzdHJ1Y3QgaXBfY3RfcHB0cF9tYXN0ZXIgKmN0X3BwdHBfaW5mbyA9IAorCQkJCSZleHBlY3Rfb3JpZy0+bWFzdGVyLT5oZWxwLmN0X3BwdHBfaW5mbzsKKwlzdHJ1Y3QgaXBfbmF0X3BwdHAgKm5hdF9wcHRwX2luZm8gPSAKKwkJCQkmZXhwZWN0X29yaWctPm1hc3Rlci0+bmF0LmhlbHAubmF0X3BwdHBfaW5mbzsKKworCXN0cnVjdCBpcF9jb25udHJhY2sgKmN0ID0gZXhwZWN0X29yaWctPm1hc3RlcjsKKworCXN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgaW52X3Q7CisJc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqb3JpZ190LCAqcmVwbHlfdDsKKworCS8qIHNhdmUgb3JpZ2luYWwgUEFDIGNhbGwgSUQgaW4gbmF0X2luZm8gKi8KKwluYXRfcHB0cF9pbmZvLT5wYWNfY2FsbF9pZCA9IGN0X3BwdHBfaW5mby0+cGFjX2NhbGxfaWQ7CisKKwkvKiBhbHRlciBleHBlY3RhdGlvbiAqLworCW9yaWdfdCA9ICZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7CisJcmVwbHlfdCA9ICZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGU7CisKKwkvKiBhbHRlciBleHBlY3RhdGlvbiBmb3IgUE5TLT5QQUMgZGlyZWN0aW9uICovCisJaW52ZXJ0X3R1cGxlcHIoJmludl90LCAmZXhwZWN0X29yaWctPnR1cGxlKTsKKwlleHBlY3Rfb3JpZy0+c2F2ZWRfcHJvdG8uZ3JlLmtleSA9IGh0b25zKG5hdF9wcHRwX2luZm8tPnBhY19jYWxsX2lkKTsKKwlleHBlY3Rfb3JpZy0+dHVwbGUuc3JjLnUuZ3JlLmtleSA9IGh0b25zKG5hdF9wcHRwX2luZm8tPnBuc19jYWxsX2lkKTsKKwlleHBlY3Rfb3JpZy0+dHVwbGUuZHN0LnUuZ3JlLmtleSA9IGh0b25zKGN0X3BwdHBfaW5mby0+cGFjX2NhbGxfaWQpOworCWludl90LnNyYy5pcCA9IHJlcGx5X3QtPnNyYy5pcDsKKwlpbnZfdC5kc3QuaXAgPSByZXBseV90LT5kc3QuaXA7CisJaW52X3Quc3JjLnUuZ3JlLmtleSA9IGh0b25zKG5hdF9wcHRwX2luZm8tPnBhY19jYWxsX2lkKTsKKwlpbnZfdC5kc3QudS5ncmUua2V5ID0gaHRvbnMoY3RfcHB0cF9pbmZvLT5wbnNfY2FsbF9pZCk7CisKKwlpZiAoIWlwX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZChleHBlY3Rfb3JpZykpIHsKKwkJREVCVUdQKCJzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCBleHBlY3RcbiIpOworCX0gZWxzZSB7CisJCURFQlVHUCgiY2FuJ3QgZXhwZWN0X3JlbGF0ZWQoZXhwZWN0X29yaWcpXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogYWx0ZXIgZXhwZWN0YXRpb24gZm9yIFBBQy0+UE5TIGRpcmVjdGlvbiAqLworCWludmVydF90dXBsZXByKCZpbnZfdCwgJmV4cGVjdF9yZXBseS0+dHVwbGUpOworCWV4cGVjdF9yZXBseS0+c2F2ZWRfcHJvdG8uZ3JlLmtleSA9IGh0b25zKG5hdF9wcHRwX2luZm8tPnBuc19jYWxsX2lkKTsKKwlleHBlY3RfcmVwbHktPnR1cGxlLnNyYy51LmdyZS5rZXkgPSBodG9ucyhuYXRfcHB0cF9pbmZvLT5wYWNfY2FsbF9pZCk7CisJZXhwZWN0X3JlcGx5LT50dXBsZS5kc3QudS5ncmUua2V5ID0gaHRvbnMoY3RfcHB0cF9pbmZvLT5wbnNfY2FsbF9pZCk7CisJaW52X3Quc3JjLmlwID0gb3JpZ190LT5zcmMuaXA7CisJaW52X3QuZHN0LmlwID0gb3JpZ190LT5kc3QuaXA7CisJaW52X3Quc3JjLnUuZ3JlLmtleSA9IGh0b25zKG5hdF9wcHRwX2luZm8tPnBuc19jYWxsX2lkKTsKKwlpbnZfdC5kc3QudS5ncmUua2V5ID0gaHRvbnMoY3RfcHB0cF9pbmZvLT5wYWNfY2FsbF9pZCk7CisKKwlpZiAoIWlwX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZChleHBlY3RfcmVwbHkpKSB7CisJCURFQlVHUCgic3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQgZXhwZWN0XG4iKTsKKwl9IGVsc2UgeworCQlERUJVR1AoImNhbid0IGV4cGVjdF9yZWxhdGVkKGV4cGVjdF9yZXBseSlcbiIpOworCQlpcF9jb25udHJhY2tfdW5leHBlY3RfcmVsYXRlZChleHBlY3Rfb3JpZyk7CisJCXJldHVybiAxOworCX0KKworCWlmIChpcF9jdF9ncmVfa2V5bWFwX2FkZChjdCwgJmV4cGVjdF9yZXBseS0+dHVwbGUsIDApIDwgMCkgeworCQlERUJVR1AoImNhbid0IHJlZ2lzdGVyIG9yaWdpbmFsIGtleW1hcFxuIik7CisJCWlwX2Nvbm50cmFja191bmV4cGVjdF9yZWxhdGVkKGV4cGVjdF9vcmlnKTsKKwkJaXBfY29ubnRyYWNrX3VuZXhwZWN0X3JlbGF0ZWQoZXhwZWN0X3JlcGx5KTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKGlwX2N0X2dyZV9rZXltYXBfYWRkKGN0LCAmaW52X3QsIDEpIDwgMCkgeworCQlERUJVR1AoImNhbid0IHJlZ2lzdGVyIHJlcGx5IGtleW1hcFxuIik7CisJCWlwX2Nvbm50cmFja191bmV4cGVjdF9yZWxhdGVkKGV4cGVjdF9vcmlnKTsKKwkJaXBfY29ubnRyYWNrX3VuZXhwZWN0X3JlbGF0ZWQoZXhwZWN0X3JlcGx5KTsKKwkJaXBfY3RfZ3JlX2tleW1hcF9kZXN0cm95KGN0KTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIGluYm91bmQgcGFja2V0cyA9PSBmcm9tIFBBQyB0byBQTlMgKi8KK3N0YXRpYyBpbnQKK3BwdHBfaW5ib3VuZF9wa3Qoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCSBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJIHN0cnVjdCBQcHRwQ29udHJvbEhlYWRlciAqY3RsaCwKKwkJIHVuaW9uIHBwdHBfY3RybF91bmlvbiAqcHB0cFJlcSkKK3sKKwlzdHJ1Y3QgaXBfbmF0X3BwdHAgKm5hdF9wcHRwX2luZm8gPSAmY3QtPm5hdC5oZWxwLm5hdF9wcHRwX2luZm87CisJdV9pbnQxNl90IG1zZywgbmV3X2NpZCA9IDAsIG5ld19wY2lkLCAqcGNpZCA9IE5VTEwsICpjaWQgPSBOVUxMOworCisJaW50IHJldCA9IE5GX0FDQ0VQVCwgcnY7CisKKwluZXdfcGNpZCA9IGh0b25zKG5hdF9wcHRwX2luZm8tPnBuc19jYWxsX2lkKTsKKworCXN3aXRjaCAobXNnID0gbnRvaHMoY3RsaC0+bWVzc2FnZVR5cGUpKSB7CisJY2FzZSBQUFRQX09VVF9DQUxMX1JFUExZOgorCQlwY2lkID0gJnBwdHBSZXEtPm9jYWNrLnBlZXJzQ2FsbElEOwkKKwkJY2lkID0gJnBwdHBSZXEtPm9jYWNrLmNhbGxJRDsKKwkJYnJlYWs7CisJY2FzZSBQUFRQX0lOX0NBTExfQ09OTkVDVDoKKwkJcGNpZCA9ICZwcHRwUmVxLT5pY2Nvbi5wZWVyc0NhbGxJRDsKKwkJYnJlYWs7CisJY2FzZSBQUFRQX0lOX0NBTExfUkVRVUVTVDoKKwkJLyogb25seSBuZWVkIHRvIG5hdCBpbiBjYXNlIFBBQyBpcyBiZWhpbmQgTkFUIGJveCAqLworCQlicmVhazsKKwljYXNlIFBQVFBfV0FOX0VSUk9SX05PVElGWToKKwkJcGNpZCA9ICZwcHRwUmVxLT53YW5lcnIucGVlcnNDYWxsSUQ7CisJCWJyZWFrOworCWNhc2UgUFBUUF9DQUxMX0RJU0NPTk5FQ1RfTk9USUZZOgorCQlwY2lkID0gJnBwdHBSZXEtPmRpc2MuY2FsbElEOworCQlicmVhazsKKwljYXNlIFBQVFBfU0VUX0xJTktfSU5GTzoKKwkJcGNpZCA9ICZwcHRwUmVxLT5zZXRsaW5rLnBlZXJzQ2FsbElEOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCURFQlVHUCgidW5rbm93biBpbmJvdW5kIHBhY2tldCAlc1xuIiwgKG1zZyA8PSBQUFRQX01TR19NQVgpPyAKKwkJCXBwdHBfbXNnX25hbWVbbXNnXTpwcHRwX21zZ19uYW1lWzBdKTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisKKwljYXNlIFBQVFBfU1RBUlRfU0VTU0lPTl9SRVFVRVNUOgorCWNhc2UgUFBUUF9TVEFSVF9TRVNTSU9OX1JFUExZOgorCWNhc2UgUFBUUF9TVE9QX1NFU1NJT05fUkVRVUVTVDoKKwljYXNlIFBQVFBfU1RPUF9TRVNTSU9OX1JFUExZOgorCWNhc2UgUFBUUF9FQ0hPX1JFUVVFU1Q6CisJY2FzZSBQUFRQX0VDSE9fUkVQTFk6CisJCS8qIG5vIG5lZWQgdG8gYWx0ZXIgcGFja2V0ICovCisJCXJldHVybiBORl9BQ0NFUFQ7CisJfQorCisJLyogb25seSBPVVRfQ0FMTF9SRVBMWSwgSU5fQ0FMTF9DT05ORUNULCBJTl9DQUxMX1JFUVVFU1QsCisJICogV0FOX0VSUk9SX05PVElGWSwgQ0FMTF9ESVNDT05ORUNUX05PVElGWSBwYXNzIGRvd24gaGVyZSAqLworCisJLyogbWFuZ2xlIHBhY2tldCAqLworCUlQX05GX0FTU0VSVChwY2lkKTsKKwlERUJVR1AoImFsdGVyaW5nIHBlZXIgY2FsbCBpZCBmcm9tIDB4JTA0eCB0byAweCUwNHhcbiIsCisJCW50b2hzKCpwY2lkKSwgbnRvaHMobmV3X3BjaWQpKTsKKwkKKwlydiA9IGlwX25hdF9tYW5nbGVfdGNwX3BhY2tldChwc2tiLCBjdCwgY3RpbmZvLCAKKwkJCQkgICAgICAodm9pZCAqKXBjaWQgLSAoKHZvaWQgKiljdGxoIC0gc2l6ZW9mKHN0cnVjdCBwcHRwX3BrdF9oZHIpKSwKKwkJCQkgICAgICBzaXplb2YobmV3X3BjaWQpLCAoY2hhciAqKSZuZXdfcGNpZCwgCisJCQkJICAgICAgc2l6ZW9mKG5ld19wY2lkKSk7CisJaWYgKHJ2ICE9IE5GX0FDQ0VQVCkgCisJCXJldHVybiBydjsKKworCWlmIChuZXdfY2lkKSB7CisJCUlQX05GX0FTU0VSVChjaWQpOworCQlERUJVR1AoImFsdGVyaW5nIGNhbGwgaWQgZnJvbSAweCUwNHggdG8gMHglMDR4XG4iLAorCQkJbnRvaHMoKmNpZCksIG50b2hzKG5ld19jaWQpKTsKKwkJcnYgPSBpcF9uYXRfbWFuZ2xlX3RjcF9wYWNrZXQocHNrYiwgY3QsIGN0aW5mbywgCisJCQkJCSAgICAgICh2b2lkICopY2lkIC0gKCh2b2lkICopY3RsaCAtIHNpemVvZihzdHJ1Y3QgcHB0cF9wa3RfaGRyKSksIAorCQkJCQkgICAgICBzaXplb2YobmV3X2NpZCksCisJCQkJCSAgICAgIChjaGFyICopJm5ld19jaWQsIAorCQkJCQkgICAgICBzaXplb2YobmV3X2NpZCkpOworCQlpZiAocnYgIT0gTkZfQUNDRVBUKQorCQkJcmV0dXJuIHJ2OworCX0KKworCS8qIGNoZWNrIGZvciBlYXJsaWVyIHJldHVybiB2YWx1ZSBvZiAnc3dpdGNoJyBhYm92ZSAqLworCWlmIChyZXQgIT0gTkZfQUNDRVBUKQorCQlyZXR1cm4gcmV0OworCisJLyogZ3JlYXQsIGF0IGxlYXN0IHdlIGRvbid0IG5lZWQgdG8gcmVzaXplIHBhY2tldHMgKi8KKwlyZXR1cm4gTkZfQUNDRVBUOworfQorCisKK2V4dGVybiBpbnQgX19pbml0IGlwX25hdF9wcm90b19ncmVfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIF9fZXhpdCBpcF9uYXRfcHJvdG9fZ3JlX2Zpbmkodm9pZCk7CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJREVCVUdQKCIlczogcmVnaXN0ZXJpbmcgTkFUIGhlbHBlclxuIiwgX19GSUxFX18pOworCisJcmV0ID0gaXBfbmF0X3Byb3RvX2dyZV9pbml0KCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlCVUdfT04oaXBfbmF0X3BwdHBfaG9va19vdXRib3VuZCk7CisJaXBfbmF0X3BwdHBfaG9va19vdXRib3VuZCA9ICZwcHRwX291dGJvdW5kX3BrdDsKKworCUJVR19PTihpcF9uYXRfcHB0cF9ob29rX2luYm91bmQpOworCWlwX25hdF9wcHRwX2hvb2tfaW5ib3VuZCA9ICZwcHRwX2luYm91bmRfcGt0OworCisJQlVHX09OKGlwX25hdF9wcHRwX2hvb2tfZXhwX2dyZSk7CisJaXBfbmF0X3BwdHBfaG9va19leHBfZ3JlID0gJnBwdHBfZXhwX2dyZTsKKworCUJVR19PTihpcF9uYXRfcHB0cF9ob29rX2V4cGVjdGZuKTsKKwlpcF9uYXRfcHB0cF9ob29rX2V4cGVjdGZuID0gJnBwdHBfbmF0X2V4cGVjdGVkOworCisJcHJpbnRrKCJpcF9uYXRfcHB0cCB2ZXJzaW9uICVzIGxvYWRlZFxuIiwgSVBfTkFUX1BQVFBfVkVSU0lPTik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCit7CisJREVCVUdQKCJjbGVhbnVwX21vZHVsZVxuIiApOworCisJaXBfbmF0X3BwdHBfaG9va19leHBlY3RmbiA9IE5VTEw7CisJaXBfbmF0X3BwdHBfaG9va19leHBfZ3JlID0gTlVMTDsKKwlpcF9uYXRfcHB0cF9ob29rX2luYm91bmQgPSBOVUxMOworCWlwX25hdF9wcHRwX2hvb2tfb3V0Ym91bmQgPSBOVUxMOworCisJaXBfbmF0X3Byb3RvX2dyZV9maW5pKCk7CisJLyogTWFrZSBzdXJlIG5vb25lIGNhbGxzIGl0LCBtZWFud2hpbGUgKi8KKwlzeW5jaHJvbml6ZV9uZXQoKTsKKworCXByaW50aygiaXBfbmF0X3BwdHAgdmVyc2lvbiAlcyB1bmxvYWRlZFxuIiwgSVBfTkFUX1BQVFBfVkVSU0lPTik7Cit9CisKK21vZHVsZV9pbml0KGluaXQpOworbW9kdWxlX2V4aXQoZmluaSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3Byb3RvX2dyZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9wcm90b19ncmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzEyODU0Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9wcm90b19ncmUuYwpAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAqIGlwX25hdF9wcm90b19ncmUuYyAtIFZlcnNpb24gMi4wCisgKgorICogTkFUIHByb3RvY29sIGhlbHBlciBtb2R1bGUgZm9yIEdSRS4KKyAqCisgKiBHUkUgaXMgYSBnZW5lcmljIGVuY2Fwc3VsYXRpb24gcHJvdG9jb2wsIHdoaWNoIGlzIGdlbmVyYWxseSBub3QgdmVyeQorICogc3VpdGVkIGZvciBOQVQsIGFzIGl0IGhhcyBubyBwcm90b2NvbC1zcGVjaWZpYyBwYXJ0IGFzIHBvcnQgbnVtYmVycy4KKyAqCisgKiBJdCBoYXMgYW4gb3B0aW9uYWwga2V5IGZpZWxkLCB3aGljaCBtYXkgaGVscCB1cyBkaXN0aW5ndWlzaGluZyB0d28gCisgKiBjb25uZWN0aW9ucyBiZXR3ZWVuIHRoZSBzYW1lIHR3byBob3N0cy4KKyAqCisgKiBHUkUgaXMgZGVmaW5lZCBpbiBSRkMgMTcwMSBhbmQgUkZDIDE3MDIsIGFzIHdlbGwgYXMgUkZDIDI3ODQgCisgKgorICogUFBUUCBpcyBidWlsdCBvbiB0b3Agb2YgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIEdSRSwgYW5kIGhhcyBhIG1hbmRhdG9yeQorICogZmllbGQgY2FsbGVkICJDYWxsSUQiLCB3aGljaCBzZXJ2ZXMgdXMgZm9yIHRoZSBzYW1lIHB1cnBvc2UgYXMgdGhlIGtleQorICogZmllbGQgaW4gcGxhaW4gR1JFLgorICoKKyAqIERvY3VtZW50YXRpb24gYWJvdXQgUFBUUCBjYW4gYmUgZm91bmQgaW4gUkZDIDI2MzcKKyAqCisgKiAoQykgMjAwMC0yMDA1IGJ5IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBnbnVtb25rcy5vcmc+CisgKgorICogRGV2ZWxvcG1lbnQgb2YgdGhpcyBjb2RlIGZ1bmRlZCBieSBBc3Rhcm8gQUcgKGh0dHA6Ly93d3cuYXN0YXJvLmNvbS8pCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdF9ydWxlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0X3Byb3RvY29sLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3Byb3RvX2dyZS5oPgorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJOZXRmaWx0ZXIgTkFUIHByb3RvY29sIGhlbHBlciBtb2R1bGUgZm9yIEdSRSIpOworCisjaWYgMAorI2RlZmluZSBERUJVR1AoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyAiJXM6JXM6ICIgZm9ybWF0LCBfX0ZJTEVfXywgXAorCQkJCSAgICAgICBfX0ZVTkNUSU9OX18sICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBERUJVR1AoeCwgYXJncy4uLikKKyNlbmRpZgorCisvKiBpcyBrZXkgaW4gZ2l2ZW4gcmFuZ2UgYmV0d2VlbiBtaW4gYW5kIG1heCAqLworc3RhdGljIGludAorZ3JlX2luX3JhbmdlKGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorCSAgICAgZW51bSBpcF9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUsCisJICAgICBjb25zdCB1bmlvbiBpcF9jb25udHJhY2tfbWFuaXBfcHJvdG8gKm1pbiwKKwkgICAgIGNvbnN0IHVuaW9uIGlwX2Nvbm50cmFja19tYW5pcF9wcm90byAqbWF4KQoreworCXVfaW50MzJfdCBrZXk7CisKKwlpZiAobWFuaXB0eXBlID09IElQX05BVF9NQU5JUF9TUkMpCisJCWtleSA9IHR1cGxlLT5zcmMudS5ncmUua2V5OworCWVsc2UKKwkJa2V5ID0gdHVwbGUtPmRzdC51LmdyZS5rZXk7CisKKwlyZXR1cm4gbnRvaGwoa2V5KSA+PSBudG9obChtaW4tPmdyZS5rZXkpCisJCSYmIG50b2hsKGtleSkgPD0gbnRvaGwobWF4LT5ncmUua2V5KTsKK30KKworLyogZ2VuZXJhdGUgdW5pcXVlIHR1cGxlIC4uLiAqLworc3RhdGljIGludCAKK2dyZV91bmlxdWVfdHVwbGUoc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJCSBjb25zdCBzdHJ1Y3QgaXBfbmF0X3JhbmdlICpyYW5nZSwKKwkJIGVudW0gaXBfbmF0X21hbmlwX3R5cGUgbWFuaXB0eXBlLAorCQkgY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFjayAqY29ubnRyYWNrKQoreworCXN0YXRpYyB1X2ludDE2X3Qga2V5OworCXVfaW50MTZfdCAqa2V5cHRyOworCXVuc2lnbmVkIGludCBtaW4sIGksIHJhbmdlX3NpemU7CisKKwlpZiAobWFuaXB0eXBlID09IElQX05BVF9NQU5JUF9TUkMpCisJCWtleXB0ciA9ICZ0dXBsZS0+c3JjLnUuZ3JlLmtleTsKKwllbHNlCisJCWtleXB0ciA9ICZ0dXBsZS0+ZHN0LnUuZ3JlLmtleTsKKworCWlmICghKHJhbmdlLT5mbGFncyAmIElQX05BVF9SQU5HRV9QUk9UT19TUEVDSUZJRUQpKSB7CisJCURFQlVHUCgiJXA6IE5BVGluZyBHUkUgUFBUUFxuIiwgY29ubnRyYWNrKTsKKwkJbWluID0gMTsKKwkJcmFuZ2Vfc2l6ZSA9IDB4ZmZmZjsKKwl9IGVsc2UgeworCQltaW4gPSBudG9obChyYW5nZS0+bWluLmdyZS5rZXkpOworCQlyYW5nZV9zaXplID0gbnRvaGwocmFuZ2UtPm1heC5ncmUua2V5KSAtIG1pbiArIDE7CisJfQorCisJREVCVUdQKCJtaW4gPSAldSwgcmFuZ2Vfc2l6ZSA9ICV1XG4iLCBtaW4sIHJhbmdlX3NpemUpOyAKKworCWZvciAoaSA9IDA7IGkgPCByYW5nZV9zaXplOyBpKyssIGtleSsrKSB7CisJCSprZXlwdHIgPSBodG9ubChtaW4gKyBrZXkgJSByYW5nZV9zaXplKTsKKwkJaWYgKCFpcF9uYXRfdXNlZF90dXBsZSh0dXBsZSwgY29ubnRyYWNrKSkKKwkJCXJldHVybiAxOworCX0KKworCURFQlVHUCgiJXA6IG5vIE5BVCBtYXBwaW5nXG4iLCBjb25udHJhY2spOworCisJcmV0dXJuIDA7Cit9CisKKy8qIG1hbmlwdWxhdGUgYSBHUkUgcGFja2V0IGFjY29yZGluZyB0byBtYW5pcHR5cGUgKi8KK3N0YXRpYyBpbnQKK2dyZV9tYW5pcF9wa3Qoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCSAgICAgIHVuc2lnbmVkIGludCBpcGhkcm9mZiwKKwkgICAgICBjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkgICAgICBlbnVtIGlwX25hdF9tYW5pcF90eXBlIG1hbmlwdHlwZSkKK3sKKwlzdHJ1Y3QgZ3JlX2hkciAqZ3JlaDsKKwlzdHJ1Y3QgZ3JlX2hkcl9wcHRwICpwZ3JlaDsKKwlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoKCpwc2tiKS0+ZGF0YSArIGlwaGRyb2ZmKTsKKwl1bnNpZ25lZCBpbnQgaGRyb2ZmID0gaXBoZHJvZmYgKyBpcGgtPmlobCo0OworCisJLyogcGdyZWggaW5jbHVkZXMgdHdvIG9wdGlvbmFsIDMyYml0IGZpZWxkcyB3aGljaCBhcmUgbm90IHJlcXVpcmVkCisJICogdG8gYmUgdGhlcmUuICBUaGF0J3Mgd2hlcmUgdGhlIG1hZ2ljICc4JyBjb21lcyBmcm9tICovCisJaWYgKCFza2JfbWFrZV93cml0YWJsZShwc2tiLCBoZHJvZmYgKyBzaXplb2YoKnBncmVoKS04KSkKKwkJcmV0dXJuIDA7CisKKwlncmVoID0gKHZvaWQgKikoKnBza2IpLT5kYXRhICsgaGRyb2ZmOworCXBncmVoID0gKHN0cnVjdCBncmVfaGRyX3BwdHAgKikgZ3JlaDsKKworCS8qIHdlIG9ubHkgaGF2ZSBkZXN0aW5hdGlvbiBtYW5pcCBvZiBhIHBhY2tldCwgc2luY2UgJ3NvdXJjZSBrZXknIAorCSAqIGlzIG5vdCBwcmVzZW50IGluIHRoZSBwYWNrZXQgaXRzZWxmICovCisJaWYgKG1hbmlwdHlwZSA9PSBJUF9OQVRfTUFOSVBfRFNUKSB7CisJCS8qIGtleSBtYW5pcHVsYXRpb24gaXMgYWx3YXlzIGRlc3QgKi8KKwkJc3dpdGNoIChncmVoLT52ZXJzaW9uKSB7CisJCWNhc2UgMDoKKwkJCWlmICghZ3JlaC0+a2V5KSB7CisJCQkJREVCVUdQKCJjYW4ndCBuYXQgR1JFIHcvbyBrZXlcbiIpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGdyZWgtPmNzdW0pIHsKKwkJCQkvKiBGSVhNRTogTmV2ZXIgdGVzdGVkIHRoaXMgY29kZS4uLiAqLworCQkJCSooZ3JlX2NzdW0oZ3JlaCkpID0gCisJCQkJCWlwX25hdF9jaGVhdF9jaGVjayh+KihncmVfa2V5KGdyZWgpKSwKKwkJCQkJCQl0dXBsZS0+ZHN0LnUuZ3JlLmtleSwKKwkJCQkJCQkqKGdyZV9jc3VtKGdyZWgpKSk7CisJCQl9CisJCQkqKGdyZV9rZXkoZ3JlaCkpID0gdHVwbGUtPmRzdC51LmdyZS5rZXk7CisJCQlicmVhazsKKwkJY2FzZSBHUkVfVkVSU0lPTl9QUFRQOgorCQkJREVCVUdQKCJjYWxsX2lkIC0+IDB4JTA0eFxuIiwgCisJCQkJbnRvaGwodHVwbGUtPmRzdC51LmdyZS5rZXkpKTsKKwkJCXBncmVoLT5jYWxsX2lkID0gaHRvbnMobnRvaGwodHVwbGUtPmRzdC51LmdyZS5rZXkpKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJREVCVUdQKCJjYW4ndCBuYXQgdW5rbm93biBHUkUgdmVyc2lvblxuIik7CisJCQlyZXR1cm4gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiAxOworfQorCisvKiBwcmludCBvdXQgYSBuYXQgdHVwbGUgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgCitncmVfcHJpbnQoY2hhciAqYnVmZmVyLCAKKwkgIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKm1hdGNoLAorCSAgY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqbWFzaykKK3sKKwl1bnNpZ25lZCBpbnQgbGVuID0gMDsKKworCWlmIChtYXNrLT5zcmMudS5ncmUua2V5KQorCQlsZW4gKz0gc3ByaW50ZihidWZmZXIgKyBsZW4sICJzcmNrZXk9MHgleCAiLCAKKwkJCQludG9obChtYXRjaC0+c3JjLnUuZ3JlLmtleSkpOworCisJaWYgKG1hc2stPmRzdC51LmdyZS5rZXkpCisJCWxlbiArPSBzcHJpbnRmKGJ1ZmZlciArIGxlbiwgImRzdGtleT0weCV4ICIsCisJCQkJbnRvaGwobWF0Y2gtPnNyYy51LmdyZS5rZXkpKTsKKworCXJldHVybiBsZW47Cit9CisKKy8qIHByaW50IGEgcmFuZ2Ugb2Yga2V5cyAqLworc3RhdGljIHVuc2lnbmVkIGludCAKK2dyZV9wcmludF9yYW5nZShjaGFyICpidWZmZXIsIGNvbnN0IHN0cnVjdCBpcF9uYXRfcmFuZ2UgKnJhbmdlKQoreworCWlmIChyYW5nZS0+bWluLmdyZS5rZXkgIT0gMCAKKwkgICAgfHwgcmFuZ2UtPm1heC5ncmUua2V5ICE9IDB4RkZGRikgeworCQlpZiAocmFuZ2UtPm1pbi5ncmUua2V5ID09IHJhbmdlLT5tYXguZ3JlLmtleSkKKwkJCXJldHVybiBzcHJpbnRmKGJ1ZmZlciwgImtleSAweCV4ICIsCisJCQkJCW50b2hsKHJhbmdlLT5taW4uZ3JlLmtleSkpOworCQllbHNlCisJCQlyZXR1cm4gc3ByaW50ZihidWZmZXIsICJrZXlzIDB4JXUtMHgldSAiLAorCQkJCQludG9obChyYW5nZS0+bWluLmdyZS5rZXkpLAorCQkJCQludG9obChyYW5nZS0+bWF4LmdyZS5rZXkpKTsKKwl9IGVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qIG5hdCBoZWxwZXIgc3RydWN0ICovCitzdGF0aWMgc3RydWN0IGlwX25hdF9wcm90b2NvbCBncmUgPSB7IAorCS5uYW1lCQk9ICJHUkUiLCAKKwkucHJvdG9udW0JPSBJUFBST1RPX0dSRSwKKwkubWFuaXBfcGt0CT0gZ3JlX21hbmlwX3BrdCwKKwkuaW5fcmFuZ2UJPSBncmVfaW5fcmFuZ2UsCisJLnVuaXF1ZV90dXBsZQk9IGdyZV91bmlxdWVfdHVwbGUsCisJLnByaW50CQk9IGdyZV9wcmludCwKKwkucHJpbnRfcmFuZ2UJPSBncmVfcHJpbnRfcmFuZ2UsCisjaWYgZGVmaW5lZChDT05GSUdfSVBfTkZfQ09OTlRSQUNLX05FVExJTkspIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTkVUTElOS19NT0RVTEUpCisJLnJhbmdlX3RvX25mYXR0cgk9IGlwX25hdF9wb3J0X3JhbmdlX3RvX25mYXR0ciwKKwkubmZhdHRyX3RvX3JhbmdlCT0gaXBfbmF0X3BvcnRfbmZhdHRyX3RvX3JhbmdlLAorI2VuZGlmCit9OworCQkJCSAgCitpbnQgX19pbml0IGlwX25hdF9wcm90b19ncmVfaW5pdCh2b2lkKQoreworCXJldHVybiBpcF9uYXRfcHJvdG9jb2xfcmVnaXN0ZXIoJmdyZSk7Cit9CisKK3ZvaWQgX19leGl0IGlwX25hdF9wcm90b19ncmVfZmluaSh2b2lkKQoreworCWlwX25hdF9wcm90b2NvbF91bnJlZ2lzdGVyKCZncmUpOworfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zdGFuZGFsb25lLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3N0YW5kYWxvbmUuYwppbmRleCAwZmYzNjhiLi4zMGNkNGUxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3N0YW5kYWxvbmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3N0YW5kYWxvbmUuYwpAQCAtMTA4LDggKzEwOCw4IEBACiAJY2FzZSBJUF9DVF9SRUxBVEVEOgogCWNhc2UgSVBfQ1RfUkVMQVRFRCtJUF9DVF9JU19SRVBMWToKIAkJaWYgKCgqcHNrYiktPm5oLmlwaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QKSB7Ci0JCQlpZiAoIWljbXBfcmVwbHlfdHJhbnNsYXRpb24ocHNrYiwgY3QsIG1hbmlwdHlwZSwKLQkJCQkJCSAgICBDVElORk8yRElSKGN0aW5mbykpKQorCQkJaWYgKCFpcF9uYXRfaWNtcF9yZXBseV90cmFuc2xhdGlvbihwc2tiLCBjdCwgbWFuaXB0eXBlLAorCQkJCQkJCSAgIENUSU5GTzJESVIoY3RpbmZvKSkpCiAJCQkJcmV0dXJuIE5GX0RST1A7CiAJCQllbHNlCiAJCQkJcmV0dXJuIE5GX0FDQ0VQVDsKQEAgLTE1Miw3ICsxNTIsNyBAQAogCX0KIAogCUlQX05GX0FTU0VSVChpbmZvKTsKLQlyZXR1cm4gbmF0X3BhY2tldChjdCwgY3RpbmZvLCBob29rbnVtLCBwc2tiKTsKKwlyZXR1cm4gaXBfbmF0X3BhY2tldChjdCwgY3RpbmZvLCBob29rbnVtLCBwc2tiKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludApAQCAtMzI1LDE1ICszMjUsMTAgQEAKIAkJcHJpbnRrKCJpcF9uYXRfaW5pdDogY2FuJ3Qgc2V0dXAgcnVsZXMuXG4iKTsKIAkJZ290byBjbGVhbnVwX25vdGhpbmc7CiAJfQotCXJldCA9IGlwX25hdF9pbml0KCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJpcF9uYXRfaW5pdDogY2FuJ3Qgc2V0dXAgcnVsZXMuXG4iKTsKLQkJZ290byBjbGVhbnVwX3J1bGVfaW5pdDsKLQl9CiAJcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXBfbmF0X2luX29wcyk7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKCJpcF9uYXRfaW5pdDogY2FuJ3QgcmVnaXN0ZXIgaW4gaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfbmF0OworCQlnb3RvIGNsZWFudXBfcnVsZV9pbml0OwogCX0KIAlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcF9uYXRfb3V0X29wcyk7CiAJaWYgKHJldCA8IDApIHsKQEAgLTM3NCw4ICszNjksNiBAQAogCW5mX3VucmVnaXN0ZXJfaG9vaygmaXBfbmF0X291dF9vcHMpOwogIGNsZWFudXBfaW5vcHM6CiAJbmZfdW5yZWdpc3Rlcl9ob29rKCZpcF9uYXRfaW5fb3BzKTsKLSBjbGVhbnVwX25hdDoKLQlpcF9uYXRfY2xlYW51cCgpOwogIGNsZWFudXBfcnVsZV9pbml0OgogCWlwX25hdF9ydWxlX2NsZWFudXAoKTsKICBjbGVhbnVwX25vdGhpbmc6CkBAIC0zOTUsMTQgKzM4OCw0IEBACiBtb2R1bGVfaW5pdChpbml0KTsKIG1vZHVsZV9leGl0KGZpbmkpOwogCi1FWFBPUlRfU1lNQk9MKGlwX25hdF9zZXR1cF9pbmZvKTsKLUVYUE9SVF9TWU1CT0woaXBfbmF0X3Byb3RvY29sX3JlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0woaXBfbmF0X3Byb3RvY29sX3VucmVnaXN0ZXIpOwotRVhQT1JUX1NZTUJPTF9HUEwoaXBfbmF0X3Byb3RvX2ZpbmRfZ2V0KTsKLUVYUE9SVF9TWU1CT0xfR1BMKGlwX25hdF9wcm90b19wdXQpOwotRVhQT1JUX1NZTUJPTChpcF9uYXRfY2hlYXRfY2hlY2spOwotRVhQT1JUX1NZTUJPTChpcF9uYXRfbWFuZ2xlX3RjcF9wYWNrZXQpOwotRVhQT1JUX1NZTUJPTChpcF9uYXRfbWFuZ2xlX3VkcF9wYWNrZXQpOwotRVhQT1JUX1NZTUJPTChpcF9uYXRfdXNlZF90dXBsZSk7Ci1FWFBPUlRfU1lNQk9MKGlwX25hdF9mb2xsb3dfbWFzdGVyKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9xdWV1ZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMKaW5kZXggZDU0ZjE0ZC4uMzYzMzllYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMKQEAgLTI0MCw4ICsyNDAsOCBAQAogCiAJcG1zZy0+cGFja2V0X2lkICAgICAgID0gKHVuc2lnbmVkIGxvbmcgKWVudHJ5OwogCXBtc2ctPmRhdGFfbGVuICAgICAgICA9IGRhdGFfbGVuOwotCXBtc2ctPnRpbWVzdGFtcF9zZWMgICA9IHNrYl90dl9iYXNlLnR2X3NlYyArIGVudHJ5LT5za2ItPnRzdGFtcC5vZmZfc2VjOwotCXBtc2ctPnRpbWVzdGFtcF91c2VjICA9IHNrYl90dl9iYXNlLnR2X3VzZWMgKyBlbnRyeS0+c2tiLT50c3RhbXAub2ZmX3VzZWM7CisJcG1zZy0+dGltZXN0YW1wX3NlYyAgID0gZW50cnktPnNrYi0+dHN0YW1wLm9mZl9zZWM7CisJcG1zZy0+dGltZXN0YW1wX3VzZWMgID0gZW50cnktPnNrYi0+dHN0YW1wLm9mZl91c2VjOwogCXBtc2ctPm1hcmsgICAgICAgICAgICA9IGVudHJ5LT5za2ItPm5mbWFyazsKIAlwbXNnLT5ob29rICAgICAgICAgICAgPSBlbnRyeS0+aW5mby0+aG9vazsKIAlwbXNnLT5od19wcm90b2NvbCAgICAgPSBlbnRyeS0+c2tiLT5wcm90b2NvbDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwppbmRleCBlZWY5OWExLi43NWMyN2U5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaD4KIApAQCAtOTIxLDggKzkyMiwxMCBAQAogCX0KIAogCS8qIEFuZCBvbmUgY29weSBmb3IgZXZlcnkgb3RoZXIgQ1BVICovCi0JZm9yIChpID0gMTsgaSA8IG51bV9wb3NzaWJsZV9jcHVzKCk7IGkrKykgewotCQltZW1jcHkobmV3aW5mby0+ZW50cmllcyArIFNNUF9BTElHTihuZXdpbmZvLT5zaXplKSppLAorCWZvcl9lYWNoX2NwdShpKSB7CisJCWlmIChpID09IDApCisJCQljb250aW51ZTsKKwkJbWVtY3B5KG5ld2luZm8tPmVudHJpZXMgKyBTTVBfQUxJR04obmV3aW5mby0+c2l6ZSkgKiBpLAogCQkgICAgICAgbmV3aW5mby0+ZW50cmllcywKIAkJICAgICAgIFNNUF9BTElHTihuZXdpbmZvLT5zaXplKSk7CiAJfQpAQCAtOTQzLDcgKzk0Niw3IEBACiAJCXN0cnVjdCBpcHRfZW50cnkgKnRhYmxlX2Jhc2U7CiAJCXVuc2lnbmVkIGludCBpOwogCi0JCWZvciAoaSA9IDA7IGkgPCBudW1fcG9zc2libGVfY3B1cygpOyBpKyspIHsKKwkJZm9yX2VhY2hfY3B1KGkpIHsKIAkJCXRhYmxlX2Jhc2UgPQogCQkJCSh2b2lkICopbmV3aW5mby0+ZW50cmllcwogCQkJCSsgVEFCTEVfT0ZGU0VUKG5ld2luZm8sIGkpOwpAQCAtOTkwLDcgKzk5Myw3IEBACiAJdW5zaWduZWQgaW50IGNwdTsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWZvciAoY3B1ID0gMDsgY3B1IDwgbnVtX3Bvc3NpYmxlX2NwdXMoKTsgY3B1KyspIHsKKwlmb3JfZWFjaF9jcHUoY3B1KSB7CiAJCWkgPSAwOwogCQlJUFRfRU5UUllfSVRFUkFURSh0LT5lbnRyaWVzICsgVEFCTEVfT0ZGU0VUKHQsIGNwdSksCiAJCQkJICB0LT5zaXplLApAQCAtMTEyOCw3ICsxMTMxLDggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAluZXdpbmZvID0gdm1hbGxvYyhzaXplb2Yoc3RydWN0IGlwdF90YWJsZV9pbmZvKQotCQkJICArIFNNUF9BTElHTih0bXAuc2l6ZSkgKiBudW1fcG9zc2libGVfY3B1cygpKTsKKwkJCSAgKyBTTVBfQUxJR04odG1wLnNpemUpICogCisJCQkgIAkoaGlnaGVzdF9wb3NzaWJsZV9wcm9jZXNzb3JfaWQoKSsxKSk7CiAJaWYgKCFuZXdpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTQ1OCw3ICsxNDYyLDggQEAKIAkJPSB7IDAsIDAsIDAsIHsgMCB9LCB7IDAgfSwgeyB9IH07CiAKIAluZXdpbmZvID0gdm1hbGxvYyhzaXplb2Yoc3RydWN0IGlwdF90YWJsZV9pbmZvKQotCQkJICArIFNNUF9BTElHTihyZXBsLT5zaXplKSAqIG51bV9wb3NzaWJsZV9jcHVzKCkpOworCQkJICArIFNNUF9BTElHTihyZXBsLT5zaXplKSAqIAorCQkJICAJCShoaWdoZXN0X3Bvc3NpYmxlX3Byb2Nlc3Nvcl9pZCgpKzEpKTsKIAlpZiAoIW5ld2luZm8pCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYwppbmRleCA3ZDM4OTEzLi45YmNiMzk4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ0xVU1RFUklQLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvamhhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgpAQCAtMzAsNyArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9DTFVTVEVSSVAuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2suaD4KIAotI2RlZmluZSBDTFVTVEVSSVBfVkVSU0lPTiAiMC43IgorI2RlZmluZSBDTFVTVEVSSVBfVkVSU0lPTiAiMC44IgogCiAjZGVmaW5lIERFQlVHX0NMVVNURVJJUAogCkBAIC00OSwxMyArNTAsMTQgQEAKIHN0cnVjdCBjbHVzdGVyaXBfY29uZmlnIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CQkJLyogbGlzdCBvZiBhbGwgY29uZmlncyAqLwogCWF0b21pY190IHJlZmNvdW50OwkJCS8qIHJlZmVyZW5jZSBjb3VudCAqLworCWF0b21pY190IGVudHJpZXM7CQkJLyogbnVtYmVyIG9mIGVudHJpZXMvcnVsZXMKKwkJCQkJCSAqIHJlZmVyZW5jaW5nIHVzICovCiAKIAl1X2ludDMyX3QgY2x1c3RlcmlwOwkJCS8qIHRoZSBJUCBhZGRyZXNzICovCiAJdV9pbnQ4X3QgY2x1c3Rlcm1hY1tFVEhfQUxFTl07CQkvKiB0aGUgTUFDIGFkZHJlc3MgKi8KIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwkJCS8qIGRldmljZSAqLwogCXVfaW50MTZfdCBudW1fdG90YWxfbm9kZXM7CQkvKiB0b3RhbCBudW1iZXIgb2Ygbm9kZXMgKi8KLQl1X2ludDE2X3QgbnVtX2xvY2FsX25vZGVzOwkJLyogbnVtYmVyIG9mIGxvY2FsIG5vZGVzICovCi0JdV9pbnQxNl90IGxvY2FsX25vZGVzW0NMVVNURVJJUF9NQVhfTk9ERVNdOwkvKiBub2RlIG51bWJlciBhcnJheSAqLworCXVuc2lnbmVkIGxvbmcgbG9jYWxfbm9kZXM7CQkvKiBub2RlIG51bWJlciBhcnJheSAqLwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZTsJCS8qIHByb2MgZGlyIGVudHJ5ICovCkBAIC02Niw4ICs2OCw3IEBACiAKIHN0YXRpYyBMSVNUX0hFQUQoY2x1c3RlcmlwX2NvbmZpZ3MpOwogCi0vKiBjbHVzdGVyaXBfbG9jayBwcm90ZWN0cyB0aGUgY2x1c3RlcmlwX2NvbmZpZ3MgbGlzdCBfQU5EXyB0aGUgY29uZmlndXJhYmxlCi0gKiBkYXRhIHdpdGhpbiBhbGwgc3RydWN0dXJzZXMgKG51bV9sb2NhbF9ub2RlcywgbG9jYWxfbm9kZXNbXSkgKi8KKy8qIGNsdXN0ZXJpcF9sb2NrIHByb3RlY3RzIHRoZSBjbHVzdGVyaXBfY29uZmlncyBsaXN0ICovCiBzdGF0aWMgREVGSU5FX1JXTE9DSyhjbHVzdGVyaXBfbG9jayk7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwpAQCAtNzYsMjMgKzc3LDQ4IEBACiAjZW5kaWYKIAogc3RhdGljIGlubGluZSB2b2lkCi1jbHVzdGVyaXBfY29uZmlnX2dldChzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZyAqYykgeworY2x1c3RlcmlwX2NvbmZpZ19nZXQoc3RydWN0IGNsdXN0ZXJpcF9jb25maWcgKmMpCit7CiAJYXRvbWljX2luYygmYy0+cmVmY291bnQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLWNsdXN0ZXJpcF9jb25maWdfcHV0KHN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjKSB7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmMtPnJlZmNvdW50KSkgeworY2x1c3RlcmlwX2NvbmZpZ19wdXQoc3RydWN0IGNsdXN0ZXJpcF9jb25maWcgKmMpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmMtPnJlZmNvdW50KSkKKwkJa2ZyZWUoYyk7Cit9CisKKy8qIGluY3JlYXNlIHRoZSBjb3VudCBvZiBlbnRyaWVzKHJ1bGVzKSB1c2luZy9yZWZlcmVuY2luZyB0aGlzIGNvbmZpZyAqLworc3RhdGljIGlubGluZSB2b2lkCitjbHVzdGVyaXBfY29uZmlnX2VudHJ5X2dldChzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZyAqYykKK3sKKwlhdG9taWNfaW5jKCZjLT5lbnRyaWVzKTsKK30KKworLyogZGVjcmVhc2UgdGhlIGNvdW50IG9mIGVudHJpZXMgdXNpbmcvcmVmZXJlbmNpbmcgdGhpcyBjb25maWcuICBJZiBsYXN0CisgKiBlbnRyeShydWxlKSBpcyByZW1vdmVkLCByZW1vdmUgdGhlIGNvbmZpZyBmcm9tIGxpc3RzLCBidXQgZG9uJ3QgZnJlZSBpdAorICogeWV0LCBzaW5jZSBwcm9jLWZpbGVzIGNvdWxkIHN0aWxsIGJlIGhvbGRpbmcgcmVmZXJlbmNlcyAqLworc3RhdGljIGlubGluZSB2b2lkCitjbHVzdGVyaXBfY29uZmlnX2VudHJ5X3B1dChzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZyAqYykKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYy0+ZW50cmllcykpIHsKIAkJd3JpdGVfbG9ja19iaCgmY2x1c3RlcmlwX2xvY2spOwogCQlsaXN0X2RlbCgmYy0+bGlzdCk7CiAJCXdyaXRlX3VubG9ja19iaCgmY2x1c3RlcmlwX2xvY2spOworCiAJCWRldl9tY19kZWxldGUoYy0+ZGV2LCBjLT5jbHVzdGVybWFjLCBFVEhfQUxFTiwgMCk7CiAJCWRldl9wdXQoYy0+ZGV2KTsKLQkJa2ZyZWUoYyk7CisKKwkJLyogSW4gY2FzZSBhbnlvbmUgc3RpbGwgYWNjZXNzZXMgdGhlIGZpbGUsIHRoZSBvcGVuL2Nsb3NlCisJCSAqIGZ1bmN0aW9ucyBhcmUgYWxzbyBpbmNyZW1lbnRpbmcgdGhlIHJlZmNvdW50IG9uIHRoZWlyIG93biwKKwkJICogc28gaXQncyBzYWZlIHRvIHJlbW92ZSB0aGUgZW50cnkgZXZlbiBpZiBpdCdzIGluIHVzZS4gKi8KKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCQlyZW1vdmVfcHJvY19lbnRyeShjLT5wZGUtPm5hbWUsIGMtPnBkZS0+cGFyZW50KTsKKyNlbmRpZgogCX0KIH0KIAotCiBzdGF0aWMgc3RydWN0IGNsdXN0ZXJpcF9jb25maWcgKgogX19jbHVzdGVyaXBfY29uZmlnX2ZpbmQodV9pbnQzMl90IGNsdXN0ZXJpcCkKIHsKQEAgLTExMSw3ICsxMzcsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICoKLWNsdXN0ZXJpcF9jb25maWdfZmluZF9nZXQodV9pbnQzMl90IGNsdXN0ZXJpcCkKK2NsdXN0ZXJpcF9jb25maWdfZmluZF9nZXQodV9pbnQzMl90IGNsdXN0ZXJpcCwgaW50IGVudHJ5KQogewogCXN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjOwogCkBAIC0xMjIsMTEgKzE0OCwyNCBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAJYXRvbWljX2luYygmYy0+cmVmY291bnQpOworCWlmIChlbnRyeSkKKwkJYXRvbWljX2luYygmYy0+ZW50cmllcyk7CiAJcmVhZF91bmxvY2tfYmgoJmNsdXN0ZXJpcF9sb2NrKTsKIAogCXJldHVybiBjOwogfQogCitzdGF0aWMgdm9pZAorY2x1c3RlcmlwX2NvbmZpZ19pbml0X25vZGVsaXN0KHN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpcHRfY2x1c3RlcmlwX3RndF9pbmZvICppKQoreworCWludCBuOworCisJZm9yIChuID0gMDsgbiA8IGktPm51bV9sb2NhbF9ub2RlczsgbisrKSB7CisJCXNldF9iaXQoaS0+bG9jYWxfbm9kZXNbbl0gLSAxLCAmYy0+bG9jYWxfbm9kZXMpOworCX0KK30KKwogc3RhdGljIHN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICoKIGNsdXN0ZXJpcF9jb25maWdfaW5pdChzdHJ1Y3QgaXB0X2NsdXN0ZXJpcF90Z3RfaW5mbyAqaSwgdV9pbnQzMl90IGlwLAogCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTE0MywxMSArMTgyLDExIEBACiAJYy0+Y2x1c3RlcmlwID0gaXA7CiAJbWVtY3B5KCZjLT5jbHVzdGVybWFjLCAmaS0+Y2x1c3Rlcm1hYywgRVRIX0FMRU4pOwogCWMtPm51bV90b3RhbF9ub2RlcyA9IGktPm51bV90b3RhbF9ub2RlczsKLQljLT5udW1fbG9jYWxfbm9kZXMgPSBpLT5udW1fbG9jYWxfbm9kZXM7Ci0JbWVtY3B5KCZjLT5sb2NhbF9ub2RlcywgJmktPmxvY2FsX25vZGVzLCBzaXplb2YoYy0+bG9jYWxfbm9kZXMpKTsKKwljbHVzdGVyaXBfY29uZmlnX2luaXRfbm9kZWxpc3QoYywgaSk7CiAJYy0+aGFzaF9tb2RlID0gaS0+aGFzaF9tb2RlOwogCWMtPmhhc2hfaW5pdHZhbCA9IGktPmhhc2hfaW5pdHZhbDsKIAlhdG9taWNfc2V0KCZjLT5yZWZjb3VudCwgMSk7CisJYXRvbWljX3NldCgmYy0+ZW50cmllcywgMSk7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCS8qIGNyZWF0ZSBwcm9jIGRpciBlbnRyeSAqLwpAQCAtMTcxLDUzICsyMTAsMjggQEAKIHN0YXRpYyBpbnQKIGNsdXN0ZXJpcF9hZGRfbm9kZShzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZyAqYywgdV9pbnQxNl90IG5vZGVudW0pCiB7Ci0JaW50IGk7CiAKLQl3cml0ZV9sb2NrX2JoKCZjbHVzdGVyaXBfbG9jayk7Ci0KLQlpZiAoYy0+bnVtX2xvY2FsX25vZGVzID49IENMVVNURVJJUF9NQVhfTk9ERVMKLQkgICAgfHwgbm9kZW51bSA+IENMVVNURVJJUF9NQVhfTk9ERVMpIHsKLQkJd3JpdGVfdW5sb2NrX2JoKCZjbHVzdGVyaXBfbG9jayk7CisJaWYgKG5vZGVudW0gPT0gMCB8fAorCSAgICBub2RlbnVtID4gYy0+bnVtX3RvdGFsX25vZGVzKQogCQlyZXR1cm4gMTsKLQl9CiAKLQkvKiBjaGVjayBpZiB3ZSBhbHJhZHkgaGF2ZSB0aGlzIG51bWJlciBpbiBvdXIgYXJyYXkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgYy0+bnVtX2xvY2FsX25vZGVzOyBpKyspIHsKLQkJaWYgKGMtPmxvY2FsX25vZGVzW2ldID09IG5vZGVudW0pIHsKLQkJCXdyaXRlX3VubG9ja19iaCgmY2x1c3RlcmlwX2xvY2spOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9CisJLyogY2hlY2sgaWYgd2UgYWxyZWFkeSBoYXZlIHRoaXMgbnVtYmVyIGluIG91ciBiaXRmaWVsZCAqLworCWlmICh0ZXN0X2FuZF9zZXRfYml0KG5vZGVudW0gLSAxLCAmYy0+bG9jYWxfbm9kZXMpKQorCQlyZXR1cm4gMTsKIAotCWMtPmxvY2FsX25vZGVzW2MtPm51bV9sb2NhbF9ub2RlcysrXSA9IG5vZGVudW07Ci0KLQl3cml0ZV91bmxvY2tfYmgoJmNsdXN0ZXJpcF9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAogY2x1c3RlcmlwX2RlbF9ub2RlKHN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjLCB1X2ludDE2X3Qgbm9kZW51bSkKIHsKLQlpbnQgaTsKLQotCXdyaXRlX2xvY2tfYmgoJmNsdXN0ZXJpcF9sb2NrKTsKLQotCWlmIChjLT5udW1fbG9jYWxfbm9kZXMgPD0gMSB8fCBub2RlbnVtID4gQ0xVU1RFUklQX01BWF9OT0RFUykgewotCQl3cml0ZV91bmxvY2tfYmgoJmNsdXN0ZXJpcF9sb2NrKTsKKwlpZiAobm9kZW51bSA9PSAwIHx8CisJICAgIG5vZGVudW0gPiBjLT5udW1fdG90YWxfbm9kZXMpCiAJCXJldHVybiAxOwotCX0KIAkJCi0JZm9yIChpID0gMDsgaSA8IGMtPm51bV9sb2NhbF9ub2RlczsgaSsrKSB7Ci0JCWlmIChjLT5sb2NhbF9ub2Rlc1tpXSA9PSBub2RlbnVtKSB7Ci0JCQlpbnQgc2l6ZSA9IHNpemVvZih1X2ludDE2X3QpKihjLT5udW1fbG9jYWxfbm9kZXMtKGkrMSkpOwotCQkJbWVtbW92ZSgmYy0+bG9jYWxfbm9kZXNbaV0sICZjLT5sb2NhbF9ub2Rlc1tpKzFdLCBzaXplKTsKLQkJCWMtPm51bV9sb2NhbF9ub2Rlcy0tOwotCQkJd3JpdGVfdW5sb2NrX2JoKCZjbHVzdGVyaXBfbG9jayk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0KKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KG5vZGVudW0gLSAxLCAmYy0+bG9jYWxfbm9kZXMpKQorCQlyZXR1cm4gMDsKIAotCXdyaXRlX3VubG9ja19iaCgmY2x1c3RlcmlwX2xvY2spOwogCXJldHVybiAxOwogfQogCkBAIC0yODUsMjUgKzI5OSw3IEBACiBzdGF0aWMgaW5saW5lIGludAogY2x1c3RlcmlwX3Jlc3BvbnNpYmxlKHN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjb25maWcsIHVfaW50MzJfdCBoYXNoKQogewotCWludCBpOwotCi0JcmVhZF9sb2NrX2JoKCZjbHVzdGVyaXBfbG9jayk7Ci0KLQlpZiAoY29uZmlnLT5udW1fbG9jYWxfbm9kZXMgPT0gMCkgewotCQlyZWFkX3VubG9ja19iaCgmY2x1c3RlcmlwX2xvY2spOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5udW1fbG9jYWxfbm9kZXM7IGkrKykgewotCQlpZiAoY29uZmlnLT5sb2NhbF9ub2Rlc1tpXSA9PSBoYXNoKSB7Ci0JCQlyZWFkX3VubG9ja19iaCgmY2x1c3RlcmlwX2xvY2spOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9Ci0KLQlyZWFkX3VubG9ja19iaCgmY2x1c3RlcmlwX2xvY2spOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHRlc3RfYml0KGhhc2ggLSAxLCAmY29uZmlnLT5sb2NhbF9ub2Rlcyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKQEAgLTQxNSw4ICs0MTEsMjYgQEAKIAogCS8qIEZJWE1FOiBmdXJ0aGVyIHNhbml0eSBjaGVja3MgKi8KIAotCWNvbmZpZyA9IGNsdXN0ZXJpcF9jb25maWdfZmluZF9nZXQoZS0+aXAuZHN0LnNfYWRkcik7Ci0JaWYgKCFjb25maWcpIHsKKwljb25maWcgPSBjbHVzdGVyaXBfY29uZmlnX2ZpbmRfZ2V0KGUtPmlwLmRzdC5zX2FkZHIsIDEpOworCWlmIChjb25maWcpIHsKKwkJaWYgKGNpcGluZm8tPmNvbmZpZyAhPSBOVUxMKSB7CisJCQkvKiBDYXNlIEE6IFRoaXMgaXMgYW4gZW50cnkgdGhhdCBnZXRzIHJlbG9hZGVkLCBzaW5jZQorCQkJICogaXQgc3RpbGwgaGFzIGEgY2lwaW5mby0+Y29uZmlnIHBvaW50ZXIuIFNpbXBseQorCQkJICogaW5jcmVhc2UgdGhlIGVudHJ5IHJlZmNvdW50IGFuZCByZXR1cm4gKi8KKwkJCWlmIChjaXBpbmZvLT5jb25maWcgIT0gY29uZmlnKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJDTFVTVEVSSVA6IFJlbG9hZGVkIGVudHJ5ICIKKwkJCQkgICAgICAgImhhcyBpbnZhbGlkIGNvbmZpZyBwb2ludGVyIVxuIik7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQljbHVzdGVyaXBfY29uZmlnX2VudHJ5X2dldChjaXBpbmZvLT5jb25maWcpOworCQl9IGVsc2UgeworCQkJLyogQ2FzZSBCOiBUaGlzIGlzIGEgbmV3IHJ1bGUgcmVmZXJyaW5nIHRvIGFuIGV4aXN0aW5nCisJCQkgKiBjbHVzdGVyaXAgY29uZmlnLiAqLworCQkJY2lwaW5mby0+Y29uZmlnID0gY29uZmlnOworCQkJY2x1c3RlcmlwX2NvbmZpZ19lbnRyeV9nZXQoY2lwaW5mby0+Y29uZmlnKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIENhc2UgQzogVGhpcyBpcyBhIGNvbXBsZXRlbHkgbmV3IGNsdXN0ZXJpcCBjb25maWcgKi8KIAkJaWYgKCEoY2lwaW5mby0+ZmxhZ3MgJiBDTFVTVEVSSVBfRkxBR19ORVcpKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDTFVTVEVSSVA6IG5vIGNvbmZpZyBmb3VuZCBmb3IgJXUuJXUuJXUuJXUsIG5lZWQgJ25ldydcbiIsIE5JUFFVQUQoZS0+aXAuZHN0LnNfYWRkcikpOwogCQkJcmV0dXJuIDA7CkBAIC00NDMsMTAgKzQ1Nyw5IEBACiAJCQl9CiAJCQlkZXZfbWNfYWRkKGNvbmZpZy0+ZGV2LGNvbmZpZy0+Y2x1c3Rlcm1hYywgRVRIX0FMRU4sIDApOwogCQl9CisJCWNpcGluZm8tPmNvbmZpZyA9IGNvbmZpZzsKIAl9CiAKLQljaXBpbmZvLT5jb25maWcgPSBjb25maWc7Ci0KIAlyZXR1cm4gMTsKIH0KIApAQCAtNDU1LDEzICs0NjgsMTAgQEAKIHsKIAlzdHJ1Y3QgaXB0X2NsdXN0ZXJpcF90Z3RfaW5mbyAqY2lwaW5mbyA9IG1hdGNoaW5mbzsKIAotCS8qIHdlIGZpcnN0IHJlbW92ZSB0aGUgcHJvYyBlbnRyeSBhbmQgdGhlbiBkcm9wIHRoZSByZWZlcmVuY2UKLQkgKiBjb3VudC4gIEluIGNhc2UgYW55b25lIHN0aWxsIGFjY2Vzc2VzIHRoZSBmaWxlLCB0aGUgb3Blbi9jbG9zZQotCSAqIGZ1bmN0aW9ucyBhcmUgYWxzbyBpbmNyZW1lbnRpbmcgdGhlIHJlZmNvdW50IG9uIHRoZWlyIG93biAqLwotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JcmVtb3ZlX3Byb2NfZW50cnkoY2lwaW5mby0+Y29uZmlnLT5wZGUtPm5hbWUsCi0JCQkgIGNpcGluZm8tPmNvbmZpZy0+cGRlLT5wYXJlbnQpOwotI2VuZGlmCisJLyogaWYgbm8gbW9yZSBlbnRyaWVzIGFyZSByZWZlcmVuY2luZyB0aGUgY29uZmlnLCByZW1vdmUgaXQKKwkgKiBmcm9tIHRoZSBsaXN0IGFuZCBkZXN0cm95IHRoZSBwcm9jIGVudHJ5ICovCisJY2x1c3RlcmlwX2NvbmZpZ19lbnRyeV9wdXQoY2lwaW5mby0+Y29uZmlnKTsKKwogCWNsdXN0ZXJpcF9jb25maWdfcHV0KGNpcGluZm8tPmNvbmZpZyk7CiB9CiAKQEAgLTUzMyw3ICs1NDMsNyBAQAogCiAJLyogaWYgdGhlcmUgaXMgbm8gY2x1c3RlcmlwIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhcnAgcmVwbHkncyAKIAkgKiBzb3VyY2UgaXAsIHdlIGRvbid0IHdhbnQgdG8gbWFuZ2xlIGl0ICovCi0JYyA9IGNsdXN0ZXJpcF9jb25maWdfZmluZF9nZXQocGF5bG9hZC0+c3JjX2lwKTsKKwljID0gY2x1c3RlcmlwX2NvbmZpZ19maW5kX2dldChwYXlsb2FkLT5zcmNfaXAsIDApOwogCWlmICghYykKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIApAQCAtNTc0LDU2ICs1ODQsNjkgQEAKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAKK3N0cnVjdCBjbHVzdGVyaXBfc2VxX3Bvc2l0aW9uIHsKKwl1bnNpZ25lZCBpbnQgcG9zOwkvKiBwb3NpdGlvbiAqLworCXVuc2lnbmVkIGludCB3ZWlnaHQ7CS8qIG51bWJlciBvZiBiaXRzIHNldCA9PSBzaXplICovCisJdW5zaWduZWQgaW50IGJpdDsJLyogY3VycmVudCBiaXQgKi8KKwl1bnNpZ25lZCBsb25nIHZhbDsJLyogY3VycmVudCB2YWx1ZSAqLworfTsKKwogc3RhdGljIHZvaWQgKmNsdXN0ZXJpcF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKnBvcykKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IHMtPnByaXZhdGU7CiAJc3RydWN0IGNsdXN0ZXJpcF9jb25maWcgKmMgPSBwZGUtPmRhdGE7Ci0JdW5zaWduZWQgaW50ICpub2RlaWR4OworCXVuc2lnbmVkIGludCB3ZWlnaHQ7CisJdV9pbnQzMl90IGxvY2FsX25vZGVzOworCXN0cnVjdCBjbHVzdGVyaXBfc2VxX3Bvc2l0aW9uICppZHg7CiAKLQlyZWFkX2xvY2tfYmgoJmNsdXN0ZXJpcF9sb2NrKTsKLQlpZiAoKnBvcyA+PSBjLT5udW1fbG9jYWxfbm9kZXMpCisJLyogRklYTUU6IHBvc3NpYmxlIHJhY2UgKi8KKwlsb2NhbF9ub2RlcyA9IGMtPmxvY2FsX25vZGVzOworCXdlaWdodCA9IGh3ZWlnaHQzMihsb2NhbF9ub2Rlcyk7CisJaWYgKCpwb3MgPj0gd2VpZ2h0KQogCQlyZXR1cm4gTlVMTDsKIAotCW5vZGVpZHggPSBrbWFsbG9jKHNpemVvZih1bnNpZ25lZCBpbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW5vZGVpZHgpCisJaWR4ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNsdXN0ZXJpcF9zZXFfcG9zaXRpb24pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlkeCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQkqbm9kZWlkeCA9ICpwb3M7Ci0JcmV0dXJuIG5vZGVpZHg7CisJaWR4LT5wb3MgPSAqcG9zOworCWlkeC0+d2VpZ2h0ID0gd2VpZ2h0OworCWlkeC0+Yml0ID0gZmZzKGxvY2FsX25vZGVzKTsKKwlpZHgtPnZhbCA9IGxvY2FsX25vZGVzOworCWNsZWFyX2JpdChpZHgtPmJpdCAtIDEsICZpZHgtPnZhbCk7CisKKwlyZXR1cm4gaWR4OwogfQogCiBzdGF0aWMgdm9pZCAqY2x1c3RlcmlwX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUgPSBzLT5wcml2YXRlOwotCXN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjID0gcGRlLT5kYXRhOwotCXVuc2lnbmVkIGludCAqbm9kZWlkeCA9ICh1bnNpZ25lZCBpbnQgKil2OworCXN0cnVjdCBjbHVzdGVyaXBfc2VxX3Bvc2l0aW9uICppZHggPSAoc3RydWN0IGNsdXN0ZXJpcF9zZXFfcG9zaXRpb24gKil2OwogCi0JKnBvcyA9ICsrKCpub2RlaWR4KTsKLQlpZiAoKnBvcyA+PSBjLT5udW1fbG9jYWxfbm9kZXMpIHsKKwkqcG9zID0gKytpZHgtPnBvczsKKwlpZiAoKnBvcyA+PSBpZHgtPndlaWdodCkgewogCQlrZnJlZSh2KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCXJldHVybiBub2RlaWR4OworCWlkeC0+Yml0ID0gZmZzKGlkeC0+dmFsKTsKKwljbGVhcl9iaXQoaWR4LT5iaXQgLSAxLCAmaWR4LT52YWwpOworCXJldHVybiBpZHg7CiB9CiAKIHN0YXRpYyB2b2lkIGNsdXN0ZXJpcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCiB7CiAJa2ZyZWUodik7Ci0KLQlyZWFkX3VubG9ja19iaCgmY2x1c3RlcmlwX2xvY2spOwogfQogCiBzdGF0aWMgaW50IGNsdXN0ZXJpcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCiB7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUgPSBzLT5wcml2YXRlOwotCXN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjID0gcGRlLT5kYXRhOwotCXVuc2lnbmVkIGludCAqbm9kZWlkeCA9ICh1bnNpZ25lZCBpbnQgKil2OworCXN0cnVjdCBjbHVzdGVyaXBfc2VxX3Bvc2l0aW9uICppZHggPSAoc3RydWN0IGNsdXN0ZXJpcF9zZXFfcG9zaXRpb24gKil2OwogCi0JaWYgKCpub2RlaWR4ICE9IDApIAorCWlmIChpZHgtPnBvcyAhPSAwKSAKIAkJc2VxX3B1dGMocywgJywnKTsKLQlzZXFfcHJpbnRmKHMsICIldSIsIGMtPmxvY2FsX25vZGVzWypub2RlaWR4XSk7CiAKLQlpZiAoKm5vZGVpZHggPT0gYy0+bnVtX2xvY2FsX25vZGVzLTEpCisJc2VxX3ByaW50ZihzLCAiJXUiLCBpZHgtPmJpdCk7CisKKwlpZiAoaWR4LT5wb3MgPT0gaWR4LT53ZWlnaHQgLSAxKQogCQlzZXFfcHV0YyhzLCAnXG4nKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRURJUkVDVC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRURJUkVDVC5jCmluZGV4IDcxNWNiNjEuLjUyNDViZmQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVESVJFQ1QuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFRElSRUNULmMKQEAgLTkzLDcgKzkzLDcgQEAKIAkJbmV3ZHN0ID0gMDsKIAkJCiAJCXJjdV9yZWFkX2xvY2soKTsKLQkJaW5kZXYgPSBfX2luX2Rldl9nZXQoKCpwc2tiKS0+ZGV2KTsKKwkJaW5kZXYgPSBfX2luX2Rldl9nZXRfcmN1KCgqcHNrYiktPmRldik7CiAJCWlmIChpbmRldiAmJiAoaWZhID0gaW5kZXYtPmlmYV9saXN0KSkKIAkJCW5ld2RzdCA9IGlmYS0+aWZhX2xvY2FsOwogCQlyY3VfcmVhZF91bmxvY2soKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVUxPRy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9VTE9HLmMKaW5kZXggZTJjMTRmMy4uMjg4M2NjZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9VTE9HLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9VTE9HLmMKQEAgLTIyNSw4ICsyMjUsOCBAQAogCiAJLyogY29weSBob29rLCBwcmVmaXgsIHRpbWVzdGFtcCwgcGF5bG9hZCwgZXRjLiAqLwogCXBtLT5kYXRhX2xlbiA9IGNvcHlfbGVuOwotCXBtLT50aW1lc3RhbXBfc2VjID0gc2tiX3R2X2Jhc2UudHZfc2VjICsgc2tiLT50c3RhbXAub2ZmX3NlYzsKLQlwbS0+dGltZXN0YW1wX3VzZWMgPSBza2JfdHZfYmFzZS50dl91c2VjICsgc2tiLT50c3RhbXAub2ZmX3VzZWM7CisJcG0tPnRpbWVzdGFtcF9zZWMgPSBza2ItPnRzdGFtcC5vZmZfc2VjOworCXBtLT50aW1lc3RhbXBfdXNlYyA9IHNrYi0+dHN0YW1wLm9mZl91c2VjOwogCXBtLT5tYXJrID0gc2tiLT5uZm1hcms7CiAJcG0tPmhvb2sgPSBob29rbnVtOwogCWlmIChwcmVmaXggIT0gTlVMTCkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3Jhdy5jIGIvbmV0L2lwdjQvcmF3LmMKaW5kZXggMzA0YmIwYS4uNGIwZDdlNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcmF3LmMKKysrIGIvbmV0L2lwdjQvcmF3LmMKQEAgLTM2MSw3ICszNjEsNyBAQAogCiAJCQlpZiAodHlwZSAmJiBjb2RlKSB7CiAJCQkJZ2V0X3VzZXIoZmwtPmZsX2ljbXBfdHlwZSwgdHlwZSk7Ci0JCQkJX19nZXRfdXNlcihmbC0+ZmxfaWNtcF9jb2RlLCBjb2RlKTsKKwkJCSAgICAgICAgZ2V0X3VzZXIoZmwtPmZsX2ljbXBfY29kZSwgY29kZSk7CiAJCQkJcHJvYmVkID0gMTsKIAkJCX0KIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggODU0OWYyNi4uMzgxZGQ2YSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYworKysgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0yMTI4LDcgKzIxMjgsNyBAQAogCQlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CiAKIAkJcmN1X3JlYWRfbG9jaygpOwotCQlpZiAoKGluX2RldiA9IF9faW5fZGV2X2dldChkZXYpKSAhPSBOVUxMKSB7CisJCWlmICgoaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpKSAhPSBOVUxMKSB7CiAJCQlpbnQgb3VyID0gaXBfY2hlY2tfbWMoaW5fZGV2LCBkYWRkciwgc2FkZHIsCiAJCQkJc2tiLT5uaC5pcGgtPnByb3RvY29sKTsKIAkJCWlmIChvdXIKQEAgLTI0NDMsNyArMjQ0Myw5IEBACiAJCWVyciA9IC1FTk9ERVY7CiAJCWlmIChkZXZfb3V0ID09IE5VTEwpCiAJCQlnb3RvIG91dDsKLQkJaWYgKF9faW5fZGV2X2dldChkZXZfb3V0KSA9PSBOVUxMKSB7CisKKwkJLyogUkFDRTogQ2hlY2sgcmV0dXJuIHZhbHVlIG9mIGluZXRfc2VsZWN0X2FkZHIgaW5zdGVhZC4gKi8KKwkJaWYgKF9faW5fZGV2X2dldF9ydG5sKGRldl9vdXQpID09IE5VTEwpIHsKIAkJCWRldl9wdXQoZGV2X291dCk7CiAJCQlnb3RvIG91dDsJLyogV3JvbmcgZXJyb3IgY29kZSAqLwogCQl9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYmljLmMgYi9uZXQvaXB2NC90Y3BfYmljLmMKaW5kZXggYjk0MDM0Ni4uNmQ4MGUwNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2JpYy5jCisrKyBiL25ldC9pcHY0L3RjcF9iaWMuYwpAQCAtMTM2LDcgKzEzNiw3IEBACiAJCWVsc2UgaWYgKGN3bmQgPCBjYS0+bGFzdF9tYXhfY3duZCArIG1heF9pbmNyZW1lbnQqKEJJQ1RDUF9CLTEpKQogCQkJLyogc2xvdyBzdGFydCAqLwogCQkJY2EtPmNudCA9IChjd25kICogKEJJQ1RDUF9CLTEpKQotCQkJCS8gY3duZC1jYS0+bGFzdF9tYXhfY3duZDsKKwkJCQkvIChjd25kIC0gY2EtPmxhc3RfbWF4X2N3bmQpOwogCQllbHNlCiAJCQkvKiBsaW5lYXIgaW5jcmVhc2UgKi8KIAkJCWNhLT5jbnQgPSBjd25kIC8gbWF4X2luY3JlbWVudDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggMjkyMjJiOTYuLjY3NzQxOWQwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuYworKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwpAQCAtMzU1LDggKzM1NSw2IEBACiAJCQlhcHBfd2luIC09IGljc2stPmljc2tfYWNrLnJjdl9tc3M7CiAJCWFwcF93aW4gPSBtYXgoYXBwX3dpbiwgMlUqdHAtPmFkdm1zcyk7CiAKLQkJaWYgKCFvZm9fd2luKQotCQkJdHAtPndpbmRvd19jbGFtcCA9IG1pbih0cC0+d2luZG93X2NsYW1wLCBhcHBfd2luKTsKIAkJdHAtPnJjdl9zc3RocmVzaCA9IG1pbih0cC0+d2luZG93X2NsYW1wLCAyVSp0cC0+YWR2bXNzKTsKIAl9CiB9CkBAIC05NzksMTQgKzk3NywxOSBAQAogCQkJaWYgKCFiZWZvcmUoVENQX1NLQl9DQihza2IpLT5zZXEsIGVuZF9zZXEpKQogCQkJCWJyZWFrOwogCisJCQlpbl9zYWNrID0gIWFmdGVyKHN0YXJ0X3NlcSwgVENQX1NLQl9DQihza2IpLT5zZXEpICYmCisJCQkJIWJlZm9yZShlbmRfc2VxLCBUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXEpOworCiAJCQlwY291bnQgPSB0Y3Bfc2tiX3Bjb3VudChza2IpOwogCi0JCQlpZiAocGNvdW50ID4gMSAmJgotCQkJICAgIChhZnRlcihzdGFydF9zZXEsIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxKSB8fAotCQkJICAgICBiZWZvcmUoZW5kX3NlcSwgVENQX1NLQl9DQihza2IpLT5lbmRfc2VxKSkpIHsKKwkJCWlmIChwY291bnQgPiAxICYmICFpbl9zYWNrICYmCisJCQkgICAgYWZ0ZXIoVENQX1NLQl9DQihza2IpLT5lbmRfc2VxLCBzdGFydF9zZXEpKSB7CiAJCQkJdW5zaWduZWQgaW50IHBrdF9sZW47CiAKLQkJCQlpZiAoYWZ0ZXIoc3RhcnRfc2VxLCBUQ1BfU0tCX0NCKHNrYiktPnNlcSkpCisJCQkJaW5fc2FjayA9ICFhZnRlcihzdGFydF9zZXEsCisJCQkJCQkgVENQX1NLQl9DQihza2IpLT5zZXEpOworCisJCQkJaWYgKCFpbl9zYWNrKQogCQkJCQlwa3RfbGVuID0gKHN0YXJ0X3NlcSAtCiAJCQkJCQkgICBUQ1BfU0tCX0NCKHNrYiktPnNlcSk7CiAJCQkJZWxzZQpAQCAtOTk5LDkgKzEwMDIsNiBAQAogCiAJCQlmYWNrX2NvdW50ICs9IHBjb3VudDsKIAotCQkJaW5fc2FjayA9ICFhZnRlcihzdGFydF9zZXEsIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxKSAmJgotCQkJCSFiZWZvcmUoZW5kX3NlcSwgVENQX1NLQl9DQihza2IpLT5lbmRfc2VxKTsKLQogCQkJc2Fja2VkID0gVENQX1NLQl9DQihza2IpLT5zYWNrZWQ7CiAKIAkJCS8qIEFjY291bnQgRC1TQUNLIGZvciByZXRyYW5zbWl0dGVkIHBhY2tldC4gKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pcHY0LmMgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCmluZGV4IDEzZGZiMzkuLmM4NTgxOWQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pcHY0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwpAQCAtMTMwLDE5ICsxMzAsMjAgQEAKIAlpbnQgZGlmID0gc2stPnNrX2JvdW5kX2Rldl9pZjsKIAlJTkVUX0FERFJfQ09PS0lFKGFjb29raWUsIHNhZGRyLCBkYWRkcikKIAljb25zdCBfX3UzMiBwb3J0cyA9IElORVRfQ09NQklORURfUE9SVFMoaW5ldC0+ZHBvcnQsIGxwb3J0KTsKLQljb25zdCBpbnQgaGFzaCA9IGluZXRfZWhhc2hmbihkYWRkciwgbHBvcnQsIHNhZGRyLCBpbmV0LT5kcG9ydCwgdGNwX2hhc2hpbmZvLmVoYXNoX3NpemUpOwotCXN0cnVjdCBpbmV0X2VoYXNoX2J1Y2tldCAqaGVhZCA9ICZ0Y3BfaGFzaGluZm8uZWhhc2hbaGFzaF07CisJdW5zaWduZWQgaW50IGhhc2ggPSBpbmV0X2VoYXNoZm4oZGFkZHIsIGxwb3J0LCBzYWRkciwgaW5ldC0+ZHBvcnQpOworCXN0cnVjdCBpbmV0X2VoYXNoX2J1Y2tldCAqaGVhZCA9IGluZXRfZWhhc2hfYnVja2V0KCZ0Y3BfaGFzaGluZm8sIGhhc2gpOwogCXN0cnVjdCBzb2NrICpzazI7CiAJY29uc3Qgc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAJc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHc7CiAKKwlwcmVmZXRjaChoZWFkLT5jaGFpbi5maXJzdCk7CiAJd3JpdGVfbG9jaygmaGVhZC0+bG9jayk7CiAKIAkvKiBDaGVjayBUSU1FLVdBSVQgc29ja2V0cyBmaXJzdC4gKi8KIAlza19mb3JfZWFjaChzazIsIG5vZGUsICYoaGVhZCArIHRjcF9oYXNoaW5mby5laGFzaF9zaXplKS0+Y2hhaW4pIHsKIAkJdHcgPSBpbmV0X3R3c2soc2syKTsKIAotCQlpZiAoSU5FVF9UV19NQVRDSChzazIsIGFjb29raWUsIHNhZGRyLCBkYWRkciwgcG9ydHMsIGRpZikpIHsKKwkJaWYgKElORVRfVFdfTUFUQ0goc2syLCBoYXNoLCBhY29va2llLCBzYWRkciwgZGFkZHIsIHBvcnRzLCBkaWYpKSB7CiAJCQljb25zdCBzdHJ1Y3QgdGNwX3RpbWV3YWl0X3NvY2sgKnRjcHR3ID0gdGNwX3R3c2soc2syKTsKIAkJCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCkBAIC0xNzksNyArMTgwLDcgQEAKIAogCS8qIEFuZCBlc3RhYmxpc2hlZCBwYXJ0Li4uICovCiAJc2tfZm9yX2VhY2goc2syLCBub2RlLCAmaGVhZC0+Y2hhaW4pIHsKLQkJaWYgKElORVRfTUFUQ0goc2syLCBhY29va2llLCBzYWRkciwgZGFkZHIsIHBvcnRzLCBkaWYpKQorCQlpZiAoSU5FVF9NQVRDSChzazIsIGhhc2gsIGFjb29raWUsIHNhZGRyLCBkYWRkciwgcG9ydHMsIGRpZikpCiAJCQlnb3RvIG5vdF91bmlxdWU7CiAJfQogCkBAIC0xODgsNyArMTg5LDcgQEAKIAkgKiBpbiBoYXNoIHRhYmxlIHNvY2tldCB3aXRoIGEgZnVubnkgaWRlbnRpdHkuICovCiAJaW5ldC0+bnVtID0gbHBvcnQ7CiAJaW5ldC0+c3BvcnQgPSBodG9ucyhscG9ydCk7Ci0Jc2stPnNrX2hhc2hlbnQgPSBoYXNoOworCXNrLT5za19oYXNoID0gaGFzaDsKIAlCVUdfVFJBUChza191bmhhc2hlZChzaykpOwogCV9fc2tfYWRkX25vZGUoc2ssICZoZWFkLT5jaGFpbik7CiAJc29ja19wcm90X2luY191c2Uoc2stPnNrX3Byb3QpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jIGIvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCmluZGV4IGE4OGRiMjguLmIxYTYzYjIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYworKysgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKQEAgLTM4NCw3ICszODQsNyBAQAogCQluZXd0cC0+ZnJ0b19jb3VudGVyID0gMDsKIAkJbmV3dHAtPmZydG9faGlnaG1hcmsgPSAwOwogCi0JCW5ld2ljc2stPmljc2tfY2Ffb3BzID0gJnRjcF9yZW5vOworCQluZXdpY3NrLT5pY3NrX2NhX29wcyA9ICZ0Y3BfaW5pdF9jb25nZXN0aW9uX29wczsKIAogCQl0Y3Bfc2V0X2NhX3N0YXRlKG5ld3NrLCBUQ1BfQ0FfT3Blbik7CiAJCXRjcF9pbml0X3htaXRfdGltZXJzKG5ld3NrKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwppbmRleCBjMTBlNDQzLi5iOTA3NDU2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCkBAIC0xOTAsNyArMTkwLDcgQEAKIAl9CiAKIAkvKiBTZXQgaW5pdGlhbCB3aW5kb3cgdG8gdmFsdWUgZW5vdWdoIGZvciBzZW5kZXJzLAotCSAqIGZvbGxvd2luZyBSRkMxNDE0LiBTZW5kZXJzLCBub3QgZm9sbG93aW5nIHRoaXMgUkZDLAorCSAqIGZvbGxvd2luZyBSRkMyNDE0LiBTZW5kZXJzLCBub3QgZm9sbG93aW5nIHRoaXMgUkZDLAogCSAqIHdpbGwgYmUgc2F0aXNmaWVkIHdpdGggMi4KIAkgKi8KIAlpZiAobXNzID4gKDE8PCpyY3Zfd3NjYWxlKSkgewpAQCAtNDM1LDYgKzQzNSw3IEBACiAJaW50IG5zaXplLCBvbGRfZmFjdG9yOwogCXUxNiBmbGFnczsKIAorCUJVR19PTihsZW4gPiBza2ItPmxlbik7CiAJbnNpemUgPSBza2JfaGVhZGxlbihza2IpIC0gbGVuOwogCWlmIChuc2l6ZSA8IDApCiAJCW5zaXplID0gMDsKQEAgLTQ1OSw5ICs0NjAsNyBAQAogCWZsYWdzID0gVENQX1NLQl9DQihza2IpLT5mbGFnczsKIAlUQ1BfU0tCX0NCKHNrYiktPmZsYWdzID0gZmxhZ3MgJiB+KFRDUENCX0ZMQUdfRklOfFRDUENCX0ZMQUdfUFNIKTsKIAlUQ1BfU0tCX0NCKGJ1ZmYpLT5mbGFncyA9IGZsYWdzOwotCVRDUF9TS0JfQ0IoYnVmZiktPnNhY2tlZCA9Ci0JCShUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCAmCi0JCSAoVENQQ0JfTE9TVCB8IFRDUENCX0VWRVJfUkVUUkFOUyB8IFRDUENCX0FUX1RBSUwpKTsKKwlUQ1BfU0tCX0NCKGJ1ZmYpLT5zYWNrZWQgPSBUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZDsKIAlUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCAmPSB+VENQQ0JfQVRfVEFJTDsKIAogCWlmICghc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyAmJiBza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9IVykgewpAQCAtNDk5LDExICs0OTgsMjYgQEAKIAkJCXRjcF9za2JfcGNvdW50KGJ1ZmYpOwogCiAJCXRwLT5wYWNrZXRzX291dCAtPSBkaWZmOworCisJCWlmIChUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCAmIFRDUENCX1NBQ0tFRF9BQ0tFRCkKKwkJCXRwLT5zYWNrZWRfb3V0IC09IGRpZmY7CisJCWlmIChUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCAmIFRDUENCX1NBQ0tFRF9SRVRSQU5TKQorCQkJdHAtPnJldHJhbnNfb3V0IC09IGRpZmY7CisKIAkJaWYgKFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkICYgVENQQ0JfTE9TVCkgewogCQkJdHAtPmxvc3Rfb3V0IC09IGRpZmY7CiAJCQl0cC0+bGVmdF9vdXQgLT0gZGlmZjsKIAkJfQorCiAJCWlmIChkaWZmID4gMCkgeworCQkJLyogQWRqdXN0IFJlbm8gU0FDSyBlc3RpbWF0ZS4gKi8KKwkJCWlmICghdHAtPnJ4X29wdC5zYWNrX29rKSB7CisJCQkJdHAtPnNhY2tlZF9vdXQgLT0gZGlmZjsKKwkJCQlpZiAoKGludCl0cC0+c2Fja2VkX291dCA8IDApCisJCQkJCXRwLT5zYWNrZWRfb3V0ID0gMDsKKwkJCQl0Y3Bfc3luY19sZWZ0X291dCh0cCk7CisJCQl9CisKIAkJCXRwLT5mYWNrZXRzX291dCAtPSBkaWZmOwogCQkJaWYgKChpbnQpdHAtPmZhY2tldHNfb3V0IDwgMCkKIAkJCQl0cC0+ZmFja2V0c19vdXQgPSAwOwpAQCAtMTU5NSw3ICsxNjA5LDcgQEAKICAqIHdhcyB1bnJlYWQgZGF0YSBpbiB0aGUgcmVjZWl2ZSBxdWV1ZS4gIFRoaXMgYmVoYXZpb3IgaXMgcmVjb21tZW5kZWQKICAqIGJ5IGRyYWZ0LWlldGYtdGNwaW1wbC1wcm9iLTAzLnR4dCBzZWN0aW9uIDMuMTAuICAtRGF2ZU0KICAqLwotdm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgcHJpb3JpdHkpCit2b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIGdmcF90IHByaW9yaXR5KQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBza19idWZmICpza2I7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwppbmRleCAyZmVhM2Y0Li5hOTcwYjQ3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jCisrKyBiL25ldC9pcHY2L2FkZHJjb25mLmMKQEAgLTE4MDYsNyArMTgwNiw3IEBACiAJfQogCiAgICAgICAgIGZvciAoZGV2ID0gZGV2X2Jhc2U7IGRldiAhPSBOVUxMOyBkZXYgPSBkZXYtPm5leHQpIHsKLQkJc3RydWN0IGluX2RldmljZSAqIGluX2RldiA9IF9faW5fZGV2X2dldChkZXYpOworCQlzdHJ1Y3QgaW5fZGV2aWNlICogaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3J0bmwoZGV2KTsKIAkJaWYgKGluX2RldiAmJiAoZGV2LT5mbGFncyAmIElGRl9VUCkpIHsKIAkJCXN0cnVjdCBpbl9pZmFkZHIgKiBpZmE7CiAKQEAgLTM1MjAsNiArMzUyMCw4IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAorCWlwNl9udWxsX2VudHJ5LnJ0NmlfaWRldiA9IGluNl9kZXZfZ2V0KCZsb29wYmFja19kZXYpOworCiAJcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZpcHY2X2Rldl9ub3RmKTsKIAogI2lmZGVmIENPTkZJR19JUFY2X1BSSVZBQ1kKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2VzcDYuYyBiL25ldC9pcHY2L2VzcDYuYwppbmRleCA5YjI3NDYwLi40MGQ5YTE5IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9lc3A2LmMKKysrIGIvbmV0L2lwdjYvZXNwNi5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bmV0L2VzcC5oPgogI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3Bma2V5djIuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxuZXQvaWNtcC5oPgpAQCAtNjYsMTAgKzY3LDEwIEBACiAKIAlhbGVuID0gZXNwLT5hdXRoLmljdl90cnVuY19sZW47CiAJdGZtID0gZXNwLT5jb25mLnRmbTsKLQlibGtzaXplID0gKGNyeXB0b190Zm1fYWxnX2Jsb2Nrc2l6ZSh0Zm0pICsgMykgJiB+MzsKLQljbGVuID0gKGNsZW4gKyAyICsgYmxrc2l6ZS0xKSZ+KGJsa3NpemUtMSk7CisJYmxrc2l6ZSA9IEFMSUdOKGNyeXB0b190Zm1fYWxnX2Jsb2Nrc2l6ZSh0Zm0pLCA0KTsKKwljbGVuID0gQUxJR04oY2xlbiArIDIsIGJsa3NpemUpOwogCWlmIChlc3AtPmNvbmYucGFkbGVuKQotCQljbGVuID0gKGNsZW4gKyBlc3AtPmNvbmYucGFkbGVuLTEpJn4oZXNwLT5jb25mLnBhZGxlbi0xKTsKKwkJY2xlbiA9IEFMSUdOKGNsZW4sIGVzcC0+Y29uZi5wYWRsZW4pOwogCiAJaWYgKChuZnJhZ3MgPSBza2JfY293X2RhdGEoc2tiLCBjbGVuLXNrYi0+bGVuK2FsZW4sICZ0cmFpbGVyKSkgPCAwKSB7CiAJCWdvdG8gZXJyb3I7CkBAIC0xMzMsNyArMTM0LDcgQEAKIAlzdHJ1Y3QgaXB2Nl9lc3BfaGRyICplc3BoOwogCXN0cnVjdCBlc3BfZGF0YSAqZXNwID0geC0+ZGF0YTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqdHJhaWxlcjsKLQlpbnQgYmxrc2l6ZSA9IGNyeXB0b190Zm1fYWxnX2Jsb2Nrc2l6ZShlc3AtPmNvbmYudGZtKTsKKwlpbnQgYmxrc2l6ZSA9IEFMSUdOKGNyeXB0b190Zm1fYWxnX2Jsb2Nrc2l6ZShlc3AtPmNvbmYudGZtKSwgNCk7CiAJaW50IGFsZW4gPSBlc3AtPmF1dGguaWN2X3RydW5jX2xlbjsKIAlpbnQgZWxlbiA9IHNrYi0+bGVuIC0gc2l6ZW9mKHN0cnVjdCBpcHY2X2VzcF9oZHIpIC0gZXNwLT5jb25mLml2bGVuIC0gYWxlbjsKIApAQCAtMjM1LDE2ICsyMzYsMTcgQEAKIHN0YXRpYyB1MzIgZXNwNl9nZXRfbWF4X3NpemUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBtdHUpCiB7CiAJc3RydWN0IGVzcF9kYXRhICplc3AgPSB4LT5kYXRhOwotCXUzMiBibGtzaXplID0gY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKGVzcC0+Y29uZi50Zm0pOworCXUzMiBibGtzaXplID0gQUxJR04oY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKGVzcC0+Y29uZi50Zm0pLCA0KTsKIAogCWlmICh4LT5wcm9wcy5tb2RlKSB7Ci0JCW10dSA9IChtdHUgKyAyICsgYmxrc2l6ZS0xKSZ+KGJsa3NpemUtMSk7CisJCW10dSA9IEFMSUdOKG10dSArIDIsIGJsa3NpemUpOwogCX0gZWxzZSB7CiAJCS8qIFRoZSB3b3JzdCBjYXNlLiAqLwotCQltdHUgKz0gMiArIGJsa3NpemU7CisJCXUzMiBwYWRzaXplID0gKChibGtzaXplIC0gMSkgJiA3KSArIDE7CisJCW10dSA9IEFMSUdOKG10dSArIDIsIHBhZHNpemUpICsgYmxrc2l6ZSAtIHBhZHNpemU7CiAJfQogCWlmIChlc3AtPmNvbmYucGFkbGVuKQotCQltdHUgPSAobXR1ICsgZXNwLT5jb25mLnBhZGxlbi0xKSZ+KGVzcC0+Y29uZi5wYWRsZW4tMSk7CisJCW10dSA9IEFMSUdOKG10dSwgZXNwLT5jb25mLnBhZGxlbik7CiAKIAlyZXR1cm4gbXR1ICsgeC0+cHJvcHMuaGVhZGVyX2xlbiArIGVzcC0+YXV0aC5pY3ZfZnVsbF9sZW47CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmxvd2xhYmVsLmMgYi9uZXQvaXB2Ni9pcDZfZmxvd2xhYmVsLmMKaW5kZXggZjg0MWJkZS4uYmJiZTgwYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X2Zsb3dsYWJlbC5jCisrKyBiL25ldC9pcHY2L2lwNl9mbG93bGFiZWwuYwpAQCAtNDgzLDcgKzQ4Myw3IEBACiAJCQkJCQlnb3RvIGRvbmU7CiAJCQkJCX0KIAkJCQkJZmwxID0gc2ZsLT5mbDsKLQkJCQkJYXRvbWljX2luYygmZmwtPnVzZXJzKTsKKwkJCQkJYXRvbWljX2luYygmZmwxLT51c2Vycyk7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuYwppbmRleCAyZjU4OWYyLi41NjNiNDQyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jCkBAIC02NjYsNyArNjY2LDcgQEAKIAkJICovCiAJCWZoLT5uZXh0aGRyID0gbmV4dGhkcjsKIAkJZmgtPnJlc2VydmVkID0gMDsKLQkJaWYgKGZyYWdfaWQpIHsKKwkJaWYgKCFmcmFnX2lkKSB7CiAJCQlpcHY2X3NlbGVjdF9pZGVudChza2IsIGZoKTsKIAkJCWZyYWdfaWQgPSBmaC0+aWRlbnRpZmljYXRpb247CiAJCX0gZWxzZQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbWNhc3QuYyBiL25ldC9pcHY2L21jYXN0LmMKaW5kZXggMjlmZWQ2ZS4uMzlhOTZjNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbWNhc3QuYworKysgYi9uZXQvaXB2Ni9tY2FzdC5jCkBAIC0xMzkzLDcgKzEzOTMsNyBAQAogCiBzdGF0aWMgaW50IGdyZWNfc2l6ZShzdHJ1Y3QgaWZtY2FkZHI2ICpwbWMsIGludCB0eXBlLCBpbnQgZ2RlbCwgaW50IHNkZWwpCiB7Ci0JcmV0dXJuIHNpemVvZihzdHJ1Y3QgbWxkMl9ncmVjKSArIDQqbWxkX3Njb3VudChwbWMsdHlwZSxnZGVsLHNkZWwpOworCXJldHVybiBzaXplb2Yoc3RydWN0IG1sZDJfZ3JlYykgKyAxNiAqIG1sZF9zY291bnQocG1jLHR5cGUsZ2RlbCxzZGVsKTsKIH0KIAogc3RhdGljIHN0cnVjdCBza19idWZmICphZGRfZ3JoZWFkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZm1jYWRkcjYgKnBtYywKQEAgLTE5NjgsNyArMTk2OCw3IEBACiAJfQogCXBtYy0+bWNhX3NvdXJjZXMgPSBOVUxMOwogCXBtYy0+bWNhX3NmbW9kZSA9IE1DQVNUX0VYQ0xVREU7Ci0JcG1jLT5tY2Ffc2Zjb3VudFtNQ0FTVF9FWENMVURFXSA9IDA7CisJcG1jLT5tY2Ffc2Zjb3VudFtNQ0FTVF9JTkNMVURFXSA9IDA7CiAJcG1jLT5tY2Ffc2Zjb3VudFtNQ0FTVF9FWENMVURFXSA9IDE7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25kaXNjLmMgYi9uZXQvaXB2Ni9uZGlzYy5jCmluZGV4IDU1NWEzMTMuLjMwNWQ5ZWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25kaXNjLmMKKysrIGIvbmV0L2lwdjYvbmRpc2MuYwpAQCAtMTQ1MCw3ICsxNDUwLDcgQEAKIAogc3RhdGljIHZvaWQgcG5kaXNjX3JlZG8oc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQluZGlzY19yY3Yoc2tiKTsKKwluZGlzY19yZWN2X25zKHNrYik7CiAJa2ZyZWVfc2tiKHNrYik7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWcKaW5kZXggMjE2ZmJlMWEuLmJiN2NjZmUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnCkBAIC0yMDksNiArMjA5LDE3IEBACiAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgSVA2X05GX1RBUkdFVF9ORlFVRVVFCisJdHJpc3RhdGUgIk5GUVVFVUUgVGFyZ2V0IFN1cHBvcnQiCisJZGVwZW5kcyBvbiBJUF9ORl9JUFRBQkxFUworCWhlbHAKKwkgIFRoaXMgVGFyZ2V0IHJlcGxhY2VkIHRoZSBvbGQgb2Jzb2xldGUgUVVFVUUgdGFyZ2V0LgorCisJICBBcyBvcHBvc2VkIHRvIFFVRVVFLCBpdCBzdXBwb3J0cyA2NTUzNSBkaWZmZXJlbnQgcXVldWVzLAorCSAgbm90IGp1c3Qgb25lLgorCisJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KKwogIyAgaWYgWyAiJENPTkZJR19JUDZfTkZfRklMVEVSIiAhPSAibiIgXTsgdGhlbgogIyAgICBkZXBfdHJpc3RhdGUgJyAgICBSRUpFQ1QgdGFyZ2V0IHN1cHBvcnQnIENPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVCAkQ09ORklHX0lQNl9ORl9GSUxURVIKICMgICAgaWYgWyAiJENPTkZJR19FWFBFUklNRU5UQUwiID0gInkiIF07IHRoZW4KZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZSBiL25ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZQppbmRleCBiZDlhMTZhLi4yYjJjMzcwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlCkBAIC0yMSw5ICsyMSw5IEBACiBvYmotJChDT05GSUdfSVA2X05GX01BTkdMRSkgKz0gaXA2dGFibGVfbWFuZ2xlLm8KIG9iai0kKENPTkZJR19JUDZfTkZfVEFSR0VUX01BUkspICs9IGlwNnRfTUFSSy5vCiBvYmotJChDT05GSUdfSVA2X05GX1RBUkdFVF9ITCkgKz0gaXA2dF9ITC5vCitvYmotJChDT05GSUdfSVA2X05GX1RBUkdFVF9ORlFVRVVFKSArPSBpcDZ0X05GUVVFVUUubwogb2JqLSQoQ09ORklHX0lQNl9ORl9RVUVVRSkgKz0gaXA2X3F1ZXVlLm8KIG9iai0kKENPTkZJR19JUDZfTkZfVEFSR0VUX0xPRykgKz0gaXA2dF9MT0cubwogb2JqLSQoQ09ORklHX0lQNl9ORl9SQVcpICs9IGlwNnRhYmxlX3Jhdy5vCiBvYmotJChDT05GSUdfSVA2X05GX01BVENIX0hMKSArPSBpcDZ0X2hsLm8KIG9iai0kKENPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVCkgKz0gaXA2dF9SRUpFQ1Qubwotb2JqLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFKSArPSBpcDZ0X05GUVVFVUUubwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jCmluZGV4IGFhMTFjZjMuLjUwMjdiYmUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMKQEAgLTIzOCw4ICsyMzgsOCBAQAogCiAJcG1zZy0+cGFja2V0X2lkICAgICAgID0gKHVuc2lnbmVkIGxvbmcgKWVudHJ5OwogCXBtc2ctPmRhdGFfbGVuICAgICAgICA9IGRhdGFfbGVuOwotCXBtc2ctPnRpbWVzdGFtcF9zZWMgICA9IHNrYl90dl9iYXNlLnR2X3NlYyArIGVudHJ5LT5za2ItPnRzdGFtcC5vZmZfc2VjOwotCXBtc2ctPnRpbWVzdGFtcF91c2VjICA9IHNrYl90dl9iYXNlLnR2X3VzZWMgKyBlbnRyeS0+c2tiLT50c3RhbXAub2ZmX3VzZWM7CisJcG1zZy0+dGltZXN0YW1wX3NlYyAgID0gZW50cnktPnNrYi0+dHN0YW1wLm9mZl9zZWM7CisJcG1zZy0+dGltZXN0YW1wX3VzZWMgID0gZW50cnktPnNrYi0+dHN0YW1wLm9mZl91c2VjOwogCXBtc2ctPm1hcmsgICAgICAgICAgICA9IGVudHJ5LT5za2ItPm5mbWFyazsKIAlwbXNnLT5ob29rICAgICAgICAgICAgPSBlbnRyeS0+aW5mby0+aG9vazsKIAlwbXNnLT5od19wcm90b2NvbCAgICAgPSBlbnRyeS0+c2tiLT5wcm90b2NvbDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCmluZGV4IDFjYjhhZGIuLjIxZGVlYzIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmg+CiAKQEAgLTk1MCw4ICs5NTEsMTAgQEAKIAl9CiAKIAkvKiBBbmQgb25lIGNvcHkgZm9yIGV2ZXJ5IG90aGVyIENQVSAqLwotCWZvciAoaSA9IDE7IGkgPCBudW1fcG9zc2libGVfY3B1cygpOyBpKyspIHsKLQkJbWVtY3B5KG5ld2luZm8tPmVudHJpZXMgKyBTTVBfQUxJR04obmV3aW5mby0+c2l6ZSkqaSwKKwlmb3JfZWFjaF9jcHUoaSkgeworCQlpZiAoaSA9PSAwKQorCQkJY29udGludWU7CisJCW1lbWNweShuZXdpbmZvLT5lbnRyaWVzICsgU01QX0FMSUdOKG5ld2luZm8tPnNpemUpICogaSwKIAkJICAgICAgIG5ld2luZm8tPmVudHJpZXMsCiAJCSAgICAgICBTTVBfQUxJR04obmV3aW5mby0+c2l6ZSkpOwogCX0KQEAgLTk3Miw3ICs5NzUsNyBAQAogCQlzdHJ1Y3QgaXA2dF9lbnRyeSAqdGFibGVfYmFzZTsKIAkJdW5zaWduZWQgaW50IGk7CiAKLQkJZm9yIChpID0gMDsgaSA8IG51bV9wb3NzaWJsZV9jcHVzKCk7IGkrKykgeworCQlmb3JfZWFjaF9jcHUoaSkgewogCQkJdGFibGVfYmFzZSA9CiAJCQkJKHZvaWQgKiluZXdpbmZvLT5lbnRyaWVzCiAJCQkJKyBUQUJMRV9PRkZTRVQobmV3aW5mbywgaSk7CkBAIC0xMDE5LDcgKzEwMjIsNyBAQAogCXVuc2lnbmVkIGludCBjcHU7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlmb3IgKGNwdSA9IDA7IGNwdSA8IG51bV9wb3NzaWJsZV9jcHVzKCk7IGNwdSsrKSB7CisJZm9yX2VhY2hfY3B1KGNwdSkgewogCQlpID0gMDsKIAkJSVA2VF9FTlRSWV9JVEVSQVRFKHQtPmVudHJpZXMgKyBUQUJMRV9PRkZTRVQodCwgY3B1KSwKIAkJCQkgIHQtPnNpemUsCkBAIC0xMTUzLDcgKzExNTYsOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCW5ld2luZm8gPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgaXA2dF90YWJsZV9pbmZvKQotCQkJICArIFNNUF9BTElHTih0bXAuc2l6ZSkgKiBudW1fcG9zc2libGVfY3B1cygpKTsKKwkJCSAgKyBTTVBfQUxJR04odG1wLnNpemUpICoKKwkJCSAgCQkoaGlnaGVzdF9wb3NzaWJsZV9wcm9jZXNzb3JfaWQoKSsxKSk7CiAJaWYgKCFuZXdpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTQ2Nyw3ICsxNDcxLDggQEAKIAkJPSB7IDAsIDAsIDAsIHsgMCB9LCB7IDAgfSwgeyB9IH07CiAKIAluZXdpbmZvID0gdm1hbGxvYyhzaXplb2Yoc3RydWN0IGlwNnRfdGFibGVfaW5mbykKLQkJCSAgKyBTTVBfQUxJR04ocmVwbC0+c2l6ZSkgKiBudW1fcG9zc2libGVfY3B1cygpKTsKKwkJCSAgKyBTTVBfQUxJR04ocmVwbC0+c2l6ZSkgKgorCQkJICAJCShoaWdoZXN0X3Bvc3NpYmxlX3Byb2Nlc3Nvcl9pZCgpKzEpKTsKIAlpZiAoIW5ld2luZm8pCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xOTU1LDYgKzE5NjAsNTcgQEAKICNlbmRpZgogfQogCisvKgorICogZmluZCBzcGVjaWZpZWQgaGVhZGVyIHVwIHRvIHRyYW5zcG9ydCBwcm90b2NvbCBoZWFkZXIuCisgKiBJZiBmb3VuZCB0YXJnZXQgaGVhZGVyLCB0aGUgb2Zmc2V0IHRvIHRoZSBoZWFkZXIgaXMgc2V0IHRvICpvZmZzZXQKKyAqIGFuZCByZXR1cm4gMC4gb3RoZXJ3aXNlLCByZXR1cm4gLTEuCisgKgorICogTm90ZXM6IC0gbm9uLTFzdCBGcmFnbWVudCBIZWFkZXIgaXNuJ3Qgc2tpcHBlZC4KKyAqCSAgLSBFU1AgaGVhZGVyIGlzbid0IHNraXBwZWQuCisgKgkgIC0gVGhlIHRhcmdldCBoZWFkZXIgbWF5IGJlIHRyYW5jYXRlZC4KKyAqLworaW50IGlwdjZfZmluZF9oZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50ICpvZmZzZXQsIHU4IHRhcmdldCkKK3sKKwl1bnNpZ25lZCBpbnQgc3RhcnQgPSAodTgqKShza2ItPm5oLmlwdjZoICsgMSkgLSBza2ItPmRhdGE7CisJdTggbmV4dGhkciA9IHNrYi0+bmguaXB2NmgtPm5leHRoZHI7CisJdW5zaWduZWQgaW50IGxlbiA9IHNrYi0+bGVuIC0gc3RhcnQ7CisKKwl3aGlsZSAobmV4dGhkciAhPSB0YXJnZXQpIHsKKwkJc3RydWN0IGlwdjZfb3B0X2hkciBfaGRyLCAqaHA7CisJCXVuc2lnbmVkIGludCBoZHJsZW47CisKKwkJaWYgKCghaXB2Nl9leHRfaGRyKG5leHRoZHIpKSB8fCBuZXh0aGRyID09IE5FWFRIRFJfTk9ORSkKKwkJCXJldHVybiAtMTsKKwkJaHAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBzdGFydCwgc2l6ZW9mKF9oZHIpLCAmX2hkcik7CisJCWlmIChocCA9PSBOVUxMKQorCQkJcmV0dXJuIC0xOworCQlpZiAobmV4dGhkciA9PSBORVhUSERSX0ZSQUdNRU5UKSB7CisJCQl1bnNpZ25lZCBzaG9ydCBfZnJhZ19vZmYsICpmcDsKKwkJCWZwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwKKwkJCQkJCXN0YXJ0K29mZnNldG9mKHN0cnVjdCBmcmFnX2hkciwKKwkJCQkJCQkgICAgICAgZnJhZ19vZmYpLAorCQkJCQkJc2l6ZW9mKF9mcmFnX29mZiksCisJCQkJCQkmX2ZyYWdfb2ZmKTsKKwkJCWlmIChmcCA9PSBOVUxMKQorCQkJCXJldHVybiAtMTsKKworCQkJaWYgKG50b2hzKCpmcCkgJiB+MHg3KQorCQkJCXJldHVybiAtMTsKKwkJCWhkcmxlbiA9IDg7CisJCX0gZWxzZSBpZiAobmV4dGhkciA9PSBORVhUSERSX0FVVEgpCisJCQloZHJsZW4gPSAoaHAtPmhkcmxlbiArIDIpIDw8IDI7IAorCQllbHNlCisJCQloZHJsZW4gPSBpcHY2X29wdGxlbihocCk7IAorCisJCW5leHRoZHIgPSBocC0+bmV4dGhkcjsKKwkJbGVuIC09IGhkcmxlbjsKKwkJc3RhcnQgKz0gaGRybGVuOworCX0KKworCSpvZmZzZXQgPSBzdGFydDsKKwlyZXR1cm4gMDsKK30KKwogRVhQT1JUX1NZTUJPTChpcDZ0X3JlZ2lzdGVyX3RhYmxlKTsKIEVYUE9SVF9TWU1CT0woaXA2dF91bnJlZ2lzdGVyX3RhYmxlKTsKIEVYUE9SVF9TWU1CT0woaXA2dF9kb190YWJsZSk7CkBAIC0xOTYzLDYgKzIwMTksNyBAQAogRVhQT1JUX1NZTUJPTChpcDZ0X3JlZ2lzdGVyX3RhcmdldCk7CiBFWFBPUlRfU1lNQk9MKGlwNnRfdW5yZWdpc3Rlcl90YXJnZXQpOwogRVhQT1JUX1NZTUJPTChpcDZ0X2V4dF9oZHIpOworRVhQT1JUX1NZTUJPTChpcHY2X2ZpbmRfaGRyKTsKIAogbW9kdWxlX2luaXQoaW5pdCk7CiBtb2R1bGVfZXhpdChmaW5pKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2FoLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9haC5jCmluZGV4IGQ1Yjk0ZjEuLmRkZTM3NzkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2FoLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfYWguYwpAQCAtNDgsOTIgKzQ4LDIxIEBACiAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKICAgICAgIGludCAqaG90ZHJvcCkKIHsKLQlzdHJ1Y3QgaXBfYXV0aF9oZHIgKmFoID0gTlVMTCwgX2FoOworCXN0cnVjdCBpcF9hdXRoX2hkciAqYWgsIF9haDsKIAljb25zdCBzdHJ1Y3QgaXA2dF9haCAqYWhpbmZvID0gbWF0Y2hpbmZvOwotCXVuc2lnbmVkIGludCB0ZW1wOwotCWludCBsZW47Ci0JdTggbmV4dGhkcjsKIAl1bnNpZ25lZCBpbnQgcHRyOwogCXVuc2lnbmVkIGludCBoZHJsZW4gPSAwOwogCi0JLypERUJVR1AoIklQdjYgQUggZW50ZXJlZFxuIik7Ki8KLQkvKiBpZiAob3B0LT5hdXRoID09IDApIHJldHVybiAwOwotCSogSXQgZG9lcyBub3QgZmlsbGVkIG9uIG91dHB1dCAqLwotCi0JLyogdHlwZSBvZiB0aGUgMXN0IGV4dGhkciAqLwotCW5leHRoZHIgPSBza2ItPm5oLmlwdjZoLT5uZXh0aGRyOwotCS8qIHBvaW50ZXIgdG8gdGhlIDFzdCBleHRoZHIgKi8KLQlwdHIgPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOwotCS8qIGF2YWlsYWJsZSBsZW5ndGggKi8KLQlsZW4gPSBza2ItPmxlbiAtIHB0cjsKLQl0ZW1wID0gMDsKLQotCXdoaWxlIChpcDZ0X2V4dF9oZHIobmV4dGhkcikpIHsKLQkJc3RydWN0IGlwdjZfb3B0X2hkciBfaGRyLCAqaHA7Ci0KLQkJREVCVUdQKCJpcHY2X2FoIGhlYWRlciBpdGVyYXRpb24gXG4iKTsKLQotCQkvKiBJcyB0aGVyZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSBuZXh0IGV4dCBoZWFkZXI/ICovCi0JCWlmIChsZW4gPCBzaXplb2Yoc3RydWN0IGlwdjZfb3B0X2hkcikpCi0JCQlyZXR1cm4gMDsKLQkJLyogTm8gbW9yZSBleHRoZHIgLT4gZXZhbHVhdGUgKi8KLQkJaWYgKG5leHRoZHIgPT0gTkVYVEhEUl9OT05FKQotCQkJYnJlYWs7Ci0JCS8qIEVTUCAtPiBldmFsdWF0ZSAqLwotCQlpZiAobmV4dGhkciA9PSBORVhUSERSX0VTUCkKLQkJCWJyZWFrOwotCi0JCWhwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHRyLCBzaXplb2YoX2hkciksICZfaGRyKTsKLQkJQlVHX09OKGhwID09IE5VTEwpOwotCi0JCS8qIENhbGN1bGF0ZSB0aGUgaGVhZGVyIGxlbmd0aCAqLwotCQlpZiAobmV4dGhkciA9PSBORVhUSERSX0ZSQUdNRU5UKQotCQkJaGRybGVuID0gODsKLQkJZWxzZSBpZiAobmV4dGhkciA9PSBORVhUSERSX0FVVEgpCi0JCQloZHJsZW4gPSAoaHAtPmhkcmxlbisyKTw8MjsKLQkJZWxzZQotCQkJaGRybGVuID0gaXB2Nl9vcHRsZW4oaHApOwotCi0JCS8qIEFIIC0+IGV2YWx1YXRlICovCi0JCWlmIChuZXh0aGRyID09IE5FWFRIRFJfQVVUSCkgewotCQkJdGVtcCB8PSBNQVNLX0FIOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkKLQkJLyogc2V0IHRoZSBmbGFnICovCi0JCXN3aXRjaCAobmV4dGhkcikgewotCQljYXNlIE5FWFRIRFJfSE9QOgotCQljYXNlIE5FWFRIRFJfUk9VVElORzoKLQkJY2FzZSBORVhUSERSX0ZSQUdNRU5UOgotCQljYXNlIE5FWFRIRFJfQVVUSDoKLQkJY2FzZSBORVhUSERSX0RFU1Q6Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCURFQlVHUCgiaXB2Nl9haCBtYXRjaDogdW5rbm93biBuZXh0aGVhZGVyICV1XG4iLG5leHRoZHIpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQluZXh0aGRyID0gaHAtPm5leHRoZHI7Ci0JCWxlbiAtPSBoZHJsZW47Ci0JCXB0ciArPSBoZHJsZW47Ci0JCWlmIChwdHIgPiBza2ItPmxlbikgewotCQkJREVCVUdQKCJpcHY2X2FoOiBuZXcgcG9pbnRlciB0b28gbGFyZ2UhIFxuIik7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qIEFIIGhlYWRlciBub3QgZm91bmQgKi8KLQlpZiAodGVtcCAhPSBNQVNLX0FIKQorCWlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgJnB0ciwgTkVYVEhEUl9BVVRIKSA8IDApCiAJCXJldHVybiAwOwogCi0JaWYgKGxlbiA8IHNpemVvZihzdHJ1Y3QgaXBfYXV0aF9oZHIpKXsKKwlhaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9haCksICZfYWgpOworCWlmIChhaCA9PSBOVUxMKSB7CiAJCSpob3Rkcm9wID0gMTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JYWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIsIHNpemVvZihfYWgpLCAmX2FoKTsKLQlCVUdfT04oYWggPT0gTlVMTCk7CisJaGRybGVuID0gKGFoLT5oZHJsZW4gKyAyKSA8PCAyOwogCiAJREVCVUdQKCJJUHY2IEFIIExFTiAldSAldSAiLCBoZHJsZW4sIGFoLT5oZHJsZW4pOwogCURFQlVHUCgiUkVTICUwNFggIiwgYWgtPnJlc2VydmVkKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2RzdC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZHN0LmMKaW5kZXggNTQwOTI1ZS4uYzQ1MGE2MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZHN0LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZHN0LmMKQEAgLTYzLDggKzYzLDYgQEAKICAgICAgICBzdHJ1Y3QgaXB2Nl9vcHRfaGRyIF9vcHRzaCwgKm9oOwogICAgICAgIGNvbnN0IHN0cnVjdCBpcDZ0X29wdHMgKm9wdGluZm8gPSBtYXRjaGluZm87CiAgICAgICAgdW5zaWduZWQgaW50IHRlbXA7Ci0gICAgICAgdW5zaWduZWQgaW50IGxlbjsKLSAgICAgICB1OCBuZXh0aGRyOwogICAgICAgIHVuc2lnbmVkIGludCBwdHI7CiAgICAgICAgdW5zaWduZWQgaW50IGhkcmxlbiA9IDA7CiAgICAgICAgdW5zaWduZWQgaW50IHJldCA9IDA7CkBAIC03Miw5NyArNzAsMjUgQEAKICAgICAgICB1OCBfb3B0bGVuLCAqbHAgPSBOVUxMOwogICAgICAgIHVuc2lnbmVkIGludCBvcHRsZW47CiAgICAgICAgCi0gICAgICAgLyogdHlwZSBvZiB0aGUgMXN0IGV4dGhkciAqLwotICAgICAgIG5leHRoZHIgPSBza2ItPm5oLmlwdjZoLT5uZXh0aGRyOwotICAgICAgIC8qIHBvaW50ZXIgdG8gdGhlIDFzdCBleHRoZHIgKi8KLSAgICAgICBwdHIgPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOwotICAgICAgIC8qIGF2YWlsYWJsZSBsZW5ndGggKi8KLSAgICAgICBsZW4gPSBza2ItPmxlbiAtIHB0cjsKLSAgICAgICB0ZW1wID0gMDsKLQotICAgICAgICB3aGlsZSAoaXA2dF9leHRfaGRyKG5leHRoZHIpKSB7Ci0gICAgICAgICAgICAgICBzdHJ1Y3QgaXB2Nl9vcHRfaGRyIF9oZHIsICpocDsKLQotICAgICAgICAgICAgICBERUJVR1AoImlwdjZfb3B0cyBoZWFkZXIgaXRlcmF0aW9uIFxuIik7Ci0KLSAgICAgICAgICAgICAgLyogSXMgdGhlcmUgZW5vdWdoIHNwYWNlIGZvciB0aGUgbmV4dCBleHQgaGVhZGVyPyAqLwotICAgICAgICAgICAgICAgIGlmIChsZW4gPCAoaW50KXNpemVvZihzdHJ1Y3QgaXB2Nl9vcHRfaGRyKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAvKiBObyBtb3JlIGV4dGhkciAtPiBldmFsdWF0ZSAqLwotICAgICAgICAgICAgICAgIGlmIChuZXh0aGRyID09IE5FWFRIRFJfTk9ORSkgewotICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgLyogRVNQIC0+IGV2YWx1YXRlICovCi0gICAgICAgICAgICAgICAgaWYgKG5leHRoZHIgPT0gTkVYVEhEUl9FU1ApIHsKLSAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0KLQkgICAgICBocCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9oZHIpLCAmX2hkcik7Ci0JICAgICAgQlVHX09OKGhwID09IE5VTEwpOwotCi0gICAgICAgICAgICAgIC8qIENhbGN1bGF0ZSB0aGUgaGVhZGVyIGxlbmd0aCAqLwotICAgICAgICAgICAgICAgIGlmIChuZXh0aGRyID09IE5FWFRIRFJfRlJBR01FTlQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhkcmxlbiA9IDg7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuZXh0aGRyID09IE5FWFRIRFJfQVVUSCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGhkcmxlbiA9IChocC0+aGRybGVuKzIpPDwyOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGhkcmxlbiA9IGlwdjZfb3B0bGVuKGhwKTsKLQotICAgICAgICAgICAgICAvKiBPUFRTIC0+IGV2YWx1YXRlICovCiAjaWYgSE9QQllIT1AKLSAgICAgICAgICAgICAgICBpZiAobmV4dGhkciA9PSBORVhUSERSX0hPUCkgewotICAgICAgICAgICAgICAgICAgICAgdGVtcCB8PSBNQVNLX0hPUE9QVFM7CisJaWYgKGlwdjZfZmluZF9oZHIoc2tiLCAmcHRyLCBORVhUSERSX0hPUCkgPCAwKQogI2Vsc2UKLSAgICAgICAgICAgICAgICBpZiAobmV4dGhkciA9PSBORVhUSERSX0RFU1QpIHsKLSAgICAgICAgICAgICAgICAgICAgIHRlbXAgfD0gTUFTS19EU1RPUFRTOworCWlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgJnB0ciwgTkVYVEhEUl9ERVNUKSA8IDApCiAjZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9CisJCXJldHVybiAwOwogCi0KLSAgICAgICAgICAgICAgLyogc2V0IHRoZSBmbGFnICovCi0gICAgICAgICAgICAgIHN3aXRjaCAobmV4dGhkcil7Ci0gICAgICAgICAgICAgICAgICAgICBjYXNlIE5FWFRIRFJfSE9QOgotICAgICAgICAgICAgICAgICAgICAgY2FzZSBORVhUSERSX1JPVVRJTkc6Ci0gICAgICAgICAgICAgICAgICAgICBjYXNlIE5FWFRIRFJfRlJBR01FTlQ6Ci0gICAgICAgICAgICAgICAgICAgICBjYXNlIE5FWFRIRFJfQVVUSDoKLSAgICAgICAgICAgICAgICAgICAgIGNhc2UgTkVYVEhEUl9ERVNUOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUJVR1AoImlwdjZfb3B0cyBtYXRjaDogdW5rbm93biBuZXh0aGVhZGVyICV1XG4iLG5leHRoZHIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBuZXh0aGRyID0gaHAtPm5leHRoZHI7Ci0gICAgICAgICAgICAgICAgbGVuIC09IGhkcmxlbjsKLSAgICAgICAgICAgICAgICBwdHIgKz0gaGRybGVuOwotCQlpZiAoIHB0ciA+IHNrYi0+bGVuICkgewotCQkJREVCVUdQKCJpcHY2X29wdHM6IG5ldyBwb2ludGVyIGlzIHRvbyBsYXJnZSEgXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0gICAgICAgIH0KLQotICAgICAgIC8qIE9QVElPTlMgaGVhZGVyIG5vdCBmb3VuZCAqLwotI2lmIEhPUEJZSE9QCi0gICAgICAgaWYgKCB0ZW1wICE9IE1BU0tfSE9QT1BUUyApIHJldHVybiAwOwotI2Vsc2UKLSAgICAgICBpZiAoIHRlbXAgIT0gTUFTS19EU1RPUFRTICkgcmV0dXJuIDA7Ci0jZW5kaWYKLQotICAgICAgIGlmIChsZW4gPCAoaW50KXNpemVvZihzdHJ1Y3QgaXB2Nl9vcHRfaGRyKSl7CisgICAgICAgb2ggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIsIHNpemVvZihfb3B0c2gpLCAmX29wdHNoKTsKKyAgICAgICBpZiAob2ggPT0gTlVMTCl7CiAJICAgICAgICpob3Rkcm9wID0gMTsKICAgICAgICAJCXJldHVybiAwOwogICAgICAgIH0KIAotICAgICAgIGlmIChsZW4gPCBoZHJsZW4peworICAgICAgIGhkcmxlbiA9IGlwdjZfb3B0bGVuKG9oKTsKKyAgICAgICBpZiAoc2tiLT5sZW4gLSBwdHIgPCBoZHJsZW4pewogCSAgICAgICAvKiBQYWNrZXQgc21hbGxlciB0aGFuIGl0J3MgbGVuZ3RoIGZpZWxkICovCiAgICAgICAgCQlyZXR1cm4gMDsKICAgICAgICB9CiAKLSAgICAgICBvaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9vcHRzaCksICZfb3B0c2gpOwotICAgICAgIEJVR19PTihvaCA9PSBOVUxMKTsKLQogICAgICAgIERFQlVHUCgiSVB2NiBPUFRTIExFTiAldSAldSAiLCBoZHJsZW4sIG9oLT5oZHJsZW4pOwogCiAgICAgICAgREVCVUdQKCJsZW4gJTAyWCAlMDRYICUwMlggIiwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2VzcC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZXNwLmMKaW5kZXggZTM5ZGQyMy4uMjRiYzBjZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZXNwLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZXNwLmMKQEAgLTQ4LDg3ICs0OCwyMiBAQAogICAgICAgdW5zaWduZWQgaW50IHByb3RvZmYsCiAgICAgICBpbnQgKmhvdGRyb3ApCiB7Ci0Jc3RydWN0IGlwX2VzcF9oZHIgX2VzcCwgKmVoID0gTlVMTDsKKwlzdHJ1Y3QgaXBfZXNwX2hkciBfZXNwLCAqZWg7CiAJY29uc3Qgc3RydWN0IGlwNnRfZXNwICplc3BpbmZvID0gbWF0Y2hpbmZvOwotCXVuc2lnbmVkIGludCB0ZW1wOwotCWludCBsZW47Ci0JdTggbmV4dGhkcjsKIAl1bnNpZ25lZCBpbnQgcHRyOwogCiAJLyogTWFrZSBzdXJlIHRoaXMgaXNuJ3QgYW4gZXZpbCBwYWNrZXQgKi8KIAkvKkRFQlVHUCgiaXB2Nl9lc3AgZW50ZXJlZCBcbiIpOyovCiAKLQkvKiB0eXBlIG9mIHRoZSAxc3QgZXh0aGRyICovCi0JbmV4dGhkciA9IHNrYi0+bmguaXB2NmgtPm5leHRoZHI7Ci0JLyogcG9pbnRlciB0byB0aGUgMXN0IGV4dGhkciAqLwotCXB0ciA9IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7Ci0JLyogYXZhaWxhYmxlIGxlbmd0aCAqLwotCWxlbiA9IHNrYi0+bGVuIC0gcHRyOwotCXRlbXAgPSAwOwotCi0Jd2hpbGUgKGlwNnRfZXh0X2hkcihuZXh0aGRyKSkgewotCQlzdHJ1Y3QgaXB2Nl9vcHRfaGRyIF9oZHIsICpocDsKLQkJaW50IGhkcmxlbjsKLQotCQlERUJVR1AoImlwdjZfZXNwIGhlYWRlciBpdGVyYXRpb24gXG4iKTsKLQotCQkvKiBJcyB0aGVyZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSBuZXh0IGV4dCBoZWFkZXI/ICovCi0JCWlmIChsZW4gPCBzaXplb2Yoc3RydWN0IGlwdjZfb3B0X2hkcikpCi0JCQlyZXR1cm4gMDsKLQkJLyogTm8gbW9yZSBleHRoZHIgLT4gZXZhbHVhdGUgKi8KLQkJaWYgKG5leHRoZHIgPT0gTkVYVEhEUl9OT05FKQotCQkJYnJlYWs7Ci0JCS8qIEVTUCAtPiBldmFsdWF0ZSAqLwotCQlpZiAobmV4dGhkciA9PSBORVhUSERSX0VTUCkgewotCQkJdGVtcCB8PSBNQVNLX0VTUDsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaHAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIsIHNpemVvZihfaGRyKSwgJl9oZHIpOwotCQlCVUdfT04oaHAgPT0gTlVMTCk7Ci0KLQkJLyogQ2FsY3VsYXRlIHRoZSBoZWFkZXIgbGVuZ3RoICovCi0JCWlmIChuZXh0aGRyID09IE5FWFRIRFJfRlJBR01FTlQpCi0JCQloZHJsZW4gPSA4OwotCQllbHNlIGlmIChuZXh0aGRyID09IE5FWFRIRFJfQVVUSCkKLQkJCWhkcmxlbiA9IChocC0+aGRybGVuKzIpPDwyOwotCQllbHNlCi0JCQloZHJsZW4gPSBpcHY2X29wdGxlbihocCk7Ci0KLQkJLyogc2V0IHRoZSBmbGFnICovCi0JCXN3aXRjaCAobmV4dGhkcikgewotCQljYXNlIE5FWFRIRFJfSE9QOgotCQljYXNlIE5FWFRIRFJfUk9VVElORzoKLQkJY2FzZSBORVhUSERSX0ZSQUdNRU5UOgotCQljYXNlIE5FWFRIRFJfQVVUSDoKLQkJY2FzZSBORVhUSERSX0RFU1Q6Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCURFQlVHUCgiaXB2Nl9lc3AgbWF0Y2g6IHVua25vd24gbmV4dGhlYWRlciAldVxuIixuZXh0aGRyKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJbmV4dGhkciA9IGhwLT5uZXh0aGRyOwotCQlsZW4gLT0gaGRybGVuOwotCQlwdHIgKz0gaGRybGVuOwotCQlpZiAocHRyID4gc2tiLT5sZW4pIHsKLQkJCURFQlVHUCgiaXB2Nl9lc3A6IG5ldyBwb2ludGVyIHRvbyBsYXJnZSEgXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JLyogRVNQIGhlYWRlciBub3QgZm91bmQgKi8KLQlpZiAodGVtcCAhPSBNQVNLX0VTUCkKKwlpZiAoaXB2Nl9maW5kX2hkcihza2IsICZwdHIsIE5FWFRIRFJfRVNQKSA8IDApCiAJCXJldHVybiAwOwogCi0JaWYgKGxlbiA8IHNpemVvZihzdHJ1Y3QgaXBfZXNwX2hkcikpIHsKKwllaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9lc3ApLCAmX2VzcCk7CisJaWYgKGVoID09IE5VTEwpIHsKIAkJKmhvdGRyb3AgPSAxOwogCQlyZXR1cm4gMDsKIAl9CiAKLQllaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9lc3ApLCAmX2VzcCk7Ci0JQlVHX09OKGVoID09IE5VTEwpOwotCiAJREVCVUdQKCJJUHY2IEVTUCBTUEkgJXUgJTA4WFxuIiwgbnRvaGwoZWgtPnNwaSksIG50b2hsKGVoLT5zcGkpKTsKIAogCXJldHVybiAoZWggIT0gTlVMTCkKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuYwppbmRleCA0YmZhMzBhLi4wODVkNWY4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9mcmFnLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZnJhZy5jCkBAIC00OCw5MCArNDgsMTggQEAKICAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLAogICAgICAgaW50ICpob3Rkcm9wKQogewotICAgICAgIHN0cnVjdCBmcmFnX2hkciBfZnJhZywgKmZoID0gTlVMTDsKKyAgICAgICBzdHJ1Y3QgZnJhZ19oZHIgX2ZyYWcsICpmaDsKICAgICAgICBjb25zdCBzdHJ1Y3QgaXA2dF9mcmFnICpmcmFnaW5mbyA9IG1hdGNoaW5mbzsKLSAgICAgICB1bnNpZ25lZCBpbnQgdGVtcDsKLSAgICAgICBpbnQgbGVuOwotICAgICAgIHU4IG5leHRoZHI7CiAgICAgICAgdW5zaWduZWQgaW50IHB0cjsKLSAgICAgICB1bnNpZ25lZCBpbnQgaGRybGVuID0gMDsKIAotICAgICAgIC8qIHR5cGUgb2YgdGhlIDFzdCBleHRoZHIgKi8KLSAgICAgICBuZXh0aGRyID0gc2tiLT5uaC5pcHY2aC0+bmV4dGhkcjsKLSAgICAgICAvKiBwb2ludGVyIHRvIHRoZSAxc3QgZXh0aGRyICovCi0gICAgICAgcHRyID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKLSAgICAgICAvKiBhdmFpbGFibGUgbGVuZ3RoICovCi0gICAgICAgbGVuID0gc2tiLT5sZW4gLSBwdHI7Ci0gICAgICAgdGVtcCA9IDA7CisJaWYgKGlwdjZfZmluZF9oZHIoc2tiLCAmcHRyLCBORVhUSERSX0ZSQUdNRU5UKSA8IDApCisJCXJldHVybiAwOwogCi0gICAgICAgIHdoaWxlIChpcDZ0X2V4dF9oZHIobmV4dGhkcikpIHsKLSAgICAgICAgICAgICAgIHN0cnVjdCBpcHY2X29wdF9oZHIgX2hkciwgKmhwOwotCi0gICAgICAgICAgICAgIERFQlVHUCgiaXB2Nl9mcmFnIGhlYWRlciBpdGVyYXRpb24gXG4iKTsKLQotICAgICAgICAgICAgICAvKiBJcyB0aGVyZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSBuZXh0IGV4dCBoZWFkZXI/ICovCi0gICAgICAgICAgICAgICAgaWYgKGxlbiA8IChpbnQpc2l6ZW9mKHN0cnVjdCBpcHY2X29wdF9oZHIpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgIC8qIE5vIG1vcmUgZXh0aGRyIC0+IGV2YWx1YXRlICovCi0gICAgICAgICAgICAgICAgaWYgKG5leHRoZHIgPT0gTkVYVEhEUl9OT05FKSB7Ci0gICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAvKiBFU1AgLT4gZXZhbHVhdGUgKi8KLSAgICAgICAgICAgICAgICBpZiAobmV4dGhkciA9PSBORVhUSERSX0VTUCkgewotICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLQotCSAgICAgIGhwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHRyLCBzaXplb2YoX2hkciksICZfaGRyKTsKLQkgICAgICBCVUdfT04oaHAgPT0gTlVMTCk7Ci0KLSAgICAgICAgICAgICAgLyogQ2FsY3VsYXRlIHRoZSBoZWFkZXIgbGVuZ3RoICovCi0gICAgICAgICAgICAgICAgaWYgKG5leHRoZHIgPT0gTkVYVEhEUl9GUkFHTUVOVCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaGRybGVuID0gODsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5leHRoZHIgPT0gTkVYVEhEUl9BVVRIKQotICAgICAgICAgICAgICAgICAgICAgICAgaGRybGVuID0gKGhwLT5oZHJsZW4rMik8PDI7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgaGRybGVuID0gaXB2Nl9vcHRsZW4oaHApOwotCi0gICAgICAgICAgICAgIC8qIEZSQUcgLT4gZXZhbHVhdGUgKi8KLSAgICAgICAgICAgICAgICBpZiAobmV4dGhkciA9PSBORVhUSERSX0ZSQUdNRU5UKSB7Ci0gICAgICAgICAgICAgICAgICAgICB0ZW1wIHw9IE1BU0tfRlJBR01FTlQ7Ci0gICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotCi0KLSAgICAgICAgICAgICAgLyogc2V0IHRoZSBmbGFnICovCi0gICAgICAgICAgICAgIHN3aXRjaCAobmV4dGhkcil7Ci0gICAgICAgICAgICAgICAgICAgICBjYXNlIE5FWFRIRFJfSE9QOgotICAgICAgICAgICAgICAgICAgICAgY2FzZSBORVhUSERSX1JPVVRJTkc6Ci0gICAgICAgICAgICAgICAgICAgICBjYXNlIE5FWFRIRFJfRlJBR01FTlQ6Ci0gICAgICAgICAgICAgICAgICAgICBjYXNlIE5FWFRIRFJfQVVUSDoKLSAgICAgICAgICAgICAgICAgICAgIGNhc2UgTkVYVEhEUl9ERVNUOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUJVR1AoImlwdjZfZnJhZyBtYXRjaDogdW5rbm93biBuZXh0aGVhZGVyICV1XG4iLG5leHRoZHIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBuZXh0aGRyID0gaHAtPm5leHRoZHI7Ci0gICAgICAgICAgICAgICAgbGVuIC09IGhkcmxlbjsKLSAgICAgICAgICAgICAgICBwdHIgKz0gaGRybGVuOwotCQlpZiAoIHB0ciA+IHNrYi0+bGVuICkgewotCQkJREVCVUdQKCJpcHY2X2ZyYWc6IG5ldyBwb2ludGVyIHRvbyBsYXJnZSEgXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0gICAgICAgIH0KLQotICAgICAgIC8qIEZSQUcgaGVhZGVyIG5vdCBmb3VuZCAqLwotICAgICAgIGlmICggdGVtcCAhPSBNQVNLX0ZSQUdNRU5UICkgcmV0dXJuIDA7Ci0KLSAgICAgICBpZiAobGVuIDwgc2l6ZW9mKHN0cnVjdCBmcmFnX2hkcikpewotCSAgICAgICAqaG90ZHJvcCA9IDE7Ci0gICAgICAgCQlyZXR1cm4gMDsKLSAgICAgICB9Ci0KLSAgICAgICBmaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9mcmFnKSwgJl9mcmFnKTsKLSAgICAgICBCVUdfT04oZmggPT0gTlVMTCk7CisJZmggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIsIHNpemVvZihfZnJhZyksICZfZnJhZyk7CisJaWYgKGZoID09IE5VTEwpeworCQkqaG90ZHJvcCA9IDE7CisJCXJldHVybiAwOworCX0KIAogICAgICAgIERFQlVHUCgiSU5GTyAlMDRYICIsIGZoLT5mcmFnX29mZik7CiAgICAgICAgREVCVUdQKCJPRkZTRVQgJTA0WCAiLCBudG9ocyhmaC0+ZnJhZ19vZmYpICYgfjB4Nyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jCmluZGV4IDI3ZjM2NTAuLjFkMDk0ODUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jCkBAIC02Myw4ICs2Myw2IEBACiAgICAgICAgc3RydWN0IGlwdjZfb3B0X2hkciBfb3B0c2gsICpvaDsKICAgICAgICBjb25zdCBzdHJ1Y3QgaXA2dF9vcHRzICpvcHRpbmZvID0gbWF0Y2hpbmZvOwogICAgICAgIHVuc2lnbmVkIGludCB0ZW1wOwotICAgICAgIHVuc2lnbmVkIGludCBsZW47Ci0gICAgICAgdTggbmV4dGhkcjsKICAgICAgICB1bnNpZ25lZCBpbnQgcHRyOwogICAgICAgIHVuc2lnbmVkIGludCBoZHJsZW4gPSAwOwogICAgICAgIHVuc2lnbmVkIGludCByZXQgPSAwOwpAQCAtNzIsOTcgKzcwLDI1IEBACiAgICAgICAgdTggX29wdGxlbiwgKmxwID0gTlVMTDsKICAgICAgICB1bnNpZ25lZCBpbnQgb3B0bGVuOwogICAgICAgIAotICAgICAgIC8qIHR5cGUgb2YgdGhlIDFzdCBleHRoZHIgKi8KLSAgICAgICBuZXh0aGRyID0gc2tiLT5uaC5pcHY2aC0+bmV4dGhkcjsKLSAgICAgICAvKiBwb2ludGVyIHRvIHRoZSAxc3QgZXh0aGRyICovCi0gICAgICAgcHRyID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKLSAgICAgICAvKiBhdmFpbGFibGUgbGVuZ3RoICovCi0gICAgICAgbGVuID0gc2tiLT5sZW4gLSBwdHI7Ci0gICAgICAgdGVtcCA9IDA7Ci0KLSAgICAgICAgd2hpbGUgKGlwNnRfZXh0X2hkcihuZXh0aGRyKSkgewotICAgICAgICAgICAgICAgc3RydWN0IGlwdjZfb3B0X2hkciBfaGRyLCAqaHA7Ci0KLSAgICAgICAgICAgICAgREVCVUdQKCJpcHY2X29wdHMgaGVhZGVyIGl0ZXJhdGlvbiBcbiIpOwotCi0gICAgICAgICAgICAgIC8qIElzIHRoZXJlIGVub3VnaCBzcGFjZSBmb3IgdGhlIG5leHQgZXh0IGhlYWRlcj8gKi8KLSAgICAgICAgICAgICAgICBpZiAobGVuIDwgKGludClzaXplb2Yoc3RydWN0IGlwdjZfb3B0X2hkcikpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgLyogTm8gbW9yZSBleHRoZHIgLT4gZXZhbHVhdGUgKi8KLSAgICAgICAgICAgICAgICBpZiAobmV4dGhkciA9PSBORVhUSERSX05PTkUpIHsKLSAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIC8qIEVTUCAtPiBldmFsdWF0ZSAqLwotICAgICAgICAgICAgICAgIGlmIChuZXh0aGRyID09IE5FWFRIRFJfRVNQKSB7Ci0gICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotCi0JICAgICAgaHAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIsIHNpemVvZihfaGRyKSwgJl9oZHIpOwotCSAgICAgIEJVR19PTihocCA9PSBOVUxMKTsKLQotICAgICAgICAgICAgICAvKiBDYWxjdWxhdGUgdGhlIGhlYWRlciBsZW5ndGggKi8KLSAgICAgICAgICAgICAgICBpZiAobmV4dGhkciA9PSBORVhUSERSX0ZSQUdNRU5UKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoZHJsZW4gPSA4OwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmV4dGhkciA9PSBORVhUSERSX0FVVEgpCi0gICAgICAgICAgICAgICAgICAgICAgICBoZHJsZW4gPSAoaHAtPmhkcmxlbisyKTw8MjsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBoZHJsZW4gPSBpcHY2X29wdGxlbihocCk7Ci0KLSAgICAgICAgICAgICAgLyogT1BUUyAtPiBldmFsdWF0ZSAqLwogI2lmIEhPUEJZSE9QCi0gICAgICAgICAgICAgICAgaWYgKG5leHRoZHIgPT0gTkVYVEhEUl9IT1ApIHsKLSAgICAgICAgICAgICAgICAgICAgIHRlbXAgfD0gTUFTS19IT1BPUFRTOworCWlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgJnB0ciwgTkVYVEhEUl9IT1ApIDwgMCkKICNlbHNlCi0gICAgICAgICAgICAgICAgaWYgKG5leHRoZHIgPT0gTkVYVEhEUl9ERVNUKSB7Ci0gICAgICAgICAgICAgICAgICAgICB0ZW1wIHw9IE1BU0tfRFNUT1BUUzsKKwlpZiAoaXB2Nl9maW5kX2hkcihza2IsICZwdHIsIE5FWFRIRFJfREVTVCkgPCAwKQogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQorCQlyZXR1cm4gMDsKIAotCi0gICAgICAgICAgICAgIC8qIHNldCB0aGUgZmxhZyAqLwotICAgICAgICAgICAgICBzd2l0Y2ggKG5leHRoZHIpewotICAgICAgICAgICAgICAgICAgICAgY2FzZSBORVhUSERSX0hPUDoKLSAgICAgICAgICAgICAgICAgICAgIGNhc2UgTkVYVEhEUl9ST1VUSU5HOgotICAgICAgICAgICAgICAgICAgICAgY2FzZSBORVhUSERSX0ZSQUdNRU5UOgotICAgICAgICAgICAgICAgICAgICAgY2FzZSBORVhUSERSX0FVVEg6Ci0gICAgICAgICAgICAgICAgICAgICBjYXNlIE5FWFRIRFJfREVTVDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdQKCJpcHY2X29wdHMgbWF0Y2g6IHVua25vd24gbmV4dGhlYWRlciAldVxuIixuZXh0aGRyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbmV4dGhkciA9IGhwLT5uZXh0aGRyOwotICAgICAgICAgICAgICAgIGxlbiAtPSBoZHJsZW47Ci0gICAgICAgICAgICAgICAgcHRyICs9IGhkcmxlbjsKLQkJaWYgKCBwdHIgPiBza2ItPmxlbiApIHsKLQkJCURFQlVHUCgiaXB2Nl9vcHRzOiBuZXcgcG9pbnRlciBpcyB0b28gbGFyZ2UhIFxuIik7Ci0JCQlicmVhazsKLQkJfQotICAgICAgICB9Ci0KLSAgICAgICAvKiBPUFRJT05TIGhlYWRlciBub3QgZm91bmQgKi8KLSNpZiBIT1BCWUhPUAotICAgICAgIGlmICggdGVtcCAhPSBNQVNLX0hPUE9QVFMgKSByZXR1cm4gMDsKLSNlbHNlCi0gICAgICAgaWYgKCB0ZW1wICE9IE1BU0tfRFNUT1BUUyApIHJldHVybiAwOwotI2VuZGlmCi0KLSAgICAgICBpZiAobGVuIDwgKGludClzaXplb2Yoc3RydWN0IGlwdjZfb3B0X2hkcikpeworICAgICAgIG9oID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHRyLCBzaXplb2YoX29wdHNoKSwgJl9vcHRzaCk7CisgICAgICAgaWYgKG9oID09IE5VTEwpewogCSAgICAgICAqaG90ZHJvcCA9IDE7CiAgICAgICAgCQlyZXR1cm4gMDsKICAgICAgICB9CiAKLSAgICAgICBpZiAobGVuIDwgaGRybGVuKXsKKyAgICAgICBoZHJsZW4gPSBpcHY2X29wdGxlbihvaCk7CisgICAgICAgaWYgKHNrYi0+bGVuIC0gcHRyIDwgaGRybGVuKXsKIAkgICAgICAgLyogUGFja2V0IHNtYWxsZXIgdGhhbiBpdCdzIGxlbmd0aCBmaWVsZCAqLwogICAgICAgIAkJcmV0dXJuIDA7CiAgICAgICAgfQogCi0gICAgICAgb2ggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIsIHNpemVvZihfb3B0c2gpLCAmX29wdHNoKTsKLSAgICAgICBCVUdfT04ob2ggPT0gTlVMTCk7Ci0KICAgICAgICBERUJVR1AoIklQdjYgT1BUUyBMRU4gJXUgJXUgIiwgaGRybGVuLCBvaC0+aGRybGVuKTsKIAogICAgICAgIERFQlVHUCgibGVuICUwMlggJTA0WCAlMDJYICIsCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ydC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnQuYwppbmRleCAyYmI2NzAwLi5iZWIyZmQ1IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ydC5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3J0LmMKQEAgLTUwLDk4ICs1MCwyOSBAQAogICAgICAgdW5zaWduZWQgaW50IHByb3RvZmYsCiAgICAgICBpbnQgKmhvdGRyb3ApCiB7Ci0gICAgICAgc3RydWN0IGlwdjZfcnRfaGRyIF9yb3V0ZSwgKnJoID0gTlVMTDsKKyAgICAgICBzdHJ1Y3QgaXB2Nl9ydF9oZHIgX3JvdXRlLCAqcmg7CiAgICAgICAgY29uc3Qgc3RydWN0IGlwNnRfcnQgKnJ0aW5mbyA9IG1hdGNoaW5mbzsKICAgICAgICB1bnNpZ25lZCBpbnQgdGVtcDsKLSAgICAgICB1bnNpZ25lZCBpbnQgbGVuOwotICAgICAgIHU4IG5leHRoZHI7CiAgICAgICAgdW5zaWduZWQgaW50IHB0cjsKICAgICAgICB1bnNpZ25lZCBpbnQgaGRybGVuID0gMDsKICAgICAgICB1bnNpZ25lZCBpbnQgcmV0ID0gMDsKICAgICAgICBzdHJ1Y3QgaW42X2FkZHIgKmFwLCBfYWRkcjsKIAotICAgICAgIC8qIHR5cGUgb2YgdGhlIDFzdCBleHRoZHIgKi8KLSAgICAgICBuZXh0aGRyID0gc2tiLT5uaC5pcHY2aC0+bmV4dGhkcjsKLSAgICAgICAvKiBwb2ludGVyIHRvIHRoZSAxc3QgZXh0aGRyICovCi0gICAgICAgcHRyID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKLSAgICAgICAvKiBhdmFpbGFibGUgbGVuZ3RoICovCi0gICAgICAgbGVuID0gc2tiLT5sZW4gLSBwdHI7Ci0gICAgICAgdGVtcCA9IDA7CisJaWYgKGlwdjZfZmluZF9oZHIoc2tiLCAmcHRyLCBORVhUSERSX1JPVVRJTkcpIDwgMCkKKwkJcmV0dXJuIDA7CiAKLSAgICAgICAgd2hpbGUgKGlwNnRfZXh0X2hkcihuZXh0aGRyKSkgewotICAgICAgICAgICAgICAgc3RydWN0IGlwdjZfb3B0X2hkciBfaGRyLCAqaHA7Ci0KLSAgICAgICAgICAgICAgREVCVUdQKCJpcHY2X3J0IGhlYWRlciBpdGVyYXRpb24gXG4iKTsKLQotICAgICAgICAgICAgICAvKiBJcyB0aGVyZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSBuZXh0IGV4dCBoZWFkZXI/ICovCi0gICAgICAgICAgICAgICAgaWYgKGxlbiA8IChpbnQpc2l6ZW9mKHN0cnVjdCBpcHY2X29wdF9oZHIpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgIC8qIE5vIG1vcmUgZXh0aGRyIC0+IGV2YWx1YXRlICovCi0gICAgICAgICAgICAgICAgaWYgKG5leHRoZHIgPT0gTkVYVEhEUl9OT05FKSB7Ci0gICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAvKiBFU1AgLT4gZXZhbHVhdGUgKi8KLSAgICAgICAgICAgICAgICBpZiAobmV4dGhkciA9PSBORVhUSERSX0VTUCkgewotICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLQotCSAgICAgIGhwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHRyLCBzaXplb2YoX2hkciksICZfaGRyKTsKLQkgICAgICBCVUdfT04oaHAgPT0gTlVMTCk7Ci0KLSAgICAgICAgICAgICAgLyogQ2FsY3VsYXRlIHRoZSBoZWFkZXIgbGVuZ3RoICovCi0gICAgICAgICAgICAgICAgaWYgKG5leHRoZHIgPT0gTkVYVEhEUl9GUkFHTUVOVCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaGRybGVuID0gODsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5leHRoZHIgPT0gTkVYVEhEUl9BVVRIKQotICAgICAgICAgICAgICAgICAgICAgICAgaGRybGVuID0gKGhwLT5oZHJsZW4rMik8PDI7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgaGRybGVuID0gaXB2Nl9vcHRsZW4oaHApOwotCi0gICAgICAgICAgICAgIC8qIFJPVVRJTkcgLT4gZXZhbHVhdGUgKi8KLSAgICAgICAgICAgICAgICBpZiAobmV4dGhkciA9PSBORVhUSERSX1JPVVRJTkcpIHsKLSAgICAgICAgICAgICAgICAgICAgIHRlbXAgfD0gTUFTS19ST1VUSU5HOwotICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLQotCi0gICAgICAgICAgICAgIC8qIHNldCB0aGUgZmxhZyAqLwotICAgICAgICAgICAgICBzd2l0Y2ggKG5leHRoZHIpewotICAgICAgICAgICAgICAgICAgICAgY2FzZSBORVhUSERSX0hPUDoKLSAgICAgICAgICAgICAgICAgICAgIGNhc2UgTkVYVEhEUl9ST1VUSU5HOgotICAgICAgICAgICAgICAgICAgICAgY2FzZSBORVhUSERSX0ZSQUdNRU5UOgotICAgICAgICAgICAgICAgICAgICAgY2FzZSBORVhUSERSX0FVVEg6Ci0gICAgICAgICAgICAgICAgICAgICBjYXNlIE5FWFRIRFJfREVTVDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdQKCJpcHY2X3J0IG1hdGNoOiB1bmtub3duIG5leHRoZWFkZXIgJXVcbiIsbmV4dGhkcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG5leHRoZHIgPSBocC0+bmV4dGhkcjsKLSAgICAgICAgICAgICAgICBsZW4gLT0gaGRybGVuOwotICAgICAgICAgICAgICAgIHB0ciArPSBoZHJsZW47Ci0JCWlmICggcHRyID4gc2tiLT5sZW4gKSB7Ci0JCQlERUJVR1AoImlwdjZfcnQ6IG5ldyBwb2ludGVyIGlzIHRvbyBsYXJnZSEgXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0gICAgICAgIH0KLQotICAgICAgIC8qIFJPVVRJTkcgaGVhZGVyIG5vdCBmb3VuZCAqLwotICAgICAgIGlmICggdGVtcCAhPSBNQVNLX1JPVVRJTkcgKSByZXR1cm4gMDsKLQotICAgICAgIGlmIChsZW4gPCAoaW50KXNpemVvZihzdHJ1Y3QgaXB2Nl9ydF9oZHIpKXsKKyAgICAgICByaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9yb3V0ZSksICZfcm91dGUpOworICAgICAgIGlmIChyaCA9PSBOVUxMKXsKIAkgICAgICAgKmhvdGRyb3AgPSAxOwogICAgICAgIAkJcmV0dXJuIDA7CiAgICAgICAgfQogCi0gICAgICAgaWYgKGxlbiA8IGhkcmxlbil7CisgICAgICAgaGRybGVuID0gaXB2Nl9vcHRsZW4ocmgpOworICAgICAgIGlmIChza2ItPmxlbiAtIHB0ciA8IGhkcmxlbil7CiAJICAgICAgIC8qIFBja2V0IHNtYWxsZXIgdGhhbiBpdHMgbGVuZ3RoIGZpZWxkICovCiAgICAgICAgCQlyZXR1cm4gMDsKICAgICAgICB9CiAKLSAgICAgICByaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9yb3V0ZSksICZfcm91dGUpOwotICAgICAgIEJVR19PTihyaCA9PSBOVUxMKTsKLQogICAgICAgIERFQlVHUCgiSVB2NiBSVCBMRU4gJXUgJXUgIiwgaGRybGVuLCByaC0+aGRybGVuKTsKICAgICAgICBERUJVR1AoIlRZUEUgJTA0WCAiLCByaC0+dHlwZSk7CiAgICAgICAgREVCVUdQKCJTR1NfTEVGVCAldSAlMDJYXG4iLCByaC0+c2VnbWVudHNfbGVmdCwgcmgtPnNlZ21lbnRzX2xlZnQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmF3LmMgYi9uZXQvaXB2Ni9yYXcuYwppbmRleCA1YWEzNjkxLi5hMTI2NWEzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yYXcuYworKysgYi9uZXQvaXB2Ni9yYXcuYwpAQCAtNjI3LDcgKzYyNyw3IEBACiAKIAkJCWlmICh0eXBlICYmIGNvZGUpIHsKIAkJCQlnZXRfdXNlcihmbC0+ZmxfaWNtcF90eXBlLCB0eXBlKTsKLQkJCQlfX2dldF91c2VyKGZsLT5mbF9pY21wX2NvZGUsIGNvZGUpOworCQkJCWdldF91c2VyKGZsLT5mbF9pY21wX2NvZGUsIGNvZGUpOwogCQkJCXByb2JlZCA9IDE7CiAJCQl9CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3RjcF9pcHY2LmMgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCmluZGV4IDgwNjQzZTYuLmQ2OTNjYjkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3RjcF9pcHY2LmMKKysrIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwpAQCAtMjA5LDkgKzIwOSwxMSBAQAogCQlsb2NrID0gJnRjcF9oYXNoaW5mby5saGFzaF9sb2NrOwogCQlpbmV0X2xpc3Rlbl93bG9jaygmdGNwX2hhc2hpbmZvKTsKIAl9IGVsc2UgewotCQlzay0+c2tfaGFzaGVudCA9IGluZXQ2X3NrX2VoYXNoZm4oc2ssIHRjcF9oYXNoaW5mby5laGFzaF9zaXplKTsKLQkJbGlzdCA9ICZ0Y3BfaGFzaGluZm8uZWhhc2hbc2stPnNrX2hhc2hlbnRdLmNoYWluOwotCQlsb2NrID0gJnRjcF9oYXNoaW5mby5laGFzaFtzay0+c2tfaGFzaGVudF0ubG9jazsKKwkJdW5zaWduZWQgaW50IGhhc2g7CisJCXNrLT5za19oYXNoID0gaGFzaCA9IGluZXQ2X3NrX2VoYXNoZm4oc2spOworCQloYXNoICY9ICh0Y3BfaGFzaGluZm8uZWhhc2hfc2l6ZSAtIDEpOworCQlsaXN0ID0gJnRjcF9oYXNoaW5mby5laGFzaFtoYXNoXS5jaGFpbjsKKwkJbG9jayA9ICZ0Y3BfaGFzaGluZm8uZWhhc2hbaGFzaF0ubG9jazsKIAkJd3JpdGVfbG9jayhsb2NrKTsKIAl9CiAKQEAgLTMyMiwxMyArMzI0LDEzIEBACiAJY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciA9ICZucC0+ZGFkZHI7CiAJY29uc3QgaW50IGRpZiA9IHNrLT5za19ib3VuZF9kZXZfaWY7CiAJY29uc3QgdTMyIHBvcnRzID0gSU5FVF9DT01CSU5FRF9QT1JUUyhpbmV0LT5kcG9ydCwgbHBvcnQpOwotCWNvbnN0IGludCBoYXNoID0gaW5ldDZfZWhhc2hmbihkYWRkciwgaW5ldC0+bnVtLCBzYWRkciwgaW5ldC0+ZHBvcnQsCi0JCQkJICAgICAgIHRjcF9oYXNoaW5mby5laGFzaF9zaXplKTsKLQlzdHJ1Y3QgaW5ldF9laGFzaF9idWNrZXQgKmhlYWQgPSAmdGNwX2hhc2hpbmZvLmVoYXNoW2hhc2hdOworCXVuc2lnbmVkIGludCBoYXNoID0gaW5ldDZfZWhhc2hmbihkYWRkciwgaW5ldC0+bnVtLCBzYWRkciwgaW5ldC0+ZHBvcnQpOworCXN0cnVjdCBpbmV0X2VoYXNoX2J1Y2tldCAqaGVhZCA9IGluZXRfZWhhc2hfYnVja2V0KCZ0Y3BfaGFzaGluZm8sIGhhc2gpOwogCXN0cnVjdCBzb2NrICpzazI7CiAJY29uc3Qgc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAJc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHc7CiAKKwlwcmVmZXRjaChoZWFkLT5jaGFpbi5maXJzdCk7CiAJd3JpdGVfbG9jaygmaGVhZC0+bG9jayk7CiAKIAkvKiBDaGVjayBUSU1FLVdBSVQgc29ja2V0cyBmaXJzdC4gKi8KQEAgLTM2NSwxNCArMzY3LDE0IEBACiAKIAkvKiBBbmQgZXN0YWJsaXNoZWQgcGFydC4uLiAqLwogCXNrX2Zvcl9lYWNoKHNrMiwgbm9kZSwgJmhlYWQtPmNoYWluKSB7Ci0JCWlmIChJTkVUNl9NQVRDSChzazIsIHNhZGRyLCBkYWRkciwgcG9ydHMsIGRpZikpCisJCWlmIChJTkVUNl9NQVRDSChzazIsIGhhc2gsIHNhZGRyLCBkYWRkciwgcG9ydHMsIGRpZikpCiAJCQlnb3RvIG5vdF91bmlxdWU7CiAJfQogCiB1bmlxdWU6CiAJQlVHX1RSQVAoc2tfdW5oYXNoZWQoc2spKTsKIAlfX3NrX2FkZF9ub2RlKHNrLCAmaGVhZC0+Y2hhaW4pOwotCXNrLT5za19oYXNoZW50ID0gaGFzaDsKKwlzay0+c2tfaGFzaCA9IGhhc2g7CiAJc29ja19wcm90X2luY191c2Uoc2stPnNrX3Byb3QpOwogCXdyaXRlX3VubG9jaygmaGVhZC0+bG9jayk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmMKaW5kZXggNjliMTQ2OC4uYmY5NTE5MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwLmMKKysrIGIvbmV0L2lwdjYvdWRwLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAkJbmV4dDo7CiAJCX0KIAkJcmVzdWx0ID0gYmVzdDsKLQkJZm9yKDs7IHJlc3VsdCArPSBVRFBfSFRBQkxFX1NJWkUpIHsKKwkJZm9yKGkgPSAwOyBpIDwgKDEgPDwgMTYpIC8gVURQX0hUQUJMRV9TSVpFOyBpKyssIHJlc3VsdCArPSBVRFBfSFRBQkxFX1NJWkUpIHsKIAkJCWlmIChyZXN1bHQgPiBzeXNjdGxfbG9jYWxfcG9ydF9yYW5nZVsxXSkKIAkJCQlyZXN1bHQgPSBzeXNjdGxfbG9jYWxfcG9ydF9yYW5nZVswXQogCQkJCQkrICgocmVzdWx0IC0gc3lzY3RsX2xvY2FsX3BvcnRfcmFuZ2VbMF0pICYKQEAgLTEwNyw2ICsxMDcsOCBAQAogCQkJaWYgKCF1ZHBfbHBvcnRfaW51c2UocmVzdWx0KSkKIAkJCQlicmVhazsKIAkJfQorCQlpZiAoaSA+PSAoMSA8PCAxNikgLyBVRFBfSFRBQkxFX1NJWkUpCisJCQlnb3RvIGZhaWw7CiBnb3RpdDoKIAkJdWRwX3BvcnRfcm92ZXIgPSBzbnVtID0gcmVzdWx0OwogCX0gZWxzZSB7CkBAIC00MDUsOSArNDA3LDggQEAKIAkJCQljb250aW51ZTsKIAogCQkJaWYgKCFpcHY2X2FkZHJfYW55KCZucC0+cmN2X3NhZGRyKSkgewotCQkJCWlmIChpcHY2X2FkZHJfZXF1YWwoJm5wLT5yY3Zfc2FkZHIsIGxvY19hZGRyKSkKLQkJCQkJcmV0dXJuIHM7Ci0JCQkJY29udGludWU7CisJCQkJaWYgKCFpcHY2X2FkZHJfZXF1YWwoJm5wLT5yY3Zfc2FkZHIsIGxvY19hZGRyKSkKKwkJCQkJY29udGludWU7CiAJCQl9CiAJCQlpZighaW5ldDZfbWNfY2hlY2socywgbG9jX2FkZHIsIHJtdF9hZGRyKSkKIAkJCQljb250aW51ZTsKQEAgLTY0MCw2ICs2NDEsNyBAQAogCWludCB0Y2xhc3MgPSAtMTsKIAlpbnQgY29ya3JlcSA9IHVwLT5jb3JrZmxhZyB8fCBtc2ctPm1zZ19mbGFncyZNU0dfTU9SRTsKIAlpbnQgZXJyOworCWludCBjb25uZWN0ZWQgPSAwOwogCiAJLyogZGVzdGluYXRpb24gYWRkcmVzcyBjaGVjayAqLwogCWlmIChzaW42KSB7CkBAIC03NDksNiArNzUxLDcgQEAKIAkJZmwtPmZsX2lwX2Rwb3J0ID0gaW5ldC0+ZHBvcnQ7CiAJCWRhZGRyID0gJm5wLT5kYWRkcjsKIAkJZmwtPmZsNl9mbG93bGFiZWwgPSBucC0+Zmxvd19sYWJlbDsKKwkJY29ubmVjdGVkID0gMTsKIAl9CiAKIAlpZiAoIWZsLT5vaWYpCkBAIC03NzEsNiArNzc0LDcgQEAKIAkJfQogCQlpZiAoIShvcHQtPm9wdF9uZmxlbnxvcHQtPm9wdF9mbGVuKSkKIAkJCW9wdCA9IE5VTEw7CisJCWNvbm5lY3RlZCA9IDA7CiAJfQogCWlmIChvcHQgPT0gTlVMTCkKIAkJb3B0ID0gbnAtPm9wdDsKQEAgLTc4OCwxMCArNzkyLDEzIEBACiAJCWlwdjZfYWRkcl9jb3B5KCZmaW5hbCwgJmZsLT5mbDZfZHN0KTsKIAkJaXB2Nl9hZGRyX2NvcHkoJmZsLT5mbDZfZHN0LCBydDAtPmFkZHIpOwogCQlmaW5hbF9wID0gJmZpbmFsOworCQljb25uZWN0ZWQgPSAwOwogCX0KIAotCWlmICghZmwtPm9pZiAmJiBpcHY2X2FkZHJfaXNfbXVsdGljYXN0KCZmbC0+Zmw2X2RzdCkpCisJaWYgKCFmbC0+b2lmICYmIGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoJmZsLT5mbDZfZHN0KSkgewogCQlmbC0+b2lmID0gbnAtPm1jYXN0X29pZjsKKwkJY29ubmVjdGVkID0gMDsKKwl9CiAKIAllcnIgPSBpcDZfZHN0X2xvb2t1cChzaywgJmRzdCwgZmwpOwogCWlmIChlcnIpCkBAIC04NDcsMTAgKzg1NCwxNiBAQAogCWVsc2UgaWYgKCFjb3JrcmVxKQogCQllcnIgPSB1ZHBfdjZfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzaywgdXApOwogCi0JaWYgKGRzdCkKLQkJaXA2X2RzdF9zdG9yZShzaywgZHN0LAotCQkJICAgICAgaXB2Nl9hZGRyX2VxdWFsKCZmbC0+Zmw2X2RzdCwgJm5wLT5kYWRkcikgPwotCQkJICAgICAgJm5wLT5kYWRkciA6IE5VTEwpOworCWlmIChkc3QpIHsKKwkJaWYgKGNvbm5lY3RlZCkgeworCQkJaXA2X2RzdF9zdG9yZShzaywgZHN0LAorCQkJCSAgICAgIGlwdjZfYWRkcl9lcXVhbCgmZmwtPmZsNl9kc3QsICZucC0+ZGFkZHIpID8KKwkJCQkgICAgICAmbnAtPmRhZGRyIDogTlVMTCk7CisJCX0gZWxzZSB7CisJCQlkc3RfcmVsZWFzZShkc3QpOworCQl9CisJfQorCiAJaWYgKGVyciA+IDApCiAJCWVyciA9IG5wLT5yZWN2ZXJyID8gbmV0X3htaXRfZXJybm8oZXJyKSA6IDA7CiAJcmVsZWFzZV9zb2NrKHNrKTsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKaW5kZXggMDcxY2QyYy4uOTUzZTI1NSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKKysrIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKQEAgLTMxMCw3ICszMTAsNyBAQAogI2lmZGVmIENPTkZJR19JTkVUCiAJSVJEQV9ERUJVRyg0LCAiSXJMQU46IFNlbmRpbmcgZ3JhdHVpdG91cyBBUlBcbiIpOwogCXJjdV9yZWFkX2xvY2soKTsKLQlpbl9kZXYgPSBfX2luX2Rldl9nZXQoZGV2KTsKKwlpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7CiAJaWYgKGluX2RldiA9PSBOVUxMKQogCQlnb3RvIG91dDsKIAlpZiAoaW5fZGV2LT5pZmFfbGlzdCkKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lydHRwLmMgYi9uZXQvaXJkYS9pcnR0cC5jCmluZGV4IDY2MDJkOTAuLjhhZmYyNTQgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lydHRwLmMKKysrIGIvbmV0L2lyZGEvaXJ0dHAuYwpAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgPG5ldC9pcmRhL3BhcmFtZXRlcnMuaD4KICNpbmNsdWRlIDxuZXQvaXJkYS9pcnR0cC5oPgogCi1zdGF0aWMgc3RydWN0IGlydHRwX2NiICppcnR0cCA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGlydHRwX2NiICppcnR0cDsKIAogc3RhdGljIHZvaWQgX19pcnR0cF9jbG9zZV90c2FwKHN0cnVjdCB0c2FwX2NiICpzZWxmKTsKIApAQCAtODYsMTIgKzg2LDkgQEAKICAqLwogaW50IF9faW5pdCBpcnR0cF9pbml0KHZvaWQpCiB7Ci0JLyogSW5pdGlhbGl6ZSB0aGUgaXJ0dHAgc3RydWN0dXJlLiAqLwotCWlmIChpcnR0cCA9PSBOVUxMKSB7Ci0JCWlydHRwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlydHRwX2NiKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChpcnR0cCA9PSBOVUxMKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCWlydHRwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlydHRwX2NiKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGlydHRwID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOwogCW1lbXNldChpcnR0cCwgMCwgc2l6ZW9mKHN0cnVjdCBpcnR0cF9jYikpOwogCiAJaXJ0dHAtPm1hZ2ljID0gVFRQX01BR0lDOwpAQCAtMTAwLDYgKzk3LDcgQEAKIAlpZiAoIWlydHRwLT50c2FwcykgewogCQlJUkRBX0VSUk9SKCIlczogY2FuJ3QgYWxsb2NhdGUgSXJUVFAgaGFzaGJpbiFcbiIsCiAJCQkgICBfX0ZVTkNUSU9OX18pOworCQlrZnJlZShpcnR0cCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTE1LDcgKzExMyw2IEBACiB2b2lkIF9fZXhpdCBpcnR0cF9jbGVhbnVwKHZvaWQpIAogewogCS8qIENoZWNrIGZvciBtYWluIHN0cnVjdHVyZSAqLwotCUlSREFfQVNTRVJUKGlydHRwICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKGlydHRwLT5tYWdpYyA9PSBUVFBfTUFHSUMsIHJldHVybjspOwogCiAJLyoKQEAgLTM4Miw3ICszNzksNiBAQAogCXN0cnVjdCBsc2FwX2NiICpsc2FwOwogCW5vdGlmeV90IHR0cF9ub3RpZnk7CiAKLQlJUkRBX0FTU0VSVChpcnR0cCAhPSBOVUxMLCByZXR1cm4gTlVMTDspOwogCUlSREFfQVNTRVJUKGlydHRwLT5tYWdpYyA9PSBUVFBfTUFHSUMsIHJldHVybiBOVUxMOyk7CiAKIAkvKiBUaGUgSXJMTVAgc3BlYyAoSXJMTVAgMS4xIHAxMCkgc2F5cyB0aGF0IHdlIGhhdmUgdGhlIHJpZ2h0IHRvCkBAIC0xODgwLDggKzE4NzYsNiBAQAogCXN0cnVjdCBzZXFfZmlsZSAqc2VxOwogCWludCByYyA9IC1FTk9NRU07CiAJc3RydWN0IGlydHRwX2l0ZXJfc3RhdGUgKnM7Ci0gICAgICAgCi0JSVJEQV9BU1NFUlQoaXJ0dHAgIT0gTlVMTCwgcmV0dXJuIC1FSU5WQUw7KTsKIAogCXMgPSBrbWFsbG9jKHNpemVvZigqcyksIEdGUF9LRVJORUwpOwogCWlmICghcykKZGlmZiAtLWdpdCBhL25ldC9rZXkvYWZfa2V5LmMgYi9uZXQva2V5L2FmX2tleS5jCmluZGV4IDQ4Nzk3NDMuLjM5MDMxNjggMTAwNjQ0Ci0tLSBhL25ldC9rZXkvYWZfa2V5LmMKKysrIGIvbmV0L2tleS9hZl9rZXkuYwpAQCAtMTg1LDcgKzE4NSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgcGZrZXlfYnJvYWRjYXN0X29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYjIsCi0JCQkgICAgICAgaW50IGFsbG9jYXRpb24sIHN0cnVjdCBzb2NrICpzaykKKwkJCSAgICAgICBnZnBfdCBhbGxvY2F0aW9uLCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJaW50IGVyciA9IC1FTk9CVUZTOwogCkBAIC0yMTcsNyArMjE3LDcgQEAKICNkZWZpbmUgQlJPQURDQVNUX09ORQkJMQogI2RlZmluZSBCUk9BRENBU1RfUkVHSVNURVJFRAkyCiAjZGVmaW5lIEJST0FEQ0FTVF9QUk9NSVNDX09OTFkJNAotc3RhdGljIGludCBwZmtleV9icm9hZGNhc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGFsbG9jYXRpb24sCitzdGF0aWMgaW50IHBma2V5X2Jyb2FkY2FzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBhbGxvY2F0aW9uLAogCQkJICAgaW50IGJyb2FkY2FzdF9mbGFncywgc3RydWN0IHNvY2sgKm9uZV9zaykKIHsKIAlzdHJ1Y3Qgc29jayAqc2s7CkBAIC0xNDE2LDcgKzE0MTYsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvbXBvc2Vfc2FkYl9zdXBwb3J0ZWQoc3RydWN0IHNhZGJfbXNnICpvcmlnLCBpbnQgYWxsb2NhdGlvbikKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29tcG9zZV9zYWRiX3N1cHBvcnRlZChzdHJ1Y3Qgc2FkYl9tc2cgKm9yaWcsCisJCQkJCSAgICAgIGdmcF90IGFsbG9jYXRpb24pCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3Qgc2FkYl9tc2cgKmhkcjsKQEAgLTIxNTMsNiArMjE1NCw3IEBACiAKIHN0YXRpYyBpbnQgcGZrZXlfc3BkZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNhZGJfbXNnICpoZHIsIHZvaWQgKipleHRfaGRycykKIHsKKwl1bnNpZ25lZCBpbnQgZGlyOwogCWludCBlcnI7CiAJc3RydWN0IHNhZGJfeF9wb2xpY3kgKnBvbDsKIAlzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwOwpAQCAtMjE2MSw3ICsyMTYzLDExIEBACiAJaWYgKChwb2wgPSBleHRfaGRyc1tTQURCX1hfRVhUX1BPTElDWS0xXSkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl4cCA9IHhmcm1fcG9saWN5X2J5aWQoMCwgcG9sLT5zYWRiX3hfcG9saWN5X2lkLAorCWRpciA9IHhmcm1fcG9saWN5X2lkMmRpcihwb2wtPnNhZGJfeF9wb2xpY3lfaWQpOworCWlmIChkaXIgPj0gWEZSTV9QT0xJQ1lfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXhwID0geGZybV9wb2xpY3lfYnlpZChkaXIsIHBvbC0+c2FkYl94X3BvbGljeV9pZCwKIAkJCSAgICAgIGhkci0+c2FkYl9tc2dfdHlwZSA9PSBTQURCX1hfU1BEREVMRVRFMik7CiAJaWYgKHhwID09IE5VTEwpCiAJCXJldHVybiAtRU5PRU5UOwpAQCAtMjE3Myw5ICsyMTc5LDkgQEAKIAlpZiAoaGRyLT5zYWRiX21zZ190eXBlID09IFNBREJfWF9TUERERUxFVEUyKSB7CiAJCWMuZGF0YS5ieWlkID0gMTsKIAkJYy5ldmVudCA9IFhGUk1fTVNHX0RFTFBPTElDWTsKLQkJa21fcG9saWN5X25vdGlmeSh4cCwgcG9sLT5zYWRiX3hfcG9saWN5X2Rpci0xLCAmYyk7CisJCWttX3BvbGljeV9ub3RpZnkoeHAsIGRpciwgJmMpOwogCX0gZWxzZSB7Ci0JCWVyciA9IGtleV9wb2xfZ2V0X3Jlc3Aoc2ssIHhwLCBoZHIsIHBvbC0+c2FkYl94X3BvbGljeV9kaXItMSk7CisJCWVyciA9IGtleV9wb2xfZ2V0X3Jlc3Aoc2ssIHhwLCBoZHIsIGRpcik7CiAJfQogCiAJeGZybV9wb2xfcHV0KHhwKTsKZGlmZiAtLWdpdCBhL25ldC9sbGMvTWFrZWZpbGUgYi9uZXQvbGxjL01ha2VmaWxlCmluZGV4IDVlYmQ0ZWQuLjRlMjYwY2YgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvTWFrZWZpbGUKKysrIGIvbmV0L2xsYy9NYWtlZmlsZQpAQCAtMjIsMyArMjIsNCBAQAogCSAgbGxjX3NhcC5vIGxsY19zX2FjLm8gbGxjX3NfZXYubyBsbGNfc19zdC5vIGFmX2xsYy5vIGxsY19zdGF0aW9uLm8KIAogbGxjMi0kKENPTkZJR19QUk9DX0ZTKSArPSBsbGNfcHJvYy5vCitsbGMyLSQoQ09ORklHX1NZU0NUTCkgICs9IHN5c2N0bF9uZXRfbGxjLm8KZGlmZiAtLWdpdCBhL25ldC9sbGMvYWZfbGxjLmMgYi9uZXQvbGxjL2FmX2xsYy5jCmluZGV4IDY2ZjU1ZTUuLjU5ZDAyY2IgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvYWZfbGxjLmMKKysrIGIvbmV0L2xsYy9hZl9sbGMuYwpAQCAtMjEsNiArMjEsNyBAQAogICogU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KQEAgLTM3LDEwICszOCw5IEBACiBzdGF0aWMgc3RydWN0IHNvY2thZGRyX2xsYyBsbGNfdWlfYWRkcm51bGw7CiBzdGF0aWMgc3RydWN0IHByb3RvX29wcyBsbGNfdWlfb3BzOwogCi1zdGF0aWMgaW50IGxsY191aV93YWl0X2Zvcl9jb25uKHN0cnVjdCBzb2NrICpzaywgaW50IHRpbWVvdXQpOwotc3RhdGljIGludCBsbGNfdWlfd2FpdF9mb3JfZGlzYyhzdHJ1Y3Qgc29jayAqc2ssIGludCB0aW1lb3V0KTsKLXN0YXRpYyBpbnQgbGxjX3VpX3dhaXRfZm9yX2RhdGEoc3RydWN0IHNvY2sgKnNrLCBpbnQgdGltZW91dCk7Ci1zdGF0aWMgaW50IGxsY191aV93YWl0X2Zvcl9idXN5X2NvcmUoc3RydWN0IHNvY2sgKnNrLCBpbnQgdGltZW91dCk7CitzdGF0aWMgaW50IGxsY191aV93YWl0X2Zvcl9jb25uKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KTsKK3N0YXRpYyBpbnQgbGxjX3VpX3dhaXRfZm9yX2Rpc2Moc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpOworc3RhdGljIGludCBsbGNfdWlfd2FpdF9mb3JfYnVzeV9jb3JlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KTsKIAogI2lmIDAKICNkZWZpbmUgZHByaW50ayhhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyBhcmdzKQpAQCAtMTE2LDEyICsxMTYsMTIgQEAKIAlzdHJ1Y3QgbGxjX3NvY2sqIGxsYyA9IGxsY19zayhzayk7CiAJaW50IHJjID0gMDsKIAotCWlmIChsbGNfZGF0YV9hY2NlcHRfc3RhdGUobGxjLT5zdGF0ZSkgfHwgbGxjLT5wX2ZsYWcpIHsKLQkJaW50IHRpbWVvdXQgPSBzb2NrX3NuZHRpbWVvKHNrLCBub2Jsb2NrKTsKKwlpZiAodW5saWtlbHkobGxjX2RhdGFfYWNjZXB0X3N0YXRlKGxsYy0+c3RhdGUpIHx8IGxsYy0+cF9mbGFnKSkgeworCQlsb25nIHRpbWVvdXQgPSBzb2NrX3NuZHRpbWVvKHNrLCBub2Jsb2NrKTsKIAogCQlyYyA9IGxsY191aV93YWl0X2Zvcl9idXN5X2NvcmUoc2ssIHRpbWVvdXQpOwogCX0KLQlpZiAoIXJjKQorCWlmICh1bmxpa2VseSghcmMpKQogCQlyYyA9IGxsY19idWlsZF9hbmRfc2VuZF9wa3Qoc2ssIHNrYik7CiAJcmV0dXJuIHJjOwogfQpAQCAtMTU1LDcgKzE1NSw3IEBACiAJc3RydWN0IHNvY2sgKnNrOwogCWludCByYyA9IC1FU09DS1ROT1NVUFBPUlQ7CiAKLQlpZiAoc29jay0+dHlwZSA9PSBTT0NLX0RHUkFNIHx8IHNvY2stPnR5cGUgPT0gU09DS19TVFJFQU0pIHsKKwlpZiAobGlrZWx5KHNvY2stPnR5cGUgPT0gU09DS19ER1JBTSB8fCBzb2NrLT50eXBlID09IFNPQ0tfU1RSRUFNKSkgewogCQlyYyA9IC1FTk9NRU07CiAJCXNrID0gbGxjX3NrX2FsbG9jKFBGX0xMQywgR0ZQX0tFUk5FTCwgJmxsY19wcm90byk7CiAJCWlmIChzaykgewpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IGxsY19zb2NrICpsbGM7CiAKLQlpZiAoIXNrKQorCWlmICh1bmxpa2VseShzayA9PSBOVUxMKSkKIAkJZ290byBvdXQ7CiAJc29ja19ob2xkKHNrKTsKIAlsb2NrX3NvY2soc2spOwpAQCAtMTg5LDEwICsxODksNiBAQAogCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1pBUFBFRCkpCiAJCWxsY19zYXBfcmVtb3ZlX3NvY2tldChsbGMtPnNhcCwgc2spOwogCXJlbGVhc2Vfc29jayhzayk7Ci0JaWYgKGxsYy0+c2FwICYmIGhsaXN0X2VtcHR5KCZsbGMtPnNhcC0+c2tfbGlzdC5saXN0KSkgewotCQlsbGNfcmVsZWFzZV9zb2NrZXRzKGxsYy0+c2FwKTsKLQkJbGxjX3NhcF9jbG9zZShsbGMtPnNhcCk7Ci0JfQogCWlmIChsbGMtPmRldikKIAkJZGV2X3B1dChsbGMtPmRldik7CiAJc29ja19wdXQoc2spOwpAQCAtMjIxLDYgKzIxNyw3IEBACiAJCQkJbGxjX3VpX3NhcF9sYXN0X2F1dG9wb3J0ID0gaSArIDI7CiAJCQkJZ290byBvdXQ7CiAJCQl9CisJCQlsbGNfc2FwX3B1dChzYXApOwogCQl9CiAJCWxsY191aV9zYXBfbGFzdF9hdXRvcG9ydCA9IExMQ19TQVBfRFlOX1NUQVJUOwogCQl0cmllcysrOwpAQCAtMjMxLDIwICsyMjgsMTMgQEAKIH0KIAogLyoqCi0gKglsbGNfdWlfYXV0b2JpbmQgLSBCaW5kIGEgc29ja2V0IHRvIGEgc3BlY2lmaWMgYWRkcmVzcy4KLSAqCUBzazogU29ja2V0IHRvIGJpbmQgYW4gYWRkcmVzcyB0by4KLSAqCUBhZGRyOiBBZGRyZXNzIHRoZSB1c2VyIHdhbnRzIHRoZSBzb2NrZXQgYm91bmQgdG8uCisgKglsbGNfdWlfYXV0b2JpbmQgLSBhdXRvbWF0aWNhbGx5IGJpbmQgYSBzb2NrZXQgdG8gYSBzYXAKKyAqCUBzb2NrOiBzb2NrZXQgdG8gYmluZAorICoJQGFkZHI6IGFkZHJlc3MgdG8gY29ubmVjdCB0bwogICoKLSAqCUJpbmQgYSBzb2NrZXQgdG8gYSBzcGVjaWZpYyBhZGRyZXNzLiBGb3IgbGxjIGEgdXNlciBpcyBhYmxlIHRvIGJpbmQgdG8KLSAqCWEgc3BlY2lmaWMgc2FwIG9ubHkgb3IgbWFjICsgc2FwLiBJZiB0aGUgdXNlciBvbmx5IHNwZWNpZmllcyBhIHNhcCBhbmQKLSAqCWEgbnVsbCBkbWFjIChhbGwgemVyb3MpIHRoZSB1c2VyIGlzIGF0dGVtcHRpbmcgdG8gYmluZCB0byBhbiBlbnRpcmUKLSAqCXNhcC4gVGhpcyB3aWxsIHN0b3AgYW55b25lIGVsc2Ugb24gdGhlIGxvY2FsIHN5c3RlbSBmcm9tIHVzaW5nIHRoYXQKLSAqCXNhcC4gIElmIHNvbWVvbmUgZWxzZSBoYXMgYSBtYWMgKyBzYXAgb3BlbiB0aGUgYmluZCB0byBudWxsICsgc2FwIHdpbGwKLSAqCWZhaWwuCi0gKglJZiB0aGUgdXNlciBkZXNpcmVzIHRvIGJpbmQgdG8gYSBzcGVjaWZpYyBtYWMgKyBzYXAsIGl0IGlzIHBvc3NpYmxlIHRvCi0gKgloYXZlIG11bHRpcGxlIHNhcCBjb25uZWN0aW9ucyB2aWEgbXVsdGlwbGUgbWFjcy4KLSAqCUJpbmQgYW5kIGF1dG9iaW5kIGZvciB0aGF0IG1hdHRlciBtdXN0IGVuZm9yY2UgdGhlIGNvcnJlY3Qgc2FwIHVzYWdlCi0gKglvdGhlcndpc2UgYWxsIGhlbGwgd2lsbCBicmVhayBsb29zZS4KKyAqIAlVc2VkIGJ5IGxsY191aV9jb25uZWN0IGFuZCBsbGNfdWlfc2VuZG1zZyB3aGVuIHRoZSB1c2VyIGhhc24ndAorICogCXNwZWNpZmljYWxseSB1c2VkIGxsY191aV9iaW5kIHRvIGJpbmQgdG8gYW4gc3BlY2lmaWMgYWRkcmVzcy9zYXAKKyAqCiAgKglSZXR1cm5zOiAwIHVwb24gc3VjY2VzcywgbmVnYXRpdmUgb3RoZXJ3aXNlLgogICovCiBzdGF0aWMgaW50IGxsY191aV9hdXRvYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfbGxjICphZGRyKQpAQCAtMjg1LDExICsyNzUsNyBAQAogICoJQGFkZHJsZW46IExlbmd0aCBvZiB0aGUgdWFkZHIgc3RydWN0dXJlLgogICoKICAqCUJpbmQgYSBzb2NrZXQgdG8gYSBzcGVjaWZpYyBhZGRyZXNzLiBGb3IgbGxjIGEgdXNlciBpcyBhYmxlIHRvIGJpbmQgdG8KLSAqCWEgc3BlY2lmaWMgc2FwIG9ubHkgb3IgbWFjICsgc2FwLiBJZiB0aGUgdXNlciBvbmx5IHNwZWNpZmllcyBhIHNhcCBhbmQKLSAqCWEgbnVsbCBkbWFjIChhbGwgemVyb3MpIHRoZSB1c2VyIGlzIGF0dGVtcHRpbmcgdG8gYmluZCB0byBhbiBlbnRpcmUKLSAqCXNhcC4gVGhpcyB3aWxsIHN0b3AgYW55b25lIGVsc2Ugb24gdGhlIGxvY2FsIHN5c3RlbSBmcm9tIHVzaW5nIHRoYXQKLSAqCXNhcC4gSWYgc29tZW9uZSBlbHNlIGhhcyBhIG1hYyArIHNhcCBvcGVuIHRoZSBiaW5kIHRvIG51bGwgKyBzYXAgd2lsbAotICoJZmFpbC4KKyAqCWEgc3BlY2lmaWMgc2FwIG9ubHkgb3IgbWFjICsgc2FwLgogICoJSWYgdGhlIHVzZXIgZGVzaXJlcyB0byBiaW5kIHRvIGEgc3BlY2lmaWMgbWFjICsgc2FwLCBpdCBpcyBwb3NzaWJsZSB0bwogICoJaGF2ZSBtdWx0aXBsZSBzYXAgY29ubmVjdGlvbnMgdmlhIG11bHRpcGxlIG1hY3MuCiAgKglCaW5kIGFuZCBhdXRvYmluZCBmb3IgdGhhdCBtYXR0ZXIgbXVzdCBlbmZvcmNlIHRoZSBjb3JyZWN0IHNhcCB1c2FnZQpAQCAtMzA1LDEwICsyOTEsMTYgQEAKIAlpbnQgcmMgPSAtRUlOVkFMOwogCiAJZHByaW50aygiJXM6IGJpbmRpbmcgJTAyWFxuIiwgX19GVU5DVElPTl9fLCBhZGRyLT5zbGxjX3NhcCk7Ci0JaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKSB8fCBhZGRybGVuICE9IHNpemVvZigqYWRkcikpCisJaWYgKHVubGlrZWx5KCFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKSB8fCBhZGRybGVuICE9IHNpemVvZigqYWRkcikpKQogCQlnb3RvIG91dDsKIAlyYyA9IC1FQUZOT1NVUFBPUlQ7Ci0JaWYgKGFkZHItPnNsbGNfZmFtaWx5ICE9IEFGX0xMQykKKwlpZiAodW5saWtlbHkoYWRkci0+c2xsY19mYW1pbHkgIT0gQUZfTExDKSkKKwkJZ290byBvdXQ7CisJcmMgPSAtRU5PREVWOworCXJ0bmxfbG9jaygpOworCWxsYy0+ZGV2ID0gZGV2X2dldGJ5aHdhZGRyKGFkZHItPnNsbGNfYXJwaHJkLCBhZGRyLT5zbGxjX21hYyk7CisJcnRubF91bmxvY2soKTsKKwlpZiAoIWxsYy0+ZGV2KQogCQlnb3RvIG91dDsKIAlpZiAoIWFkZHItPnNsbGNfc2FwKSB7CiAJCXJjID0gLUVVU0VSUzsKQEAgLTMyMiw2ICszMTQsNyBAQAogCQlyYyA9IC1FQlVTWTsgLyogc29tZSBvdGhlciBuZXR3b3JrIGxheWVyIGlzIHVzaW5nIHRoZSBzYXAgKi8KIAkJaWYgKCFzYXApCiAJCQlnb3RvIG91dDsKKwkJbGxjX3NhcF9ob2xkKHNhcCk7CiAJfSBlbHNlIHsKIAkJc3RydWN0IGxsY19hZGRyIGxhZGRyLCBkYWRkcjsKIAkJc3RydWN0IHNvY2sgKmFzazsKQEAgLTMzOCw3ICszMzEsNyBAQAogCQlhc2sgPSBsbGNfbG9va3VwX2VzdGFibGlzaGVkKHNhcCwgJmRhZGRyLCAmbGFkZHIpOwogCQlpZiAoYXNrKSB7CiAJCQlzb2NrX3B1dChhc2spOwotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF9wdXQ7CiAJCX0KIAl9CiAJbGxjLT5sYWRkci5sc2FwID0gYWRkci0+c2xsY19zYXA7CkBAIC0zNDgsNiArMzQxLDggQEAKIAlsbGNfc2FwX2FkZF9zb2NrZXQoc2FwLCBzayk7CiAJc29ja19yZXNldF9mbGFnKHNrLCBTT0NLX1pBUFBFRCk7CiAJcmMgPSAwOworb3V0X3B1dDoKKwlsbGNfc2FwX3B1dChzYXApOwogb3V0OgogCXJldHVybiByYzsKIH0KQEAgLTM2OSw3ICszNjQsNyBAQAogCWludCByYyA9IC1FTk9UQ09OTjsKIAogCWxvY2tfc29jayhzayk7Ci0JaWYgKHNrLT5za19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQpCisJaWYgKHVubGlrZWx5KHNrLT5za19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQpKQogCQlnb3RvIG91dDsKIAlyYyA9IC1FSU5WQUw7CiAJaWYgKGhvdyAhPSAyKQpAQCAtNDA0LDE0ICszOTksMTggQEAKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CiAJc3RydWN0IHNvY2thZGRyX2xsYyAqYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfbGxjICopdWFkZHI7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlpbnQgcmMgPSAtRUlOVkFMOwogCiAJbG9ja19zb2NrKHNrKTsKLQlpZiAoYWRkcmxlbiAhPSBzaXplb2YoKmFkZHIpKQorCWlmICh1bmxpa2VseShhZGRybGVuICE9IHNpemVvZigqYWRkcikpKQogCQlnb3RvIG91dDsKIAlyYyA9IC1FQUZOT1NVUFBPUlQ7Ci0JaWYgKGFkZHItPnNsbGNfZmFtaWx5ICE9IEFGX0xMQykKKwlpZiAodW5saWtlbHkoYWRkci0+c2xsY19mYW1pbHkgIT0gQUZfTExDKSkKKwkJZ290byBvdXQ7CisJaWYgKHVubGlrZWx5KHNrLT5za190eXBlICE9IFNPQ0tfU1RSRUFNKSkKKwkJZ290byBvdXQ7CisJcmMgPSAtRUFMUkVBRFk7CisJaWYgKHVubGlrZWx5KHNvY2stPnN0YXRlID09IFNTX0NPTk5FQ1RJTkcpKQogCQlnb3RvIG91dDsKIAkvKiBiaW5kIGNvbm5lY3Rpb24gdG8gc2FwIGlmIHVzZXIgaGFzbid0IGRvbmUgaXQuICovCiAJaWYgKHNvY2tfZmxhZyhzaywgU09DS19aQVBQRUQpKSB7CkBAIC00MTksMTkgKzQxOCwxMyBAQAogCQlyYyA9IGxsY191aV9hdXRvYmluZChzb2NrLCBhZGRyKTsKIAkJaWYgKHJjKQogCQkJZ290byBvdXQ7Ci0JCWxsYy0+ZGFkZHIubHNhcCA9IGFkZHItPnNsbGNfc2FwOwotCQltZW1jcHkobGxjLT5kYWRkci5tYWMsIGFkZHItPnNsbGNfbWFjLCBJRkhXQUREUkxFTik7CiAJfQotCWRldiA9IGxsYy0+ZGV2OwotCWlmIChzay0+c2tfdHlwZSAhPSBTT0NLX1NUUkVBTSkKLQkJZ290byBvdXQ7Ci0JcmMgPSAtRUFMUkVBRFk7Ci0JaWYgKHNvY2stPnN0YXRlID09IFNTX0NPTk5FQ1RJTkcpCi0JCWdvdG8gb3V0OworCWxsYy0+ZGFkZHIubHNhcCA9IGFkZHItPnNsbGNfc2FwOworCW1lbWNweShsbGMtPmRhZGRyLm1hYywgYWRkci0+c2xsY19tYWMsIElGSFdBRERSTEVOKTsKIAlzb2NrLT5zdGF0ZSA9IFNTX0NPTk5FQ1RJTkc7CiAJc2stPnNrX3N0YXRlICAgPSBUQ1BfU1lOX1NFTlQ7CiAJbGxjLT5saW5rICAgPSBsbGNfdWlfbmV4dF9saW5rX25vKGxsYy0+c2FwLT5sYWRkci5sc2FwKTsKLQlyYyA9IGxsY19lc3RhYmxpc2hfY29ubmVjdGlvbihzaywgZGV2LT5kZXZfYWRkciwKKwlyYyA9IGxsY19lc3RhYmxpc2hfY29ubmVjdGlvbihzaywgbGxjLT5kZXYtPmRldl9hZGRyLAogCQkJCSAgICAgIGFkZHItPnNsbGNfbWFjLCBhZGRyLT5zbGxjX3NhcCk7CiAJaWYgKHJjKSB7CiAJCWRwcmludGsoIiVzOiBsbGNfdWlfc2VuZF9jb25uIGZhaWxlZCA6LShcbiIsIF9fRlVOQ1RJT05fXyk7CkBAIC00MzksMTIgKzQzMiwzMCBAQAogCQlzay0+c2tfc3RhdGUgPSBUQ1BfQ0xPU0U7CiAJCWdvdG8gb3V0OwogCX0KLQlyYyA9IGxsY191aV93YWl0X2Zvcl9jb25uKHNrLCBzay0+c2tfcmN2dGltZW8pOwotCWlmIChyYykKLQkJZHByaW50aygiJXM6IGxsY191aV93YWl0X2Zvcl9jb25uIGZhaWxlZD0lZFxuIiwgX19GVU5DVElPTl9fLCByYyk7CisKKwlpZiAoc2stPnNrX3N0YXRlID09IFRDUF9TWU5fU0VOVCkgeworCQljb25zdCBsb25nIHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgZmxhZ3MgJiBPX05PTkJMT0NLKTsKKworCQlpZiAoIXRpbWVvIHx8ICFsbGNfdWlfd2FpdF9mb3JfY29ubihzaywgdGltZW8pKQorCQkJZ290byBvdXQ7CisKKwkJcmMgPSBzb2NrX2ludHJfZXJybm8odGltZW8pOworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoc2stPnNrX3N0YXRlID09IFRDUF9DTE9TRSkKKwkJZ290byBzb2NrX2Vycm9yOworCisJc29jay0+c3RhdGUgPSBTU19DT05ORUNURUQ7CisJcmMgPSAwOwogb3V0OgogCXJlbGVhc2Vfc29jayhzayk7CiAJcmV0dXJuIHJjOworc29ja19lcnJvcjoKKwlyYyA9IHNvY2tfZXJyb3Ioc2spID8gOiAtRUNPTk5BQk9SVEVEOworCXNvY2stPnN0YXRlID0gU1NfVU5DT05ORUNURUQ7CisJZ290byBvdXQ7CiB9CiAKIC8qKgpAQCAtNDYxLDEwICs0NzIsMTAgQEAKIAlpbnQgcmMgPSAtRUlOVkFMOwogCiAJbG9ja19zb2NrKHNrKTsKLQlpZiAoc29jay0+c3RhdGUgIT0gU1NfVU5DT05ORUNURUQpCisJaWYgKHVubGlrZWx5KHNvY2stPnN0YXRlICE9IFNTX1VOQ09OTkVDVEVEKSkKIAkJZ290byBvdXQ7CiAJcmMgPSAtRU9QTk9UU1VQUDsKLQlpZiAoc2stPnNrX3R5cGUgIT0gU09DS19TVFJFQU0pCisJaWYgKHVubGlrZWx5KHNrLT5za190eXBlICE9IFNPQ0tfU1RSRUFNKSkKIAkJZ290byBvdXQ7CiAJcmMgPSAtRUFHQUlOOwogCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKSkKQEAgLTQ4Myw4NiArNDk0LDE0IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IGxsY191aV93YWl0X2Zvcl9kaXNjKHN0cnVjdCBzb2NrICpzaywgaW50IHRpbWVvdXQpCitzdGF0aWMgaW50IGxsY191aV93YWl0X2Zvcl9kaXNjKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KQogewotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwotCWludCByYzsKLQotCWFkZF93YWl0X3F1ZXVlX2V4Y2x1c2l2ZShzay0+c2tfc2xlZXAsICZ3YWl0KTsKLQlmb3IgKDs7KSB7Ci0JCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJcmMgPSAwOwotCQlpZiAoc2stPnNrX3N0YXRlICE9IFRDUF9DTE9TRSkgewotCQkJcmVsZWFzZV9zb2NrKHNrKTsKLQkJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOwotCQkJbG9ja19zb2NrKHNrKTsKLQkJfSBlbHNlCi0JCQlicmVhazsKLQkJcmMgPSAtRVJFU1RBUlRTWVM7Ci0JCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCWJyZWFrOwotCQlyYyA9IC1FQUdBSU47Ci0JCWlmICghdGltZW91dCkKLQkJCWJyZWFrOwotCX0KLQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoc2stPnNrX3NsZWVwLCAmd2FpdCk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGxsY191aV93YWl0X2Zvcl9jb25uKHN0cnVjdCBzb2NrICpzaywgaW50IHRpbWVvdXQpCi17Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0JaW50IHJjOwotCi0JYWRkX3dhaXRfcXVldWVfZXhjbHVzaXZlKHNrLT5za19zbGVlcCwgJndhaXQpOwotCWZvciAoOzspIHsKLQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlyYyA9IC1FQUdBSU47Ci0JCWlmIChzay0+c2tfc3RhdGUgPT0gVENQX0NMT1NFKQotCQkJYnJlYWs7Ci0JCXJjID0gMDsKLQkJaWYgKHNrLT5za19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQpIHsKLQkJCXJlbGVhc2Vfc29jayhzayk7Ci0JCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKLQkJCWxvY2tfc29jayhzayk7Ci0JCX0gZWxzZQotCQkJYnJlYWs7Ci0JCXJjID0gLUVSRVNUQVJUU1lTOwotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCQlicmVhazsKLQkJcmMgPSAtRUFHQUlOOwotCQlpZiAoIXRpbWVvdXQpCi0JCQlicmVhazsKLQl9Ci0JX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCXJlbW92ZV93YWl0X3F1ZXVlKHNrLT5za19zbGVlcCwgJndhaXQpOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBsbGNfdWlfd2FpdF9mb3JfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIGludCB0aW1lb3V0KQotewotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCURFRklORV9XQUlUKHdhaXQpOwogCWludCByYyA9IDA7CiAKLQlhZGRfd2FpdF9xdWV1ZV9leGNsdXNpdmUoc2stPnNrX3NsZWVwLCAmd2FpdCk7Ci0JZm9yICg7OykgewotCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCWlmIChzay0+c2tfc2h1dGRvd24gJiBSQ1ZfU0hVVERPV04pCi0JCQlicmVhazsKLQkJLyoKLQkJICogV2VsbCwgaWYgd2UgaGF2ZSBiYWNrbG9nLCB0cnkgdG8gcHJvY2VzcyBpdCBub3cuCi0JCSAqLwotICAgICAgICAgICAgICAgIGlmIChzay0+c2tfYmFja2xvZy50YWlsKSB7Ci0JCQlyZWxlYXNlX3NvY2soc2spOwotCQkJbG9ja19zb2NrKHNrKTsKLQkJfQotCQlyYyA9IDA7Ci0JCWlmIChza2JfcXVldWVfZW1wdHkoJnNrLT5za19yZWNlaXZlX3F1ZXVlKSkgewotCQkJcmVsZWFzZV9zb2NrKHNrKTsKLQkJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOwotCQkJbG9ja19zb2NrKHNrKTsKLQkJfSBlbHNlCisJd2hpbGUgKDEpIHsKKwkJcHJlcGFyZV90b193YWl0KHNrLT5za19zbGVlcCwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCWlmIChza193YWl0X2V2ZW50KHNrLCAmdGltZW91dCwgc2stPnNrX3N0YXRlID09IFRDUF9DTE9TRSkpCiAJCQlicmVhazsKIAkJcmMgPSAtRVJFU1RBUlRTWVM7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKQEAgLTU3MCwzMSArNTA5LDQwIEBACiAJCXJjID0gLUVBR0FJTjsKIAkJaWYgKCF0aW1lb3V0KQogCQkJYnJlYWs7CisJCXJjID0gMDsKIAl9Ci0JX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCXJlbW92ZV93YWl0X3F1ZXVlKHNrLT5za19zbGVlcCwgJndhaXQpOworCWZpbmlzaF93YWl0KHNrLT5za19zbGVlcCwgJndhaXQpOwogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBsbGNfdWlfd2FpdF9mb3JfYnVzeV9jb3JlKHN0cnVjdCBzb2NrICpzaywgaW50IHRpbWVvdXQpCitzdGF0aWMgaW50IGxsY191aV93YWl0X2Zvcl9jb25uKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KQogewotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCURFRklORV9XQUlUKHdhaXQpOworCisJd2hpbGUgKDEpIHsKKwkJcHJlcGFyZV90b193YWl0KHNrLT5za19zbGVlcCwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCWlmIChza193YWl0X2V2ZW50KHNrLCAmdGltZW91dCwgc2stPnNrX3N0YXRlICE9IFRDUF9TWU5fU0VOVCkpCisJCQlicmVhazsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpIHx8ICF0aW1lb3V0KQorCQkJYnJlYWs7CisJfQorCWZpbmlzaF93YWl0KHNrLT5za19zbGVlcCwgJndhaXQpOworCXJldHVybiB0aW1lb3V0OworfQorCitzdGF0aWMgaW50IGxsY191aV93YWl0X2Zvcl9idXN5X2NvcmUoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpCit7CisJREVGSU5FX1dBSVQod2FpdCk7CiAJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwogCWludCByYzsKIAotCWFkZF93YWl0X3F1ZXVlX2V4Y2x1c2l2ZShzay0+c2tfc2xlZXAsICZ3YWl0KTsKLQlmb3IgKDs7KSB7Ci0JCWRwcmludGsoIiVzOiBsb29waW5nLi4uXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXJjID0gLUVOT1RDT05OOwotCQlpZiAoc2stPnNrX3NodXRkb3duICYgUkNWX1NIVVRET1dOKQotCQkJYnJlYWs7CisJd2hpbGUgKDEpIHsKKwkJcHJlcGFyZV90b193YWl0KHNrLT5za19zbGVlcCwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCXJjID0gMDsKLQkJaWYgKGxsY19kYXRhX2FjY2VwdF9zdGF0ZShsbGMtPnN0YXRlKSB8fCBsbGMtPnBfZmxhZykgewotCQkJcmVsZWFzZV9zb2NrKHNrKTsKLQkJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOwotCQkJbG9ja19zb2NrKHNrKTsKLQkJfSBlbHNlCisJCWlmIChza193YWl0X2V2ZW50KHNrLCAmdGltZW91dCwKKwkJCQkgIChzay0+c2tfc2h1dGRvd24gJiBSQ1ZfU0hVVERPV04pIHx8CisJCQkJICAoIWxsY19kYXRhX2FjY2VwdF9zdGF0ZShsbGMtPnN0YXRlKSAmJgorCQkJCSAgICFsbGMtPnBfZmxhZykpKQogCQkJYnJlYWs7CiAJCXJjID0gLUVSRVNUQVJUU1lTOwogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCkBAIC02MDMsOCArNTUxLDM1IEBACiAJCWlmICghdGltZW91dCkKIAkJCWJyZWFrOwogCX0KLQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoc2stPnNrX3NsZWVwLCAmd2FpdCk7CisJZmluaXNoX3dhaXQoc2stPnNrX3NsZWVwLCAmd2FpdCk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGxsY193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvKQoreworCWludCByYzsKKworCXdoaWxlICgxKSB7CisJCS8qCisJCSAqIFBPU0lYIDEwMDMuMWcgbWFuZGF0ZXMgdGhpcyBvcmRlci4KKwkJICovCisJCWlmIChzay0+c2tfZXJyKSB7CisJCQlyYyA9IHNvY2tfZXJyb3Ioc2spOworCQkJYnJlYWs7CisJCX0KKwkJcmMgPSAwOworCQlpZiAoc2stPnNrX3NodXRkb3duICYgUkNWX1NIVVRET1dOKQorCQkJYnJlYWs7CisJCXJjID0gLUVBR0FJTjsKKwkJaWYgKCF0aW1lbykKKwkJCWJyZWFrOworCQlyYyA9IHNvY2tfaW50cl9lcnJubyh0aW1lbyk7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCWJyZWFrOworCQlyYyA9IDA7CisJCWlmIChza193YWl0X2RhdGEoc2ssICZ0aW1lbykpCisJCQlicmVhazsKKwl9CiAJcmV0dXJuIHJjOwogfQogCkBAIC02MjcsMTUgKzYwMiwxOCBAQAogCWRwcmludGsoIiVzOiBhY2NlcHRpbmcgb24gJTAyWFxuIiwgX19GVU5DVElPTl9fLAogCSAgICAgICAgbGxjX3NrKHNrKS0+bGFkZHIubHNhcCk7CiAJbG9ja19zb2NrKHNrKTsKLQlpZiAoc2stPnNrX3R5cGUgIT0gU09DS19TVFJFQU0pCisJaWYgKHVubGlrZWx5KHNrLT5za190eXBlICE9IFNPQ0tfU1RSRUFNKSkKIAkJZ290byBvdXQ7CiAJcmMgPSAtRUlOVkFMOwotCWlmIChzb2NrLT5zdGF0ZSAhPSBTU19VTkNPTk5FQ1RFRCB8fCBzay0+c2tfc3RhdGUgIT0gVENQX0xJU1RFTikKKwlpZiAodW5saWtlbHkoc29jay0+c3RhdGUgIT0gU1NfVU5DT05ORUNURUQgfHwKKwkJICAgICBzay0+c2tfc3RhdGUgIT0gVENQX0xJU1RFTikpCiAJCWdvdG8gb3V0OwogCS8qIHdhaXQgZm9yIGEgY29ubmVjdGlvbiB0byBhcnJpdmUuICovCi0JcmMgPSBsbGNfdWlfd2FpdF9mb3JfZGF0YShzaywgc2stPnNrX3JjdnRpbWVvKTsKLQlpZiAocmMpCi0JCWdvdG8gb3V0OworCWlmIChza2JfcXVldWVfZW1wdHkoJnNrLT5za19yZWNlaXZlX3F1ZXVlKSkgeworCQlyYyA9IGxsY193YWl0X2RhdGEoc2ssIHNrLT5za19yY3Z0aW1lbyk7CisJCWlmIChyYykKKwkJCWdvdG8gb3V0OworCX0KIAlkcHJpbnRrKCIlczogZ290IGEgbmV3IGNvbm5lY3Rpb24gb24gJTAyWFxuIiwgX19GVU5DVElPTl9fLAogCSAgICAgICAgbGxjX3NrKHNrKS0+bGFkZHIubHNhcCk7CiAJc2tiID0gc2tiX2RlcXVldWUoJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKQEAgLTY1Nyw3ICs2MzUsNiBAQAogCS8qIHB1dCBvcmlnaW5hbCBzb2NrZXQgYmFjayBpbnRvIGEgY2xlYW4gbGlzdGVuIHN0YXRlLiAqLwogCXNrLT5za19zdGF0ZSA9IFRDUF9MSVNURU47CiAJc2stPnNrX2Fja19iYWNrbG9nLS07Ci0Jc2tiLT5zayA9IE5VTEw7CiAJZHByaW50aygiJXM6IG9rIHN1Y2Nlc3Mgb24gJTAyWCwgY2xpZW50IG9uICUwMlhcbiIsIF9fRlVOQ1RJT05fXywKIAkJbGxjX3NrKHNrKS0+YWRkci5zbGxjX3NhcCwgbmV3bGxjLT5kYWRkci5sc2FwKTsKIGZyZWVzOgpAQCAtNjcxLDU2ICs2NDgsMTY3IEBACiAgKglsbGNfdWlfcmVjdm1zZyAtIGNvcHkgcmVjZWl2ZWQgZGF0YSB0byB0aGUgc29ja2V0IHVzZXIuCiAgKglAc29jazogU29ja2V0IHRvIGNvcHkgZGF0YSBmcm9tLgogICoJQG1zZzogVmFyaW91cyB1c2VyIHNwYWNlIHJlbGF0ZWQgaW5mb3JtYXRpb24uCi0gKglAc2l6ZTogU2l6ZSBvZiB1c2VyIGJ1ZmZlci4KKyAqCUBsZW46IFNpemUgb2YgdXNlciBidWZmZXIuCiAgKglAZmxhZ3M6IFVzZXIgc3BlY2lmaWVkIGZsYWdzLgogICoKICAqCUNvcHkgcmVjZWl2ZWQgZGF0YSB0byB0aGUgc29ja2V0IHVzZXIuCiAgKglSZXR1cm5zIG5vbi1uZWdhdGl2ZSB1cG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG90aGVyd2lzZS4KICAqLwogc3RhdGljIGludCBsbGNfdWlfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCi0JCQkgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUsIGludCBmbGFncykKKwkJCSAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IHNvY2thZGRyX2xsYyAqdWFkZHIgPSAoc3RydWN0IHNvY2thZGRyX2xsYyAqKW1zZy0+bXNnX25hbWU7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwljb25zdCBpbnQgbm9uYmxvY2sgPSBmbGFncyAmIE1TR19ET05UV0FJVDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CiAJc2l6ZV90IGNvcGllZCA9IDA7Ci0JaW50IHJjID0gLUVOT01FTSwgdGltZW91dDsKLQlpbnQgbm9ibG9jayA9IGZsYWdzICYgTVNHX0RPTlRXQUlUOworCXUzMiBwZWVrX3NlcSA9IDA7CisJdTMyICpzZXE7CisJdW5zaWduZWQgbG9uZyB1c2VkOworCWludCB0YXJnZXQ7CS8qIFJlYWQgYXQgbGVhc3QgdGhpcyBtYW55IGJ5dGVzICovCisJbG9uZyB0aW1lbzsKIAotCWRwcmludGsoIiVzOiByZWNlaXZpbmcgaW4gJTAyWCBmcm9tICUwMlhcbiIsIF9fRlVOQ1RJT05fXywKLQkJbGxjX3NrKHNrKS0+bGFkZHIubHNhcCwgbGxjX3NrKHNrKS0+ZGFkZHIubHNhcCk7CiAJbG9ja19zb2NrKHNrKTsKLQl0aW1lb3V0ID0gc29ja19yY3Z0aW1lbyhzaywgbm9ibG9jayk7Ci0JcmMgPSBsbGNfdWlfd2FpdF9mb3JfZGF0YShzaywgdGltZW91dCk7Ci0JaWYgKHJjKSB7Ci0JCWRwcmludGsoIiVzOiBsbGNfdWlfd2FpdF9mb3JfZGF0YSBmYWlsZWQgcmVjdiAiCi0JCQkiaW4gJTAyWCBmcm9tICUwMlhcbiIsIF9fRlVOQ1RJT05fXywKLQkJCWxsY19zayhzayktPmxhZGRyLmxzYXAsIGxsY19zayhzayktPmRhZGRyLmxzYXApOworCWNvcGllZCA9IC1FTk9UQ09OTjsKKwlpZiAoc2stPnNrX3N0YXRlID09IFRDUF9MSVNURU4pCiAJCWdvdG8gb3V0OwotCX0KLQlza2IgPSBza2JfZGVxdWV1ZSgmc2stPnNrX3JlY2VpdmVfcXVldWUpOwotCWlmICghc2tiKSAvKiBzaHV0ZG93biAqLwotCQlnb3RvIG91dDsKLQljb3BpZWQgPSBza2ItPmxlbjsKLQlpZiAoY29waWVkID4gc2l6ZSkKLQkJY29waWVkID0gc2l6ZTsKLQlyYyA9IHNrYl9jb3B5X2RhdGFncmFtX2lvdmVjKHNrYiwgMCwgbXNnLT5tc2dfaW92LCBjb3BpZWQpOwotCWlmIChyYykKLQkJZ290byBkZ3JhbV9mcmVlOwotCWlmIChza2ItPmxlbiA+IGNvcGllZCkgewotCQlza2JfcHVsbChza2IsIGNvcGllZCk7Ci0JCXNrYl9xdWV1ZV9oZWFkKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKTsKLQl9Ci0JaWYgKHVhZGRyKQotCQltZW1jcHkodWFkZHIsIGxsY191aV9za2JfY2Ioc2tiKSwgc2l6ZW9mKCp1YWRkcikpOwotCW1zZy0+bXNnX25hbWVsZW4gPSBzaXplb2YoKnVhZGRyKTsKLQlpZiAoIXNrYi0+bmV4dCkgewotZGdyYW1fZnJlZToKLQkJa2ZyZWVfc2tiKHNrYik7Ci0JfQorCisJdGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBub25ibG9jayk7CisKKwlzZXEgPSAmbGxjLT5jb3BpZWRfc2VxOworCWlmIChmbGFncyAmIE1TR19QRUVLKSB7CisJCXBlZWtfc2VxID0gbGxjLT5jb3BpZWRfc2VxOworCQlzZXEgPSAmcGVla19zZXE7CisgCX0KKworCXRhcmdldCA9IHNvY2tfcmN2bG93YXQoc2ssIGZsYWdzICYgTVNHX1dBSVRBTEwsIGxlbik7CisJY29waWVkID0gMDsKKworCWRvIHsKKwkJdTMyIG9mZnNldDsKKworCQkvKgorCQkgKiBXZSBuZWVkIHRvIGNoZWNrIHNpZ25hbHMgZmlyc3QsIHRvIGdldCBjb3JyZWN0IFNJR1VSRworCQkgKiBoYW5kbGluZy4gRklYTUU6IE5lZWQgdG8gY2hlY2sgdGhpcyBkb2Vzbid0IGltcGFjdCAxMDAzLjFnCisJCSAqIGFuZCBtb3ZlIGl0IGRvd24gdG8gdGhlIGJvdHRvbSBvZiB0aGUgbG9vcAorCQkgKi8KKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQlpZiAoY29waWVkKQorCQkJCWJyZWFrOworCQkJY29waWVkID0gdGltZW8gPyBzb2NrX2ludHJfZXJybm8odGltZW8pIDogLUVBR0FJTjsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogTmV4dCBnZXQgYSBidWZmZXIuICovCisKKwkJc2tiID0gc2tiX3BlZWsoJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKKwkJaWYgKHNrYikgeworCQkJb2Zmc2V0ID0gKnNlcTsKKwkJCWdvdG8gZm91bmRfb2tfc2tiOworCQl9CisJCS8qIFdlbGwsIGlmIHdlIGhhdmUgYmFja2xvZywgdHJ5IHRvIHByb2Nlc3MgaXQgbm93IHlldC4gKi8KKworCQlpZiAoY29waWVkID49IHRhcmdldCAmJiAhc2stPnNrX2JhY2tsb2cudGFpbCkKKwkJCWJyZWFrOworCisJCWlmIChjb3BpZWQpIHsKKwkJCWlmIChzay0+c2tfZXJyIHx8CisJCQkgICAgc2stPnNrX3N0YXRlID09IFRDUF9DTE9TRSB8fAorCQkJICAgIChzay0+c2tfc2h1dGRvd24gJiBSQ1ZfU0hVVERPV04pIHx8CisJCQkgICAgIXRpbWVvIHx8CisJCQkgICAgKGZsYWdzICYgTVNHX1BFRUspKQorCQkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSkKKwkJCQlicmVhazsKKworCQkJaWYgKHNrLT5za19lcnIpIHsKKwkJCQljb3BpZWQgPSBzb2NrX2Vycm9yKHNrKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChzay0+c2tfc2h1dGRvd24gJiBSQ1ZfU0hVVERPV04pCisJCQkJYnJlYWs7CisKKwkJCWlmIChzay0+c2tfc3RhdGUgPT0gVENQX0NMT1NFKSB7CisJCQkJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpIHsKKwkJCQkJLyoKKwkJCQkJICogVGhpcyBvY2N1cnMgd2hlbiB1c2VyIHRyaWVzIHRvIHJlYWQKKwkJCQkJICogZnJvbSBuZXZlciBjb25uZWN0ZWQgc29ja2V0LgorCQkJCQkgKi8KKwkJCQkJY29waWVkID0gLUVOT1RDT05OOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoIXRpbWVvKSB7CisJCQkJY29waWVkID0gLUVBR0FJTjsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChjb3BpZWQgPj0gdGFyZ2V0KSB7IC8qIERvIG5vdCBzbGVlcCwganVzdCBwcm9jZXNzIGJhY2tsb2cuICovCisJCQlyZWxlYXNlX3NvY2soc2spOworCQkJbG9ja19zb2NrKHNrKTsKKwkJfSBlbHNlCisJCQlza193YWl0X2RhdGEoc2ssICZ0aW1lbyk7CisKKwkJaWYgKChmbGFncyAmIE1TR19QRUVLKSAmJiBwZWVrX3NlcSAhPSBsbGMtPmNvcGllZF9zZXEpIHsKKwkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIkxMQyglczolZCk6IEFwcGxpY2F0aW9uICIKKwkJCQkJCSAgImJ1ZywgcmFjZSBpbiBNU0dfUEVFSy5cbiIsCisJCQkJICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCk7CisJCQlwZWVrX3NlcSA9IGxsYy0+Y29waWVkX3NlcTsKKwkJfQorCQljb250aW51ZTsKKwlmb3VuZF9va19za2I6CisJCS8qIE9rIHNvIGhvdyBtdWNoIGNhbiB3ZSB1c2U/ICovCisJCXVzZWQgPSBza2ItPmxlbiAtIG9mZnNldDsKKwkJaWYgKGxlbiA8IHVzZWQpCisJCQl1c2VkID0gbGVuOworCisJCWlmICghKGZsYWdzICYgTVNHX1RSVU5DKSkgeworCQkJaW50IHJjID0gc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMoc2tiLCBvZmZzZXQsCisJCQkJCQkJIG1zZy0+bXNnX2lvdiwgdXNlZCk7CisJCQlpZiAocmMpIHsKKwkJCQkvKiBFeGNlcHRpb24uIEJhaWxvdXQhICovCisJCQkJaWYgKCFjb3BpZWQpCisJCQkJCWNvcGllZCA9IC1FRkFVTFQ7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkqc2VxICs9IHVzZWQ7CisJCWNvcGllZCArPSB1c2VkOworCQlsZW4gLT0gdXNlZDsKKworCQlpZiAodXNlZCArIG9mZnNldCA8IHNrYi0+bGVuKQorCQkJY29udGludWU7CisKKwkJaWYgKCEoZmxhZ3MgJiBNU0dfUEVFSykpIHsKKwkJCXNrX2VhdF9za2Ioc2ssIHNrYik7CisJCQkqc2VxID0gMDsKKwkJfQorCX0gd2hpbGUgKGxlbiA+IDApOworCisJLyogCisJICogQWNjb3JkaW5nIHRvIFVOSVg5OCwgbXNnX25hbWUvbXNnX25hbWVsZW4gYXJlIGlnbm9yZWQKKwkgKiBvbiBjb25uZWN0ZWQgc29ja2V0LiAtQU5LCisJICogQnV0Li4uIGFmX2xsYyBzdGlsbCBkb2Vzbid0IGhhdmUgc2VwYXJhdGUgc2V0cyBvZiBtZXRob2RzIGZvcgorCSAqIFNPQ0tfREdSQU0gYW5kIFNPQ0tfU1RSRUFNIDotKCBTbyB3ZSBoYXZlIHRvIGRvIHRoaXMgdGVzdCwgd2lsbAorCSAqIGV2ZW50dWFsbHkgZml4IHRoaXMgdGhvIDotKSAtYWNtZQorCSAqLworCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX0RHUkFNKQorCQlnb3RvIGNvcHlfdWFkZHI7CiBvdXQ6CiAJcmVsZWFzZV9zb2NrKHNrKTsKLQlyZXR1cm4gcmMgPyA6IGNvcGllZDsKKwlyZXR1cm4gY29waWVkOworY29weV91YWRkcjoKKwlpZiAodWFkZHIgIT0gTlVMTCAmJiBza2IgIT0gTlVMTCkgeworCQltZW1jcHkodWFkZHIsIGxsY191aV9za2JfY2Ioc2tiKSwgc2l6ZW9mKCp1YWRkcikpOworCQltc2ctPm1zZ19uYW1lbGVuID0gc2l6ZW9mKCp1YWRkcik7CisJfQorCWdvdG8gb3V0OwogfQogCiAvKioKQEAgLTc0MCw3ICs4MjgsNiBAQAogCXN0cnVjdCBzb2NrYWRkcl9sbGMgKmFkZHIgPSAoc3RydWN0IHNvY2thZGRyX2xsYyAqKW1zZy0+bXNnX25hbWU7CiAJaW50IGZsYWdzID0gbXNnLT5tc2dfZmxhZ3M7CiAJaW50IG5vYmxvY2sgPSBmbGFncyAmIE1TR19ET05UV0FJVDsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc2l6ZV90IHNpemUgPSAwOwogCWludCByYyA9IC1FSU5WQUwsIGNvcGllZCA9IDAsIGhkcmxlbjsKQEAgLTc2MywxOSArODUwLDE3IEBACiAJCWlmIChyYykKIAkJCWdvdG8gcmVsZWFzZTsKIAl9Ci0JZGV2ID0gbGxjLT5kZXY7Ci0JaGRybGVuID0gZGV2LT5oYXJkX2hlYWRlcl9sZW4gKyBsbGNfdWlfaGVhZGVyX2xlbihzaywgYWRkcik7CisJaGRybGVuID0gbGxjLT5kZXYtPmhhcmRfaGVhZGVyX2xlbiArIGxsY191aV9oZWFkZXJfbGVuKHNrLCBhZGRyKTsKIAlzaXplID0gaGRybGVuICsgbGVuOwotCWlmIChzaXplID4gZGV2LT5tdHUpCi0JCXNpemUgPSBkZXYtPm10dTsKKwlpZiAoc2l6ZSA+IGxsYy0+ZGV2LT5tdHUpCisJCXNpemUgPSBsbGMtPmRldi0+bXR1OwogCWNvcGllZCA9IHNpemUgLSBoZHJsZW47CiAJcmVsZWFzZV9zb2NrKHNrKTsKIAlza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLCBzaXplLCBub2Jsb2NrLCAmcmMpOwogCWxvY2tfc29jayhzayk7CiAJaWYgKCFza2IpCiAJCWdvdG8gcmVsZWFzZTsKLQlza2ItPnNrCSAgICAgID0gc2s7Ci0Jc2tiLT5kZXYgICAgICA9IGRldjsKKwlza2ItPmRldiAgICAgID0gbGxjLT5kZXY7CiAJc2tiLT5wcm90b2NvbCA9IGxsY19wcm90b190eXBlKGFkZHItPnNsbGNfYXJwaHJkKTsKIAlza2JfcmVzZXJ2ZShza2IsIGhkcmxlbik7IAogCXJjID0gbWVtY3B5X2Zyb21pb3ZlYyhza2JfcHV0KHNrYiwgY29waWVkKSwgbXNnLT5tc2dfaW92LCBjb3BpZWQpOwpAQCAtODAwLDE1ICs4ODUsMTMgQEAKIAlpZiAoIShzay0+c2tfdHlwZSA9PSBTT0NLX1NUUkVBTSAmJiAhYWRkci0+c2xsY191YSkpCiAJCWdvdG8gb3V0OwogCXJjID0gbGxjX3VpX3NlbmRfZGF0YShzaywgc2tiLCBub2Jsb2NrKTsKLQlpZiAocmMpCi0JCWRwcmludGsoIiVzOiBsbGNfdWlfc2VuZF9kYXRhIGZhaWxlZDogJWRcbiIsIF9fRlVOQ1RJT05fXywgcmMpOwogb3V0OgotCWlmIChyYykKKwlpZiAocmMpIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiByZWxlYXNlOgotCWlmIChyYykKIAkJZHByaW50aygiJXM6IGZhaWxlZCBzZW5kaW5nIGZyb20gJTAyWCB0byAlMDJYOiAlZFxuIiwKIAkJCV9fRlVOQ1RJT05fXywgbGxjLT5sYWRkci5sc2FwLCBsbGMtPmRhZGRyLmxzYXAsIHJjKTsKKwl9CiAJcmVsZWFzZV9zb2NrKHNrKTsKIAlyZXR1cm4gcmMgPyA6IGNvcGllZDsKIH0KQEAgLTg5NSw3ICs5NzgsNyBAQAogCWludCByYyA9IC1FSU5WQUwsIG9wdDsKIAogCWxvY2tfc29jayhzayk7Ci0JaWYgKGxldmVsICE9IFNPTF9MTEMgfHwgb3B0bGVuICE9IHNpemVvZihpbnQpKQorCWlmICh1bmxpa2VseShsZXZlbCAhPSBTT0xfTExDIHx8IG9wdGxlbiAhPSBzaXplb2YoaW50KSkpCiAJCWdvdG8gb3V0OwogCXJjID0gZ2V0X3VzZXIob3B0LCAoaW50IF9fdXNlciAqKW9wdHZhbCk7CiAJaWYgKHJjKQpAQCAtOTE1LDIyICs5OTgsMjIgQEAKIAljYXNlIExMQ19PUFRfQUNLX1RNUl9FWFA6CiAJCWlmIChvcHQgPiBMTENfT1BUX01BWF9BQ0tfVE1SX0VYUCkKIAkJCWdvdG8gb3V0OwotCQlsbGMtPmFja190aW1lci5leHBpcmUgPSBvcHQ7CisJCWxsYy0+YWNrX3RpbWVyLmV4cGlyZSA9IG9wdCAqIEhaOwogCQlicmVhazsKIAljYXNlIExMQ19PUFRfUF9UTVJfRVhQOgogCQlpZiAob3B0ID4gTExDX09QVF9NQVhfUF9UTVJfRVhQKQogCQkJZ290byBvdXQ7Ci0JCWxsYy0+cGZfY3ljbGVfdGltZXIuZXhwaXJlID0gb3B0OworCQlsbGMtPnBmX2N5Y2xlX3RpbWVyLmV4cGlyZSA9IG9wdCAqIEhaOwogCQlicmVhazsKIAljYXNlIExMQ19PUFRfUkVKX1RNUl9FWFA6CiAJCWlmIChvcHQgPiBMTENfT1BUX01BWF9SRUpfVE1SX0VYUCkKIAkJCWdvdG8gb3V0OwotCQlsbGMtPnJlal9zZW50X3RpbWVyLmV4cGlyZSA9IG9wdDsKKwkJbGxjLT5yZWpfc2VudF90aW1lci5leHBpcmUgPSBvcHQgKiBIWjsKIAkJYnJlYWs7CiAJY2FzZSBMTENfT1BUX0JVU1lfVE1SX0VYUDoKIAkJaWYgKG9wdCA+IExMQ19PUFRfTUFYX0JVU1lfVE1SX0VYUCkKIAkJCWdvdG8gb3V0OwotCQlsbGMtPmJ1c3lfc3RhdGVfdGltZXIuZXhwaXJlID0gb3B0OworCQlsbGMtPmJ1c3lfc3RhdGVfdGltZXIuZXhwaXJlID0gb3B0ICogSFo7CiAJCWJyZWFrOwogCWNhc2UgTExDX09QVF9UWF9XSU46CiAJCWlmIChvcHQgPiBMTENfT1BUX01BWF9XSU4pCkBAIC05NzAsNyArMTA1Myw3IEBACiAJaW50IHZhbCA9IDAsIGxlbiA9IDAsIHJjID0gLUVJTlZBTDsKIAogCWxvY2tfc29jayhzayk7Ci0JaWYgKGxldmVsICE9IFNPTF9MTEMpCisJaWYgKHVubGlrZWx5KGxldmVsICE9IFNPTF9MTEMpKQogCQlnb3RvIG91dDsKIAlyYyA9IGdldF91c2VyKGxlbiwgb3B0bGVuKTsKIAlpZiAocmMpCkBAIC05ODAsMTcgKzEwNjMsMTcgQEAKIAkJZ290byBvdXQ7CiAJc3dpdGNoIChvcHRuYW1lKSB7CiAJY2FzZSBMTENfT1BUX1JFVFJZOgotCQl2YWwgPSBsbGMtPm4yOwkJCQlicmVhazsKKwkJdmFsID0gbGxjLT5uMjsJCQkJCWJyZWFrOwogCWNhc2UgTExDX09QVF9TSVpFOgotCQl2YWwgPSBsbGMtPm4xOwkJCQlicmVhazsKKwkJdmFsID0gbGxjLT5uMTsJCQkJCWJyZWFrOwogCWNhc2UgTExDX09QVF9BQ0tfVE1SX0VYUDoKLQkJdmFsID0gbGxjLT5hY2tfdGltZXIuZXhwaXJlOwkJYnJlYWs7CisJCXZhbCA9IGxsYy0+YWNrX3RpbWVyLmV4cGlyZSAvIEhaOwkJYnJlYWs7CiAJY2FzZSBMTENfT1BUX1BfVE1SX0VYUDoKLQkJdmFsID0gbGxjLT5wZl9jeWNsZV90aW1lci5leHBpcmU7CWJyZWFrOworCQl2YWwgPSBsbGMtPnBmX2N5Y2xlX3RpbWVyLmV4cGlyZSAvIEhaOwkJYnJlYWs7CiAJY2FzZSBMTENfT1BUX1JFSl9UTVJfRVhQOgotCQl2YWwgPSBsbGMtPnJlal9zZW50X3RpbWVyLmV4cGlyZTsJYnJlYWs7CisJCXZhbCA9IGxsYy0+cmVqX3NlbnRfdGltZXIuZXhwaXJlIC8gSFo7CQlicmVhazsKIAljYXNlIExMQ19PUFRfQlVTWV9UTVJfRVhQOgotCQl2YWwgPSBsbGMtPmJ1c3lfc3RhdGVfdGltZXIuZXhwaXJlOwlicmVhazsKKwkJdmFsID0gbGxjLT5idXN5X3N0YXRlX3RpbWVyLmV4cGlyZSAvIEhaOwlicmVhazsKIAljYXNlIExMQ19PUFRfVFhfV0lOOgogCQl2YWwgPSBsbGMtPms7CQkJCWJyZWFrOwogCWNhc2UgTExDX09QVF9SWF9XSU46CkBAIC0xMDM0LDggKzExMTcsMTIgQEAKIAkuc2VuZHBhZ2UgICAgPSBzb2NrX25vX3NlbmRwYWdlLAogfTsKIAotZXh0ZXJuIHZvaWQgbGxjX3NhcF9oYW5kbGVyKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpOwotZXh0ZXJuIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3N0YXRpYyBjaGFyIGxsY19wcm9jX2Vycl9tc2dbXSBfX2luaXRkYXRhID0KKyAgICAgICAgS0VSTl9DUklUICJMTEM6IFVuYWJsZSB0byByZWdpc3RlciB0aGUgcHJvY19mcyBlbnRyaWVzXG4iOworc3RhdGljIGNoYXIgbGxjX3N5c2N0bF9lcnJfbXNnW10gX19pbml0ZGF0YSA9CisgICAgICAgIEtFUk5fQ1JJVCAiTExDOiBVbmFibGUgdG8gcmVnaXN0ZXIgdGhlIHN5c2N0bCBlbnRyaWVzXG4iOworc3RhdGljIGNoYXIgbGxjX3NvY2tfZXJyX21zZ1tdIF9faW5pdGRhdGEgPQorICAgICAgICBLRVJOX0NSSVQgIkxMQzogVW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBuZXR3b3JrIGZhbWlseVxuIjsKIAogc3RhdGljIGludCBfX2luaXQgbGxjMl9pbml0KHZvaWQpCiB7CkBAIC0xMDQ4LDEzICsxMTM1LDI4IEBACiAJbGxjX3N0YXRpb25faW5pdCgpOwogCWxsY191aV9zYXBfbGFzdF9hdXRvcG9ydCA9IExMQ19TQVBfRFlOX1NUQVJUOwogCXJjID0gbGxjX3Byb2NfaW5pdCgpOwotCWlmIChyYyAhPSAwKQorCWlmIChyYyAhPSAwKSB7CisJCXByaW50ayhsbGNfcHJvY19lcnJfbXNnKTsKIAkJZ290byBvdXRfdW5yZWdpc3Rlcl9sbGNfcHJvdG87Ci0Jc29ja19yZWdpc3RlcigmbGxjX3VpX2ZhbWlseV9vcHMpOworCX0KKwlyYyA9IGxsY19zeXNjdGxfaW5pdCgpOworCWlmIChyYykgeworCQlwcmludGsobGxjX3N5c2N0bF9lcnJfbXNnKTsKKwkJZ290byBvdXRfcHJvYzsKKwl9CisJcmMgPSBzb2NrX3JlZ2lzdGVyKCZsbGNfdWlfZmFtaWx5X29wcyk7CisJaWYgKHJjKSB7CisJCXByaW50ayhsbGNfc29ja19lcnJfbXNnKTsKKwkJZ290byBvdXRfc3lzY3RsOworCX0KIAlsbGNfYWRkX3BhY2soTExDX0RFU1RfU0FQLCBsbGNfc2FwX2hhbmRsZXIpOwogCWxsY19hZGRfcGFjayhMTENfREVTVF9DT05OLCBsbGNfY29ubl9oYW5kbGVyKTsKIG91dDoKIAlyZXR1cm4gcmM7CitvdXRfc3lzY3RsOgorCWxsY19zeXNjdGxfZXhpdCgpOworb3V0X3Byb2M6CisJbGxjX3Byb2NfZXhpdCgpOwogb3V0X3VucmVnaXN0ZXJfbGxjX3Byb3RvOgogCXByb3RvX3VucmVnaXN0ZXIoJmxsY19wcm90byk7CiAJZ290byBvdXQ7CkBAIC0xMDY3LDYgKzExNjksNyBAQAogCWxsY19yZW1vdmVfcGFjayhMTENfREVTVF9DT05OKTsKIAlzb2NrX3VucmVnaXN0ZXIoUEZfTExDKTsKIAlsbGNfcHJvY19leGl0KCk7CisJbGxjX3N5c2N0bF9leGl0KCk7CiAJcHJvdG9fdW5yZWdpc3RlcigmbGxjX3Byb3RvKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfY19hYy5jIGIvbmV0L2xsYy9sbGNfY19hYy5jCmluZGV4IGIyMThiZTQuLmIwYmNmYjEgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvbGxjX2NfYWMuYworKysgYi9uZXQvbGxjL2xsY19jX2FjLmMKQEAgLTYwLDIzICs2MCwxMCBAQAogCiBpbnQgbGxjX2Nvbm5fYWNfY29ubl9pbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWludCByYyA9IC1FTk9UQ09OTjsKLQl1OCBkc2FwOwotCXN0cnVjdCBsbGNfc2FwICpzYXA7CisJc3RydWN0IGxsY19jb25uX3N0YXRlX2V2ICpldiA9IGxsY19jb25uX2V2KHNrYik7CiAKLQlsbGNfcGR1X2RlY29kZV9kc2FwKHNrYiwgJmRzYXApOwotCXNhcCA9IGxsY19zYXBfZmluZChkc2FwKTsKLQlpZiAoc2FwKSB7Ci0JCXN0cnVjdCBsbGNfY29ubl9zdGF0ZV9ldiAqZXYgPSBsbGNfY29ubl9ldihza2IpOwotCQlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7Ci0KLQkJbGxjX3BkdV9kZWNvZGVfc2Eoc2tiLCBsbGMtPmRhZGRyLm1hYyk7Ci0JCWxsY19wZHVfZGVjb2RlX2RhKHNrYiwgbGxjLT5sYWRkci5tYWMpOwotCQlsbGMtPmRldiA9IHNrYi0+ZGV2OwotCQlldi0+aW5kX3ByaW0gPSBMTENfQ09OTl9QUklNOwotCQlyYyA9IDA7Ci0JfQotCXJldHVybiByYzsKKwlldi0+aW5kX3ByaW0gPSBMTENfQ09OTl9QUklNOworCXJldHVybiAwOwogfQogCiBpbnQgbGxjX2Nvbm5fYWNfY29ubl9jb25maXJtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTEyMCwxMCArMTA3LDggQEAKIAkJCXJlYXNvbiA9IExMQ19ESVNDX1JFQVNPTl9SWF9ESVNDX0NNRF9QRFU7CiAJfSBlbHNlIGlmIChldi0+dHlwZSA9PSBMTENfQ09OTl9FVl9UWVBFX0FDS19UTVIpCiAJCXJlYXNvbiA9IExMQ19ESVNDX1JFQVNPTl9BQ0tfVE1SX0VYUDsKLQllbHNlIHsKLQkJcmVhc29uID0gMDsKKwllbHNlCiAJCXJjID0gLUVJTlZBTDsKLQl9CiAJaWYgKCFyYykgewogCQlldi0+cmVhc29uICAgPSByZWFzb247CiAJCWV2LT5pbmRfcHJpbSA9IExMQ19ESVNDX1BSSU07CkBAIC0xNjAsOSArMTQ1LDYgQEAKIAkJCSAgIExMQ19VX1BEVV9DTUQocGR1KSA9PSBMTENfMl9QRFVfQ01EX1NBQk1FKSB7CiAJCQlyZWFzb24gPSBMTENfUkVTRVRfUkVBU09OX1JFTU9URTsKIAkJCXJjID0gMDsKLQkJfSBlbHNlIHsKLQkJCXJlYXNvbiA9IDA7Ci0JCQlyYyAgPSAxOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgTExDX0NPTk5fRVZfVFlQRV9BQ0tfVE1SOgpAQCAtMTcyLDggKzE1NCw3IEBACiAJCWlmIChsbGMtPnJldHJ5X2NvdW50ID4gbGxjLT5uMikgewogCQkJcmVhc29uID0gTExDX1JFU0VUX1JFQVNPTl9MT0NBTDsKIAkJCXJjID0gMDsKLQkJfSBlbHNlCi0JCQlyYyA9IDE7CisJCX0KIAkJYnJlYWs7CiAJfQogCWlmICghcmMpIHsKQEAgLTIxNywxOCArMTk4LDE3IEBACiBpbnQgbGxjX2Nvbm5fYWNfc2VuZF9kaXNjX2NtZF9wX3NldF94KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgcmMgPSAtRU5PQlVGUzsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZSgpOworCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLT5kZXYpOwogCiAJaWYgKG5za2IpIHsKLQkJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwogCQlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLT5zYXA7CiAKLQkJbnNrYi0+ZGV2ID0gbGxjLT5kZXY7CiAJCWxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC0+bGFkZHIubHNhcCwKIAkJCQkgICAgbGxjLT5kYWRkci5sc2FwLCBMTENfUERVX0NNRCk7CiAJCWxsY19wZHVfaW5pdF9hc19kaXNjX2NtZChuc2tiLCAxKTsKIAkJcmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy0+ZGV2LT5kZXZfYWRkciwgbGxjLT5kYWRkci5tYWMpOwotCQlpZiAocmMpCisJCWlmICh1bmxpa2VseShyYykpCiAJCQlnb3RvIGZyZWU7CiAJCWxsY19jb25uX3NlbmRfcGR1KHNrLCBuc2tiKTsKIAkJbGxjX2Nvbm5fYWNfc2V0X3BfZmxhZ18xKHNrLCBza2IpOwpAQCAtMjQzLDIwICsyMjMsMTkgQEAKIGludCBsbGNfY29ubl9hY19zZW5kX2RtX3JzcF9mX3NldF9wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgcmMgPSAtRU5PQlVGUzsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZSgpOworCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLT5kZXYpOwogCiAJaWYgKG5za2IpIHsKLQkJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwogCQlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLT5zYXA7CiAJCXU4IGZfYml0OwogCi0JCW5za2ItPmRldiA9IGxsYy0+ZGV2OwogCQlsbGNfcGR1X2RlY29kZV9wZl9iaXQoc2tiLCAmZl9iaXQpOwogCQlsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtPmxhZGRyLmxzYXAsCiAJCQkJICAgIGxsYy0+ZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApOwogCQlsbGNfcGR1X2luaXRfYXNfZG1fcnNwKG5za2IsIGZfYml0KTsKIAkJcmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy0+ZGV2LT5kZXZfYWRkciwgbGxjLT5kYWRkci5tYWMpOwotCQlpZiAocmMpCisJCWlmICh1bmxpa2VseShyYykpCiAJCQlnb3RvIGZyZWU7CiAJCWxsY19jb25uX3NlbmRfcGR1KHNrLCBuc2tiKTsKIAl9CkBAIC0yNzAsMTkgKzI0OSwxNyBAQAogaW50IGxsY19jb25uX2FjX3NlbmRfZG1fcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCByYyA9IC1FTk9CVUZTOwotCXN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKCk7CisJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOworCXN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtPmRldik7CiAKIAlpZiAobnNrYikgewotCQlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CiAJCXN0cnVjdCBsbGNfc2FwICpzYXAgPSBsbGMtPnNhcDsKLQkJdTggZl9iaXQgPSAxOwogCi0JCW5za2ItPmRldiA9IGxsYy0+ZGV2OwogCQlsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtPmxhZGRyLmxzYXAsCiAJCQkJICAgIGxsYy0+ZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApOwotCQlsbGNfcGR1X2luaXRfYXNfZG1fcnNwKG5za2IsIGZfYml0KTsKKwkJbGxjX3BkdV9pbml0X2FzX2RtX3JzcChuc2tiLCAxKTsKIAkJcmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy0+ZGV2LT5kZXZfYWRkciwgbGxjLT5kYWRkci5tYWMpOwotCQlpZiAocmMpCisJCWlmICh1bmxpa2VseShyYykpCiAJCQlnb3RvIGZyZWU7CiAJCWxsY19jb25uX3NlbmRfcGR1KHNrLCBuc2tiKTsKIAl9CkBAIC0zMDYsMTcgKzI4MywxNiBAQAogCQlsbGNfcGR1X2RlY29kZV9wZl9iaXQoc2tiLCAmZl9iaXQpOwogCWVsc2UKIAkJZl9iaXQgPSAwOwotCW5za2IgPSBsbGNfYWxsb2NfZnJhbWUoKTsKKwluc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtPmRldik7CiAJaWYgKG5za2IpIHsKIAkJc3RydWN0IGxsY19zYXAgKnNhcCA9IGxsYy0+c2FwOwogCi0JCW5za2ItPmRldiA9IGxsYy0+ZGV2OwogCQlsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtPmxhZGRyLmxzYXAsCiAJCQkJICAgIGxsYy0+ZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApOwogCQlsbGNfcGR1X2luaXRfYXNfZnJtcl9yc3AobnNrYiwgcGR1LCBmX2JpdCwgbGxjLT52UywKIAkJCQkJIGxsYy0+dlIsIElOQ09SUkVDVCk7CiAJCXJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtPmRldi0+ZGV2X2FkZHIsIGxsYy0+ZGFkZHIubWFjKTsKLQkJaWYgKHJjKQorCQlpZiAodW5saWtlbHkocmMpKQogCQkJZ290byBmcmVlOwogCQlsbGNfY29ubl9zZW5kX3BkdShzaywgbnNrYik7CiAJfQpAQCAtMzMwLDIxICszMDYsMTkgQEAKIGludCBsbGNfY29ubl9hY19yZXNlbmRfZnJtcl9yc3BfZl9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IHJjID0gLUVOT0JVRlM7Ci0Jc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoKTsKKwlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CisJc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy0+ZGV2KTsKIAogCWlmIChuc2tiKSB7Ci0JCXU4IGZfYml0ID0gMDsKLQkJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwogCQlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLT5zYXA7CiAJCXN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSAoc3RydWN0IGxsY19wZHVfc24gKikmbGxjLT5yeF9wZHVfaGRyOwogCi0JCW5za2ItPmRldiA9IGxsYy0+ZGV2OwogCQlsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtPmxhZGRyLmxzYXAsCiAJCQkJICAgIGxsYy0+ZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApOwotCQlsbGNfcGR1X2luaXRfYXNfZnJtcl9yc3AobnNrYiwgcGR1LCBmX2JpdCwgbGxjLT52UywKKwkJbGxjX3BkdV9pbml0X2FzX2ZybXJfcnNwKG5za2IsIHBkdSwgMCwgbGxjLT52UywKIAkJCQkJIGxsYy0+dlIsIElOQ09SUkVDVCk7CiAJCXJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtPmRldi0+ZGV2X2FkZHIsIGxsYy0+ZGFkZHIubWFjKTsKLQkJaWYgKHJjKQorCQlpZiAodW5saWtlbHkocmMpKQogCQkJZ290byBmcmVlOwogCQlsbGNfY29ubl9zZW5kX3BkdShzaywgbnNrYik7CiAJfQpAQCAtMzYwLDIxICszMzQsMjAgQEAKIAl1OCBmX2JpdDsKIAlpbnQgcmMgPSAtRU5PQlVGUzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKKwlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CiAKIAlsbGNfcGR1X2RlY29kZV9wZl9iaXQoc2tiLCAmZl9iaXQpOwotCW5za2IgPSBsbGNfYWxsb2NfZnJhbWUoKTsKKwluc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtPmRldik7CiAJaWYgKG5za2IpIHsKLQkJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwogCQlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLT5zYXA7CiAJCXN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSBsbGNfcGR1X3NuX2hkcihza2IpOwogCi0JCW5za2ItPmRldiA9IGxsYy0+ZGV2OwogCQlsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtPmxhZGRyLmxzYXAsCiAJCQkJICAgIGxsYy0+ZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApOwogCQlsbGNfcGR1X2luaXRfYXNfZnJtcl9yc3AobnNrYiwgcGR1LCBmX2JpdCwgbGxjLT52UywKIAkJCQkJIGxsYy0+dlIsIElOQ09SUkVDVCk7CiAJCXJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtPmRldi0+ZGV2X2FkZHIsIGxsYy0+ZGFkZHIubWFjKTsKLQkJaWYgKHJjKQorCQlpZiAodW5saWtlbHkocmMpKQogCQkJZ290byBmcmVlOwogCQlsbGNfY29ubl9zZW5kX3BkdShzaywgbnNrYik7CiAJfQpAQCAtMzk1LDcgKzM2OCw3IEBACiAJCQkgICAgbGxjLT5kYWRkci5sc2FwLCBMTENfUERVX0NNRCk7CiAJbGxjX3BkdV9pbml0X2FzX2lfY21kKHNrYiwgMSwgbGxjLT52UywgbGxjLT52Uik7CiAJcmMgPSBsbGNfbWFjX2hkcl9pbml0KHNrYiwgbGxjLT5kZXYtPmRldl9hZGRyLCBsbGMtPmRhZGRyLm1hYyk7Ci0JaWYgKCFyYykgeworCWlmIChsaWtlbHkoIXJjKSkgewogCQlsbGNfY29ubl9zZW5kX3BkdShzaywgc2tiKTsKIAkJbGxjX2Nvbm5fYWNfaW5jX3ZzX2J5XzEoc2ssIHNrYik7CiAJfQpAQCAtNDEyLDcgKzM4NSw3IEBACiAJCQkgICAgbGxjLT5kYWRkci5sc2FwLCBMTENfUERVX0NNRCk7CiAJbGxjX3BkdV9pbml0X2FzX2lfY21kKHNrYiwgMCwgbGxjLT52UywgbGxjLT52Uik7CiAJcmMgPSBsbGNfbWFjX2hkcl9pbml0KHNrYiwgbGxjLT5kZXYtPmRldl9hZGRyLCBsbGMtPmRhZGRyLm1hYyk7Ci0JaWYgKCFyYykgeworCWlmIChsaWtlbHkoIXJjKSkgewogCQlsbGNfY29ubl9zZW5kX3BkdShzaywgc2tiKTsKIAkJbGxjX2Nvbm5fYWNfaW5jX3ZzX2J5XzEoc2ssIHNrYik7CiAJfQpAQCAtNDI5LDcgKzQwMiw3IEBACiAJCQkgICAgbGxjLT5kYWRkci5sc2FwLCBMTENfUERVX0NNRCk7CiAJbGxjX3BkdV9pbml0X2FzX2lfY21kKHNrYiwgMCwgbGxjLT52UywgbGxjLT52Uik7CiAJcmMgPSBsbGNfbWFjX2hkcl9pbml0KHNrYiwgbGxjLT5kZXYtPmRldl9hZGRyLCBsbGMtPmRhZGRyLm1hYyk7Ci0JaWYgKCFyYykgeworCWlmIChsaWtlbHkoIXJjKSkgewogCQlsbGNfY29ubl9zZW5kX3BkdShzaywgc2tiKTsKIAkJbGxjX2Nvbm5fYWNfaW5jX3ZzX2J5XzEoc2ssIHNrYik7CiAJfQpAQCAtNDUxLDE4ICs0MjQsMTcgQEAKIAl1OCBucjsKIAlzdHJ1Y3QgbGxjX3BkdV9zbiAqcGR1ID0gbGxjX3BkdV9zbl9oZHIoc2tiKTsKIAlpbnQgcmMgPSAtRU5PQlVGUzsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZSgpOworCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLT5kZXYpOwogCiAJaWYgKG5za2IpIHsKLQkJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwogCQlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLT5zYXA7CiAKLQkJbnNrYi0+ZGV2ID0gbGxjLT5kZXY7CiAJCWxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC0+bGFkZHIubHNhcCwKIAkJCQkgICAgbGxjLT5kYWRkci5sc2FwLCBMTENfUERVX1JTUCk7CiAJCWxsY19wZHVfaW5pdF9hc19ycl9yc3AobnNrYiwgMCwgbGxjLT52Uik7CiAJCXJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtPmRldi0+ZGV2X2FkZHIsIGxsYy0+ZGFkZHIubWFjKTsKLQkJaWYgKCFyYykKKwkJaWYgKGxpa2VseSghcmMpKQogCQkJbGxjX2Nvbm5fc2VuZF9wZHUoc2ssIG5za2IpOwogCQllbHNlCiAJCQlrZnJlZV9za2Ioc2tiKTsKQEAgLTQ4NywxOCArNDU5LDE3IEBACiBpbnQgbGxjX2Nvbm5fYWNfc2VuZF9yZWpfY21kX3Bfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCByYyA9IC1FTk9CVUZTOwotCXN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKCk7CisJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOworCXN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtPmRldik7CiAKIAlpZiAobnNrYikgewotCQlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CiAJCXN0cnVjdCBsbGNfc2FwICpzYXAgPSBsbGMtPnNhcDsKIAotCQluc2tiLT5kZXYgPSBsbGMtPmRldjsKIAkJbGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLT5sYWRkci5sc2FwLAogCQkJCSAgICBsbGMtPmRhZGRyLmxzYXAsIExMQ19QRFVfQ01EKTsKIAkJbGxjX3BkdV9pbml0X2FzX3Jlal9jbWQobnNrYiwgMSwgbGxjLT52Uik7CiAJCXJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtPmRldi0+ZGV2X2FkZHIsIGxsYy0+ZGFkZHIubWFjKTsKLQkJaWYgKHJjKQorCQlpZiAodW5saWtlbHkocmMpKQogCQkJZ290byBmcmVlOwogCQlsbGNfY29ubl9zZW5kX3BkdShzaywgbnNrYik7CiAJfQpAQCAtNTEyLDE5ICs0ODMsMTcgQEAKIGludCBsbGNfY29ubl9hY19zZW5kX3Jlal9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IHJjID0gLUVOT0JVRlM7Ci0Jc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoKTsKKwlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CisJc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy0+ZGV2KTsKIAogCWlmIChuc2tiKSB7Ci0JCXU4IGZfYml0ID0gMTsKLQkJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwogCQlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLT5zYXA7CiAKLQkJbnNrYi0+ZGV2ID0gbGxjLT5kZXY7CiAJCWxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1MsIHNhcC0+bGFkZHIubHNhcCwKIAkJCQkgICAgbGxjLT5kYWRkci5sc2FwLCBMTENfUERVX1JTUCk7Ci0JCWxsY19wZHVfaW5pdF9hc19yZWpfcnNwKG5za2IsIGZfYml0LCBsbGMtPnZSKTsKKwkJbGxjX3BkdV9pbml0X2FzX3Jlal9yc3AobnNrYiwgMSwgbGxjLT52Uik7CiAJCXJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtPmRldi0+ZGV2X2FkZHIsIGxsYy0+ZGFkZHIubWFjKTsKLQkJaWYgKHJjKQorCQlpZiAodW5saWtlbHkocmMpKQogCQkJZ290byBmcmVlOwogCQlsbGNfY29ubl9zZW5kX3BkdShzaywgbnNrYik7CiAJfQpAQCAtNTM4LDE5ICs1MDcsMTcgQEAKIGludCBsbGNfY29ubl9hY19zZW5kX3Jlal94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IHJjID0gLUVOT0JVRlM7Ci0Jc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoKTsKKwlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CisJc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy0+ZGV2KTsKIAogCWlmIChuc2tiKSB7Ci0JCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKIAkJc3RydWN0IGxsY19zYXAgKnNhcCA9IGxsYy0+c2FwOwotCQl1OCBmX2JpdCA9IDA7CiAKLQkJbnNrYi0+ZGV2ID0gbGxjLT5kZXY7CiAJCWxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1MsIHNhcC0+bGFkZHIubHNhcCwKIAkJCQkgICAgbGxjLT5kYWRkci5sc2FwLCBMTENfUERVX1JTUCk7Ci0JCWxsY19wZHVfaW5pdF9hc19yZWpfcnNwKG5za2IsIGZfYml0LCBsbGMtPnZSKTsKKwkJbGxjX3BkdV9pbml0X2FzX3Jlal9yc3AobnNrYiwgMCwgbGxjLT52Uik7CiAJCXJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtPmRldi0+ZGV2X2FkZHIsIGxsYy0+ZGFkZHIubWFjKTsKLQkJaWYgKHJjKQorCQlpZiAodW5saWtlbHkocmMpKQogCQkJZ290byBmcmVlOwogCQlsbGNfY29ubl9zZW5kX3BkdShzaywgbnNrYik7CiAJfQpAQCAtNTY0LDE4ICs1MzEsMTcgQEAKIGludCBsbGNfY29ubl9hY19zZW5kX3Jucl9jbWRfcF9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IHJjID0gLUVOT0JVRlM7Ci0Jc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoKTsKKwlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CisJc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy0+ZGV2KTsKIAogCWlmIChuc2tiKSB7Ci0JCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKIAkJc3RydWN0IGxsY19zYXAgKnNhcCA9IGxsYy0+c2FwOwogCi0JCW5za2ItPmRldiA9IGxsYy0+ZGV2OwogCQlsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9TLCBzYXAtPmxhZGRyLmxzYXAsCiAJCQkJICAgIGxsYy0+ZGFkZHIubHNhcCwgTExDX1BEVV9DTUQpOwogCQlsbGNfcGR1X2luaXRfYXNfcm5yX2NtZChuc2tiLCAxLCBsbGMtPnZSKTsKIAkJcmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy0+ZGV2LT5kZXZfYWRkciwgbGxjLT5kYWRkci5tYWMpOwotCQlpZiAocmMpCisJCWlmICh1bmxpa2VseShyYykpCiAJCQlnb3RvIGZyZWU7CiAJCWxsY19jb25uX3NlbmRfcGR1KHNrLCBuc2tiKTsKIAl9CkBAIC01ODksMTkgKzU1NSwxNyBAQAogaW50IGxsY19jb25uX2FjX3NlbmRfcm5yX3JzcF9mX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgcmMgPSAtRU5PQlVGUzsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZSgpOworCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLT5kZXYpOwogCiAJaWYgKG5za2IpIHsKLQkJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwogCQlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLT5zYXA7Ci0JCXU4IGZfYml0ID0gMTsKIAotCQluc2tiLT5kZXYgPSBsbGMtPmRldjsKIAkJbGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLT5sYWRkci5sc2FwLAogCQkJCSAgICBsbGMtPmRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTsKLQkJbGxjX3BkdV9pbml0X2FzX3Jucl9yc3AobnNrYiwgZl9iaXQsIGxsYy0+dlIpOworCQlsbGNfcGR1X2luaXRfYXNfcm5yX3JzcChuc2tiLCAxLCBsbGMtPnZSKTsKIAkJcmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy0+ZGV2LT5kZXZfYWRkciwgbGxjLT5kYWRkci5tYWMpOwotCQlpZiAocmMpCisJCWlmICh1bmxpa2VseShyYykpCiAJCQlnb3RvIGZyZWU7CiAJCWxsY19jb25uX3NlbmRfcGR1KHNrLCBuc2tiKTsKIAl9CkBAIC02MTUsMTkgKzU3OSwxNyBAQAogaW50IGxsY19jb25uX2FjX3NlbmRfcm5yX3h4eF94X3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgcmMgPSAtRU5PQlVGUzsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZSgpOworCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLT5kZXYpOwogCiAJaWYgKG5za2IpIHsKLQkJdTggZl9iaXQgPSAwOwotCQlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CiAJCXN0cnVjdCBsbGNfc2FwICpzYXAgPSBsbGMtPnNhcDsKIAotCQluc2tiLT5kZXYgPSBsbGMtPmRldjsKIAkJbGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLT5sYWRkci5sc2FwLAogCQkJCSAgICBsbGMtPmRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTsKLQkJbGxjX3BkdV9pbml0X2FzX3Jucl9yc3AobnNrYiwgZl9iaXQsIGxsYy0+dlIpOworCQlsbGNfcGR1X2luaXRfYXNfcm5yX3JzcChuc2tiLCAwLCBsbGMtPnZSKTsKIAkJcmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy0+ZGV2LT5kZXZfYWRkciwgbGxjLT5kYWRkci5tYWMpOwotCQlpZiAocmMpCisJCWlmICh1bmxpa2VseShyYykpCiAJCQlnb3RvIGZyZWU7CiAJCWxsY19jb25uX3NlbmRfcGR1KHNrLCBuc2tiKTsKIAl9CkBAIC02NDUsNyArNjA3LDcgQEAKIAlpZiAoIWxsYy0+cmVtb3RlX2J1c3lfZmxhZykgewogCQlsbGMtPnJlbW90ZV9idXN5X2ZsYWcgPSAxOwogCQltb2RfdGltZXIoJmxsYy0+YnVzeV9zdGF0ZV90aW1lci50aW1lciwKLQkJCSBqaWZmaWVzICsgbGxjLT5idXN5X3N0YXRlX3RpbWVyLmV4cGlyZSAqIEhaKTsKKwkJCSBqaWZmaWVzICsgbGxjLT5idXN5X3N0YXRlX3RpbWVyLmV4cGlyZSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNjUzLDE4ICs2MTUsMTcgQEAKIGludCBsbGNfY29ubl9hY19vcHRfc2VuZF9ybnJfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCByYyA9IC1FTk9CVUZTOwotCXN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKCk7CisJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOworCXN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtPmRldik7CiAKIAlpZiAobnNrYikgewotCQlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CiAJCXN0cnVjdCBsbGNfc2FwICpzYXAgPSBsbGMtPnNhcDsKIAotCQluc2tiLT5kZXYgPSBsbGMtPmRldjsKIAkJbGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLT5sYWRkci5sc2FwLAogCQkJCSAgICBsbGMtPmRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTsKIAkJbGxjX3BkdV9pbml0X2FzX3Jucl9yc3AobnNrYiwgMCwgbGxjLT52Uik7CiAJCXJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtPmRldi0+ZGV2X2FkZHIsIGxsYy0+ZGFkZHIubWFjKTsKLQkJaWYgKHJjKQorCQlpZiAodW5saWtlbHkocmMpKQogCQkJZ290byBmcmVlOwogCQlsbGNfY29ubl9zZW5kX3BkdShzaywgbnNrYik7CiAJfQpAQCAtNjc4LDE4ICs2MzksMTcgQEAKIGludCBsbGNfY29ubl9hY19zZW5kX3JyX2NtZF9wX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgcmMgPSAtRU5PQlVGUzsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZSgpOworCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLT5kZXYpOwogCiAJaWYgKG5za2IpIHsKLQkJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwogCQlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLT5zYXA7CiAKLQkJbnNrYi0+ZGV2ID0gbGxjLT5kZXY7CiAJCWxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1MsIHNhcC0+bGFkZHIubHNhcCwKIAkJCQkgICAgbGxjLT5kYWRkci5sc2FwLCBMTENfUERVX0NNRCk7CiAJCWxsY19wZHVfaW5pdF9hc19ycl9jbWQobnNrYiwgMSwgbGxjLT52Uik7CiAJCXJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtPmRldi0+ZGV2X2FkZHIsIGxsYy0+ZGFkZHIubWFjKTsKLQkJaWYgKHJjKQorCQlpZiAodW5saWtlbHkocmMpKQogCQkJZ290byBmcmVlOwogCQlsbGNfY29ubl9zZW5kX3BkdShzaywgbnNrYik7CiAJfQpAQCAtNzAzLDE5ICs2NjMsMTggQEAKIGludCBsbGNfY29ubl9hY19zZW5kX3JyX3JzcF9mX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgcmMgPSAtRU5PQlVGUzsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZSgpOworCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLT5kZXYpOwogCiAJaWYgKG5za2IpIHsKLQkJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwogCQlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLT5zYXA7CiAJCXU4IGZfYml0ID0gMTsKIAotCQluc2tiLT5kZXYgPSBsbGMtPmRldjsKIAkJbGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLT5sYWRkci5sc2FwLAogCQkJCSAgICBsbGMtPmRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTsKIAkJbGxjX3BkdV9pbml0X2FzX3JyX3JzcChuc2tiLCBmX2JpdCwgbGxjLT52Uik7CiAJCXJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtPmRldi0+ZGV2X2FkZHIsIGxsYy0+ZGFkZHIubWFjKTsKLQkJaWYgKHJjKQorCQlpZiAodW5saWtlbHkocmMpKQogCQkJZ290byBmcmVlOwogCQlsbGNfY29ubl9zZW5kX3BkdShzaywgbnNrYik7CiAJfQpAQCAtNzI5LDE5ICs2ODgsMTcgQEAKIGludCBsbGNfY29ubl9hY19zZW5kX2Fja19yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IHJjID0gLUVOT0JVRlM7Ci0Jc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoKTsKKwlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CisJc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy0+ZGV2KTsKIAogCWlmIChuc2tiKSB7Ci0JCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKIAkJc3RydWN0IGxsY19zYXAgKnNhcCA9IGxsYy0+c2FwOwotCQl1OCBmX2JpdCA9IDE7CiAKLQkJbnNrYi0+ZGV2ID0gbGxjLT5kZXY7CiAJCWxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1MsIHNhcC0+bGFkZHIubHNhcCwKIAkJCQkgICAgbGxjLT5kYWRkci5sc2FwLCBMTENfUERVX1JTUCk7Ci0JCWxsY19wZHVfaW5pdF9hc19ycl9yc3AobnNrYiwgZl9iaXQsIGxsYy0+dlIpOworCQlsbGNfcGR1X2luaXRfYXNfcnJfcnNwKG5za2IsIDEsIGxsYy0+dlIpOwogCQlyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLT5kZXYtPmRldl9hZGRyLCBsbGMtPmRhZGRyLm1hYyk7Ci0JCWlmIChyYykKKwkJaWYgKHVubGlrZWx5KHJjKSkKIAkJCWdvdG8gZnJlZTsKIAkJbGxjX2Nvbm5fc2VuZF9wZHUoc2ssIG5za2IpOwogCX0KQEAgLTc1NSwxOCArNzEyLDE3IEBACiBpbnQgbGxjX2Nvbm5fYWNfc2VuZF9ycl94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IHJjID0gLUVOT0JVRlM7Ci0Jc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoKTsKKwlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CisJc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy0+ZGV2KTsKIAogCWlmIChuc2tiKSB7Ci0JCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKIAkJc3RydWN0IGxsY19zYXAgKnNhcCA9IGxsYy0+c2FwOwogCi0JCW5za2ItPmRldiA9IGxsYy0+ZGV2OwogCQlsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9TLCBzYXAtPmxhZGRyLmxzYXAsCiAJCQkJICAgIGxsYy0+ZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApOwogCQlsbGNfcGR1X2luaXRfYXNfcnJfcnNwKG5za2IsIDAsIGxsYy0+dlIpOwogCQlyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLT5kZXYtPmRldl9hZGRyLCBsbGMtPmRhZGRyLm1hYyk7Ci0JCWlmIChyYykKKwkJaWYgKHVubGlrZWx5KHJjKSkKIAkJCWdvdG8gZnJlZTsKIAkJbGxjX2Nvbm5fc2VuZF9wZHUoc2ssIG5za2IpOwogCX0KQEAgLTc4MCwxOCArNzM2LDE3IEBACiBpbnQgbGxjX2Nvbm5fYWNfc2VuZF9hY2tfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCByYyA9IC1FTk9CVUZTOwotCXN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKCk7CisJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOworCXN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtPmRldik7CiAKIAlpZiAobnNrYikgewotCQlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CiAJCXN0cnVjdCBsbGNfc2FwICpzYXAgPSBsbGMtPnNhcDsKIAotCQluc2tiLT5kZXYgPSBsbGMtPmRldjsKIAkJbGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLT5sYWRkci5sc2FwLAogCQkJCSAgICBsbGMtPmRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTsKIAkJbGxjX3BkdV9pbml0X2FzX3JyX3JzcChuc2tiLCAwLCBsbGMtPnZSKTsKIAkJcmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy0+ZGV2LT5kZXZfYWRkciwgbGxjLT5kYWRkci5tYWMpOwotCQlpZiAocmMpCisJCWlmICh1bmxpa2VseShyYykpCiAJCQlnb3RvIGZyZWU7CiAJCWxsY19jb25uX3NlbmRfcGR1KHNrLCBuc2tiKTsKIAl9CkBAIC04MTUsOCArNzcwLDggQEAKIGludCBsbGNfY29ubl9hY19zZW5kX3NhYm1lX2NtZF9wX3NldF94KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgcmMgPSAtRU5PQlVGUzsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZSgpOwogCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLT5kZXYpOwogCiAJaWYgKG5za2IpIHsKIAkJc3RydWN0IGxsY19zYXAgKnNhcCA9IGxsYy0+c2FwOwpAQCAtODI0LDEyICs3NzksMTEgQEAKIAogCQlpZiAobGxjLT5kZXYtPmZsYWdzICYgSUZGX0xPT1BCQUNLKQogCQkJZG1hYyA9IGxsYy0+ZGV2LT5kZXZfYWRkcjsKLQkJbnNrYi0+ZGV2ID0gbGxjLT5kZXY7CiAJCWxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC0+bGFkZHIubHNhcCwKIAkJCQkgICAgbGxjLT5kYWRkci5sc2FwLCBMTENfUERVX0NNRCk7CiAJCWxsY19wZHVfaW5pdF9hc19zYWJtZV9jbWQobnNrYiwgMSk7CiAJCXJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtPmRldi0+ZGV2X2FkZHIsIGRtYWMpOwotCQlpZiAocmMpCisJCWlmICh1bmxpa2VseShyYykpCiAJCQlnb3RvIGZyZWU7CiAJCWxsY19jb25uX3NlbmRfcGR1KHNrLCBuc2tiKTsKIAkJbGxjX2Nvbm5fc2V0X3BfZmxhZyhzaywgMSk7CkBAIC04NDUsMTEgKzc5OSwxMSBAQAogewogCXU4IGZfYml0OwogCWludCByYyA9IC1FTk9CVUZTOwotCXN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKCk7CisJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOworCXN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtPmRldik7CiAKIAlsbGNfcGR1X2RlY29kZV9wZl9iaXQoc2tiLCAmZl9iaXQpOwogCWlmIChuc2tiKSB7Ci0JCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKIAkJc3RydWN0IGxsY19zYXAgKnNhcCA9IGxsYy0+c2FwOwogCiAJCW5za2ItPmRldiA9IGxsYy0+ZGV2OwpAQCAtODU3LDcgKzgxMSw3IEBACiAJCQkJICAgIGxsYy0+ZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApOwogCQlsbGNfcGR1X2luaXRfYXNfdWFfcnNwKG5za2IsIGZfYml0KTsKIAkJcmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy0+ZGV2LT5kZXZfYWRkciwgbGxjLT5kYWRkci5tYWMpOwotCQlpZiAocmMpCisJCWlmICh1bmxpa2VseShyYykpCiAJCQlnb3RvIGZyZWU7CiAJCWxsY19jb25uX3NlbmRfcGR1KHNrLCBuc2tiKTsKIAl9CkBAIC04ODYsNyArODQwLDcgQEAKIAogCWxsY19jb25uX3NldF9wX2ZsYWcoc2ssIDEpOwogCW1vZF90aW1lcigmbGxjLT5wZl9jeWNsZV90aW1lci50aW1lciwKLQkJICBqaWZmaWVzICsgbGxjLT5wZl9jeWNsZV90aW1lci5leHBpcmUgKiBIWik7CisJCSAgamlmZmllcyArIGxsYy0+cGZfY3ljbGVfdGltZXIuZXhwaXJlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTU3LDcgKzkxMSw3IEBACiAJCQkgICAgbGxjLT5kYWRkci5sc2FwLCBMTENfUERVX1JTUCk7CiAJbGxjX3BkdV9pbml0X2FzX2lfY21kKHNrYiwgbGxjLT5hY2tfcGYsIGxsYy0+dlMsIGxsYy0+dlIpOwogCXJjID0gbGxjX21hY19oZHJfaW5pdChza2IsIGxsYy0+ZGV2LT5kZXZfYWRkciwgbGxjLT5kYWRkci5tYWMpOwotCWlmICghcmMpIHsKKwlpZiAobGlrZWx5KCFyYykpIHsKIAkJbGxjX2Nvbm5fc2VuZF9wZHUoc2ssIHNrYik7CiAJCWxsY19jb25uX2FjX2luY192c19ieV8xKHNrLCBza2IpOwogCX0KQEAgLTEwMDEsMTggKzk1NSwxNyBAQAogCQkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgcmMgPSAtRU5PQlVGUzsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZSgpOworCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLT5kZXYpOwogCiAJaWYgKG5za2IpIHsKLQkJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwogCQlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLT5zYXA7CiAKLQkJbnNrYi0+ZGV2ID0gbGxjLT5kZXY7CiAJCWxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1MsIHNhcC0+bGFkZHIubHNhcCwKIAkJCQkgICAgbGxjLT5kYWRkci5sc2FwLCBMTENfUERVX1JTUCk7CiAJCWxsY19wZHVfaW5pdF9hc19ycl9yc3AobnNrYiwgbGxjLT5hY2tfcGYsIGxsYy0+dlIpOwogCQlyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLT5kZXYtPmRldl9hZGRyLCBsbGMtPmRhZGRyLm1hYyk7Ci0JCWlmIChyYykKKwkJaWYgKHVubGlrZWx5KHJjKSkKIAkJCWdvdG8gZnJlZTsKIAkJbGxjX2Nvbm5fc2VuZF9wZHUoc2ssIG5za2IpOwogCX0KQEAgLTExNjUsNyArMTExOCw3IEBACiB7CiAJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwogCi0JbW9kX3RpbWVyKCZsbGMtPmFja190aW1lci50aW1lciwgamlmZmllcyArIGxsYy0+YWNrX3RpbWVyLmV4cGlyZSAqIEhaKTsKKwltb2RfdGltZXIoJmxsYy0+YWNrX3RpbWVyLnRpbWVyLCBqaWZmaWVzICsgbGxjLT5hY2tfdGltZXIuZXhwaXJlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTE3NCw3ICsxMTI3LDcgQEAKIAlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CiAKIAltb2RfdGltZXIoJmxsYy0+cmVqX3NlbnRfdGltZXIudGltZXIsCi0JCSAgamlmZmllcyArIGxsYy0+cmVqX3NlbnRfdGltZXIuZXhwaXJlICogSFopOworCQkgIGppZmZpZXMgKyBsbGMtPnJlal9zZW50X3RpbWVyLmV4cGlyZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExODUsNyArMTEzOCw3IEBACiAKIAlpZiAoIXRpbWVyX3BlbmRpbmcoJmxsYy0+YWNrX3RpbWVyLnRpbWVyKSkKIAkJbW9kX3RpbWVyKCZsbGMtPmFja190aW1lci50aW1lciwKLQkJCSAgamlmZmllcyArIGxsYy0+YWNrX3RpbWVyLmV4cGlyZSAqIEhaKTsKKwkJCSAgamlmZmllcyArIGxsYy0+YWNrX3RpbWVyLmV4cGlyZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyMzMsNyArMTE4Niw3IEBACiAJCX0KIAkJaWYgKHVuYWNrZWQpCiAJCQltb2RfdGltZXIoJmxsYy0+YWNrX3RpbWVyLnRpbWVyLAotCQkJCSAgamlmZmllcyArIGxsYy0+YWNrX3RpbWVyLmV4cGlyZSAqIEhaKTsKKwkJCQkgIGppZmZpZXMgKyBsbGMtPmFja190aW1lci5leHBpcmUpOwogCX0gZWxzZSBpZiAobGxjLT5mYWlsZWRfZGF0YV9yZXEpIHsKIAkJdTggZl9iaXQ7CiAKQEAgLTEzNTQsMTMgKzEzMDcsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGxsY19jb25uX2FjX2luY192c19ieV8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgbGxjX2Nvbm5fYWNfaW5jX3ZzX2J5XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWxsY19zayhzayktPnZTID0gKGxsY19zayhzayktPnZTICsgMSkgJSAxMjg7CiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgbGxjX2Nvbm5fcGZfY3ljbGVfdG1yX2NiKHVuc2lnbmVkIGxvbmcgdGltZW91dF9kYXRhKQorc3RhdGljIHZvaWQgbGxjX2Nvbm5fdG1yX2NvbW1vbl9jYih1bnNpZ25lZCBsb25nIHRpbWVvdXRfZGF0YSwgdTggdHlwZSkKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKil0aW1lb3V0X2RhdGE7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGFsbG9jX3NrYigwLCBHRlBfQVRPTUlDKTsKQEAgLTEzNjksNTkgKzEzMjIsMzEgQEAKIAlpZiAoc2tiKSB7CiAJCXN0cnVjdCBsbGNfY29ubl9zdGF0ZV9ldiAqZXYgPSBsbGNfY29ubl9ldihza2IpOwogCi0JCXNrYi0+c2sgID0gc2s7Ci0JCWV2LT50eXBlID0gTExDX0NPTk5fRVZfVFlQRV9QX1RNUjsKKwkJc2tiX3NldF9vd25lcl9yKHNrYiwgc2spOworCQlldi0+dHlwZSA9IHR5cGU7CiAJCWxsY19wcm9jZXNzX3Rtcl9ldihzaywgc2tiKTsKIAl9CiAJYmhfdW5sb2NrX3NvY2soc2spOwogfQogCit2b2lkIGxsY19jb25uX3BmX2N5Y2xlX3Rtcl9jYih1bnNpZ25lZCBsb25nIHRpbWVvdXRfZGF0YSkKK3sKKwlsbGNfY29ubl90bXJfY29tbW9uX2NiKHRpbWVvdXRfZGF0YSwgTExDX0NPTk5fRVZfVFlQRV9QX1RNUik7Cit9CisKIHZvaWQgbGxjX2Nvbm5fYnVzeV90bXJfY2IodW5zaWduZWQgbG9uZyB0aW1lb3V0X2RhdGEpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopdGltZW91dF9kYXRhOwotCXN0cnVjdCBza19idWZmICpza2IgPSBhbGxvY19za2IoMCwgR0ZQX0FUT01JQyk7Ci0KLQliaF9sb2NrX3NvY2soc2spOwotCWlmIChza2IpIHsKLQkJc3RydWN0IGxsY19jb25uX3N0YXRlX2V2ICpldiA9IGxsY19jb25uX2V2KHNrYik7Ci0KLQkJc2tiLT5zayAgPSBzazsKLQkJZXYtPnR5cGUgPSBMTENfQ09OTl9FVl9UWVBFX0JVU1lfVE1SOwotCQlsbGNfcHJvY2Vzc190bXJfZXYoc2ssIHNrYik7Ci0JfQotCWJoX3VubG9ja19zb2NrKHNrKTsKKwlsbGNfY29ubl90bXJfY29tbW9uX2NiKHRpbWVvdXRfZGF0YSwgTExDX0NPTk5fRVZfVFlQRV9CVVNZX1RNUik7CiB9CiAKIHZvaWQgbGxjX2Nvbm5fYWNrX3Rtcl9jYih1bnNpZ25lZCBsb25nIHRpbWVvdXRfZGF0YSkKIHsKLQlzdHJ1Y3Qgc29jayogc2sgPSAoc3RydWN0IHNvY2sgKil0aW1lb3V0X2RhdGE7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGFsbG9jX3NrYigwLCBHRlBfQVRPTUlDKTsKLQotCWJoX2xvY2tfc29jayhzayk7Ci0JaWYgKHNrYikgewotCQlzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfZXYgKmV2ID0gbGxjX2Nvbm5fZXYoc2tiKTsKLQotCQlza2ItPnNrICA9IHNrOwotCQlldi0+dHlwZSA9IExMQ19DT05OX0VWX1RZUEVfQUNLX1RNUjsKLQkJbGxjX3Byb2Nlc3NfdG1yX2V2KHNrLCBza2IpOwotCX0KLQliaF91bmxvY2tfc29jayhzayk7CisJbGxjX2Nvbm5fdG1yX2NvbW1vbl9jYih0aW1lb3V0X2RhdGEsIExMQ19DT05OX0VWX1RZUEVfQUNLX1RNUik7CiB9CiAKIHZvaWQgbGxjX2Nvbm5fcmVqX3Rtcl9jYih1bnNpZ25lZCBsb25nIHRpbWVvdXRfZGF0YSkKIHsKLQlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKil0aW1lb3V0X2RhdGE7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGFsbG9jX3NrYigwLCBHRlBfQVRPTUlDKTsKLQotCWJoX2xvY2tfc29jayhzayk7Ci0JaWYgKHNrYikgewotCQlzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfZXYgKmV2ID0gbGxjX2Nvbm5fZXYoc2tiKTsKLQotCQlza2ItPnNrICA9IHNrOwotCQlldi0+dHlwZSA9IExMQ19DT05OX0VWX1RZUEVfUkVKX1RNUjsKLQkJbGxjX3Byb2Nlc3NfdG1yX2V2KHNrLCBza2IpOwotCX0KLQliaF91bmxvY2tfc29jayhzayk7CisJbGxjX2Nvbm5fdG1yX2NvbW1vbl9jYih0aW1lb3V0X2RhdGEsIExMQ19DT05OX0VWX1RZUEVfUkVKX1RNUik7CiB9CiAKIGludCBsbGNfY29ubl9hY19yc3RfdnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfY19ldi5jIGIvbmV0L2xsYy9sbGNfY19ldi5jCmluZGV4IGQ1YmRiNTMuLmM1ZGVkYTIgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvbGxjX2NfZXYuYworKysgYi9uZXQvbGxjL2xsY19jX2V2LmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxuZXQvbGxjX2Nvbm4uaD4KICNpbmNsdWRlIDxuZXQvbGxjX3NhcC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bmV0L2xsY19jX2FjLmg+CiAjaW5jbHVkZSA8bmV0L2xsY19jX2V2Lmg+CiAjaW5jbHVkZSA8bmV0L2xsY19wZHUuaD4KIApAQCAtNDYsOCArNDcsNiBAQAogI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pCiAjZW5kaWYKIAotZXh0ZXJuIHUxNiBsbGNfY2lyY3VsYXJfYmV0d2Vlbih1OCBhLCB1OCBiLCB1OCBjKTsKLQogLyoqCiAgKglsbGNfdXRpbF9uc19pbnNpZGVfcnhfd2luZG93IC0gY2hlY2sgaWYgc2VxdWVuY2UgbnVtYmVyIGlzIGluIHJ4IHdpbmRvdwogICoJQG5zOiBzZXF1ZW5jZSBudW1iZXIgb2YgcmVjZWl2ZWQgcGR1LgpAQCAtOTksNyArOTgsNyBAQAogCiBpbnQgbGxjX2Nvbm5fZXZfY29ubl9yZXEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBsbGNfY29ubl9zdGF0ZV9ldiAqZXYgPSBsbGNfY29ubl9ldihza2IpOworCWNvbnN0IHN0cnVjdCBsbGNfY29ubl9zdGF0ZV9ldiAqZXYgPSBsbGNfY29ubl9ldihza2IpOwogCiAJcmV0dXJuIGV2LT5wcmltID09IExMQ19DT05OX1BSSU0gJiYKIAkgICAgICAgZXYtPnByaW1fdHlwZSA9PSBMTENfUFJJTV9UWVBFX1JFUSA/IDAgOiAxOwpAQCAtMTA3LDcgKzEwNiw3IEBACiAKIGludCBsbGNfY29ubl9ldl9kYXRhX3JlcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGxsY19jb25uX3N0YXRlX2V2ICpldiA9IGxsY19jb25uX2V2KHNrYik7CisJY29uc3Qgc3RydWN0IGxsY19jb25uX3N0YXRlX2V2ICpldiA9IGxsY19jb25uX2V2KHNrYik7CiAKIAlyZXR1cm4gZXYtPnByaW0gPT0gTExDX0RBVEFfUFJJTSAmJgogCSAgICAgICBldi0+cHJpbV90eXBlID09IExMQ19QUklNX1RZUEVfUkVRID8gMCA6IDE7CkBAIC0xMTUsNyArMTE0LDcgQEAKIAogaW50IGxsY19jb25uX2V2X2Rpc2NfcmVxKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfZXYgKmV2ID0gbGxjX2Nvbm5fZXYoc2tiKTsKKwljb25zdCBzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfZXYgKmV2ID0gbGxjX2Nvbm5fZXYoc2tiKTsKIAogCXJldHVybiBldi0+cHJpbSA9PSBMTENfRElTQ19QUklNICYmCiAJICAgICAgIGV2LT5wcmltX3R5cGUgPT0gTExDX1BSSU1fVFlQRV9SRVEgPyAwIDogMTsKQEAgLTEyMyw3ICsxMjIsNyBAQAogCiBpbnQgbGxjX2Nvbm5fZXZfcnN0X3JlcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGxsY19jb25uX3N0YXRlX2V2ICpldiA9IGxsY19jb25uX2V2KHNrYik7CisJY29uc3Qgc3RydWN0IGxsY19jb25uX3N0YXRlX2V2ICpldiA9IGxsY19jb25uX2V2KHNrYik7CiAKIAlyZXR1cm4gZXYtPnByaW0gPT0gTExDX1JFU0VUX1BSSU0gJiYKIAkgICAgICAgZXYtPnByaW1fdHlwZSA9PSBMTENfUFJJTV9UWVBFX1JFUSA/IDAgOiAxOwpAQCAtMTMxLDcgKzEzMCw3IEBACiAKIGludCBsbGNfY29ubl9ldl9sb2NhbF9idXN5X2RldGVjdGVkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfZXYgKmV2ID0gbGxjX2Nvbm5fZXYoc2tiKTsKKwljb25zdCBzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfZXYgKmV2ID0gbGxjX2Nvbm5fZXYoc2tiKTsKIAogCXJldHVybiBldi0+dHlwZSA9PSBMTENfQ09OTl9FVl9UWVBFX1NJTVBMRSAmJgogCSAgICAgICBldi0+cHJpbV90eXBlID09IExMQ19DT05OX0VWX0xPQ0FMX0JVU1lfREVURUNURUQgPyAwIDogMTsKQEAgLTEzOSw3ICsxMzgsNyBAQAogCiBpbnQgbGxjX2Nvbm5fZXZfbG9jYWxfYnVzeV9jbGVhcmVkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfZXYgKmV2ID0gbGxjX2Nvbm5fZXYoc2tiKTsKKwljb25zdCBzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfZXYgKmV2ID0gbGxjX2Nvbm5fZXYoc2tiKTsKIAogCXJldHVybiBldi0+dHlwZSA9PSBMTENfQ09OTl9FVl9UWVBFX1NJTVBMRSAmJgogCSAgICAgICBldi0+cHJpbV90eXBlID09IExMQ19DT05OX0VWX0xPQ0FMX0JVU1lfQ0xFQVJFRCA/IDAgOiAxOwpAQCAtMTUyLDcgKzE1MSw3IEBACiAKIGludCBsbGNfY29ubl9ldl9yeF9kaXNjX2NtZF9wYml0X3NldF94KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgbGxjX3BkdV91biAqcGR1ID0gbGxjX3BkdV91bl9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgbGxjX3BkdV91biAqcGR1ID0gbGxjX3BkdV91bl9oZHIoc2tiKTsKIAogCXJldHVybiBMTENfUERVX0lTX0NNRChwZHUpICYmIExMQ19QRFVfVFlQRV9JU19VKHBkdSkgJiYKIAkgICAgICAgTExDX1VfUERVX0NNRChwZHUpID09IExMQ18yX1BEVV9DTURfRElTQyA/IDAgOiAxOwpAQCAtMTYwLDcgKzE1OSw3IEBACiAKIGludCBsbGNfY29ubl9ldl9yeF9kbV9yc3BfZmJpdF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGxsY19wZHVfdW4gKnBkdSA9IGxsY19wZHVfdW5faGRyKHNrYik7CisJY29uc3Qgc3RydWN0IGxsY19wZHVfdW4gKnBkdSA9IGxsY19wZHVfdW5faGRyKHNrYik7CiAKIAlyZXR1cm4gTExDX1BEVV9JU19SU1AocGR1KSAmJiBMTENfUERVX1RZUEVfSVNfVShwZHUpICYmCiAJICAgICAgIExMQ19VX1BEVV9SU1AocGR1KSA9PSBMTENfMl9QRFVfUlNQX0RNID8gMCA6IDE7CkBAIC0xNjgsNyArMTY3LDcgQEAKIAogaW50IGxsY19jb25uX2V2X3J4X2ZybXJfcnNwX2ZiaXRfc2V0X3goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBsbGNfcGR1X3VuICpwZHUgPSBsbGNfcGR1X3VuX2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBsbGNfcGR1X3VuICpwZHUgPSBsbGNfcGR1X3VuX2hkcihza2IpOwogCiAJcmV0dXJuIExMQ19QRFVfSVNfUlNQKHBkdSkgJiYgTExDX1BEVV9UWVBFX0lTX1UocGR1KSAmJgogCSAgICAgICBMTENfVV9QRFVfUlNQKHBkdSkgPT0gTExDXzJfUERVX1JTUF9GUk1SID8gMCA6IDE7CkBAIC0xNzYsNyArMTc1LDcgQEAKIAogaW50IGxsY19jb25uX2V2X3J4X2lfY21kX3BiaXRfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSBsbGNfcGR1X3NuX2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSBsbGNfcGR1X3NuX2hkcihza2IpOwogCiAJcmV0dXJuIGxsY19jb25uX3NwYWNlKHNrLCBza2IpICYmCiAJICAgICAgIExMQ19QRFVfSVNfQ01EKHBkdSkgJiYgTExDX1BEVV9UWVBFX0lTX0kocGR1KSAmJgpAQCAtMTg2LDcgKzE4NSw3IEBACiAKIGludCBsbGNfY29ubl9ldl9yeF9pX2NtZF9wYml0X3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgbGxjX3BkdV9zbiAqcGR1ID0gbGxjX3BkdV9zbl9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgbGxjX3BkdV9zbiAqcGR1ID0gbGxjX3BkdV9zbl9oZHIoc2tiKTsKIAogCXJldHVybiBsbGNfY29ubl9zcGFjZShzaywgc2tiKSAmJgogCSAgICAgICBMTENfUERVX0lTX0NNRChwZHUpICYmIExMQ19QRFVfVFlQRV9JU19JKHBkdSkgJiYKQEAgLTE5Nyw5ICsxOTYsOSBAQAogaW50IGxsY19jb25uX2V2X3J4X2lfY21kX3BiaXRfc2V0XzBfdW5leHBkX25zKHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgbGxjX3BkdV9zbiAqcGR1ID0gbGxjX3BkdV9zbl9oZHIoc2tiKTsKLQl1OCB2ciA9IGxsY19zayhzayktPnZSOwotCXU4IG5zID0gTExDX0lfR0VUX05TKHBkdSk7CisJY29uc3Qgc3RydWN0IGxsY19wZHVfc24gKnBkdSA9IGxsY19wZHVfc25faGRyKHNrYik7CisJY29uc3QgdTggdnIgPSBsbGNfc2soc2spLT52UjsKKwljb25zdCB1OCBucyA9IExMQ19JX0dFVF9OUyhwZHUpOwogCiAJcmV0dXJuIExMQ19QRFVfSVNfQ01EKHBkdSkgJiYgTExDX1BEVV9UWVBFX0lTX0kocGR1KSAmJgogCSAgICAgICBMTENfSV9QRl9JU18wKHBkdSkgJiYgbnMgIT0gdnIgJiYKQEAgLTIwOSw5ICsyMDgsOSBAQAogaW50IGxsY19jb25uX2V2X3J4X2lfY21kX3BiaXRfc2V0XzFfdW5leHBkX25zKHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgbGxjX3BkdV9zbiAqcGR1ID0gbGxjX3BkdV9zbl9oZHIoc2tiKTsKLQl1OCB2ciA9IGxsY19zayhzayktPnZSOwotCXU4IG5zID0gTExDX0lfR0VUX05TKHBkdSk7CisJY29uc3Qgc3RydWN0IGxsY19wZHVfc24gKnBkdSA9IGxsY19wZHVfc25faGRyKHNrYik7CisJY29uc3QgdTggdnIgPSBsbGNfc2soc2spLT52UjsKKwljb25zdCB1OCBucyA9IExMQ19JX0dFVF9OUyhwZHUpOwogCiAJcmV0dXJuIExMQ19QRFVfSVNfQ01EKHBkdSkgJiYgTExDX1BEVV9UWVBFX0lTX0kocGR1KSAmJgogCSAgICAgICBMTENfSV9QRl9JU18xKHBkdSkgJiYgbnMgIT0gdnIgJiYKQEAgLTIyMSwxMCArMjIwLDExIEBACiBpbnQgbGxjX2Nvbm5fZXZfcnhfaV9jbWRfcGJpdF9zZXRfeF9pbnZhbF9ucyhzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgbGxjX3BkdV9zbiAqIHBkdSA9IGxsY19wZHVfc25faGRyKHNrYik7Ci0JdTggdnIgPSBsbGNfc2soc2spLT52UjsKLQl1OCBucyA9IExMQ19JX0dFVF9OUyhwZHUpOwotCXUxNiByYyA9IExMQ19QRFVfSVNfQ01EKHBkdSkgJiYgTExDX1BEVV9UWVBFX0lTX0kocGR1KSAmJiBucyAhPSB2ciAmJgorCWNvbnN0IHN0cnVjdCBsbGNfcGR1X3NuICogcGR1ID0gbGxjX3BkdV9zbl9oZHIoc2tiKTsKKwljb25zdCB1OCB2ciA9IGxsY19zayhzayktPnZSOworCWNvbnN0IHU4IG5zID0gTExDX0lfR0VUX05TKHBkdSk7CisJY29uc3QgdTE2IHJjID0gTExDX1BEVV9JU19DTUQocGR1KSAmJiBMTENfUERVX1RZUEVfSVNfSShwZHUpICYmCisJCW5zICE9IHZyICYmCiAJCSBsbGNfdXRpbF9uc19pbnNpZGVfcnhfd2luZG93KG5zLCB2ciwgbGxjX3NrKHNrKS0+cncpID8gMCA6IDE7CiAJaWYgKCFyYykKIAkJZHByaW50aygiJXM6IG1hdGNoZWQsIHN0YXRlPSVkLCBucz0lZCwgdnI9JWRcbiIsCkBAIC0yMzQsNyArMjM0LDcgQEAKIAogaW50IGxsY19jb25uX2V2X3J4X2lfcnNwX2ZiaXRfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSBsbGNfcGR1X3NuX2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSBsbGNfcGR1X3NuX2hkcihza2IpOwogCiAJcmV0dXJuIGxsY19jb25uX3NwYWNlKHNrLCBza2IpICYmCiAJICAgICAgIExMQ19QRFVfSVNfUlNQKHBkdSkgJiYgTExDX1BEVV9UWVBFX0lTX0kocGR1KSAmJgpAQCAtMjQ0LDcgKzI0NCw3IEBACiAKIGludCBsbGNfY29ubl9ldl9yeF9pX3JzcF9mYml0X3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgbGxjX3BkdV9zbiAqcGR1ID0gbGxjX3BkdV9zbl9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgbGxjX3BkdV9zbiAqcGR1ID0gbGxjX3BkdV9zbl9oZHIoc2tiKTsKIAogCXJldHVybiBMTENfUERVX0lTX1JTUChwZHUpICYmIExMQ19QRFVfVFlQRV9JU19JKHBkdSkgJiYKIAkgICAgICAgTExDX0lfUEZfSVNfMShwZHUpICYmCkBAIC0yNTMsNyArMjUzLDcgQEAKIAogaW50IGxsY19jb25uX2V2X3J4X2lfcnNwX2ZiaXRfc2V0X3goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSBsbGNfcGR1X3NuX2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSBsbGNfcGR1X3NuX2hkcihza2IpOwogCiAJcmV0dXJuIGxsY19jb25uX3NwYWNlKHNrLCBza2IpICYmCiAJICAgICAgIExMQ19QRFVfSVNfUlNQKHBkdSkgJiYgTExDX1BEVV9UWVBFX0lTX0kocGR1KSAmJgpAQCAtMjYzLDkgKzI2Myw5IEBACiBpbnQgbGxjX2Nvbm5fZXZfcnhfaV9yc3BfZmJpdF9zZXRfMF91bmV4cGRfbnMoc3RydWN0IHNvY2sgKnNrLAogCQkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSBsbGNfcGR1X3NuX2hkcihza2IpOwotCXU4IHZyID0gbGxjX3NrKHNrKS0+dlI7Ci0JdTggbnMgPSBMTENfSV9HRVRfTlMocGR1KTsKKwljb25zdCBzdHJ1Y3QgbGxjX3BkdV9zbiAqcGR1ID0gbGxjX3BkdV9zbl9oZHIoc2tiKTsKKwljb25zdCB1OCB2ciA9IGxsY19zayhzayktPnZSOworCWNvbnN0IHU4IG5zID0gTExDX0lfR0VUX05TKHBkdSk7CiAKIAlyZXR1cm4gTExDX1BEVV9JU19SU1AocGR1KSAmJiBMTENfUERVX1RZUEVfSVNfSShwZHUpICYmCiAJICAgICAgIExMQ19JX1BGX0lTXzAocGR1KSAmJiBucyAhPSB2ciAmJgpAQCAtMjc1LDkgKzI3NSw5IEBACiBpbnQgbGxjX2Nvbm5fZXZfcnhfaV9yc3BfZmJpdF9zZXRfMV91bmV4cGRfbnMoc3RydWN0IHNvY2sgKnNrLAogCQkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSBsbGNfcGR1X3NuX2hkcihza2IpOwotCXU4IHZyID0gbGxjX3NrKHNrKS0+dlI7Ci0JdTggbnMgPSBMTENfSV9HRVRfTlMocGR1KTsKKwljb25zdCBzdHJ1Y3QgbGxjX3BkdV9zbiAqcGR1ID0gbGxjX3BkdV9zbl9oZHIoc2tiKTsKKwljb25zdCB1OCB2ciA9IGxsY19zayhzayktPnZSOworCWNvbnN0IHU4IG5zID0gTExDX0lfR0VUX05TKHBkdSk7CiAKIAlyZXR1cm4gTExDX1BEVV9JU19SU1AocGR1KSAmJiBMTENfUERVX1RZUEVfSVNfSShwZHUpICYmCiAJICAgICAgIExMQ19JX1BGX0lTXzEocGR1KSAmJiBucyAhPSB2ciAmJgpAQCAtMjg3LDkgKzI4Nyw5IEBACiBpbnQgbGxjX2Nvbm5fZXZfcnhfaV9yc3BfZmJpdF9zZXRfeF91bmV4cGRfbnMoc3RydWN0IHNvY2sgKnNrLAogCQkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSBsbGNfcGR1X3NuX2hkcihza2IpOwotCXU4IHZyID0gbGxjX3NrKHNrKS0+dlI7Ci0JdTggbnMgPSBMTENfSV9HRVRfTlMocGR1KTsKKwljb25zdCBzdHJ1Y3QgbGxjX3BkdV9zbiAqcGR1ID0gbGxjX3BkdV9zbl9oZHIoc2tiKTsKKwljb25zdCB1OCB2ciA9IGxsY19zayhzayktPnZSOworCWNvbnN0IHU4IG5zID0gTExDX0lfR0VUX05TKHBkdSk7CiAKIAlyZXR1cm4gTExDX1BEVV9JU19SU1AocGR1KSAmJiBMTENfUERVX1RZUEVfSVNfSShwZHUpICYmIG5zICE9IHZyICYmCiAJICAgICAgICFsbGNfdXRpbF9uc19pbnNpZGVfcnhfd2luZG93KG5zLCB2ciwgbGxjX3NrKHNrKS0+cncpID8gMCA6IDE7CkBAIC0yOTgsMTAgKzI5OCwxMSBAQAogaW50IGxsY19jb25uX2V2X3J4X2lfcnNwX2ZiaXRfc2V0X3hfaW52YWxfbnMoc3RydWN0IHNvY2sgKnNrLAogCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGxsY19wZHVfc24gKnBkdSA9IGxsY19wZHVfc25faGRyKHNrYik7Ci0JdTggdnIgPSBsbGNfc2soc2spLT52UjsKLQl1OCBucyA9IExMQ19JX0dFVF9OUyhwZHUpOwotCXUxNiByYyA9IExMQ19QRFVfSVNfUlNQKHBkdSkgJiYgTExDX1BEVV9UWVBFX0lTX0kocGR1KSAmJiBucyAhPSB2ciAmJgorCWNvbnN0IHN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSBsbGNfcGR1X3NuX2hkcihza2IpOworCWNvbnN0IHU4IHZyID0gbGxjX3NrKHNrKS0+dlI7CisJY29uc3QgdTggbnMgPSBMTENfSV9HRVRfTlMocGR1KTsKKwljb25zdCB1MTYgcmMgPSBMTENfUERVX0lTX1JTUChwZHUpICYmIExMQ19QRFVfVFlQRV9JU19JKHBkdSkgJiYKKwkJbnMgIT0gdnIgJiYKIAkJIGxsY191dGlsX25zX2luc2lkZV9yeF93aW5kb3cobnMsIHZyLCBsbGNfc2soc2spLT5ydykgPyAwIDogMTsKIAlpZiAoIXJjKQogCQlkcHJpbnRrKCIlczogbWF0Y2hlZCwgc3RhdGU9JWQsIG5zPSVkLCB2cj0lZFxuIiwKQEAgLTMxMSw3ICszMTIsNyBAQAogCiBpbnQgbGxjX2Nvbm5fZXZfcnhfcmVqX2NtZF9wYml0X3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgbGxjX3BkdV9zbiAqcGR1ID0gbGxjX3BkdV9zbl9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgbGxjX3BkdV9zbiAqcGR1ID0gbGxjX3BkdV9zbl9oZHIoc2tiKTsKIAogCXJldHVybiBMTENfUERVX0lTX0NNRChwZHUpICYmIExMQ19QRFVfVFlQRV9JU19TKHBkdSkgJiYKIAkgICAgICAgTExDX1NfUEZfSVNfMChwZHUpICYmCkBAIC0zMjAsNyArMzIxLDcgQEAKIAogaW50IGxsY19jb25uX2V2X3J4X3Jlal9jbWRfcGJpdF9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGxsY19wZHVfc24gKnBkdSA9IGxsY19wZHVfc25faGRyKHNrYik7CisJY29uc3Qgc3RydWN0IGxsY19wZHVfc24gKnBkdSA9IGxsY19wZHVfc25faGRyKHNrYik7CiAKIAlyZXR1cm4gTExDX1BEVV9JU19DTUQocGR1KSAmJiBMTENfUERVX1RZUEVfSVNfUyhwZHUpICYmCiAJICAgICAgIExMQ19TX1BGX0lTXzEocGR1KSAmJgpAQCAtMzI5LDcgKzMzMCw3IEBACiAKIGludCBsbGNfY29ubl9ldl9yeF9yZWpfcnNwX2ZiaXRfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSBsbGNfcGR1X3NuX2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSBsbGNfcGR1X3NuX2hkcihza2IpOwogCiAJcmV0dXJuIExMQ19QRFVfSVNfUlNQKHBkdSkgJiYgTExDX1BEVV9UWVBFX0lTX1MocGR1KSAmJgogCSAgICAgICBMTENfU19QRl9JU18wKHBkdSkgJiYKQEAgLTMzOCw3ICszMzksNyBAQAogCiBpbnQgbGxjX2Nvbm5fZXZfcnhfcmVqX3JzcF9mYml0X3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgbGxjX3BkdV9zbiAqcGR1ID0gbGxjX3BkdV9zbl9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgbGxjX3BkdV9zbiAqcGR1ID0gbGxjX3BkdV9zbl9oZHIoc2tiKTsKIAogCXJldHVybiBMTENfUERVX0lTX1JTUChwZHUpICYmIExMQ19QRFVfVFlQRV9JU19TKHBkdSkgJiYKIAkgICAgICAgTExDX1NfUEZfSVNfMShwZHUpICYmCkBAIC0zNDcsNyArMzQ4LDcgQEAKIAogaW50IGxsY19jb25uX2V2X3J4X3Jlal9yc3BfZmJpdF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGxsY19wZHVfdW4gKnBkdSA9IGxsY19wZHVfdW5faGRyKHNrYik7CisJY29uc3Qgc3RydWN0IGxsY19wZHVfdW4gKnBkdSA9IGxsY19wZHVfdW5faGRyKHNrYik7CiAKIAlyZXR1cm4gTExDX1BEVV9JU19SU1AocGR1KSAmJiBMTENfUERVX1RZUEVfSVNfUyhwZHUpICYmCiAJICAgICAgIExMQ19TX1BEVV9SU1AocGR1KSA9PSBMTENfMl9QRFVfUlNQX1JFSiA/IDAgOiAxOwpAQCAtMzU1LDcgKzM1Niw3IEBACiAKIGludCBsbGNfY29ubl9ldl9yeF9ybnJfY21kX3BiaXRfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSBsbGNfcGR1X3NuX2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSBsbGNfcGR1X3NuX2hkcihza2IpOwogCiAJcmV0dXJuIExMQ19QRFVfSVNfQ01EKHBkdSkgJiYgTExDX1BEVV9UWVBFX0lTX1MocGR1KSAmJgogCSAgICAgICBMTENfU19QRl9JU18wKHBkdSkgJiYKQEAgLTM2NCw3ICszNjUsNyBAQAogCiBpbnQgbGxjX2Nvbm5fZXZfcnhfcm5yX2NtZF9wYml0X3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgbGxjX3BkdV9zbiAqcGR1ID0gbGxjX3BkdV9zbl9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgbGxjX3BkdV9zbiAqcGR1ID0gbGxjX3BkdV9zbl9oZHIoc2tiKTsKIAogCXJldHVybiBMTENfUERVX0lTX0NNRChwZHUpICYmIExMQ19QRFVfVFlQRV9JU19TKHBkdSkgJiYKIAkgICAgICAgTExDX1NfUEZfSVNfMShwZHUpICYmCkBAIC0zNzMsNyArMzc0LDcgQEAKIAogaW50IGxsY19jb25uX2V2X3J4X3Jucl9yc3BfZmJpdF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGxsY19wZHVfc24gKnBkdSA9IGxsY19wZHVfc25faGRyKHNrYik7CisJY29uc3Qgc3RydWN0IGxsY19wZHVfc24gKnBkdSA9IGxsY19wZHVfc25faGRyKHNrYik7CiAKIAlyZXR1cm4gTExDX1BEVV9JU19SU1AocGR1KSAmJiBMTENfUERVX1RZUEVfSVNfUyhwZHUpICYmCiAJICAgICAgIExMQ19TX1BGX0lTXzAocGR1KSAmJgpAQCAtMzgyLDcgKzM4Myw3IEBACiAKIGludCBsbGNfY29ubl9ldl9yeF9ybnJfcnNwX2ZiaXRfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSBsbGNfcGR1X3NuX2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSBsbGNfcGR1X3NuX2hkcihza2IpOwogCiAJcmV0dXJuIExMQ19QRFVfSVNfUlNQKHBkdSkgJiYgTExDX1BEVV9UWVBFX0lTX1MocGR1KSAmJgogCSAgICAgICBMTENfU19QRl9JU18xKHBkdSkgJiYKQEAgLTM5MSw3ICszOTIsNyBAQAogCiBpbnQgbGxjX2Nvbm5fZXZfcnhfcnJfY21kX3BiaXRfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSBsbGNfcGR1X3NuX2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSBsbGNfcGR1X3NuX2hkcihza2IpOwogCiAJcmV0dXJuIExMQ19QRFVfSVNfQ01EKHBkdSkgJiYgTExDX1BEVV9UWVBFX0lTX1MocGR1KSAmJgogCSAgICAgICBMTENfU19QRl9JU18wKHBkdSkgJiYKQEAgLTQwMCw3ICs0MDEsNyBAQAogCiBpbnQgbGxjX2Nvbm5fZXZfcnhfcnJfY21kX3BiaXRfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSBsbGNfcGR1X3NuX2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSBsbGNfcGR1X3NuX2hkcihza2IpOwogCiAJcmV0dXJuIExMQ19QRFVfSVNfQ01EKHBkdSkgJiYgTExDX1BEVV9UWVBFX0lTX1MocGR1KSAmJgogCSAgICAgICBMTENfU19QRl9JU18xKHBkdSkgJiYKQEAgLTQwOSw3ICs0MTAsNyBAQAogCiBpbnQgbGxjX2Nvbm5fZXZfcnhfcnJfcnNwX2ZiaXRfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSBsbGNfcGR1X3NuX2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSBsbGNfcGR1X3NuX2hkcihza2IpOwogCiAJcmV0dXJuIGxsY19jb25uX3NwYWNlKHNrLCBza2IpICYmCiAJICAgICAgIExMQ19QRFVfSVNfUlNQKHBkdSkgJiYgTExDX1BEVV9UWVBFX0lTX1MocGR1KSAmJgpAQCAtNDE5LDcgKzQyMCw3IEBACiAKIGludCBsbGNfY29ubl9ldl9yeF9ycl9yc3BfZmJpdF9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGxsY19wZHVfc24gKnBkdSA9IGxsY19wZHVfc25faGRyKHNrYik7CisJY29uc3Qgc3RydWN0IGxsY19wZHVfc24gKnBkdSA9IGxsY19wZHVfc25faGRyKHNrYik7CiAKIAlyZXR1cm4gbGxjX2Nvbm5fc3BhY2Uoc2ssIHNrYikgJiYKIAkgICAgICAgTExDX1BEVV9JU19SU1AocGR1KSAmJiBMTENfUERVX1RZUEVfSVNfUyhwZHUpICYmCkBAIC00MjksNyArNDMwLDcgQEAKIAogaW50IGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgbGxjX3BkdV91biAqcGR1ID0gbGxjX3BkdV91bl9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgbGxjX3BkdV91biAqcGR1ID0gbGxjX3BkdV91bl9oZHIoc2tiKTsKIAogCXJldHVybiBMTENfUERVX0lTX0NNRChwZHUpICYmIExMQ19QRFVfVFlQRV9JU19VKHBkdSkgJiYKIAkgICAgICAgTExDX1VfUERVX0NNRChwZHUpID09IExMQ18yX1BEVV9DTURfU0FCTUUgPyAwIDogMTsKQEAgLTQ0Niw3ICs0NDcsNyBAQAogaW50IGxsY19jb25uX2V2X3J4X3h4eF9jbWRfcGJpdF9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJdTE2IHJjID0gMTsKLQlzdHJ1Y3QgbGxjX3BkdV9zbiAqcGR1ID0gbGxjX3BkdV9zbl9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgbGxjX3BkdV9zbiAqcGR1ID0gbGxjX3BkdV9zbl9oZHIoc2tiKTsKIAogCWlmIChMTENfUERVX0lTX0NNRChwZHUpKSB7CiAJCWlmIChMTENfUERVX1RZUEVfSVNfSShwZHUpIHx8IExMQ19QRFVfVFlQRV9JU19TKHBkdSkpIHsKQEAgLTQ2MSw3ICs0NjIsNyBAQAogaW50IGxsY19jb25uX2V2X3J4X3h4eF9jbWRfcGJpdF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJdTE2IHJjID0gMTsKLQlzdHJ1Y3QgbGxjX3BkdV91biAqcGR1ID0gbGxjX3BkdV91bl9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgbGxjX3BkdV91biAqcGR1ID0gbGxjX3BkdV91bl9oZHIoc2tiKTsKIAogCWlmIChMTENfUERVX0lTX0NNRChwZHUpKSB7CiAJCWlmIChMTENfUERVX1RZUEVfSVNfSShwZHUpIHx8IExMQ19QRFVfVFlQRV9JU19TKHBkdSkpCkBAIC00NzcsMzIgKzQ3OCwxMCBAQAogCXJldHVybiByYzsKIH0KIAotaW50IGxsY19jb25uX2V2X3J4X3h4eF9yc3BfZmJpdF9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JdTE2IHJjID0gMTsKLQlzdHJ1Y3QgbGxjX3BkdV9zbiAqcGR1ID0gbGxjX3BkdV9zbl9oZHIoc2tiKTsKLQotCWlmIChMTENfUERVX0lTX1JTUChwZHUpKSB7Ci0JCWlmIChMTENfUERVX1RZUEVfSVNfSShwZHUpIHx8IExMQ19QRFVfVFlQRV9JU19TKHBkdSkpIHsKLQkJCWlmIChMTENfSV9QRl9JU18xKHBkdSkpCi0JCQkJcmMgPSAwOwotCQl9IGVsc2UgaWYgKExMQ19QRFVfVFlQRV9JU19VKHBkdSkpCi0JCQlzd2l0Y2ggKExMQ19VX1BEVV9SU1AocGR1KSkgewotCQkJY2FzZSBMTENfMl9QRFVfUlNQX1VBOgotCQkJY2FzZSBMTENfMl9QRFVfUlNQX0RNOgotCQkJY2FzZSBMTENfMl9QRFVfUlNQX0ZSTVI6Ci0JCQkJaWYgKExMQ19VX1BGX0lTXzEocGR1KSkKLQkJCQkJcmMgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCX0KLQlyZXR1cm4gcmM7Ci19Ci0KIGludCBsbGNfY29ubl9ldl9yeF94eHhfcnNwX2ZiaXRfc2V0X3goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXUxNiByYyA9IDE7Ci0Jc3RydWN0IGxsY19wZHVfdW4gKnBkdSA9IGxsY19wZHVfdW5faGRyKHNrYik7CisJY29uc3Qgc3RydWN0IGxsY19wZHVfdW4gKnBkdSA9IGxsY19wZHVfdW5faGRyKHNrYik7CiAKIAlpZiAoTExDX1BEVV9JU19SU1AocGR1KSkgewogCQlpZiAoTExDX1BEVV9UWVBFX0lTX0kocGR1KSB8fCBMTENfUERVX1RZUEVfSVNfUyhwZHUpKQpAQCAtNTI0LDkgKzUwMyw5IEBACiAJCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXUxNiByYyA9IDE7Ci0Jc3RydWN0IGxsY19wZHVfc24gKnBkdSA9IGxsY19wZHVfc25faGRyKHNrYik7Ci0JdTggdnMgPSBsbGNfc2soc2spLT52UzsKLQl1OCBuciA9IExMQ19JX0dFVF9OUihwZHUpOworCWNvbnN0IHN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSBsbGNfcGR1X3NuX2hkcihza2IpOworCWNvbnN0IHU4IHZzID0gbGxjX3NrKHNrKS0+dlM7CisJY29uc3QgdTggbnIgPSBMTENfSV9HRVRfTlIocGR1KTsKIAogCWlmIChMTENfUERVX0lTX0NNRChwZHUpICYmCiAJICAgIChMTENfUERVX1RZUEVfSVNfSShwZHUpIHx8IExMQ19QRFVfVFlQRV9JU19TKHBkdSkpICYmCkBAIC01NDIsOSArNTIxLDkgQEAKIAkJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJdTE2IHJjID0gMTsKLQlzdHJ1Y3QgbGxjX3BkdV9zbiAqcGR1ID0gbGxjX3BkdV9zbl9oZHIoc2tiKTsKLQl1OCB2cyA9IGxsY19zayhzayktPnZTOwotCXU4IG5yID0gTExDX0lfR0VUX05SKHBkdSk7CisJY29uc3Qgc3RydWN0IGxsY19wZHVfc24gKnBkdSA9IGxsY19wZHVfc25faGRyKHNrYik7CisJY29uc3QgdTggdnMgPSBsbGNfc2soc2spLT52UzsKKwljb25zdCB1OCBuciA9IExMQ19JX0dFVF9OUihwZHUpOwogCiAJaWYgKExMQ19QRFVfSVNfUlNQKHBkdSkgJiYKIAkgICAgKExMQ19QRFVfVFlQRV9JU19JKHBkdSkgfHwgTExDX1BEVV9UWVBFX0lTX1MocGR1KSkgJiYKQEAgLTU2MywyOCArNTQyLDI4IEBACiAKIGludCBsbGNfY29ubl9ldl9wX3Rtcl9leHAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBsbGNfY29ubl9zdGF0ZV9ldiAqZXYgPSBsbGNfY29ubl9ldihza2IpOworCWNvbnN0IHN0cnVjdCBsbGNfY29ubl9zdGF0ZV9ldiAqZXYgPSBsbGNfY29ubl9ldihza2IpOwogCiAJcmV0dXJuIGV2LT50eXBlICE9IExMQ19DT05OX0VWX1RZUEVfUF9UTVI7CiB9CiAKIGludCBsbGNfY29ubl9ldl9hY2tfdG1yX2V4cChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGxsY19jb25uX3N0YXRlX2V2ICpldiA9IGxsY19jb25uX2V2KHNrYik7CisJY29uc3Qgc3RydWN0IGxsY19jb25uX3N0YXRlX2V2ICpldiA9IGxsY19jb25uX2V2KHNrYik7CiAKIAlyZXR1cm4gZXYtPnR5cGUgIT0gTExDX0NPTk5fRVZfVFlQRV9BQ0tfVE1SOwogfQogCiBpbnQgbGxjX2Nvbm5fZXZfcmVqX3Rtcl9leHAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBsbGNfY29ubl9zdGF0ZV9ldiAqZXYgPSBsbGNfY29ubl9ldihza2IpOworCWNvbnN0IHN0cnVjdCBsbGNfY29ubl9zdGF0ZV9ldiAqZXYgPSBsbGNfY29ubl9ldihza2IpOwogCiAJcmV0dXJuIGV2LT50eXBlICE9IExMQ19DT05OX0VWX1RZUEVfUkVKX1RNUjsKIH0KIAogaW50IGxsY19jb25uX2V2X2J1c3lfdG1yX2V4cChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGxsY19jb25uX3N0YXRlX2V2ICpldiA9IGxsY19jb25uX2V2KHNrYik7CisJY29uc3Qgc3RydWN0IGxsY19jb25uX3N0YXRlX2V2ICpldiA9IGxsY19jb25uX2V2KHNrYik7CiAKIAlyZXR1cm4gZXYtPnR5cGUgIT0gTExDX0NPTk5fRVZfVFlQRV9CVVNZX1RNUjsKIH0KQEAgLTU5Niw3ICs1NzUsNyBAQAogCiBpbnQgbGxjX2Nvbm5fZXZfdHhfYnVmZmVyX2Z1bGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBsbGNfY29ubl9zdGF0ZV9ldiAqZXYgPSBsbGNfY29ubl9ldihza2IpOworCWNvbnN0IHN0cnVjdCBsbGNfY29ubl9zdGF0ZV9ldiAqZXYgPSBsbGNfY29ubl9ldihza2IpOwogCiAJcmV0dXJuIGV2LT50eXBlID09IExMQ19DT05OX0VWX1RZUEVfU0lNUExFICYmCiAJICAgICAgIGV2LT5wcmltX3R5cGUgPT0gTExDX0NPTk5fRVZfVFhfQlVGRl9GVUxMID8gMCA6IDE7CmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19jb25uLmMgYi9uZXQvbGxjL2xsY19jb25uLmMKaW5kZXggNGM2NDRiYy4uYzc2MWMxNSAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfY29ubi5jCisrKyBiL25ldC9sbGMvbGxjX2Nvbm4uYwpAQCAtNDAsNiArNDAsMTEgQEAKIC8qIE9mZnNldCB0YWJsZSBvbiBjb25uZWN0aW9uIHN0YXRlcyB0cmFuc2l0aW9uIGRpYWdyYW0gKi8KIHN0YXRpYyBpbnQgbGxjX29mZnNldF90YWJsZVtOQlJfQ09OTl9TVEFURVNdW05CUl9DT05OX0VWXTsKIAoraW50IHN5c2N0bF9sbGMyX2Fja190aW1lb3V0ID0gTExDMl9BQ0tfVElNRSAqIEhaOworaW50IHN5c2N0bF9sbGMyX3BfdGltZW91dCA9IExMQzJfUF9USU1FICogSFo7CitpbnQgc3lzY3RsX2xsYzJfcmVqX3RpbWVvdXQgPSBMTEMyX1JFSl9USU1FICogSFo7CitpbnQgc3lzY3RsX2xsYzJfYnVzeV90aW1lb3V0ID0gTExDMl9CVVNZX1RJTUUgKiBIWjsKKwogLyoqCiAgKglsbGNfY29ubl9zdGF0ZV9wcm9jZXNzIC0gc2VuZHMgZXZlbnQgdG8gY29ubmVjdGlvbiBzdGF0ZSBtYWNoaW5lCiAgKglAc2s6IGNvbm5lY3Rpb24KQEAgLTUzLDcgKzU4LDcgQEAKIGludCBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgcmM7Ci0Jc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOworCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrYi0+c2spOwogCXN0cnVjdCBsbGNfY29ubl9zdGF0ZV9ldiAqZXYgPSBsbGNfY29ubl9ldihza2IpOwogCiAJLyoKQEAgLTYzLDEzICs2OCwxNiBAQAogCSAqLwogCXNrYl9nZXQoc2tiKTsKIAlldi0+aW5kX3ByaW0gPSBldi0+Y2ZtX3ByaW0gPSAwOwotCXJjID0gbGxjX2Nvbm5fc2VydmljZShzaywgc2tiKTsgLyogc2VuZGluZyBldmVudCB0byBzdGF0ZSBtYWNoaW5lICovCi0JaWYgKHJjKSB7CisJLyoKKwkgKiBTZW5kIGV2ZW50IHRvIHN0YXRlIG1hY2hpbmUKKwkgKi8KKwlyYyA9IGxsY19jb25uX3NlcnZpY2Uoc2tiLT5zaywgc2tiKTsKKwlpZiAodW5saWtlbHkocmMgIT0gMCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogbGxjX2Nvbm5fc2VydmljZSBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCWdvdG8gb3V0X2tmcmVlX3NrYjsKIAl9CiAKLQlpZiAoIWV2LT5pbmRfcHJpbSAmJiAhZXYtPmNmbV9wcmltKSB7CisJaWYgKHVubGlrZWx5KCFldi0+aW5kX3ByaW0gJiYgIWV2LT5jZm1fcHJpbSkpIHsKIAkJLyogaW5kaWNhdGUgb3IgY29uZmlybSBub3QgcmVxdWlyZWQgKi8KIAkJLyogWFhYIHRoaXMgaXMgbm90IHZlcnkgcHJldHR5LCBwZXJoYXBzIHdlIHNob3VsZCBzdG9yZQogCQkgKiBYWFggaW5kaWNhdGUvY29uZmlybS1uZWVkZWQgc3RhdGUgaW4gdGhlIGxsY19jb25uX3N0YXRlX2V2CkBAIC04MCwxMyArODgsMTMgQEAKIAkJZ290byBvdXRfc2tiX3B1dDsKIAl9CiAKLQlpZiAoZXYtPmluZF9wcmltICYmIGV2LT5jZm1fcHJpbSkgLyogUGFyYW5vaWEgKi8KKwlpZiAodW5saWtlbHkoZXYtPmluZF9wcmltICYmIGV2LT5jZm1fcHJpbSkpIC8qIFBhcmFub2lhICovCiAJCXNrYl9nZXQoc2tiKTsKIAogCXN3aXRjaCAoZXYtPmluZF9wcmltKSB7CiAJY2FzZSBMTENfREFUQV9QUklNOgotCQlsbGNfc2F2ZV9wcmltaXRpdmUoc2tiLCBMTENfREFUQV9QUklNKTsKLQkJaWYgKHNvY2tfcXVldWVfcmN2X3NrYihzaywgc2tiKSkgeworCQlsbGNfc2F2ZV9wcmltaXRpdmUoc2ssIHNrYiwgTExDX0RBVEFfUFJJTSk7CisJCWlmICh1bmxpa2VseShzb2NrX3F1ZXVlX3Jjdl9za2Ioc2ssIHNrYikpKSB7CiAJCQkvKgogCQkJICogc2hvdWxkbid0IGhhcHBlbgogCQkJICovCkBAIC05NSwxMyArMTAzLDE0IEBACiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJfQogCQlicmVhazsKLQljYXNlIExMQ19DT05OX1BSSU06IHsKLQkJc3RydWN0IHNvY2sgKnBhcmVudCA9IHNrYi0+c2s7Ci0KLQkJc2tiLT5zayA9IHNrOwotCQlza2JfcXVldWVfdGFpbCgmcGFyZW50LT5za19yZWNlaXZlX3F1ZXVlLCBza2IpOwotCQlzay0+c2tfc3RhdGVfY2hhbmdlKHBhcmVudCk7Ci0JfQorCWNhc2UgTExDX0NPTk5fUFJJTToKKwkJLyoKKwkJICogQ2FuJ3QgYmUgc29ja19xdWV1ZV9yY3Zfc2tiLCBiZWNhdXNlIHdlIGhhdmUgdG8gbGVhdmUgdGhlCisJCSAqIHNrYi0+c2sgcG9pbnRpbmcgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgc3RydWN0IHNvY2sgaW4KKwkJICogbGxjX2Nvbm5faGFuZGxlci4gLWFjbWUKKwkJICovCisJCXNrYl9xdWV1ZV90YWlsKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKTsKKwkJc2stPnNrX3N0YXRlX2NoYW5nZShzayk7CiAJCWJyZWFrOwogCWNhc2UgTExDX0RJU0NfUFJJTToKIAkJc29ja19ob2xkKHNrKTsKQEAgLTExMSw4ICsxMjAsOCBAQAogCQkJc2stPnNrX3NvY2tldC0+c3RhdGUgID0gU1NfVU5DT05ORUNURUQ7CiAJCQlzay0+c2tfc3RhdGUgICAgICAgICAgPSBUQ1BfQ0xPU0U7CiAJCQlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkgewotCQkJCXNrLT5za19zdGF0ZV9jaGFuZ2Uoc2spOwogCQkJCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfREVBRCk7CisJCQkJc2stPnNrX3N0YXRlX2NoYW5nZShzayk7CiAJCQl9CiAJCX0KIAkJa2ZyZWVfc2tiKHNrYik7CkBAIC00NjUsNyArNDc0LDcgQEAKIH0KIAogLyoqCi0gKglsbGNfbG9va3VwX2VzdGFibGlzaGVkIC0gRmluZHMgY29ubmVjdGlvbiBmb3IgdGhlIHJlbW90ZS9sb2NhbCBzYXAvbWFjCisgKglfX2xsY19sb29rdXBfZXN0YWJsaXNoZWQgLSBGaW5kcyBjb25uZWN0aW9uIGZvciB0aGUgcmVtb3RlL2xvY2FsIHNhcC9tYWMKICAqCUBzYXA6IFNBUAogICoJQGRhZGRyOiBhZGRyZXNzIG9mIHJlbW90ZSBMTEMgKE1BQyArIFNBUCkKICAqCUBsYWRkcjogYWRkcmVzcyBvZiBsb2NhbCBMTEMgKE1BQyArIFNBUCkKQEAgLTQ3MywxNCArNDgyLDE2IEBACiAgKglTZWFyY2ggY29ubmVjdGlvbiBsaXN0IG9mIHRoZSBTQVAgYW5kIGZpbmRzIGNvbm5lY3Rpb24gdXNpbmcgdGhlIHJlbW90ZQogICoJbWFjLCByZW1vdGUgc2FwLCBsb2NhbCBtYWMsIGFuZCBsb2NhbCBzYXAuIFJldHVybnMgcG9pbnRlciBmb3IKICAqCWNvbm5lY3Rpb24gZm91bmQsICVOVUxMIG90aGVyd2lzZS4KKyAqCUNhbGxlciBoYXMgdG8gbWFrZSBzdXJlIGxvY2FsX2JoIGlzIGRpc2FibGVkLgogICovCi1zdHJ1Y3Qgc29jayAqbGxjX2xvb2t1cF9lc3RhYmxpc2hlZChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3QgbGxjX2FkZHIgKmRhZGRyLAotCQkJCSAgICBzdHJ1Y3QgbGxjX2FkZHIgKmxhZGRyKQorc3RhdGljIHN0cnVjdCBzb2NrICpfX2xsY19sb29rdXBfZXN0YWJsaXNoZWQoc3RydWN0IGxsY19zYXAgKnNhcCwKKwkJCQkJICAgICBzdHJ1Y3QgbGxjX2FkZHIgKmRhZGRyLAorCQkJCQkgICAgIHN0cnVjdCBsbGNfYWRkciAqbGFkZHIpCiB7CiAJc3RydWN0IHNvY2sgKnJjOwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCi0JcmVhZF9sb2NrX2JoKCZzYXAtPnNrX2xpc3QubG9jayk7CisJcmVhZF9sb2NrKCZzYXAtPnNrX2xpc3QubG9jayk7CiAJc2tfZm9yX2VhY2gocmMsIG5vZGUsICZzYXAtPnNrX2xpc3QubGlzdCkgewogCQlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhyYyk7CiAKQEAgLTQ5NCwxMCArNTA1LDIyIEBACiAJfQogCXJjID0gTlVMTDsKIGZvdW5kOgotCXJlYWRfdW5sb2NrX2JoKCZzYXAtPnNrX2xpc3QubG9jayk7CisJcmVhZF91bmxvY2soJnNhcC0+c2tfbGlzdC5sb2NrKTsKIAlyZXR1cm4gcmM7CiB9CiAKK3N0cnVjdCBzb2NrICpsbGNfbG9va3VwX2VzdGFibGlzaGVkKHN0cnVjdCBsbGNfc2FwICpzYXAsCisJCQkJICAgIHN0cnVjdCBsbGNfYWRkciAqZGFkZHIsCisJCQkJICAgIHN0cnVjdCBsbGNfYWRkciAqbGFkZHIpCit7CisJc3RydWN0IHNvY2sgKnNrOworCisJbG9jYWxfYmhfZGlzYWJsZSgpOworCXNrID0gX19sbGNfbG9va3VwX2VzdGFibGlzaGVkKHNhcCwgZGFkZHIsIGxhZGRyKTsKKwlsb2NhbF9iaF9lbmFibGUoKTsKKwlyZXR1cm4gc2s7Cit9CisKIC8qKgogICoJbGxjX2xvb2t1cF9saXN0ZW5lciAtIEZpbmRzIGxpc3RlbmVyIGZvciBsb2NhbCBNQUMgKyBTQVAKICAqCUBzYXA6IFNBUApAQCAtNTA2LDYgKzUyOSw3IEBACiAgKglTZWFyY2ggY29ubmVjdGlvbiBsaXN0IG9mIHRoZSBTQVAgYW5kIGZpbmRzIGNvbm5lY3Rpb24gbGlzdGVuaW5nIG9uCiAgKglsb2NhbCBtYWMsIGFuZCBsb2NhbCBzYXAuIFJldHVybnMgcG9pbnRlciBmb3IgcGFyZW50IHNvY2tldCBmb3VuZCwKICAqCSVOVUxMIG90aGVyd2lzZS4KKyAqCUNhbGxlciBoYXMgdG8gbWFrZSBzdXJlIGxvY2FsX2JoIGlzIGRpc2FibGVkLgogICovCiBzdGF0aWMgc3RydWN0IHNvY2sgKmxsY19sb29rdXBfbGlzdGVuZXIoc3RydWN0IGxsY19zYXAgKnNhcCwKIAkJCQkJc3RydWN0IGxsY19hZGRyICpsYWRkcikKQEAgLTUxMyw3ICs1MzcsNyBAQAogCXN0cnVjdCBzb2NrICpyYzsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAotCXJlYWRfbG9ja19iaCgmc2FwLT5za19saXN0LmxvY2spOworCXJlYWRfbG9jaygmc2FwLT5za19saXN0LmxvY2spOwogCXNrX2Zvcl9lYWNoKHJjLCBub2RlLCAmc2FwLT5za19saXN0Lmxpc3QpIHsKIAkJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2socmMpOwogCkBAIC01MjcsMTAgKzU1MSwxOSBAQAogCX0KIAlyYyA9IE5VTEw7CiBmb3VuZDoKLQlyZWFkX3VubG9ja19iaCgmc2FwLT5za19saXN0LmxvY2spOworCXJlYWRfdW5sb2NrKCZzYXAtPnNrX2xpc3QubG9jayk7CiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgc3RydWN0IHNvY2sgKl9fbGxjX2xvb2t1cChzdHJ1Y3QgbGxjX3NhcCAqc2FwLAorCQkJCSBzdHJ1Y3QgbGxjX2FkZHIgKmRhZGRyLAorCQkJCSBzdHJ1Y3QgbGxjX2FkZHIgKmxhZGRyKQoreworCXN0cnVjdCBzb2NrICpzayA9IF9fbGxjX2xvb2t1cF9lc3RhYmxpc2hlZChzYXAsIGRhZGRyLCBsYWRkcik7CisKKwlyZXR1cm4gc2sgPyA6IGxsY19sb29rdXBfbGlzdGVuZXIoc2FwLCBsYWRkcik7Cit9CisKIC8qKgogICoJbGxjX2RhdGFfYWNjZXB0X3N0YXRlIC0gZGVzaWduYXRlcyBpZiBpbiB0aGlzIHN0YXRlIGRhdGEgY2FuIGJlIHNlbnQuCiAgKglAc3RhdGU6IHN0YXRlIG9mIGNvbm5lY3Rpb24uCkBAIC01NDQsMTQgKzU3NywxNCBAQAogfQogCiAvKioKLSAqCWZpbmRfbmV4dF9vZmZzZXQgLSBmaW5kcyBvZmZzZXQgZm9yIG5leHQgY2F0ZWdvcnkgb2YgdHJhbnNpdGlvbnMKKyAqCWxsY19maW5kX25leHRfb2Zmc2V0IC0gZmluZHMgb2Zmc2V0IGZvciBuZXh0IGNhdGVnb3J5IG9mIHRyYW5zaXRpb25zCiAgKglAc3RhdGU6IHN0YXRlIHRhYmxlLgogICoJQG9mZnNldDogc3RhcnQgb2Zmc2V0LgogICoKICAqCUZpbmRzIG9mZnNldCBvZiBuZXh0IGNhdGVnb3J5IG9mIHRyYW5zaXRpb25zIGluIHRyYW5zaXRpb24gdGFibGUuCiAgKglSZXR1cm5zIHRoZSBzdGFydCBpbmRleCBvZiBuZXh0IGNhdGVnb3J5LgogICovCi1zdGF0aWMgdTE2IGZpbmRfbmV4dF9vZmZzZXQoc3RydWN0IGxsY19jb25uX3N0YXRlICpzdGF0ZSwgdTE2IG9mZnNldCkKK3N0YXRpYyB1MTYgX19pbml0IGxsY19maW5kX25leHRfb2Zmc2V0KHN0cnVjdCBsbGNfY29ubl9zdGF0ZSAqc3RhdGUsIHUxNiBvZmZzZXQpCiB7CiAJdTE2IGNudCA9IDA7CiAJc3RydWN0IGxsY19jb25uX3N0YXRlX3RyYW5zICoqbmV4dF90cmFuczsKQEAgLTU3OCw4ICs2MTEsOCBAQAogCQluZXh0X29mZnNldCA9IDA7CiAJCWZvciAoZXZfdHlwZSA9IDA7IGV2X3R5cGUgPCBOQlJfQ09OTl9FVjsgZXZfdHlwZSsrKSB7CiAJCQlsbGNfb2Zmc2V0X3RhYmxlW3N0YXRlXVtldl90eXBlXSA9IG5leHRfb2Zmc2V0OwotCQkJbmV4dF9vZmZzZXQgKz0gZmluZF9uZXh0X29mZnNldChjdXJyX3N0YXRlLAotCQkJCQkJCW5leHRfb2Zmc2V0KSArIDE7CisJCQluZXh0X29mZnNldCArPSBsbGNfZmluZF9uZXh0X29mZnNldChjdXJyX3N0YXRlLAorCQkJCQkJCSAgICBuZXh0X29mZnNldCkgKyAxOwogCQl9CiAJfQogfQpAQCAtNjIzLDYgKzY1Niw3IEBACiAgKi8KIHZvaWQgbGxjX3NhcF9hZGRfc29ja2V0KHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBzb2NrICpzaykKIHsKKwlsbGNfc2FwX2hvbGQoc2FwKTsKIAl3cml0ZV9sb2NrX2JoKCZzYXAtPnNrX2xpc3QubG9jayk7CiAJbGxjX3NrKHNrKS0+c2FwID0gc2FwOwogCXNrX2FkZF9ub2RlKHNrLCAmc2FwLT5za19saXN0Lmxpc3QpOwpAQCAtNjQyLDYgKzY3Niw3IEBACiAJd3JpdGVfbG9ja19iaCgmc2FwLT5za19saXN0LmxvY2spOwogCXNrX2RlbF9ub2RlX2luaXQoc2spOwogCXdyaXRlX3VubG9ja19iaCgmc2FwLT5za19saXN0LmxvY2spOworCWxsY19zYXBfcHV0KHNhcCk7CiB9CiAKIC8qKgpAQCAtNjU0LDE1ICs2ODksMzQgQEAKIHN0YXRpYyBpbnQgbGxjX2Nvbm5fcmN2KHN0cnVjdCBzb2NrKiBzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfZXYgKmV2ID0gbGxjX2Nvbm5fZXYoc2tiKTsKLQlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CiAKLQlpZiAoIWxsYy0+ZGV2KQotCQlsbGMtPmRldiA9IHNrYi0+ZGV2OwogCWV2LT50eXBlICAgPSBMTENfQ09OTl9FVl9UWVBFX1BEVTsKIAlldi0+cmVhc29uID0gMDsKIAlyZXR1cm4gbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzcyhzaywgc2tiKTsKIH0KIAorc3RhdGljIHN0cnVjdCBzb2NrICpsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgc3RydWN0IGxsY19hZGRyICpzYWRkciwKKwkJCQkJICAgICBzdHJ1Y3QgbGxjX2FkZHIgKmRhZGRyKQoreworCXN0cnVjdCBzb2NrICpuZXdzayA9IGxsY19za19hbGxvYyhzay0+c2tfZmFtaWx5LCBHRlBfQVRPTUlDLAorCQkJCQkgIHNrLT5za19wcm90KTsKKwlzdHJ1Y3QgbGxjX3NvY2sgKm5ld2xsYywgKmxsYyA9IGxsY19zayhzayk7CisKKwlpZiAoIW5ld3NrKQorCQlnb3RvIG91dDsKKwluZXdsbGMgPSBsbGNfc2sobmV3c2spOworCW1lbWNweSgmbmV3bGxjLT5sYWRkciwgZGFkZHIsIHNpemVvZihuZXdsbGMtPmxhZGRyKSk7CisJbWVtY3B5KCZuZXdsbGMtPmRhZGRyLCBzYWRkciwgc2l6ZW9mKG5ld2xsYy0+ZGFkZHIpKTsKKwluZXdsbGMtPmRldiA9IGRldjsKKwlkZXZfaG9sZChkZXYpOworCWxsY19zYXBfYWRkX3NvY2tldChsbGMtPnNhcCwgbmV3c2spOworCWxsY19zYXBfaG9sZChsbGMtPnNhcCk7CitvdXQ6CisJcmV0dXJuIG5ld3NrOworfQorCiB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgbGxjX2FkZHIgc2FkZHIsIGRhZGRyOwpAQCAtNjczLDM1ICs3MjcsMzUgQEAKIAlsbGNfcGR1X2RlY29kZV9kYShza2IsIGRhZGRyLm1hYyk7CiAJbGxjX3BkdV9kZWNvZGVfZHNhcChza2IsICZkYWRkci5sc2FwKTsKIAotCXNrID0gbGxjX2xvb2t1cF9lc3RhYmxpc2hlZChzYXAsICZzYWRkciwgJmRhZGRyKTsKLQlpZiAoIXNrKSB7Ci0JCS8qCi0JCSAqIERpZG4ndCBmaW5kIGFuIGFjdGl2ZSBjb25uZWN0aW9uOyB2ZXJpZnkgaWYgdGhlcmUKLQkJICogaXMgYSBsaXN0ZW5pbmcgc29ja2V0IGZvciB0aGlzIGxsYyBhZGRyCi0JCSAqLwotCQlzdHJ1Y3QgbGxjX3NvY2sgKmxsYzsKLQkJc3RydWN0IHNvY2sgKnBhcmVudCA9IGxsY19sb29rdXBfbGlzdGVuZXIoc2FwLCAmZGFkZHIpOworCXNrID0gX19sbGNfbG9va3VwKHNhcCwgJnNhZGRyLCAmZGFkZHIpOworCWlmICghc2spCisJCWdvdG8gZHJvcDsKIAotCQlpZiAoIXBhcmVudCkgewotCQkJZHByaW50aygibGxjX2xvb2t1cF9saXN0ZW5lciBmYWlsZWQhXG4iKTsKLQkJCWdvdG8gZHJvcDsKLQkJfQotCi0JCXNrID0gbGxjX3NrX2FsbG9jKHBhcmVudC0+c2tfZmFtaWx5LCBHRlBfQVRPTUlDLCBwYXJlbnQtPnNrX3Byb3QpOwotCQlpZiAoIXNrKSB7Ci0JCQlzb2NrX3B1dChwYXJlbnQpOwotCQkJZ290byBkcm9wOwotCQl9Ci0JCWxsYyA9IGxsY19zayhzayk7Ci0JCW1lbWNweSgmbGxjLT5sYWRkciwgJmRhZGRyLCBzaXplb2YobGxjLT5sYWRkcikpOwotCQltZW1jcHkoJmxsYy0+ZGFkZHIsICZzYWRkciwgc2l6ZW9mKGxsYy0+ZGFkZHIpKTsKLQkJbGxjX3NhcF9hZGRfc29ja2V0KHNhcCwgc2spOwotCQlzb2NrX2hvbGQoc2spOwotCQlzb2NrX3B1dChwYXJlbnQpOwotCQlza2ItPnNrID0gcGFyZW50OwotCX0gZWxzZQotCQlza2ItPnNrID0gc2s7CiAJYmhfbG9ja19zb2NrKHNrKTsKKwkvKgorCSAqIFRoaXMgaGFzIHRvIGJlIGRvbmUgaGVyZSBhbmQgbm90IGF0IHRoZSB1cHBlciBsYXllciAtPmFjY2VwdAorCSAqIG1ldGhvZCBiZWNhdXNlIG9mIHRoZSB3YXkgdGhlIFBST0NPTSBzdGF0ZSBtYWNoaW5lIHdvcmtzOgorCSAqIGl0IG5lZWRzIHRvIHNldCBzZXZlcmFsIHN0YXRlIHZhcmlhYmxlcyAoc2VlLCBmb3IgaW5zdGFuY2UsCisJICogbGxjX2FkbV9hY3Rpb25zXzIgaW4gbmV0L2xsYy9sbGNfY19zdC5jKSBhbmQgc2VuZCBhIHBhY2tldCB0bworCSAqIHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBuZXcgY29ubmVjdGlvbiwgYW5kIHRoaXMgc3RhdGUgaGFzIHRvIGJlCisJICogaW4gdGhlIG5ld2x5IGNyZWF0ZWQgc3RydWN0IHNvY2sgcHJpdmF0ZSBhcmVhLiAtYWNtZQorCSAqLworCWlmICh1bmxpa2VseShzay0+c2tfc3RhdGUgPT0gVENQX0xJU1RFTikpIHsKKwkJc3RydWN0IHNvY2sgKm5ld3NrID0gbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrKHNrLCBza2ItPmRldiwKKwkJCQkJCQkgICAgICAmc2FkZHIsICZkYWRkcik7CisJCWlmICghbmV3c2spCisJCQlnb3RvIGRyb3BfdW5sb2NrOworCQlza2Jfc2V0X293bmVyX3Ioc2tiLCBuZXdzayk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogQ2FuJ3QgYmUgc2tiX3NldF9vd25lcl9yLCB0aGlzIHdpbGwgYmUgZG9uZSBhdCB0aGUKKwkJICogbGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyBmdW5jdGlvbiwgbGF0ZXIgb24sIHdoZW4gd2Ugd2lsbCB1c2UKKwkJICogc2tiX3F1ZXVlX3Jjdl9za2IgdG8gc2VuZCBpdCB0byB1cHBlciBsYXllcnMsIHRoaXMgaXMKKwkJICogYW5vdGhlciB0cmljayByZXF1aXJlZCB0byBjb3BlIHdpdGggaG93IHRoZSBQUk9DT00gc3RhdGUKKwkJICogbWFjaGluZSB3b3Jrcy4gLWFjbWUKKwkJICovCisJCXNrYi0+c2sgPSBzazsKKwl9CiAJaWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKQogCQlsbGNfY29ubl9yY3Yoc2ssIHNrYik7CiAJZWxzZSB7CkBAIC03MDksMTEgKzc2MywxNiBAQAogCQlsbGNfc2V0X2JhY2tsb2dfdHlwZShza2IsIExMQ19QQUNLRVQpOwogCQlza19hZGRfYmFja2xvZyhzaywgc2tiKTsKIAl9CitvdXQ6CiAJYmhfdW5sb2NrX3NvY2soc2spOwogCXNvY2tfcHV0KHNrKTsKIAlyZXR1cm47CiBkcm9wOgogCWtmcmVlX3NrYihza2IpOworCXJldHVybjsKK2Ryb3BfdW5sb2NrOgorCWtmcmVlX3NrYihza2IpOworCWdvdG8gb3V0OwogfQogCiAjdW5kZWYgTExDX1JFRkNOVF9ERUJVRwpAQCAtNzIyLDMyICs3ODEsNiBAQAogI2VuZGlmCiAKIC8qKgotICoJbGxjX3JlbGVhc2Vfc29ja2V0cyAtIHJlbGVhc2VzIGFsbCBzb2NrZXRzIGluIGEgc2FwCi0gKglAc2FwOiBzYXAgdG8gcmVsZWFzZSBpdHMgc29ja2V0cwotICoKLSAqCVJlbGVhc2VzIGFsbCBjb25uZWN0aW9ucyBvZiBhIHNhcC4gUmV0dXJucyAwIGlmIGFsbCBhY3Rpb25zIGNvbXBsZXRlCi0gKglzdWNjZXNzZnVsbHksIG5vbnplcm8gb3RoZXJ3aXNlCi0gKi8KLWludCBsbGNfcmVsZWFzZV9zb2NrZXRzKHN0cnVjdCBsbGNfc2FwICpzYXApCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3Qgc29jayAqc2s7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0KLQl3cml0ZV9sb2NrX2JoKCZzYXAtPnNrX2xpc3QubG9jayk7Ci0KLQlza19mb3JfZWFjaChzaywgbm9kZSwgJnNhcC0+c2tfbGlzdC5saXN0KSB7Ci0JCWxsY19zayhzayktPnN0YXRlID0gTExDX0NPTk5fU1RBVEVfVEVNUDsKLQotCQlpZiAobGxjX3NlbmRfZGlzYyhzaykpCi0JCQlyYyA9IDE7Ci0JfQotCi0Jd3JpdGVfdW5sb2NrX2JoKCZzYXAtPnNrX2xpc3QubG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi0vKioKICAqCWxsY19iYWNrbG9nX3JjdiAtIFByb2Nlc3NlcyByeCBmcmFtZXMgYW5kIGV4cGlyZWQgdGltZXJzLgogICoJQHNrOiBMTEMgc29jayAocDgwMjIgY29ubmVjdGlvbikKICAqCUBza2I6IHF1ZXVlZCByeCBmcmFtZSBvciBldmVudApAQCAtNzYyLDE0ICs3OTUsMTQgQEAKIAlpbnQgcmMgPSAwOwogCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKIAotCWlmIChsbGNfYmFja2xvZ190eXBlKHNrYikgPT0gTExDX1BBQ0tFVCkgewotCQlpZiAobGxjLT5zdGF0ZSA+IDEpIC8qIG5vdCBjbG9zZWQgKi8KKwlpZiAobGlrZWx5KGxsY19iYWNrbG9nX3R5cGUoc2tiKSA9PSBMTENfUEFDS0VUKSkgeworCQlpZiAobGlrZWx5KGxsYy0+c3RhdGUgPiAxKSkgLyogbm90IGNsb3NlZCAqLwogCQkJcmMgPSBsbGNfY29ubl9yY3Yoc2ssIHNrYik7CiAJCWVsc2UKIAkJCWdvdG8gb3V0X2tmcmVlX3NrYjsKIAl9IGVsc2UgaWYgKGxsY19iYWNrbG9nX3R5cGUoc2tiKSA9PSBMTENfRVZFTlQpIHsKIAkJLyogdGltZXIgZXhwaXJhdGlvbiBldmVudCAqLwotCQlpZiAobGxjLT5zdGF0ZSA+IDEpICAvKiBub3QgY2xvc2VkICovCisJCWlmIChsaWtlbHkobGxjLT5zdGF0ZSA+IDEpKSAgLyogbm90IGNsb3NlZCAqLwogCQkJcmMgPSBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IpOwogCQllbHNlCiAJCQlnb3RvIG91dF9rZnJlZV9za2I7CkBAIC03OTksMjIgKzgzMiwyMiBAQAogCWxsYy0+ZGVjX3N0ZXAgPSBsbGMtPmNvbm5lY3Rfc3RlcCA9IDE7CiAKIAlpbml0X3RpbWVyKCZsbGMtPmFja190aW1lci50aW1lcik7Ci0JbGxjLT5hY2tfdGltZXIuZXhwaXJlCSAgICAgID0gTExDX0FDS19USU1FOworCWxsYy0+YWNrX3RpbWVyLmV4cGlyZQkgICAgICA9IHN5c2N0bF9sbGMyX2Fja190aW1lb3V0OwogCWxsYy0+YWNrX3RpbWVyLnRpbWVyLmRhdGEgICAgID0gKHVuc2lnbmVkIGxvbmcpc2s7CiAJbGxjLT5hY2tfdGltZXIudGltZXIuZnVuY3Rpb24gPSBsbGNfY29ubl9hY2tfdG1yX2NiOwogCiAJaW5pdF90aW1lcigmbGxjLT5wZl9jeWNsZV90aW1lci50aW1lcik7Ci0JbGxjLT5wZl9jeWNsZV90aW1lci5leHBpcmUJICAgPSBMTENfUF9USU1FOworCWxsYy0+cGZfY3ljbGVfdGltZXIuZXhwaXJlCSAgID0gc3lzY3RsX2xsYzJfcF90aW1lb3V0OwogCWxsYy0+cGZfY3ljbGVfdGltZXIudGltZXIuZGF0YSAgICAgPSAodW5zaWduZWQgbG9uZylzazsKIAlsbGMtPnBmX2N5Y2xlX3RpbWVyLnRpbWVyLmZ1bmN0aW9uID0gbGxjX2Nvbm5fcGZfY3ljbGVfdG1yX2NiOwogCiAJaW5pdF90aW1lcigmbGxjLT5yZWpfc2VudF90aW1lci50aW1lcik7Ci0JbGxjLT5yZWpfc2VudF90aW1lci5leHBpcmUJICAgPSBMTENfUkVKX1RJTUU7CisJbGxjLT5yZWpfc2VudF90aW1lci5leHBpcmUJICAgPSBzeXNjdGxfbGxjMl9yZWpfdGltZW91dDsKIAlsbGMtPnJlal9zZW50X3RpbWVyLnRpbWVyLmRhdGEgICAgID0gKHVuc2lnbmVkIGxvbmcpc2s7CiAJbGxjLT5yZWpfc2VudF90aW1lci50aW1lci5mdW5jdGlvbiA9IGxsY19jb25uX3Jlal90bXJfY2I7CiAKIAlpbml0X3RpbWVyKCZsbGMtPmJ1c3lfc3RhdGVfdGltZXIudGltZXIpOwotCWxsYy0+YnVzeV9zdGF0ZV90aW1lci5leHBpcmUJICAgICA9IExMQ19CVVNZX1RJTUU7CisJbGxjLT5idXN5X3N0YXRlX3RpbWVyLmV4cGlyZQkgICAgID0gc3lzY3RsX2xsYzJfYnVzeV90aW1lb3V0OwogCWxsYy0+YnVzeV9zdGF0ZV90aW1lci50aW1lci5kYXRhICAgICA9ICh1bnNpZ25lZCBsb25nKXNrOwogCWxsYy0+YnVzeV9zdGF0ZV90aW1lci50aW1lci5mdW5jdGlvbiA9IGxsY19jb25uX2J1c3lfdG1yX2NiOwogCkBAIC04MzQsNyArODY3LDcgQEAKICAqCUFsbG9jYXRlcyBhIExMQyBzb2NrIGFuZCBpbml0aWFsaXplcyBpdC4gUmV0dXJucyB0aGUgbmV3IExMQyBzb2NrCiAgKglvciAlTlVMTCBpZiB0aGVyZSdzIG5vIG1lbW9yeSBhdmFpbGFibGUgZm9yIG9uZQogICovCi1zdHJ1Y3Qgc29jayAqbGxjX3NrX2FsbG9jKGludCBmYW1pbHksIGludCBwcmlvcml0eSwgc3RydWN0IHByb3RvICpwcm90KQorc3RydWN0IHNvY2sgKmxsY19za19hbGxvYyhpbnQgZmFtaWx5LCBnZnBfdCBwcmlvcml0eSwgc3RydWN0IHByb3RvICpwcm90KQogewogCXN0cnVjdCBzb2NrICpzayA9IHNrX2FsbG9jKGZhbWlseSwgcHJpb3JpdHksIHByb3QsIDEpOwogCmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19jb3JlLmMgYi9uZXQvbGxjL2xsY19jb3JlLmMKaW5kZXggOTcyNzQ1NS4uYWIwZmNkMyAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfY29yZS5jCisrKyBiL25ldC9sbGMvbGxjX2NvcmUuYwpAQCAtNDAsNiArNDAsNyBAQAogCQlzYXAtPnN0YXRlID0gTExDX1NBUF9TVEFURV9BQ1RJVkU7CiAJCW1lbWNweShzYXAtPmxhZGRyLm1hYywgbGxjX3N0YXRpb25fbWFjX3NhLCBFVEhfQUxFTik7CiAJCXJ3bG9ja19pbml0KCZzYXAtPnNrX2xpc3QubG9jayk7CisJCWF0b21pY19zZXQoJnNhcC0+cmVmY250LCAxKTsKIAl9CiAJcmV0dXJuIHNhcDsKIH0KQEAgLTUyLDkgKzUzLDcgQEAKICAqLwogc3RhdGljIHZvaWQgbGxjX2FkZF9zYXAoc3RydWN0IGxsY19zYXAgKnNhcCkKIHsKLQl3cml0ZV9sb2NrX2JoKCZsbGNfc2FwX2xpc3RfbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmc2FwLT5ub2RlLCAmbGxjX3NhcF9saXN0KTsKLQl3cml0ZV91bmxvY2tfYmgoJmxsY19zYXBfbGlzdF9sb2NrKTsKIH0KIAogLyoqCkBAIC03MCwxMSArNjksMjUgQEAKIAl3cml0ZV91bmxvY2tfYmgoJmxsY19zYXBfbGlzdF9sb2NrKTsKIH0KIAorc3RhdGljIHN0cnVjdCBsbGNfc2FwICpfX2xsY19zYXBfZmluZCh1bnNpZ25lZCBjaGFyIHNhcF92YWx1ZSkKK3sKKwlzdHJ1Y3QgbGxjX3NhcCogc2FwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzYXAsICZsbGNfc2FwX2xpc3QsIG5vZGUpCisJCWlmIChzYXAtPmxhZGRyLmxzYXAgPT0gc2FwX3ZhbHVlKQorCQkJZ290byBvdXQ7CisJc2FwID0gTlVMTDsKK291dDoKKwlyZXR1cm4gc2FwOworfQorCiAvKioKICAqCWxsY19zYXBfZmluZCAtIHNlYXJjaHMgYSBTQVAgaW4gc3RhdGlvbgogICoJQHNhcF92YWx1ZTogc2FwIHRvIGJlIGZvdW5kCiAgKgogICoJU2VhcmNocyBmb3IgYSBzYXAgaW4gdGhlIHNhcCBsaXN0IG9mIHRoZSBMTEMncyBzdGF0aW9uIHVwb24gdGhlIHNhcCBJRC4KKyAqCUlmIHRoZSBzYXAgaXMgZm91bmQgaXQgd2lsbCBiZSByZWZjb3VudGVkIGFuZCB0aGUgdXNlciB3aWxsIGhhdmUgdG8gZG8KKyAqCWEgbGxjX3NhcF9wdXQgYWZ0ZXIgdXNlLgogICoJUmV0dXJucyB0aGUgc2FwIG9yICVOVUxMIGlmIG5vdCBmb3VuZC4KICAqLwogc3RydWN0IGxsY19zYXAgKmxsY19zYXBfZmluZCh1bnNpZ25lZCBjaGFyIHNhcF92YWx1ZSkKQEAgLTgyLDExICs5NSw5IEBACiAJc3RydWN0IGxsY19zYXAqIHNhcDsKIAogCXJlYWRfbG9ja19iaCgmbGxjX3NhcF9saXN0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2FwLCAmbGxjX3NhcF9saXN0LCBub2RlKQotCQlpZiAoc2FwLT5sYWRkci5sc2FwID09IHNhcF92YWx1ZSkKLQkJCWdvdG8gb3V0OwotCXNhcCA9IE5VTEw7Ci1vdXQ6CisJc2FwID0gX19sbGNfc2FwX2ZpbmQoc2FwX3ZhbHVlKTsKKwlpZiAoc2FwKQorCQlsbGNfc2FwX2hvbGQoc2FwKTsKIAlyZWFkX3VubG9ja19iaCgmbGxjX3NhcF9saXN0X2xvY2spOwogCXJldHVybiBzYXA7CiB9CkBAIC0xMDYsMTkgKzExNywyMCBAQAogCQkJCQkgc3RydWN0IHBhY2tldF90eXBlICpwdCwKIAkJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikpCiB7Ci0Jc3RydWN0IGxsY19zYXAgKnNhcCA9IGxsY19zYXBfZmluZChsc2FwKTsKKwlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gTlVMTDsKIAotCWlmIChzYXApIHsgLyogU0FQIGFscmVhZHkgZXhpc3RzICovCi0JCXNhcCA9IE5VTEw7CisJd3JpdGVfbG9ja19iaCgmbGxjX3NhcF9saXN0X2xvY2spOworCWlmIChfX2xsY19zYXBfZmluZChsc2FwKSkgLyogU0FQIGFscmVhZHkgZXhpc3RzICovCiAJCWdvdG8gb3V0OwotCX0KIAlzYXAgPSBsbGNfc2FwX2FsbG9jKCk7CiAJaWYgKCFzYXApCiAJCWdvdG8gb3V0OwogCXNhcC0+bGFkZHIubHNhcCA9IGxzYXA7CiAJc2FwLT5yY3ZfZnVuYwk9IGZ1bmM7CisJbGxjX3NhcF9ob2xkKHNhcCk7CiAJbGxjX2FkZF9zYXAoc2FwKTsKIG91dDoKKwl3cml0ZV91bmxvY2tfYmgoJmxsY19zYXBfbGlzdF9sb2NrKTsKIAlyZXR1cm4gc2FwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19pZi5jIGIvbmV0L2xsYy9sbGNfaWYuYwppbmRleCAwZjg0ZjY2Li5iYTkwZjdmIDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19pZi5jCisrKyBiL25ldC9sbGMvbGxjX2lmLmMKQEAgLTQ3LDE0ICs0NywxMSBAQAogCWludCByYyA9IC1FQ09OTkFCT1JURUQ7CiAJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwogCi0JaWYgKGxsYy0+c3RhdGUgPT0gTExDX0NPTk5fU1RBVEVfQURNKQorCWlmICh1bmxpa2VseShsbGMtPnN0YXRlID09IExMQ19DT05OX1NUQVRFX0FETSkpCiAJCWdvdG8gb3V0OwogCXJjID0gLUVCVVNZOwotCWlmIChsbGNfZGF0YV9hY2NlcHRfc3RhdGUobGxjLT5zdGF0ZSkpIHsgLyogZGF0YV9jb25uX3JlZnVzZSAqLwotCQlsbGMtPmZhaWxlZF9kYXRhX3JlcSA9IDE7Ci0JCWdvdG8gb3V0OwotCX0KLQlpZiAobGxjLT5wX2ZsYWcpIHsKKwlpZiAodW5saWtlbHkobGxjX2RhdGFfYWNjZXB0X3N0YXRlKGxsYy0+c3RhdGUpIHx8IC8qIGRhdGFfY29ubl9yZWZ1c2UgKi8KKwkJICAgICBsbGMtPnBfZmxhZykpIHsKIAkJbGxjLT5mYWlsZWRfZGF0YV9yZXEgPSAxOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xMTAsNiArMTA3LDcgQEAKIAkJZXYtPnR5cGUgICAgICA9IExMQ19DT05OX0VWX1RZUEVfUFJJTTsKIAkJZXYtPnByaW0gICAgICA9IExMQ19DT05OX1BSSU07CiAJCWV2LT5wcmltX3R5cGUgPSBMTENfUFJJTV9UWVBFX1JFUTsKKwkJc2tiX3NldF9vd25lcl93KHNrYiwgc2spOwogCQlyYyA9IGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7CiAJfQogb3V0X3B1dDoKQEAgLTE0NCw2ICsxNDIsNyBAQAogCXNrYiA9IGFsbG9jX3NrYigwLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikKIAkJZ290byBvdXQ7CisJc2tiX3NldF9vd25lcl93KHNrYiwgc2spOwogCXNrLT5za19zdGF0ZSAgPSBUQ1BfQ0xPU0lORzsKIAlldgkgICAgICA9IGxsY19jb25uX2V2KHNrYik7CiAJZXYtPnR5cGUgICAgICA9IExMQ19DT05OX0VWX1RZUEVfUFJJTTsKZGlmZiAtLWdpdCBhL25ldC9sbGMvbGxjX2lucHV0LmMgYi9uZXQvbGxjL2xsY19pbnB1dC5jCmluZGV4IDEzYjQ2MjQuLjhmM2FkZGYwIDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19pbnB1dC5jCisrKyBiL25ldC9sbGMvbGxjX2lucHV0LmMKQEAgLTk5LDE1ICs5OSwxOSBAQAogc3RhdGljIGlubGluZSBpbnQgbGxjX2ZpeHVwX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXU4IGxsY19sZW4gPSAyOwotCXN0cnVjdCBsbGNfcGR1X3NuICpwZHU7CisJc3RydWN0IGxsY19wZHVfdW4gKnBkdTsKIAotCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqcGR1KSkpCisJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCpwZHUpKSkpCiAJCXJldHVybiAwOwogCi0JcGR1ID0gKHN0cnVjdCBsbGNfcGR1X3NuICopc2tiLT5kYXRhOworCXBkdSA9IChzdHJ1Y3QgbGxjX3BkdV91biAqKXNrYi0+ZGF0YTsKIAlpZiAoKHBkdS0+Y3RybF8xICYgTExDX1BEVV9UWVBFX01BU0spID09IExMQ19QRFVfVFlQRV9VKQogCQlsbGNfbGVuID0gMTsKIAlsbGNfbGVuICs9IDI7CisKKwlpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBsbGNfbGVuKSkpCisJCXJldHVybiAwOworCiAJc2tiLT5oLnJhdyArPSBsbGNfbGVuOwogCXNrYl9wdWxsKHNrYiwgbGxjX2xlbik7CiAJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfODAyXzIpKSB7CkBAIC0xNjYsMTcgKzE3MCwyMiBAQAogCSAqLwogCWlmIChzYXAtPnJjdl9mdW5jKSB7CiAJCXNhcC0+cmN2X2Z1bmMoc2tiLCBkZXYsIHB0LCBvcmlnX2Rldik7Ci0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9wdXQ7CiAJfQogCWRlc3QgPSBsbGNfcGR1X3R5cGUoc2tiKTsKIAlpZiAodW5saWtlbHkoIWRlc3QgfHwgIWxsY190eXBlX2hhbmRsZXJzW2Rlc3QgLSAxXSkpCi0JCWdvdG8gZHJvcDsKKwkJZ290byBkcm9wX3B1dDsKIAlsbGNfdHlwZV9oYW5kbGVyc1tkZXN0IC0gMV0oc2FwLCBza2IpOworb3V0X3B1dDoKKwlsbGNfc2FwX3B1dChzYXApOwogb3V0OgogCXJldHVybiAwOwogZHJvcDoKIAlrZnJlZV9za2Ioc2tiKTsKIAlnb3RvIG91dDsKK2Ryb3BfcHV0OgorCWtmcmVlX3NrYihza2IpOworCWdvdG8gb3V0X3B1dDsKIGhhbmRsZV9zdGF0aW9uOgogCWlmICghbGxjX3N0YXRpb25faGFuZGxlcikKIAkJZ290byBkcm9wOwpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfb3V0cHV0LmMgYi9uZXQvbGxjL2xsY19vdXRwdXQuYwppbmRleCBhYjU3ODRjLi5iNGQ1NWI2IDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19vdXRwdXQuYworKysgYi9uZXQvbGxjL2xsY19vdXRwdXQuYwpAQCAtOTgsNyArOTgsNyBAQAogCQkJICAgIGRzYXAsIExMQ19QRFVfQ01EKTsKIAlsbGNfcGR1X2luaXRfYXNfdWlfY21kKHNrYik7CiAJcmMgPSBsbGNfbWFjX2hkcl9pbml0KHNrYiwgc2tiLT5kZXYtPmRldl9hZGRyLCBkbWFjKTsKLQlpZiAoIXJjKQorCWlmIChsaWtlbHkoIXJjKSkKIAkJcmMgPSBkZXZfcXVldWVfeG1pdChza2IpOwogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL25ldC9sbGMvbGxjX3Byb2MuYyBiL25ldC9sbGMvbGxjX3Byb2MuYwppbmRleCAzNmU4ZGIzLi5iZDUzMWNiIDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19wcm9jLmMKKysrIGIvbmV0L2xsYy9sbGNfcHJvYy5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIAlsbGNfdWlfZm9ybWF0X21hYyhzZXEsIGxsYy0+ZGFkZHIubWFjKTsKIAlzZXFfcHJpbnRmKHNlcSwgIkAlMDJYICU4ZCAlOGQgJTJkICUzZCAlNGRcbiIsIGxsYy0+ZGFkZHIubHNhcCwKIAkJICAgYXRvbWljX3JlYWQoJnNrLT5za193bWVtX2FsbG9jKSwKLQkJICAgYXRvbWljX3JlYWQoJnNrLT5za19ybWVtX2FsbG9jKSwKKwkJICAgYXRvbWljX3JlYWQoJnNrLT5za19ybWVtX2FsbG9jKSAtIGxsYy0+Y29waWVkX3NlcSwKIAkJICAgc2stPnNrX3N0YXRlLAogCQkgICBzay0+c2tfc29ja2V0ID8gU09DS19JTk9ERShzay0+c2tfc29ja2V0KS0+aV91aWQgOiAtMSwKIAkJICAgbGxjLT5saW5rKTsKZGlmZiAtLWdpdCBhL25ldC9sbGMvbGxjX3NfYWMuYyBiL25ldC9sbGMvbGxjX3NfYWMuYwppbmRleCBlZDhiYTdkLi5iYjM1ODBmIDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19zX2FjLmMKKysrIGIvbmV0L2xsYy9sbGNfc19hYy5jCkBAIC01OCw3ICs1OCw3IEBACiAJCQkgICAgZXYtPmRhZGRyLmxzYXAsIExMQ19QRFVfQ01EKTsKIAlsbGNfcGR1X2luaXRfYXNfdWlfY21kKHNrYik7CiAJcmMgPSBsbGNfbWFjX2hkcl9pbml0KHNrYiwgZXYtPnNhZGRyLm1hYywgZXYtPmRhZGRyLm1hYyk7Ci0JaWYgKCFyYykKKwlpZiAobGlrZWx5KCFyYykpCiAJCXJjID0gZGV2X3F1ZXVlX3htaXQoc2tiKTsKIAlyZXR1cm4gcmM7CiB9CkBAIC04MSw3ICs4MSw3IEBACiAJCQkgICAgZXYtPmRhZGRyLmxzYXAsIExMQ19QRFVfQ01EKTsKIAlsbGNfcGR1X2luaXRfYXNfeGlkX2NtZChza2IsIExMQ19YSURfTlVMTF9DTEFTU18yLCAwKTsKIAlyYyA9IGxsY19tYWNfaGRyX2luaXQoc2tiLCBldi0+c2FkZHIubWFjLCBldi0+ZGFkZHIubWFjKTsKLQlpZiAoIXJjKQorCWlmIChsaWtlbHkoIXJjKSkKIAkJcmMgPSBkZXZfcXVldWVfeG1pdChza2IpOwogCXJldHVybiByYzsKIH0KQEAgLTEwMywxNSArMTAzLDE0IEBACiAJbGxjX3BkdV9kZWNvZGVfc2Eoc2tiLCBtYWNfZGEpOwogCWxsY19wZHVfZGVjb2RlX2RhKHNrYiwgbWFjX3NhKTsKIAlsbGNfcGR1X2RlY29kZV9zc2FwKHNrYiwgJmRzYXApOwotCW5za2IgPSBsbGNfYWxsb2NfZnJhbWUoKTsKKwluc2tiID0gbGxjX2FsbG9jX2ZyYW1lKE5VTEwsIHNrYi0+ZGV2KTsKIAlpZiAoIW5za2IpCiAJCWdvdG8gb3V0OwotCW5za2ItPmRldiA9IHNrYi0+ZGV2OwogCWxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC0+bGFkZHIubHNhcCwgZHNhcCwKIAkJCSAgICBMTENfUERVX1JTUCk7CiAJbGxjX3BkdV9pbml0X2FzX3hpZF9yc3AobnNrYiwgTExDX1hJRF9OVUxMX0NMQVNTXzIsIDApOwogCXJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBtYWNfc2EsIG1hY19kYSk7Ci0JaWYgKCFyYykKKwlpZiAobGlrZWx5KCFyYykpCiAJCXJjID0gZGV2X3F1ZXVlX3htaXQobnNrYik7CiBvdXQ6CiAJcmV0dXJuIHJjOwpAQCAtMTM1LDcgKzEzNCw3IEBACiAJCQkgICAgZXYtPmRhZGRyLmxzYXAsIExMQ19QRFVfQ01EKTsKIAlsbGNfcGR1X2luaXRfYXNfdGVzdF9jbWQoc2tiKTsKIAlyYyA9IGxsY19tYWNfaGRyX2luaXQoc2tiLCBldi0+c2FkZHIubWFjLCBldi0+ZGFkZHIubWFjKTsKLQlpZiAoIXJjKQorCWlmIChsaWtlbHkoIXJjKSkKIAkJcmMgPSBkZXZfcXVldWVfeG1pdChza2IpOwogCXJldHVybiByYzsKIH0KQEAgLTE0OSwxNSArMTQ4LDE0IEBACiAJbGxjX3BkdV9kZWNvZGVfc2Eoc2tiLCBtYWNfZGEpOwogCWxsY19wZHVfZGVjb2RlX2RhKHNrYiwgbWFjX3NhKTsKIAlsbGNfcGR1X2RlY29kZV9zc2FwKHNrYiwgJmRzYXApOwotCW5za2IgPSBsbGNfYWxsb2NfZnJhbWUoKTsKKwluc2tiID0gbGxjX2FsbG9jX2ZyYW1lKE5VTEwsIHNrYi0+ZGV2KTsKIAlpZiAoIW5za2IpCiAJCWdvdG8gb3V0OwotCW5za2ItPmRldiA9IHNrYi0+ZGV2OwogCWxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC0+bGFkZHIubHNhcCwgZHNhcCwKIAkJCSAgICBMTENfUERVX1JTUCk7CiAJbGxjX3BkdV9pbml0X2FzX3Rlc3RfcnNwKG5za2IsIHNrYik7CiAJcmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIG1hY19zYSwgbWFjX2RhKTsKLQlpZiAoIXJjKQorCWlmIChsaWtlbHkoIXJjKSkKIAkJcmMgPSBkZXZfcXVldWVfeG1pdChuc2tiKTsKIG91dDoKIAlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19zYXAuYyBiL25ldC9sbGMvbGxjX3NhcC5jCmluZGV4IDM0MjI4ZWYuLjQwMjljZWUgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvbGxjX3NhcC5jCisrKyBiL25ldC9sbGMvbGxjX3NhcC5jCkBAIC0yNiwxMSArMjYsMTIgQEAKIAogLyoqCiAgKglsbGNfYWxsb2NfZnJhbWUgLSBhbGxvY2F0ZXMgc2tfYnVmZiBmb3IgZnJhbWUKKyAqCUBkZXY6IG5ldHdvcmsgZGV2aWNlIHRoaXMgc2tiIHdpbGwgYmUgc2VudCBvdmVyCiAgKgogICoJQWxsb2NhdGVzIGFuIHNrX2J1ZmYgZm9yIGZyYW1lIGFuZCBpbml0aWFsaXplcyBza19idWZmIGZpZWxkcy4KICAqCVJldHVybnMgYWxsb2NhdGVkIHNrYiBvciAlTlVMTCB3aGVuIG91dCBvZiBtZW1vcnkuCiAgKi8KLXN0cnVjdCBza19idWZmICpsbGNfYWxsb2NfZnJhbWUodm9pZCkKK3N0cnVjdCBza19idWZmICpsbGNfYWxsb2NfZnJhbWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBza19idWZmICpza2IgPSBhbGxvY19za2IoMTI4LCBHRlBfQVRPTUlDKTsKIApAQCAtMzgsMTggKzM5LDIzIEBACiAJCXNrYl9yZXNlcnZlKHNrYiwgNTApOwogCQlza2ItPm5oLnJhdyAgID0gc2tiLT5oLnJhdyA9IHNrYi0+ZGF0YTsKIAkJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QXzgwMl8yKTsKLQkJc2tiLT5kZXYgICAgICA9IGRldl9iYXNlLT5uZXh0OworCQlza2ItPmRldiAgICAgID0gZGV2OwogCQlza2ItPm1hYy5yYXcgID0gc2tiLT5oZWFkOworCQlpZiAoc2sgIT0gTlVMTCkKKwkJCXNrYl9zZXRfb3duZXJfdyhza2IsIHNrKTsKIAl9CiAJcmV0dXJuIHNrYjsKIH0KIAotdm9pZCBsbGNfc2F2ZV9wcmltaXRpdmUoc3RydWN0IHNrX2J1ZmYqIHNrYiwgdTggcHJpbSkKK3ZvaWQgbGxjX3NhdmVfcHJpbWl0aXZlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYqIHNrYiwgdTggcHJpbSkKIHsKLQlzdHJ1Y3Qgc29ja2FkZHJfbGxjICphZGRyID0gbGxjX3VpX3NrYl9jYihza2IpOworCXN0cnVjdCBzb2NrYWRkcl9sbGMgKmFkZHI7CiAKKwlpZiAoc2tiLT5zay0+c2tfdHlwZSA9PSBTT0NLX1NUUkVBTSkgLyogU2VlIFVOSVg5OCAqLworCQlyZXR1cm47CiAgICAgICAgLyogc2F2ZSBwcmltaXRpdmUgZm9yIHVzZSBieSB0aGUgdXNlci4gKi8KLQlhZGRyLT5zbGxjX2ZhbWlseSA9IHNrYi0+c2stPnNrX2ZhbWlseTsKKwlhZGRyCQkgID0gbGxjX3VpX3NrYl9jYihza2IpOworCWFkZHItPnNsbGNfZmFtaWx5ID0gc2stPnNrX2ZhbWlseTsKIAlhZGRyLT5zbGxjX2FycGhyZCA9IHNrYi0+ZGV2LT50eXBlOwogCWFkZHItPnNsbGNfdGVzdCAgID0gcHJpbSA9PSBMTENfVEVTVF9QUklNOwogCWFkZHItPnNsbGNfeGlkICAgID0gcHJpbSA9PSBMTENfWElEX1BSSU07CkBAIC0xODksNyArMTk1LDcgQEAKIAkJaWYgKHNrYi0+c2stPnNrX3N0YXRlID09IFRDUF9MSVNURU4pCiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJZWxzZSB7Ci0JCQlsbGNfc2F2ZV9wcmltaXRpdmUoc2tiLCBldi0+cHJpbSk7CisJCQlsbGNfc2F2ZV9wcmltaXRpdmUoc2tiLT5zaywgc2tiLCBldi0+cHJpbSk7CiAKIAkJCS8qIHF1ZXVlIHNrYiB0byB0aGUgdXNlci4gKi8KIAkJCWlmIChzb2NrX3F1ZXVlX3Jjdl9za2Ioc2tiLT5zaywgc2tiKSkKQEAgLTMwOCw3ICszMTQsNyBAQAogCiAJc2sgPSBsbGNfbG9va3VwX2RncmFtKHNhcCwgJmxhZGRyKTsKIAlpZiAoc2spIHsKLQkJc2tiLT5zayA9IHNrOworCQlza2Jfc2V0X293bmVyX3Ioc2tiLCBzayk7CiAJCWxsY19zYXBfcmN2KHNhcCwgc2tiKTsKIAkJc29ja19wdXQoc2spOwogCX0gZWxzZQpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfc3RhdGlvbi5jIGIvbmV0L2xsYy9sbGNfc3RhdGlvbi5jCmluZGV4IDhmZTQ4YTIuLmYzN2RiZjggMTAwNjQ0Ci0tLSBhL25ldC9sbGMvbGxjX3N0YXRpb24uYworKysgYi9uZXQvbGxjL2xsY19zdGF0aW9uLmMKQEAgLTUwLDYgKzUwLDEwIEBACiAJc3RydWN0IHNrX2J1ZmZfaGVhZAkgICAgbWFjX3BkdV9xOwogfTsKIAorI2RlZmluZSBMTENfU1RBVElPTl9BQ0tfVElNRSAoMyAqIEhaKQorCitpbnQgc3lzY3RsX2xsY19zdGF0aW9uX2Fja190aW1lb3V0ID0gTExDX1NUQVRJT05fQUNLX1RJTUU7CisKIC8qIFR5cGVzIG9mIGV2ZW50cyAocG9zc2libGUgdmFsdWVzIGluICdldi0+dHlwZScpICovCiAjZGVmaW5lIExMQ19TVEFUSU9OX0VWX1RZUEVfU0lNUExFCTEKICNkZWZpbmUgTExDX1NUQVRJT05fRVZfVFlQRV9DT05ESVRJT04JMgpAQCAtMjE4LDcgKzIyMiw4IEBACiAKIHN0YXRpYyBpbnQgbGxjX3N0YXRpb25fYWNfc3RhcnRfYWNrX3RpbWVyKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JbW9kX3RpbWVyKCZsbGNfbWFpbl9zdGF0aW9uLmFja190aW1lciwgamlmZmllcyArIExMQ19BQ0tfVElNRSAqIEhaKTsKKwltb2RfdGltZXIoJmxsY19tYWluX3N0YXRpb24uYWNrX3RpbWVyLAorCQkgIGppZmZpZXMgKyBzeXNjdGxfbGxjX3N0YXRpb25fYWNrX3RpbWVvdXQpOwogCXJldHVybiAwOwogfQogCkBAIC0yNDksMTQgKzI1NCwxNCBAQAogc3RhdGljIGludCBsbGNfc3RhdGlvbl9hY19zZW5kX251bGxfZHNhcF94aWRfYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCByYyA9IDE7Ci0Jc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItPmRldik7CiAKIAlpZiAoIW5za2IpCiAJCWdvdG8gb3V0OwogCWxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIDAsIDAsIExMQ19QRFVfQ01EKTsKIAlsbGNfcGR1X2luaXRfYXNfeGlkX2NtZChuc2tiLCBMTENfWElEX05VTExfQ0xBU1NfMiwgMTI3KTsKIAlyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjX3N0YXRpb25fbWFjX3NhLCBsbGNfc3RhdGlvbl9tYWNfc2EpOwotCWlmIChyYykKKwlpZiAodW5saWtlbHkocmMpKQogCQlnb3RvIGZyZWU7CiAJbGxjX3N0YXRpb25fc2VuZF9wZHUobnNrYik7CiBvdXQ6CkBAIC0yNzAsMTggKzI3NSwxNyBAQAogewogCXU4IG1hY19kYVtFVEhfQUxFTl0sIGRzYXA7CiAJaW50IHJjID0gMTsKLQlzdHJ1Y3Qgc2tfYnVmZiogbnNrYiA9IGxsY19hbGxvY19mcmFtZSgpOworCXN0cnVjdCBza19idWZmKiBuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKE5VTEwsIHNrYi0+ZGV2KTsKIAogCWlmICghbnNrYikKIAkJZ290byBvdXQ7CiAJcmMgPSAwOwotCW5za2ItPmRldiA9IHNrYi0+ZGV2OwogCWxsY19wZHVfZGVjb2RlX3NhKHNrYiwgbWFjX2RhKTsKIAlsbGNfcGR1X2RlY29kZV9zc2FwKHNrYiwgJmRzYXApOwogCWxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIDAsIGRzYXAsIExMQ19QRFVfUlNQKTsKIAlsbGNfcGR1X2luaXRfYXNfeGlkX3JzcChuc2tiLCBMTENfWElEX05VTExfQ0xBU1NfMiwgMTI3KTsKIAlyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjX3N0YXRpb25fbWFjX3NhLCBtYWNfZGEpOwotCWlmIChyYykKKwlpZiAodW5saWtlbHkocmMpKQogCQlnb3RvIGZyZWU7CiAJbGxjX3N0YXRpb25fc2VuZF9wZHUobnNrYik7CiBvdXQ6CkBAIC0yOTUsMTggKzI5OSwxNyBAQAogewogCXU4IG1hY19kYVtFVEhfQUxFTl0sIGRzYXA7CiAJaW50IHJjID0gMTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZSgpOworCXN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKE5VTEwsIHNrYi0+ZGV2KTsKIAogCWlmICghbnNrYikKIAkJZ290byBvdXQ7CiAJcmMgPSAwOwotCW5za2ItPmRldiA9IHNrYi0+ZGV2OwogCWxsY19wZHVfZGVjb2RlX3NhKHNrYiwgbWFjX2RhKTsKIAlsbGNfcGR1X2RlY29kZV9zc2FwKHNrYiwgJmRzYXApOwogCWxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIDAsIGRzYXAsIExMQ19QRFVfUlNQKTsKICAgICAgICAJbGxjX3BkdV9pbml0X2FzX3Rlc3RfcnNwKG5za2IsIHNrYik7CiAJcmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsY19zdGF0aW9uX21hY19zYSwgbWFjX2RhKTsKLQlpZiAocmMpCisJaWYgKHVubGlrZWx5KHJjKSkKIAkJZ290byBmcmVlOwogCWxsY19zdGF0aW9uX3NlbmRfcGR1KG5za2IpOwogb3V0OgpAQCAtNjg5LDcgKzY5Miw4IEBACiAJaW5pdF90aW1lcigmbGxjX21haW5fc3RhdGlvbi5hY2tfdGltZXIpOwogCWxsY19tYWluX3N0YXRpb24uYWNrX3RpbWVyLmRhdGEgICAgID0gKHVuc2lnbmVkIGxvbmcpJmxsY19tYWluX3N0YXRpb247CiAJbGxjX21haW5fc3RhdGlvbi5hY2tfdGltZXIuZnVuY3Rpb24gPSBsbGNfc3RhdGlvbl9hY2tfdG1yX2NiOwotCisJbGxjX21haW5fc3RhdGlvbi5hY2tfdGltZXIuZXhwaXJlcyAgPSBqaWZmaWVzICsKKwkJCQkJCXN5c2N0bF9sbGNfc3RhdGlvbl9hY2tfdGltZW91dDsKIAlza2IgPSBhbGxvY19za2IoMCwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpCiAJCWdvdG8gb3V0OwpAQCAtNjk3LDcgKzcwMSw2IEBACiAJbGxjX3NldF9zdGF0aW9uX2hhbmRsZXIobGxjX3N0YXRpb25fcmN2KTsKIAlldiA9IGxsY19zdGF0aW9uX2V2KHNrYik7CiAJbWVtc2V0KGV2LCAwLCBzaXplb2YoKmV2KSk7Ci0JbGxjX21haW5fc3RhdGlvbi5hY2tfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAzICogSFo7CiAJbGxjX21haW5fc3RhdGlvbi5tYXhpbXVtX3JldHJ5CT0gMTsKIAlsbGNfbWFpbl9zdGF0aW9uLnN0YXRlCQk9IExMQ19TVEFUSU9OX1NUQVRFX0RPV047CiAJZXYtPnR5cGUJPSBMTENfU1RBVElPTl9FVl9UWVBFX1NJTVBMRTsKZGlmZiAtLWdpdCBhL25ldC9sbGMvc3lzY3RsX25ldF9sbGMuYyBiL25ldC9sbGMvc3lzY3RsX25ldF9sbGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWVhZGRiCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2xsYy9zeXNjdGxfbmV0X2xsYy5jCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogc3lzY3RsX25ldF9sbGMuYzogc3lzY3RsIGludGVyZmFjZSB0byBMTEMgbmV0IHN1YnN5c3RlbS4KKyAqIAorICogQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorI2luY2x1ZGUgPG5ldC9sbGMuaD4KKworI2lmbmRlZiBDT05GSUdfU1lTQ1RMCisjZXJyb3IgVGhpcyBmaWxlIHNob3VsZCBub3QgYmUgY29tcGlsZWQgd2l0aG91dCBDT05GSUdfU1lTQ1RMIGRlZmluZWQKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBsbGMyX3RpbWVvdXRfdGFibGVbXSA9IHsKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9MTEMyX0FDS19USU1FT1VULAorCQkucHJvY25hbWUJPSAiYWNrIiwKKwkJLmRhdGEJCT0gJnN5c2N0bF9sbGMyX2Fja190aW1lb3V0LAorCQkubWF4bGVuCQk9IHNpemVvZihsb25nKSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKKwkJLnN0cmF0ZWd5ICAgICAgID0gJnN5c2N0bF9qaWZmaWVzLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBORVRfTExDMl9CVVNZX1RJTUVPVVQsCisJCS5wcm9jbmFtZQk9ICJidXN5IiwKKwkJLmRhdGEJCT0gJnN5c2N0bF9sbGMyX2J1c3lfdGltZW91dCwKKwkJLm1heGxlbgkJPSBzaXplb2YobG9uZyksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCisJCS5zdHJhdGVneSAgICAgICA9ICZzeXNjdGxfamlmZmllcywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX0xMQzJfUF9USU1FT1VULAorCQkucHJvY25hbWUJPSAicCIsCisJCS5kYXRhCQk9ICZzeXNjdGxfbGxjMl9wX3RpbWVvdXQsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGxvbmcpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAorCQkuc3RyYXRlZ3kgICAgICAgPSAmc3lzY3RsX2ppZmZpZXMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9MTEMyX1JFSl9USU1FT1VULAorCQkucHJvY25hbWUJPSAicmVqIiwKKwkJLmRhdGEJCT0gJnN5c2N0bF9sbGMyX3Jlal90aW1lb3V0LAorCQkubWF4bGVuCQk9IHNpemVvZihsb25nKSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKKwkJLnN0cmF0ZWd5ICAgICAgID0gJnN5c2N0bF9qaWZmaWVzLAorCX0sCisJeyAwIH0sCit9OworCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBsbGNfc3RhdGlvbl90YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lCT0gTkVUX0xMQ19TVEFUSU9OX0FDS19USU1FT1VULAorCQkucHJvY25hbWUJPSAiYWNrX3RpbWVvdXQiLAorCQkuZGF0YQkJPSAmc3lzY3RsX2xsY19zdGF0aW9uX2Fja190aW1lb3V0LAorCQkubWF4bGVuCQk9IHNpemVvZihsb25nKSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKKwkJLnN0cmF0ZWd5ICAgICAgID0gJnN5c2N0bF9qaWZmaWVzLAorCX0sCisJeyAwIH0sCit9OworCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBsbGMyX2Rpcl90aW1lb3V0X3RhYmxlW10gPSB7CisJeworCQkuY3RsX25hbWUJPSBORVRfTExDMiwKKwkJLnByb2NuYW1lCT0gInRpbWVvdXQiLAorCQkubW9kZQkJPSAwNTU1LAorCQkuY2hpbGQJCT0gbGxjMl90aW1lb3V0X3RhYmxlLAorICAgICAgIAl9LAorCXsgMCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbGxjX3RhYmxlW10gPSB7CisJeworCQkuY3RsX25hbWUJPSBORVRfTExDMiwKKwkJLnByb2NuYW1lCT0gImxsYzIiLAorCQkubW9kZQkJPSAwNTU1LAorCQkuY2hpbGQJCT0gbGxjMl9kaXJfdGltZW91dF90YWJsZSwKKyAgICAgICAJfSwKKwl7CisJCS5jdGxfbmFtZSAgICAgICA9IE5FVF9MTENfU1RBVElPTiwKKwkJLnByb2NuYW1lICAgICAgID0gInN0YXRpb24iLAorCQkubW9kZSAgICAgICAgICAgPSAwNTU1LAorCQkuY2hpbGQgICAgICAgICAgPSBsbGNfc3RhdGlvbl90YWJsZSwKKwl9LAorCXsgMCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbGxjX2Rpcl90YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lCT0gTkVUX0xMQywKKwkJLnByb2NuYW1lCT0gImxsYyIsCisJCS5tb2RlCQk9IDA1NTUsCisJCS5jaGlsZAkJPSBsbGNfdGFibGUsCisgICAgICAgCX0sCisJeyAwIH0sCit9OworCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBsbGNfcm9vdF90YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lCT0gQ1RMX05FVCwKKwkJLnByb2NuYW1lCT0gIm5ldCIsCisJCS5tb2RlCQk9IDA1NTUsCisJCS5jaGlsZAkJPSBsbGNfZGlyX3RhYmxlLAorCX0sCisJeyAwIH0sCit9OworCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmxsY190YWJsZV9oZWFkZXI7CisKK2ludCBfX2luaXQgbGxjX3N5c2N0bF9pbml0KHZvaWQpCit7CisJbGxjX3RhYmxlX2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF90YWJsZShsbGNfcm9vdF90YWJsZSwgMSk7CisKKwlyZXR1cm4gbGxjX3RhYmxlX2hlYWRlciA/IDAgOiAtRU5PTUVNOworfQorCit2b2lkIGxsY19zeXNjdGxfZXhpdCh2b2lkKQoreworCWlmIChsbGNfdGFibGVfaGVhZGVyKSB7CisJCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGxsY190YWJsZV9oZWFkZXIpOworCQlsbGNfdGFibGVfaGVhZGVyID0gTlVMTDsKKwl9Cit9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYwppbmRleCA0OWEzOTAwLi40YmMyN2E2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMKQEAgLTEzMyw3ICsxMzMsNyBAQAogCW1lbXNldCh0YiwgMCwgc2l6ZW9mKHN0cnVjdCBuZmF0dHIgKikgKiBtYXhhdHRyKTsKIAogCXdoaWxlIChORkFfT0sobmZhLCBsZW4pKSB7Ci0JCXVuc2lnbmVkIGZsYXZvciA9IG5mYS0+bmZhX3R5cGU7CisJCXVuc2lnbmVkIGZsYXZvciA9IE5GQV9UWVBFKG5mYSk7CiAJCWlmIChmbGF2b3IgJiYgZmxhdm9yIDw9IG1heGF0dHIpCiAJCQl0YltmbGF2b3ItMV0gPSBuZmE7CiAJCW5mYSA9IE5GQV9ORVhUKG5mYSwgbGVuKTsKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCQlpbnQgYXR0cmxlbiA9IG5saC0+bmxtc2dfbGVuIC0gTkxNU0dfQUxJR04obWluX2xlbik7CiAKIAkJd2hpbGUgKE5GQV9PSyhhdHRyLCBhdHRybGVuKSkgewotCQkJdW5zaWduZWQgZmxhdm9yID0gYXR0ci0+bmZhX3R5cGU7CisJCQl1bnNpZ25lZCBmbGF2b3IgPSBORkFfVFlQRShhdHRyKTsKIAkJCWlmIChmbGF2b3IpIHsKIAkJCQlpZiAoZmxhdm9yID4gYXR0cl9jb3VudCkKIAkJCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xOTUsNyArMTk1LDcgQEAKIAogaW50IG5mbmV0bGlua19zZW5kKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHVuc2lnbmVkIGdyb3VwLCBpbnQgZWNobykKIHsKLQlpbnQgYWxsb2NhdGlvbiA9IGluX2ludGVycnVwdCgpID8gR0ZQX0FUT01JQyA6IEdGUF9LRVJORUw7CisJZ2ZwX3QgYWxsb2NhdGlvbiA9IGluX2ludGVycnVwdCgpID8gR0ZQX0FUT01JQyA6IEdGUF9LRVJORUw7CiAJaW50IGVyciA9IDA7CiAKIAlORVRMSU5LX0NCKHNrYikuZHN0X2dyb3VwID0gZ3JvdXA7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jCmluZGV4IGZmNTYwMWMuLmVmY2QxMGYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jCkBAIC00OTQsOCArNDk0LDggQEAKIAlpZiAoc2tiLT50c3RhbXAub2ZmX3NlYykgewogCQlzdHJ1Y3QgbmZ1bG5sX21zZ19wYWNrZXRfdGltZXN0YW1wIHRzOwogCi0JCXRzLnNlYyA9IGNwdV90b19iZTY0KHNrYl90dl9iYXNlLnR2X3NlYyArIHNrYi0+dHN0YW1wLm9mZl9zZWMpOwotCQl0cy51c2VjID0gY3B1X3RvX2JlNjQoc2tiX3R2X2Jhc2UudHZfdXNlYyArIHNrYi0+dHN0YW1wLm9mZl91c2VjKTsKKwkJdHMuc2VjID0gY3B1X3RvX2JlNjQoc2tiLT50c3RhbXAub2ZmX3NlYyk7CisJCXRzLnVzZWMgPSBjcHVfdG9fYmU2NChza2ItPnRzdGFtcC5vZmZfdXNlYyk7CiAKIAkJTkZBX1BVVChpbnN0LT5za2IsIE5GVUxBX1RJTUVTVEFNUCwgc2l6ZW9mKHRzKSwgJnRzKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYwppbmRleCBmODFmZThjLi5lYWE0NGM0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMKQEAgLTQ5Miw4ICs0OTIsOCBAQAogCWlmIChlbnRyeS0+c2tiLT50c3RhbXAub2ZmX3NlYykgewogCQlzdHJ1Y3QgbmZxbmxfbXNnX3BhY2tldF90aW1lc3RhbXAgdHM7CiAKLQkJdHMuc2VjID0gY3B1X3RvX2JlNjQoc2tiX3R2X2Jhc2UudHZfc2VjICsgZW50cnktPnNrYi0+dHN0YW1wLm9mZl9zZWMpOwotCQl0cy51c2VjID0gY3B1X3RvX2JlNjQoc2tiX3R2X2Jhc2UudHZfdXNlYyArIGVudHJ5LT5za2ItPnRzdGFtcC5vZmZfdXNlYyk7CisJCXRzLnNlYyA9IGNwdV90b19iZTY0KGVudHJ5LT5za2ItPnRzdGFtcC5vZmZfc2VjKTsKKwkJdHMudXNlYyA9IGNwdV90b19iZTY0KGVudHJ5LT5za2ItPnRzdGFtcC5vZmZfdXNlYyk7CiAKIAkJTkZBX1BVVChza2IsIE5GUUFfVElNRVNUQU1QLCBzaXplb2YodHMpLCAmdHMpOwogCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYyBiL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYwppbmRleCBhNjRlMWQ1Li42NzhjM2YyIDEwMDY0NAotLS0gYS9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKKysrIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCkBAIC03NTgsNyArNzU4LDcgQEAKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqbmV0bGlua190cmltKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCSAgIHVuc2lnbmVkIGludCBfX25vY2FzdCBhbGxvY2F0aW9uKQorCQkJCQkgICBnZnBfdCBhbGxvY2F0aW9uKQogewogCWludCBkZWx0YTsKIApAQCAtODgwLDcgKzg4MCw3IEBACiB9CiAKIGludCBuZXRsaW5rX2Jyb2FkY2FzdChzdHJ1Y3Qgc29jayAqc3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLAotCQkgICAgICB1MzIgZ3JvdXAsIHVuc2lnbmVkIGludCBfX25vY2FzdCBhbGxvY2F0aW9uKQorCQkgICAgICB1MzIgZ3JvdXAsIGdmcF90IGFsbG9jYXRpb24pCiB7CiAJc3RydWN0IG5ldGxpbmtfYnJvYWRjYXN0X2RhdGEgaW5mbzsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKZGlmZiAtLWdpdCBhL25ldC9uZXRyb20vbnJfZGV2LmMgYi9uZXQvbmV0cm9tL25yX2Rldi5jCmluZGV4IDRlNjZlZWYuLjUwOWFmZGQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRyb20vbnJfZGV2LmMKKysrIGIvbmV0L25ldHJvbS9ucl9kZXYuYwpAQCAtNTgsNyArNTgsNyBAQAogCiAJLyogU3Bvb2YgaW5jb21pbmcgZGV2aWNlICovCiAJc2tiLT5kZXYgICAgICA9IGRldjsKLQlza2ItPmgucmF3ICAgID0gc2tiLT5kYXRhOworCXNrYi0+bWFjLnJhdyAgPSBza2ItPm5oLnJhdzsKIAlza2ItPm5oLnJhdyAgID0gc2tiLT5kYXRhOwogCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKIApkaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKaW5kZXggODY5MGYxNy4uNDk5YWUzZCAxMDA2NDQKLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYworKysgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCkBAIC0zNiw2ICszNiwxMSBAQAogICoJTWljaGFsIE9zdHJvd3NraSAgICAgICAgOiAgICAgICBNb2R1bGUgaW5pdGlhbGl6YXRpb24gY2xlYW51cC4KICAqICAgICAgICAgVWxpc2VzIEFsb25zbyAgICAgICAgOiAgICAgICBGcmFtZSBudW1iZXIgbGltaXQgcmVtb3ZhbCBhbmQgCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0X3NldF9yaW5nIG1lbW9yeSBsZWFrLgorICoJCUVyaWMgQmllZGVybWFuCToJQWxsb3cgZm9yID4gOCBieXRlIGhhcmR3YXJlIGFkZHJlc3Nlcy4KKyAqCQkJCQlUaGUgY29udmVudGlvbiBpcyB0aGF0IGxvbmdlciBhZGRyZXNzZXMKKyAqCQkJCQl3aWxsIHNpbXBseSBleHRlbmQgdGhlIGhhcmR3YXJlIGFkZHJlc3MKKyAqCQkJCQlieXRlIGFycmF5cyBhdCB0aGUgZW5kIG9mIHNvY2thZGRyX2xsIAorICoJCQkJCWFuZCBwYWNrZXRfbXJlcS4KICAqCiAgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0xNjEsNyArMTY2LDE3IEBACiAJaW50CQkJY291bnQ7CiAJdW5zaWduZWQgc2hvcnQJCXR5cGU7CiAJdW5zaWduZWQgc2hvcnQJCWFsZW47Ci0JdW5zaWduZWQgY2hhcgkJYWRkcls4XTsKKwl1bnNpZ25lZCBjaGFyCQlhZGRyW01BWF9BRERSX0xFTl07Cit9OworLyogaWRlbnRpY2FsIHRvIHN0cnVjdCBwYWNrZXRfbXJlcSBleGNlcHQgaXQgaGFzCisgKiBhIGxvbmdlciBhZGRyZXNzIGZpZWxkLgorICovCitzdHJ1Y3QgcGFja2V0X21yZXFfbWF4Cit7CisJaW50CQltcl9pZmluZGV4OworCXVuc2lnbmVkIHNob3J0CW1yX3R5cGU7CisJdW5zaWduZWQgc2hvcnQJbXJfYWxlbjsKKwl1bnNpZ25lZCBjaGFyCW1yX2FkZHJlc3NbTUFYX0FERFJfTEVOXTsKIH07CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUEFDS0VUX01NQVAKQEAgLTYzOSw4ICs2NTQsOCBAQAogCQlfX25ldF90aW1lc3RhbXAoc2tiKTsKIAkJc29ja19lbmFibGVfdGltZXN0YW1wKHNrKTsKIAl9Ci0JaC0+dHBfc2VjID0gc2tiX3R2X2Jhc2UudHZfc2VjICsgc2tiLT50c3RhbXAub2ZmX3NlYzsKLQloLT50cF91c2VjID0gc2tiX3R2X2Jhc2UudHZfdXNlYyArIHNrYi0+dHN0YW1wLm9mZl91c2VjOworCWgtPnRwX3NlYyA9IHNrYi0+dHN0YW1wLm9mZl9zZWM7CisJaC0+dHBfdXNlYyA9IHNrYi0+dHN0YW1wLm9mZl91c2VjOwogCiAJc2xsID0gKHN0cnVjdCBzb2NrYWRkcl9sbCopKCh1OCopaCArIFRQQUNLRVRfQUxJR04oc2l6ZW9mKCpoKSkpOwogCXNsbC0+c2xsX2hhbGVuID0gMDsKQEAgLTcxNiw2ICs3MzEsOCBAQAogCQllcnIgPSAtRUlOVkFMOwogCQlpZiAobXNnLT5tc2dfbmFtZWxlbiA8IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpKQogCQkJZ290byBvdXQ7CisJCWlmIChtc2ctPm1zZ19uYW1lbGVuIDwgKHNhZGRyLT5zbGxfaGFsZW4gKyBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfbGwsIHNsbF9hZGRyKSkpCisJCQlnb3RvIG91dDsKIAkJaWZpbmRleAk9IHNhZGRyLT5zbGxfaWZpbmRleDsKIAkJcHJvdG8JPSBzYWRkci0+c2xsX3Byb3RvY29sOwogCQlhZGRyCT0gc2FkZHItPnNsbF9hZGRyOwpAQCAtMTA0NSw2ICsxMDYyLDcgQEAKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBjb3BpZWQsIGVycjsKKwlzdHJ1Y3Qgc29ja2FkZHJfbGwgKnNsbDsKIAogCWVyciA9IC1FSU5WQUw7CiAJaWYgKGZsYWdzICYgfihNU0dfUEVFS3xNU0dfRE9OVFdBSVR8TVNHX1RSVU5DfE1TR19DTVNHX0NPTVBBVCkpCkBAIC0xMDU3LDE2ICsxMDc1LDYgQEAKICNlbmRpZgogCiAJLyoKLQkgKglJZiB0aGUgYWRkcmVzcyBsZW5ndGggZmllbGQgaXMgdGhlcmUgdG8gYmUgZmlsbGVkIGluLCB3ZSBmaWxsCi0JICoJaXQgaW4gbm93LgotCSAqLwotCi0JaWYgKHNvY2stPnR5cGUgPT0gU09DS19QQUNLRVQpCi0JCW1zZy0+bXNnX25hbWVsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3BrdCk7Ci0JZWxzZQotCQltc2ctPm1zZ19uYW1lbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9sbCk7Ci0KLQkvKgogCSAqCUNhbGwgdGhlIGdlbmVyaWMgZGF0YWdyYW0gcmVjZWl2ZXIuIFRoaXMgaGFuZGxlcyBhbGwgc29ydHMKIAkgKglvZiBob3JyaWJsZSByYWNlcyBhbmQgcmUtZW50cmFuY3kgc28gd2UgY2FuIGZvcmdldCBhYm91dCBpdAogCSAqCWluIHRoZSBwcm90b2NvbCBsYXllcnMuCkBAIC0xMDg3LDYgKzEwOTUsMTcgQEAKIAkJZ290byBvdXQ7CiAKIAkvKgorCSAqCUlmIHRoZSBhZGRyZXNzIGxlbmd0aCBmaWVsZCBpcyB0aGVyZSB0byBiZSBmaWxsZWQgaW4sIHdlIGZpbGwKKwkgKglpdCBpbiBub3cuCisJICovCisKKwlzbGwgPSAoc3RydWN0IHNvY2thZGRyX2xsKilza2ItPmNiOworCWlmIChzb2NrLT50eXBlID09IFNPQ0tfUEFDS0VUKQorCQltc2ctPm1zZ19uYW1lbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9wa3QpOworCWVsc2UKKwkJbXNnLT5tc2dfbmFtZWxlbiA9IHNsbC0+c2xsX2hhbGVuICsgb2Zmc2V0b2Yoc3RydWN0IHNvY2thZGRyX2xsLCBzbGxfYWRkcik7CisKKwkvKgogCSAqCVlvdSBsb3NlIGFueSBkYXRhIGJleW9uZCB0aGUgYnVmZmVyIHlvdSBnYXZlLiBJZiBpdCB3b3JyaWVzIGEKIAkgKgl1c2VyIHByb2dyYW0gdGhleSBjYW4gYXNrIHRoZSBkZXZpY2UgZm9yIGl0cyBNVFUgYW55d2F5LgogCSAqLwpAQCAtMTE2Niw3ICsxMTg1LDcgQEAKIAkJc2xsLT5zbGxfaGF0eXBlID0gMDsJLyogQmFkOiB3ZSBoYXZlIG5vIEFSUEhSRF9VTlNQRUMgKi8KIAkJc2xsLT5zbGxfaGFsZW4gPSAwOwogCX0KLQkqdWFkZHJfbGVuID0gc2l6ZW9mKCpzbGwpOworCSp1YWRkcl9sZW4gPSBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfbGwsIHNsbF9hZGRyKSArIHNsbC0+c2xsX2hhbGVuOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTk5LDcgKzEyMTgsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBwYWNrZXRfbWNfYWRkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBhY2tldF9tcmVxICptcmVxKQorc3RhdGljIGludCBwYWNrZXRfbWNfYWRkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBhY2tldF9tcmVxX21heCAqbXJlcSkKIHsKIAlzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvID0gcGt0X3NrKHNrKTsKIAlzdHJ1Y3QgcGFja2V0X21jbGlzdCAqbWwsICppOwpAQCAtMTI0OSw3ICsxMjY4LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHBhY2tldF9tY19kcm9wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBhY2tldF9tcmVxICptcmVxKQorc3RhdGljIGludCBwYWNrZXRfbWNfZHJvcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwYWNrZXRfbXJlcV9tYXggKm1yZXEpCiB7CiAJc3RydWN0IHBhY2tldF9tY2xpc3QgKm1sLCAqKm1scDsKIApAQCAtMTMxNSwxMSArMTMzNCwxNyBAQAogCWNhc2UgUEFDS0VUX0FERF9NRU1CRVJTSElQOgkKIAljYXNlIFBBQ0tFVF9EUk9QX01FTUJFUlNISVA6CiAJewotCQlzdHJ1Y3QgcGFja2V0X21yZXEgbXJlcTsKLQkJaWYgKG9wdGxlbjxzaXplb2YobXJlcSkpCisJCXN0cnVjdCBwYWNrZXRfbXJlcV9tYXggbXJlcTsKKwkJaW50IGxlbiA9IG9wdGxlbjsKKwkJbWVtc2V0KCZtcmVxLCAwLCBzaXplb2YobXJlcSkpOworCQlpZiAobGVuIDwgc2l6ZW9mKHN0cnVjdCBwYWNrZXRfbXJlcSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZtcmVxLG9wdHZhbCxzaXplb2YobXJlcSkpKQorCQlpZiAobGVuID4gc2l6ZW9mKG1yZXEpKQorCQkJbGVuID0gc2l6ZW9mKG1yZXEpOworCQlpZiAoY29weV9mcm9tX3VzZXIoJm1yZXEsb3B0dmFsLGxlbikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKGxlbiA8IChtcmVxLm1yX2FsZW4gKyBvZmZzZXRvZihzdHJ1Y3QgcGFja2V0X21yZXEsIG1yX2FkZHJlc3MpKSkKKwkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAob3B0bmFtZSA9PSBQQUNLRVRfQUREX01FTUJFUlNISVApCiAJCQlyZXQgPSBwYWNrZXRfbWNfYWRkKHNrLCAmbXJlcSk7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL25ldC9yb3NlL2FmX3Jvc2UuYyBiL25ldC9yb3NlL2FmX3Jvc2UuYwppbmRleCA1YWNiMTY4Li44MjlmZGJjIDEwMDY0NAotLS0gYS9uZXQvcm9zZS9hZl9yb3NlLmMKKysrIGIvbmV0L3Jvc2UvYWZfcm9zZS5jCkBAIC0xNDcyLDIyICsxNDcyLDI1IEBACiBzdGF0aWMgaW50IF9faW5pdCByb3NlX3Byb3RvX2luaXQodm9pZCkKIHsKIAlpbnQgaTsKLQlpbnQgcmMgPSBwcm90b19yZWdpc3Rlcigmcm9zZV9wcm90bywgMCk7CisJaW50IHJjOwogCisJaWYgKHJvc2VfbmRldnMgPiAweDdGRkZGRkZGL3NpemVvZihzdHJ1Y3QgbmV0X2RldmljZSAqKSkgeworCQlwcmludGsoS0VSTl9FUlIgIlJPU0U6IHJvc2VfcHJvdG9faW5pdCAtIHJvc2VfbmRldnMgcGFyYW1ldGVyIHRvIGxhcmdlXG4iKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlyYyA9IHByb3RvX3JlZ2lzdGVyKCZyb3NlX3Byb3RvLCAwKTsKIAlpZiAocmMgIT0gMCkKIAkJZ290byBvdXQ7CiAKIAlyb3NlX2NhbGxzaWduID0gbnVsbF9heDI1X2FkZHJlc3M7CiAKLQlpZiAocm9zZV9uZGV2cyA+IDB4N0ZGRkZGRkYvc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlICopKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiUk9TRTogcm9zZV9wcm90b19pbml0IC0gcm9zZV9uZGV2cyBwYXJhbWV0ZXIgdG8gbGFyZ2VcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCiAJZGV2X3Jvc2UgPSBrbWFsbG9jKHJvc2VfbmRldnMgKiBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2UgKiksIEdGUF9LRVJORUwpOwogCWlmIChkZXZfcm9zZSA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiUk9TRTogcm9zZV9wcm90b19pbml0IC0gdW5hYmxlIHRvIGFsbG9jYXRlIGRldmljZSBzdHJ1Y3R1cmVcbiIpOwotCQlyZXR1cm4gLTE7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXRfcHJvdG9fdW5yZWdpc3RlcjsKIAl9CiAKIAltZW1zZXQoZGV2X3Jvc2UsIDB4MDAsIHJvc2VfbmRldnMgKiBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2UqKSk7CkBAIC0xNTAwLDEwICsxNTAzLDEyIEBACiAJCQkJICAgbmFtZSwgcm9zZV9zZXR1cCk7CiAJCWlmICghZGV2KSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIlJPU0U6IHJvc2VfcHJvdG9faW5pdCAtIHVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnlcbiIpOworCQkJcmMgPSAtRU5PTUVNOwogCQkJZ290byBmYWlsOwogCQl9Ci0JCWlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJST1NFOiBuZXRkZXZpY2UgcmVnZWlzdHJhdGlvbiBmYWlsZWRcbiIpOworCQlyYyA9IHJlZ2lzdGVyX25ldGRldihkZXYpOworCQlpZiAocmMpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiUk9TRTogbmV0ZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwogCQkJZnJlZV9uZXRkZXYoZGV2KTsKIAkJCWdvdG8gZmFpbDsKIAkJfQpAQCAtMTUzNiw4ICsxNTQxLDkgQEAKIAkJZnJlZV9uZXRkZXYoZGV2X3Jvc2VbaV0pOwogCX0KIAlrZnJlZShkZXZfcm9zZSk7CitvdXRfcHJvdG9fdW5yZWdpc3RlcjoKIAlwcm90b191bnJlZ2lzdGVyKCZyb3NlX3Byb3RvKTsKLQlyZXR1cm4gLUVOT01FTTsKKwlnb3RvIG91dDsKIH0KIG1vZHVsZV9pbml0KHJvc2VfcHJvdG9faW5pdCk7CiAKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jYWxsLmMgYi9uZXQvcnhycGMvY2FsbC5jCmluZGV4IDVjZmQ0Y2EuLmM0YWViN2QgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9jYWxsLmMKKysrIGIvbmV0L3J4cnBjL2NhbGwuYwpAQCAtMTkyMyw3ICsxOTIzLDcgQEAKIAkJCSAgc2l6ZV90IHNpb2MsCiAJCQkgIHN0cnVjdCBrdmVjICpzaW92LAogCQkJICB1OCByeGhkcl9mbGFncywKLQkJCSAgaW50IGFsbG9jX2ZsYWdzLAorCQkJICBnZnBfdCBhbGxvY19mbGFncywKIAkJCSAgaW50IGR1cF9kYXRhLAogCQkJICBzaXplX3QgKnNpemVfc2VudCkKIHsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jb25uZWN0aW9uLmMgYi9uZXQvcnhycGMvY29ubmVjdGlvbi5jCmluZGV4IDYxNDYzYzcuLjJiYTE0YTcgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9jb25uZWN0aW9uLmMKKysrIGIvbmV0L3J4cnBjL2Nvbm5lY3Rpb24uYwpAQCAtNTIyLDcgKzUyMiw3IEBACiAJCSAgICAgIHVpbnQ4X3QgdHlwZSwKIAkJICAgICAgaW50IGRjb3VudCwKIAkJICAgICAgc3RydWN0IGt2ZWMgZGlvdltdLAotCQkgICAgICBpbnQgYWxsb2NfZmxhZ3MsCisJCSAgICAgIGdmcF90IGFsbG9jX2ZsYWdzLAogCQkgICAgICBzdHJ1Y3QgcnhycGNfbWVzc2FnZSAqKl9tc2cpCiB7CiAJc3RydWN0IHJ4cnBjX21lc3NhZ2UgKm1zZzsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9LY29uZmlnIGIvbmV0L3NjaGVkL0tjb25maWcKaW5kZXggNDVkM2JjMC4uODE1MTBkYSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL0tjb25maWcKKysrIGIvbmV0L3NjaGVkL0tjb25maWcKQEAgLTcyLDkgKzcyLDExIEBACiAJICBDaG9vc2UgdGhpcyBpZiB5b3UgbmVlZCBhIGhpZ2ggcmVzb2x1dGlvbiBjbG9jayBzb3VyY2UgYnV0IGNhbid0IHVzZQogCSAgdGhlIENQVSdzIGN5Y2xlIGNvdW50ZXIuCiAKKyMgZG9uJ3QgYWxsb3cgb24gU01QIHg4NiBiZWNhdXNlIHRoZXkgY2FuIGhhdmUgdW5zeW5jaHJvbml6ZWQgVFNDcy4KKyMgZ2V0dGltZW9mZGF5IGlzIGEgZ29vZCBhbHRlcm5hdGl2ZQogY29uZmlnIE5FVF9TQ0hfQ0xLX0NQVQogCWJvb2wgIkNQVSBjeWNsZSBjb3VudGVyIgotCWRlcGVuZHMgb24gWDg2X1RTQyB8fCBYODZfNjQgfHwgQUxQSEEgfHwgU1BBUkM2NCB8fCBQUEM2NCB8fCBJQTY0CisJZGVwZW5kcyBvbiAoKFg4Nl9UU0MgfHwgWDg2XzY0KSAmJiAhU01QKSB8fCBBTFBIQSB8fCBTUEFSQzY0IHx8IFBQQzY0IHx8IElBNjQKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgQ1BVJ3MgY3ljbGUgY291bnRlciBhcyBjbG9jayBzb3VyY2UuCiAJICBUaGlzIGlzIGEgY2hlYXAgYW5kIGhpZ2ggcmVzb2x1dGlvbiBjbG9jayBzb3VyY2UsIGJ1dCBvbiBzb21lCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvZW1fbWV0YS5jIGIvbmV0L3NjaGVkL2VtX21ldGEuYwppbmRleCAwMGVhZTVmLi5jZjY4YTU5IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvZW1fbWV0YS5jCisrKyBiL25ldC9zY2hlZC9lbV9tZXRhLmMKQEAgLTM5MywxMCArMzkzLDEwIEBACiAJZHN0LT52YWx1ZSA9IHNrYi0+c2stPnNrX3JvdXRlX2NhcHM7CiB9CiAKLU1FVEFfQ09MTEVDVE9SKGludF9za19oYXNoZW50KQorTUVUQV9DT0xMRUNUT1IoaW50X3NrX2hhc2gpCiB7CiAJU0tJUF9OT05MT0NBTChza2IpOwotCWRzdC0+dmFsdWUgPSBza2ItPnNrLT5za19oYXNoZW50OworCWRzdC0+dmFsdWUgPSBza2ItPnNrLT5za19oYXNoOwogfQogCiBNRVRBX0NPTExFQ1RPUihpbnRfc2tfbGluZ2VydGltZSkKQEAgLTUxNSw3ICs1MTUsNyBAQAogCQlbTUVUQV9JRChTS19GT1JXQVJEX0FMTE9DUyldCT0gTUVUQV9GVU5DKGludF9za19md2RfYWxsb2MpLAogCQlbTUVUQV9JRChTS19BTExPQ1MpXQkJPSBNRVRBX0ZVTkMoaW50X3NrX2FsbG9jKSwKIAkJW01FVEFfSUQoU0tfUk9VVEVfQ0FQUyldCT0gTUVUQV9GVU5DKGludF9za19yb3V0ZV9jYXBzKSwKLQkJW01FVEFfSUQoU0tfSEFTSEVOVCldCQk9IE1FVEFfRlVOQyhpbnRfc2tfaGFzaGVudCksCisJCVtNRVRBX0lEKFNLX0hBU0gpXQkJPSBNRVRBX0ZVTkMoaW50X3NrX2hhc2gpLAogCQlbTUVUQV9JRChTS19MSU5HRVJUSU1FKV0JPSBNRVRBX0ZVTkMoaW50X3NrX2xpbmdlcnRpbWUpLAogCQlbTUVUQV9JRChTS19BQ0tfQkFDS0xPRyldCT0gTUVUQV9GVU5DKGludF9za19hY2tfYmwpLAogCQlbTUVUQV9JRChTS19NQVhfQUNLX0JBQ0tMT0cpXQk9IE1FVEFfRlVOQyhpbnRfc2tfbWF4X2Fja19ibCksCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9hc3NvY2lvbGEuYyBiL25ldC9zY3RwL2Fzc29jaW9sYS5jCmluZGV4IDViMjRhZTAuLjEyYjBmNTggMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2Fzc29jaW9sYS5jCisrKyBiL25ldC9zY3RwL2Fzc29jaW9sYS5jCkBAIC03MSw3ICs3MSw3IEBACiAJCQkJCSAgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLAogCQkJCQkgIGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICBzY3RwX3Njb3BlX3Qgc2NvcGUsCi0JCQkJCSAgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCkKKwkJCQkJICBnZnBfdCBnZnApCiB7CiAJc3RydWN0IHNjdHBfc29jayAqc3A7CiAJaW50IGk7CkBAIC0yNzMsNyArMjczLDcgQEAKIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICpzY3RwX2Fzc29jaWF0aW9uX25ldyhjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsCiAJCQkJCSBjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSBzY3RwX3Njb3BlX3Qgc2NvcGUsCi0JCQkJCSB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwKQorCQkJCQkgZ2ZwX3QgZ2ZwKQogewogCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOwogCkBAIC00NzksNyArNDc5LDcgQEAKIC8qIEFkZCBhIHRyYW5zcG9ydCBhZGRyZXNzIHRvIGFuIGFzc29jaWF0aW9uLiAgKi8KIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqc2N0cF9hc3NvY19hZGRfcGVlcihzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAkJCQkJICAgY29uc3QgdW5pb24gc2N0cF9hZGRyICphZGRyLAotCQkJCQkgICBjb25zdCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwLAorCQkJCQkgICBjb25zdCBnZnBfdCBnZnAsCiAJCQkJCSAgIGNvbnN0IGludCBwZWVyX3N0YXRlKQogewogCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqcGVlcjsKQEAgLTEyMzEsNyArMTIzMSw3IEBACiAgKiBsb2NhbCBlbmRwb2ludCBhbmQgdGhlIHJlbW90ZSBwZWVyLgogICovCiBpbnQgc2N0cF9hc3NvY19zZXRfYmluZF9hZGRyX2Zyb21fZXAoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwKQorCQkJCSAgICAgZ2ZwX3QgZ2ZwKQogewogCXNjdHBfc2NvcGVfdCBzY29wZTsKIAlpbnQgZmxhZ3M7CkBAIC0xMjU0LDcgKzEyNTQsNyBAQAogLyogQnVpbGQgdGhlIGFzc29jaWF0aW9uJ3MgYmluZCBhZGRyZXNzIGxpc3QgZnJvbSB0aGUgY29va2llLiAgKi8KIGludCBzY3RwX2Fzc29jX3NldF9iaW5kX2FkZHJfZnJvbV9jb29raWUoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiAJCQkJCSBzdHJ1Y3Qgc2N0cF9jb29raWUgKmNvb2tpZSwKLQkJCQkJIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnApCisJCQkJCSBnZnBfdCBnZnApCiB7CiAJaW50IHZhcl9zaXplMiA9IG50b2hzKGNvb2tpZS0+cGVlcl9pbml0LT5jaHVua19oZHIubGVuZ3RoKTsKIAlpbnQgdmFyX3NpemUzID0gY29va2llLT5yYXdfYWRkcl9saXN0X2xlbjsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2JpbmRfYWRkci5jIGIvbmV0L3NjdHAvYmluZF9hZGRyLmMKaW5kZXggZjcxNTQ5Ny4uMmI5NjI2MiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvYmluZF9hZGRyLmMKKysrIGIvbmV0L3NjdHAvYmluZF9hZGRyLmMKQEAgLTUzLDcgKzUzLDcgQEAKIAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgZm9yIGludGVybmFsIGhlbHBlcnMuICovCiBzdGF0aWMgaW50IHNjdHBfY29weV9vbmVfYWRkcihzdHJ1Y3Qgc2N0cF9iaW5kX2FkZHIgKiwgdW5pb24gc2N0cF9hZGRyICosCi0JCQkgICAgICBzY3RwX3Njb3BlX3Qgc2NvcGUsIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnAsCisJCQkgICAgICBzY3RwX3Njb3BlX3Qgc2NvcGUsIGdmcF90IGdmcCwKIAkJCSAgICAgIGludCBmbGFncyk7CiBzdGF0aWMgdm9pZCBzY3RwX2JpbmRfYWRkcl9jbGVhbihzdHJ1Y3Qgc2N0cF9iaW5kX2FkZHIgKik7CiAKQEAgLTY0LDcgKzY0LDcgQEAKICAqLwogaW50IHNjdHBfYmluZF9hZGRyX2NvcHkoc3RydWN0IHNjdHBfYmluZF9hZGRyICpkZXN0LCAKIAkJCWNvbnN0IHN0cnVjdCBzY3RwX2JpbmRfYWRkciAqc3JjLAotCQkJc2N0cF9zY29wZV90IHNjb3BlLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwLAorCQkJc2N0cF9zY29wZV90IHNjb3BlLCBnZnBfdCBnZnAsCiAJCQlpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHNjdHBfc29ja2FkZHJfZW50cnkgKmFkZHI7CkBAIC0xNDYsNyArMTQ2LDcgQEAKIAogLyogQWRkIGFuIGFkZHJlc3MgdG8gdGhlIGJpbmQgYWRkcmVzcyBsaXN0IGluIHRoZSBTQ1RQX2JpbmRfYWRkciBzdHJ1Y3R1cmUuICovCiBpbnQgc2N0cF9hZGRfYmluZF9hZGRyKHN0cnVjdCBzY3RwX2JpbmRfYWRkciAqYnAsIHVuaW9uIHNjdHBfYWRkciAqbmV3LAotCQkgICAgICAgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCkKKwkJICAgICAgIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSAqYWRkcjsKIApAQCAtMjAwLDcgKzIwMCw3IEBACiAgKi8KIHVuaW9uIHNjdHBfcGFyYW1zIHNjdHBfYmluZF9hZGRyc190b19yYXcoY29uc3Qgc3RydWN0IHNjdHBfYmluZF9hZGRyICpicCwKIAkJCQkJIGludCAqYWRkcnNfbGVuLAotCQkJCQkgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCkKKwkJCQkJIGdmcF90IGdmcCkKIHsKIAl1bmlvbiBzY3RwX3BhcmFtcyBhZGRycGFybXM7CiAJdW5pb24gc2N0cF9wYXJhbXMgcmV0dmFsOwpAQCAtMjUyLDcgKzI1Miw3IEBACiAgKiBhZGRyZXNzIHBhcmFtZXRlcnMpLgogICovCiBpbnQgc2N0cF9yYXdfdG9fYmluZF9hZGRycyhzdHJ1Y3Qgc2N0cF9iaW5kX2FkZHIgKmJwLCBfX3U4ICpyYXdfYWRkcl9saXN0LAotCQkJICAgaW50IGFkZHJzX2xlbiwgX191MTYgcG9ydCwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCkKKwkJCSAgIGludCBhZGRyc19sZW4sIF9fdTE2IHBvcnQsIGdmcF90IGdmcCkKIHsKIAl1bmlvbiBzY3RwX2FkZHJfcGFyYW0gKnJhd2FkZHI7CiAJc3RydWN0IHNjdHBfcGFyYW1oZHIgKnBhcmFtOwpAQCAtMzUwLDcgKzM1MCw3IEBACiAvKiBDb3B5IG91dCBhZGRyZXNzZXMgZnJvbSB0aGUgZ2xvYmFsIGxvY2FsIGFkZHJlc3MgbGlzdC4gKi8KIHN0YXRpYyBpbnQgc2N0cF9jb3B5X29uZV9hZGRyKHN0cnVjdCBzY3RwX2JpbmRfYWRkciAqZGVzdCwgCiAJCQkgICAgICB1bmlvbiBzY3RwX2FkZHIgKmFkZHIsCi0JCQkgICAgICBzY3RwX3Njb3BlX3Qgc2NvcGUsIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnAsCisJCQkgICAgICBzY3RwX3Njb3BlX3Qgc2NvcGUsIGdmcF90IGdmcCwKIAkJCSAgICAgIGludCBmbGFncykKIHsKIAlpbnQgZXJyb3IgPSAwOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvY2h1bmsuYyBiL25ldC9zY3RwL2NodW5rLmMKaW5kZXggNjFkYTI5My4uODNlZjQxMSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvY2h1bmsuYworKysgYi9uZXQvc2N0cC9jaHVuay5jCkBAIC02Miw3ICs2Miw3IEBACiB9CiAKIC8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGRhdGFtc2cuICovCi1TQ1RQX1NUQVRJQyBzdHJ1Y3Qgc2N0cF9kYXRhbXNnICpzY3RwX2RhdGFtc2dfbmV3KHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnApCitTQ1RQX1NUQVRJQyBzdHJ1Y3Qgc2N0cF9kYXRhbXNnICpzY3RwX2RhdGFtc2dfbmV3KGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3Qgc2N0cF9kYXRhbXNnICptc2c7CiAJbXNnID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNjdHBfZGF0YW1zZyksIGdmcCk7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9lbmRwb2ludG9sYS5jIGIvbmV0L3NjdHAvZW5kcG9pbnRvbGEuYwppbmRleCBlMjJjY2Q2Li45Njk4NGY3IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9lbmRwb2ludG9sYS5jCisrKyBiL25ldC9zY3RwL2VuZHBvaW50b2xhLmMKQEAgLTY4LDcgKzY4LDcgQEAKICAqLwogc3RhdGljIHN0cnVjdCBzY3RwX2VuZHBvaW50ICpzY3RwX2VuZHBvaW50X2luaXQoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLAogCQkJCQkJc3RydWN0IHNvY2sgKnNrLAotCQkJCQkJdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCkKKwkJCQkJCWdmcF90IGdmcCkKIHsKIAlzdHJ1Y3Qgc2N0cF9zb2NrICpzcCA9IHNjdHBfc2soc2spOwogCW1lbXNldChlcCwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2VuZHBvaW50KSk7CkBAIC0xMzgsOCArMTM4LDcgQEAKIC8qIENyZWF0ZSBhIHNjdHBfZW5kcG9pbnQgd2l0aCBhbGwgdGhhdCBib3Jpbmcgc3R1ZmYgaW5pdGlhbGl6ZWQuCiAgKiBSZXR1cm5zIE5VTEwgaWYgdGhlcmUgaXNuJ3QgZW5vdWdoIG1lbW9yeS4KICAqLwotc3RydWN0IHNjdHBfZW5kcG9pbnQgKnNjdHBfZW5kcG9pbnRfbmV3KHN0cnVjdCBzb2NrICpzaywKLQkJCQkJdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCkKK3N0cnVjdCBzY3RwX2VuZHBvaW50ICpzY3RwX2VuZHBvaW50X25ldyhzdHJ1Y3Qgc29jayAqc2ssIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXA7CiAKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3Byb3RvY29sLmMgYi9uZXQvc2N0cC9wcm90b2NvbC5jCmluZGV4IGU3MDI1YmUuLjI2ZGU0ZDMgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3Byb3RvY29sLmMKKysrIGIvbmV0L3NjdHAvcHJvdG9jb2wuYwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJc3RydWN0IHNjdHBfc29ja2FkZHJfZW50cnkgKmFkZHI7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JaWYgKChpbl9kZXYgPSBfX2luX2Rldl9nZXQoZGV2KSkgPT0gTlVMTCkgeworCWlmICgoaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpKSA9PSBOVUxMKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm47CiAJfQpAQCAtMjE5LDcgKzIxOSw3IEBACiAKIC8qIENvcHkgdGhlIGxvY2FsIGFkZHJlc3NlcyB3aGljaCBhcmUgdmFsaWQgZm9yICdzY29wZScgaW50byAnYnAnLiAgKi8KIGludCBzY3RwX2NvcHlfbG9jYWxfYWRkcl9saXN0KHN0cnVjdCBzY3RwX2JpbmRfYWRkciAqYnAsIHNjdHBfc2NvcGVfdCBzY29wZSwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnAsIGludCBjb3B5X2ZsYWdzKQorCQkJICAgICAgZ2ZwX3QgZ2ZwLCBpbnQgY29weV9mbGFncykKIHsKIAlzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSAqYWRkcjsKIAlpbnQgZXJyb3IgPSAwOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jIGIvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCmluZGV4IDM4NjhhOGQuLjEwZTgyZWMgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYworKysgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKQEAgLTc4LDcgKzc4LDcgQEAKIHN0YXRpYyBpbnQgc2N0cF9wcm9jZXNzX3BhcmFtKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCQkJICAgICAgdW5pb24gc2N0cF9wYXJhbXMgcGFyYW0sCiAJCQkgICAgICBjb25zdCB1bmlvbiBzY3RwX2FkZHIgKnBlZXJfYWRkciwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnApOworCQkJICAgICAgZ2ZwX3QgZ2ZwKTsKIAogLyogV2hhdCB3YXMgdGhlIGluYm91bmQgaW50ZXJmYWNlIGZvciB0aGlzIGNodW5rPyAqLwogaW50IHNjdHBfY2h1bmtfaWlmKGNvbnN0IHN0cnVjdCBzY3RwX2NodW5rICpjaHVuaykKQEAgLTE3NCw3ICsxNzQsNyBAQAogICovCiBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9tYWtlX2luaXQoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiAJCQkgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2JpbmRfYWRkciAqYnAsCi0JCQkgICAgIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnAsIGludCB2cGFyYW1fbGVuKQorCQkJICAgICBnZnBfdCBnZnAsIGludCB2cGFyYW1fbGVuKQogewogCXNjdHBfaW5pdGhkcl90IGluaXQ7CiAJdW5pb24gc2N0cF9wYXJhbXMgYWRkcnM7CkBAIC0yNjEsNyArMjYxLDcgQEAKIAogc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfbWFrZV9pbml0X2Fjayhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAkJCQkgY29uc3Qgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLAotCQkJCSB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwLCBpbnQgdW5rcGFyYW1fbGVuKQorCQkJCSBnZnBfdCBnZnAsIGludCB1bmtwYXJhbV9sZW4pCiB7CiAJc2N0cF9pbml0aGRyX3QgaW5pdGFjazsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqcmV0dmFsOwpAQCAtMTIzNCw3ICsxMjM0LDcgQEAKIC8qIENyZWF0ZSBhIENMT1NFRCBhc3NvY2lhdGlvbiB0byB1c2Ugd2l0aCBhbiBpbmNvbWluZyBwYWNrZXQuICAqLwogc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKnNjdHBfbWFrZV90ZW1wX2Fzb2MoY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLAogCQkJCQlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssCi0JCQkJCXVuc2lnbmVkIGludCBfX25vY2FzdCBnZnApCisJCQkJCWdmcF90IGdmcCkKIHsKIAlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtMTM0OSw3ICsxMzQ5LDcgQEAKIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICpzY3RwX3VucGFja19jb29raWUoCiAJY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLAogCWNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuaywgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCwKKwlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssIGdmcF90IGdmcCwKIAlpbnQgKmVycm9yLCBzdHJ1Y3Qgc2N0cF9jaHVuayAqKmVycnApCiB7CiAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKnJldHZhbCA9IE5VTEw7CkBAIC0xODE0LDcgKzE4MTQsNyBAQAogICovCiBpbnQgc2N0cF9wcm9jZXNzX2luaXQoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIHNjdHBfY2lkX3QgY2lkLAogCQkgICAgICBjb25zdCB1bmlvbiBzY3RwX2FkZHIgKnBlZXJfYWRkciwKLQkJICAgICAgc2N0cF9pbml0X2NodW5rX3QgKnBlZXJfaW5pdCwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCkKKwkJICAgICAgc2N0cF9pbml0X2NodW5rX3QgKnBlZXJfaW5pdCwgZ2ZwX3QgZ2ZwKQogewogCXVuaW9uIHNjdHBfcGFyYW1zIHBhcmFtOwogCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNwb3J0OwpAQCAtMTk4NSw3ICsxOTg1LDcgQEAKIHN0YXRpYyBpbnQgc2N0cF9wcm9jZXNzX3BhcmFtKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCQkJICAgICAgdW5pb24gc2N0cF9wYXJhbXMgcGFyYW0sCiAJCQkgICAgICBjb25zdCB1bmlvbiBzY3RwX2FkZHIgKnBlZXJfYWRkciwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnApCisJCQkgICAgICBnZnBfdCBnZnApCiB7CiAJdW5pb24gc2N0cF9hZGRyIGFkZHI7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMgYi9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMKaW5kZXggMzljOTcwYi4uZjg0MTczZSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCisrKyBiL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYwpAQCAtNjMsNyArNjMsNyBAQAogCQkJCXZvaWQgKmV2ZW50X2FyZywKIAkJCSAJc2N0cF9kaXNwb3NpdGlvbl90IHN0YXR1cywKIAkJCQlzY3RwX2NtZF9zZXFfdCAqY29tbWFuZHMsCi0JCQkJdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCk7CisJCQkJZ2ZwX3QgZ2ZwKTsKIHN0YXRpYyBpbnQgc2N0cF9zaWRlX2VmZmVjdHMoc2N0cF9ldmVudF90IGV2ZW50X3R5cGUsIHNjdHBfc3VidHlwZV90IHN1YnR5cGUsCiAJCQkgICAgIHNjdHBfc3RhdGVfdCBzdGF0ZSwKIAkJCSAgICAgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLApAQCAtNzEsNyArNzEsNyBAQAogCQkJICAgICB2b2lkICpldmVudF9hcmcsCiAJCQkgICAgIHNjdHBfZGlzcG9zaXRpb25fdCBzdGF0dXMsCiAJCQkgICAgIHNjdHBfY21kX3NlcV90ICpjb21tYW5kcywKLQkJCSAgICAgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCk7CisJCQkgICAgIGdmcF90IGdmcCk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSGVscGVyIGZ1bmN0aW9ucwpAQCAtNDk4LDcgKzQ5OCw3IEBACiAJCQkJIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCQkJCSBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssCiAJCQkJIHNjdHBfaW5pdF9jaHVua190ICpwZWVyX2luaXQsCi0JCQkJIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnApCisJCQkJIGdmcF90IGdmcCkKIHsKIAlpbnQgZXJyb3I7CiAKQEAgLTg1Myw3ICs4NTMsNyBAQAogCSAgICAgICBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsCiAJICAgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCSAgICAgICB2b2lkICpldmVudF9hcmcsCi0JICAgICAgIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnApCisJICAgICAgIGdmcF90IGdmcCkKIHsKIAlzY3RwX2NtZF9zZXFfdCBjb21tYW5kczsKIAljb25zdCBzY3RwX3NtX3RhYmxlX2VudHJ5X3QgKnN0YXRlX2ZuOwpAQCAtODk4LDcgKzg5OCw3IEBACiAJCQkgICAgIHZvaWQgKmV2ZW50X2FyZywKIAkJCSAgICAgc2N0cF9kaXNwb3NpdGlvbl90IHN0YXR1cywKIAkJCSAgICAgc2N0cF9jbWRfc2VxX3QgKmNvbW1hbmRzLAotCQkJICAgICB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwKQorCQkJICAgICBnZnBfdCBnZnApCiB7CiAJaW50IGVycm9yOwogCkBAIC05ODYsNyArOTg2LDcgQEAKIAkJCQl2b2lkICpldmVudF9hcmcsCiAJCQkgCXNjdHBfZGlzcG9zaXRpb25fdCBzdGF0dXMsCiAJCQkJc2N0cF9jbWRfc2VxX3QgKmNvbW1hbmRzLAotCQkJCXVuc2lnbmVkIGludCBfX25vY2FzdCBnZnApCisJCQkJZ2ZwX3QgZ2ZwKQogewogCWludCBlcnJvciA9IDA7CiAJaW50IGZvcmNlOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMgYi9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYwppbmRleCA4NjA3M2RmLi41MDVjN2RlMSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKKysrIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKQEAgLTI0MTQsNiArMjQxNCwxNyBAQAogCXNrYl9wdWxsKGNodW5rLT5za2IsIHNpemVvZihzY3RwX3NodXRkb3duaGRyX3QpKTsKIAljaHVuay0+c3ViaC5zaHV0ZG93bl9oZHIgPSBzZGg7CiAKKwkvKiBBUEkgNS4zLjEuNSBTQ1RQX1NIVVRET1dOX0VWRU5UCisJICogV2hlbiBhIHBlZXIgc2VuZHMgYSBTSFVURE9XTiwgU0NUUCBkZWxpdmVycyB0aGlzIG5vdGlmaWNhdGlvbiB0bworCSAqIGluZm9ybSB0aGUgYXBwbGljYXRpb24gdGhhdCBpdCBzaG91bGQgY2Vhc2Ugc2VuZGluZyBkYXRhLgorCSAqLworCWV2ID0gc2N0cF91bHBldmVudF9tYWtlX3NodXRkb3duX2V2ZW50KGFzb2MsIDAsIEdGUF9BVE9NSUMpOworCWlmICghZXYpIHsKKwkJZGlzcG9zaXRpb24gPSBTQ1RQX0RJU1BPU0lUSU9OX05PTUVNOworCQlnb3RvIG91dDsJCisJfQorCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfRVZFTlRfVUxQLCBTQ1RQX1VMUEVWRU5UKGV2KSk7CisKIAkvKiBVcG9uIHRoZSByZWNlcHRpb24gb2YgdGhlIFNIVVRET1dOLCB0aGUgcGVlciBlbmRwb2ludCBzaGFsbAogCSAqICAtIGVudGVyIHRoZSBTSFVURE9XTi1SRUNFSVZFRCBzdGF0ZSwKIAkgKiAgLSBzdG9wIGFjY2VwdGluZyBuZXcgZGF0YSBmcm9tIGl0cyBTQ1RQIHVzZXIKQEAgLTI0MzksMTcgKzI0NTAsNiBAQAogCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfUFJPQ0VTU19DVFNOLAogCQkJU0NUUF9VMzIoY2h1bmstPnN1Ymguc2h1dGRvd25faGRyLT5jdW1fdHNuX2FjaykpOwogCi0JLyogQVBJIDUuMy4xLjUgU0NUUF9TSFVURE9XTl9FVkVOVAotCSAqIFdoZW4gYSBwZWVyIHNlbmRzIGEgU0hVVERPV04sIFNDVFAgZGVsaXZlcnMgdGhpcyBub3RpZmljYXRpb24gdG8KLQkgKiBpbmZvcm0gdGhlIGFwcGxpY2F0aW9uIHRoYXQgaXQgc2hvdWxkIGNlYXNlIHNlbmRpbmcgZGF0YS4KLQkgKi8KLQlldiA9IHNjdHBfdWxwZXZlbnRfbWFrZV9zaHV0ZG93bl9ldmVudChhc29jLCAwLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWV2KSB7Ci0JCWRpc3Bvc2l0aW9uID0gU0NUUF9ESVNQT1NJVElPTl9OT01FTTsKLQkJZ290byBvdXQ7CQotCX0KLQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0VWRU5UX1VMUCwgU0NUUF9VTFBFVkVOVChldikpOwotCiBvdXQ6CiAJcmV0dXJuIGRpc3Bvc2l0aW9uOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc29ja2V0LmMgYi9uZXQvc2N0cC9zb2NrZXQuYwppbmRleCA5MWVjOGM5Li4wMmUwNjhkIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zb2NrZXQuYworKysgYi9uZXQvc2N0cC9zb2NrZXQuYwpAQCAtMzE1OSw4ICszMTU5LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzY3RwX2dldHNvY2tvcHRfcGVlcl9hZGRyc19udW0oc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuLAotCQkJCQkgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3N0YXRpYyBpbnQgc2N0cF9nZXRzb2Nrb3B0X3BlZXJfYWRkcnNfbnVtX29sZChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sCisJCQkJCSAgICAgIGNoYXIgX191c2VyICpvcHR2YWwsCisJCQkJCSAgICAgIGludCBfX3VzZXIgKm9wdGxlbikKIHsKIAlzY3RwX2Fzc29jX3QgaWQ7CiAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CkBAIC0zMTg1LDIzICszMTg2LDI4IEBACiAJcmV0dXJuIGNudDsKIH0KIAotc3RhdGljIGludCBzY3RwX2dldHNvY2tvcHRfcGVlcl9hZGRycyhzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sCi0JCQkJICAgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQorLyogCisgKiBPbGQgQVBJIGZvciBnZXR0aW5nIGxpc3Qgb2YgcGVlciBhZGRyZXNzZXMuIERvZXMgbm90IHdvcmsgZm9yIDMyLWJpdAorICogcHJvZ3JhbXMgcnVubmluZyBvbiBhIDY0LWJpdCBrZXJuZWwKKyAqLworc3RhdGljIGludCBzY3RwX2dldHNvY2tvcHRfcGVlcl9hZGRyc19vbGQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuLAorCQkJCQkgIGNoYXIgX191c2VyICpvcHR2YWwsCisJCQkJCSAgaW50IF9fdXNlciAqb3B0bGVuKQogewogCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOwogCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIAlpbnQgY250ID0gMDsKLQlzdHJ1Y3Qgc2N0cF9nZXRhZGRycyBnZXRhZGRyczsKKwlzdHJ1Y3Qgc2N0cF9nZXRhZGRyc19vbGQgZ2V0YWRkcnM7CiAJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICpmcm9tOwogCXZvaWQgX191c2VyICp0bzsKIAl1bmlvbiBzY3RwX2FkZHIgdGVtcDsKIAlzdHJ1Y3Qgc2N0cF9zb2NrICpzcCA9IHNjdHBfc2soc2spOwogCWludCBhZGRybGVuOwogCi0JaWYgKGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfZ2V0YWRkcnMpKQorCWlmIChsZW4gIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2dldGFkZHJzX29sZCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZnZXRhZGRycywgb3B0dmFsLCBzaXplb2Yoc3RydWN0IHNjdHBfZ2V0YWRkcnMpKSkKKwlpZiAoY29weV9mcm9tX3VzZXIoJmdldGFkZHJzLCBvcHR2YWwsIHNpemVvZihzdHJ1Y3Qgc2N0cF9nZXRhZGRyc19vbGQpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlpZiAoZ2V0YWRkcnMuYWRkcl9udW0gPD0gMCkgcmV0dXJuIC1FSU5WQUw7CkBAIC0zMjI1LDE1ICszMjMxLDY5IEBACiAJCWlmIChjbnQgPj0gZ2V0YWRkcnMuYWRkcl9udW0pIGJyZWFrOwogCX0KIAlnZXRhZGRycy5hZGRyX251bSA9IGNudDsKLQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgJmdldGFkZHJzLCBzaXplb2Yoc3RydWN0IHNjdHBfZ2V0YWRkcnMpKSkKKwlpZiAoY29weV90b191c2VyKG9wdHZhbCwgJmdldGFkZHJzLCBzaXplb2Yoc3RydWN0IHNjdHBfZ2V0YWRkcnNfb2xkKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2N0cF9nZXRzb2Nrb3B0X2xvY2FsX2FkZHJzX251bShzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sCi0JCQkJCQljaGFyIF9fdXNlciAqb3B0dmFsLAotCQkJCQkJaW50IF9fdXNlciAqb3B0bGVuKQorc3RhdGljIGludCBzY3RwX2dldHNvY2tvcHRfcGVlcl9hZGRycyhzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sCisJCQkJICAgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQoreworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlpbnQgY250ID0gMDsKKwlzdHJ1Y3Qgc2N0cF9nZXRhZGRycyBnZXRhZGRyczsKKwlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKmZyb207CisJdm9pZCBfX3VzZXIgKnRvOworCXVuaW9uIHNjdHBfYWRkciB0ZW1wOworCXN0cnVjdCBzY3RwX3NvY2sgKnNwID0gc2N0cF9zayhzayk7CisJaW50IGFkZHJsZW47CisJc2l6ZV90IHNwYWNlX2xlZnQ7CisJaW50IGJ5dGVzX2NvcGllZDsKKworCWlmIChsZW4gPCBzaXplb2Yoc3RydWN0IHNjdHBfZ2V0YWRkcnMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmZ2V0YWRkcnMsIG9wdHZhbCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2dldGFkZHJzKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJLyogRm9yIFVEUC1zdHlsZSBzb2NrZXRzLCBpZCBzcGVjaWZpZXMgdGhlIGFzc29jaWF0aW9uIHRvIHF1ZXJ5LiAgKi8KKwlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgZ2V0YWRkcnMuYXNzb2NfaWQpOworCWlmICghYXNvYykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl0byA9IG9wdHZhbCArIG9mZnNldG9mKHN0cnVjdCBzY3RwX2dldGFkZHJzLGFkZHJzKTsKKwlzcGFjZV9sZWZ0ID0gbGVuIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX2dldGFkZHJzKSAtIAorCQkJb2Zmc2V0b2Yoc3RydWN0IHNjdHBfZ2V0YWRkcnMsYWRkcnMpOworCisJbGlzdF9mb3JfZWFjaChwb3MsICZhc29jLT5wZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QpIHsKKwkJZnJvbSA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQsIHRyYW5zcG9ydHMpOworCQltZW1jcHkoJnRlbXAsICZmcm9tLT5pcGFkZHIsIHNpemVvZih0ZW1wKSk7CisJCXNjdHBfZ2V0X3BmX3NwZWNpZmljKHNrLT5za19mYW1pbHkpLT5hZGRyX3Y0bWFwKHNwLCAmdGVtcCk7CisJCWFkZHJsZW4gPSBzY3RwX2dldF9hZl9zcGVjaWZpYyhzay0+c2tfZmFtaWx5KS0+c29ja2FkZHJfbGVuOworCQlpZihzcGFjZV9sZWZ0IDwgYWRkcmxlbikKKwkJCXJldHVybiAtRU5PTUVNOworCQl0ZW1wLnY0LnNpbl9wb3J0ID0gaHRvbnModGVtcC52NC5zaW5fcG9ydCk7CisJCWlmIChjb3B5X3RvX3VzZXIodG8sICZ0ZW1wLCBhZGRybGVuKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQl0byArPSBhZGRybGVuOworCQljbnQrKzsKKwkJc3BhY2VfbGVmdCAtPSBhZGRybGVuOworCX0KKworCWlmIChwdXRfdXNlcihjbnQsICYoKHN0cnVjdCBzY3RwX2dldGFkZHJzIF9fdXNlciAqKW9wdHZhbCktPmFkZHJfbnVtKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnl0ZXNfY29waWVkID0gKChjaGFyIF9fdXNlciAqKXRvKSAtIG9wdHZhbDsKKwlpZiAocHV0X3VzZXIoYnl0ZXNfY29waWVkLCBvcHRsZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNjdHBfZ2V0c29ja29wdF9sb2NhbF9hZGRyc19udW1fb2xkKHN0cnVjdCBzb2NrICpzaywgaW50IGxlbiwKKwkJCQkJICAgICAgIGNoYXIgX191c2VyICpvcHR2YWwsCisJCQkJCSAgICAgICBpbnQgX191c2VyICpvcHRsZW4pCiB7CiAJc2N0cF9hc3NvY190IGlkOwogCXN0cnVjdCBzY3RwX2JpbmRfYWRkciAqYnA7CkBAIC0zMzA2LDggKzMzNjYsOCBAQAogLyogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY29waWVzIGxvY2FsIGFkZHJlc3NlcyB0byB1c2VyIGFuZCByZXR1cm5zIHRoZSBudW1iZXIKICAqIG9mIGFkZHJlc3NlcyBjb3BpZWQuCiAgKi8KLXN0YXRpYyBpbnQgc2N0cF9jb3B5X2xhZGRyc190b191c2VyKHN0cnVjdCBzb2NrICpzaywgX191MTYgcG9ydCwgaW50IG1heF9hZGRycywKLQkJCQkgICAgdm9pZCBfX3VzZXIgKnRvKQorc3RhdGljIGludCBzY3RwX2NvcHlfbGFkZHJzX3RvX3VzZXJfb2xkKHN0cnVjdCBzb2NrICpzaywgX191MTYgcG9ydCwgaW50IG1heF9hZGRycywKKwkJCQkJdm9pZCBfX3VzZXIgKnRvKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIAlzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSAqYWRkcjsKQEAgLTMzNDEsMTQgKzM0MDEsNTQgQEAKIAlyZXR1cm4gY250OwogfQogCi1zdGF0aWMgaW50IHNjdHBfZ2V0c29ja29wdF9sb2NhbF9hZGRycyhzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sCi0JCQkJICAgICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3N0YXRpYyBpbnQgc2N0cF9jb3B5X2xhZGRyc190b191c2VyKHN0cnVjdCBzb2NrICpzaywgX191MTYgcG9ydCwKKwkJCQkgICAgdm9pZCAqIF9fdXNlciAqdG8sIHNpemVfdCBzcGFjZV9sZWZ0KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSAqYWRkcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuaW9uIHNjdHBfYWRkciB0ZW1wOworCWludCBjbnQgPSAwOworCWludCBhZGRybGVuOworCisJc2N0cF9zcGluX2xvY2tfaXJxc2F2ZSgmc2N0cF9sb2NhbF9hZGRyX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoKHBvcywgJnNjdHBfbG9jYWxfYWRkcl9saXN0KSB7CisJCWFkZHIgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHNjdHBfc29ja2FkZHJfZW50cnksIGxpc3QpOworCQlpZiAoKFBGX0lORVQgPT0gc2stPnNrX2ZhbWlseSkgJiYgCisJCSAgICAoQUZfSU5FVDYgPT0gYWRkci0+YS5zYS5zYV9mYW1pbHkpKQorCQkJY29udGludWU7CisJCW1lbWNweSgmdGVtcCwgJmFkZHItPmEsIHNpemVvZih0ZW1wKSk7CisJCXNjdHBfZ2V0X3BmX3NwZWNpZmljKHNrLT5za19mYW1pbHkpLT5hZGRyX3Y0bWFwKHNjdHBfc2soc2spLAorCQkJCQkJCQkmdGVtcCk7CisJCWFkZHJsZW4gPSBzY3RwX2dldF9hZl9zcGVjaWZpYyh0ZW1wLnNhLnNhX2ZhbWlseSktPnNvY2thZGRyX2xlbjsKKwkJaWYoc3BhY2VfbGVmdDxhZGRybGVuKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXRlbXAudjQuc2luX3BvcnQgPSBodG9ucyhwb3J0KTsKKwkJaWYgKGNvcHlfdG9fdXNlcigqdG8sICZ0ZW1wLCBhZGRybGVuKSkgeworCQkJc2N0cF9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY3RwX2xvY2FsX2FkZHJfbG9jaywKKwkJCQkJCSAgICBmbGFncyk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQkqdG8gKz0gYWRkcmxlbjsKKwkJY250ICsrOworCQlzcGFjZV9sZWZ0IC09IGFkZHJsZW47CisJfQorCXNjdHBfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2N0cF9sb2NhbF9hZGRyX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBjbnQ7Cit9CisKKy8qIE9sZCBBUEkgZm9yIGdldHRpbmcgbGlzdCBvZiBsb2NhbCBhZGRyZXNzZXMuIERvZXMgbm90IHdvcmsgZm9yIDMyLWJpdAorICogcHJvZ3JhbXMgcnVubmluZyBvbiBhIDY0LWJpdCBrZXJuZWwKKyAqLworc3RhdGljIGludCBzY3RwX2dldHNvY2tvcHRfbG9jYWxfYWRkcnNfb2xkKHN0cnVjdCBzb2NrICpzaywgaW50IGxlbiwKKwkJCQkJICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQogewogCXN0cnVjdCBzY3RwX2JpbmRfYWRkciAqYnA7CiAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CiAJc3RydWN0IGxpc3RfaGVhZCAqcG9zOwogCWludCBjbnQgPSAwOwotCXN0cnVjdCBzY3RwX2dldGFkZHJzIGdldGFkZHJzOworCXN0cnVjdCBzY3RwX2dldGFkZHJzX29sZCBnZXRhZGRyczsKIAlzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSAqYWRkcjsKIAl2b2lkIF9fdXNlciAqdG87CiAJdW5pb24gc2N0cF9hZGRyIHRlbXA7CkBAIC0zMzU3LDEwICszNDU3LDEwIEBACiAJcndsb2NrX3QgKmFkZHJfbG9jazsKIAlpbnQgZXJyID0gMDsKIAotCWlmIChsZW4gIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2dldGFkZHJzKSkKKwlpZiAobGVuICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9nZXRhZGRyc19vbGQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChjb3B5X2Zyb21fdXNlcigmZ2V0YWRkcnMsIG9wdHZhbCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2dldGFkZHJzKSkpCisJaWYgKGNvcHlfZnJvbV91c2VyKCZnZXRhZGRycywgb3B0dmFsLCBzaXplb2Yoc3RydWN0IHNjdHBfZ2V0YWRkcnNfb2xkKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJaWYgKGdldGFkZHJzLmFkZHJfbnVtIDw9IDApIHJldHVybiAtRUlOVkFMOwpAQCAtMzM5Miw4ICszNDkyLDkgQEAKIAkJYWRkciA9IGxpc3RfZW50cnkoYnAtPmFkZHJlc3NfbGlzdC5uZXh0LAogCQkJCSAgc3RydWN0IHNjdHBfc29ja2FkZHJfZW50cnksIGxpc3QpOwogCQlpZiAoc2N0cF9pc19hbnkoJmFkZHItPmEpKSB7Ci0JCQljbnQgPSBzY3RwX2NvcHlfbGFkZHJzX3RvX3VzZXIoc2ssIGJwLT5wb3J0LAotCQkJCQkJICAgICAgIGdldGFkZHJzLmFkZHJfbnVtLCB0byk7CisJCQljbnQgPSBzY3RwX2NvcHlfbGFkZHJzX3RvX3VzZXJfb2xkKHNrLCBicC0+cG9ydCwKKwkJCQkJCQkgICBnZXRhZGRycy5hZGRyX251bSwKKwkJCQkJCQkgICB0byk7CiAJCQlpZiAoY250IDwgMCkgewogCQkJCWVyciA9IGNudDsKIAkJCQlnb3RvIHVubG9jazsKQEAgLTM0MTksNyArMzUyMCw3IEBACiAKIGNvcHlfZ2V0YWRkcnM6CiAJZ2V0YWRkcnMuYWRkcl9udW0gPSBjbnQ7Ci0JaWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsICZnZXRhZGRycywgc2l6ZW9mKHN0cnVjdCBzY3RwX2dldGFkZHJzKSkpCisJaWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsICZnZXRhZGRycywgc2l6ZW9mKHN0cnVjdCBzY3RwX2dldGFkZHJzX29sZCkpKQogCQllcnIgPSAtRUZBVUxUOwogCiB1bmxvY2s6CkBAIC0zNDI3LDYgKzM1MjgsOTkgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IHNjdHBfZ2V0c29ja29wdF9sb2NhbF9hZGRycyhzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sCisJCQkJICAgICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlzdHJ1Y3Qgc2N0cF9iaW5kX2FkZHIgKmJwOworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlpbnQgY250ID0gMDsKKwlzdHJ1Y3Qgc2N0cF9nZXRhZGRycyBnZXRhZGRyczsKKwlzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSAqYWRkcjsKKwl2b2lkIF9fdXNlciAqdG87CisJdW5pb24gc2N0cF9hZGRyIHRlbXA7CisJc3RydWN0IHNjdHBfc29jayAqc3AgPSBzY3RwX3NrKHNrKTsKKwlpbnQgYWRkcmxlbjsKKwlyd2xvY2tfdCAqYWRkcl9sb2NrOworCWludCBlcnIgPSAwOworCXNpemVfdCBzcGFjZV9sZWZ0OworCWludCBieXRlc19jb3BpZWQ7CisKKwlpZiAobGVuIDw9IHNpemVvZihzdHJ1Y3Qgc2N0cF9nZXRhZGRycykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZnZXRhZGRycywgb3B0dmFsLCBzaXplb2Yoc3RydWN0IHNjdHBfZ2V0YWRkcnMpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKgorCSAqICBGb3IgVURQLXN0eWxlIHNvY2tldHMsIGlkIHNwZWNpZmllcyB0aGUgYXNzb2NpYXRpb24gdG8gcXVlcnkuCisJICogIElmIHRoZSBpZCBmaWVsZCBpcyBzZXQgdG8gdGhlIHZhbHVlICcwJyB0aGVuIHRoZSBsb2NhbGx5IGJvdW5kCisJICogIGFkZHJlc3NlcyBhcmUgcmV0dXJuZWQgd2l0aG91dCByZWdhcmQgdG8gYW55IHBhcnRpY3VsYXIKKwkgKiAgYXNzb2NpYXRpb24uCisJICovCisJaWYgKDAgPT0gZ2V0YWRkcnMuYXNzb2NfaWQpIHsKKwkJYnAgPSAmc2N0cF9zayhzayktPmVwLT5iYXNlLmJpbmRfYWRkcjsKKwkJYWRkcl9sb2NrID0gJnNjdHBfc2soc2spLT5lcC0+YmFzZS5hZGRyX2xvY2s7CisJfSBlbHNlIHsKKwkJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIGdldGFkZHJzLmFzc29jX2lkKTsKKwkJaWYgKCFhc29jKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJwID0gJmFzb2MtPmJhc2UuYmluZF9hZGRyOworCQlhZGRyX2xvY2sgPSAmYXNvYy0+YmFzZS5hZGRyX2xvY2s7CisJfQorCisJdG8gPSBvcHR2YWwgKyBvZmZzZXRvZihzdHJ1Y3Qgc2N0cF9nZXRhZGRycyxhZGRycyk7CisJc3BhY2VfbGVmdCA9IGxlbiAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9nZXRhZGRycykgLQorCQkJIG9mZnNldG9mKHN0cnVjdCBzY3RwX2dldGFkZHJzLGFkZHJzKTsKKworCXNjdHBfcmVhZF9sb2NrKGFkZHJfbG9jayk7CisKKwkvKiBJZiB0aGUgZW5kcG9pbnQgaXMgYm91bmQgdG8gMC4wLjAuMCBvciA6OjAsIGdldCB0aGUgdmFsaWQKKwkgKiBhZGRyZXNzZXMgZnJvbSB0aGUgZ2xvYmFsIGxvY2FsIGFkZHJlc3MgbGlzdC4KKwkgKi8KKwlpZiAoc2N0cF9saXN0X3NpbmdsZV9lbnRyeSgmYnAtPmFkZHJlc3NfbGlzdCkpIHsKKwkJYWRkciA9IGxpc3RfZW50cnkoYnAtPmFkZHJlc3NfbGlzdC5uZXh0LAorCQkJCSAgc3RydWN0IHNjdHBfc29ja2FkZHJfZW50cnksIGxpc3QpOworCQlpZiAoc2N0cF9pc19hbnkoJmFkZHItPmEpKSB7CisJCQljbnQgPSBzY3RwX2NvcHlfbGFkZHJzX3RvX3VzZXIoc2ssIGJwLT5wb3J0LAorCQkJCQkJICAgICAgICZ0bywgc3BhY2VfbGVmdCk7CisJCQlpZiAoY250IDwgMCkgeworCQkJCWVyciA9IGNudDsKKwkJCQlnb3RvIHVubG9jazsKKwkJCX0KKwkJCWdvdG8gY29weV9nZXRhZGRyczsJCQorCQl9CisJfQorCisJbGlzdF9mb3JfZWFjaChwb3MsICZicC0+YWRkcmVzc19saXN0KSB7CisJCWFkZHIgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHNjdHBfc29ja2FkZHJfZW50cnksIGxpc3QpOworCQltZW1jcHkoJnRlbXAsICZhZGRyLT5hLCBzaXplb2YodGVtcCkpOworCQlzY3RwX2dldF9wZl9zcGVjaWZpYyhzay0+c2tfZmFtaWx5KS0+YWRkcl92NG1hcChzcCwgJnRlbXApOworCQlhZGRybGVuID0gc2N0cF9nZXRfYWZfc3BlY2lmaWModGVtcC5zYS5zYV9mYW1pbHkpLT5zb2NrYWRkcl9sZW47CisJCWlmKHNwYWNlX2xlZnQgPCBhZGRybGVuKQorCQkJcmV0dXJuIC1FTk9NRU07IC8qZml4bWU6IHJpZ2h0IGVycm9yPyovCisJCXRlbXAudjQuc2luX3BvcnQgPSBodG9ucyh0ZW1wLnY0LnNpbl9wb3J0KTsKKwkJaWYgKGNvcHlfdG9fdXNlcih0bywgJnRlbXAsIGFkZHJsZW4pKSB7CisJCQllcnIgPSAtRUZBVUxUOworCQkJZ290byB1bmxvY2s7CisJCX0KKwkJdG8gKz0gYWRkcmxlbjsKKwkJY250ICsrOworCQlzcGFjZV9sZWZ0IC09IGFkZHJsZW47CisJfQorCitjb3B5X2dldGFkZHJzOgorCWlmIChwdXRfdXNlcihjbnQsICYoKHN0cnVjdCBzY3RwX2dldGFkZHJzIF9fdXNlciAqKW9wdHZhbCktPmFkZHJfbnVtKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnl0ZXNfY29waWVkID0gKChjaGFyIF9fdXNlciAqKXRvKSAtIG9wdHZhbDsKKwlpZiAocHV0X3VzZXIoYnl0ZXNfY29waWVkLCBvcHRsZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKwordW5sb2NrOgorCXNjdHBfcmVhZF91bmxvY2soYWRkcl9sb2NrKTsKKwlyZXR1cm4gZXJyOworfQorCiAvKiA3LjEuMTAgU2V0IFByaW1hcnkgQWRkcmVzcyAoU0NUUF9QUklNQVJZX0FERFIpCiAgKgogICogUmVxdWVzdHMgdGhhdCB0aGUgbG9jYWwgU0NUUCBzdGFjayB1c2UgdGhlIGVuY2xvc2VkIHBlZXIgYWRkcmVzcyBhcwpAQCAtMzgwNywxMiArNDAwMSwyMCBAQAogCWNhc2UgU0NUUF9JTklUTVNHOgogCQlyZXR2YWwgPSBzY3RwX2dldHNvY2tvcHRfaW5pdG1zZyhzaywgbGVuLCBvcHR2YWwsIG9wdGxlbik7CiAJCWJyZWFrOwotCWNhc2UgU0NUUF9HRVRfUEVFUl9BRERSU19OVU06Ci0JCXJldHZhbCA9IHNjdHBfZ2V0c29ja29wdF9wZWVyX2FkZHJzX251bShzaywgbGVuLCBvcHR2YWwsCisJY2FzZSBTQ1RQX0dFVF9QRUVSX0FERFJTX05VTV9PTEQ6CisJCXJldHZhbCA9IHNjdHBfZ2V0c29ja29wdF9wZWVyX2FkZHJzX251bV9vbGQoc2ssIGxlbiwgb3B0dmFsLAorCQkJCQkJCSAgICBvcHRsZW4pOworCQlicmVhazsKKwljYXNlIFNDVFBfR0VUX0xPQ0FMX0FERFJTX05VTV9PTEQ6CisJCXJldHZhbCA9IHNjdHBfZ2V0c29ja29wdF9sb2NhbF9hZGRyc19udW1fb2xkKHNrLCBsZW4sIG9wdHZhbCwKKwkJCQkJCQkgICAgIG9wdGxlbik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9HRVRfUEVFUl9BRERSU19PTEQ6CisJCXJldHZhbCA9IHNjdHBfZ2V0c29ja29wdF9wZWVyX2FkZHJzX29sZChzaywgbGVuLCBvcHR2YWwsCiAJCQkJCQkJb3B0bGVuKTsKIAkJYnJlYWs7Ci0JY2FzZSBTQ1RQX0dFVF9MT0NBTF9BRERSU19OVU06Ci0JCXJldHZhbCA9IHNjdHBfZ2V0c29ja29wdF9sb2NhbF9hZGRyc19udW0oc2ssIGxlbiwgb3B0dmFsLAorCWNhc2UgU0NUUF9HRVRfTE9DQUxfQUREUlNfT0xEOgorCQlyZXR2YWwgPSBzY3RwX2dldHNvY2tvcHRfbG9jYWxfYWRkcnNfb2xkKHNrLCBsZW4sIG9wdHZhbCwKIAkJCQkJCQkgb3B0bGVuKTsKIAkJYnJlYWs7CiAJY2FzZSBTQ1RQX0dFVF9QRUVSX0FERFJTOgpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc3NubWFwLmMgYi9uZXQvc2N0cC9zc25tYXAuYwppbmRleCAyNTAzN2RhLi5jYmUyNTEzIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zc25tYXAuYworKysgYi9uZXQvc2N0cC9zc25tYXAuYwpAQCAtNTgsNyArNTgsNyBAQAogICogQWxsb2NhdGUgcm9vbSB0byBzdG9yZSBhdCBsZWFzdCAnbGVuJyBjb250aWd1b3VzIFRTTnMuCiAgKi8KIHN0cnVjdCBzY3RwX3Nzbm1hcCAqc2N0cF9zc25tYXBfbmV3KF9fdTE2IGluLCBfX3UxNiBvdXQsCi0JCQkJICAgIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnApCisJCQkJICAgIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3Qgc2N0cF9zc25tYXAgKnJldHZhbDsKIAlpbnQgc2l6ZTsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3RyYW5zcG9ydC5jIGIvbmV0L3NjdHAvdHJhbnNwb3J0LmMKaW5kZXggZDJmMDRlYi4uNmJjMjcyMCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvdHJhbnNwb3J0LmMKKysrIGIvbmV0L3NjdHAvdHJhbnNwb3J0LmMKQEAgLTU3LDcgKzU3LDcgQEAKIC8qIEluaXRpYWxpemUgYSBuZXcgdHJhbnNwb3J0IGZyb20gcHJvdmlkZWQgbWVtb3J5LiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnNjdHBfdHJhbnNwb3J0X2luaXQoc3RydWN0IHNjdHBfdHJhbnNwb3J0ICpwZWVyLAogCQkJCQkJICBjb25zdCB1bmlvbiBzY3RwX2FkZHIgKmFkZHIsCi0JCQkJCQkgIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnApCisJCQkJCQkgIGdmcF90IGdmcCkKIHsKIAkvKiBDb3B5IGluIHRoZSBhZGRyZXNzLiAgKi8KIAlwZWVyLT5pcGFkZHIgPSAqYWRkcjsKQEAgLTEyMiw3ICsxMjIsNyBAQAogCiAvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIG5ldyB0cmFuc3BvcnQuICAqLwogc3RydWN0IHNjdHBfdHJhbnNwb3J0ICpzY3RwX3RyYW5zcG9ydF9uZXcoY29uc3QgdW5pb24gc2N0cF9hZGRyICphZGRyLAotCQkJCQkgIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnApCisJCQkJCSAgZ2ZwX3QgZ2ZwKQogewogICAgICAgICBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zcG9ydDsKIApkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvdWxwZXZlbnQuYyBiL25ldC9zY3RwL3VscGV2ZW50LmMKaW5kZXggMGFiZDUxMC4uMDU3ZTdmYSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvdWxwZXZlbnQuYworKysgYi9uZXQvc2N0cC91bHBldmVudC5jCkBAIC03NCw3ICs3NCw3IEBACiAKIC8qIENyZWF0ZSBhIG5ldyBzY3RwX3VscGV2ZW50LiAgKi8KIFNDVFBfU1RBVElDIHN0cnVjdCBzY3RwX3VscGV2ZW50ICpzY3RwX3VscGV2ZW50X25ldyhpbnQgc2l6ZSwgaW50IG1zZ19mbGFncywKLQkJCQkJCSAgICB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwKQorCQkJCQkJICAgIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXZlbnQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTEzNiw3ICsxMzYsNyBAQAogc3RydWN0IHNjdHBfdWxwZXZlbnQgICpzY3RwX3VscGV2ZW50X21ha2VfYXNzb2NfY2hhbmdlKAogCWNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCV9fdTE2IGZsYWdzLCBfX3UxNiBzdGF0ZSwgX191MTYgZXJyb3IsIF9fdTE2IG91dGJvdW5kLAotCV9fdTE2IGluYm91bmQsIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnApCisJX191MTYgaW5ib3VuZCwgZ2ZwX3QgZ2ZwKQogewogCXN0cnVjdCBzY3RwX3VscGV2ZW50ICpldmVudDsKIAlzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UgKnNhYzsKQEAgLTIzNyw3ICsyMzcsNyBAQAogc3RydWN0IHNjdHBfdWxwZXZlbnQgKnNjdHBfdWxwZXZlbnRfbWFrZV9wZWVyX2FkZHJfY2hhbmdlKAogCWNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphYWRkciwKLQlpbnQgZmxhZ3MsIGludCBzdGF0ZSwgaW50IGVycm9yLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwKQorCWludCBmbGFncywgaW50IHN0YXRlLCBpbnQgZXJyb3IsIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXZlbnQ7CiAJc3RydWN0IHNjdHBfcGFkZHJfY2hhbmdlICAqc3BjOwpAQCAtMzUwLDcgKzM1MCw3IEBACiAgKi8KIHN0cnVjdCBzY3RwX3VscGV2ZW50ICpzY3RwX3VscGV2ZW50X21ha2VfcmVtb3RlX2Vycm9yKAogCWNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssCi0JX191MTYgZmxhZ3MsIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnApCisJX191MTYgZmxhZ3MsIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXZlbnQ7CiAJc3RydWN0IHNjdHBfcmVtb3RlX2Vycm9yICpzcmU7CkBAIC00NDgsNyArNDQ4LDcgQEAKICAqLwogc3RydWN0IHNjdHBfdWxwZXZlbnQgKnNjdHBfdWxwZXZlbnRfbWFrZV9zZW5kX2ZhaWxlZCgKIAljb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLAotCV9fdTE2IGZsYWdzLCBfX3UzMiBlcnJvciwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCkKKwlfX3UxNiBmbGFncywgX191MzIgZXJyb3IsIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXZlbnQ7CiAJc3RydWN0IHNjdHBfc2VuZF9mYWlsZWQgKnNzZjsKQEAgLTU1Nyw3ICs1NTcsNyBAQAogICovCiBzdHJ1Y3Qgc2N0cF91bHBldmVudCAqc2N0cF91bHBldmVudF9tYWtlX3NodXRkb3duX2V2ZW50KAogCWNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotCV9fdTE2IGZsYWdzLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwKQorCV9fdTE2IGZsYWdzLCBnZnBfdCBnZnApCiB7CiAJc3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2ZW50OwogCXN0cnVjdCBzY3RwX3NodXRkb3duX2V2ZW50ICpzc2U7CkBAIC02MjAsNyArNjIwLDcgQEAKICAqIDUuMy4xLjYgU0NUUF9BREFQVElPTl9JTkRJQ0FUSU9OCiAgKi8KIHN0cnVjdCBzY3RwX3VscGV2ZW50ICpzY3RwX3VscGV2ZW50X21ha2VfYWRhcHRpb25faW5kaWNhdGlvbigKLQljb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCkKKwljb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgZ2ZwX3QgZ2ZwKQogewogCXN0cnVjdCBzY3RwX3VscGV2ZW50ICpldmVudDsKIAlzdHJ1Y3Qgc2N0cF9hZGFwdGlvbl9ldmVudCAqc2FpOwpAQCAtNjU3LDcgKzY1Nyw3IEBACiAgKi8KIHN0cnVjdCBzY3RwX3VscGV2ZW50ICpzY3RwX3VscGV2ZW50X21ha2VfcmN2bXNnKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCQkJCQkJc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLAotCQkJCQkJdW5zaWduZWQgaW50IF9fbm9jYXN0IGdmcCkKKwkJCQkJCWdmcF90IGdmcCkKIHsKIAlzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXZlbnQgPSBOVUxMOwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC03MTksNyArNzE5LDcgQEAKICAqLwogc3RydWN0IHNjdHBfdWxwZXZlbnQgKnNjdHBfdWxwZXZlbnRfbWFrZV9wZGFwaSgKIAljb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgX191MzIgaW5kaWNhdGlvbiwKLQl1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwKQorCWdmcF90IGdmcCkKIHsKIAlzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXZlbnQ7CiAJc3RydWN0IHNjdHBfcGRhcGlfZXZlbnQgKnBkOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvdWxwcXVldWUuYyBiL25ldC9zY3RwL3VscHF1ZXVlLmMKaW5kZXggZWMyYzg1Ny4uMjA4MGIyZCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvdWxwcXVldWUuYworKysgYi9uZXQvc2N0cC91bHBxdWV1ZS5jCkBAIC0xMDAsNyArMTAwLDcgQEAKIAogLyogUHJvY2VzcyBhbiBpbmNvbWluZyBEQVRBIGNodW5rLiAgKi8KIGludCBzY3RwX3VscHFfdGFpbF9kYXRhKHN0cnVjdCBzY3RwX3VscHEgKnVscHEsIHN0cnVjdCBzY3RwX2NodW5rICpjaHVuaywKLQkJCXVuc2lnbmVkIGludCBfX25vY2FzdCBnZnApCisJCQlnZnBfdCBnZnApCiB7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZCB0ZW1wOwogCXNjdHBfZGF0YV9jaHVua190ICpoZHI7CkBAIC03OTIsNyArNzkyLDcgQEAKIC8qIFBhcnRpYWwgZGVsaXZlciB0aGUgZmlyc3QgbWVzc2FnZSBhcyB0aGVyZSBpcyBwcmVzc3VyZSBvbiByd25kLiAqLwogdm9pZCBzY3RwX3VscHFfcGFydGlhbF9kZWxpdmVyeShzdHJ1Y3Qgc2N0cF91bHBxICp1bHBxLAogCQkJCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuaywKLQkJCQl1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwKQorCQkJCWdmcF90IGdmcCkKIHsKIAlzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXZlbnQ7CiAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CkBAIC04MTYsNyArODE2LDcgQEAKIAogLyogUmVuZWdlIHNvbWUgcGFja2V0cyB0byBtYWtlIHJvb20gZm9yIGFuIGluY29taW5nIGNodW5rLiAgKi8KIHZvaWQgc2N0cF91bHBxX3JlbmVnZShzdHJ1Y3Qgc2N0cF91bHBxICp1bHBxLCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssCi0JCSAgICAgIHVuc2lnbmVkIGludCBfX25vY2FzdCBnZnApCisJCSAgICAgIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKIAlfX3UxNiBuZWVkZWQsIGZyZWVkOwpAQCAtODU1LDcgKzg1NSw3IEBACiAvKiBOb3RpZnkgdGhlIGFwcGxpY2F0aW9uIGlmIGFuIGFzc29jaWF0aW9uIGlzIGFib3J0ZWQgYW5kIGluCiAgKiBwYXJ0aWFsIGRlbGl2ZXJ5IG1vZGUuICBTZW5kIHVwIGFueSBwZW5kaW5nIHJlY2VpdmVkIG1lc3NhZ2VzLgogICovCi12b2lkIHNjdHBfdWxwcV9hYm9ydF9wZChzdHJ1Y3Qgc2N0cF91bHBxICp1bHBxLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwKQordm9pZCBzY3RwX3VscHFfYWJvcnRfcGQoc3RydWN0IHNjdHBfdWxwcSAqdWxwcSwgZ2ZwX3QgZ2ZwKQogewogCXN0cnVjdCBzY3RwX3VscGV2ZW50ICpldiA9IE5VTEw7CiAJc3RydWN0IHNvY2sgKnNrOwpkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IGM2OTllOTMuLjMxNDUxMDMgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYworKysgYi9uZXQvc29ja2V0LmMKQEAgLTExNDUsOCArMTE0NSwxMSBAQAogCWlmICghdHJ5X21vZHVsZV9nZXQobmV0X2ZhbWlsaWVzW2ZhbWlseV0tPm93bmVyKSkKIAkJZ290byBvdXRfcmVsZWFzZTsKIAotCWlmICgoZXJyID0gbmV0X2ZhbWlsaWVzW2ZhbWlseV0tPmNyZWF0ZShzb2NrLCBwcm90b2NvbCkpIDwgMCkKKwlpZiAoKGVyciA9IG5ldF9mYW1pbGllc1tmYW1pbHldLT5jcmVhdGUoc29jaywgcHJvdG9jb2wpKSA8IDApIHsKKwkJc29jay0+b3BzID0gTlVMTDsKIAkJZ290byBvdXRfbW9kdWxlX3B1dDsKKwl9CisKIAkvKgogCSAqIE5vdyB0byBidW1wIHRoZSByZWZjbnQgb2YgdGhlIFtsb2FkYWJsZV0gbW9kdWxlIHRoYXQgb3ducyB0aGlzCiAJICogc29ja2V0IGF0IHNvY2tfcmVsZWFzZSB0aW1lIHdlIGRlY3JlbWVudCBpdHMgcmVmY250LgpAQCAtMTM2MCwxNiArMTM2MywxNiBAQAogCW5ld3NvY2stPnR5cGUgPSBzb2NrLT50eXBlOwogCW5ld3NvY2stPm9wcyA9IHNvY2stPm9wczsKIAotCWVyciA9IHNlY3VyaXR5X3NvY2tldF9hY2NlcHQoc29jaywgbmV3c29jayk7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfcmVsZWFzZTsKLQogCS8qCiAJICogV2UgZG9uJ3QgbmVlZCB0cnlfbW9kdWxlX2dldCBoZXJlLCBhcyB0aGUgbGlzdGVuaW5nIHNvY2tldCAoc29jaykKIAkgKiBoYXMgdGhlIHByb3RvY29sIG1vZHVsZSAoc29jay0+b3BzLT5vd25lcikgaGVsZC4KIAkgKi8KIAlfX21vZHVsZV9nZXQobmV3c29jay0+b3BzLT5vd25lcik7CiAKKwllcnIgPSBzZWN1cml0eV9zb2NrZXRfYWNjZXB0KHNvY2ssIG5ld3NvY2spOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3JlbGVhc2U7CisKIAllcnIgPSBzb2NrLT5vcHMtPmFjY2VwdChzb2NrLCBuZXdzb2NrLCBzb2NrLT5maWxlLT5mX2ZsYWdzKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXRfcmVsZWFzZTsKQEAgLTE3MDAsNyArMTcwMyw5IEBACiAJc3RydWN0IHNvY2tldCAqc29jazsKIAljaGFyIGFkZHJlc3NbTUFYX1NPQ0tfQUREUl07CiAJc3RydWN0IGlvdmVjIGlvdnN0YWNrW1VJT19GQVNUSU9WXSwgKmlvdiA9IGlvdnN0YWNrOwotCXVuc2lnbmVkIGNoYXIgY3RsW3NpemVvZihzdHJ1Y3QgY21zZ2hkcikgKyAyMF07CS8qIDIwIGlzIHNpemUgb2YgaXB2Nl9wa3RpbmZvICovCisJdW5zaWduZWQgY2hhciBjdGxbc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSArIDIwXQorCQkJX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKHNpemVvZihfX2tlcm5lbF9zaXplX3QpKSkpOworCQkJLyogMjAgaXMgc2l6ZSBvZiBpcHY2X3BrdGluZm8gKi8KIAl1bnNpZ25lZCBjaGFyICpjdGxfYnVmID0gY3RsOwogCXN0cnVjdCBtc2doZHIgbXNnX3N5czsKIAlpbnQgZXJyLCBjdGxfbGVuLCBpb3Zfc2l6ZSwgdG90YWxfbGVuOwpAQCAtMTg2Miw3ICsxODY3LDggQEAKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIG91dF9mcmVlaW92OwogCX0KLQllcnIgPSBfX3B1dF91c2VyKG1zZ19zeXMubXNnX2ZsYWdzLCBDT01QQVRfRkxBR1MobXNnKSk7CisJZXJyID0gX19wdXRfdXNlcigobXNnX3N5cy5tc2dfZmxhZ3MgJiB+TVNHX0NNU0dfQ09NUEFUKSwKKwkJCSBDT01QQVRfRkxBR1MobXNnKSk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfZnJlZWlvdjsKIAlpZiAoTVNHX0NNU0dfQ09NUEFUICYgZmxhZ3MpCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3NjaGVkLmMgYi9uZXQvc3VucnBjL3NjaGVkLmMKaW5kZXggZjMxMDQwMy4uNTRlNjBhNiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zY2hlZC5jCisrKyBiL25ldC9zdW5ycGMvc2NoZWQuYwpAQCAtNzE5LDcgKzcxOSw3IEBACiB2b2lkICoKIHJwY19tYWxsb2Moc3RydWN0IHJwY190YXNrICp0YXNrLCBzaXplX3Qgc2l6ZSkKIHsKLQlpbnQJZ2ZwOworCWdmcF90CWdmcDsKIAogCWlmICh0YXNrLT50a19mbGFncyAmIFJQQ19UQVNLX1NXQVBQRVIpCiAJCWdmcCA9IEdGUF9BVE9NSUM7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y3NvY2suYyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCmluZGV4IDMwZWMzZWYuLjY5MWRlYTQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jCisrKyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCkBAIC01ODcsNyArNTg3LDcgQEAKIAkJc3RydWN0IHRpbWV2YWwgdHY7CiAKIAkJdHYudHZfc2VjID0geHRpbWUudHZfc2VjOwotCQl0di50dl91c2VjID0geHRpbWUudHZfbnNlYyAqIDEwMDA7CisJCXR2LnR2X3VzZWMgPSB4dGltZS50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQzsKIAkJc2tiX3NldF90aW1lc3RhbXAoc2tiLCAmdHYpOwogCQkvKiBEb24ndCBlbmFibGUgbmV0c3RhbXAsIHN1bnJwYyBkb2Vzbid0IAogCQkgICBuZWVkIHRoYXQgbXVjaCBhY2N1cmFjeSAqLwpkaWZmIC0tZ2l0IGEvbmV0L3N5c2N0bF9uZXQuYyBiL25ldC9zeXNjdGxfbmV0LmMKaW5kZXggYzUyNDFmYy4uNTU1MzhmNiAxMDA2NDQKLS0tIGEvbmV0L3N5c2N0bF9uZXQuYworKysgYi9uZXQvc3lzY3RsX25ldC5jCkBAIC0xNiw2ICsxNiw4IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KIAorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisKICNpZmRlZiBDT05GSUdfSU5FVAogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3BvbGljeS5jIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwppbmRleCBmZGE3MzdkLi5jYmIwYmEzIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3BvbGljeS5jCisrKyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKQEAgLTE2Myw3ICsxNjMsNyBAQAogCWlmICh4cC0+ZGVhZCkKIAkJZ290byBvdXQ7CiAKLQlkaXIgPSB4cC0+aW5kZXggJiA3OworCWRpciA9IHhmcm1fcG9saWN5X2lkMmRpcih4cC0+aW5kZXgpOwogCiAJaWYgKHhwLT5sZnQuaGFyZF9hZGRfZXhwaXJlc19zZWNvbmRzKSB7CiAJCWxvbmcgdG1vID0geHAtPmxmdC5oYXJkX2FkZF9leHBpcmVzX3NlY29uZHMgKwpAQCAtMjI1LDcgKzIyNSw3IEBACiAgKiBTUEQgY2FsbHMuCiAgKi8KIAotc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX3BvbGljeV9hbGxvYyhpbnQgZ2ZwKQorc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX3BvbGljeV9hbGxvYyhnZnBfdCBnZnApCiB7CiAJc3RydWN0IHhmcm1fcG9saWN5ICpwb2xpY3k7CiAKQEAgLTQxNyw3ICs0MTcsNyBAQAogCXN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLCAqKnA7CiAKIAl3cml0ZV9sb2NrX2JoKCZ4ZnJtX3BvbGljeV9sb2NrKTsKLQlmb3IgKHAgPSAmeGZybV9wb2xpY3lfbGlzdFtpZCAmIDddOyAocG9sPSpwKSE9TlVMTDsgcCA9ICZwb2wtPm5leHQpIHsKKwlmb3IgKHAgPSAmeGZybV9wb2xpY3lfbGlzdFtkaXJdOyAocG9sPSpwKSE9TlVMTDsgcCA9ICZwb2wtPm5leHQpIHsKIAkJaWYgKHBvbC0+aW5kZXggPT0gaWQpIHsKIAkJCXhmcm1fcG9sX2hvbGQocG9sKTsKIAkJCWlmIChkZWxldGUpCmRpZmYgLS1naXQgYS9zY3JpcHRzLy5naXRpZ25vcmUgYi9zY3JpcHRzLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ2ZDY4YgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDQgQEAKK2Nvbm1ha2VoYXNoCitrYWxsc3ltcworcG5tdG9sb2dvCisKZGlmZiAtLWdpdCBhL3NjcmlwdHMvYmFzaWMvLmdpdGlnbm9yZSBiL3NjcmlwdHMvYmFzaWMvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzA0ZTE5Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9iYXNpYy8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMyBAQAorZml4ZGVwCitzcGxpdC1pbmNsdWRlCitkb2Nwcm9jCmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvLmdpdGlnbm9yZSBiL3NjcmlwdHMva2NvbmZpZy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkYWMzNDQKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2tjb25maWcvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDE2IEBACisjCisjIEdlbmVyYXRlZCBmaWxlcworIworY29uZmlnKgorbGV4LiouYworKi50YWIuYworKi50YWIuaAorCisjCisjIGNvbmZpZ3VyYXRpb24gcHJvZ3JhbXMKKyMKK2NvbmYKK21jb25mCitxY29uZgorZ2NvbmYKK2t4Z2V0dGV4dApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tb2QvLmdpdGlnbm9yZSBiL3NjcmlwdHMvbW9kLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTliN2FiZQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbW9kLy5naXRpZ25vcmUKQEAgLTAsMCArMSw0IEBACitlbGZjb25maWcuaAorbWtfZWxmY29uZmlnCittb2Rwb3N0CisKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYyBiL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYwppbmRleCBkOGVlMzhhLi5mMmVlNjczIDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMKKysrIGIvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jCkBAIC0yOTUsMTEgKzI5NSwxMyBAQAogewogCXVuc2lnbmVkIGludCBpOwogCisJaWQtPm1hdGNoX2ZsYWdzID0gVE9fTkFUSVZFKGlkLT5tYXRjaF9mbGFncyk7CiAJaWQtPm1hbmZfaWQgPSBUT19OQVRJVkUoaWQtPm1hbmZfaWQpOwogCWlkLT5jYXJkX2lkID0gVE9fTkFUSVZFKGlkLT5jYXJkX2lkKTsKIAlpZC0+ZnVuY19pZCA9IFRPX05BVElWRShpZC0+ZnVuY19pZCk7CiAJaWQtPmZ1bmN0aW9uID0gVE9fTkFUSVZFKGlkLT5mdW5jdGlvbik7CiAJaWQtPmRldmljZV9ubyA9IFRPX05BVElWRShpZC0+ZGV2aWNlX25vKTsKKwogCWZvciAoaT0wOyBpPDQ7IGkrKykgewogCQlpZC0+cHJvZF9pZF9oYXNoW2ldID0gVE9fTkFUSVZFKGlkLT5wcm9kX2lkX2hhc2hbaV0pOwogICAgICAgIH0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvTWFrZWZpbGUgYi9zZWN1cml0eS9rZXlzL01ha2VmaWxlCmluZGV4IGMzOTJkNzUuLjUxNDVhZGYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvTWFrZWZpbGUKKysrIGIvc2VjdXJpdHkva2V5cy9NYWtlZmlsZQpAQCAtNiw2ICs2LDcgQEAKIAlrZXkubyBcCiAJa2V5cmluZy5vIFwKIAlrZXljdGwubyBcCisJcGVybWlzc2lvbi5vIFwKIAlwcm9jZXNzX2tleXMubyBcCiAJcmVxdWVzdF9rZXkubyBcCiAJcmVxdWVzdF9rZXlfYXV0aC5vIFwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvaW50ZXJuYWwuaCBiL3NlY3VyaXR5L2tleXMvaW50ZXJuYWwuaAppbmRleCA0NmM4NjAyLi5kYjk5ZWQ0IDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2ludGVybmFsLmgKKysrIGIvc2VjdXJpdHkva2V5cy9pbnRlcm5hbC5oCkBAIC03MSwyNiArNzEsMjYgQEAKIAogZXh0ZXJuIGludCBfX2tleV9saW5rKHN0cnVjdCBrZXkgKmtleXJpbmcsIHN0cnVjdCBrZXkgKmtleSk7CiAKLWV4dGVybiBzdHJ1Y3Qga2V5ICpfX2tleXJpbmdfc2VhcmNoX29uZShzdHJ1Y3Qga2V5ICprZXlyaW5nLAotCQkJCQljb25zdCBzdHJ1Y3Qga2V5X3R5cGUgKnR5cGUsCi0JCQkJCWNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLAotCQkJCQlrZXlfcGVybV90IHBlcm0pOworZXh0ZXJuIGtleV9yZWZfdCBfX2tleXJpbmdfc2VhcmNoX29uZShrZXlfcmVmX3Qga2V5cmluZ19yZWYsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGtleV90eXBlICp0eXBlLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLAorCQkJCSAgICAgIGtleV9wZXJtX3QgcGVybSk7CiAKIGV4dGVybiBzdHJ1Y3Qga2V5ICprZXlyaW5nX3NlYXJjaF9pbnN0a2V5KHN0cnVjdCBrZXkgKmtleXJpbmcsCiAJCQkJCSAga2V5X3NlcmlhbF90IHRhcmdldF9pZCk7CiAKIHR5cGVkZWYgaW50ICgqa2V5X21hdGNoX2Z1bmNfdCkoY29uc3Qgc3RydWN0IGtleSAqLCBjb25zdCB2b2lkICopOwogCi1leHRlcm4gc3RydWN0IGtleSAqa2V5cmluZ19zZWFyY2hfYXV4KHN0cnVjdCBrZXkgKmtleXJpbmcsCi0JCQkJICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCi0JCQkJICAgICAgc3RydWN0IGtleV90eXBlICp0eXBlLAotCQkJCSAgICAgIGNvbnN0IHZvaWQgKmRlc2NyaXB0aW9uLAotCQkJCSAgICAgIGtleV9tYXRjaF9mdW5jX3QgbWF0Y2gpOworZXh0ZXJuIGtleV9yZWZfdCBrZXlyaW5nX3NlYXJjaF9hdXgoa2V5X3JlZl90IGtleXJpbmdfcmVmLAorCQkJCSAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwkJCQkgICAgc3RydWN0IGtleV90eXBlICp0eXBlLAorCQkJCSAgICBjb25zdCB2b2lkICpkZXNjcmlwdGlvbiwKKwkJCQkgICAga2V5X21hdGNoX2Z1bmNfdCBtYXRjaCk7CiAKLWV4dGVybiBzdHJ1Y3Qga2V5ICpzZWFyY2hfcHJvY2Vzc19rZXlyaW5ncyhzdHJ1Y3Qga2V5X3R5cGUgKnR5cGUsCi0JCQkJCSAgIGNvbnN0IHZvaWQgKmRlc2NyaXB0aW9uLAotCQkJCQkgICBrZXlfbWF0Y2hfZnVuY190IG1hdGNoLAotCQkJCQkgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CitleHRlcm4ga2V5X3JlZl90IHNlYXJjaF9wcm9jZXNzX2tleXJpbmdzKHN0cnVjdCBrZXlfdHlwZSAqdHlwZSwKKwkJCQkJIGNvbnN0IHZvaWQgKmRlc2NyaXB0aW9uLAorCQkJCQkga2V5X21hdGNoX2Z1bmNfdCBtYXRjaCwKKwkJCQkJIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKIAogZXh0ZXJuIHN0cnVjdCBrZXkgKmZpbmRfa2V5cmluZ19ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGtleV9zZXJpYWxfdCBib3VuZCk7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5LmMgYi9zZWN1cml0eS9rZXlzL2tleS5jCmluZGV4IGZiODlmOTguLjIxODJiZTkgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5LmMKKysrIGIvc2VjdXJpdHkva2V5cy9rZXkuYwpAQCAtNjkzLDE0ICs2OTMsMTUgQEAKICAqIC0gdGhlIGtleSBoYXMgYW4gaW5jcmVtZW50ZWQgcmVmY291bnQKICAqIC0gd2UgbmVlZCB0byBwdXQgdGhlIGtleSBpZiB3ZSBnZXQgYW4gZXJyb3IKICAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3Qga2V5ICpfX2tleV91cGRhdGUoc3RydWN0IGtleSAqa2V5LCBjb25zdCB2b2lkICpwYXlsb2FkLAotCQkJCSAgICAgICBzaXplX3QgcGxlbikKK3N0YXRpYyBpbmxpbmUga2V5X3JlZl90IF9fa2V5X3VwZGF0ZShrZXlfcmVmX3Qga2V5X3JlZiwKKwkJCQkgICAgIGNvbnN0IHZvaWQgKnBheWxvYWQsIHNpemVfdCBwbGVuKQogeworCXN0cnVjdCBrZXkgKmtleSA9IGtleV9yZWZfdG9fcHRyKGtleV9yZWYpOwogCWludCByZXQ7CiAKIAkvKiBuZWVkIHdyaXRlIHBlcm1pc3Npb24gb24gdGhlIGtleSB0byB1cGRhdGUgaXQgKi8KIAlyZXQgPSAtRUFDQ0VTOwotCWlmICgha2V5X3Blcm1pc3Npb24oa2V5LCBLRVlfV1JJVEUpKQorCWlmICgha2V5X3Blcm1pc3Npb24oa2V5X3JlZiwgS0VZX1dSSVRFKSkKIAkJZ290byBlcnJvcjsKIAogCXJldCA9IC1FRVhJU1Q7CkBAIC03MTksMTIgKzcyMCwxMiBAQAogCiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyb3I7Ci0gb3V0OgotCXJldHVybiBrZXk7CitvdXQ6CisJcmV0dXJuIGtleV9yZWY7CiAKLSBlcnJvcjoKK2Vycm9yOgogCWtleV9wdXQoa2V5KTsKLQlrZXkgPSBFUlJfUFRSKHJldCk7CisJa2V5X3JlZiA9IEVSUl9QVFIocmV0KTsKIAlnb3RvIG91dDsKIAogfSAvKiBlbmQgX19rZXlfdXBkYXRlKCkgKi8KQEAgLTczNCw1MiArNzM1LDU2IEBACiAgKiBzZWFyY2ggdGhlIHNwZWNpZmllZCBrZXlyaW5nIGZvciBhIGtleSBvZiB0aGUgc2FtZSBkZXNjcmlwdGlvbjsgaWYgb25lIGlzCiAgKiBmb3VuZCwgdXBkYXRlIGl0LCBvdGhlcndpc2UgYWRkIGEgbmV3IG9uZQogICovCi1zdHJ1Y3Qga2V5ICprZXlfY3JlYXRlX29yX3VwZGF0ZShzdHJ1Y3Qga2V5ICprZXlyaW5nLAotCQkJCSBjb25zdCBjaGFyICp0eXBlLAotCQkJCSBjb25zdCBjaGFyICpkZXNjcmlwdGlvbiwKLQkJCQkgY29uc3Qgdm9pZCAqcGF5bG9hZCwKLQkJCQkgc2l6ZV90IHBsZW4sCi0JCQkJIGludCBub3RfaW5fcXVvdGEpCitrZXlfcmVmX3Qga2V5X2NyZWF0ZV9vcl91cGRhdGUoa2V5X3JlZl90IGtleXJpbmdfcmVmLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnR5cGUsCisJCQkgICAgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24sCisJCQkgICAgICAgY29uc3Qgdm9pZCAqcGF5bG9hZCwKKwkJCSAgICAgICBzaXplX3QgcGxlbiwKKwkJCSAgICAgICBpbnQgbm90X2luX3F1b3RhKQogewogCXN0cnVjdCBrZXlfdHlwZSAqa3R5cGU7Ci0Jc3RydWN0IGtleSAqa2V5ID0gTlVMTDsKKwlzdHJ1Y3Qga2V5ICprZXlyaW5nLCAqa2V5ID0gTlVMTDsKIAlrZXlfcGVybV90IHBlcm07CisJa2V5X3JlZl90IGtleV9yZWY7CiAJaW50IHJldDsKIAotCWtleV9jaGVjayhrZXlyaW5nKTsKLQogCS8qIGxvb2sgdXAgdGhlIGtleSB0eXBlIHRvIHNlZSBpZiBpdCdzIG9uZSBvZiB0aGUgcmVnaXN0ZXJlZCBrZXJuZWwKIAkgKiB0eXBlcyAqLwogCWt0eXBlID0ga2V5X3R5cGVfbG9va3VwKHR5cGUpOwogCWlmIChJU19FUlIoa3R5cGUpKSB7Ci0JCWtleSA9IEVSUl9QVFIoLUVOT0RFVik7CisJCWtleV9yZWYgPSBFUlJfUFRSKC1FTk9ERVYpOwogCQlnb3RvIGVycm9yOwogCX0KIAotCXJldCA9IC1FSU5WQUw7CisJa2V5X3JlZiA9IEVSUl9QVFIoLUVJTlZBTCk7CiAJaWYgKCFrdHlwZS0+bWF0Y2ggfHwgIWt0eXBlLT5pbnN0YW50aWF0ZSkKIAkJZ290byBlcnJvcl8yOwogCisJa2V5cmluZyA9IGtleV9yZWZfdG9fcHRyKGtleXJpbmdfcmVmKTsKKworCWtleV9jaGVjayhrZXlyaW5nKTsKKworCWRvd25fd3JpdGUoJmtleXJpbmctPnNlbSk7CisKKwkvKiBpZiB3ZSdyZSBnb2luZyB0byBhbGxvY2F0ZSBhIG5ldyBrZXksIHdlJ3JlIGdvaW5nIHRvIGhhdmUKKwkgKiB0byBtb2RpZnkgdGhlIGtleXJpbmcgKi8KKwlrZXlfcmVmID0gRVJSX1BUUigtRUFDQ0VTKTsKKwlpZiAoIWtleV9wZXJtaXNzaW9uKGtleXJpbmdfcmVmLCBLRVlfV1JJVEUpKQorCQlnb3RvIGVycm9yXzM7CisKIAkvKiBzZWFyY2ggZm9yIGFuIGV4aXN0aW5nIGtleSBvZiB0aGUgc2FtZSB0eXBlIGFuZCBkZXNjcmlwdGlvbiBpbiB0aGUKIAkgKiBkZXN0aW5hdGlvbiBrZXlyaW5nCiAJICovCi0JZG93bl93cml0ZSgma2V5cmluZy0+c2VtKTsKLQotCWtleSA9IF9fa2V5cmluZ19zZWFyY2hfb25lKGtleXJpbmcsIGt0eXBlLCBkZXNjcmlwdGlvbiwgMCk7Ci0JaWYgKCFJU19FUlIoa2V5KSkKKwlrZXlfcmVmID0gX19rZXlyaW5nX3NlYXJjaF9vbmUoa2V5cmluZ19yZWYsIGt0eXBlLCBkZXNjcmlwdGlvbiwgMCk7CisJaWYgKCFJU19FUlIoa2V5X3JlZikpCiAJCWdvdG8gZm91bmRfbWF0Y2hpbmdfa2V5OwogCi0JLyogaWYgd2UncmUgZ29pbmcgdG8gYWxsb2NhdGUgYSBuZXcga2V5LCB3ZSdyZSBnb2luZyB0byBoYXZlIHRvIG1vZGlmeQotCSAqIHRoZSBrZXlyaW5nICovCi0JcmV0ID0gLUVBQ0NFUzsKLQlpZiAoIWtleV9wZXJtaXNzaW9uKGtleXJpbmcsIEtFWV9XUklURSkpCi0JCWdvdG8gZXJyb3JfMzsKLQogCS8qIGRlY2lkZSBvbiB0aGUgcGVybWlzc2lvbnMgd2Ugd2FudCAqLwotCXBlcm0gPSBLRVlfVVNSX1ZJRVcgfCBLRVlfVVNSX1NFQVJDSCB8IEtFWV9VU1JfTElOSzsKKwlwZXJtID0gS0VZX1BPU19WSUVXIHwgS0VZX1BPU19TRUFSQ0ggfCBLRVlfUE9TX0xJTks7CisJcGVybSB8PSBLRVlfVVNSX1ZJRVcgfCBLRVlfVVNSX1NFQVJDSCB8IEtFWV9VU1JfTElOSzsKIAogCWlmIChrdHlwZS0+cmVhZCkKLQkJcGVybSB8PSBLRVlfVVNSX1JFQUQ7CisJCXBlcm0gfD0gS0VZX1BPU19SRUFEIHwgS0VZX1VTUl9SRUFEOwogCiAJaWYgKGt0eXBlID09ICZrZXlfdHlwZV9rZXlyaW5nIHx8IGt0eXBlLT51cGRhdGUpCiAJCXBlcm0gfD0gS0VZX1VTUl9XUklURTsKQEAgLTc4OCw3ICs3OTMsNyBAQAogCWtleSA9IGtleV9hbGxvYyhrdHlwZSwgZGVzY3JpcHRpb24sIGN1cnJlbnQtPmZzdWlkLCBjdXJyZW50LT5mc2dpZCwKIAkJCXBlcm0sIG5vdF9pbl9xdW90YSk7CiAJaWYgKElTX0VSUihrZXkpKSB7Ci0JCXJldCA9IFBUUl9FUlIoa2V5KTsKKwkJa2V5X3JlZiA9IEVSUl9QVFIoUFRSX0VSUihrZXkpKTsKIAkJZ290byBlcnJvcl8zOwogCX0KIApAQCAtNzk2LDE1ICs4MDEsMTggQEAKIAlyZXQgPSBfX2tleV9pbnN0YW50aWF0ZV9hbmRfbGluayhrZXksIHBheWxvYWQsIHBsZW4sIGtleXJpbmcsIE5VTEwpOwogCWlmIChyZXQgPCAwKSB7CiAJCWtleV9wdXQoa2V5KTsKLQkJa2V5ID0gRVJSX1BUUihyZXQpOworCQlrZXlfcmVmID0gRVJSX1BUUihyZXQpOworCQlnb3RvIGVycm9yXzM7CiAJfQogCisJa2V5X3JlZiA9IG1ha2Vfa2V5X3JlZihrZXksIGlzX2tleV9wb3NzZXNzZWQoa2V5cmluZ19yZWYpKTsKKwogIGVycm9yXzM6CiAJdXBfd3JpdGUoJmtleXJpbmctPnNlbSk7CiAgZXJyb3JfMjoKIAlrZXlfdHlwZV9wdXQoa3R5cGUpOwogIGVycm9yOgotCXJldHVybiBrZXk7CisJcmV0dXJuIGtleV9yZWY7CiAKICBmb3VuZF9tYXRjaGluZ19rZXk6CiAJLyogd2UgZm91bmQgYSBtYXRjaGluZyBrZXksIHNvIHdlJ3JlIGdvaW5nIHRvIHRyeSB0byB1cGRhdGUgaXQKQEAgLTgxMyw3ICs4MjEsNyBAQAogCXVwX3dyaXRlKCZrZXlyaW5nLT5zZW0pOwogCWtleV90eXBlX3B1dChrdHlwZSk7CiAKLQlrZXkgPSBfX2tleV91cGRhdGUoa2V5LCBwYXlsb2FkLCBwbGVuKTsKKwlrZXlfcmVmID0gX19rZXlfdXBkYXRlKGtleV9yZWYsIHBheWxvYWQsIHBsZW4pOwogCWdvdG8gZXJyb3I7CiAKIH0gLyogZW5kIGtleV9jcmVhdGVfb3JfdXBkYXRlKCkgKi8KQEAgLTgyNCwxNSArODMyLDE2IEBACiAvKgogICogdXBkYXRlIGEga2V5CiAgKi8KLWludCBrZXlfdXBkYXRlKHN0cnVjdCBrZXkgKmtleSwgY29uc3Qgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IHBsZW4pCitpbnQga2V5X3VwZGF0ZShrZXlfcmVmX3Qga2V5X3JlZiwgY29uc3Qgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IHBsZW4pCiB7CisJc3RydWN0IGtleSAqa2V5ID0ga2V5X3JlZl90b19wdHIoa2V5X3JlZik7CiAJaW50IHJldDsKIAogCWtleV9jaGVjayhrZXkpOwogCiAJLyogdGhlIGtleSBtdXN0IGJlIHdyaXRhYmxlICovCiAJcmV0ID0gLUVBQ0NFUzsKLQlpZiAoIWtleV9wZXJtaXNzaW9uKGtleSwgS0VZX1dSSVRFKSkKKwlpZiAoIWtleV9wZXJtaXNzaW9uKGtleV9yZWYsIEtFWV9XUklURSkpCiAJCWdvdG8gZXJyb3I7CiAKIAkvKiBhdHRlbXB0IHRvIHVwZGF0ZSBpdCBpZiBzdXBwb3J0ZWQgKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMgYi9zZWN1cml0eS9rZXlzL2tleWN0bC5jCmluZGV4IGE2NTE2YTYuLjRjNjcwZWUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMKKysrIGIvc2VjdXJpdHkva2V5cy9rZXljdGwuYwpAQCAtMzQsNyArMzQsNyBAQAogCQkJICAgIHNpemVfdCBwbGVuLAogCQkJICAgIGtleV9zZXJpYWxfdCByaW5naWQpCiB7Ci0Jc3RydWN0IGtleSAqa2V5cmluZywgKmtleTsKKwlrZXlfcmVmX3Qga2V5cmluZ19yZWYsIGtleV9yZWY7CiAJY2hhciB0eXBlWzMyXSwgKmRlc2NyaXB0aW9uOwogCXZvaWQgKnBheWxvYWQ7CiAJbG9uZyBkbGVuLCByZXQ7CkBAIC04NiwyNSArODYsMjUgQEAKIAl9CiAKIAkvKiBmaW5kIHRoZSB0YXJnZXQga2V5cmluZyAod2hpY2ggbXVzdCBiZSB3cml0YWJsZSkgKi8KLQlrZXlyaW5nID0gbG9va3VwX3VzZXJfa2V5KE5VTEwsIHJpbmdpZCwgMSwgMCwgS0VZX1dSSVRFKTsKLQlpZiAoSVNfRVJSKGtleXJpbmcpKSB7Ci0JCXJldCA9IFBUUl9FUlIoa2V5cmluZyk7CisJa2V5cmluZ19yZWYgPSBsb29rdXBfdXNlcl9rZXkoTlVMTCwgcmluZ2lkLCAxLCAwLCBLRVlfV1JJVEUpOworCWlmIChJU19FUlIoa2V5cmluZ19yZWYpKSB7CisJCXJldCA9IFBUUl9FUlIoa2V5cmluZ19yZWYpOwogCQlnb3RvIGVycm9yMzsKIAl9CiAKIAkvKiBjcmVhdGUgb3IgdXBkYXRlIHRoZSByZXF1ZXN0ZWQga2V5IGFuZCBhZGQgaXQgdG8gdGhlIHRhcmdldAogCSAqIGtleXJpbmcgKi8KLQlrZXkgPSBrZXlfY3JlYXRlX29yX3VwZGF0ZShrZXlyaW5nLCB0eXBlLCBkZXNjcmlwdGlvbiwKLQkJCQkgICBwYXlsb2FkLCBwbGVuLCAwKTsKLQlpZiAoIUlTX0VSUihrZXkpKSB7Ci0JCXJldCA9IGtleS0+c2VyaWFsOwotCQlrZXlfcHV0KGtleSk7CisJa2V5X3JlZiA9IGtleV9jcmVhdGVfb3JfdXBkYXRlKGtleXJpbmdfcmVmLCB0eXBlLCBkZXNjcmlwdGlvbiwKKwkJCQkgICAgICAgcGF5bG9hZCwgcGxlbiwgMCk7CisJaWYgKCFJU19FUlIoa2V5X3JlZikpIHsKKwkJcmV0ID0ga2V5X3JlZl90b19wdHIoa2V5X3JlZiktPnNlcmlhbDsKKwkJa2V5X3JlZl9wdXQoa2V5X3JlZik7CiAJfQogCWVsc2UgewotCQlyZXQgPSBQVFJfRVJSKGtleSk7CisJCXJldCA9IFBUUl9FUlIoa2V5X3JlZik7CiAJfQogCi0Ja2V5X3B1dChrZXlyaW5nKTsKKwlrZXlfcmVmX3B1dChrZXlyaW5nX3JlZik7CiAgZXJyb3IzOgogCWtmcmVlKHBheWxvYWQpOwogIGVycm9yMjoKQEAgLTEzMSw3ICsxMzEsOCBAQAogCQkJCWtleV9zZXJpYWxfdCBkZXN0cmluZ2lkKQogewogCXN0cnVjdCBrZXlfdHlwZSAqa3R5cGU7Ci0Jc3RydWN0IGtleSAqa2V5LCAqZGVzdDsKKwlzdHJ1Y3Qga2V5ICprZXk7CisJa2V5X3JlZl90IGRlc3RfcmVmOwogCWNoYXIgdHlwZVszMl0sICpkZXNjcmlwdGlvbiwgKmNhbGxvdXRfaW5mbzsKIAlsb25nIGRsZW4sIHJldDsKIApAQCAtMTg3LDExICsxODgsMTEgQEAKIAl9CiAKIAkvKiBnZXQgdGhlIGRlc3RpbmF0aW9uIGtleXJpbmcgaWYgc3BlY2lmaWVkICovCi0JZGVzdCA9IE5VTEw7CisJZGVzdF9yZWYgPSBOVUxMOwogCWlmIChkZXN0cmluZ2lkKSB7Ci0JCWRlc3QgPSBsb29rdXBfdXNlcl9rZXkoTlVMTCwgZGVzdHJpbmdpZCwgMSwgMCwgS0VZX1dSSVRFKTsKLQkJaWYgKElTX0VSUihkZXN0KSkgewotCQkJcmV0ID0gUFRSX0VSUihkZXN0KTsKKwkJZGVzdF9yZWYgPSBsb29rdXBfdXNlcl9rZXkoTlVMTCwgZGVzdHJpbmdpZCwgMSwgMCwgS0VZX1dSSVRFKTsKKwkJaWYgKElTX0VSUihkZXN0X3JlZikpIHsKKwkJCXJldCA9IFBUUl9FUlIoZGVzdF9yZWYpOwogCQkJZ290byBlcnJvcjM7CiAJCX0KIAl9CkBAIC0yMDQsNyArMjA1LDggQEAKIAl9CiAKIAkvKiBkbyB0aGUgc2VhcmNoICovCi0Ja2V5ID0gcmVxdWVzdF9rZXlfYW5kX2xpbmsoa3R5cGUsIGRlc2NyaXB0aW9uLCBjYWxsb3V0X2luZm8sIGRlc3QpOworCWtleSA9IHJlcXVlc3Rfa2V5X2FuZF9saW5rKGt0eXBlLCBkZXNjcmlwdGlvbiwgY2FsbG91dF9pbmZvLAorCQkJCSAgIGtleV9yZWZfdG9fcHRyKGRlc3RfcmVmKSk7CiAJaWYgKElTX0VSUihrZXkpKSB7CiAJCXJldCA9IFBUUl9FUlIoa2V5KTsKIAkJZ290byBlcnJvcjU7CkBAIC0yMTYsNyArMjE4LDcgQEAKICBlcnJvcjU6CiAJa2V5X3R5cGVfcHV0KGt0eXBlKTsKICBlcnJvcjQ6Ci0Ja2V5X3B1dChkZXN0KTsKKwlrZXlfcmVmX3B1dChkZXN0X3JlZik7CiAgZXJyb3IzOgogCWtmcmVlKGNhbGxvdXRfaW5mbyk7CiAgZXJyb3IyOgpAQCAtMjM0LDE3ICsyMzYsMTcgQEAKICAqLwogbG9uZyBrZXljdGxfZ2V0X2tleXJpbmdfSUQoa2V5X3NlcmlhbF90IGlkLCBpbnQgY3JlYXRlKQogewotCXN0cnVjdCBrZXkgKmtleTsKKwlrZXlfcmVmX3Qga2V5X3JlZjsKIAlsb25nIHJldDsKIAotCWtleSA9IGxvb2t1cF91c2VyX2tleShOVUxMLCBpZCwgY3JlYXRlLCAwLCBLRVlfU0VBUkNIKTsKLQlpZiAoSVNfRVJSKGtleSkpIHsKLQkJcmV0ID0gUFRSX0VSUihrZXkpOworCWtleV9yZWYgPSBsb29rdXBfdXNlcl9rZXkoTlVMTCwgaWQsIGNyZWF0ZSwgMCwgS0VZX1NFQVJDSCk7CisJaWYgKElTX0VSUihrZXlfcmVmKSkgeworCQlyZXQgPSBQVFJfRVJSKGtleV9yZWYpOwogCQlnb3RvIGVycm9yOwogCX0KIAotCXJldCA9IGtleS0+c2VyaWFsOwotCWtleV9wdXQoa2V5KTsKKwlyZXQgPSBrZXlfcmVmX3RvX3B0cihrZXlfcmVmKS0+c2VyaWFsOworCWtleV9yZWZfcHV0KGtleV9yZWYpOwogIGVycm9yOgogCXJldHVybiByZXQ7CiAKQEAgLTMwMiw3ICszMDQsNyBAQAogCQkgICAgICAgY29uc3Qgdm9pZCBfX3VzZXIgKl9wYXlsb2FkLAogCQkgICAgICAgc2l6ZV90IHBsZW4pCiB7Ci0Jc3RydWN0IGtleSAqa2V5OworCWtleV9yZWZfdCBrZXlfcmVmOwogCXZvaWQgKnBheWxvYWQ7CiAJbG9uZyByZXQ7CiAKQEAgLTMyNCwxNiArMzI2LDE2IEBACiAJfQogCiAJLyogZmluZCB0aGUgdGFyZ2V0IGtleSAod2hpY2ggbXVzdCBiZSB3cml0YWJsZSkgKi8KLQlrZXkgPSBsb29rdXBfdXNlcl9rZXkoTlVMTCwgaWQsIDAsIDAsIEtFWV9XUklURSk7Ci0JaWYgKElTX0VSUihrZXkpKSB7Ci0JCXJldCA9IFBUUl9FUlIoa2V5KTsKKwlrZXlfcmVmID0gbG9va3VwX3VzZXJfa2V5KE5VTEwsIGlkLCAwLCAwLCBLRVlfV1JJVEUpOworCWlmIChJU19FUlIoa2V5X3JlZikpIHsKKwkJcmV0ID0gUFRSX0VSUihrZXlfcmVmKTsKIAkJZ290byBlcnJvcjI7CiAJfQogCiAJLyogdXBkYXRlIHRoZSBrZXkgKi8KLQlyZXQgPSBrZXlfdXBkYXRlKGtleSwgcGF5bG9hZCwgcGxlbik7CisJcmV0ID0ga2V5X3VwZGF0ZShrZXlfcmVmLCBwYXlsb2FkLCBwbGVuKTsKIAotCWtleV9wdXQoa2V5KTsKKwlrZXlfcmVmX3B1dChrZXlfcmVmKTsKICBlcnJvcjI6CiAJa2ZyZWUocGF5bG9hZCk7CiAgZXJyb3I6CkBAIC0zNDksMTkgKzM1MSwxOSBAQAogICovCiBsb25nIGtleWN0bF9yZXZva2Vfa2V5KGtleV9zZXJpYWxfdCBpZCkKIHsKLQlzdHJ1Y3Qga2V5ICprZXk7CisJa2V5X3JlZl90IGtleV9yZWY7CiAJbG9uZyByZXQ7CiAKLQlrZXkgPSBsb29rdXBfdXNlcl9rZXkoTlVMTCwgaWQsIDAsIDAsIEtFWV9XUklURSk7Ci0JaWYgKElTX0VSUihrZXkpKSB7Ci0JCXJldCA9IFBUUl9FUlIoa2V5KTsKKwlrZXlfcmVmID0gbG9va3VwX3VzZXJfa2V5KE5VTEwsIGlkLCAwLCAwLCBLRVlfV1JJVEUpOworCWlmIChJU19FUlIoa2V5X3JlZikpIHsKKwkJcmV0ID0gUFRSX0VSUihrZXlfcmVmKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlrZXlfcmV2b2tlKGtleSk7CisJa2V5X3Jldm9rZShrZXlfcmVmX3RvX3B0cihrZXlfcmVmKSk7CiAJcmV0ID0gMDsKIAotCWtleV9wdXQoa2V5KTsKKwlrZXlfcmVmX3B1dChrZXlfcmVmKTsKICBlcnJvcjoKIAlyZXR1cm4gcmV0OwogCkBAIC0zNzUsMTggKzM3NywxOCBAQAogICovCiBsb25nIGtleWN0bF9rZXlyaW5nX2NsZWFyKGtleV9zZXJpYWxfdCByaW5naWQpCiB7Ci0Jc3RydWN0IGtleSAqa2V5cmluZzsKKwlrZXlfcmVmX3Qga2V5cmluZ19yZWY7CiAJbG9uZyByZXQ7CiAKLQlrZXlyaW5nID0gbG9va3VwX3VzZXJfa2V5KE5VTEwsIHJpbmdpZCwgMSwgMCwgS0VZX1dSSVRFKTsKLQlpZiAoSVNfRVJSKGtleXJpbmcpKSB7Ci0JCXJldCA9IFBUUl9FUlIoa2V5cmluZyk7CisJa2V5cmluZ19yZWYgPSBsb29rdXBfdXNlcl9rZXkoTlVMTCwgcmluZ2lkLCAxLCAwLCBLRVlfV1JJVEUpOworCWlmIChJU19FUlIoa2V5cmluZ19yZWYpKSB7CisJCXJldCA9IFBUUl9FUlIoa2V5cmluZ19yZWYpOwogCQlnb3RvIGVycm9yOwogCX0KIAotCXJldCA9IGtleXJpbmdfY2xlYXIoa2V5cmluZyk7CisJcmV0ID0ga2V5cmluZ19jbGVhcihrZXlfcmVmX3RvX3B0cihrZXlyaW5nX3JlZikpOwogCi0Ja2V5X3B1dChrZXlyaW5nKTsKKwlrZXlfcmVmX3B1dChrZXlyaW5nX3JlZik7CiAgZXJyb3I6CiAJcmV0dXJuIHJldDsKIApAQCAtNDAxLDI2ICs0MDMsMjYgQEAKICAqLwogbG9uZyBrZXljdGxfa2V5cmluZ19saW5rKGtleV9zZXJpYWxfdCBpZCwga2V5X3NlcmlhbF90IHJpbmdpZCkKIHsKLQlzdHJ1Y3Qga2V5ICprZXlyaW5nLCAqa2V5OworCWtleV9yZWZfdCBrZXlyaW5nX3JlZiwga2V5X3JlZjsKIAlsb25nIHJldDsKIAotCWtleXJpbmcgPSBsb29rdXBfdXNlcl9rZXkoTlVMTCwgcmluZ2lkLCAxLCAwLCBLRVlfV1JJVEUpOwotCWlmIChJU19FUlIoa2V5cmluZykpIHsKLQkJcmV0ID0gUFRSX0VSUihrZXlyaW5nKTsKKwlrZXlyaW5nX3JlZiA9IGxvb2t1cF91c2VyX2tleShOVUxMLCByaW5naWQsIDEsIDAsIEtFWV9XUklURSk7CisJaWYgKElTX0VSUihrZXlyaW5nX3JlZikpIHsKKwkJcmV0ID0gUFRSX0VSUihrZXlyaW5nX3JlZik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCi0Ja2V5ID0gbG9va3VwX3VzZXJfa2V5KE5VTEwsIGlkLCAxLCAwLCBLRVlfTElOSyk7Ci0JaWYgKElTX0VSUihrZXkpKSB7Ci0JCXJldCA9IFBUUl9FUlIoa2V5KTsKKwlrZXlfcmVmID0gbG9va3VwX3VzZXJfa2V5KE5VTEwsIGlkLCAxLCAwLCBLRVlfTElOSyk7CisJaWYgKElTX0VSUihrZXlfcmVmKSkgeworCQlyZXQgPSBQVFJfRVJSKGtleV9yZWYpOwogCQlnb3RvIGVycm9yMjsKIAl9CiAKLQlyZXQgPSBrZXlfbGluayhrZXlyaW5nLCBrZXkpOworCXJldCA9IGtleV9saW5rKGtleV9yZWZfdG9fcHRyKGtleXJpbmdfcmVmKSwga2V5X3JlZl90b19wdHIoa2V5X3JlZikpOwogCi0Ja2V5X3B1dChrZXkpOworCWtleV9yZWZfcHV0KGtleV9yZWYpOwogIGVycm9yMjoKLQlrZXlfcHV0KGtleXJpbmcpOworCWtleV9yZWZfcHV0KGtleXJpbmdfcmVmKTsKICBlcnJvcjoKIAlyZXR1cm4gcmV0OwogCkBAIC00MzUsMjYgKzQzNywyNiBAQAogICovCiBsb25nIGtleWN0bF9rZXlyaW5nX3VubGluayhrZXlfc2VyaWFsX3QgaWQsIGtleV9zZXJpYWxfdCByaW5naWQpCiB7Ci0Jc3RydWN0IGtleSAqa2V5cmluZywgKmtleTsKKwlrZXlfcmVmX3Qga2V5cmluZ19yZWYsIGtleV9yZWY7CiAJbG9uZyByZXQ7CiAKLQlrZXlyaW5nID0gbG9va3VwX3VzZXJfa2V5KE5VTEwsIHJpbmdpZCwgMCwgMCwgS0VZX1dSSVRFKTsKLQlpZiAoSVNfRVJSKGtleXJpbmcpKSB7Ci0JCXJldCA9IFBUUl9FUlIoa2V5cmluZyk7CisJa2V5cmluZ19yZWYgPSBsb29rdXBfdXNlcl9rZXkoTlVMTCwgcmluZ2lkLCAwLCAwLCBLRVlfV1JJVEUpOworCWlmIChJU19FUlIoa2V5cmluZ19yZWYpKSB7CisJCXJldCA9IFBUUl9FUlIoa2V5cmluZ19yZWYpOwogCQlnb3RvIGVycm9yOwogCX0KIAotCWtleSA9IGxvb2t1cF91c2VyX2tleShOVUxMLCBpZCwgMCwgMCwgMCk7Ci0JaWYgKElTX0VSUihrZXkpKSB7Ci0JCXJldCA9IFBUUl9FUlIoa2V5KTsKKwlrZXlfcmVmID0gbG9va3VwX3VzZXJfa2V5KE5VTEwsIGlkLCAwLCAwLCAwKTsKKwlpZiAoSVNfRVJSKGtleV9yZWYpKSB7CisJCXJldCA9IFBUUl9FUlIoa2V5X3JlZik7CiAJCWdvdG8gZXJyb3IyOwogCX0KIAotCXJldCA9IGtleV91bmxpbmsoa2V5cmluZywga2V5KTsKKwlyZXQgPSBrZXlfdW5saW5rKGtleV9yZWZfdG9fcHRyKGtleXJpbmdfcmVmKSwga2V5X3JlZl90b19wdHIoa2V5X3JlZikpOwogCi0Ja2V5X3B1dChrZXkpOworCWtleV9yZWZfcHV0KGtleV9yZWYpOwogIGVycm9yMjoKLQlrZXlfcHV0KGtleXJpbmcpOworCWtleV9yZWZfcHV0KGtleXJpbmdfcmVmKTsKICBlcnJvcjoKIAlyZXR1cm4gcmV0OwogCkBAIC00NzYsMjQgKzQ3OCwyNiBAQAogCQkJIHNpemVfdCBidWZsZW4pCiB7CiAJc3RydWN0IGtleSAqa2V5LCAqaW5zdGtleTsKKwlrZXlfcmVmX3Qga2V5X3JlZjsKIAljaGFyICp0bXBidWY7CiAJbG9uZyByZXQ7CiAKLQlrZXkgPSBsb29rdXBfdXNlcl9rZXkoTlVMTCwga2V5aWQsIDAsIDEsIEtFWV9WSUVXKTsKLQlpZiAoSVNfRVJSKGtleSkpIHsKKwlrZXlfcmVmID0gbG9va3VwX3VzZXJfa2V5KE5VTEwsIGtleWlkLCAwLCAxLCBLRVlfVklFVyk7CisJaWYgKElTX0VSUihrZXlfcmVmKSkgewogCQkvKiB2aWV3aW5nIGEga2V5IHVuZGVyIGNvbnN0cnVjdGlvbiBpcyBwZXJtaXR0ZWQgaWYgd2UgaGF2ZSB0aGUKIAkJICogYXV0aG9yaXNhdGlvbiB0b2tlbiBoYW5keSAqLwotCQlpZiAoUFRSX0VSUihrZXkpID09IC1FQUNDRVMpIHsKKwkJaWYgKFBUUl9FUlIoa2V5X3JlZikgPT0gLUVBQ0NFUykgewogCQkJaW5zdGtleSA9IGtleV9nZXRfaW5zdGFudGlhdGlvbl9hdXRoa2V5KGtleWlkKTsKIAkJCWlmICghSVNfRVJSKGluc3RrZXkpKSB7CiAJCQkJa2V5X3B1dChpbnN0a2V5KTsKLQkJCQlrZXkgPSBsb29rdXBfdXNlcl9rZXkoTlVMTCwga2V5aWQsIDAsIDEsIDApOwotCQkJCWlmICghSVNfRVJSKGtleSkpCisJCQkJa2V5X3JlZiA9IGxvb2t1cF91c2VyX2tleShOVUxMLCBrZXlpZCwKKwkJCQkJCQkgIDAsIDEsIDApOworCQkJCWlmICghSVNfRVJSKGtleV9yZWYpKQogCQkJCQlnb3RvIG9rYXk7CiAJCQl9CiAJCX0KIAotCQlyZXQgPSBQVFJfRVJSKGtleSk7CisJCXJldCA9IFBUUl9FUlIoa2V5X3JlZik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC01MDQsMTMgKzUwOCwxNiBAQAogCWlmICghdG1wYnVmKQogCQlnb3RvIGVycm9yMjsKIAorCWtleSA9IGtleV9yZWZfdG9fcHRyKGtleV9yZWYpOworCiAJcmV0ID0gc25wcmludGYodG1wYnVmLCBQQUdFX1NJWkUgLSAxLAotCQkgICAgICAgIiVzOyVkOyVkOyUwNng7JXMiLAotCQkgICAgICAga2V5LT50eXBlLT5uYW1lLAotCQkgICAgICAga2V5LT51aWQsCi0JCSAgICAgICBrZXktPmdpZCwKLQkJICAgICAgIGtleS0+cGVybSwKLQkJICAgICAgIGtleS0+ZGVzY3JpcHRpb24gPyBrZXktPmRlc2NyaXB0aW9uIDoiIgorCQkgICAgICAgIiVzOyVkOyVkOyUwOHg7JXMiLAorCQkgICAgICAga2V5X3JlZl90b19wdHIoa2V5X3JlZiktPnR5cGUtPm5hbWUsCisJCSAgICAgICBrZXlfcmVmX3RvX3B0cihrZXlfcmVmKS0+dWlkLAorCQkgICAgICAga2V5X3JlZl90b19wdHIoa2V5X3JlZiktPmdpZCwKKwkJICAgICAgIGtleV9yZWZfdG9fcHRyKGtleV9yZWYpLT5wZXJtLAorCQkgICAgICAga2V5X3JlZl90b19wdHIoa2V5X3JlZiktPmRlc2NyaXB0aW9uID8KKwkJICAgICAgIGtleV9yZWZfdG9fcHRyKGtleV9yZWYpLT5kZXNjcmlwdGlvbiA6ICIiCiAJCSAgICAgICApOwogCiAJLyogaW5jbHVkZSBhIE5VTCBjaGFyIGF0IHRoZSBlbmQgb2YgdGhlIGRhdGEgKi8KQEAgLTUzMCw3ICs1MzcsNyBAQAogCiAJa2ZyZWUodG1wYnVmKTsKICBlcnJvcjI6Ci0Ja2V5X3B1dChrZXkpOworCWtleV9yZWZfcHV0KGtleV9yZWYpOwogIGVycm9yOgogCXJldHVybiByZXQ7CiAKQEAgLTU1Miw3ICs1NTksNyBAQAogCQkJICAga2V5X3NlcmlhbF90IGRlc3RyaW5naWQpCiB7CiAJc3RydWN0IGtleV90eXBlICprdHlwZTsKLQlzdHJ1Y3Qga2V5ICprZXlyaW5nLCAqa2V5LCAqZGVzdDsKKwlrZXlfcmVmX3Qga2V5cmluZ19yZWYsIGtleV9yZWYsIGRlc3RfcmVmOwogCWNoYXIgdHlwZVszMl0sICpkZXNjcmlwdGlvbjsKIAlsb25nIGRsZW4sIHJldDsKIApAQCAtNTgxLDE4ICs1ODgsMTggQEAKIAkJZ290byBlcnJvcjI7CiAKIAkvKiBnZXQgdGhlIGtleXJpbmcgYXQgd2hpY2ggdG8gYmVnaW4gdGhlIHNlYXJjaCAqLwotCWtleXJpbmcgPSBsb29rdXBfdXNlcl9rZXkoTlVMTCwgcmluZ2lkLCAwLCAwLCBLRVlfU0VBUkNIKTsKLQlpZiAoSVNfRVJSKGtleXJpbmcpKSB7Ci0JCXJldCA9IFBUUl9FUlIoa2V5cmluZyk7CisJa2V5cmluZ19yZWYgPSBsb29rdXBfdXNlcl9rZXkoTlVMTCwgcmluZ2lkLCAwLCAwLCBLRVlfU0VBUkNIKTsKKwlpZiAoSVNfRVJSKGtleXJpbmdfcmVmKSkgeworCQlyZXQgPSBQVFJfRVJSKGtleXJpbmdfcmVmKTsKIAkJZ290byBlcnJvcjI7CiAJfQogCiAJLyogZ2V0IHRoZSBkZXN0aW5hdGlvbiBrZXlyaW5nIGlmIHNwZWNpZmllZCAqLwotCWRlc3QgPSBOVUxMOworCWRlc3RfcmVmID0gTlVMTDsKIAlpZiAoZGVzdHJpbmdpZCkgewotCQlkZXN0ID0gbG9va3VwX3VzZXJfa2V5KE5VTEwsIGRlc3RyaW5naWQsIDEsIDAsIEtFWV9XUklURSk7Ci0JCWlmIChJU19FUlIoZGVzdCkpIHsKLQkJCXJldCA9IFBUUl9FUlIoZGVzdCk7CisJCWRlc3RfcmVmID0gbG9va3VwX3VzZXJfa2V5KE5VTEwsIGRlc3RyaW5naWQsIDEsIDAsIEtFWV9XUklURSk7CisJCWlmIChJU19FUlIoZGVzdF9yZWYpKSB7CisJCQlyZXQgPSBQVFJfRVJSKGRlc3RfcmVmKTsKIAkJCWdvdG8gZXJyb3IzOwogCQl9CiAJfQpAQCAtNjA1LDkgKzYxMiw5IEBACiAJfQogCiAJLyogZG8gdGhlIHNlYXJjaCAqLwotCWtleSA9IGtleXJpbmdfc2VhcmNoKGtleXJpbmcsIGt0eXBlLCBkZXNjcmlwdGlvbik7Ci0JaWYgKElTX0VSUihrZXkpKSB7Ci0JCXJldCA9IFBUUl9FUlIoa2V5KTsKKwlrZXlfcmVmID0ga2V5cmluZ19zZWFyY2goa2V5cmluZ19yZWYsIGt0eXBlLCBkZXNjcmlwdGlvbik7CisJaWYgKElTX0VSUihrZXlfcmVmKSkgeworCQlyZXQgPSBQVFJfRVJSKGtleV9yZWYpOwogCiAJCS8qIHRyZWF0IGxhY2sgb3IgcHJlc2VuY2Ugb2YgYSBuZWdhdGl2ZSBrZXkgdGhlIHNhbWUgKi8KIAkJaWYgKHJldCA9PSAtRUFHQUlOKQpAQCAtNjE2LDI2ICs2MjMsMjYgQEAKIAl9CiAKIAkvKiBsaW5rIHRoZSByZXN1bHRpbmcga2V5IHRvIHRoZSBkZXN0aW5hdGlvbiBrZXlyaW5nIGlmIHdlIGNhbiAqLwotCWlmIChkZXN0KSB7CisJaWYgKGRlc3RfcmVmKSB7CiAJCXJldCA9IC1FQUNDRVM7Ci0JCWlmICgha2V5X3Blcm1pc3Npb24oa2V5LCBLRVlfTElOSykpCisJCWlmICgha2V5X3Blcm1pc3Npb24oa2V5X3JlZiwgS0VZX0xJTkspKQogCQkJZ290byBlcnJvcjY7CiAKLQkJcmV0ID0ga2V5X2xpbmsoZGVzdCwga2V5KTsKKwkJcmV0ID0ga2V5X2xpbmsoa2V5X3JlZl90b19wdHIoZGVzdF9yZWYpLCBrZXlfcmVmX3RvX3B0cihrZXlfcmVmKSk7CiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBlcnJvcjY7CiAJfQogCi0JcmV0ID0ga2V5LT5zZXJpYWw7CisJcmV0ID0ga2V5X3JlZl90b19wdHIoa2V5X3JlZiktPnNlcmlhbDsKIAogIGVycm9yNjoKLQlrZXlfcHV0KGtleSk7CisJa2V5X3JlZl9wdXQoa2V5X3JlZik7CiAgZXJyb3I1OgogCWtleV90eXBlX3B1dChrdHlwZSk7CiAgZXJyb3I0OgotCWtleV9wdXQoZGVzdCk7CisJa2V5X3JlZl9wdXQoZGVzdF9yZWYpOwogIGVycm9yMzoKLQlrZXlfcHV0KGtleXJpbmcpOworCWtleV9yZWZfcHV0KGtleXJpbmdfcmVmKTsKICBlcnJvcjI6CiAJa2ZyZWUoZGVzY3JpcHRpb24pOwogIGVycm9yOgpAQCAtNjQ1LDE2ICs2NTIsNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICogc2VlIGlmIHRoZSBrZXkgd2UncmUgbG9va2luZyBhdCBpcyB0aGUgdGFyZ2V0IGtleQotICovCi1zdGF0aWMgaW50IGtleWN0bF9yZWFkX2tleV9zYW1lKGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgY29uc3Qgdm9pZCAqdGFyZ2V0KQotewotCXJldHVybiBrZXkgPT0gdGFyZ2V0OwotCi19IC8qIGVuZCBrZXljdGxfcmVhZF9rZXlfc2FtZSgpICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCiAgKiByZWFkIGEgdXNlciBrZXkncyBwYXlsb2FkCiAgKiAtIHRoZSBrZXlyaW5nIG11c3QgYmUgcmVhZGFibGUgb3IgdGhlIGtleSBtdXN0IGJlIHNlYXJjaGFibGUgZnJvbSB0aGUKICAqICAgcHJvY2VzcydzIGtleXJpbmdzCkBAIC02NjUsMzggKzY2MiwzMyBAQAogICovCiBsb25nIGtleWN0bF9yZWFkX2tleShrZXlfc2VyaWFsX3Qga2V5aWQsIGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBidWZsZW4pCiB7Ci0Jc3RydWN0IGtleSAqa2V5LCAqc2tleTsKKwlzdHJ1Y3Qga2V5ICprZXk7CisJa2V5X3JlZl90IGtleV9yZWY7CiAJbG9uZyByZXQ7CiAKIAkvKiBmaW5kIHRoZSBrZXkgZmlyc3QgKi8KLQlrZXkgPSBsb29rdXBfdXNlcl9rZXkoTlVMTCwga2V5aWQsIDAsIDAsIDApOwotCWlmICghSVNfRVJSKGtleSkpIHsKLQkJLyogc2VlIGlmIHdlIGNhbiByZWFkIGl0IGRpcmVjdGx5ICovCi0JCWlmIChrZXlfcGVybWlzc2lvbihrZXksIEtFWV9SRUFEKSkKLQkJCWdvdG8gY2FuX3JlYWRfa2V5OworCWtleV9yZWYgPSBsb29rdXBfdXNlcl9rZXkoTlVMTCwga2V5aWQsIDAsIDAsIDApOworCWlmIChJU19FUlIoa2V5X3JlZikpIHsKKwkJcmV0ID0gLUVOT0tFWTsKKwkJZ290byBlcnJvcjsKKwl9CiAKLQkJLyogd2UgY2FuJ3Q7IHNlZSBpZiBpdCdzIHNlYXJjaGFibGUgZnJvbSB0aGlzIHByb2Nlc3MncwotCQkgKiBrZXlyaW5ncwotCQkgKiAtIHdlIGF1dG9tYXRpY2FsbHkgdGFrZSBhY2NvdW50IG9mIHRoZSBmYWN0IHRoYXQgaXQgbWF5IGJlCi0JCSAqICAgZGFuZ2xpbmcgb2ZmIGFuIGluc3RhbnRpYXRpb24ga2V5Ci0JCSAqLwotCQlza2V5ID0gc2VhcmNoX3Byb2Nlc3Nfa2V5cmluZ3Moa2V5LT50eXBlLCBrZXksCi0JCQkJCSAgICAgICBrZXljdGxfcmVhZF9rZXlfc2FtZSwgY3VycmVudCk7Ci0JCWlmICghSVNfRVJSKHNrZXkpKQotCQkJZ290byBjYW5fcmVhZF9rZXkyOworCWtleSA9IGtleV9yZWZfdG9fcHRyKGtleV9yZWYpOwogCi0JCXJldCA9IFBUUl9FUlIoc2tleSk7Ci0JCWlmIChyZXQgPT0gLUVBR0FJTikKLQkJCXJldCA9IC1FQUNDRVM7CisJLyogc2VlIGlmIHdlIGNhbiByZWFkIGl0IGRpcmVjdGx5ICovCisJaWYgKGtleV9wZXJtaXNzaW9uKGtleV9yZWYsIEtFWV9SRUFEKSkKKwkJZ290byBjYW5fcmVhZF9rZXk7CisKKwkvKiB3ZSBjYW4ndDsgc2VlIGlmIGl0J3Mgc2VhcmNoYWJsZSBmcm9tIHRoaXMgcHJvY2VzcydzIGtleXJpbmdzCisJICogLSB3ZSBhdXRvbWF0aWNhbGx5IHRha2UgYWNjb3VudCBvZiB0aGUgZmFjdCB0aGF0IGl0IG1heSBiZQorCSAqICAgZGFuZ2xpbmcgb2ZmIGFuIGluc3RhbnRpYXRpb24ga2V5CisJICovCisJaWYgKCFpc19rZXlfcG9zc2Vzc2VkKGtleV9yZWYpKSB7CisJCXJldCA9IC1FQUNDRVM7CiAJCWdvdG8gZXJyb3IyOwogCX0KIAotCXJldCA9IC1FTk9LRVk7Ci0JZ290byBlcnJvcjsKLQogCS8qIHRoZSBrZXkgaXMgcHJvYmFibHkgcmVhZGFibGUgLSBub3cgdHJ5IHRvIHJlYWQgaXQgKi8KLSBjYW5fcmVhZF9rZXkyOgotCWtleV9wdXQoc2tleSk7CiAgY2FuX3JlYWRfa2V5OgogCXJldCA9IGtleV92YWxpZGF0ZShrZXkpOwogCWlmIChyZXQgPT0gMCkgewpAQCAtNzI3LDE4ICs3MTksMjEgQEAKIGxvbmcga2V5Y3RsX2Nob3duX2tleShrZXlfc2VyaWFsX3QgaWQsIHVpZF90IHVpZCwgZ2lkX3QgZ2lkKQogewogCXN0cnVjdCBrZXkgKmtleTsKKwlrZXlfcmVmX3Qga2V5X3JlZjsKIAlsb25nIHJldDsKIAogCXJldCA9IDA7CiAJaWYgKHVpZCA9PSAodWlkX3QpIC0xICYmIGdpZCA9PSAoZ2lkX3QpIC0xKQogCQlnb3RvIGVycm9yOwogCi0Ja2V5ID0gbG9va3VwX3VzZXJfa2V5KE5VTEwsIGlkLCAxLCAxLCAwKTsKLQlpZiAoSVNfRVJSKGtleSkpIHsKLQkJcmV0ID0gUFRSX0VSUihrZXkpOworCWtleV9yZWYgPSBsb29rdXBfdXNlcl9rZXkoTlVMTCwgaWQsIDEsIDEsIDApOworCWlmIChJU19FUlIoa2V5X3JlZikpIHsKKwkJcmV0ID0gUFRSX0VSUihrZXlfcmVmKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKKwlrZXkgPSBrZXlfcmVmX3RvX3B0cihrZXlfcmVmKTsKKwogCS8qIG1ha2UgdGhlIGNoYW5nZXMgd2l0aCB0aGUgbG9ja3MgaGVsZCB0byBwcmV2ZW50IGNob3duL2Nob3duIHJhY2VzICovCiAJcmV0ID0gLUVBQ0NFUzsKIAlkb3duX3dyaXRlKCZrZXktPnNlbSk7CkBAIC03ODQsMTggKzc3OSwyMSBAQAogbG9uZyBrZXljdGxfc2V0cGVybV9rZXkoa2V5X3NlcmlhbF90IGlkLCBrZXlfcGVybV90IHBlcm0pCiB7CiAJc3RydWN0IGtleSAqa2V5OworCWtleV9yZWZfdCBrZXlfcmVmOwogCWxvbmcgcmV0OwogCiAJcmV0ID0gLUVJTlZBTDsKLQlpZiAocGVybSAmIH4oS0VZX1VTUl9BTEwgfCBLRVlfR1JQX0FMTCB8IEtFWV9PVEhfQUxMKSkKKwlpZiAocGVybSAmIH4oS0VZX1BPU19BTEwgfCBLRVlfVVNSX0FMTCB8IEtFWV9HUlBfQUxMIHwgS0VZX09USF9BTEwpKQogCQlnb3RvIGVycm9yOwogCi0Ja2V5ID0gbG9va3VwX3VzZXJfa2V5KE5VTEwsIGlkLCAxLCAxLCAwKTsKLQlpZiAoSVNfRVJSKGtleSkpIHsKLQkJcmV0ID0gUFRSX0VSUihrZXkpOworCWtleV9yZWYgPSBsb29rdXBfdXNlcl9rZXkoTlVMTCwgaWQsIDEsIDEsIDApOworCWlmIChJU19FUlIoa2V5X3JlZikpIHsKKwkJcmV0ID0gUFRSX0VSUihrZXlfcmVmKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKKwlrZXkgPSBrZXlfcmVmX3RvX3B0cihrZXlfcmVmKTsKKwogCS8qIG1ha2UgdGhlIGNoYW5nZXMgd2l0aCB0aGUgbG9ja3MgaGVsZCB0byBwcmV2ZW50IGNob3duL2NobW9kIHJhY2VzICovCiAJcmV0ID0gLUVBQ0NFUzsKIAlkb3duX3dyaXRlKCZrZXktPnNlbSk7CkBAIC04MjQsNyArODIyLDggQEAKIAkJCSAgICBrZXlfc2VyaWFsX3QgcmluZ2lkKQogewogCXN0cnVjdCByZXF1ZXN0X2tleV9hdXRoICpya2E7Ci0Jc3RydWN0IGtleSAqaW5zdGtleSwgKmtleXJpbmc7CisJc3RydWN0IGtleSAqaW5zdGtleTsKKwlrZXlfcmVmX3Qga2V5cmluZ19yZWY7CiAJdm9pZCAqcGF5bG9hZDsKIAlsb25nIHJldDsKIApAQCAtODU3LDIxICs4NTYsMjEgQEAKIAogCS8qIGZpbmQgdGhlIGRlc3RpbmF0aW9uIGtleXJpbmcgYW1vbmdzdCB0aG9zZSBiZWxvbmdpbmcgdG8gdGhlCiAJICogcmVxdWVzdGluZyB0YXNrICovCi0Ja2V5cmluZyA9IE5VTEw7CisJa2V5cmluZ19yZWYgPSBOVUxMOwogCWlmIChyaW5naWQpIHsKLQkJa2V5cmluZyA9IGxvb2t1cF91c2VyX2tleShya2EtPmNvbnRleHQsIHJpbmdpZCwgMSwgMCwKLQkJCQkJICBLRVlfV1JJVEUpOwotCQlpZiAoSVNfRVJSKGtleXJpbmcpKSB7Ci0JCQlyZXQgPSBQVFJfRVJSKGtleXJpbmcpOworCQlrZXlyaW5nX3JlZiA9IGxvb2t1cF91c2VyX2tleShya2EtPmNvbnRleHQsIHJpbmdpZCwgMSwgMCwKKwkJCQkJICAgICAgS0VZX1dSSVRFKTsKKwkJaWYgKElTX0VSUihrZXlyaW5nX3JlZikpIHsKKwkJCXJldCA9IFBUUl9FUlIoa2V5cmluZ19yZWYpOwogCQkJZ290byBlcnJvcjM7CiAJCX0KIAl9CiAKIAkvKiBpbnN0YW50aWF0ZSB0aGUga2V5IGFuZCBsaW5rIGl0IGludG8gYSBrZXlyaW5nICovCiAJcmV0ID0ga2V5X2luc3RhbnRpYXRlX2FuZF9saW5rKHJrYS0+dGFyZ2V0X2tleSwgcGF5bG9hZCwgcGxlbiwKLQkJCQkgICAgICAga2V5cmluZywgaW5zdGtleSk7CisJCQkJICAgICAgIGtleV9yZWZfdG9fcHRyKGtleXJpbmdfcmVmKSwgaW5zdGtleSk7CiAKLQlrZXlfcHV0KGtleXJpbmcpOworCWtleV9yZWZfcHV0KGtleXJpbmdfcmVmKTsKICBlcnJvcjM6CiAJa2V5X3B1dChpbnN0a2V5KTsKICBlcnJvcjI6CkBAIC04ODksNyArODg4LDggQEAKIGxvbmcga2V5Y3RsX25lZ2F0ZV9rZXkoa2V5X3NlcmlhbF90IGlkLCB1bnNpZ25lZCB0aW1lb3V0LCBrZXlfc2VyaWFsX3QgcmluZ2lkKQogewogCXN0cnVjdCByZXF1ZXN0X2tleV9hdXRoICpya2E7Ci0Jc3RydWN0IGtleSAqaW5zdGtleSwgKmtleXJpbmc7CisJc3RydWN0IGtleSAqaW5zdGtleTsKKwlrZXlfcmVmX3Qga2V5cmluZ19yZWY7CiAJbG9uZyByZXQ7CiAKIAkvKiBmaW5kIHRoZSBpbnN0YW50aWF0aW9uIGF1dGhvcmlzYXRpb24ga2V5ICovCkBAIC05MDMsMTkgKzkwMywyMCBAQAogCiAJLyogZmluZCB0aGUgZGVzdGluYXRpb24ga2V5cmluZyBpZiBwcmVzZW50ICh3aGljaCBtdXN0IGFsc28gYmUKIAkgKiB3cml0YWJsZSkgKi8KLQlrZXlyaW5nID0gTlVMTDsKKwlrZXlyaW5nX3JlZiA9IE5VTEw7CiAJaWYgKHJpbmdpZCkgewotCQlrZXlyaW5nID0gbG9va3VwX3VzZXJfa2V5KE5VTEwsIHJpbmdpZCwgMSwgMCwgS0VZX1dSSVRFKTsKLQkJaWYgKElTX0VSUihrZXlyaW5nKSkgewotCQkJcmV0ID0gUFRSX0VSUihrZXlyaW5nKTsKKwkJa2V5cmluZ19yZWYgPSBsb29rdXBfdXNlcl9rZXkoTlVMTCwgcmluZ2lkLCAxLCAwLCBLRVlfV1JJVEUpOworCQlpZiAoSVNfRVJSKGtleXJpbmdfcmVmKSkgeworCQkJcmV0ID0gUFRSX0VSUihrZXlyaW5nX3JlZik7CiAJCQlnb3RvIGVycm9yMjsKIAkJfQogCX0KIAogCS8qIGluc3RhbnRpYXRlIHRoZSBrZXkgYW5kIGxpbmsgaXQgaW50byBhIGtleXJpbmcgKi8KLQlyZXQgPSBrZXlfbmVnYXRlX2FuZF9saW5rKHJrYS0+dGFyZ2V0X2tleSwgdGltZW91dCwga2V5cmluZywgaW5zdGtleSk7CisJcmV0ID0ga2V5X25lZ2F0ZV9hbmRfbGluayhya2EtPnRhcmdldF9rZXksIHRpbWVvdXQsCisJCQkJICBrZXlfcmVmX3RvX3B0cihrZXlyaW5nX3JlZiksIGluc3RrZXkpOwogCi0Ja2V5X3B1dChrZXlyaW5nKTsKKwlrZXlfcmVmX3B1dChrZXlyaW5nX3JlZik7CiAgZXJyb3IyOgogCWtleV9wdXQoaW5zdGtleSk7CiAgZXJyb3I6CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleXJpbmcuYyBiL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCmluZGV4IDljMjA4YzcuLjA2MzkzOTYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCisrKyBiL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCkBAIC0zMDksNyArMzA5LDcgQEAKIAlpbnQgcmV0OwogCiAJa2V5cmluZyA9IGtleV9hbGxvYygma2V5X3R5cGVfa2V5cmluZywgZGVzY3JpcHRpb24sCi0JCQkgICAgdWlkLCBnaWQsIEtFWV9VU1JfQUxMLCBub3RfaW5fcXVvdGEpOworCQkJICAgIHVpZCwgZ2lkLCBLRVlfUE9TX0FMTCB8IEtFWV9VU1JfQUxMLCBub3RfaW5fcXVvdGEpOwogCiAJaWYgKCFJU19FUlIoa2V5cmluZykpIHsKIAkJcmV0ID0ga2V5X2luc3RhbnRpYXRlX2FuZF9saW5rKGtleXJpbmcsIE5VTEwsIDAsIGRlc3QsIE5VTEwpOwpAQCAtMzMzLDEyICszMzMsMTMgQEAKICAqIC0gd2UgcmVseSBvbiBSQ1UgdG8gcHJldmVudCB0aGUga2V5cmluZyBsaXN0cyBmcm9tIGRpc2FwcGVhcmluZyBvbiB1cwogICogLSB3ZSByZXR1cm4gLUVBR0FJTiBpZiB3ZSBkaWRuJ3QgZmluZCBhbnkgbWF0Y2hpbmcga2V5CiAgKiAtIHdlIHJldHVybiAtRU5PS0VZIGlmIHdlIG9ubHkgZm91bmQgbmVnYXRpdmUgbWF0Y2hpbmcga2V5cworICogLSB3ZSBwcm9wYWdhdGUgdGhlIHBvc3Nlc3Npb24gYXR0cmlidXRlIGZyb20gdGhlIGtleXJpbmcgcmVmIHRvIHRoZSBrZXkgcmVmCiAgKi8KLXN0cnVjdCBrZXkgKmtleXJpbmdfc2VhcmNoX2F1eChzdHJ1Y3Qga2V5ICprZXlyaW5nLAotCQkJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqY29udGV4dCwKLQkJCSAgICAgICBzdHJ1Y3Qga2V5X3R5cGUgKnR5cGUsCi0JCQkgICAgICAgY29uc3Qgdm9pZCAqZGVzY3JpcHRpb24sCi0JCQkgICAgICAga2V5X21hdGNoX2Z1bmNfdCBtYXRjaCkKK2tleV9yZWZfdCBrZXlyaW5nX3NlYXJjaF9hdXgoa2V5X3JlZl90IGtleXJpbmdfcmVmLAorCQkJICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvbnRleHQsCisJCQkgICAgIHN0cnVjdCBrZXlfdHlwZSAqdHlwZSwKKwkJCSAgICAgY29uc3Qgdm9pZCAqZGVzY3JpcHRpb24sCisJCQkgICAgIGtleV9tYXRjaF9mdW5jX3QgbWF0Y2gpCiB7CiAJc3RydWN0IHsKIAkJc3RydWN0IGtleXJpbmdfbGlzdCAqa2V5bGlzdDsKQEAgLTM0NywyOSArMzQ4LDMzIEBACiAKIAlzdHJ1Y3Qga2V5cmluZ19saXN0ICprZXlsaXN0OwogCXN0cnVjdCB0aW1lc3BlYyBub3c7Ci0Jc3RydWN0IGtleSAqa2V5OworCXVuc2lnbmVkIGxvbmcgcG9zc2Vzc2VkOworCXN0cnVjdCBrZXkgKmtleXJpbmcsICprZXk7CisJa2V5X3JlZl90IGtleV9yZWY7CiAJbG9uZyBlcnI7CiAJaW50IHNwLCBraXg7CiAKKwlrZXlyaW5nID0ga2V5X3JlZl90b19wdHIoa2V5cmluZ19yZWYpOworCXBvc3Nlc3NlZCA9IGlzX2tleV9wb3NzZXNzZWQoa2V5cmluZ19yZWYpOwogCWtleV9jaGVjayhrZXlyaW5nKTsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQogCS8qIHRvcCBrZXlyaW5nIG11c3QgaGF2ZSBzZWFyY2ggcGVybWlzc2lvbiB0byBiZWdpbiB0aGUgc2VhcmNoICovCi0Ja2V5ID0gRVJSX1BUUigtRUFDQ0VTKTsKLQlpZiAoIWtleV90YXNrX3Blcm1pc3Npb24oa2V5cmluZywgY29udGV4dCwgS0VZX1NFQVJDSCkpCisJa2V5X3JlZiA9IEVSUl9QVFIoLUVBQ0NFUyk7CisJaWYgKCFrZXlfdGFza19wZXJtaXNzaW9uKGtleXJpbmdfcmVmLCBjb250ZXh0LCBLRVlfU0VBUkNIKSkKIAkJZ290byBlcnJvcjsKIAotCWtleSA9IEVSUl9QVFIoLUVOT1RESVIpOworCWtleV9yZWYgPSBFUlJfUFRSKC1FTk9URElSKTsKIAlpZiAoa2V5cmluZy0+dHlwZSAhPSAma2V5X3R5cGVfa2V5cmluZykKIAkJZ290byBlcnJvcjsKIAorCXJjdV9yZWFkX2xvY2soKTsKKwogCW5vdyA9IGN1cnJlbnRfa2VybmVsX3RpbWUoKTsKIAllcnIgPSAtRUFHQUlOOwogCXNwID0gMDsKIAogCS8qIHN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcga2V5cmluZyAqLwotIGRlc2NlbmQ6CitkZXNjZW5kOgogCWlmICh0ZXN0X2JpdChLRVlfRkxBR19SRVZPS0VELCAma2V5cmluZy0+ZmxhZ3MpKQogCQlnb3RvIG5vdF90aGlzX2tleXJpbmc7CiAKQEAgLTM5Nyw3ICs0MDIsOCBAQAogCQkJY29udGludWU7CiAKIAkJLyoga2V5IG11c3QgaGF2ZSBzZWFyY2ggcGVybWlzc2lvbnMgKi8KLQkJaWYgKCFrZXlfdGFza19wZXJtaXNzaW9uKGtleSwgY29udGV4dCwgS0VZX1NFQVJDSCkpCisJCWlmICgha2V5X3Rhc2tfcGVybWlzc2lvbihtYWtlX2tleV9yZWYoa2V5LCBwb3NzZXNzZWQpLAorCQkJCQkgY29udGV4dCwgS0VZX1NFQVJDSCkpCiAJCQljb250aW51ZTsKIAogCQkvKiB3ZSBzZXQgYSBkaWZmZXJlbnQgZXJyb3IgY29kZSBpZiB3ZSBmaW5kIGEgbmVnYXRpdmUga2V5ICovCkBAIC00MTEsNyArNDE3LDcgQEAKIAogCS8qIHNlYXJjaCB0aHJvdWdoIHRoZSBrZXlyaW5ncyBuZXN0ZWQgaW4gdGhpcyBvbmUgKi8KIAlraXggPSAwOwotIGFzY2VuZDoKK2FzY2VuZDoKIAlmb3IgKDsga2l4IDwga2V5bGlzdC0+bmtleXM7IGtpeCsrKSB7CiAJCWtleSA9IGtleWxpc3QtPmtleXNba2l4XTsKIAkJaWYgKGtleS0+dHlwZSAhPSAma2V5X3R5cGVfa2V5cmluZykKQEAgLTQyMyw3ICs0MjksOCBAQAogCQlpZiAoc3AgPj0gS0VZUklOR19TRUFSQ0hfTUFYX0RFUFRIKQogCQkJY29udGludWU7CiAKLQkJaWYgKCFrZXlfdGFza19wZXJtaXNzaW9uKGtleSwgY29udGV4dCwgS0VZX1NFQVJDSCkpCisJCWlmICgha2V5X3Rhc2tfcGVybWlzc2lvbihtYWtlX2tleV9yZWYoa2V5LCBwb3NzZXNzZWQpLAorCQkJCQkgY29udGV4dCwgS0VZX1NFQVJDSCkpCiAJCQljb250aW51ZTsKIAogCQkvKiBzdGFjayB0aGUgY3VycmVudCBwb3NpdGlvbiAqLwpAQCAtNDM4LDcgKzQ0NSw3IEBACiAKIAkvKiB0aGUga2V5cmluZyB3ZSdyZSBsb29raW5nIGF0IHdhcyBkaXNxdWFsaWZpZWQgb3IgZGlkbid0IGNvbnRhaW4gYQogCSAqIG1hdGNoaW5nIGtleSAqLwotIG5vdF90aGlzX2tleXJpbmc6Citub3RfdGhpc19rZXlyaW5nOgogCWlmIChzcCA+IDApIHsKIAkJLyogcmVzdW1lIHRoZSBwcm9jZXNzaW5nIG9mIGEga2V5cmluZyBoaWdoZXIgdXAgaW4gdGhlIHRyZWUgKi8KIAkJc3AtLTsKQEAgLTQ0NywxNiArNDU0LDE4IEBACiAJCWdvdG8gYXNjZW5kOwogCX0KIAotCWtleSA9IEVSUl9QVFIoZXJyKTsKLQlnb3RvIGVycm9yOworCWtleV9yZWYgPSBFUlJfUFRSKGVycik7CisJZ290byBlcnJvcl8yOwogCiAJLyogd2UgZm91bmQgYSB2aWFibGUgbWF0Y2ggKi8KLSBmb3VuZDoKK2ZvdW5kOgogCWF0b21pY19pbmMoJmtleS0+dXNhZ2UpOwogCWtleV9jaGVjayhrZXkpOwotIGVycm9yOgorCWtleV9yZWYgPSBtYWtlX2tleV9yZWYoa2V5LCBwb3NzZXNzZWQpOworZXJyb3JfMjoKIAlyY3VfcmVhZF91bmxvY2soKTsKLQlyZXR1cm4ga2V5OworZXJyb3I6CisJcmV0dXJuIGtleV9yZWY7CiAKIH0gLyogZW5kIGtleXJpbmdfc2VhcmNoX2F1eCgpICovCiAKQEAgLTQ2OSw5ICs0NzgsOSBAQAogICogLSB3ZSByZXR1cm4gLUVBR0FJTiBpZiB3ZSBkaWRuJ3QgZmluZCBhbnkgbWF0Y2hpbmcga2V5CiAgKiAtIHdlIHJldHVybiAtRU5PS0VZIGlmIHdlIG9ubHkgZm91bmQgbmVnYXRpdmUgbWF0Y2hpbmcga2V5cwogICovCi1zdHJ1Y3Qga2V5ICprZXlyaW5nX3NlYXJjaChzdHJ1Y3Qga2V5ICprZXlyaW5nLAotCQkJICAgc3RydWN0IGtleV90eXBlICp0eXBlLAotCQkJICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pCitrZXlfcmVmX3Qga2V5cmluZ19zZWFyY2goa2V5X3JlZl90IGtleXJpbmcsCisJCQkgc3RydWN0IGtleV90eXBlICp0eXBlLAorCQkJIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKQogewogCWlmICghdHlwZS0+bWF0Y2gpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9LRVkpOwpAQCAtNDg4LDE1ICs0OTcsMTkgQEAKICAqIHNlYXJjaCB0aGUgZ2l2ZW4ga2V5cmluZyBvbmx5IChubyByZWN1cnNpb24pCiAgKiAtIGtleXJpbmcgbXVzdCBiZSBsb2NrZWQgYnkgY2FsbGVyCiAgKi8KLXN0cnVjdCBrZXkgKl9fa2V5cmluZ19zZWFyY2hfb25lKHN0cnVjdCBrZXkgKmtleXJpbmcsCi0JCQkJIGNvbnN0IHN0cnVjdCBrZXlfdHlwZSAqa3R5cGUsCi0JCQkJIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLAotCQkJCSBrZXlfcGVybV90IHBlcm0pCitrZXlfcmVmX3QgX19rZXlyaW5nX3NlYXJjaF9vbmUoa2V5X3JlZl90IGtleXJpbmdfcmVmLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBrZXlfdHlwZSAqa3R5cGUsCisJCQkgICAgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24sCisJCQkgICAgICAga2V5X3Blcm1fdCBwZXJtKQogewogCXN0cnVjdCBrZXlyaW5nX2xpc3QgKmtsaXN0OwotCXN0cnVjdCBrZXkgKmtleTsKKwl1bnNpZ25lZCBsb25nIHBvc3Nlc3NlZDsKKwlzdHJ1Y3Qga2V5ICprZXlyaW5nLCAqa2V5OwogCWludCBsb29wOwogCisJa2V5cmluZyA9IGtleV9yZWZfdG9fcHRyKGtleXJpbmdfcmVmKTsKKwlwb3NzZXNzZWQgPSBpc19rZXlfcG9zc2Vzc2VkKGtleXJpbmdfcmVmKTsKKwogCXJjdV9yZWFkX2xvY2soKTsKIAogCWtsaXN0ID0gcmN1X2RlcmVmZXJlbmNlKGtleXJpbmctPnBheWxvYWQuc3Vic2NyaXB0aW9ucyk7CkBAIC01MDcsMjEgKzUyMCwyMSBAQAogCQkJaWYgKGtleS0+dHlwZSA9PSBrdHlwZSAmJgogCQkJICAgICgha2V5LT50eXBlLT5tYXRjaCB8fAogCQkJICAgICBrZXktPnR5cGUtPm1hdGNoKGtleSwgZGVzY3JpcHRpb24pKSAmJgotCQkJICAgIGtleV9wZXJtaXNzaW9uKGtleSwgcGVybSkgJiYKKwkJCSAgICBrZXlfcGVybWlzc2lvbihtYWtlX2tleV9yZWYoa2V5LCBwb3NzZXNzZWQpLAorCQkJCQkgICBwZXJtKSAmJgogCQkJICAgICF0ZXN0X2JpdChLRVlfRkxBR19SRVZPS0VELCAma2V5LT5mbGFncykKIAkJCSAgICApCiAJCQkJZ290byBmb3VuZDsKIAkJfQogCX0KIAotCWtleSA9IEVSUl9QVFIoLUVOT0tFWSk7Ci0JZ290byBlcnJvcjsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gRVJSX1BUUigtRU5PS0VZKTsKIAogIGZvdW5kOgogCWF0b21pY19pbmMoJmtleS0+dXNhZ2UpOwotIGVycm9yOgogCXJjdV9yZWFkX3VubG9jaygpOwotCXJldHVybiBrZXk7CisJcmV0dXJuIG1ha2Vfa2V5X3JlZihrZXksIHBvc3Nlc3NlZCk7CiAKIH0gLyogZW5kIF9fa2V5cmluZ19zZWFyY2hfb25lKCkgKi8KIApAQCAtNjAzLDcgKzYxNiw4IEBACiAJCQlpZiAoc3RyY21wKGtleXJpbmctPmRlc2NyaXB0aW9uLCBuYW1lKSAhPSAwKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoIWtleV9wZXJtaXNzaW9uKGtleXJpbmcsIEtFWV9TRUFSQ0gpKQorCQkJaWYgKCFrZXlfcGVybWlzc2lvbihtYWtlX2tleV9yZWYoa2V5cmluZywgMCksCisJCQkJCSAgICBLRVlfU0VBUkNIKSkKIAkJCQljb250aW51ZTsKIAogCQkJLyogZm91bmQgYSBwb3RlbnRpYWwgY2FuZGlkYXRlLCBidXQgd2Ugc3RpbGwgbmVlZCB0bwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9wZXJtaXNzaW9uLmMgYi9zZWN1cml0eS9rZXlzL3Blcm1pc3Npb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2RiMDczCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkva2V5cy9wZXJtaXNzaW9uLmMKQEAgLTAsMCArMSw3MCBAQAorLyogcGVybWlzc2lvbi5jOiBrZXkgcGVybWlzc2lvbiBkZXRlcm1pbmF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogY2hlY2sgdG8gc2VlIHdoZXRoZXIgcGVybWlzc2lvbiBpcyBncmFudGVkIHRvIHVzZSBhIGtleSBpbiB0aGUgZGVzaXJlZCB3YXksCisgKiBidXQgcGVybWl0IHRoZSBzZWN1cml0eSBtb2R1bGVzIHRvIG92ZXJyaWRlCisgKi8KK2ludCBrZXlfdGFza19wZXJtaXNzaW9uKGNvbnN0IGtleV9yZWZfdCBrZXlfcmVmLAorCQkJc3RydWN0IHRhc2tfc3RydWN0ICpjb250ZXh0LAorCQkJa2V5X3Blcm1fdCBwZXJtKQoreworCXN0cnVjdCBrZXkgKmtleTsKKwlrZXlfcGVybV90IGtwZXJtOworCWludCByZXQ7CisKKwlrZXkgPSBrZXlfcmVmX3RvX3B0cihrZXlfcmVmKTsKKworCS8qIHVzZSB0aGUgc2Vjb25kIDgtYml0cyBvZiBwZXJtaXNzaW9ucyBmb3Iga2V5cyB0aGUgY2FsbGVyIG93bnMgKi8KKwlpZiAoa2V5LT51aWQgPT0gY29udGV4dC0+ZnN1aWQpIHsKKwkJa3Blcm0gPSBrZXktPnBlcm0gPj4gMTY7CisJCWdvdG8gdXNlX3RoZXNlX3Blcm1zOworCX0KKworCS8qIHVzZSB0aGUgdGhpcmQgOC1iaXRzIG9mIHBlcm1pc3Npb25zIGZvciBrZXlzIHRoZSBjYWxsZXIgaGFzIGEgZ3JvdXAKKwkgKiBtZW1iZXJzaGlwIGluIGNvbW1vbiB3aXRoICovCisJaWYgKGtleS0+Z2lkICE9IC0xICYmIGtleS0+cGVybSAmIEtFWV9HUlBfQUxMKSB7CisJCWlmIChrZXktPmdpZCA9PSBjb250ZXh0LT5mc2dpZCkgeworCQkJa3Blcm0gPSBrZXktPnBlcm0gPj4gODsKKwkJCWdvdG8gdXNlX3RoZXNlX3Blcm1zOworCQl9CisKKwkJdGFza19sb2NrKGNvbnRleHQpOworCQlyZXQgPSBncm91cHNfc2VhcmNoKGNvbnRleHQtPmdyb3VwX2luZm8sIGtleS0+Z2lkKTsKKwkJdGFza191bmxvY2soY29udGV4dCk7CisKKwkJaWYgKHJldCkgeworCQkJa3Blcm0gPSBrZXktPnBlcm0gPj4gODsKKwkJCWdvdG8gdXNlX3RoZXNlX3Blcm1zOworCQl9CisJfQorCisJLyogb3RoZXJ3aXNlIHVzZSB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQgOC1iaXRzICovCisJa3Blcm0gPSBrZXktPnBlcm07CisKK3VzZV90aGVzZV9wZXJtczoKKwkvKiB1c2UgdGhlIHRvcCA4LWJpdHMgb2YgcGVybWlzc2lvbnMgZm9yIGtleXMgdGhlIGNhbGxlciBwb3NzZXNzZXMKKwkgKiAtIHBvc3Nlc3NvciBwZXJtaXNzaW9ucyBhcmUgYWRkaXRpdmUgd2l0aCBvdGhlciBwZXJtaXNzaW9ucworCSAqLworCWlmIChpc19rZXlfcG9zc2Vzc2VkKGtleV9yZWYpKQorCQlrcGVybSB8PSBrZXktPnBlcm0gPj4gMjQ7CisKKwlrcGVybSA9IGtwZXJtICYgcGVybSAmIEtFWV9BTEw7CisKKwlyZXR1cm4ga3Blcm0gPT0gcGVybTsKKworfSAvKiBlbmQga2V5X3Rhc2tfcGVybWlzc2lvbigpICovCisKK0VYUE9SVF9TWU1CT0woa2V5X3Rhc2tfcGVybWlzc2lvbik7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3Byb2MuYyBiL3NlY3VyaXR5L2tleXMvcHJvYy5jCmluZGV4IGM1NWNmMWYuLjEyYjc1MGUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvcHJvYy5jCisrKyBiL3NlY3VyaXR5L2tleXMvcHJvYy5jCkBAIC0xNjcsNyArMTY3LDcgQEAKICNkZWZpbmUgc2hvd2ZsYWcoS0VZLCBMRVRURVIsIEZMQUcpIFwKIAkodGVzdF9iaXQoRkxBRywJJihLRVkpLT5mbGFncykgPyBMRVRURVIgOiAnLScpCiAKLQlzZXFfcHJpbnRmKG0sICIlMDh4ICVjJWMlYyVjJWMlYyAlNWQgJTRzICUwNnggJTVkICU1ZCAlLTkuOXMgIiwKKwlzZXFfcHJpbnRmKG0sICIlMDh4ICVjJWMlYyVjJWMlYyAlNWQgJTRzICUwOHggJTVkICU1ZCAlLTkuOXMgIiwKIAkJICAga2V5LT5zZXJpYWwsCiAJCSAgIHNob3dmbGFnKGtleSwgJ0knLCBLRVlfRkxBR19JTlNUQU5USUFURUQpLAogCQkgICBzaG93ZmxhZyhrZXksICdSJywgS0VZX0ZMQUdfUkVWT0tFRCksCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3Byb2Nlc3Nfa2V5cy5jIGIvc2VjdXJpdHkva2V5cy9wcm9jZXNzX2tleXMuYwppbmRleCBjMDg5Zjc4Li5kNDJkMjE1IDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL3Byb2Nlc3Nfa2V5cy5jCisrKyBiL3NlY3VyaXR5L2tleXMvcHJvY2Vzc19rZXlzLmMKQEAgLTM5LDcgKzM5LDcgQEAKIAkudHlwZQkJPSAma2V5X3R5cGVfa2V5cmluZywKIAkudXNlcgkJPSAmcm9vdF9rZXlfdXNlciwKIAkuc2VtCQk9IF9fUldTRU1fSU5JVElBTElaRVIocm9vdF91c2VyX2tleXJpbmcuc2VtKSwKLQkucGVybQkJPSBLRVlfVVNSX0FMTCwKKwkucGVybQkJPSBLRVlfUE9TX0FMTCB8IEtFWV9VU1JfQUxMLAogCS5mbGFncwkJPSAxIDw8IEtFWV9GTEFHX0lOU1RBTlRJQVRFRCwKIAkuZGVzY3JpcHRpb24JPSAiX3VpZC4wIiwKICNpZmRlZiBLRVlfREVCVUdHSU5HCkBAIC01NCw3ICs1NCw3IEBACiAJLnR5cGUJCT0gJmtleV90eXBlX2tleXJpbmcsCiAJLnVzZXIJCT0gJnJvb3Rfa2V5X3VzZXIsCiAJLnNlbQkJPSBfX1JXU0VNX0lOSVRJQUxJWkVSKHJvb3Rfc2Vzc2lvbl9rZXlyaW5nLnNlbSksCi0JLnBlcm0JCT0gS0VZX1VTUl9BTEwsCisJLnBlcm0JCT0gS0VZX1BPU19BTEwgfCBLRVlfVVNSX0FMTCwKIAkuZmxhZ3MJCT0gMSA8PCBLRVlfRkxBR19JTlNUQU5USUFURUQsCiAJLmRlc2NyaXB0aW9uCT0gIl91aWRfc2VzLjAiLAogI2lmZGVmIEtFWV9ERUJVR0dJTkcKQEAgLTk4LDcgKzk4LDcgQEAKIAl1c2VyLT5zZXNzaW9uX2tleXJpbmcgPSBzZXNzaW9uX2tleXJpbmc7CiAJcmV0ID0gMDsKIAotIGVycm9yOgorZXJyb3I6CiAJcmV0dXJuIHJldDsKIAogfSAvKiBlbmQgYWxsb2NfdWlkX2tleXJpbmcoKSAqLwpAQCAtMTU2LDcgKzE1Niw3IEBACiAJcmV0ID0gMDsKIAogCWtleV9wdXQob2xkKTsKLSBlcnJvcjoKK2Vycm9yOgogCXJldHVybiByZXQ7CiAKIH0gLyogZW5kIGluc3RhbGxfdGhyZWFkX2tleXJpbmcoKSAqLwpAQCAtMTkzLDcgKzE5Myw3IEBACiAJfQogCiAJcmV0ID0gMDsKLSBlcnJvcjoKK2Vycm9yOgogCXJldHVybiByZXQ7CiAKIH0gLyogZW5kIGluc3RhbGxfcHJvY2Vzc19rZXlyaW5nKCkgKi8KQEAgLTIzNiw3ICsyMzYsNyBAQAogCS8qIHdlJ3JlIHVzaW5nIFJDVSBvbiB0aGUgcG9pbnRlciAqLwogCXN5bmNocm9uaXplX3JjdSgpOwogCWtleV9wdXQob2xkKTsKLSBlcnJvcjoKK2Vycm9yOgogCXJldHVybiByZXQ7CiAKIH0gLyogZW5kIGluc3RhbGxfc2Vzc2lvbl9rZXlyaW5nKCkgKi8KQEAgLTM3NiwxMyArMzc2LDEzIEBACiAgKiAtIHdlIHJldHVybiAtRUFHQUlOIGlmIHdlIGRpZG4ndCBmaW5kIGFueSBtYXRjaGluZyBrZXkKICAqIC0gd2UgcmV0dXJuIC1FTk9LRVkgaWYgd2UgZm91bmQgb25seSBuZWdhdGl2ZSBtYXRjaGluZyBrZXlzCiAgKi8KLXN0cnVjdCBrZXkgKnNlYXJjaF9wcm9jZXNzX2tleXJpbmdzKHN0cnVjdCBrZXlfdHlwZSAqdHlwZSwKLQkJCQkgICAgY29uc3Qgdm9pZCAqZGVzY3JpcHRpb24sCi0JCQkJICAgIGtleV9tYXRjaF9mdW5jX3QgbWF0Y2gsCi0JCQkJICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqY29udGV4dCkKK2tleV9yZWZfdCBzZWFyY2hfcHJvY2Vzc19rZXlyaW5ncyhzdHJ1Y3Qga2V5X3R5cGUgKnR5cGUsCisJCQkJICBjb25zdCB2b2lkICpkZXNjcmlwdGlvbiwKKwkJCQkgIGtleV9tYXRjaF9mdW5jX3QgbWF0Y2gsCisJCQkJICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvbnRleHQpCiB7CiAJc3RydWN0IHJlcXVlc3Rfa2V5X2F1dGggKnJrYTsKLQlzdHJ1Y3Qga2V5ICprZXksICpyZXQsICplcnIsICppbnN0a2V5OworCWtleV9yZWZfdCBrZXlfcmVmLCByZXQsIGVyciwgaW5zdGtleV9yZWY7CiAKIAkvKiB3ZSB3YW50IHRvIHJldHVybiAtRUFHQUlOIG9yIC1FTk9LRVkgaWYgYW55IG9mIHRoZSBrZXlyaW5ncyB3ZXJlCiAJICogc2VhcmNoYWJsZSwgYnV0IHdlIGZhaWxlZCB0byBmaW5kIGEga2V5IG9yIHdlIGZvdW5kIGEgbmVnYXRpdmUga2V5OwpAQCAtMzkxLDQ2ICszOTEsNDggQEAKIAkgKgogCSAqIGluIHRlcm1zIG9mIHByaW9yaXR5OiBzdWNjZXNzID4gLUVOT0tFWSA+IC1FQUdBSU4gPiBvdGhlciBlcnJvcgogCSAqLwotCWtleSA9IE5VTEw7CisJa2V5X3JlZiA9IE5VTEw7CiAJcmV0ID0gTlVMTDsKIAllcnIgPSBFUlJfUFRSKC1FQUdBSU4pOwogCiAJLyogc2VhcmNoIHRoZSB0aHJlYWQga2V5cmluZyBmaXJzdCAqLwogCWlmIChjb250ZXh0LT50aHJlYWRfa2V5cmluZykgewotCQlrZXkgPSBrZXlyaW5nX3NlYXJjaF9hdXgoY29udGV4dC0+dGhyZWFkX2tleXJpbmcsCi0JCQkJCSBjb250ZXh0LCB0eXBlLCBkZXNjcmlwdGlvbiwgbWF0Y2gpOwotCQlpZiAoIUlTX0VSUihrZXkpKQorCQlrZXlfcmVmID0ga2V5cmluZ19zZWFyY2hfYXV4KAorCQkJbWFrZV9rZXlfcmVmKGNvbnRleHQtPnRocmVhZF9rZXlyaW5nLCAxKSwKKwkJCWNvbnRleHQsIHR5cGUsIGRlc2NyaXB0aW9uLCBtYXRjaCk7CisJCWlmICghSVNfRVJSKGtleV9yZWYpKQogCQkJZ290byBmb3VuZDsKIAotCQlzd2l0Y2ggKFBUUl9FUlIoa2V5KSkgeworCQlzd2l0Y2ggKFBUUl9FUlIoa2V5X3JlZikpIHsKIAkJY2FzZSAtRUFHQUlOOiAvKiBubyBrZXkgKi8KIAkJCWlmIChyZXQpCiAJCQkJYnJlYWs7CiAJCWNhc2UgLUVOT0tFWTogLyogbmVnYXRpdmUga2V5ICovCi0JCQlyZXQgPSBrZXk7CisJCQlyZXQgPSBrZXlfcmVmOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQllcnIgPSBrZXk7CisJCQllcnIgPSBrZXlfcmVmOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKIAkvKiBzZWFyY2ggdGhlIHByb2Nlc3Mga2V5cmluZyBzZWNvbmQgKi8KIAlpZiAoY29udGV4dC0+c2lnbmFsLT5wcm9jZXNzX2tleXJpbmcpIHsKLQkJa2V5ID0ga2V5cmluZ19zZWFyY2hfYXV4KGNvbnRleHQtPnNpZ25hbC0+cHJvY2Vzc19rZXlyaW5nLAotCQkJCQkgY29udGV4dCwgdHlwZSwgZGVzY3JpcHRpb24sIG1hdGNoKTsKLQkJaWYgKCFJU19FUlIoa2V5KSkKKwkJa2V5X3JlZiA9IGtleXJpbmdfc2VhcmNoX2F1eCgKKwkJCW1ha2Vfa2V5X3JlZihjb250ZXh0LT5zaWduYWwtPnByb2Nlc3Nfa2V5cmluZywgMSksCisJCQljb250ZXh0LCB0eXBlLCBkZXNjcmlwdGlvbiwgbWF0Y2gpOworCQlpZiAoIUlTX0VSUihrZXlfcmVmKSkKIAkJCWdvdG8gZm91bmQ7CiAKLQkJc3dpdGNoIChQVFJfRVJSKGtleSkpIHsKKwkJc3dpdGNoIChQVFJfRVJSKGtleV9yZWYpKSB7CiAJCWNhc2UgLUVBR0FJTjogLyogbm8ga2V5ICovCiAJCQlpZiAocmV0KQogCQkJCWJyZWFrOwogCQljYXNlIC1FTk9LRVk6IC8qIG5lZ2F0aXZlIGtleSAqLwotCQkJcmV0ID0ga2V5OworCQkJcmV0ID0ga2V5X3JlZjsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJZXJyID0ga2V5OworCQkJZXJyID0ga2V5X3JlZjsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtNDM4LDIzICs0NDAsMjUgQEAKIAkvKiBzZWFyY2ggdGhlIHNlc3Npb24ga2V5cmluZyAqLwogCWlmIChjb250ZXh0LT5zaWduYWwtPnNlc3Npb25fa2V5cmluZykgewogCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCWtleSA9IGtleXJpbmdfc2VhcmNoX2F1eCgKLQkJCXJjdV9kZXJlZmVyZW5jZShjb250ZXh0LT5zaWduYWwtPnNlc3Npb25fa2V5cmluZyksCisJCWtleV9yZWYgPSBrZXlyaW5nX3NlYXJjaF9hdXgoCisJCQltYWtlX2tleV9yZWYocmN1X2RlcmVmZXJlbmNlKAorCQkJCQkgICAgIGNvbnRleHQtPnNpZ25hbC0+c2Vzc2lvbl9rZXlyaW5nKSwKKwkJCQkgICAgIDEpLAogCQkJY29udGV4dCwgdHlwZSwgZGVzY3JpcHRpb24sIG1hdGNoKTsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQkJaWYgKCFJU19FUlIoa2V5KSkKKwkJaWYgKCFJU19FUlIoa2V5X3JlZikpCiAJCQlnb3RvIGZvdW5kOwogCi0JCXN3aXRjaCAoUFRSX0VSUihrZXkpKSB7CisJCXN3aXRjaCAoUFRSX0VSUihrZXlfcmVmKSkgewogCQljYXNlIC1FQUdBSU46IC8qIG5vIGtleSAqLwogCQkJaWYgKHJldCkKIAkJCQlicmVhazsKIAkJY2FzZSAtRU5PS0VZOiAvKiBuZWdhdGl2ZSBrZXkgKi8KLQkJCXJldCA9IGtleTsKKwkJCXJldCA9IGtleV9yZWY7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCWVyciA9IGtleTsKKwkJCWVyciA9IGtleV9yZWY7CiAJCQlicmVhazsKIAkJfQogCkBAIC00NjUsNTEgKzQ2OSw1NCBAQAogCQkJZ290byBub19rZXk7CiAKIAkJcmN1X3JlYWRfbG9jaygpOwotCQlpbnN0a2V5ID0gX19rZXlyaW5nX3NlYXJjaF9vbmUoCi0JCQlyY3VfZGVyZWZlcmVuY2UoY29udGV4dC0+c2lnbmFsLT5zZXNzaW9uX2tleXJpbmcpLAorCQlpbnN0a2V5X3JlZiA9IF9fa2V5cmluZ19zZWFyY2hfb25lKAorCQkJbWFrZV9rZXlfcmVmKHJjdV9kZXJlZmVyZW5jZSgKKwkJCQkJICAgICBjb250ZXh0LT5zaWduYWwtPnNlc3Npb25fa2V5cmluZyksCisJCQkJICAgICAxKSwKIAkJCSZrZXlfdHlwZV9yZXF1ZXN0X2tleV9hdXRoLCBOVUxMLCAwKTsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQkJaWYgKElTX0VSUihpbnN0a2V5KSkKKwkJaWYgKElTX0VSUihpbnN0a2V5X3JlZikpCiAJCQlnb3RvIG5vX2tleTsKIAotCQlya2EgPSBpbnN0a2V5LT5wYXlsb2FkLmRhdGE7CisJCXJrYSA9IGtleV9yZWZfdG9fcHRyKGluc3RrZXlfcmVmKS0+cGF5bG9hZC5kYXRhOwogCi0JCWtleSA9IHNlYXJjaF9wcm9jZXNzX2tleXJpbmdzKHR5cGUsIGRlc2NyaXB0aW9uLCBtYXRjaCwKLQkJCQkJICAgICAgcmthLT5jb250ZXh0KTsKLQkJa2V5X3B1dChpbnN0a2V5KTsKKwkJa2V5X3JlZiA9IHNlYXJjaF9wcm9jZXNzX2tleXJpbmdzKHR5cGUsIGRlc2NyaXB0aW9uLCBtYXRjaCwKKwkJCQkJCSAgcmthLT5jb250ZXh0KTsKKwkJa2V5X3JlZl9wdXQoaW5zdGtleV9yZWYpOwogCi0JCWlmICghSVNfRVJSKGtleSkpCisJCWlmICghSVNfRVJSKGtleV9yZWYpKQogCQkJZ290byBmb3VuZDsKIAotCQlzd2l0Y2ggKFBUUl9FUlIoa2V5KSkgeworCQlzd2l0Y2ggKFBUUl9FUlIoa2V5X3JlZikpIHsKIAkJY2FzZSAtRUFHQUlOOiAvKiBubyBrZXkgKi8KIAkJCWlmIChyZXQpCiAJCQkJYnJlYWs7CiAJCWNhc2UgLUVOT0tFWTogLyogbmVnYXRpdmUga2V5ICovCi0JCQlyZXQgPSBrZXk7CisJCQlyZXQgPSBrZXlfcmVmOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQllcnIgPSBrZXk7CisJCQllcnIgPSBrZXlfcmVmOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAJLyogb3Igc2VhcmNoIHRoZSB1c2VyLXNlc3Npb24ga2V5cmluZyAqLwogCWVsc2UgewotCQlrZXkgPSBrZXlyaW5nX3NlYXJjaF9hdXgoY29udGV4dC0+dXNlci0+c2Vzc2lvbl9rZXlyaW5nLAotCQkJCQkgY29udGV4dCwgdHlwZSwgZGVzY3JpcHRpb24sIG1hdGNoKTsKLQkJaWYgKCFJU19FUlIoa2V5KSkKKwkJa2V5X3JlZiA9IGtleXJpbmdfc2VhcmNoX2F1eCgKKwkJCW1ha2Vfa2V5X3JlZihjb250ZXh0LT51c2VyLT5zZXNzaW9uX2tleXJpbmcsIDEpLAorCQkJY29udGV4dCwgdHlwZSwgZGVzY3JpcHRpb24sIG1hdGNoKTsKKwkJaWYgKCFJU19FUlIoa2V5X3JlZikpCiAJCQlnb3RvIGZvdW5kOwogCi0JCXN3aXRjaCAoUFRSX0VSUihrZXkpKSB7CisJCXN3aXRjaCAoUFRSX0VSUihrZXlfcmVmKSkgewogCQljYXNlIC1FQUdBSU46IC8qIG5vIGtleSAqLwogCQkJaWYgKHJldCkKIAkJCQlicmVhazsKIAkJY2FzZSAtRU5PS0VZOiAvKiBuZWdhdGl2ZSBrZXkgKi8KLQkJCXJldCA9IGtleTsKKwkJCXJldCA9IGtleV9yZWY7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCWVyciA9IGtleTsKKwkJCWVyciA9IGtleV9yZWY7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTUxNywyOSArNTI0LDQwIEBACiAKIG5vX2tleToKIAkvKiBubyBrZXkgLSBkZWNpZGUgb24gdGhlIGVycm9yIHdlJ3JlIGdvaW5nIHRvIGdvIGZvciAqLwotCWtleSA9IHJldCA/IHJldCA6IGVycjsKKwlrZXlfcmVmID0gcmV0ID8gcmV0IDogZXJyOwogCiBmb3VuZDoKLQlyZXR1cm4ga2V5OworCXJldHVybiBrZXlfcmVmOwogCiB9IC8qIGVuZCBzZWFyY2hfcHJvY2Vzc19rZXlyaW5ncygpICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCisgKiBzZWUgaWYgdGhlIGtleSB3ZSdyZSBsb29raW5nIGF0IGlzIHRoZSB0YXJnZXQga2V5CisgKi8KK3N0YXRpYyBpbnQgbG9va3VwX3VzZXJfa2V5X3Bvc3Nlc3NlZChjb25zdCBzdHJ1Y3Qga2V5ICprZXksIGNvbnN0IHZvaWQgKnRhcmdldCkKK3sKKwlyZXR1cm4ga2V5ID09IHRhcmdldDsKKworfSAvKiBlbmQgbG9va3VwX3VzZXJfa2V5X3Bvc3Nlc3NlZCgpICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCiAgKiBsb29rdXAgYSBrZXkgZ2l2ZW4gYSBrZXkgSUQgZnJvbSB1c2Vyc3BhY2Ugd2l0aCBhIGdpdmVuIHBlcm1pc3Npb25zIG1hc2sKICAqIC0gZG9uJ3QgY3JlYXRlIHNwZWNpYWwga2V5cmluZ3MgdW5sZXNzIHNvIHJlcXVlc3RlZAogICogLSBwYXJ0aWFsbHkgY29uc3RydWN0ZWQga2V5cyBhcmVuJ3QgZm91bmQgdW5sZXNzIHJlcXVlc3RlZAogICovCi1zdHJ1Y3Qga2V5ICpsb29rdXBfdXNlcl9rZXkoc3RydWN0IHRhc2tfc3RydWN0ICpjb250ZXh0LCBrZXlfc2VyaWFsX3QgaWQsCi0JCQkgICAgaW50IGNyZWF0ZSwgaW50IHBhcnRpYWwsIGtleV9wZXJtX3QgcGVybSkKK2tleV9yZWZfdCBsb29rdXBfdXNlcl9rZXkoc3RydWN0IHRhc2tfc3RydWN0ICpjb250ZXh0LCBrZXlfc2VyaWFsX3QgaWQsCisJCQkgIGludCBjcmVhdGUsIGludCBwYXJ0aWFsLCBrZXlfcGVybV90IHBlcm0pCiB7CisJa2V5X3JlZl90IGtleV9yZWYsIHNrZXlfcmVmOwogCXN0cnVjdCBrZXkgKmtleTsKIAlpbnQgcmV0OwogCiAJaWYgKCFjb250ZXh0KQogCQljb250ZXh0ID0gY3VycmVudDsKIAotCWtleSA9IEVSUl9QVFIoLUVOT0tFWSk7CisJa2V5X3JlZiA9IEVSUl9QVFIoLUVOT0tFWSk7CiAKIAlzd2l0Y2ggKGlkKSB7CiAJY2FzZSBLRVlfU1BFQ19USFJFQURfS0VZUklORzoKQEAgLTU1Niw2ICs1NzQsNyBAQAogCiAJCWtleSA9IGNvbnRleHQtPnRocmVhZF9rZXlyaW5nOwogCQlhdG9taWNfaW5jKCZrZXktPnVzYWdlKTsKKwkJa2V5X3JlZiA9IG1ha2Vfa2V5X3JlZihrZXksIDEpOwogCQlicmVhazsKIAogCWNhc2UgS0VZX1NQRUNfUFJPQ0VTU19LRVlSSU5HOgpAQCAtNTcyLDYgKzU5MSw3IEBACiAKIAkJa2V5ID0gY29udGV4dC0+c2lnbmFsLT5wcm9jZXNzX2tleXJpbmc7CiAJCWF0b21pY19pbmMoJmtleS0+dXNhZ2UpOworCQlrZXlfcmVmID0gbWFrZV9rZXlfcmVmKGtleSwgMSk7CiAJCWJyZWFrOwogCiAJY2FzZSBLRVlfU1BFQ19TRVNTSU9OX0tFWVJJTkc6CkBAIC01NzksNyArNTk5LDcgQEAKIAkJCS8qIGFsd2F5cyBpbnN0YWxsIGEgc2Vzc2lvbiBrZXlyaW5nIHVwb24gYWNjZXNzIGlmIG9uZQogCQkJICogZG9lc24ndCBleGlzdCB5ZXQgKi8KIAkJCXJldCA9IGluc3RhbGxfc2Vzc2lvbl9rZXlyaW5nKAotCQkJICAgICAgIGNvbnRleHQsIGNvbnRleHQtPnVzZXItPnNlc3Npb25fa2V5cmluZyk7CisJCQkJY29udGV4dCwgY29udGV4dC0+dXNlci0+c2Vzc2lvbl9rZXlyaW5nKTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCWdvdG8gZXJyb3I7CiAJCX0KQEAgLTU4OCwxNiArNjA4LDE5IEBACiAJCWtleSA9IHJjdV9kZXJlZmVyZW5jZShjb250ZXh0LT5zaWduYWwtPnNlc3Npb25fa2V5cmluZyk7CiAJCWF0b21pY19pbmMoJmtleS0+dXNhZ2UpOwogCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJa2V5X3JlZiA9IG1ha2Vfa2V5X3JlZihrZXksIDEpOwogCQlicmVhazsKIAogCWNhc2UgS0VZX1NQRUNfVVNFUl9LRVlSSU5HOgogCQlrZXkgPSBjb250ZXh0LT51c2VyLT51aWRfa2V5cmluZzsKIAkJYXRvbWljX2luYygma2V5LT51c2FnZSk7CisJCWtleV9yZWYgPSBtYWtlX2tleV9yZWYoa2V5LCAxKTsKIAkJYnJlYWs7CiAKIAljYXNlIEtFWV9TUEVDX1VTRVJfU0VTU0lPTl9LRVlSSU5HOgogCQlrZXkgPSBjb250ZXh0LT51c2VyLT5zZXNzaW9uX2tleXJpbmc7CiAJCWF0b21pY19pbmMoJmtleS0+dXNhZ2UpOworCQlrZXlfcmVmID0gbWFrZV9rZXlfcmVmKGtleSwgMSk7CiAJCWJyZWFrOwogCiAJY2FzZSBLRVlfU1BFQ19HUk9VUF9LRVlSSU5HOgpAQCAtNjA2LDEzICs2MjksMjggQEAKIAkJZ290byBlcnJvcjsKIAogCWRlZmF1bHQ6Ci0JCWtleSA9IEVSUl9QVFIoLUVJTlZBTCk7CisJCWtleV9yZWYgPSBFUlJfUFRSKC1FSU5WQUwpOwogCQlpZiAoaWQgPCAxKQogCQkJZ290byBlcnJvcjsKIAogCQlrZXkgPSBrZXlfbG9va3VwKGlkKTsKLQkJaWYgKElTX0VSUihrZXkpKQorCQlpZiAoSVNfRVJSKGtleSkpIHsKKwkJCWtleV9yZWYgPSBFUlJfUFRSKFBUUl9FUlIoa2V5KSk7CiAJCQlnb3RvIGVycm9yOworCQl9CisKKwkJa2V5X3JlZiA9IG1ha2Vfa2V5X3JlZihrZXksIDApOworCisJCS8qIGNoZWNrIHRvIHNlZSBpZiB3ZSBwb3NzZXNzIHRoZSBrZXkgKi8KKwkJc2tleV9yZWYgPSBzZWFyY2hfcHJvY2Vzc19rZXlyaW5ncyhrZXktPnR5cGUsIGtleSwKKwkJCQkJCSAgIGxvb2t1cF91c2VyX2tleV9wb3NzZXNzZWQsCisJCQkJCQkgICBjdXJyZW50KTsKKworCQlpZiAoIUlTX0VSUihza2V5X3JlZikpIHsKKwkJCWtleV9wdXQoa2V5KTsKKwkJCWtleV9yZWYgPSBza2V5X3JlZjsKKwkJfQorCiAJCWJyZWFrOwogCX0KIApAQCAtNjMwLDE1ICs2NjgsMTUgQEAKIAkvKiBjaGVjayB0aGUgcGVybWlzc2lvbnMgKi8KIAlyZXQgPSAtRUFDQ0VTOwogCi0JaWYgKCFrZXlfdGFza19wZXJtaXNzaW9uKGtleSwgY29udGV4dCwgcGVybSkpCisJaWYgKCFrZXlfdGFza19wZXJtaXNzaW9uKGtleV9yZWYsIGNvbnRleHQsIHBlcm0pKQogCQlnb3RvIGludmFsaWRfa2V5OwogCi0gZXJyb3I6Ci0JcmV0dXJuIGtleTsKK2Vycm9yOgorCXJldHVybiBrZXlfcmVmOwogCi0gaW52YWxpZF9rZXk6Ci0Ja2V5X3B1dChrZXkpOwotCWtleSA9IEVSUl9QVFIocmV0KTsKK2ludmFsaWRfa2V5OgorCWtleV9yZWZfcHV0KGtleV9yZWYpOworCWtleV9yZWYgPSBFUlJfUFRSKHJldCk7CiAJZ290byBlcnJvcjsKIAogfSAvKiBlbmQgbG9va3VwX3VzZXJfa2V5KCkgKi8KQEAgLTY5NCw5ICs3MzIsOSBAQAogCXJldCA9IGtleXJpbmctPnNlcmlhbDsKIAlrZXlfcHV0KGtleXJpbmcpOwogCi0gZXJyb3IyOgorZXJyb3IyOgogCXVwKCZrZXlfc2Vzc2lvbl9zZW0pOwotIGVycm9yOgorZXJyb3I6CiAJcmV0dXJuIHJldDsKIAogfSAvKiBlbmQgam9pbl9zZXNzaW9uX2tleXJpbmcoKSAqLwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleS5jIGIvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleS5jCmluZGV4IDkwYzE1MDYuLjVjYzRiYmEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXkuYworKysgYi9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5LmMKQEAgLTcsNiArNyw4IEBACiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2tleXMtcmVxdWVzdC1rZXkudHh0CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMTI5LDcgKzEzMSw3IEBACiAKIAkvKiBjcmVhdGUgYSBrZXkgYW5kIGFkZCBpdCB0byB0aGUgcXVldWUgKi8KIAlrZXkgPSBrZXlfYWxsb2ModHlwZSwgZGVzY3JpcHRpb24sCi0JCQljdXJyZW50LT5mc3VpZCwgY3VycmVudC0+ZnNnaWQsIEtFWV9VU1JfQUxMLCAwKTsKKwkJCWN1cnJlbnQtPmZzdWlkLCBjdXJyZW50LT5mc2dpZCwgS0VZX1BPU19BTEwsIDApOwogCWlmIChJU19FUlIoa2V5KSkKIAkJZ290byBhbGxvY19mYWlsZWQ7CiAKQEAgLTM2NSwxNCArMzY3LDI0IEBACiB7CiAJc3RydWN0IGtleV91c2VyICp1c2VyOwogCXN0cnVjdCBrZXkgKmtleTsKKwlrZXlfcmVmX3Qga2V5X3JlZjsKIAogCWtlbnRlcigiJXMsJXMsJXMsJXAiLAogCSAgICAgICB0eXBlLT5uYW1lLCBkZXNjcmlwdGlvbiwgY2FsbG91dF9pbmZvLCBkZXN0X2tleXJpbmcpOwogCiAJLyogc2VhcmNoIGFsbCB0aGUgcHJvY2VzcyBrZXlyaW5ncyBmb3IgYSBrZXkgKi8KLQlrZXkgPSBzZWFyY2hfcHJvY2Vzc19rZXlyaW5ncyh0eXBlLCBkZXNjcmlwdGlvbiwgdHlwZS0+bWF0Y2gsIGN1cnJlbnQpOworCWtleV9yZWYgPSBzZWFyY2hfcHJvY2Vzc19rZXlyaW5ncyh0eXBlLCBkZXNjcmlwdGlvbiwgdHlwZS0+bWF0Y2gsCisJCQkJCSAgY3VycmVudCk7CiAKLQlpZiAoUFRSX0VSUihrZXkpID09IC1FQUdBSU4pIHsKKwlrZGVidWcoInNlYXJjaCAxOiAlcCIsIGtleV9yZWYpOworCisJaWYgKCFJU19FUlIoa2V5X3JlZikpIHsKKwkJa2V5ID0ga2V5X3JlZl90b19wdHIoa2V5X3JlZik7CisJfQorCWVsc2UgaWYgKFBUUl9FUlIoa2V5X3JlZikgIT0gLUVBR0FJTikgeworCQlrZXkgPSBFUlJfUFRSKFBUUl9FUlIoa2V5X3JlZikpOworCX0KKwllbHNlICB7CiAJCS8qIHRoZSBzZWFyY2ggZmFpbGVkLCBidXQgdGhlIGtleXJpbmdzIHdlcmUgc2VhcmNoYWJsZSwgc28gd2UKIAkJICogc2hvdWxkIGNvbnN1bHQgdXNlcnNwYWNlIGlmIHdlIGNhbiAqLwogCQlrZXkgPSBFUlJfUFRSKC1FTk9LRVkpOwpAQCAtMzg0LDcgKzM5Niw3IEBACiAJCWlmICghdXNlcikKIAkJCWdvdG8gbm9tZW07CiAKLQkJZG8geworCQlmb3IgKDs7KSB7CiAJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQkJZ290byBpbnRlcnJ1cHRlZDsKIApAQCAtMzk3LDEwICs0MDksMjIgQEAKIAogCQkJLyogc29tZW9uZSBlbHNlIG1hZGUgdGhlIGtleSB3ZSB3YW50LCBzbyB3ZSBuZWVkIHRvCiAJCQkgKiBzZWFyY2ggYWdhaW4gYXMgaXQgbWlnaHQgbm93IGJlIGF2YWlsYWJsZSB0byB1cyAqLwotCQkJa2V5ID0gc2VhcmNoX3Byb2Nlc3Nfa2V5cmluZ3ModHlwZSwgZGVzY3JpcHRpb24sCi0JCQkJCQkgICAgICB0eXBlLT5tYXRjaCwgY3VycmVudCk7CisJCQlrZXlfcmVmID0gc2VhcmNoX3Byb2Nlc3Nfa2V5cmluZ3ModHlwZSwgZGVzY3JpcHRpb24sCisJCQkJCQkJICB0eXBlLT5tYXRjaCwKKwkJCQkJCQkgIGN1cnJlbnQpOwogCi0JCX0gd2hpbGUgKFBUUl9FUlIoa2V5KSA9PSAtRUFHQUlOKTsKKwkJCWtkZWJ1Zygic2VhcmNoIDI6ICVwIiwga2V5X3JlZik7CisKKwkJCWlmICghSVNfRVJSKGtleV9yZWYpKSB7CisJCQkJa2V5ID0ga2V5X3JlZl90b19wdHIoa2V5X3JlZik7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmIChQVFJfRVJSKGtleV9yZWYpICE9IC1FQUdBSU4pIHsKKwkJCQlrZXkgPSBFUlJfUFRSKFBUUl9FUlIoa2V5X3JlZikpOworCQkJCWJyZWFrOworCQkJfQorCQl9CiAKIAkJa2V5X3VzZXJfcHV0KHVzZXIpOwogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5X2F1dGguYyBiL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXlfYXV0aC5jCmluZGV4IGYyMjI2NDYuLmE4ZTQwNjkgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXlfYXV0aC5jCisrKyBiL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXlfYXV0aC5jCkBAIC03LDYgKzcsOCBAQAogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9rZXlzLXJlcXVlc3Qta2V5LnR4dAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTk2LDYgKzk4LDcgQEAKIAlrZW50ZXIoInslZH0iLCBrZXktPnNlcmlhbCk7CiAKIAlrZXlfcHV0KHJrYS0+dGFyZ2V0X2tleSk7CisJa2ZyZWUocmthKTsKIAogfSAvKiBlbmQgcmVxdWVzdF9rZXlfYXV0aF9kZXN0cm95KCkgKi8KIApAQCAtMTI2LDcgKzEyOSw3IEBACiAKIAlya2FrZXkgPSBrZXlfYWxsb2MoJmtleV90eXBlX3JlcXVlc3Rfa2V5X2F1dGgsIGRlc2MsCiAJCQkgICBjdXJyZW50LT5mc3VpZCwgY3VycmVudC0+ZnNnaWQsCi0JCQkgICBLRVlfVVNSX1ZJRVcsIDEpOworCQkJICAgS0VZX1BPU19WSUVXIHwgS0VZX1VTUl9WSUVXLCAxKTsKIAlpZiAoSVNfRVJSKHJrYWtleSkpIHsKIAkJa2V5X3B1dChrZXlyaW5nKTsKIAkJa2xlYXZlKCI9ICVsZCIsIFBUUl9FUlIocmtha2V5KSk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWNsdmwuYyBiL3NlY3VyaXR5L3NlY2x2bC5jCmluZGV4IGRjNGUxN2IuLjFjYWFjMDEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlY2x2bC5jCisrKyBiL3NlY3VyaXR5L3NlY2x2bC5jCkBAIC0yNTIsMTAgKzI1Miw5IEBACiAJfQogCiAJaWYgKGNvdW50IDwgMCB8fCBjb3VudCA+PSBQQUdFX1NJWkUpCi0JCXJldHVybiAtRU5PTUVNOwotCWlmICgqcHBvcyAhPSAwKSB7CiAJCXJldHVybiAtRUlOVkFMOwotCX0KKwlpZiAoKnBwb3MgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAJcGFnZSA9IChjaGFyICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghcGFnZSkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yNjUsOSArMjY0LDggQEAKIAkKIAlsZW4gPSBzdHJsZW4ocGFnZSk7CiAJLyogYGBlY2hvICJzZWNyZXQiID4gc2VjbHZsL3Bhc3N3ZCcnIGluY2x1ZGVzIGEgbmV3bGluZSAqLwotCWlmIChwYWdlW2xlbiAtIDFdID09ICdcbicpIHsKKwlpZiAocGFnZVtsZW4gLSAxXSA9PSAnXG4nKQogCQlsZW4tLTsKLQl9CiAJLyogSGFzaCB0aGUgcGFzc3dvcmQsIHRoZW4gY29tcGFyZSB0aGUgaGFzaGVkIHZhbHVlcyAqLwogCWlmICgocmMgPSBwbGFpbnRleHRfdG9fc2hhMSh0bXAsIHBhZ2UsIGxlbikpKSB7CiAJCXNlY2x2bF9wcmludGsoMCwgS0VSTl9FUlIsICJFcnJvciBoYXNoaW5nIHBhc3N3b3JkOiByYyA9ICIKQEAgLTI3NSw5ICsyNzMsOCBAQAogCQlyZXR1cm4gcmM7CiAJfQogCWZvciAoaSA9IDA7IGkgPCBTSEExX0RJR0VTVF9TSVpFOyBpKyspIHsKLQkJaWYgKGhhc2hlZFBhc3N3b3JkW2ldICE9IHRtcFtpXSkgeworCQlpZiAoaGFzaGVkUGFzc3dvcmRbaV0gIT0gdG1wW2ldKQogCQkJcmV0dXJuIC1FUEVSTTsKLQkJfQogCX0KIAlzZWNsdmxfcHJpbnRrKDAsIEtFUk5fSU5GTywKIAkJICAgICAgIlBhc3N3b3JkIGFjY2VwdGVkOyBzZWNsdmwgcmVkdWNlZCB0byAwLlxuIik7CkBAIC00ODIsOSArNDc5LDggQEAKICAqLwogc3RhdGljIGludCBzZWNsdmxfdW1vdW50KHN0cnVjdCB2ZnNtb3VudCAqbW50LCBpbnQgZmxhZ3MpCiB7Ci0JaWYgKGN1cnJlbnQtPnBpZCA9PSAxKSB7CisJaWYgKGN1cnJlbnQtPnBpZCA9PSAxKQogCQlyZXR1cm4gMDsKLQl9CiAJaWYgKHNlY2x2bCA9PSAyKSB7CiAJCXNlY2x2bF9wcmludGsoMSwgS0VSTl9XQVJOSU5HLCAiQXR0ZW1wdCB0byB1bm1vdW50IGluIHNlY3VyZSAiCiAJCQkgICAgICAibGV2ZWwgJWRcbiIsIHNlY2x2bCk7CkBAIC02MzgsOSArNjM0LDggQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzZWNsdmxfZXhpdCh2b2lkKQogewogCXNlY3VyaXR5ZnNfcmVtb3ZlKHNlY2x2bF9pbm8pOwotCWlmICgqcGFzc3dkIHx8ICpzaGExX3Bhc3N3ZCkgeworCWlmICgqcGFzc3dkIHx8ICpzaGExX3Bhc3N3ZCkKIAkJc2VjdXJpdHlmc19yZW1vdmUocGFzc3dkX2lubyk7Ci0JfQogCXNlY3VyaXR5ZnNfcmVtb3ZlKGRpcl9pbm8pOwogCWlmIChzZWNvbmRhcnkgPT0gMSkgewogCQltb2RfdW5yZWdfc2VjdXJpdHkoTVlfTkFNRSwgJnNlY2x2bF9vcHMpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IDZlNDkzN2YuLmIxM2JlMTUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTYzMCw2ICs2MzAsMTYgQEAKIAlyZXR1cm4gU0VDQ0xBU1NfRklMRTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgZGVmYXVsdF9wcm90b2NvbF9zdHJlYW0oaW50IHByb3RvY29sKQoreworCXJldHVybiAocHJvdG9jb2wgPT0gSVBQUk9UT19JUCB8fCBwcm90b2NvbCA9PSBJUFBST1RPX1RDUCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRlZmF1bHRfcHJvdG9jb2xfZGdyYW0oaW50IHByb3RvY29sKQoreworCXJldHVybiAocHJvdG9jb2wgPT0gSVBQUk9UT19JUCB8fCBwcm90b2NvbCA9PSBJUFBST1RPX1VEUCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdTE2IHNvY2tldF90eXBlX3RvX3NlY3VyaXR5X2NsYXNzKGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wpCiB7CiAJc3dpdGNoIChmYW1pbHkpIHsKQEAgLTY0NiwxMCArNjU2LDE2IEBACiAJY2FzZSBQRl9JTkVUNjoKIAkJc3dpdGNoICh0eXBlKSB7CiAJCWNhc2UgU09DS19TVFJFQU06Ci0JCQlyZXR1cm4gU0VDQ0xBU1NfVENQX1NPQ0tFVDsKKwkJCWlmIChkZWZhdWx0X3Byb3RvY29sX3N0cmVhbShwcm90b2NvbCkpCisJCQkJcmV0dXJuIFNFQ0NMQVNTX1RDUF9TT0NLRVQ7CisJCQllbHNlCisJCQkJcmV0dXJuIFNFQ0NMQVNTX1JBV0lQX1NPQ0tFVDsKIAkJY2FzZSBTT0NLX0RHUkFNOgotCQkJcmV0dXJuIFNFQ0NMQVNTX1VEUF9TT0NLRVQ7Ci0JCWNhc2UgU09DS19SQVc6CisJCQlpZiAoZGVmYXVsdF9wcm90b2NvbF9kZ3JhbShwcm90b2NvbCkpCisJCQkJcmV0dXJuIFNFQ0NMQVNTX1VEUF9TT0NLRVQ7CisJCQllbHNlCisJCQkJcmV0dXJuIFNFQ0NMQVNTX1JBV0lQX1NPQ0tFVDsKKwkJZGVmYXVsdDoKIAkJCXJldHVybiBTRUNDTEFTU19SQVdJUF9TT0NLRVQ7CiAJCX0KIAkJYnJlYWs7CkBAIC0yOTcwLDYgKzI5ODYsOCBAQAogCiAJLyoKIAkgKiBJZiBQRl9JTkVUIG9yIFBGX0lORVQ2LCBjaGVjayBuYW1lX2JpbmQgcGVybWlzc2lvbiBmb3IgdGhlIHBvcnQuCisJICogTXVsdGlwbGUgYWRkcmVzcyBiaW5kaW5nIGZvciBTQ1RQIGlzIG5vdCBzdXBwb3J0ZWQgeWV0OiB3ZSBqdXN0CisJICogY2hlY2sgdGhlIGZpcnN0IGFkZHJlc3Mgbm93LgogCSAqLwogCWZhbWlseSA9IHNvY2stPnNrLT5za19mYW1pbHk7CiAJaWYgKGZhbWlseSA9PSBQRl9JTkVUIHx8IGZhbWlseSA9PSBQRl9JTkVUNikgewpAQCAtMzAxNCwxMiArMzAzMiwxMiBAQAogCQkJCWdvdG8gb3V0OwogCQl9CiAJCQotCQlzd2l0Y2goc2stPnNrX3Byb3RvY29sKSB7Ci0JCWNhc2UgSVBQUk9UT19UQ1A6CisJCXN3aXRjaChpc2VjLT5zY2xhc3MpIHsKKwkJY2FzZSBTRUNDTEFTU19UQ1BfU09DS0VUOgogCQkJbm9kZV9wZXJtID0gVENQX1NPQ0tFVF9fTk9ERV9CSU5EOwogCQkJYnJlYWs7CiAJCQkKLQkJY2FzZSBJUFBST1RPX1VEUDoKKwkJY2FzZSBTRUNDTEFTU19VRFBfU09DS0VUOgogCQkJbm9kZV9wZXJtID0gVURQX1NPQ0tFVF9fTk9ERV9CSU5EOwogCQkJYnJlYWs7CiAJCQkKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCmluZGV4IDhlYjE0MGQuLmE0NWNjOTcgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYwpAQCAtODc5LDcgKzg3OSw3IEBACiAJaWYgKHNzY2FuZihwYWdlLCAiJWQiLCAmbmV3X3ZhbHVlKSAhPSAxKQogCQlnb3RvIG91dDsKIAotCWlmIChuZXdfdmFsdWUpIHsKKwlpZiAobmV3X3ZhbHVlICYmIGJvb2xfcGVuZGluZ192YWx1ZXMpIHsKIAkJc2VjdXJpdHlfc2V0X2Jvb2xzKGJvb2xfbnVtLCBib29sX3BlbmRpbmdfdmFsdWVzKTsKIAl9CiAKQEAgLTk1Miw2ICs5NTIsNyBAQAogCiAJLyogcmVtb3ZlIGFueSBleGlzdGluZyBmaWxlcyAqLwogCWtmcmVlKGJvb2xfcGVuZGluZ192YWx1ZXMpOworCWJvb2xfcGVuZGluZ192YWx1ZXMgPSBOVUxMOwogCiAJc2VsX3JlbW92ZV9ib29scyhkaXIpOwogCkBAIC0xMDAyLDYgKzEwMDMsNyBAQAogCX0KIAlyZXR1cm4gcmV0OwogZXJyOgorCWtmcmVlKHZhbHVlcyk7CiAJZF9nZW5vY2lkZShkaXIpOwogCXJldCA9IC1FTk9NRU07CiAJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMKaW5kZXggMGE3NTgzMi4uOGU2MjYyZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYwpAQCAtNjUwLDggKzY1MCwxMCBAQAogCX0KIAlpZiAobHJ0KSBrZnJlZShscnQpOwogCi0JZm9yIChpID0gMDsgaSA8IHAtPnBfdHlwZXMubnByaW07IGkrKykKLQkJZWJpdG1hcF9kZXN0cm95KCZwLT50eXBlX2F0dHJfbWFwW2ldKTsKKwlpZiAocC0+dHlwZV9hdHRyX21hcCkgeworCQlmb3IgKGkgPSAwOyBpIDwgcC0+cF90eXBlcy5ucHJpbTsgaSsrKQorCQkJZWJpdG1hcF9kZXN0cm95KCZwLT50eXBlX2F0dHJfbWFwW2ldKTsKKwl9CiAJa2ZyZWUocC0+dHlwZV9hdHRyX21hcCk7CiAKIAlyZXR1cm47CmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vYWFjaS5jIGIvc291bmQvYXJtL2FhY2kuYwppbmRleCAzNDE5NWI3NC4uYjJkNWRiMiAxMDA2NDQKLS0tIGEvc291bmQvYXJtL2FhY2kuYworKysgYi9zb3VuZC9hcm0vYWFjaS5jCkBAIC02NTAsNyArNjUwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhYWNpX3N1c3BlbmQoc3RydWN0IGFtYmFfZGV2aWNlICpkZXYsIHUzMiBzdGF0ZSkKK3N0YXRpYyBpbnQgYWFjaV9zdXNwZW5kKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc25kX2NhcmRfdCAqY2FyZCA9IGFtYmFfZ2V0X2RydmRhdGEoZGV2KTsKIAlyZXR1cm4gY2FyZCA/IGFhY2lfZG9fc3VzcGVuZChjYXJkKSA6IDA7CmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYyBiL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCmluZGV4IDI5NDUwYmUuLjM4YjIwZWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCisrKyBiL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAogI2lmZGVmIENPTkZJR19QTQogCi1zdGF0aWMgaW50IHB4YTJ4eF9hYzk3X2RvX3N1c3BlbmQoc25kX2NhcmRfdCAqY2FyZCwgdW5zaWduZWQgaW50IHN0YXRlKQorc3RhdGljIGludCBweGEyeHhfYWM5N19kb19zdXNwZW5kKHNuZF9jYXJkX3QgKmNhcmQsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlpZiAoY2FyZC0+cG93ZXJfc3RhdGUgIT0gU05EUlZfQ1RMX1BPV0VSX0QzY29sZCkgewogCQlweGEyeHhfYXVkaW9fb3BzX3QgKnBsYXRmb3JtX29wcyA9IGNhcmQtPmRldi0+cGxhdGZvcm1fZGF0YTsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvaW5pdC5jIGIvc291bmQvY29yZS9pbml0LmMKaW5kZXggYTU3MDIwMS4uYzcyYTc5MSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9pbml0LmMKKysrIGIvc291bmQvY29yZS9pbml0LmMKQEAgLTgyOCw3ICs4MjgsOCBAQAogCWNhcmQgPSBnZXRfc25kX2dlbmVyaWNfY2FyZChkZXYpOwogCWlmIChjYXJkLT5wb3dlcl9zdGF0ZSA9PSBTTkRSVl9DVExfUE9XRVJfRDNob3QpCiAJCXJldHVybiAwOwotCWNhcmQtPnBtX3N1c3BlbmQoY2FyZCwgUE1TR19TVVNQRU5EKTsKKwlpZiAoY2FyZC0+cG1fc3VzcGVuZCkKKwkJY2FyZC0+cG1fc3VzcGVuZChjYXJkLCBQTVNHX1NVU1BFTkQpOwogCXNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QzaG90KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTg0Myw3ICs4NDQsOCBAQAogCWNhcmQgPSBnZXRfc25kX2dlbmVyaWNfY2FyZChkZXYpOwogCWlmIChjYXJkLT5wb3dlcl9zdGF0ZSA9PSBTTkRSVl9DVExfUE9XRVJfRDApCiAJCXJldHVybiAwOwotCWNhcmQtPnBtX3Jlc3VtZShjYXJkKTsKKwlpZiAoY2FyZC0+cG1fc3VzcGVuZCkKKwkJY2FyZC0+cG1fcmVzdW1lKGNhcmQpOwogCXNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvbWVtYWxsb2MuYyBiL3NvdW5kL2NvcmUvbWVtYWxsb2MuYwppbmRleCA5MTEyNGRkLi5lNzJjZWM3IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL21lbWFsbG9jLmMKKysrIGIvc291bmQvY29yZS9tZW1hbGxvYy5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIAogc3RhdGljIHZvaWQgKnNuZF9kbWFfaGFja19hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCQkJCQkgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwKLQkJCQkJIHVuc2lnbmVkIGludCBfX25vY2FzdCBmbGFncykKKwkJCQkJIGdmcF90IGZsYWdzKQogewogCXZvaWQgKnJldDsKIAl1NjQgZG1hX21hc2ssIGNvaGVyZW50X2RtYV9tYXNrOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9tZW1vcnkuYyBiL3NvdW5kL2NvcmUvbWVtb3J5LmMKaW5kZXggOGZhODg4Zi4uN2Q4ZTJlZSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9tZW1vcnkuYworKysgYi9zb3VuZC9jb3JlL21lbW9yeS5jCkBAIC04OSw3ICs4OSw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCAqX19zbmRfa21hbGxvYyhzaXplX3Qgc2l6ZSwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGZsYWdzLCB2b2lkICpjYWxsZXIpCitzdGF0aWMgdm9pZCAqX19zbmRfa21hbGxvYyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIHZvaWQgKmNhbGxlcikKIHsKIAl1bnNpZ25lZCBsb25nIGNwdV9mbGFnczsKIAlzdHJ1Y3Qgc25kX2FsbG9jX3RyYWNrICp0OwpAQCAtMTExLDEyICsxMTEsMTIgQEAKIH0KIAogI2RlZmluZSBfc25kX2ttYWxsb2Moc2l6ZSwgZmxhZ3MpIF9fc25kX2ttYWxsb2MoKHNpemUpLCAoZmxhZ3MpLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwotdm9pZCAqc25kX2hpZGRlbl9rbWFsbG9jKHNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZ3MpCit2b2lkICpzbmRfaGlkZGVuX2ttYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKQogewogCXJldHVybiBfc25kX2ttYWxsb2Moc2l6ZSwgZmxhZ3MpOwogfQogCi12b2lkICpzbmRfaGlkZGVuX2t6YWxsb2Moc2l6ZV90IHNpemUsIHVuc2lnbmVkIGludCBfX25vY2FzdCBmbGFncykKK3ZvaWQgKnNuZF9oaWRkZW5fa3phbGxvYyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpCiB7CiAJdm9pZCAqcmV0ID0gX3NuZF9rbWFsbG9jKHNpemUsIGZsYWdzKTsKIAlpZiAocmV0KQpAQCAtMTI1LDcgKzEyNSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKHNuZF9oaWRkZW5fa3phbGxvYyk7CiAKLXZvaWQgKnNuZF9oaWRkZW5fa2NhbGxvYyhzaXplX3Qgbiwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGludCBfX25vY2FzdCBmbGFncykKK3ZvaWQgKnNuZF9oaWRkZW5fa2NhbGxvYyhzaXplX3Qgbiwgc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKQogewogCXZvaWQgKnJldCA9IE5VTEw7CiAJaWYgKG4gIT0gMCAmJiBzaXplID4gSU5UX01BWCAvIG4pCkBAIC0xOTAsNyArMTkwLDcgQEAKIAlzbmRfd3JhcHBlcl92ZnJlZShvYmopOwogfQogCi1jaGFyICpzbmRfaGlkZGVuX2tzdHJkdXAoY29uc3QgY2hhciAqcywgdW5zaWduZWQgaW50IF9fbm9jYXN0IGZsYWdzKQorY2hhciAqc25kX2hpZGRlbl9rc3RyZHVwKGNvbnN0IGNoYXIgKnMsIGdmcF90IGZsYWdzKQogewogCWludCBsZW47CiAJY2hhciAqYnVmOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvaW5zdHIvYWluc3RyX2l3LmMgYi9zb3VuZC9jb3JlL3NlcS9pbnN0ci9haW5zdHJfaXcuYwppbmRleCBiM2NlZTA5Li42N2MyNGM4IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NlcS9pbnN0ci9haW5zdHJfaXcuYworKysgYi9zb3VuZC9jb3JlL3NlcS9pbnN0ci9haW5zdHJfaXcuYwpAQCAtNTgsNyArNTgsNyBAQAogCQkJCQkgICAgICAgaXdmZmZmX3hlbnZfdCAqZXgsCiAJCQkJCSAgICAgICBjaGFyIF9fdXNlciAqKmRhdGEsCiAJCQkJCSAgICAgICBsb25nICpsZW4sCi0JCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZ2ZwX21hc2spCisJCQkJCSAgICAgICBnZnBfdCBnZnBfbWFzaykKIHsKIAlfX3UzMiBzdHlwZTsKIAlpd2ZmZmZfZW52X3JlY29yZF90ICpycCwgKnJwX2xhc3Q7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3dyYXBwZXJzLmMgYi9zb3VuZC9jb3JlL3dyYXBwZXJzLmMKaW5kZXggNTA4ZTZkNi4uMjk2YjcxNiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS93cmFwcGVycy5jCisrKyBiL3NvdW5kL2NvcmUvd3JhcHBlcnMuYwpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHX01FTU9SWQotdm9pZCAqc25kX3dyYXBwZXJfa21hbGxvYyhzaXplX3Qgc2l6ZSwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGZsYWdzKQordm9pZCAqc25kX3dyYXBwZXJfa21hbGxvYyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpCiB7CiAJcmV0dXJuIGttYWxsb2Moc2l6ZSwgZmxhZ3MpOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL29wbDNzYTIuYyBiL3NvdW5kL2lzYS9vcGwzc2EyLmMKaW5kZXggZTJkMmJhYi4uNGJhMjY4ZiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL29wbDNzYTIuYworKysgYi9zb3VuZC9pc2Evb3BsM3NhMi5jCkBAIC05MTQsNiArOTE0LDcgQEAKICNlbmRpZgogI2lmZGVmIENPTkZJR19QTlAKIAkJcG5wX3VucmVnaXN0ZXJfY2FyZF9kcml2ZXIoJm9wbDNzYTJfcG5wY19kcml2ZXIpOworCQlwbnBfdW5yZWdpc3Rlcl9kcml2ZXIoJm9wbDNzYTJfcG5wX2RyaXZlcik7CiAjZW5kaWYKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtOTI3LDYgKzkyOCw3IEBACiAjaWZkZWYgQ09ORklHX1BOUAogCS8qIFBuUCBjYXJkcyBmaXJzdCAqLwogCXBucF91bnJlZ2lzdGVyX2NhcmRfZHJpdmVyKCZvcGwzc2EyX3BucGNfZHJpdmVyKTsKKwlwbnBfdW5yZWdpc3Rlcl9kcml2ZXIoJm9wbDNzYTJfcG5wX2RyaXZlcik7CiAjZW5kaWYKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IFNORFJWX0NBUkRTOyBpZHgrKykKIAkJc25kX2NhcmRfZnJlZShzbmRfb3BsM3NhMl9sZWdhY3lbaWR4XSk7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvYXUxMDAwLmMgYi9zb3VuZC9vc3MvYXUxMDAwLmMKaW5kZXggNDQ5MTczMy4uMmMyYWUyZSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2F1MTAwMC5jCisrKyBiL3NvdW5kL29zcy9hdTEwMDAuYwpAQCAtMTI5NSw3ICsxMjk1LDcgQEAKIAl1bnNpZ25lZCBsb25nICAgc2l6ZTsKIAlpbnQgcmV0ID0gMDsKIAotCWRiZyhfX0ZVTkNUSU9OX18pOworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOwogICAgIAogCWxvY2tfa2VybmVsKCk7CiAJZG93bigmcy0+c2VtKTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9pdGU4MTcyLmMgYi9zb3VuZC9vc3MvaXRlODE3Mi5jCmluZGV4IDU4Zjg3OWYuLjI2ZTU5NDQgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9pdGU4MTcyLmMKKysrIGIvc291bmQvb3NzL2l0ZTgxNzIuYwpAQCAtMTg1OSw3ICsxODU5LDcgQEAKIAlzdHJ1Y3QgaXQ4MTcyX3N0YXRlICpzID0gKHN0cnVjdCBpdDgxNzJfc3RhdGUgKilmaWxlLT5wcml2YXRlX2RhdGE7CiAKICNpZmRlZiBJVDgxNzJfVkVSQk9TRV9ERUJVRwotCWRiZyhfX0ZVTkNUSU9OX18pOworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOwogI2VuZGlmCiAJbG9ja19rZXJuZWwoKTsKIAlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X2J1cy5jIGIvc291bmQvcGNpL2FjOTcvYWM5N19idXMuYwppbmRleCAyMjdmOGI5Li5iZWNiYzQyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X2J1cy5jCisrKyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfYnVzLmMKQEAgLTE3LDI1ICsxNywyMSBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogCiAvKgotICogQ29kZWMgZmFtaWxpZXMgaGF2ZSBuYW1lcyBzZXBlcmF0ZWQgYnkgY29tbWFzLCBzbyB3ZSBzZWFyY2ggZm9yIGFuCi0gKiBpbmRpdmlkdWFsIGNvZGVjIG5hbWUgd2l0aGluIHRoZSBmYW1pbHkgc3RyaW5nLiAKKyAqIExldCBkcml2ZXJzIGRlY2lkZSB3aGV0aGVyIHRoZXkgd2FudCB0byBzdXBwb3J0IGdpdmVuIGNvZGVjIGZyb20gdGhlaXIKKyAqIHByb2JlIG1ldGhvZC4gIERyaXZlcnMgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIHRoZSBhYzk3X3Qgc3RydWN0dXJlIGFuZCBtYXkKKyAqIGRlY2lkZSBiYXNlZCBvbiB0aGUgaWQgZmllbGQgYW1vbmdzdCBvdGhlciB0aGluZ3MuCiAgKi8KIHN0YXRpYyBpbnQgYWM5N19idXNfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQogewotCXJldHVybiAoc3Ryc3RyKGRldi0+YnVzX2lkLCBkcnYtPm5hbWUpICE9IE5VTEwpOworCXJldHVybiAxOwogfQogCiBzdGF0aWMgaW50IGFjOTdfYnVzX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoZGV2LT5kcml2ZXIgJiYgZGV2LT5kcml2ZXItPnN1c3BlbmQpIHsKLQkJcmV0ID0gZGV2LT5kcml2ZXItPnN1c3BlbmQoZGV2LCBzdGF0ZSwgU1VTUEVORF9ESVNBQkxFKTsKLQkJaWYgKHJldCA9PSAwKQotCQkJcmV0ID0gZGV2LT5kcml2ZXItPnN1c3BlbmQoZGV2LCBzdGF0ZSwgU1VTUEVORF9TQVZFX1NUQVRFKTsKLQkJaWYgKHJldCA9PSAwKQotCQkJcmV0ID0gZGV2LT5kcml2ZXItPnN1c3BlbmQoZGV2LCBzdGF0ZSwgU1VTUEVORF9QT1dFUl9ET1dOKTsKLQl9CisJaWYgKGRldi0+ZHJpdmVyICYmIGRldi0+ZHJpdmVyLT5zdXNwZW5kKQorCQlyZXQgPSBkZXYtPmRyaXZlci0+c3VzcGVuZChkZXYsIHN0YXRlLCBTVVNQRU5EX1BPV0VSX0RPV04pOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTQzLDEzICszOSw4IEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoZGV2LT5kcml2ZXIgJiYgZGV2LT5kcml2ZXItPnJlc3VtZSkgeworCWlmIChkZXYtPmRyaXZlciAmJiBkZXYtPmRyaXZlci0+cmVzdW1lKQogCQlyZXQgPSBkZXYtPmRyaXZlci0+cmVzdW1lKGRldiwgUkVTVU1FX1BPV0VSX09OKTsKLQkJaWYgKHJldCA9PSAwKQotCQkJcmV0ID0gZGV2LT5kcml2ZXItPnJlc3VtZShkZXYsIFJFU1VNRV9SRVNUT1JFX1NUQVRFKTsKLQkJaWYgKHJldCA9PSAwKQotCQkJcmV0ID0gZGV2LT5kcml2ZXItPnJlc3VtZShkZXYsIFJFU1VNRV9FTkFCTEUpOwotCX0KIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMKaW5kZXggZTY0Y2IwNy4uNDFmYzI5MCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCisrKyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYwpAQCAtMTU1Nyw3ICsxNTU3LDcgQEAKIAogCS8qIGJ1aWxkIG1vZGVtIHN3aXRjaGVzICovCiAJZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKHNuZF9hYzk3X2NvbnRyb2xzX21vZGVtX3N3aXRjaGVzKTsgaWR4KyspCi0JCWlmICgoZXJyID0gc25kX2N0bF9hZGQoY2FyZCwgc25kX2FjOTdfY25ldygmc25kX2FjOTdfY29udHJvbHNfbW9kZW1fc3dpdGNoZXNbaWR4XSwgYWM5NykpKSA8IDApCisJCWlmICgoZXJyID0gc25kX2N0bF9hZGQoY2FyZCwgc25kX2N0bF9uZXcxKCZzbmRfYWM5N19jb250cm9sc19tb2RlbV9zd2l0Y2hlc1tpZHhdLCBhYzk3KSkpIDwgMCkKIAkJCXJldHVybiBlcnI7CiAKIAkvKiBidWlsZCBjaGlwIHNwZWNpZmljIGNvbnRyb2xzICovCkBAIC0xODI4LDcgKzE4MjgsNiBAQAogCiAJYWM5Ny0+ZGV2LmJ1cyA9ICZhYzk3X2J1c190eXBlOwogCWFjOTctPmRldi5wYXJlbnQgPSBhYzk3LT5idXMtPmNhcmQtPmRldjsKLQlhYzk3LT5kZXYucGxhdGZvcm1fZGF0YSA9IGFjOTc7CiAJYWM5Ny0+ZGV2LnJlbGVhc2UgPSBhYzk3X2RldmljZV9yZWxlYXNlOwogCXNucHJpbnRmKGFjOTctPmRldi5idXNfaWQsIEJVU19JRF9TSVpFLCAiY2FyZCVkLSVkIiwgYWM5Ny0+YnVzLT5jYXJkLT5udW1iZXIsIGFjOTctPm51bSk7CiAJaWYgKChlcnIgPSBkZXZpY2VfcmVnaXN0ZXIoJmFjOTctPmRldikpIDwgMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FjOTcvYWM5N19wYXRjaC5jIGIvc291bmQvcGNpL2FjOTcvYWM5N19wYXRjaC5jCmluZGV4IDA0NWRkYzcuLjAyMzhjYzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guYworKysgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X3BhdGNoLmMKQEAgLTI3NTIsNyArMjc1MiwxMSBAQAogCiBzdGF0aWMgaW50IHBhdGNoX3NpMzAzNl9zcGVjaWZpYyhhYzk3X3QgKiBhYzk3KQogewotCXJldHVybiBwYXRjaF9idWlsZF9jb250cm9scyhhYzk3LCBzbmRfYWM5N19jb250cm9sc19zaTMwMzYsIEFSUkFZX1NJWkUoc25kX2FjOTdfY29udHJvbHNfc2kzMDM2KSk7CisJaW50IGlkeCwgZXJyOworCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShzbmRfYWM5N19jb250cm9sc19zaTMwMzYpOyBpZHgrKykKKwkJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChhYzk3LT5idXMtPmNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX2FjOTdfY29udHJvbHNfc2kzMDM2W2lkeF0sIGFjOTcpKSkgPCAwKQorCQkJcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBzbmRfYWM5N19idWlsZF9vcHMgcGF0Y2hfc2kzMDM2X29wcyA9IHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYyBiL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYwppbmRleCBkNjgzZjc3Li5mMzViNTU4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKKysrIGIvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCkBAIC0xOTkzLDggKzE5OTMsMTAgQEAKIAkJaWYgKChlcnIgPSBzbmRfYWM5N19taXhlcihjb2RlYy0+YWM5N19idXMsICZhYzk3LCAmY29kZWMtPmFjOTdbaV0pKSA8IDApIHsKIAkJCXNuZF9wcmludGsoImFsaSBtaXhlciAlZCBjcmVhdGluZyBlcnJvci5cbiIsIGkpOwogCQkJaWYoaSA9PSAwKQotCQlyZXR1cm4gZXJyOwotCX0KKwkJCQlyZXR1cm4gZXJyOworCQkJY29kZWMtPm51bV9vZl9jb2RlY3MgPSAxOworCQkJYnJlYWs7CisJCX0KIAl9CiAKIAlpZiAoY29kZWMtPnNwZGlmX3N1cHBvcnQpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYyBiL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYwppbmRleCA4YTU5NTk4Li5jMWEyMzlhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMKKysrIGIvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jCkBAIC00MDUsNyArNDA1LDcgQEAKIAogCXdoaWxlIChhdGlpeHBfcmVhZChjaGlwLCBQSFlTX09VVF9BRERSKSAmIEFUSV9SRUdfUEhZU19PVVRfQUREUl9FTikgewogCQlpZiAoISB0aW1lb3V0LS0pIHsKLQkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJhdGlpeHA6IGNvZGVjIGFjcXVpcmUgdGltZW91dFxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiYXRpaXhwLW1vZGVtOiBjb2RlYyBhY3F1aXJlIHRpbWVvdXRcbiIpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCQl1ZGVsYXkoMSk7CkBAIC00MzYsNyArNDM2LDcgQEAKIAl9IHdoaWxlICgtLXRpbWVvdXQpOwogCS8qIHRpbWUgb3V0IG1heSBoYXBwZW4gZHVyaW5nIHJlc2V0ICovCiAJaWYgKHJlZyA8IDB4N2MpCi0JCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJhdGlpeHA6IGNvZGVjIHJlYWQgdGltZW91dCAocmVnICV4KVxuIiwgcmVnKTsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgImF0aWl4cC1tb2RlbTogY29kZWMgcmVhZCB0aW1lb3V0IChyZWcgJXgpXG4iLCByZWcpOwogCXJldHVybiAweGZmZmY7CiB9CiAKQEAgLTQ5OCw3ICs0OTgsNyBAQAogCQlkb19kZWxheSgpOwogCQlhdGlpeHBfdXBkYXRlKGNoaXAsIENNRCwgQVRJX1JFR19DTURfQUNfUkVTRVQsIEFUSV9SRUdfQ01EX0FDX1JFU0VUKTsKIAkJaWYgKC0tdGltZW91dCkgewotCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiYXRpaXhwOiBjb2RlYyByZXNldCB0aW1lb3V0XG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgImF0aWl4cC1tb2RlbTogY29kZWMgcmVzZXQgdGltZW91dFxuIik7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTU1Miw3ICs1NTIsNyBAQAogCWF0aWl4cF93cml0ZShjaGlwLCBJRVIsIDApOyAvKiBkaXNhYmxlIGlycXMgKi8KIAogCWlmICgoY2hpcC0+Y29kZWNfbm90X3JlYWR5X2JpdHMgJiBBTExfQ09ERUNfTk9UX1JFQURZKSA9PSBBTExfQ09ERUNfTk9UX1JFQURZKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgImF0aWl4cDogbm8gY29kZWMgZGV0ZWN0ZWQhXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiYXRpaXhwLW1vZGVtOiBubyBjb2RlYyBkZXRlY3RlZCFcbiIpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KIAlyZXR1cm4gMDsKQEAgLTYzNSw3ICs2MzUsNyBAQAogewogCWlmICghIGRtYS0+c3Vic3RyZWFtIHx8ICEgZG1hLT5ydW5uaW5nKQogCQlyZXR1cm47Ci0Jc25kX3ByaW50ZGQoImF0aWl4cDogWFJVTiBkZXRlY3RlZCAoRE1BICVkKVxuIiwgZG1hLT5vcHMtPnR5cGUpOworCXNuZF9wcmludGRkKCJhdGlpeHAtbW9kZW06IFhSVU4gZGV0ZWN0ZWQgKERNQSAlZClcbiIsIGRtYS0+b3BzLT50eXBlKTsKIAlzbmRfcGNtX3N0b3AoZG1hLT5zdWJzdHJlYW0sIFNORFJWX1BDTV9TVEFURV9YUlVOKTsKIH0KIApAQCAtMTA4MSwxNCArMTA4MSwxNCBAQAogCQlhYzk3LnNjYXBzID0gQUM5N19TQ0FQX1NLSVBfQVVESU87CiAJCWlmICgoZXJyID0gc25kX2FjOTdfbWl4ZXIocGJ1cywgJmFjOTcsICZjaGlwLT5hYzk3W2ldKSkgPCAwKSB7CiAJCQljaGlwLT5hYzk3W2ldID0gTlVMTDsgLyogdG8gYmUgc3VyZSAqLwotCQkJc25kX3ByaW50ZGQoImF0aWl4cDogY29kZWMgJWQgbm90IGF2YWlsYWJsZSBmb3IgbW9kZW1cbiIsIGkpOworCQkJc25kX3ByaW50ZGQoImF0aWl4cC1tb2RlbTogY29kZWMgJWQgbm90IGF2YWlsYWJsZSBmb3IgbW9kZW1cbiIsIGkpOwogCQkJY29udGludWU7CiAJCX0KIAkJY29kZWNfY291bnQrKzsKIAl9CiAKIAlpZiAoISBjb2RlY19jb3VudCkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJhdGlpeHA6IG5vIGNvZGVjIGF2YWlsYWJsZVxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImF0aWl4cC1tb2RlbTogbm8gY29kZWMgYXZhaWxhYmxlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0xMTU5LDcgKzExNTksNyBAQAogewogCXNuZF9pbmZvX2VudHJ5X3QgKmVudHJ5OwogCi0JaWYgKCEgc25kX2NhcmRfcHJvY19uZXcoY2hpcC0+Y2FyZCwgImF0aWl4cCIsICZlbnRyeSkpCisJaWYgKCEgc25kX2NhcmRfcHJvY19uZXcoY2hpcC0+Y2FyZCwgImF0aWl4cC1tb2RlbSIsICZlbnRyeSkpCiAJCXNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgY2hpcCwgMTAyNCwgc25kX2F0aWl4cF9wcm9jX3JlYWQpOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfbWFpbi5jCmluZGV4IGU4N2U4NDIuLmU5Y2Q4ZTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfbWFpbi5jCkBAIC03NTYsOSArNzU2LDEyIEBACiAJIC5zYmxpdmU1MSA9IDF9ICwKIAkvKiBUZXN0ZWQgYnkgYWxzYSBidWd0cmFjayB1c2VyICJodXMiIGJ1ZyAjMTI5NyAxMnRoIEF1ZyAyMDA1ICovCiAJey52ZW5kb3IgPSAweDExMDIsIC5kZXZpY2UgPSAweDAwMDIsIC5zdWJzeXN0ZW0gPSAweDgwNjExMTAyLAotCSAuZHJpdmVyID0gIkVNVTEwSzEiLCAubmFtZSA9ICJTQkxpdmUhIFBsYXRpbnVtIDUuMSBbU0IwMDYwXSIsIAorCSAuZHJpdmVyID0gIkVNVTEwSzEiLCAubmFtZSA9ICJTQkxpdmUgNS4xIFtTQjAwNjBdIiwKIAkgLmlkID0gIkxpdmUiLAogCSAuZW11MTBrMV9jaGlwID0gMSwKKwkgLmFjOTdfY2hpcCA9IDIsIC8qIGFjOTcgaXMgb3B0aW9uYWw7IGJvdGggU0JMaXZlIDUuMSBhbmQgcGxhdGludW0KKwkJCSAgKiBzaGFyZSB0aGUgc2FtZSBJRHMhCisJCQkgICovCiAJIC5zYmxpdmU1MSA9IDF9ICwKIAl7LnZlbmRvciA9IDB4MTEwMiwgLmRldmljZSA9IDB4MDAwMiwgLnN1YnN5c3RlbSA9IDB4ODA1MTExMDIsCiAJIC5kcml2ZXIgPSAiRU1VMTBLMSIsIC5uYW1lID0gIlNCTGl2ZSEgVmFsdWUgW0NUNDg1MF0iLCAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdW1peGVyLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXVtaXhlci5jCmluZGV4IGQ3MWE3MmUuLjdjYzgzMWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdW1peGVyLmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11bWl4ZXIuYwpAQCAtODEwLDggKzgxMCwxNCBAQAogCQlhYzk3LnByaXZhdGVfZGF0YSA9IGVtdTsKIAkJYWM5Ny5wcml2YXRlX2ZyZWUgPSBzbmRfZW11MTBrMV9taXhlcl9mcmVlX2FjOTc7CiAJCWFjOTcuc2NhcHMgPSBBQzk3X1NDQVBfTk9fU1BESUY7Ci0JCWlmICgoZXJyID0gc25kX2FjOTdfbWl4ZXIocGJ1cywgJmFjOTcsICZlbXUtPmFjOTcpKSA8IDApCi0JCQlyZXR1cm4gZXJyOworCQlpZiAoKGVyciA9IHNuZF9hYzk3X21peGVyKHBidXMsICZhYzk3LCAmZW11LT5hYzk3KSkgPCAwKSB7CisJCQlpZiAoZW11LT5jYXJkX2NhcGFiaWxpdGllcy0+YWM5N19jaGlwID09IDEpCisJCQkJcmV0dXJuIGVycjsKKwkJCXNuZF9wcmludGQoS0VSTl9JTkZPICJlbXUxMGsxOiBBQzk3IGlzIG9wdGlvbmFsIG9uIHRoaXMgYm9hcmRcbiIpOworCQkJc25kX3ByaW50ZChLRVJOX0lORk8iICAgICAgICAgIFByb2NlZWRpbmcgd2l0aG91dCBhYzk3IG1peGVycy4uLlxuIik7CisJCQlzbmRfZGV2aWNlX2ZyZWUoZW11LT5jYXJkLCBwYnVzKTsKKwkJCWdvdG8gbm9fYWM5NzsgLyogRklYTUU6IGdldCByaWQgb2YgdWdseSBnb3Rvcy4uICovCisJCX0KIAkJaWYgKGVtdS0+YXVkaWd5KSB7CiAJCQkvKiBzZXQgbWFzdGVyIHZvbHVtZSB0byAwIGRCICovCiAJCQlzbmRfYWM5N193cml0ZShlbXUtPmFjOTcsIEFDOTdfTUFTVEVSLCAweDAwMDApOwpAQCAtODM2LDYgKzg0Miw3IEBACiAJCWZvciAoOyAqYzsgYysrKQogCQkJcmVtb3ZlX2N0bChjYXJkLCAqYyk7CiAJfSBlbHNlIHsKKwlub19hYzk3OgogCQlpZiAoZW11LT5jYXJkX2NhcGFiaWxpdGllcy0+ZWNhcmQpCiAJCQlzdHJjcHkoZW11LT5jYXJkLT5taXhlcm5hbWUsICJFTVUgQVBTIik7CiAJCWVsc2UgaWYgKGVtdS0+YXVkaWd5KQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfZ2VuZXJpYy5jIGIvc291bmQvcGNpL2hkYS9oZGFfZ2VuZXJpYy5jCmluZGV4IDViODI5YTEuLmQwZWI5ZjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2dlbmVyaWMuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9nZW5lcmljLmMKQEAgLTg4MSwxMCArODgxLDggQEAKIAlzdHJ1Y3QgaGRhX2dzcGVjICpzcGVjOwogCWludCBlcnI7CiAKLQlpZighY29kZWMtPmFmZykgewotCQlzbmRfcHJpbnRkZCgiaGRhX2dlbmVyaWM6IG5vIGdlbmVyaWMgbW9kZW0geWV0XG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQorCWlmKCFjb2RlYy0+YWZnKQorCQlyZXR1cm4gMDsKIAogCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCmluZGV4IDk1OTBlY2UuLjZmZTY5NmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwpAQCAtMTEzNyw2ICsxMTM3LDcgQEAKIAkJcG9zID0gYXp4X3NkX3JlYWRsKGF6eF9kZXYsIFNEX0xQSUIpOwogCQlpZiAoY2hpcC0+cG9zaXRpb25fZml4ID09IFBPU19GSVhfRklGTykKIAkJCXBvcyArPSBhenhfZGV2LT5maWZvX3NpemU7CisjaWYgMCAvKiBkaXNhYmxlZCB0ZW1wcmFyaWx5LCBhdXRvLWNvcnJlY3Rpb24gZG9lc24ndCB3b3JrIHdlbGwuLi4gKi8KIAkJZWxzZSBpZiAoY2hpcC0+cG9zaXRpb25fZml4ID09IFBPU19GSVhfQVVUTyAmJiBhenhfZGV2LT5wZXJpb2RfdXBkYXRpbmcpIHsKIAkJCS8qIGNoZWNrIHRoZSB2YWxpZGl0eSBvZiBETUEgcG9zaXRpb24gKi8KIAkJCXVuc2lnbmVkIGludCBkaWZmID0gMDsKQEAgLTExNTcsNiArMTE1OCwxMCBAQAogCQkJfQogCQkJYXp4X2Rldi0+cGVyaW9kX3VwZGF0aW5nID0gMDsKIAkJfQorI2Vsc2UKKwkJZWxzZSBpZiAoY2hpcC0+cG9zaXRpb25fZml4ID09IFBPU19GSVhfQVVUTykKKwkJCXBvcyArPSBhenhfZGV2LT5maWZvX3NpemU7CisjZW5kaWYKIAl9CiAJaWYgKHBvcyA+PSBhenhfZGV2LT5idWZzaXplKQogCQlwb3MgPSAwOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwppbmRleCA4NDliNWI1Li43MzI3ZGViIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwpAQCAtMTM4NSw4ICsxMzg1LDggQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJTaWRlIFBsYXliYWNrIFZvbHVtZSIsIDB4MGYsIDB4MCwgSERBX09VVFBVVCksCiAJQUxDX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKIAlBTENfQklORF9NVVRFKCJTdXJyb3VuZCBQbGF5YmFjayBTd2l0Y2giLCAweDBkLCAyLCBIREFfSU5QVVQpLAotCUFMQ19CSU5EX01VVEUoIkNMRkUgUGxheWJhY2sgVm9sdW1lIiwgMHgwZSwgMiwgSERBX0lOUFVUKSwKLQlBTENfQklORF9NVVRFKCJTaWRlIFBsYXliYWNrIFZvbHVtZSIsIDB4MGYsIDIsIEhEQV9JTlBVVCksCisJQUxDX0JJTkRfTVVURSgiQ0xGRSBQbGF5YmFjayBTd2l0Y2giLCAweDBlLCAyLCBIREFfSU5QVVQpLAorCUFMQ19CSU5EX01VVEUoIlNpZGUgUGxheWJhY2sgU3dpdGNoIiwgMHgwZiwgMiwgSERBX0lOUFVUKSwKIAlQSU5fQ1RMX1RFU1QoIkZyb250IFBpbiBNb2RlIiwgMHgxNCksCiAJUElOX0NUTF9URVNUKCJTdXJyb3VuZCBQaW4gTW9kZSIsIDB4MTUpLAogCVBJTl9DVExfVEVTVCgiQ0xGRSBQaW4gTW9kZSIsIDB4MTYpLApAQCAtMTQwOSwxOCArMTQwOSw2IEBACiAJSERBX0NPREVDX01VVEUoIkluLTQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4NCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHg0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwOCwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MDgsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAxLCAweDA5LCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDEsIDB4MDksIDB4MCwgSERBX0lOUFVUKSwKLQl7Ci0JCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9ICJJbnB1dCBTb3VyY2UiLAotCQkuY291bnQgPSAyLAotCQkuaW5mbyA9IGFsY19tdXhfZW51bV9pbmZvLAotCQkuZ2V0ID0gYWxjX211eF9lbnVtX2dldCwKLQkJLnB1dCA9IGFsY19tdXhfZW51bV9wdXQsCi0JfSwKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJDaGFubmVsIE1vZGUiLApAQCAtMjI0Myw3ICsyMjMxLDcgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwOSwgMHgwLCBIREFfT1VUUFVUKSwKIAlBTENfQklORF9NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwOSwgMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FX01PTk8oIk1vbm8gUGxheWJhY2sgVm9sdW1lIiwgMHgwYSwgMSwgMHgwLCBIREFfT1VUUFVUKSwKLQlBTENfQklORF9NVVRFX01PTk8oIk1vbm8gUGxheWJhY2sgU3dpdGNoIiwgMHgwYSwgMSwgMiwgSERBX09VVFBVVCksCisJQUxDX0JJTkRfTVVURV9NT05PKCJNb25vIFBsYXliYWNrIFN3aXRjaCIsIDB4MGEsIDEsIDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA0LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwNCwgMHgwLCBIREFfSU5QVVQpLAogCXsKQEAgLTIyNzAsNyArMjI1OCw3IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MDksIDB4MCwgSERBX09VVFBVVCksCiAJQUxDX0JJTkRfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MDksIDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRV9NT05PKCJNb25vIFBsYXliYWNrIFZvbHVtZSIsIDB4MGEsIDEsIDB4MCwgSERBX09VVFBVVCksCi0JQUxDX0JJTkRfTVVURV9NT05PKCJNb25vIFBsYXliYWNrIFN3aXRjaCIsIDB4MGEsIDEsIDIsIEhEQV9PVVRQVVQpLAorCUFMQ19CSU5EX01VVEVfTU9OTygiTW9ubyBQbGF5YmFjayBTd2l0Y2giLCAweDBhLCAxLCAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwNSwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MDUsIDB4MCwgSERBX0lOUFVUKSwKIAl7CkBAIC0yNTAxLDcgKzI0ODksNyBAQAogCUhEQV9DT0RFQ19WT0xVTUVfTU9OTygiQ2VudGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGUsIDEsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRV9NT05PKCJMRkUgUGxheWJhY2sgVm9sdW1lIiwgMHgwZSwgMiwgMHgwLCBIREFfT1VUUFVUKSwKIAlBTENfQklORF9NVVRFX01PTk8oIkNlbnRlciBQbGF5YmFjayBTd2l0Y2giLCAweDBlLCAxLCAyLCBIREFfSU5QVVQpLAotCUFMQ19CSU5EX01VVEVfTU9OTygiTEZFIFBsYXliYWNrIFN3aXRjaCIsIDB4MGUsIDIsIDIsIEhEQV9PVVRQVVQpLAorCUFMQ19CSU5EX01VVEVfTU9OTygiTEZFIFBsYXliYWNrIFN3aXRjaCIsIDB4MGUsIDIsIDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiU2lkZSBQbGF5YmFjayBWb2x1bWUiLCAweDBmLCAweDAsIEhEQV9PVVRQVVQpLAogCUFMQ19CSU5EX01VVEUoIlNpZGUgUGxheWJhY2sgU3dpdGNoIiwgMHgwZiwgMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MWIsIDB4MCwgSERBX09VVFBVVCksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYyBiL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCmluZGV4IDA5ZjljYmUuLjU1NjFmZDQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCisrKyBiL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCkBAIC00NDIsNyArNDQyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJTZXR1cCBmb3IgcGxheSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiUGxheWluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiTW9uaXRvciBtb2RlIG9uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJDYWxpYnJhdGluZyIKKwkJCSJDYWxpYnJhdGluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCIKIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS92aWE4Mnh4LmMgYi9zb3VuZC9wY2kvdmlhODJ4eC5jCmluZGV4IDZkYjdkZTYuLjNjMDIwNWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS92aWE4Mnh4LmMKKysrIGIvc291bmQvcGNpL3ZpYTgyeHguYwpAQCAtMjE0NywxMSArMjE0NywxMyBAQAogCQl7IC5zdWJ2ZW5kb3IgPSAweDEwMTksIC5zdWJkZXZpY2UgPSAweDA5OTYsIC5hY3Rpb24gPSBWSUFfRFhTXzQ4SyB9LAogCQl7IC5zdWJ2ZW5kb3IgPSAweDEwMTksIC5zdWJkZXZpY2UgPSAweDBhODEsIC5hY3Rpb24gPSBWSUFfRFhTX05PX1ZSQSB9LCAvKiBFQ1MgSzdWVEEzIHY4LjAgKi8KIAkJeyAuc3VidmVuZG9yID0gMHgxMDE5LCAuc3ViZGV2aWNlID0gMHgwYTg1LCAuYWN0aW9uID0gVklBX0RYU19OT19WUkEgfSwgLyogRUNTIEw3Vk1NMiAqLworCQl7IC5zdWJ2ZW5kb3IgPSAweDEwMTksIC5zdWJkZXZpY2UgPSAweGExMDEsIC5hY3Rpb24gPSBWSUFfRFhTX1NSQyB9LAogCQl7IC5zdWJ2ZW5kb3IgPSAweDEwMjUsIC5zdWJkZXZpY2UgPSAweDAwMzMsIC5hY3Rpb24gPSBWSUFfRFhTX05PX1ZSQSB9LCAvKiBBY2VyIEluc3BpcmUgMTM1M0xNICovCiAJCXsgLnN1YnZlbmRvciA9IDB4MTAyNSwgLnN1YmRldmljZSA9IDB4MDA0NiwgLmFjdGlvbiA9IFZJQV9EWFNfU1JDIH0sIC8qIEFjZXIgQXNwaXJlIDE1MjQgV0xNaSAqLwogCQl7IC5zdWJ2ZW5kb3IgPSAweDEwNDMsIC5zdWJkZXZpY2UgPSAweDgwOTUsIC5hY3Rpb24gPSBWSUFfRFhTX05PX1ZSQSB9LCAvKiBBU1VTIEE3VjhYIChGSVhNRTogcG9zc2libHkgVklBX0RYU19FTkFCTEU/KSovCiAJCXsgLnN1YnZlbmRvciA9IDB4MTA0MywgLnN1YmRldmljZSA9IDB4ODBhMSwgLmFjdGlvbiA9IFZJQV9EWFNfTk9fVlJBIH0sIC8qIEFTVVMgQTdWOC1YICovCiAJCXsgLnN1YnZlbmRvciA9IDB4MTA0MywgLnN1YmRldmljZSA9IDB4ODBiMCwgLmFjdGlvbiA9IFZJQV9EWFNfTk9fVlJBIH0sIC8qIEFTVVMgQTdWNjAwICYgSzhWKi8gCisJCXsgLnN1YnZlbmRvciA9IDB4MTA0MywgLnN1YmRldmljZSA9IDB4ODEwZCwgLmFjdGlvbiA9IFZJQV9EWFNfU1JDIH0sIC8qIEFTVVMgKi8KIAkJeyAuc3VidmVuZG9yID0gMHgxMDQzLCAuc3ViZGV2aWNlID0gMHg4MTJhLCAuYWN0aW9uID0gVklBX0RYU19TUkMgICAgfSwgLyogQVNVUyBBOFYgRGVsdXhlICovIAogCQl7IC5zdWJ2ZW5kb3IgPSAweDEwNzEsIC5zdWJkZXZpY2UgPSAweDgzNzUsIC5hY3Rpb24gPSBWSUFfRFhTX05PX1ZSQSB9LCAvKiBWb2Jpcy9ZYWt1bW8vTWl0YWMgbm90ZWJvb2sgKi8KIAkJeyAuc3VidmVuZG9yID0gMHgxMDcxLCAuc3ViZGV2aWNlID0gMHg4Mzk5LCAuYWN0aW9uID0gVklBX0RYU19OT19WUkEgfSwgLyogVW1heCBBQiA1OTVUIChWSUEgSzhOODAwQSAtIFZUODIzNykgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9wbWFjLmMgYi9zb3VuZC9wcGMvcG1hYy5jCmluZGV4IGUzNWI0OGQuLjM5MmIyYWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9wbWFjLmMKKysrIGIvc291bmQvcHBjL3BtYWMuYwpAQCAtOTg4LDYgKzk4OCw3IEBACiAJCWNhc2UgMHgzMzoKIAkJY2FzZSAweDI5OgogCQljYXNlIDB4MjQ6CisJCWNhc2UgMHg1MDoKIAkJY2FzZSAweDVjOgogCQkJY2hpcC0+bnVtX2ZyZXFzID0gQVJSQVlfU0laRSh0dW1ibGVyX2ZyZXFzKTsKIAkJCWNoaXAtPm1vZGVsID0gUE1BQ19TTkFQUEVSOwpkaWZmIC0tZ2l0IGEvc291bmQvc3BhcmMvY3M0MjMxLmMgYi9zb3VuZC9zcGFyYy9jczQyMzEuYwppbmRleCAyZmIyN2M0Li5mNDM2MWM1IDEwMDY0NAotLS0gYS9zb3VuZC9zcGFyYy9jczQyMzEuYworKysgYi9zb3VuZC9zcGFyYy9jczQyMzEuYwpAQCAtMTczLDcgKzE3Myw3IEBACiAKICNkZWZpbmUgQ1M0MjMxX0dMT0JBTElSUQkweDAxCS8qIElSUSBpcyBhY3RpdmUgKi8KIAotLyogZGVmaW5pdGlvbnMgZm9yIGNvZGVjIGlycSBzdGF0dXMgKi8KKy8qIGRlZmluaXRpb25zIGZvciBjb2RlYyBpcnEgc3RhdHVzIC0gQ1M0MjMxX0lSUV9TVEFUVVMJKi8KIAogI2RlZmluZSBDUzQyMzFfUExBWUJBQ0tfSVJRCTB4MTAKICNkZWZpbmUgQ1M0MjMxX1JFQ09SRF9JUlEJMHgyMApAQCAtNDAyLDcgKzQwMiw3IEBACiAJICAgICAJdWRlbGF5KDEwMCk7CiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCWlmIChfX2NzNDIzMV9yZWFkYihjaGlwLCBDUzQyMzFQKGNoaXAsIFJFR1NFTCkpICYgQ1M0MjMxX0lOSVQpCi0JCXNuZF9wcmludGsoIm91dG06IGF1dG8gY2FsaWJyYXRpb24gdGltZSBvdXQgLSByZWcgPSAweCV4LCB2YWx1ZSA9IDB4JXhcbiIsIHJlZywgdmFsdWUpOworCQlzbmRfcHJpbnRkZCgib3V0bTogYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAtIHJlZyA9IDB4JXgsIHZhbHVlID0gMHgleFxuIiwgcmVnLCB2YWx1ZSk7CiAjZW5kaWYKIAlpZiAoY2hpcC0+Y2FsaWJyYXRlX211dGUpIHsKIAkJY2hpcC0+aW1hZ2VbcmVnXSAmPSBtYXNrOwpAQCAtNDI1LDYgKzQyNSwxMCBAQAogCSAgICAgdGltZW91dCA+IDAgJiYgKF9fY3M0MjMxX3JlYWRiKGNoaXAsIENTNDIzMVAoY2hpcCwgUkVHU0VMKSkgJiBDUzQyMzFfSU5JVCk7CiAJICAgICB0aW1lb3V0LS0pCiAJICAgICAJdWRlbGF5KDEwMCk7CisjaWZkZWYgQ09ORklHX1NORF9ERUJVRworCWlmIChfX2NzNDIzMV9yZWFkYihjaGlwLCBDUzQyMzFQKGNoaXAsIFJFR1NFTCkpICYgQ1M0MjMxX0lOSVQpCisJCXNuZF9wcmludGRkKCJvdXQ6IGF1dG8gY2FsaWJyYXRpb24gdGltZSBvdXQgLSByZWcgPSAweCV4LCB2YWx1ZSA9IDB4JXhcbiIsIHJlZywgdmFsdWUpOworI2VuZGlmCiAJX19jczQyMzFfd3JpdGViKGNoaXAsIGNoaXAtPm1jZV9iaXQgfCByZWcsIENTNDIzMVAoY2hpcCwgUkVHU0VMKSk7CiAJX19jczQyMzFfd3JpdGViKGNoaXAsIHZhbHVlLCBDUzQyMzFQKGNoaXAsIFJFRykpOwogCW1iKCk7CkBAIC00NDAsMTUgKzQ0NCwxMiBAQAogCSAgICAgCXVkZWxheSgxMDApOwogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlpZiAoX19jczQyMzFfcmVhZGIoY2hpcCwgQ1M0MjMxUChjaGlwLCBSRUdTRUwpKSAmIENTNDIzMV9JTklUKQotCQlzbmRfcHJpbnRrKCJvdXQ6IGF1dG8gY2FsaWJyYXRpb24gdGltZSBvdXQgLSByZWcgPSAweCV4LCB2YWx1ZSA9IDB4JXhcbiIsIHJlZywgdmFsdWUpOworCQlzbmRfcHJpbnRkZCgib3V0OiBhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0IC0gcmVnID0gMHgleCwgdmFsdWUgPSAweCV4XG4iLCByZWcsIHZhbHVlKTsKICNlbmRpZgogCV9fY3M0MjMxX3dyaXRlYihjaGlwLCBjaGlwLT5tY2VfYml0IHwgcmVnLCBDUzQyMzFQKGNoaXAsIFJFR1NFTCkpOwogCV9fY3M0MjMxX3dyaXRlYihjaGlwLCB2YWx1ZSwgQ1M0MjMxUChjaGlwLCBSRUcpKTsKIAljaGlwLT5pbWFnZVtyZWddID0gdmFsdWU7CiAJbWIoKTsKLSNpZiAwCi0JcHJpbnRrKCJjb2RlYyBvdXQgLSByZWcgMHgleCA9IDB4JXhcbiIsIGNoaXAtPm1jZV9iaXQgfCByZWcsIHZhbHVlKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBzbmRfY3M0MjMxX2luKGNzNDIzMV90ICpjaGlwLCB1bnNpZ25lZCBjaGFyIHJlZykKQEAgLTQ2Miw2MSArNDYzLDE0IEBACiAJICAgICAJdWRlbGF5KDEwMCk7CiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCWlmIChfX2NzNDIzMV9yZWFkYihjaGlwLCBDUzQyMzFQKGNoaXAsIFJFR1NFTCkpICYgQ1M0MjMxX0lOSVQpCi0JCXNuZF9wcmludGsoImluOiBhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0IC0gcmVnID0gMHgleFxuIiwgcmVnKTsKKwkJc25kX3ByaW50ZGQoImluOiBhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0IC0gcmVnID0gMHgleFxuIiwgcmVnKTsKICNlbmRpZgogCV9fY3M0MjMxX3dyaXRlYihjaGlwLCBjaGlwLT5tY2VfYml0IHwgcmVnLCBDUzQyMzFQKGNoaXAsIFJFR1NFTCkpOwogCW1iKCk7CiAJcmV0ID0gX19jczQyMzFfcmVhZGIoY2hpcCwgQ1M0MjMxUChjaGlwLCBSRUcpKTsKLSNpZiAwCi0JcHJpbnRrKCJjb2RlYyBpbiAtIHJlZyAweCV4ID0gMHgleFxuIiwgY2hpcC0+bWNlX2JpdCB8IHJlZywgcmV0KTsKLSNlbmRpZgogCXJldHVybiByZXQ7CiB9CiAKLSNpZiAwCi0KLXN0YXRpYyB2b2lkIHNuZF9jczQyMzFfZGVidWcoY3M0MjMxX3QgKmNoaXApCi17Ci0JcHJpbnRrKCJDUzQyMzEgUkVHUzogICAgICBJTkRFWCA9IDB4JTAyeCAgIiwKLQkgICAgICAgX19jczQyMzFfcmVhZGIoY2hpcCwgQ1M0MjMxUChjaGlwLCBSRUdTRUwpKSk7Ci0JcHJpbnRrKCIgICAgICAgICAgICAgICAgIFNUQVRVUyA9IDB4JTAyeFxuIiwKLQkgICAgICAgX19jczQyMzFfcmVhZGIoY2hpcCwgQ1M0MjMxUChjaGlwLCBTVEFUVVMpKSk7Ci0JcHJpbnRrKCIgIDB4MDA6IGxlZnQgaW5wdXQgICAgICA9IDB4JTAyeCAgIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDAwKSk7Ci0JcHJpbnRrKCIgIDB4MTA6IGFsdCAxIChDRklHIDIpICA9IDB4JTAyeFxuIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDEwKSk7Ci0JcHJpbnRrKCIgIDB4MDE6IHJpZ2h0IGlucHV0ICAgICA9IDB4JTAyeCAgIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDAxKSk7Ci0JcHJpbnRrKCIgIDB4MTE6IGFsdCAyIChDRklHIDMpICA9IDB4JTAyeFxuIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDExKSk7Ci0JcHJpbnRrKCIgIDB4MDI6IEdGMSBsZWZ0IGlucHV0ICA9IDB4JTAyeCAgIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDAyKSk7Ci0JcHJpbnRrKCIgIDB4MTI6IGxlZnQgbGluZSBpbiAgICA9IDB4JTAyeFxuIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDEyKSk7Ci0JcHJpbnRrKCIgIDB4MDM6IEdGMSByaWdodCBpbnB1dCA9IDB4JTAyeCAgIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDAzKSk7Ci0JcHJpbnRrKCIgIDB4MTM6IHJpZ2h0IGxpbmUgaW4gICA9IDB4JTAyeFxuIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDEzKSk7Ci0JcHJpbnRrKCIgIDB4MDQ6IENEIGxlZnQgaW5wdXQgICA9IDB4JTAyeCAgIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDA0KSk7Ci0JcHJpbnRrKCIgIDB4MTQ6IHRpbWVyIGxvdyAgICAgICA9IDB4JTAyeFxuIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDE0KSk7Ci0JcHJpbnRrKCIgIDB4MDU6IENEIHJpZ2h0IGlucHV0ICA9IDB4JTAyeCAgIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDA1KSk7Ci0JcHJpbnRrKCIgIDB4MTU6IHRpbWVyIGhpZ2ggICAgICA9IDB4JTAyeFxuIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDE1KSk7Ci0JcHJpbnRrKCIgIDB4MDY6IGxlZnQgb3V0cHV0ICAgICA9IDB4JTAyeCAgIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDA2KSk7Ci0JcHJpbnRrKCIgIDB4MTY6IGxlZnQgTUlDIChQblApICA9IDB4JTAyeFxuIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDE2KSk7Ci0JcHJpbnRrKCIgIDB4MDc6IHJpZ2h0IG91dHB1dCAgICA9IDB4JTAyeCAgIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDA3KSk7Ci0JcHJpbnRrKCIgIDB4MTc6IHJpZ2h0IE1JQyAoUG5QKSA9IDB4JTAyeFxuIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDE3KSk7Ci0JcHJpbnRrKCIgIDB4MDg6IHBsYXliYWNrIGZvcm1hdCA9IDB4JTAyeCAgIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDA4KSk7Ci0JcHJpbnRrKCIgIDB4MTg6IElSUSBzdGF0dXMgICAgICA9IDB4JTAyeFxuIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDE4KSk7Ci0JcHJpbnRrKCIgIDB4MDk6IGlmYWNlIChDRklHIDEpICA9IDB4JTAyeCAgIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDA5KSk7Ci0JcHJpbnRrKCIgIDB4MTk6IGxlZnQgbGluZSBvdXQgICA9IDB4JTAyeFxuIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDE5KSk7Ci0JcHJpbnRrKCIgIDB4MGE6IHBpbiBjb250cm9sICAgICA9IDB4JTAyeCAgIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDBhKSk7Ci0JcHJpbnRrKCIgIDB4MWE6IG1vbm8gY29udHJvbCAgICA9IDB4JTAyeFxuIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDFhKSk7Ci0JcHJpbnRrKCIgIDB4MGI6IGluaXQgJiBzdGF0dXMgICA9IDB4JTAyeCAgIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDBiKSk7Ci0JcHJpbnRrKCIgIDB4MWI6IHJpZ2h0IGxpbmUgb3V0ICA9IDB4JTAyeFxuIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDFiKSk7Ci0JcHJpbnRrKCIgIDB4MGM6IHJldmlzaW9uICYgbW9kZSA9IDB4JTAyeCAgIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDBjKSk7Ci0JcHJpbnRrKCIgIDB4MWM6IHJlY29yZCBmb3JtYXQgICA9IDB4JTAyeFxuIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDFjKSk7Ci0JcHJpbnRrKCIgIDB4MGQ6IGxvb3BiYWNrICAgICAgICA9IDB4JTAyeCAgIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDBkKSk7Ci0JcHJpbnRrKCIgIDB4MWQ6IHZhciBmcmVxIChQblApICA9IDB4JTAyeFxuIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDFkKSk7Ci0JcHJpbnRrKCIgIDB4MGU6IHBseSB1cHIgY291bnQgICA9IDB4JTAyeCAgIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDBlKSk7Ci0JcHJpbnRrKCIgIDB4MWU6IHJlYyB1cHIgY291bnQgICA9IDB4JTAyeFxuIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDFlKSk7Ci0JcHJpbnRrKCIgIDB4MGY6IHBseSBsd3IgY291bnQgICA9IDB4JTAyeCAgIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDBmKSk7Ci0JcHJpbnRrKCIgIDB4MWY6IHJlYyBsd3IgY291bnQgICA9IDB4JTAyeFxuIiwgc25kX2NzNDIzMV9pbihjaGlwLCAweDFmKSk7Ci19Ci0KLSNlbmRpZgotCiAvKgogICogIENTNDIzMSBkZXRlY3Rpb24gLyBNQ0Ugcm91dGluZXMKICAqLwpAQCAtNTI4LDExICs0ODIsMTIgQEAKIAkvKiBodWguLiBsb29rcyBsaWtlIHRoaXMgc2VxdWVuY2UgaXMgcHJvcGVyIGZvciBDUzQyMzFBIGNoaXAgKEdVUyBNQVgpICovCiAJZm9yICh0aW1lb3V0ID0gNTsgdGltZW91dCA+IDA7IHRpbWVvdXQtLSkKIAkJX19jczQyMzFfcmVhZGIoY2hpcCwgQ1M0MjMxUChjaGlwLCBSRUdTRUwpKTsKKwogCS8qIGVuZCBvZiBjbGVhbnVwIHNlcXVlbmNlICovCi0JZm9yICh0aW1lb3V0ID0gMjUwOworCWZvciAodGltZW91dCA9IDUwMDsKIAkgICAgIHRpbWVvdXQgPiAwICYmIChfX2NzNDIzMV9yZWFkYihjaGlwLCBDUzQyMzFQKGNoaXAsIFJFR1NFTCkpICYgQ1M0MjMxX0lOSVQpOwogCSAgICAgdGltZW91dC0tKQotCSAgICAgCXVkZWxheSgxMDApOworCSAgICAgCXVkZWxheSgxMDAwKTsKIH0KIAogc3RhdGljIHZvaWQgc25kX2NzNDIzMV9tY2VfdXAoY3M0MjMxX3QgKmNoaXApCkBAIC01NDUsMTIgKzUwMCwxMiBAQAogCQl1ZGVsYXkoMTAwKTsKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJaWYgKF9fY3M0MjMxX3JlYWRiKGNoaXAsIENTNDIzMVAoY2hpcCwgUkVHU0VMKSkgJiBDUzQyMzFfSU5JVCkKLQkJc25kX3ByaW50aygibWNlX3VwIC0gYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAoMClcbiIpOworCQlzbmRfcHJpbnRkZCgibWNlX3VwIC0gYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAoMClcbiIpOwogI2VuZGlmCiAJY2hpcC0+bWNlX2JpdCB8PSBDUzQyMzFfTUNFOwogCXRpbWVvdXQgPSBfX2NzNDIzMV9yZWFkYihjaGlwLCBDUzQyMzFQKGNoaXAsIFJFR1NFTCkpOwogCWlmICh0aW1lb3V0ID09IDB4ODApCi0JCXNuZF9wcmludGsoIm1jZV91cCBbJXBdOiBzZXJpb3VzIGluaXQgcHJvYmxlbSAtIGNvZGVjIHN0aWxsIGJ1c3lcbiIsIGNoaXAtPnBvcnQpOworCQlzbmRfcHJpbnRkZCgibWNlX3VwIFslcF06IHNlcmlvdXMgaW5pdCBwcm9ibGVtIC0gY29kZWMgc3RpbGwgYnVzeVxuIiwgY2hpcC0+cG9ydCk7CiAJaWYgKCEodGltZW91dCAmIENTNDIzMV9NQ0UpKQogCQlfX2NzNDIzMV93cml0ZWIoY2hpcCwgY2hpcC0+bWNlX2JpdCB8ICh0aW1lb3V0ICYgMHgxZiksIENTNDIzMVAoY2hpcCwgUkVHU0VMKSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bG9jaywgZmxhZ3MpOwpAQCAtNTYzLDE4ICs1MTgsMTUgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5sb2NrLCBmbGFncyk7CiAJc25kX2NzNDIzMV9idXN5X3dhaXQoY2hpcCk7Ci0jaWYgMAotCXByaW50aygiKDEpIHRpbWVvdXQgPSAlaVxuIiwgdGltZW91dCk7Ci0jZW5kaWYKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJaWYgKF9fY3M0MjMxX3JlYWRiKGNoaXAsIENTNDIzMVAoY2hpcCwgUkVHU0VMKSkgJiBDUzQyMzFfSU5JVCkKLQkJc25kX3ByaW50aygibWNlX2Rvd24gWyVwXSAtIGF1dG8gY2FsaWJyYXRpb24gdGltZSBvdXQgKDApXG4iLCBDUzQyMzFQKGNoaXAsIFJFR1NFTCkpOworCQlzbmRfcHJpbnRkZCgibWNlX2Rvd24gWyVwXSAtIGF1dG8gY2FsaWJyYXRpb24gdGltZSBvdXQgKDApXG4iLCBDUzQyMzFQKGNoaXAsIFJFR1NFTCkpOwogI2VuZGlmCiAJY2hpcC0+bWNlX2JpdCAmPSB+Q1M0MjMxX01DRTsKIAl0aW1lb3V0ID0gX19jczQyMzFfcmVhZGIoY2hpcCwgQ1M0MjMxUChjaGlwLCBSRUdTRUwpKTsKIAlfX2NzNDIzMV93cml0ZWIoY2hpcCwgY2hpcC0+bWNlX2JpdCB8ICh0aW1lb3V0ICYgMHgxZiksIENTNDIzMVAoY2hpcCwgUkVHU0VMKSk7CiAJaWYgKHRpbWVvdXQgPT0gMHg4MCkKLQkJc25kX3ByaW50aygibWNlX2Rvd24gWyVwXTogc2VyaW91cyBpbml0IHByb2JsZW0gLSBjb2RlYyBzdGlsbCBidXN5XG4iLCBjaGlwLT5wb3J0KTsKKwkJc25kX3ByaW50ZGQoIm1jZV9kb3duIFslcF06IHNlcmlvdXMgaW5pdCBwcm9ibGVtIC0gY29kZWMgc3RpbGwgYnVzeVxuIiwgY2hpcC0+cG9ydCk7CiAJaWYgKCh0aW1lb3V0ICYgQ1M0MjMxX01DRSkgPT0gMCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKQEAgLTU5MCw5ICs1NDIsNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9Ci0jaWYgMAotCXByaW50aygiKDIpIHRpbWVvdXQgPSAlaSwgamlmZmllcyA9ICVsaVxuIiwgdGltZW91dCwgamlmZmllcyk7Ci0jZW5kaWYKKwogCS8qIGluIDEwbXMgaW5jcmVtZW50cywgY2hlY2sgY29uZGl0aW9uLCB1cCB0byAyNTBtcyAqLwogCXRpbWVvdXQgPSAyNTsKIAl3aGlsZSAoc25kX2NzNDIzMV9pbihjaGlwLCBDUzQyMzFfVEVTVF9JTklUKSAmIENTNDIzMV9DQUxJQl9JTl9QUk9HUkVTUykgewpAQCAtNjA0LDkgKzU1NCw3IEBACiAJCW1zbGVlcCgxMCk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5sb2NrLCBmbGFncyk7CiAJfQotI2lmIDAKLQlwcmludGsoIigzKSBqaWZmaWVzID0gJWxpXG4iLCBqaWZmaWVzKTsKLSNlbmRpZgorCiAJLyogaW4gMTBtcyBpbmNyZW1lbnRzLCBjaGVjayBjb25kaXRpb24sIHVwIHRvIDEwMG1zICovCiAJdGltZW91dCA9IDEwOwogCXdoaWxlIChfX2NzNDIzMV9yZWFkYihjaGlwLCBDUzQyMzFQKGNoaXAsIFJFR1NFTCkpICYgQ1M0MjMxX0lOSVQpIHsKQEAgLTYxOSw1NCArNTY3LDU4IEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5sb2NrLCBmbGFncyk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKLSNpZiAwCi0JcHJpbnRrKCIoNCkgamlmZmllcyA9ICVsaVxuIiwgamlmZmllcyk7Ci0Jc25kX3ByaW50aygibWNlX2Rvd24gLSBleGl0ID0gMHgleFxuIiwgX19jczQyMzFfcmVhZGIoY2hpcCwgQ1M0MjMxUChjaGlwLCBSRUdTRUwpKSk7Ci0jZW5kaWYKIH0KIAotI2lmIDAgLyogVW51c2VkIGZvciBub3cuLi4gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgc25kX2NzNDIzMV9nZXRfY291bnQodW5zaWduZWQgY2hhciBmb3JtYXQsIHVuc2lnbmVkIGludCBzaXplKQotewotCXN3aXRjaCAoZm9ybWF0ICYgMHhlMCkgewotCWNhc2UgQ1M0MjMxX0xJTkVBUl8xNjoKLQljYXNlIENTNDIzMV9MSU5FQVJfMTZfQklHOgotCQlzaXplID4+PSAxOwotCQlicmVhazsKLQljYXNlIENTNDIzMV9BRFBDTV8xNjoKLQkJcmV0dXJuIHNpemUgPj4gMjsKLQl9Ci0JaWYgKGZvcm1hdCAmIENTNDIzMV9TVEVSRU8pCi0JCXNpemUgPj49IDE7Ci0JcmV0dXJuIHNpemU7Ci19Ci0jZW5kaWYKLQogI2lmZGVmIEVCVVNfU1VQUE9SVAogc3RhdGljIHZvaWQgc25kX2NzNDIzMV9lYnVzX2FkdmFuY2VfZG1hKHN0cnVjdCBlYnVzX2RtYV9pbmZvICpwLCBzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0sIHVuc2lnbmVkIGludCAqcGVyaW9kc19zZW50KQogewogCXNuZF9wY21fcnVudGltZV90ICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCiAJd2hpbGUgKDEpIHsKLQkJdW5zaWduZWQgaW50IGRtYV9zaXplID0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSk7Ci0JCXVuc2lnbmVkIGludCBvZmZzZXQgPSBkbWFfc2l6ZSAqICgqcGVyaW9kc19zZW50KTsKKwkJdW5zaWduZWQgaW50IHBlcmlvZF9zaXplID0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSk7CisJCXVuc2lnbmVkIGludCBvZmZzZXQgPSBwZXJpb2Rfc2l6ZSAqICgqcGVyaW9kc19zZW50KTsKIAotCQlpZiAoZG1hX3NpemUgPj0gKDEgPDwgMjQpKQorCQlpZiAocGVyaW9kX3NpemUgPj0gKDEgPDwgMjQpKQogCQkJQlVHKCk7CiAKLQkJaWYgKGVidXNfZG1hX3JlcXVlc3QocCwgcnVudGltZS0+ZG1hX2FkZHIgKyBvZmZzZXQsIGRtYV9zaXplKSkKKwkJaWYgKGVidXNfZG1hX3JlcXVlc3QocCwgcnVudGltZS0+ZG1hX2FkZHIgKyBvZmZzZXQsIHBlcmlvZF9zaXplKSkKIAkJCXJldHVybjsKLSNpZiAwCi0JCXByaW50aygiZWJ1c19hZHZhbmNlOiBTZW50IHBlcmlvZCAldSAoc2l6ZVsleF0gb2Zmc2V0WyV4XSlcbiIsCi0JCSAgICAgICAoKnBlcmlvZHNfc2VudCksIGRtYV9zaXplLCBvZmZzZXQpOwotI2VuZGlmCiAJCSgqcGVyaW9kc19zZW50KSA9ICgoKnBlcmlvZHNfc2VudCkgKyAxKSAlIHJ1bnRpbWUtPnBlcmlvZHM7CiAJfQogfQogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIGNzNDIzMV9kbWFfdHJpZ2dlcihjczQyMzFfdCAqY2hpcCwgdW5zaWduZWQgaW50IHdoYXQsIGludCBvbikKKyNpZmRlZiBTQlVTX1NVUFBPUlQKK3N0YXRpYyB2b2lkIHNuZF9jczQyMzFfc2J1c19hZHZhbmNlX2RtYShzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0sIHVuc2lnbmVkIGludCAqcGVyaW9kc19zZW50KQogeworCWNzNDIzMV90ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXNuZF9wY21fcnVudGltZV90ICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCisJdW5zaWduZWQgaW50IHBlcmlvZF9zaXplID0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSk7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IHBlcmlvZF9zaXplICogKCpwZXJpb2RzX3NlbnQgJSBydW50aW1lLT5wZXJpb2RzKTsKKworCWlmIChydW50aW1lLT5wZXJpb2Rfc2l6ZSA+IDB4ZmZmZiArIDEpCisJCUJVRygpOworCisJc3dpdGNoIChzdWJzdHJlYW0tPnN0cmVhbSkgeworCWNhc2UgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSzoKKwkJc2J1c193cml0ZWwocnVudGltZS0+ZG1hX2FkZHIgKyBvZmZzZXQsIGNoaXAtPnBvcnQgKyBBUENQTlZBKTsKKwkJc2J1c193cml0ZWwocGVyaW9kX3NpemUsIGNoaXAtPnBvcnQgKyBBUENQTkMpOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRToKKwkJc2J1c193cml0ZWwocnVudGltZS0+ZG1hX2FkZHIgKyBvZmZzZXQsIGNoaXAtPnBvcnQgKyBBUENDTlZBKTsKKwkJc2J1c193cml0ZWwocGVyaW9kX3NpemUsIGNoaXAtPnBvcnQgKyBBUENDTkMpOworCQlicmVhazsKKwl9CisKKwkoKnBlcmlvZHNfc2VudCkgPSAoKnBlcmlvZHNfc2VudCArIDEpICUgcnVudGltZS0+cGVyaW9kczsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBjczQyMzFfZG1hX3RyaWdnZXIoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtLCB1bnNpZ25lZCBpbnQgd2hhdCwgaW50IG9uKQoreworCWNzNDIzMV90ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCiAjaWZkZWYgRUJVU19TVVBQT1JUCiAJaWYgKGNoaXAtPmZsYWdzICYgQ1M0MjMxX0ZMQUdfRUJVUykgewogCQlpZiAod2hhdCAmIENTNDIzMV9QTEFZQkFDS19FTkFCTEUpIHsKQEAgLTY5NCw2ICs2NDYsNjAgQEAKIAl9IGVsc2UgewogI2VuZGlmCiAjaWZkZWYgU0JVU19TVVBQT1JUCisJdTMyIGNzciA9IHNidXNfcmVhZGwoY2hpcC0+cG9ydCArIEFQQ0NTUik7CisJLyogSSBkb24ndCBrbm93IHdoeSwgYnV0IG9uIHNidXMgdGhlIHBlcmlvZCBjb3VudGVyIG11c3QKKwkgKiBvbmx5IHN0YXJ0IGNvdW50aW5nIGFmdGVyIHRoZSBmaXJzdCBwZXJpb2QgaXMgc2VudC4KKwkgKiBUaGVyZWZvcmUgdGhpcyBkdW1teSB0aGluZy4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgZHVtbXkgPSAwOworCisJc3dpdGNoICh3aGF0KSB7CisJY2FzZSBDUzQyMzFfUExBWUJBQ0tfRU5BQkxFOgorCQlpZiAob24pIHsKKwkJCWNzciAmPSB+QVBDX1hJTlRfUExBWTsKKwkJCXNidXNfd3JpdGVsKGNzciwgY2hpcC0+cG9ydCArIEFQQ0NTUik7CisKKwkJCWNzciAmPSB+QVBDX1BQQVVTRTsKKwkJCXNidXNfd3JpdGVsKGNzciwgY2hpcC0+cG9ydCArIEFQQ0NTUik7CisKKwkJCXNuZF9jczQyMzFfc2J1c19hZHZhbmNlX2RtYShzdWJzdHJlYW0sICZkdW1teSk7CisKKwkJCWNzciB8PSAgQVBDX0dFTkxfSU5UIHwgQVBDX1BMQVlfSU5UIHwgQVBDX1hJTlRfRU5BIHwKKwkJCQlBUENfWElOVF9QTEFZIHwgQVBDX1hJTlRfRU1QVCB8IEFQQ19YSU5UX0dFTkwgfAorCQkJCUFQQ19YSU5UX1BFTkEgfCBBUENfUERNQV9SRUFEWTsKKwkJCXNidXNfd3JpdGVsKGNzciwgY2hpcC0+cG9ydCArIEFQQ0NTUik7CisJCX0gZWxzZSB7CisJCQljc3IgfD0gQVBDX1BQQVVTRTsKKwkJCXNidXNfd3JpdGVsKGNzciwgY2hpcC0+cG9ydCArIEFQQ0NTUik7CisKKwkJCWNzciAmPSB+QVBDX1BETUFfUkVBRFk7CisJCQlzYnVzX3dyaXRlbChjc3IsIGNoaXAtPnBvcnQgKyBBUENDU1IpOworCQl9CisJCWJyZWFrOworCWNhc2UgQ1M0MjMxX1JFQ09SRF9FTkFCTEU6CisJCWlmIChvbikgeworCQkJY3NyICY9IH5BUENfWElOVF9DQVBUOworCQkJc2J1c193cml0ZWwoY3NyLCBjaGlwLT5wb3J0ICsgQVBDQ1NSKTsKKworCQkJY3NyICY9IH5BUENfQ1BBVVNFOworCQkJc2J1c193cml0ZWwoY3NyLCBjaGlwLT5wb3J0ICsgQVBDQ1NSKTsKKworCQkJc25kX2NzNDIzMV9zYnVzX2FkdmFuY2VfZG1hKHN1YnN0cmVhbSwgJmR1bW15KTsKKworCQkJY3NyIHw9ICBBUENfR0VOTF9JTlQgfCBBUENfQ0FQVF9JTlQgfCBBUENfWElOVF9FTkEgfAorCQkJCUFQQ19YSU5UX0NBUFQgfCBBUENfWElOVF9DRU1QIHwgQVBDX1hJTlRfR0VOTCB8CisJCQkJQVBDX0NETUFfUkVBRFk7CisKKwkJCXNidXNfd3JpdGVsKGNzciwgY2hpcC0+cG9ydCArIEFQQ0NTUik7CisJCX0gZWxzZSB7CisJCQljc3IgfD0gQVBDX0NQQVVTRTsKKwkJCXNidXNfd3JpdGVsKGNzciwgY2hpcC0+cG9ydCArIEFQQ0NTUik7CisKKwkJCWNzciAmPSB+QVBDX0NETUFfUkVBRFk7CisJCQlzYnVzX3dyaXRlbChjc3IsIGNoaXAtPnBvcnQgKyBBUENDU1IpOworCQl9CisJCWJyZWFrOworCX0KICNlbmRpZgogI2lmZGVmIEVCVVNfU1VQUE9SVAogCX0KQEAgLTcyNSwyNSArNzMxLDEyIEBACiAJCQl9CiAJCX0KIAotI2lmIDAKLQkJcHJpbnRrKCJUUklHR0VSOiB3aGF0WyV4XSBvbiglZClcbiIsCi0JCSAgICAgICB3aGF0LCAoY21kID09IFNORFJWX1BDTV9UUklHR0VSX1NUQVJUKSk7Ci0jZW5kaWYKLQogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+bG9jaywgZmxhZ3MpOwogCQlpZiAoY21kID09IFNORFJWX1BDTV9UUklHR0VSX1NUQVJUKSB7Ci0JCQljczQyMzFfZG1hX3RyaWdnZXIoY2hpcCwgd2hhdCwgMSk7CisJCQljczQyMzFfZG1hX3RyaWdnZXIoc3Vic3RyZWFtLCB3aGF0LCAxKTsKIAkJCWNoaXAtPmltYWdlW0NTNDIzMV9JRkFDRV9DVFJMXSB8PSB3aGF0OwotCQkJaWYgKHdoYXQgJiBDUzQyMzFfUExBWUJBQ0tfRU5BQkxFKSB7Ci0JCQkJc25kX2NzNDIzMV9vdXQoY2hpcCwgQ1M0MjMxX1BMWV9MV1JfQ05ULCAweGZmKTsKLQkJCQlzbmRfY3M0MjMxX291dChjaGlwLCBDUzQyMzFfUExZX1VQUl9DTlQsIDB4ZmYpOwotCQkJfQotCQkJaWYgKHdoYXQgJiBDUzQyMzFfUkVDT1JEX0VOQUJMRSkgewotCQkJCXNuZF9jczQyMzFfb3V0KGNoaXAsIENTNDIzMV9SRUNfTFdSX0NOVCwgMHhmZik7Ci0JCQkJc25kX2NzNDIzMV9vdXQoY2hpcCwgQ1M0MjMxX1JFQ19VUFJfQ05ULCAweGZmKTsKLQkJCX0KIAkJfSBlbHNlIHsKLQkJCWNzNDIzMV9kbWFfdHJpZ2dlcihjaGlwLCB3aGF0LCAwKTsKKwkJCWNzNDIzMV9kbWFfdHJpZ2dlcihzdWJzdHJlYW0sIHdoYXQsIDApOwogCQkJY2hpcC0+aW1hZ2VbQ1M0MjMxX0lGQUNFX0NUUkxdICY9IH53aGF0OwogCQl9CiAJCXNuZF9jczQyMzFfb3V0KGNoaXAsIENTNDIzMV9JRkFDRV9DVFJMLApAQCAtNzU1LDkgKzc0OCw3IEBACiAJCXJlc3VsdCA9IC1FSU5WQUw7CiAJCWJyZWFrOwogCX0KLSNpZiAwCi0Jc25kX2NzNDIzMV9kZWJ1ZyhjaGlwKTsKLSNlbmRpZgorCiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNzkwLDkgKzc4MSw2IEBACiAJfQogCWlmIChjaGFubmVscyA+IDEpCiAJCXJmb3JtYXQgfD0gQ1M0MjMxX1NURVJFTzsKLSNpZiAwCi0Jc25kX3ByaW50aygiZ2V0X2Zvcm1hdDogMHgleCAobW9kZT0weCV4KVxuIiwgZm9ybWF0LCBtb2RlKTsKLSNlbmRpZgogCXJldHVybiByZm9ybWF0OwogfQogCkBAIC05NDQsNyArOTMyLDcgQEAKIAlzbmRfY3M0MjMxX21jZV9kb3duKGNoaXApOwogCiAjaWZkZWYgU05EUlZfREVCVUdfTUNFCi0Jc25kX3ByaW50aygiaW5pdDogKDEpXG4iKTsKKwlzbmRfcHJpbnRkZCgiaW5pdDogKDEpXG4iKTsKICNlbmRpZgogCXNuZF9jczQyMzFfbWNlX3VwKGNoaXApOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5sb2NrLCBmbGFncyk7CkBAIC05NTcsNyArOTQ1LDcgQEAKIAlzbmRfY3M0MjMxX21jZV9kb3duKGNoaXApOwogCiAjaWZkZWYgU05EUlZfREVCVUdfTUNFCi0Jc25kX3ByaW50aygiaW5pdDogKDIpXG4iKTsKKwlzbmRfcHJpbnRkZCgiaW5pdDogKDIpXG4iKTsKICNlbmRpZgogCiAJc25kX2NzNDIzMV9tY2VfdXAoY2hpcCk7CkBAIC05NjcsNyArOTU1LDcgQEAKIAlzbmRfY3M0MjMxX21jZV9kb3duKGNoaXApOwogCiAjaWZkZWYgU05EUlZfREVCVUdfTUNFCi0Jc25kX3ByaW50aygiaW5pdDogKDMpIC0gYWZlaSA9IDB4JXhcbiIsIGNoaXAtPmltYWdlW0NTNDIzMV9BTFRfRkVBVFVSRV8xXSk7CisJc25kX3ByaW50ZGQoImluaXQ6ICgzKSAtIGFmZWkgPSAweCV4XG4iLCBjaGlwLT5pbWFnZVtDUzQyMzFfQUxUX0ZFQVRVUkVfMV0pOwogI2VuZGlmCiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+bG9jaywgZmxhZ3MpOwpAQCAtOTgxLDcgKzk2OSw3IEBACiAJc25kX2NzNDIzMV9tY2VfZG93bihjaGlwKTsKIAogI2lmZGVmIFNORFJWX0RFQlVHX01DRQotCXNuZF9wcmludGsoImluaXQ6ICg0KVxuIik7CisJc25kX3ByaW50ZGQoImluaXQ6ICg0KVxuIik7CiAjZW5kaWYKIAogCXNuZF9jczQyMzFfbWNlX3VwKGNoaXApOwpAQCAtOTkxLDcgKzk3OSw3IEBACiAJc25kX2NzNDIzMV9tY2VfZG93bihjaGlwKTsKIAogI2lmZGVmIFNORFJWX0RFQlVHX01DRQotCXNuZF9wcmludGsoImluaXQ6ICg1KVxuIik7CisJc25kX3ByaW50ZGQoImluaXQ6ICg1KVxuIik7CiAjZW5kaWYKIH0KIApAQCAtMTAyMiw2ICsxMDEwLDcgQEAKIAkJICAgICAgIENTNDIzMV9SRUNPUkRfSVJRIHwKIAkJICAgICAgIENTNDIzMV9USU1FUl9JUlEpOwogCXNuZF9jczQyMzFfb3V0KGNoaXAsIENTNDIzMV9JUlFfU1RBVFVTLCAwKTsKKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKIAogCWNoaXAtPm1vZGUgPSBtb2RlOwpAQCAtMTEzNiwxMSArMTEyNSwyMSBAQAogc3RhdGljIGludCBzbmRfY3M0MjMxX3BsYXliYWNrX3ByZXBhcmUoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKQogewogCWNzNDIzMV90ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXNuZF9wY21fcnVudGltZV90ICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+bG9jaywgZmxhZ3MpOworCiAJY2hpcC0+aW1hZ2VbQ1M0MjMxX0lGQUNFX0NUUkxdICY9IH4oQ1M0MjMxX1BMQVlCQUNLX0VOQUJMRSB8CiAJCQkJCSAgICBDUzQyMzFfUExBWUJBQ0tfUElPKTsKKworCWlmIChydW50aW1lLT5wZXJpb2Rfc2l6ZSA+IDB4ZmZmZiArIDEpCisJCUJVRygpOworCisJc25kX2NzNDIzMV9vdXQoY2hpcCwgQ1M0MjMxX1BMWV9MV1JfQ05ULCAocnVudGltZS0+cGVyaW9kX3NpemUgLSAxKSAmIDB4MDBmZik7CisJc25kX2NzNDIzMV9vdXQoY2hpcCwgQ1M0MjMxX1BMWV9VUFJfQ05ULCAocnVudGltZS0+cGVyaW9kX3NpemUgLSAxKSA+PiA4ICYgMHgwMGZmKTsKKwljaGlwLT5wX3BlcmlvZHNfc2VudCA9IDA7CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKQEAgLTExNzIsMTIgKzExNzEsMTYgQEAKIHN0YXRpYyBpbnQgc25kX2NzNDIzMV9jYXB0dXJlX3ByZXBhcmUoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKQogewogCWNzNDIzMV90ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXNuZF9wY21fcnVudGltZV90ICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+bG9jaywgZmxhZ3MpOwogCWNoaXAtPmltYWdlW0NTNDIzMV9JRkFDRV9DVFJMXSAmPSB+KENTNDIzMV9SRUNPUkRfRU5BQkxFIHwKIAkJCQkJICAgIENTNDIzMV9SRUNPUkRfUElPKTsKIAorCXNuZF9jczQyMzFfb3V0KGNoaXAsIENTNDIzMV9SRUNfTFdSX0NOVCwgKHJ1bnRpbWUtPnBlcmlvZF9zaXplIC0gMSkgJiAweDAwZmYpOworCXNuZF9jczQyMzFfb3V0KGNoaXAsIENTNDIzMV9SRUNfTFdSX0NOVCwgKHJ1bnRpbWUtPnBlcmlvZF9zaXplIC0gMSkgPj4gOCAmIDB4MDBmZik7CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKQEAgLTExOTYsNTMgKzExOTksNjEgQEAKIAkJY2hpcC0+Y2FwdHVyZV9zdWJzdHJlYW0tPnJ1bnRpbWUtPm92ZXJyYW5nZSsrOwogfQogCi1zdGF0aWMgdm9pZCBzbmRfY3M0MjMxX2dlbmVyaWNfaW50ZXJydXB0KGNzNDIzMV90ICpjaGlwKQorc3RhdGljIGlycXJldHVybl90IHNuZF9jczQyMzFfZ2VuZXJpY19pbnRlcnJ1cHQoY3M0MjMxX3QgKmNoaXApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBjaGFyIHN0YXR1czsKIAorCS8qVGhpcyBpcyBJUlEgaXMgbm90IHJhaXNlZCBieSB0aGUgY3M0MjMxKi8KKwlpZiAoIShfX2NzNDIzMV9yZWFkYihjaGlwLCBDUzQyMzFQKGNoaXAsIFNUQVRVUykpICYgQ1M0MjMxX0dMT0JBTElSUSkpCisJCXJldHVybiBJUlFfTk9ORTsKKwogCXN0YXR1cyA9IHNuZF9jczQyMzFfaW4oY2hpcCwgQ1M0MjMxX0lSUV9TVEFUVVMpOwotCWlmICghc3RhdHVzKQotCQlyZXR1cm47CiAKIAlpZiAoc3RhdHVzICYgQ1M0MjMxX1RJTUVSX0lSUSkgewogCQlpZiAoY2hpcC0+dGltZXIpCiAJCQlzbmRfdGltZXJfaW50ZXJydXB0KGNoaXAtPnRpbWVyLCBjaGlwLT50aW1lci0+c3RpY2tzKTsKIAl9CQkKLQlpZiAoc3RhdHVzICYgQ1M0MjMxX1BMQVlCQUNLX0lSUSkKLQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChjaGlwLT5wbGF5YmFja19zdWJzdHJlYW0pOwotCWlmIChzdGF0dXMgJiBDUzQyMzFfUkVDT1JEX0lSUSkgeworCisJaWYgKHN0YXR1cyAmIENTNDIzMV9SRUNPUkRfSVJRKQogCQlzbmRfY3M0MjMxX292ZXJyYW5nZShjaGlwKTsKLQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChjaGlwLT5jYXB0dXJlX3N1YnN0cmVhbSk7Ci0JfQogCiAJLyogQUNLIHRoZSBDUzQyMzEgaW50ZXJydXB0LiAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5sb2NrLCBmbGFncyk7CiAJc25kX2NzNDIzMV9vdXRtKGNoaXAsIENTNDIzMV9JUlFfU1RBVFVTLCB+Q1M0MjMxX0FMTF9JUlFTIHwgfnN0YXR1cywgMCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7CiB9CiAKICNpZmRlZiBTQlVTX1NVUFBPUlQKIHN0YXRpYyBpcnFyZXR1cm5fdCBzbmRfY3M0MjMxX3NidXNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJY3M0MjMxX3QgKmNoaXAgPSBkZXZfaWQ7Ci0JdTMyIGNzcjsKLQotCWNzciA9IHNidXNfcmVhZGwoY2hpcC0+cG9ydCArIEFQQ0NTUik7Ci0JaWYgKCEoY3NyICYgKEFQQ19JTlRfUEVORElORyB8Ci0JCSAgICAgQVBDX1BMQVlfSU5UIHwKLQkJICAgICBBUENfQ0FQVF9JTlQgfAotCQkgICAgIEFQQ19HRU5MX0lOVCB8Ci0JCSAgICAgQVBDX1hJTlRfUEVNUCB8Ci0JCSAgICAgQVBDX1hJTlRfQ0VNUCkpKQotCQlyZXR1cm4gSVJRX05PTkU7CiAKIAkvKiBBQ0sgdGhlIEFQQyBpbnRlcnJ1cHQuICovCisJdTMyIGNzciA9IHNidXNfcmVhZGwoY2hpcC0+cG9ydCArIEFQQ0NTUik7CisKIAlzYnVzX3dyaXRlbChjc3IsIGNoaXAtPnBvcnQgKyBBUENDU1IpOwogCi0Jc25kX2NzNDIzMV9nZW5lcmljX2ludGVycnVwdChjaGlwKTsKKwlpZiAoKGNoaXAtPmltYWdlW0NTNDIzMV9JRkFDRV9DVFJMXSAmIENTNDIzMV9QTEFZQkFDS19FTkFCTEUpICYmCisJICAgIChjc3IgJiBBUENfUExBWV9JTlQpICYmCisJICAgIChjc3IgJiBBUENfWElOVF9QTlZBKSAmJgorCSAgICAhKGNzciAmIEFQQ19YSU5UX0VNUFQpKSB7CisJCXNuZF9jczQyMzFfc2J1c19hZHZhbmNlX2RtYShjaGlwLT5wbGF5YmFja19zdWJzdHJlYW0sCisJCQkJCSAgICAmY2hpcC0+cF9wZXJpb2RzX3NlbnQpOworCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbSk7CisJfQogCi0JcmV0dXJuIElSUV9IQU5ETEVEOworCWlmICgoY2hpcC0+aW1hZ2VbQ1M0MjMxX0lGQUNFX0NUUkxdICYgQ1M0MjMxX1JFQ09SRF9FTkFCTEUpICYmCisJICAgIChjc3IgJiBBUENfQ0FQVF9JTlQpICYmCisJICAgIChjc3IgJiBBUENfWElOVF9DTlZBKSkgeworCQlzbmRfY3M0MjMxX3NidXNfYWR2YW5jZV9kbWEoY2hpcC0+Y2FwdHVyZV9zdWJzdHJlYW0sCisJCQkJCSAgICAmY2hpcC0+Y19wZXJpb2RzX3NlbnQpOworCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtKTsKKwl9CisKKwlyZXR1cm4gc25kX2NzNDIzMV9nZW5lcmljX2ludGVycnVwdChjaGlwKTsKIH0KICNlbmRpZgogCkBAIC0xMjkwLDcgKzEzMDEsOCBAQAogI2lmZGVmIEVCVVNfU1VQUE9SVAogCX0KICNlbmRpZgotCXB0ciArPSAocGVyaW9kX2J5dGVzIC0gcmVzaWR1ZSk7CisJcHRyICs9IHBlcmlvZF9ieXRlcyAtIHJlc2lkdWU7CisKIAlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHN1YnN0cmVhbS0+cnVudGltZSwgcHRyKTsKIH0KIApAQCAtMTMxNCw3ICsxMzI2LDcgQEAKICNpZmRlZiBFQlVTX1NVUFBPUlQKIAl9CiAjZW5kaWYKLQlwdHIgKz0gKHBlcmlvZF9ieXRlcyAtIHJlc2lkdWUpOworCXB0ciArPSBwZXJpb2RfYnl0ZXMgLSByZXNpZHVlOwogCXJldHVybiBieXRlc190b19mcmFtZXMoc3Vic3RyZWFtLT5ydW50aW1lLCBwdHIpOwogfQogCkBAIC0xMzI4LDkgKzEzNDAsNiBAQAogCWludCBpLCBpZCwgdmVyczsKIAl1bnNpZ25lZCBjaGFyICpwdHI7CiAKLSNpZiAwCi0Jc25kX2NzNDIzMV9kZWJ1ZyhjaGlwKTsKLSNlbmRpZgogCWlkID0gdmVycyA9IDA7CiAJZm9yIChpID0gMDsgaSA8IDUwOyBpKyspIHsKIAkJbWIoKTsKQEAgLTE5ODUsMTMgKzE5OTQsMTMgQEAKIAljaGlwLT5wb3J0ID0gc2J1c19pb3JlbWFwKCZzZGV2LT5yZXNvdXJjZVswXSwgMCwKIAkJCQkgIGNoaXAtPnJlZ3Nfc2l6ZSwgImNzNDIzMSIpOwogCWlmICghY2hpcC0+cG9ydCkgewotCQlzbmRfcHJpbnRrKCJjczQyMzEtJWQ6IFVuYWJsZSB0byBtYXAgY2hpcCByZWdpc3RlcnMuXG4iLCBkZXYpOworCQlzbmRfcHJpbnRkZCgiY3M0MjMxLSVkOiBVbmFibGUgdG8gbWFwIGNoaXAgcmVnaXN0ZXJzLlxuIiwgZGV2KTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJaWYgKHJlcXVlc3RfaXJxKHNkZXYtPmlycXNbMF0sIHNuZF9jczQyMzFfc2J1c19pbnRlcnJ1cHQsCiAJCQlTQV9TSElSUSwgImNzNDIzMSIsIGNoaXApKSB7Ci0JCXNuZF9wcmludGsoImNzNDIzMS0lZDogVW5hYmxlIHRvIGdyYWIgU0JVUyBJUlEgJXNcbiIsCisJCXNuZF9wcmludGRkKCJjczQyMzEtJWQ6IFVuYWJsZSB0byBncmFiIFNCVVMgSVJRICVzXG4iLAogCQkJICAgZGV2LAogCQkJICAgX19pcnFfaXRvYShzZGV2LT5pcnFzWzBdKSk7CiAJCXNuZF9jczQyMzFfc2J1c19mcmVlKGNoaXApOwpAQCAtMjExMywyOSArMjEyMiwyOSBAQAogCWNoaXAtPmViMmMucmVncyA9IGlvcmVtYXAoZWRldi0+cmVzb3VyY2VbMl0uc3RhcnQsIDB4MTApOwogCWlmICghY2hpcC0+cG9ydCB8fCAhY2hpcC0+ZWIycC5yZWdzIHx8ICFjaGlwLT5lYjJjLnJlZ3MpIHsKIAkJc25kX2NzNDIzMV9lYnVzX2ZyZWUoY2hpcCk7Ci0JCXNuZF9wcmludGsoImNzNDIzMS0lZDogVW5hYmxlIHRvIG1hcCBjaGlwIHJlZ2lzdGVycy5cbiIsIGRldik7CisJCXNuZF9wcmludGRkKCJjczQyMzEtJWQ6IFVuYWJsZSB0byBtYXAgY2hpcCByZWdpc3RlcnMuXG4iLCBkZXYpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlpZiAoZWJ1c19kbWFfcmVnaXN0ZXIoJmNoaXAtPmViMmMpKSB7CiAJCXNuZF9jczQyMzFfZWJ1c19mcmVlKGNoaXApOwotCQlzbmRfcHJpbnRrKCJjczQyMzEtJWQ6IFVuYWJsZSB0byByZWdpc3RlciBFQlVTIGNhcHR1cmUgRE1BXG4iLCBkZXYpOworCQlzbmRfcHJpbnRkZCgiY3M0MjMxLSVkOiBVbmFibGUgdG8gcmVnaXN0ZXIgRUJVUyBjYXB0dXJlIERNQVxuIiwgZGV2KTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJaWYgKGVidXNfZG1hX2lycV9lbmFibGUoJmNoaXAtPmViMmMsIDEpKSB7CiAJCXNuZF9jczQyMzFfZWJ1c19mcmVlKGNoaXApOwotCQlzbmRfcHJpbnRrKCJjczQyMzEtJWQ6IFVuYWJsZSB0byBlbmFibGUgRUJVUyBjYXB0dXJlIElSUVxuIiwgZGV2KTsKKwkJc25kX3ByaW50ZGQoImNzNDIzMS0lZDogVW5hYmxlIHRvIGVuYWJsZSBFQlVTIGNhcHR1cmUgSVJRXG4iLCBkZXYpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCWlmIChlYnVzX2RtYV9yZWdpc3RlcigmY2hpcC0+ZWIycCkpIHsKIAkJc25kX2NzNDIzMV9lYnVzX2ZyZWUoY2hpcCk7Ci0JCXNuZF9wcmludGsoImNzNDIzMS0lZDogVW5hYmxlIHRvIHJlZ2lzdGVyIEVCVVMgcGxheSBETUFcbiIsIGRldik7CisJCXNuZF9wcmludGRkKCJjczQyMzEtJWQ6IFVuYWJsZSB0byByZWdpc3RlciBFQlVTIHBsYXkgRE1BXG4iLCBkZXYpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAlpZiAoZWJ1c19kbWFfaXJxX2VuYWJsZSgmY2hpcC0+ZWIycCwgMSkpIHsKIAkJc25kX2NzNDIzMV9lYnVzX2ZyZWUoY2hpcCk7Ci0JCXNuZF9wcmludGsoImNzNDIzMS0lZDogVW5hYmxlIHRvIGVuYWJsZSBFQlVTIHBsYXkgSVJRXG4iLCBkZXYpOworCQlzbmRfcHJpbnRkZCgiY3M0MjMxLSVkOiBVbmFibGUgdG8gZW5hYmxlIEVCVVMgcGxheSBJUlFcbiIsIGRldik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNiYXVkaW8uYyBiL3NvdW5kL3VzYi91c2JhdWRpby5jCmluZGV4IGQ1YWUyMDU1Li4yZWFkODc4IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNiYXVkaW8uYworKysgYi9zb3VuZC91c2IvdXNiYXVkaW8uYwpAQCAtMTQ0NCw5ICsxNDQ0LDkgQEAKIAkJCQlTTkRSVl9QQ01fSU5GT19CQVRDSCB8CiAJCQkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAogCQkJCVNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSLAotCS5idWZmZXJfYnl0ZXNfbWF4ID0JKDI1NioxMDI0KSwKKwkuYnVmZmVyX2J5dGVzX21heCA9CTEwMjQgKiAxMDI0LAogCS5wZXJpb2RfYnl0ZXNfbWluID0JNjQsCi0JLnBlcmlvZF9ieXRlc19tYXggPQkoMTI4KjEwMjQpLAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0JNTEyICogMTAyNCwKIAkucGVyaW9kc19taW4gPQkJMiwKIAkucGVyaW9kc19tYXggPQkJMTAyNCwKIH07CkBAIC0xNDU4LDkgKzE0NTgsOSBAQAogCQkJCVNORFJWX1BDTV9JTkZPX0JBVENIIHwKIAkJCQlTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CiAJCQkJU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIsCi0JLmJ1ZmZlcl9ieXRlc19tYXggPQkoMjU2KjEwMjQpLAorCS5idWZmZXJfYnl0ZXNfbWF4ID0JMTAyNCAqIDEwMjQsCiAJLnBlcmlvZF9ieXRlc19taW4gPQk2NCwKLQkucGVyaW9kX2J5dGVzX21heCA9CSgxMjgqMTAyNCksCisJLnBlcmlvZF9ieXRlc19tYXggPQk1MTIgKiAxMDI0LAogCS5wZXJpb2RzX21pbiA9CQkyLAogCS5wZXJpb2RzX21heCA9CQkxMDI0LAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JtaXhlcl9tYXBzLmMgYi9zb3VuZC91c2IvdXNibWl4ZXJfbWFwcy5jCmluZGV4IGYwNTUwMGIwLi5jMTI2NDQzIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNibWl4ZXJfbWFwcy5jCisrKyBiL3NvdW5kL3VzYi91c2JtaXhlcl9tYXBzLmMKQEAgLTIzOCw2ICsyMzgsMTYgQEAKIAkJLnNlbGVjdG9yX21hcCA9IGF1ZGlneTJueF9zZWxlY3RvcnMsCiAJfSwKIAl7CisJCS8qIEhlcmN1bGVzIERKIENvbnNvbGUgKFdpbmRvd3MgRWRpdGlvbikgKi8KKwkJLmlkID0gVVNCX0lEKDB4MDZmOCwgMHhiMDAwKSwKKwkJLmlnbm9yZV9jdGxfZXJyb3IgPSAxLAorCX0sCisJeworCQkvKiBIZXJjdWxlcyBESiBDb25zb2xlIChNYWNpbnRvc2ggRWRpdGlvbikgKi8KKwkJLmlkID0gVVNCX0lEKDB4MDZmOCwgMHhkMDAyKSwKKwkJLmlnbm9yZV9jdGxfZXJyb3IgPSAxLAorCX0sCisJewogCQkuaWQgPSBVU0JfSUQoMHgwOGJiLCAweDI3MDIpLAogCQkubWFwID0gbGluZXhfbWFwLAogCQkuaWdub3JlX2N0bF9lcnJvciA9IDEsCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNicXVpcmtzLmggYi9zb3VuZC91c2IvdXNicXVpcmtzLmgKaW5kZXggZjc0ZTY1Mi4uOTQ4NzU5ZCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYnF1aXJrcy5oCisrKyBiL3NvdW5kL3VzYi91c2JxdWlya3MuaApAQCAtMTE3LDYgKzExNywxMCBAQAogWUFNQUhBX0RFVklDRSgweDEwM2IsIE5VTEwpLAogWUFNQUhBX0RFVklDRSgweDEwM2MsIE5VTEwpLAogWUFNQUhBX0RFVklDRSgweDEwM2QsIE5VTEwpLAorWUFNQUhBX0RFVklDRSgweDEwM2UsIE5VTEwpLAorWUFNQUhBX0RFVklDRSgweDEwM2YsIE5VTEwpLAorWUFNQUhBX0RFVklDRSgweDEwNDAsIE5VTEwpLAorWUFNQUhBX0RFVklDRSgweDEwNDEsIE5VTEwpLAogWUFNQUhBX0RFVklDRSgweDIwMDAsICJER1AtNyIpLAogWUFNQUhBX0RFVklDRSgweDIwMDEsICJER1AtNSIpLAogWUFNQUhBX0RFVklDRSgweDIwMDIsIE5VTEwpLApAQCAtMTAxMCw2ICsxMDE0LDQwIEBACiAJCX0KIAl9CiB9LAoreworCVVTQl9ERVZJQ0VfVkVORE9SX1NQRUMoMHgwNTgyLCAweDAwN2EpLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmIChjb25zdCBzbmRfdXNiX2F1ZGlvX3F1aXJrX3QpIHsKKwkJLnZlbmRvcl9uYW1lID0gIlJvbGFuZCIsCisJCS8qIFJELTcwMFNYLCBSRC0zMDBTWCAqLworCQkuaWZudW0gPSAwLAorCQkudHlwZSA9IFFVSVJLX01JRElfRklYRURfRU5EUE9JTlQsCisJCS5kYXRhID0gJiAoY29uc3Qgc25kX3VzYl9taWRpX2VuZHBvaW50X2luZm9fdCkgeworCQkJLm91dF9jYWJsZXMgPSAweDAwMDMsCisJCQkuaW5fY2FibGVzICA9IDB4MDAwMworCQl9CisJfQorfSwKKworLyogR3VpbGxlbW90IGRldmljZXMgKi8KK3sKKwkvKgorCSAqIFRoaXMgaXMgZm9yIHRoZSAiV2luZG93cyBFZGl0aW9uIiB3aGVyZSB0aGUgZXh0ZXJuYWwgTUlESSBwb3J0cyBhcmUKKwkgKiB0aGUgb25seSBNSURJIHBvcnRzOyB0aGUgY29udHJvbCBkYXRhIGlzIHJlcG9ydGVkIHRocm91Z2ggSElECisJICogaW50ZXJmYWNlcy4gIFRoZSAiTWFjaW50b3NoIEVkaXRpb24iIGhhcyBJRCAweGQwMDIgYW5kIHVzZXMgc3RhbmRhcmQKKwkgKiBjb21wbGlhbnQgVVNCIE1JREkgcG9ydHMgZm9yIGV4dGVybmFsIE1JREkgYW5kIGNvbnRyb2xzLgorCSAqLworCVVTQl9ERVZJQ0VfVkVORE9SX1NQRUMoMHgwNmY4LCAweGIwMDApLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmIChjb25zdCBzbmRfdXNiX2F1ZGlvX3F1aXJrX3QpIHsKKwkJLnZlbmRvcl9uYW1lID0gIkhlcmN1bGVzIiwKKwkJLnByb2R1Y3RfbmFtZSA9ICJESiBDb25zb2xlIChXRSkiLAorCQkuaWZudW0gPSA0LAorCQkudHlwZSA9IFFVSVJLX01JRElfRklYRURfRU5EUE9JTlQsCisJCS5kYXRhID0gJiAoY29uc3Qgc25kX3VzYl9taWRpX2VuZHBvaW50X2luZm9fdCkgeworCQkJLm91dF9jYWJsZXMgPSAweDAwMDEsCisJCQkuaW5fY2FibGVzID0gMHgwMDAxCisJCX0KKwl9Cit9LAogCiAvKiBNaWRpbWFuL00tQXVkaW8gZGV2aWNlcyAqLwogewpAQCAtMTMzOSwxMCArMTM3NywyMCBAQAogCX0KIH0sCiAKKy8qIFRlcnJhVGVjIGRldmljZXMgKi8KK3sKKwlVU0JfREVWSUNFX1ZFTkRPUl9TUEVDKDB4MGNjZCwgMHgwMDEyKSwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJiAoY29uc3Qgc25kX3VzYl9hdWRpb19xdWlya190KSB7CisJCS52ZW5kb3JfbmFtZSA9ICJUZXJyYVRlYyIsCisJCS5wcm9kdWN0X25hbWUgPSAiUEhBU0UgMjYiLAorCQkuaWZudW0gPSAzLAorCQkudHlwZSA9IFFVSVJLX01JRElfU1RBTkRBUkRfSU5URVJGQUNFCisJfQorfSwKIHsKIAlVU0JfREVWSUNFX1ZFTkRPUl9TUEVDKDB4MGNjZCwgMHgwMDEzKSwKIAkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJiAoY29uc3Qgc25kX3VzYl9hdWRpb19xdWlya190KSB7Ci0JCS52ZW5kb3JfbmFtZSA9ICJUZXJyYXRlYyIsCisJCS52ZW5kb3JfbmFtZSA9ICJUZXJyYVRlYyIsCiAJCS5wcm9kdWN0X25hbWUgPSAiUEhBU0UgMjYiLAogCQkuaWZudW0gPSAzLAogCQkudHlwZSA9IFFVSVJLX01JRElfU1RBTkRBUkRfSU5URVJGQUNFCmRpZmYgLS1naXQgYS91c3IvLmdpdGlnbm9yZSBiL3Vzci8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMTg2YTgKLS0tIC9kZXYvbnVsbAorKysgYi91c3IvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDcgQEAKKyMKKyMgR2VuZXJhdGVkIGZpbGVzCisjCitnZW5faW5pdF9jcGlvCitpbml0cmFtZnNfZGF0YS5jcGlvCitpbml0cmFtZnNfZGF0YS5jcGlvLmd6Citpbml0cmFtZnNfbGlzdAo=